qtemu-2.0~alpha1/0000755000175000017500000000000011217515421013620 5ustar fboudrafboudraqtemu-2.0~alpha1/machineconfigobject.cpp0000644000175000017500000003370511200720440020304 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machineconfigobject.h" #include #include #include #include #include #include #include MachineConfigObject::MachineConfigObject(QObject *parent, MachineConfig *config) : QObject(parent) , myConfig(0) { setConfig(config); connect(config, SIGNAL(optionChanged(QString, QString, QString, QVariant)),this,SLOT(configChanged(QString, QString, QString, QVariant))); } MachineConfigObject::~MachineConfigObject() { } /** sets the config object to use (config file object) */ void MachineConfigObject::setConfig(MachineConfig * config) { if(config!=0) myConfig = config; else myConfig = new MachineConfig(this); } /** get an option from the config file */ QVariant MachineConfigObject::getOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &defaultValue) { return myConfig->getOption(nodeType, nodeName, optionName, defaultValue); } /** get an option from the config file using the short syntax */ QVariant MachineConfigObject::getOption(const QString &optionName, const QVariant &defaultValue) { return getOption("machine", QString(), optionName, defaultValue); } /** sets an option in the config file */ void MachineConfigObject::setOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value) { myConfig->setOption(nodeType, nodeName, optionName, value); } /** set an option in the config file using the short syntax */ void MachineConfigObject::setOption(const QString &optionName, const QVariant &value) { setOption("machine", QString(), optionName, value); } /** add an object to the list along with the config option it uses, stored in the object as a property. */ void MachineConfigObject::registerObject(QObject *object, const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &defaultValue) { object->setProperty("nodeType", nodeType); object->setProperty("nodeName", nodeName); if(optionName.isEmpty()) { //dealing with an object with multiple properties //add all properties in the config under this node name/type QStringList options = myConfig->getAllOptionNames(nodeType, nodeName); for(int i=0;isetProperty(options.at(i).toAscii(), myConfig->getOption(nodeType, nodeName, options.at(i))); } //add event filter object->installEventFilter(this); } else { //object with one property object->setProperty("optionName", optionName); //set object value setObjectValue(object, nodeType, nodeName, optionName, defaultValue); //connect signals/slots - based on type } registeredObjects.append(object); } /** registers an object using the short syntax */ void MachineConfigObject::registerObject(QObject *object, const QString &optionName, const QVariant &defaultValue) { registerObject(object, "machine", QString(), optionName, defaultValue); } /** unregister an object */ void MachineConfigObject::unregisterObject(QObject *object) { if(object->property("optionName") == QVariant()) { QStringList options = myConfig->getAllOptionNames(object->property("nodeType").toString(), object->property("nodeName").toString()); for(int i=0;isetProperty(options.at(i).toAscii(), QVariant()); } object->removeEventFilter(this); } else object->setProperty("optionName", QVariant()); object->setProperty("nodeType", QVariant()); object->setProperty("nodeName", QVariant()); registeredObjects.removeAll(object); } /** set an object's property to the value of its associated config option, or default */ void MachineConfigObject::setObjectValue(QObject * object, const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &defaultValue) { //get the value from the config QVariant value = getOption(nodeType, nodeName, optionName, defaultValue); #ifdef DEVELOPER //qDebug("setting object for " + optionName.toAscii() + " to " + value.toByteArray()); #endif //disconnect so that we don't go in a loop forever //set the object's value, analyzing its type / properties to determine how to do so. //multiple property object if(object->property("optionName").isNull()) { object->removeEventFilter(this); if(object->property(optionName.toAscii()) != value) object->setProperty(optionName.toAscii(), value); object->installEventFilter(this); } //QButtonGroup handling is tricky... else if(object->inherits("QButtonGroup")) { object->disconnect(this); QButtonGroup *group = static_cast(object); QList buttons = group->buttons(); for(int i=0;iproperty("value").toString().isEmpty()) && buttons.at(i)->text() == value.toString()) || buttons.at(i)->property("value") == value) { if(object->property("checked").toBool() != true) buttons.at(i)->setProperty("checked", true); } else { if(object->property("checked").toBool() != false) buttons.at(i)->setProperty("checked", false); } } connect(object, SIGNAL(buttonClicked(QAbstractButton *)), this, SLOT(getObjectValue())); } else if(object->inherits("QComboBox")) { object->disconnect(this); QComboBox *thisBox = static_cast(object); int index; if(thisBox->findData(value) == -1) index = thisBox->findText(value.toString()); else index = thisBox->findData(value); if(index!=-1 && object->property("currentIndex").toInt() != index) object->setProperty("currentIndex", index); else if(thisBox->currentText() != value.toString() && thisBox->itemData(thisBox->currentIndex()) != value) thisBox->setEditText(value.toString()); connect(object, SIGNAL(currentIndexChanged(int)), this, SLOT(getObjectValue())); connect(object, SIGNAL(editTextChanged(QString)), this, SLOT(getObjectValue())); } else if (object->inherits("QRadioButton")) { object->disconnect(this); if(object->property("value") == value && object->property("checked").toBool() != true) object->setProperty("checked", true); else if (object->property("value").isNull() && object->property("checked") != value) object->setProperty("checked", value); connect(object, SIGNAL(toggled(bool)), this, SLOT(getObjectValue())); } else if (object->inherits("QAbstractButton")||object->inherits("QAction")) { object->disconnect(this); object->setProperty("checkable", true); if(object->property("valueIfTrue").isNull()) { if(object->property("checked") != value) object->setProperty("checked", value); } else { if(object->property("valueIfTrue") != value) object->setProperty("checked", false); else object->setProperty("checked", true); } connect(object, SIGNAL(toggled(bool)), this, SLOT(getObjectValue())); } else if (object->inherits("QSpinBox")||object->inherits("QAbstractSlider")) { object->disconnect(this); if(object->property("value") != value) object->setProperty("value", value); connect(object, SIGNAL(valueChanged(int)), this, SLOT(getObjectValue())); } else if (object->inherits("QLineEdit")) { object->disconnect(this); if(object->property("text") != value) object->setProperty("text", value); connect(object, SIGNAL(textChanged(QString)), this, SLOT(getObjectValue())); } else if (object->inherits("QTextEdit")) { object->disconnect(this); if(object->property("plainText") != value) object->setProperty("plainText", value); connect(object, SIGNAL(textChanged()), this, SLOT(getObjectValue())); } else if (object->inherits("QWidget") && object->property("enableDisable").toBool() == true) { //if the "enableDisable" property is set to true, we want to enable or disable the widget. QWidget *thisWidget = static_cast(object); thisWidget->setEnabled(value.toBool()); } else { //if it's none of those... we don't know what it is yet. //qDebug("unknown object type" + QByteArray(object->metaObject()->className())); //we set a single property (the option name) to the value. object->removeEventFilter(this); object->setProperty(optionName.toAscii(), value); object->installEventFilter(this); } //qDebug("set!"); } /** event handler for intercepting changes in objects with multiple properties */ bool MachineConfigObject::eventFilter(QObject * object, QEvent * event) { if (event->type() == QEvent::DynamicPropertyChange) { QDynamicPropertyChangeEvent *myEvent = static_cast(event); QString nodeType; QString nodeName; QString optionName; QVariant value; nodeType = object->property("nodeType").toString(); nodeName = object->property("nodeName").toString(); optionName = myEvent->propertyName(); value = object->property(optionName.toAscii()); //save the option to the config setOption(nodeType, nodeName, optionName, value); } // allow further processing return false; } /** get the value of the calling object and sets the value of the associated config option */ void MachineConfigObject::getObjectValue() { QVariant value; QObject *object = sender(); //get value from the object, analyzing its type / properties to determine how to do so. if (object->inherits("QButtonGroup")) { QButtonGroup *group = static_cast(object); if(group->checkedButton()->property("value").toString().isEmpty()) value = group->checkedButton()->text(); else value = group->checkedButton()->property("value"); } else if(object->inherits("QComboBox")) { QComboBox *thisCombo = static_cast(object); if(!thisCombo->itemData(thisCombo->currentIndex()).isNull()) value = thisCombo->itemData(thisCombo->currentIndex()); else value = object->property("currentText"); } else if (object->inherits("QRadioButton")) { if(object->property("checked").toBool() && object->property("value").isValid()) value = object->property("value"); else if(object->property("value").isNull()) value = object->property("checked"); } else if (object->inherits("QAbstractButton")||object->inherits("QAction")) { if(object->property("valueIfTrue").isNull()) value = object->property("checked"); else if(object->property("checked").toBool()) value = object->property("valueIfTrue"); else value = object->property("valueIfFalse"); } else if (object->inherits("QSpinBox")||object->inherits("QAbstractSlider")) { value = object->property("value"); } else if (object->inherits("QLineEdit")) { value = object->property("text"); } else if (object->inherits("QTextEdit")) { value = object->property("plainText"); } else { //if it's none of those... we don't know what it is yet. qDebug("unknown object type" + QByteArray(object->metaObject()->className())); } //save the option to the config if(value.isValid()) { setOption(object->property("nodeType").toString(), object->property("nodeName").toString(), object->property("optionName").toString(), value); } } /** slot is activated if there is a config change */ void MachineConfigObject::configChanged(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value) { QObject *object; for(int i=0;iproperty("nodeType").toString(); QString thisNodeName = object->property("nodeName").toString(); QString thisOptionName = object->property("optionName").toString(); if(( thisNodeType == nodeType ) && ( thisNodeName == nodeName || thisNodeName.isEmpty() ) && ( thisOptionName.isEmpty() || thisOptionName == optionName )) { setObjectValue(object, nodeType, nodeName, optionName, value); } } } /** gets the config object used (config file object) */ MachineConfig * MachineConfigObject::getConfig() { return myConfig; } qtemu-2.0~alpha1/machineconfigobject.h0000644000175000017500000000676611051336771017776 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINECONFIGOBJECT_H #define MACHINECONFIGOBJECT_H #include #include #include #include "machineconfig.h" /** @author Ben Klopfenstein */ class MachineConfigObject : public QObject { Q_OBJECT public: explicit MachineConfigObject(QObject *parent = 0, MachineConfig *config = 0); ~MachineConfigObject(); /** add an object to the list along with the config option it uses, stored in the object as a property. */ void registerObject(QObject *object, const QString &nodeType, const QString &nodeName, const QString &optionName = QString(), const QVariant &defaultValue = QVariant()); /** registers an object using the short syntax */ void registerObject(QObject *object, const QString &optionName = QString(), const QVariant &defaultValue = QVariant()); /** unregister an object */ void unregisterObject(QObject *object); /** event handler for intercepting changes in objects with multiple properties */ bool eventFilter(QObject *object, QEvent *event); /** sets the config object to use (config file object) */ void setConfig(MachineConfig *config); /** gets the config object used (config file object) */ MachineConfig* getConfig(); /** get an option from the config file */ QVariant getOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &defaultValue); /** get an option from the config file using the short syntax */ QVariant getOption(const QString &optionName, const QVariant &defaultValue = QVariant()); public slots: /** sets an option in the config file */ void setOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value); /** set an option in the config file using the short syntax */ void setOption(const QString &optionName, const QVariant &value); /** slot is activated if there is a config change */ void configChanged(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value); /** get the value of the calling object and sets the value of the associated config option */ void getObjectValue(); private: QList registeredObjects; MachineConfig *myConfig; /** set an object to the value of its associated config option, or default */ void setObjectValue(QObject *object, const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &defaultValue = QVariant()); }; #endif qtemu-2.0~alpha1/usbmodel.h0000644000175000017500000000334211165172062015607 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef USBMODEL_H #define USBMODEL_H #include #include "halobject.h" class MachineConfigObject; class UsbModel : public QStandardItemModel { Q_OBJECT public: UsbModel(MachineConfigObject * config, QObject * parent); private: void getUsbDevices(); void loadConfig(); void checkDevice(QString deviceName); void addItem(QString deviceName, QString id); MachineConfigObject *config; HalObject *hal; private slots: void getChange(QStandardItem * item); void deviceAdded(QString name, UsbDevice device); void deviceRemoved(QString name, UsbDevice device); signals: void vmDeviceAdded(QString identifier); void vmDeviceRemoved(QString identifier); }; #endif // USBMODEL_H qtemu-2.0~alpha1/floatingtoolbar.cpp0000644000175000017500000003506611067374203017530 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2007-2008 Urs Wolfer ** Parts of this file have been take from okular: ** Copyright (C) 2004-2005 Enrico Ros ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "floatingtoolbar.h" #ifndef QTONLY #include #else #include #define kDebug(n) qDebug() #endif #include #include #include #include #include #include static const int actionIconSize = 22; static const int toolBarRBMargin = 2; static const double toolBarOpacity = 0.8; static const int visiblePixelWhenAutoHidden = 6; static const int autoHideTimeout = 500; static const int initialAutoHideTimeout = 2000; /** * Denotes the verious states of the animation. */ enum AnimState { Hiding, Showing, Still }; class FloatingToolBarPrivate { public: FloatingToolBarPrivate(FloatingToolBar *qq) : q(qq) , anchorSide(FloatingToolBar::Left) , offsetPlaceHolder(new QWidget(qq)) , animState(Still) , toDelete(false) , visible(false) , sticky(false) , opacity(toolBarOpacity) , queuedShow(false) { } // rebuild contents and reposition then widget void buildToolBar(); void reposition(); // compute the visible and hidden positions along current side QPoint getInnerPoint() const; QPoint getOuterPoint() const; FloatingToolBar *q; QWidget *anchorWidget; FloatingToolBar::Side anchorSide; QWidget *offsetPlaceHolder; QTimer *animTimer; QTimer *autoHideTimer; QPoint currentPosition; QPoint endPosition; AnimState animState; bool toDelete; bool visible; bool sticky; qreal opacity; bool queuedShow; QPixmap backgroundPixmap; }; FloatingToolBar::FloatingToolBar(QWidget *parent, QWidget *anchorWidget) : QToolBar(parent), d(new FloatingToolBarPrivate(this)) { ; addWidget(d->offsetPlaceHolder); setMouseTracking(true); setIconSize(QSize(actionIconSize, actionIconSize)); d->anchorWidget = anchorWidget; d->animTimer = new QTimer(this); connect(d->animTimer, SIGNAL(timeout()), this, SLOT(animate())); d->autoHideTimer = new QTimer(this); connect(d->autoHideTimer, SIGNAL(timeout()), this, SLOT(hide())); // apply a filter to get notified when anchor changes geometry d->anchorWidget->installEventFilter(this); } FloatingToolBar::~FloatingToolBar() { delete d; } void FloatingToolBar::addAction(QAction *action) { QToolBar::addAction(action); // rebuild toolbar shape and contents only if the toolbar is already visible, // otherwise it will be done in showAndAnimate() if (isVisible()) d->reposition(); } void FloatingToolBar::setSide(Side side) { d->anchorSide = side; if (isVisible()) d->reposition(); } void FloatingToolBar::setSticky(bool sticky) { d->sticky = sticky; if (sticky) d->autoHideTimer->stop(); } void FloatingToolBar::showAndAnimate() { QDesktopWidget *desktop = QApplication::desktop(); int currentScreen = desktop->screenNumber(d->anchorWidget); if ((d->anchorWidget->size() != desktop->screenGeometry(currentScreen).size())) { kDebug(5010) << "anchorWidget not fullscreen yet"; d->queuedShow = true; return; } if (d->animState == Showing) return; d->animState = Showing; show(); // force update for case when toolbar has not been built yet d->reposition(); // start scrolling in d->animTimer->start(20); // This permits to show the toolbar for a while when going full screen. if (!d->sticky) d->autoHideTimer->start(initialAutoHideTimeout); } void FloatingToolBar::hideAndDestroy() { if (d->animState == Hiding) return; // set parameters for sliding out d->animState = Hiding; d->toDelete = true; d->endPosition = d->getOuterPoint(); // start scrolling out d->animTimer->start(20); } void FloatingToolBar::hide() { if (underMouse()) return; if (d->visible) { QPoint diff; switch (d->anchorSide) { case Left: diff = QPoint(visiblePixelWhenAutoHidden, 0); break; case Right: diff = QPoint(-visiblePixelWhenAutoHidden, 0); break; case Top: diff = QPoint(0, visiblePixelWhenAutoHidden); break; case Bottom: diff = QPoint(0, -visiblePixelWhenAutoHidden); break; } d->animState = Hiding; d->endPosition = d->getOuterPoint() + diff; // start scrolling out d->animTimer->start(20); } } bool FloatingToolBar::eventFilter(QObject *obj, QEvent *e) { if (obj == d->anchorWidget && e->type() == QEvent::Resize) { if (d->queuedShow) { // if the toolbar is not visible yet, try to show it if the anchor widget is in fullscreen already d->queuedShow = false; showAndAnimate(); return true; } // if anchorWidget changed geometry reposition toolbar d->animTimer->stop(); if ((d->animState == Hiding || !d->visible) && d->toDelete) deleteLater(); else d->reposition(); } return QToolBar::eventFilter(obj, e); } void FloatingToolBar::paintEvent(QPaintEvent *e) { QToolBar::paintEvent(e); // paint the internal pixmap over the widget QPainter p(this); p.setOpacity(d->opacity); p.drawImage(e->rect().topLeft(), d->backgroundPixmap.toImage(), e->rect()); } void FloatingToolBar::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) setCursor(Qt::SizeAllCursor); QToolBar::mousePressEvent(e); } void FloatingToolBar::mouseMoveEvent(QMouseEvent *e) { // show the toolbar again when it is auto-hidden if (!d->visible) { showAndAnimate(); return; } if ((QApplication::mouseButtons() & Qt::LeftButton) != Qt::LeftButton) return; // compute the nearest side to attach the widget to const QPoint parentPos = mapToParent(e->pos()); const float nX = (float)parentPos.x() / (float)d->anchorWidget->width(); const float nY = (float)parentPos.y() / (float)d->anchorWidget->height(); if (nX > 0.3 && nX < 0.7 && nY > 0.3 && nY < 0.7) return; bool LT = nX < (1.0 - nY); bool LB = nX < (nY); Side side = LT ? (LB ? Left : Top) : (LB ? Bottom : Right); // check if side changed if (side == d->anchorSide) return; d->anchorSide = side; d->reposition(); emit orientationChanged((int)side); QToolBar::mouseMoveEvent(e); } void FloatingToolBar::enterEvent(QEvent *e) { // Stop the autohide timer while the mouse is inside d->autoHideTimer->stop(); if (!d->visible) showAndAnimate(); QToolBar::enterEvent(e); } void FloatingToolBar::leaveEvent(QEvent *e) { if (!d->sticky) d->autoHideTimer->start(autoHideTimeout); QToolBar::leaveEvent(e); } void FloatingToolBar::mouseReleaseEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) setCursor(Qt::ArrowCursor); QToolBar::mouseReleaseEvent(e); } void FloatingToolBar::wheelEvent(QWheelEvent *e) { e->accept(); const qreal diff = e->delta() / 100.0 / 15.0; // kDebug(5010) << diff; if (((d->opacity <= 1) && (diff > 0)) || ((d->opacity >= 0) && (diff < 0))) d->opacity += diff; update(); QToolBar::wheelEvent(e); } void FloatingToolBarPrivate::buildToolBar() { const bool prevUpdates = q->updatesEnabled(); q->setUpdatesEnabled(false); // 1. init numbers we are going to use const bool topLeft = anchorSide == FloatingToolBar::Left || anchorSide == FloatingToolBar::Top; const bool vertical = anchorSide == FloatingToolBar::Left || anchorSide == FloatingToolBar::Right; if (anchorSide == FloatingToolBar::Left || anchorSide == FloatingToolBar::Right) { offsetPlaceHolder->setFixedSize(1, 7); q->setOrientation(Qt::Vertical); } else { offsetPlaceHolder->setFixedSize(7, 1); q->setOrientation(Qt::Horizontal); } // 2. compute widget size const int myWidth = q->sizeHint().width() - 1; const int myHeight = q->sizeHint().height() - 1; // 3. resize pixmap, mask and widget QBitmap mask(myWidth + 1, myHeight + 1); backgroundPixmap = QPixmap(myWidth + 1, myHeight + 1); backgroundPixmap.fill(Qt::transparent); q->resize(myWidth + 1, myHeight + 1); // 4. create and set transparency mask QPainter maskPainter(&mask); mask.fill(Qt::white); maskPainter.setBrush(Qt::black); if (vertical) maskPainter.drawRoundRect(topLeft ? -10 : 0, 0, myWidth + 10, myHeight, 2000 / (myWidth + 10), 2000 / myHeight); else maskPainter.drawRoundRect(0, topLeft ? -10 : 0, myWidth, myHeight + 10, 2000 / myWidth, 2000 / (myHeight + 10)); maskPainter.end(); q->setMask(mask); // 5. draw background QPainter bufferPainter(&backgroundPixmap); bufferPainter.translate(0.5, 0.5); QPalette pal = q->palette(); // 5.1. draw horizontal/vertical gradient QLinearGradient grad; switch (anchorSide) { case FloatingToolBar::Left: grad = QLinearGradient(0, 1, myWidth + 1, 1); break; case FloatingToolBar::Right: grad = QLinearGradient(myWidth + 1, 1, 0, 1); break; case FloatingToolBar::Top: grad = QLinearGradient(1, 0, 1, myHeight + 1); break; case FloatingToolBar::Bottom: grad = QLinearGradient(1, myHeight + 1, 0, 1); break; } grad.setColorAt(0, pal.color(QPalette::Active, QPalette::Button)); grad.setColorAt(1, pal.color(QPalette::Active, QPalette::Light)); bufferPainter.setBrush(QBrush(grad)); // 5.2. draw rounded border bufferPainter.setPen( pal.color(QPalette::Active, QPalette::Dark).lighter(40)); bufferPainter.setRenderHints(QPainter::Antialiasing); if (vertical) bufferPainter.drawRoundRect(topLeft ? -10 : 0, 0, myWidth + 10, myHeight, 2000 / (myWidth + 10), 2000 / myHeight); else bufferPainter.drawRoundRect(0, topLeft ? -10 : 0, myWidth, myHeight + 10, 2000 / myWidth, 2000 / (myHeight + 10)); // 5.3. draw handle bufferPainter.translate(-0.5, -0.5); bufferPainter.setPen(pal.color(QPalette::Active, QPalette::Mid)); if (vertical) { int dx = anchorSide == FloatingToolBar::Left ? 2 : 4; bufferPainter.drawLine(dx, 6, dx + myWidth - 8, 6); bufferPainter.drawLine(dx, 9, dx + myWidth - 8, 9); bufferPainter.setPen(pal.color(QPalette::Active, QPalette::Light)); bufferPainter.drawLine(dx + 1, 7, dx + myWidth - 7, 7); bufferPainter.drawLine(dx + 1, 10, dx + myWidth - 7, 10); } else { int dy = anchorSide == FloatingToolBar::Top ? 2 : 4; bufferPainter.drawLine(6, dy, 6, dy + myHeight - 8); bufferPainter.drawLine(9, dy, 9, dy + myHeight - 8); bufferPainter.setPen(pal.color(QPalette::Active, QPalette::Light)); bufferPainter.drawLine(7, dy + 1, 7, dy + myHeight - 7); bufferPainter.drawLine(10, dy + 1, 10, dy + myHeight - 7); } q->setUpdatesEnabled(prevUpdates); } void FloatingToolBarPrivate::reposition() { // note: hiding widget here will gives better gfx, but ends drag operation // rebuild widget and move it to its final place buildToolBar(); if (!visible) { currentPosition = getOuterPoint(); endPosition = getInnerPoint(); } else { currentPosition = getInnerPoint(); endPosition = getOuterPoint(); } q->move(currentPosition); } QPoint FloatingToolBarPrivate::getInnerPoint() const { // returns the final position of the widget if (anchorSide == FloatingToolBar::Left) return QPoint(0, (anchorWidget->height() - q->height()) / 2); if (anchorSide == FloatingToolBar::Top) return QPoint((anchorWidget->width() - q->width()) / 2, 0); if (anchorSide == FloatingToolBar::Right) return QPoint(anchorWidget->width() - q->width() + toolBarRBMargin, (anchorWidget->height() - q->height()) / 2); return QPoint((anchorWidget->width() - q->width()) / 2, anchorWidget->height() - q->height() + toolBarRBMargin); } QPoint FloatingToolBarPrivate::getOuterPoint() const { // returns the point from which the transition starts if (anchorSide == FloatingToolBar::Left) return QPoint(-q->width(), (anchorWidget->height() - q->height()) / 2); if (anchorSide == FloatingToolBar::Top) return QPoint((anchorWidget->width() - q->width()) / 2, -q->height()); if (anchorSide == FloatingToolBar::Right) return QPoint(anchorWidget->width() + toolBarRBMargin, (anchorWidget->height() - q->height()) / 2); return QPoint((anchorWidget->width() - q->width()) / 2, anchorWidget->height() + toolBarRBMargin); } void FloatingToolBar::animate() { // move currentPosition towards endPosition int dX = d->endPosition.x() - d->currentPosition.x(); int dY = d->endPosition.y() - d->currentPosition.y(); dX = dX / 6 + qMax(-1, qMin(1, dX)); dY = dY / 6 + qMax(-1, qMin(1, dY)); d->currentPosition.setX(d->currentPosition.x() + dX); d->currentPosition.setY(d->currentPosition.y() + dY); move(d->currentPosition); // handle arrival to the end if (d->currentPosition == d->endPosition) { d->animTimer->stop(); switch (d->animState) { case Hiding: d->visible = false; d->animState = Still; if (d->toDelete) deleteLater(); break; case Showing: d->visible = true; d->animState = Still; break; default: kDebug(5010) << "Illegal state"; } } } qtemu-2.0~alpha1/qtemuenvironment.h0000644000175000017500000000311011165172062017406 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef QTEMUENVIRONMENT_H #define QTEMUENVIRONMENT_H /** @author Ben Klopfenstein */ class HalObject; class QtEmuEnvironment{ public: QtEmuEnvironment(); ~QtEmuEnvironment(); ///returned as an array with 3 members: major version, minor version, and bugfix version. static int* getQemuVersion(); ///just a plain old number static int getKvmVersion(); static HalObject* getHal(); private: static void getVersion(); static int qemuVersion[3]; static int kvmVersion; static bool versionChecked; static HalObject *hal; }; #endif qtemu-2.0~alpha1/configwindow.cpp0000644000175000017500000002151611214661625017033 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "configwindow.h" #include "config.h" #include #include #include #include #include #include #include #include #include #include #include ConfigWindow::ConfigWindow(const QString &myMachinesPathParent, int tabPosition, QWidget *parent) : QDialog((QWidget*)parent) { myMachinesPath = myMachinesPathParent; setWindowTitle(tr("QtEmu Config")); resize(400, 200); setSizeGripEnabled(true); QGroupBox *generalGroupBox = new QGroupBox(tr("General"), this); QLabel *myMachinesPathLabel = new QLabel(tr("Default \"MyMachines\" Path:")); myMachinePathLineEdit = new QLineEdit(myMachinesPath); myMachinesPathLabel->setBuddy(myMachinePathLineEdit); QSettings settings("QtEmu", "QtEmu"); QString iconTheme = settings.value("iconTheme", "oxygen").toString(); QPushButton *pathSelectButton = new QPushButton(QIcon(":/images/" + iconTheme + "/open.png"), QString()); connect(pathSelectButton, SIGNAL(clicked()), this, SLOT(setNewPath())); QHBoxLayout *pathLayout = new QHBoxLayout; pathLayout->addWidget(myMachinePathLineEdit); pathLayout->addWidget(pathSelectButton); QLabel *tabPositionLabel = new QLabel(tr("Tabbar position:")); comboTabPosition = new QComboBox; comboTabPosition->addItem(tr("Top")); comboTabPosition->addItem(tr("Bottom")); comboTabPosition->addItem(tr("Left")); comboTabPosition->addItem(tr("Right")); comboTabPosition->setCurrentIndex(tabPosition); tabPositionLabel->setBuddy(comboTabPosition); QLabel *iconThemeLabel = new QLabel(tr("Icon theme (*):")); comboIconTheme = new QComboBox; comboIconTheme->addItem("Oxygen"); comboIconTheme->addItem("Crystal"); comboIconTheme->setCurrentIndex(tabPosition); iconThemeLabel->setBuddy(comboIconTheme); QLabel *languageLabel = new QLabel(tr("Language (*):")); languagePosition = new QComboBox; //make the language name not tranlatable (no tr()!) and write them translated languagePosition->addItem("English"); languagePosition->addItem("Deutsch"); languagePosition->addItem(QString::fromUtf8("Türkçe")); languagePosition->addItem(QString::fromUtf8("Русский")); languagePosition->addItem(QString::fromUtf8("Česky")); languagePosition->addItem(QString::fromUtf8("Español")); languagePosition->addItem(QString::fromUtf8("Français")); languagePosition->addItem(QString::fromUtf8("Italiano")); languagePosition->addItem(QString::fromUtf8("Português do Brasil")); languagePosition->addItem(QString::fromUtf8("Polski")); QString language = settings.value("language", QString(QLocale::system().name())).toString(); int index; if (language == "en") index = 0; else if (language == "de") index = 1; else if (language == "tr") index = 2; else if (language == "ru") index = 3; else if (language == "cz") index = 4; else if (language == "es") index = 5; else if (language == "fr") index = 6; else if (language == "it") index = 7; else if (language == "pt-BR") index = 8; else if (language == "pl") index = 9; else index = 0; languagePosition->setCurrentIndex(index); connect(languagePosition, SIGNAL(currentIndexChanged(int)), this, SLOT(languageChange(int))); languageLabel->setBuddy(languagePosition); QLabel *restartLabel = new QLabel(tr("(*) Change requires restart of QtEmu.")); QGridLayout *generalLayout = new QGridLayout; generalLayout->addWidget(myMachinesPathLabel, 1, 0); generalLayout->addLayout(pathLayout, 1, 1); generalLayout->addWidget(tabPositionLabel, 2, 0); generalLayout->addWidget(comboTabPosition, 2, 1); generalLayout->addWidget(iconThemeLabel, 3, 0); generalLayout->addWidget(comboIconTheme, 3, 1); generalLayout->addWidget(languageLabel, 4, 0); generalLayout->addWidget(languagePosition, 4, 1); generalLayout->addWidget(restartLabel, 5, 0); generalGroupBox->setLayout(generalLayout); QGroupBox *qemuGroupBox = new QGroupBox(tr("Start and stop QEMU"), this); QLabel *beforeStartExeLabel = new QLabel(tr("Execute before start:")); beforeStartExeTextEdit = new QTextEdit; beforeStartExeLabel->setBuddy(beforeStartExeTextEdit); QLabel *commandLabel = new QLabel(tr("QEMU start command:")); commandLineEdit = new QLineEdit; commandLabel->setBuddy(commandLineEdit); QLabel *afterExitExeLabel = new QLabel(tr("Execute after exit:")); afterExitExeTextEdit = new QTextEdit; afterExitExeLabel->setBuddy(afterExitExeTextEdit); QGridLayout *qemuLayout = new QGridLayout; qemuLayout->addWidget(beforeStartExeLabel, 1, 0, Qt::AlignTop); qemuLayout->addWidget(beforeStartExeTextEdit, 1, 1); qemuLayout->addWidget(commandLabel, 2, 0); qemuLayout->addWidget(commandLineEdit, 2, 1); qemuLayout->addWidget(afterExitExeLabel, 4, 0, Qt::AlignTop); qemuLayout->addWidget(afterExitExeTextEdit, 4, 1); qemuLayout->setRowStretch(4, 1); qemuGroupBox->setLayout(qemuLayout); QPushButton *okButton = new QPushButton(tr("OK")); connect(okButton, SIGNAL(clicked()), this, SLOT(writeSettings())); QPushButton *cancelButton = new QPushButton(tr("Cancel")); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); QHBoxLayout *buttonsLayout = new QHBoxLayout; buttonsLayout->addStretch(1); buttonsLayout->addWidget(okButton); buttonsLayout->addWidget(cancelButton); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(generalGroupBox); mainLayout->addWidget(qemuGroupBox); mainLayout->addLayout(buttonsLayout); setLayout(mainLayout); loadSettings(); } void ConfigWindow::setNewPath() { QString newPath = QFileDialog::getExistingDirectory(this, tr("Select a folder for \"MyMachines\""), myMachinesPath); if (!newPath.isEmpty()) myMachinePathLineEdit->setText(newPath); } void ConfigWindow::languageChange(int index) { QSettings settings("QtEmu", "QtEmu"); QString languageString; switch(index) { case 0: languageString = "en"; break; case 1: languageString = "de"; break; case 2: languageString = "tr"; break; case 3: languageString = "ru"; break; case 4: languageString = "cz"; break; case 5: languageString = "es"; break; case 6: languageString = "fr"; break; case 7: languageString = "it"; break; case 8: languageString = "pt-BR"; break; case 9: languageString = "pl"; break; default: languageString = "en"; } settings.setValue("language", languageString); } void ConfigWindow::loadSettings() { QSettings settings("QtEmu", "QtEmu"); beforeStartExeTextEdit->setPlainText(settings.value("beforeStart").toString()); #ifndef Q_OS_WIN32 commandLineEdit->setText(settings.value("command", "qemu").toString()); #elif defined(Q_OS_WIN32) commandLineEdit->setText(settings.value("command", QCoreApplication::applicationDirPath() + "/qemu/qemu.exe").toString()); #endif afterExitExeTextEdit->setPlainText(settings.value("afterExit").toString()); comboIconTheme->setCurrentIndex(comboIconTheme->findText(settings.value("iconTheme", "oxygen").toString(), Qt::MatchContains)); } void ConfigWindow::writeSettings() { QSettings settings("QtEmu", "QtEmu"); settings.setValue("beforeStart", beforeStartExeTextEdit->toPlainText()); settings.setValue("command", commandLineEdit->text()); settings.setValue("afterExit", afterExitExeTextEdit->toPlainText()); settings.setValue("iconTheme", comboIconTheme->currentText().toLower()); accept(); } qtemu-2.0~alpha1/README0000644000175000017500000000502111217515206014477 0ustar fboudrafboudraQtEmu ===== QtEmu is a graphical user interface for QEMU written in Qt4. It has the ability to run virtual operating systems on native systems. This way you can easily test a new operating system or try a Live CD on your system without any troubles and dangers. Installation ------------ Download a source archive from the QtEmu project website (http://qtemu.org/). Most probably you have already done so ;). Qt 4.2 is at least required. LibVNCServer 0.9.7 is at least required. For the VNC socket feature, a recent SVN build is required. http://sourceforge.net/project/showfiles.php?group_id=32584&package_id=24717 Compilation with cmake (recommended): (Use this methode on Linux to install the project systemwide.) * run 'cmake -DCMAKE_INSTALL_PREFIX=/usr .' in order to install all files into /usr. * type 'make install' as root * start it now with qtemu Compilation with qmake from Qt4: * unpack the source tarball * run 'qmake' in the qtemu folder * type 'make' * start ./qtemu and have fun! Network Configuration: QtEmu will handle all network configuration for you on Linux. In order to support bridging modes, a few programs need to be installed: sudo ip route brctl tunctl along with kernel modules to make these utilities function. Additionally, so that QtEmu can automatically use these programs as a normal user, a few lines need to be added to the end of /etc/sudoers as follows with visudo: ### rules for QtEmu ### User_Alias QTEMU = %qtemu Cmnd_Alias QEMU_COMMANDS = /sbin/route, /usr/sbin/brctl, /usr/sbin/tunctl, /sbin/ip QTEMU ALL=NOPASSWD: QEMU_COMMANDS ### end rules for QtEmu ### You need to have the qtemu group, and your user needs to be part of it. Eventually QtEmu will do all this automatically for you, but until then manual intervention is neccesary. One last note: the above paths should be correct in most cases, but if something doesn't work and debugging says that a command you know is installed is "unavailable", make sure these paths are right for you! Have Fun! Copyright / License ------------------- QtEmu is released under GPL. Copyright © 2006-2009 Urs Wolfer and Ben Klopfenstein. All rights reserved. The icons have been taken from the KDE Crystal theme which is LGPL licensed. Author ------ QtEmu is written by Urs Wolfer . It has been started as a project work for school. Ben Klopfenstein began adding some features he wanted, and is now rather involved in writing the next few versions. He also uses it for school.qtemu-2.0~alpha1/translations/0000755000175000017500000000000011217515407016345 5ustar fboudrafboudraqtemu-2.0~alpha1/translations/qtemu_ru.ts0000644000175000017500000035557311214661625020601 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Другая Select the operating system you want to install Выбор операционной системы для установки Select a System... Выберите операционную систему... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista Windows Vista BSD BSD ConfigWindow QtEmu Config Настройка QtEmu General Общие Default "MyMachines" Path: Путь к каталогу "MyMachines": OK Да Cancel Отмена Select a folder for "MyMachines" Выберите каталог для "MyMachines" Tabbar position: Расположение вкладок: Top Вверху Bottom Внизу Left Слева Right Справа Start and stop QEMU Запустиь и остановить QEMU Execute before start: Выполнить перед запуском: QEMU start command: Команда запуска QEMU: Execute after exit: Выполнить после завершения: Icon theme (*): Тема значков (*): Language (*): Язык (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Изменения вступят в силу при следующем запуске QtEmu.</i> QEMU start command runs KVM Команда запуска QEMU выполняет KVM ControlPanel Form Форма Reload Optical Drive Перезагрузить оптический диск Reload Перезагрузить Reload Floppy Drive Перезагрузить гибкий диск Screen Shot Снимок экрана Do Scaling Масштабировать Save a Screenshot Сохранить снимок экрана Pictures Изображения Screen Controls Управление экраном Media Controls Управление носителями Enter a CD image name or /dev/cdrom to use the host cd drive. Введите путь к образу оптического диска или /dev/cdrom для использования физического привода. /dev/cdrom /dev/cdrom secect a new CD image Выбрать новый образ оптического диска Eject the CD ROM from the guest and re-insert the new one specified above. Извлечь оптический диск в гостевой системе и вставить указанный выше. enter a floppy image or /dev/floppy to use the host floppy drive. Введите путь к образу гибкого диска или /dev/floppy для использования физического привода. /dev/floppy /dev/floppy secect a new floppy disk image Выбрать новый образ гибкого диска Eject the old floppy from the guest and re-insert the new one specified above. Извлечь гибкий диск в гостевой системе и вставить указанный выше. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Послать комбинацию клавиш в гостевую систему. Полезно для комбинаций, перехватываемых основной системой. Send Special Keys Послать комбинацию клавиш Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. Полноэкранный режим. Нажмите CTRL+ALT+ENTER для возврата. &Fullscreen &Во весь экран Ctrl+Alt+Return Ctrl+Alt+Return Save a screen shot to a file Сохранить снимок экрана в файл Toggle scaling the virtual machine view to fit the window Масштабировать экран виртуальной машины по размерам окна Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Свободный переход указателя мыши между гостевой и основной системой. Требуется поддержка USB в гостевой системе. Smooth Mouse Интеграция мыши GuestInterface random Случайный HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. Не удалось выполнить преобразование образа жёсткого диска. Проверьте, достаточно ли места на жёстком диске.<br />Вы можете попробовать преобразовать образ вручную при помощи программы qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. Не удалось запустить kvm-img или qemu-img. Статистика образов дисков будет недоступна. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. Не удалось запустить программу qemu/qemu-img.exe. Статистика образов дисков будет недоступна. HelpWindow QtEmu Help Справка QtEmu Close Закрыть Help not found Справка не найдена Help not found. It is probably not installed. Справка не найдена. Возможно она не установлена. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: &Размер образа диска: Specify disk image details Укажите настройки образа диска GB Гб Error Ошибка Finished Завершено Image created Образ создан Image NOT created! Образ НЕ создан! Click here to write down some notes about this machine. Щёлкните здесь, чтобы написать примечание к этой машине. Disk image format: Формат образа диска: Native image (qcow) Образ QEMU (qcow) Raw image (img) Образ RAW (img) VMWare image (vmdk) Образ VMWare (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. Только формат образа QEMU (qcow)<br>поддерживает функцию приостановки<br> выполнения виртуальной машины.<br>Используйте формат "QEMU (qcow)",<br>если нет необходимости использовать<br>другой формат. LocationPage &Name: &Название: &Path: &Путь: Choose name and location for the new machine Введите название и путь для размещения новой машины Select a folder for saving the hard disk image Выберите каталог для сохранения образа диска MachineProcess Either the qemu binary does not exist, or it is not executable at Исполняемый файл QEMU не существует, или его запуск не разрешён ALSA ALSA OSS OSS PulseAudio PulseAudio ESD ESD MachineTab &Start &Старт Start this virtual machine Запустить виртуальную машину &Stop С&топ Stop this virtual machine Остановить виртуальную машину &Pause &Пауза Pause/Unpause this virtual machine Приостановить/Возобновить виртуальную машину Snapshot mode Режим снимка &Memory &Память и процессор MB Мб &Hard Disk &Жёсткий диск Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Путь к файлу образа или файлу устройства жёсткого диска: &CD ROM &CD-ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Путь к файлу образа или файлу устройства CD-ROM: &Network &Сеть &Enable network &Включить поддержку сети (PPP/SLIP) Close this machine Закрыть виртуальную машину <strong>Devices</strong> <strong>Устройства</strong> &Boot from CD ROM За&грузка с CD-ROM &Other &Дополнительно Virtual CPU(s) <hr>Choose if the virtual machine should use the host machine clock. <hr>Выберите, будет ли эта виртуальная машина использовать таймер компьютера. Enable &local time Включить &локальное время <strong>Notes</strong> <strong>Примечания</strong> Select a CD ROM Drive Выбор привода CD-ROM Select a CD Image Выбор образа CD-ROM Choose whether the network (and internet) connection should be available for this virtual machine. Разрешение сетевых (в т.ч. и интернет) соединений для этой виртуальной машины. Select a QtEmu hard disk image Выбор образа жёсткого диска QtEmu QtEmu hard disk images Образы жёсткого диска QtEmu CD ROM images Образы CD-ROM QtEmu QtEmu Cannot read file %1: %2. Невозможно прочитать файл %1 %2. Parse error at line %1, column %2: %3 Ошибка обработки строки %1, колонка %2 %3 The file is not a QtEmu file. Это файл не QtEmu. The file is not a QtEmu version 1.0 file. Это файл не QtEmu версии 1.0. Cannot write file %1: %2. Невозможно записать в файл %1 %2. Confirm stop Подтверждение останова You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Вы хотите принудительно завершить текущую машину. Вы точно этого хотите? <br >При принудительной остановке виртуальной машины может быть повреждён образ жёсткого диска. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Задайте размер памяти для этой виртуальной машины. При выделении чрезмерного объёма памяти, может начаться swapping.<br /><br /> Память для этой машины: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Эта функция недоступна в Windows. Возможно, она будет реализована в следующих версиях QEMU. &Floppy Disk &Дисковод Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Путь к файлу образа дискеты или файлу устройства дисковода: Select a Floppy Disk Image Выбор образа дискеты &Boot from floppy disk За&грузка с дискеты Floppy disk images Образы дискет Select a Floppy Disk Drive Выбор дисковода Close confirmation Подтверждение закрытия Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Вы уверены, что хотите закрыть виртуальную машину?<br />Вы можете открыть её снова при помощи соответствующего файла .qte в каталоге "MyMachines". C&ustom network options (leave blank for the default): Параметры с&ети (оставьте пустым для настроек по умолчанию): &Sound &Звук Choose whether sound support should be available for this virtual machine. Выберите, будет ли поддержка звука доступна виртуальной машине. &Enable sound &Включить поддержку звука Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Выберите, будет ли использоваться бесшовное переключение мыши между виртуальной и базовой операционной системой. Данная возможность не поддерживается некоторыми операционными системами, например, операционными системами с текстовым режимом.<br /><strong>ПРИМЕЧАНИЕ:</strong> Включение данной функции может снизить производительность системы. Enable seamless mo&use Включить бесшовное переключение м&ыши <hr>Choose the number of &virtual CPUs. Выберите число вир&туальных процессоров. &Additional QEMU options: &Дополнительные параметры QEMU: &Suspend &Приостановить Suspend this virtual machine Приостановить выполнение виртуальной машины &Resume &Возобновить Resume this virtual machine Возобновить выполнение виртуальной машины Set the size of memory for this virtual machine. If you set too high an amount, memory swapping may occur.<br /><br />Memory for this virtual machine: Размер памяти виртуальной машины. Выделение большого объёма памяти может увеличить частоту обращений к диску.<br /><br />Размер памяти: <hr>Choose the number of &virtual CPUs: <hr>Число &виртуальных процессоров: Enable &virtualization Включить &ускорение виртуализации Upgrade HDD Format to Native Преобразовать формат образа в формат QEMU Reload the virtual CD &ROM Перезагрузить виртуальный CD-&ROM Reload the virtual Floppy Disk Перезагрузить виртуальный дисковод Choose whether the network (and internet) connection should be available for this virtual machine. Different network modes are available, and multiple modes can be used at once. Выберите, будет ли поддержка сети доступна виртуальной машине. Вы можете выбрать различные режимы поддержки сети и их комбинации. By default, the Qtemu uses User Mode Networking. This default should be fine for most people. По умолчанию используется пользовательский режим. Возможностей данного режима достаточно для нужд большинства пользователей. Choose a folder to use as a virtual network drive: Каталог виртуального сетевого диска: Select a Folder to share Выберите каталог, который следует сделать доступным по сети Advanced Network Modes: Расширенные режимы поддержки сети: User mode networking Пользовательский режим (PPP/SLIP) In this mode the virtual machine accesses the network using Slirp; this is similar to access with a web browser. this mode does not require administrator access, and works with wireless cards. В пользовательском режиме виртуальная машина получает доступ к сети посредством Slirp (эмуляция PPP/SLIP). Данный режим не требует прав администратора и совместим с беспроводными сетевыми адаптерами. Bridged networking Сетевой мост In this mode the virtual machine will have direct access to the host's network; This is needed to allow ICMP (ping) to work, and allows other machines to 'see' your virtual machine on the network. This mode does not work with most wireless cards. В режиме сетевого моста виртуальная машина получает прямой доступ к физической сети. Данный режим обеспечивает работу протокола ICMP (ping), а также позволяет другим компьютерам взаимодействовать с виртуальной машиной по сети. Данный режим не совместим с большинством беспроводных сетевых адаптеров. Local bridged networking Локальный режим сетевого моста This mode allows more advanced bridging techniques, including using the host computer as a router or restricting access to the host machine only. Локальный режим сетевого моста ограничивает прямой доступ виртуальной машины к физической сети. В данном режиме виртуальная машина может взаимодействовать по сети только с базовой машиной. Для обеспечения доступа виртуальной машины к физической сети базовая машина должна обеспечить маршрутизацию IP-пакетов. Shared VLan Networking Режим виртуальной сети This mode adds a network that is shared exclusively between virtual machines. IP based guests will default to APIPA addresses unless you run a DHCP server on one of your virtual machines. This does not use bridging. В данном режиме создаётся виртуальная сеть, доступная только виртуальным машинам. Если ни на одной из виртуальных машин не запущен сервер DHCP, то виртуальные машины присвоят себе IP-адреса в сети 169.254.xxx.xxx. Данный режим не использует сетевой мост. Custom Networking Options: Дополнительные параметры сети: Choose whether to use ALSA or OSS for sound emulation. Выберите звуковую систему для эмуляции звука: ALSA или OSS. &Use ALSA &Использовать ALSA Upgrade Confirmation Подтвердите преобразование This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all operating systems and image compression on Windows.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. Произвести преобразование образа жёсткого диска в формат QEMU (qcow).<br /> Это обеспечит поддержку функции приостановки выполнения виртуальной машины.<br />Существующий образ удалён не будет. Upgrading... Преобразование... Upgrade Complete Преобразование выполнено Upgrade complete. Your old hard disk image is preserved.<br />After you have determined the upgrade went smoothly and your machine will still start, you may wish to delete the old image. Преобразование выполнено. Старый образ жёсткого диска не удалён.<br />После того, как Вы убедитесь, что преобразование прошло успешно, и виртуальная машина запустится, Вы можете удалить старый образ. Upgrade Failed Не удалось выполнить преобразование Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. Не удалось выполнить преобразование образа жёсткого диска. Проверьте, достаточно ли места на жёстком диске.<br />Вы можете попробовать преобразовать образ вручную при помощи программы qemu-img. Suspending... Ждите... Resume Возобновить Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. Производится возобновление работы виртуальной машины. Функционирование<br />устройств USB в Windows будет нарушено. Необходимо перезагрузить<br /> драйвер USB, прежде чем можно будет использовать устройства USB,<br />в том числе мышь. Кроме того, в некоторых операционных системах может произойти<br />сбой видеоадаптера. This will tell the current machine to power down. Are you sure?<br />If the virtual machine Operating System is ACPI or APM aware, it will power down gracefully.<br />If the machine is unresponsive, you can choose a forced shutdown. Doing this may cause damage to the disk image. Данное действие приведёт к выключению питания виртуальной машины.<br />Если операционная система виртуальной машины поддерживает<br />механизм управления питанием ACPI или APM, то её работа завершится корректно.<br />В случа если виртуальная машина "зависнет", Вы можете попробовать<br /> принудительное выключение. При принудительном выключении может<br /> произойти повреждение образа жёсткого диска. Shutdown Выключить Force Shutdown Выключить принудительно (uncheck to commit changes) (уберите галочку, чтобы записать изменения) QtEmu Error Ошибка QtEmu An error has occurred in qemu relating to something you were doing. The error is:<br /> Действия пользователя вызвали ошибку QEMU:<br /> Select a folder to use as a Virtual Network Drive Выберите каталог для использования в качестве виртуального сетевого диска This function is not yet implemented. Эта функция ещё не реализована. &Shutdown &Завершить работу &Force Poweroff Принудительно &отключить Tell this virtual machine to shut down Послать гостевой системе сигнал завершения работы Force this virtual machine to stop immediately Принудительно отключить виртуальную машину Set preview screenshot Установить изображение для предварительного просмотра <strong>Control Panel</strong> <strong>Панель управления</strong> Display Дисплей Settings Настройки Console Консоль Enter Command Ввести команду This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Это действие принудительно отключит выбранную виртуальную машину. Вы уверены?<br />Это уместно только при зависании виртуальной машины или при отсутствии поддержки ACPI. Возможно повреждение образа диска. Force Power Off Принудительно отключить Hold down this button for additional options Нажмите эту кнопку для выбора дополнительных вариантов QtEmu machine already running! Виртуальная машина QtEmu уже запущена! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? На выбранном порту VNC или сокете уже работает виртуальная машина.<br />Это может означать, что предыдущий сеанс QtEmu завершился неудачно.<br />В этом случае вы можете попытаться подключиться к виртуальной машине для<br />сохранения данных и завершения работы.<br />Попытаться подключиться к этой виртуальной машине? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. QtEmu не удаётся подключиться к вашей звуковой системе.<br />Убедитесь, что вы правильно выбрали звуковую систему вашей основной ОС<br />в разделе Звук на вкладке Настройки. Также убедитесь, что<br />ваша версия qemu/KVM поддерживает выбранную вами звуковую систему. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> Произошла ошибка. Возможно, это вызвано<br />неправильными настройками. Сообщение об ошибке:<br /> MachineView QtEmu Fullscreen Полноэкранный режим QtEmu Fullscreen Во весь экран Exit Fullscreen Mode Выйти из полноэкранного режима Scale Display Масштабировать область вывода MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Образ НЕ создан!<br />Возможно, программа qemu-img или kvm-img отсутствует или нет прав на её исполнение. Image NOT created!<br> You may be missing qemu/qemu-img.exe! Образ НЕ создан!<br />Возможно, программа qemu/qemu-img.exe отсутствует. Create a new Machine Создание новой машины Click here to write down some notes about this machine. Нажмите здесь, чтобы написать примечание к виртуальной машине. Error Ошибка Image NOT created! Образ НЕ создан! Finished Завершено Image created Образ создан MainWindow QtEmu QtEmu Choose a virtual machine Выберите виртуальную машину QtEmu machines Машины QtEmu About QtEmu О QtEmu &New Machine &Создать виртуальную машину Ctrl+N Ctrl+N Create a new machine Создать новую виртуальную машину &Open Machine... &Открыть виртуальную машину... Ctrl+O Ctrl+O Open an existing machine Открыть существующую виртуальную машину E&xit &Выход Ctrl+Q Ctrl+Q Exit the application Завершить работу &Start &Старт Start this virtual machine Запустить виртуальную машину S&top С&топ Kill this machine Прервать выполнение виртуальной машины &Restart &Перезагрузка Restart this machine Перезагрузить виртуальную машину P&ause П&ауза Pause this machine Приостановить виртуальную машину Show the About box Показать "О программе" &File &Файл &Power &Состояние &Help По&мощь File Файл Power Питание Ready Готово Main Меню Machine loaded Машина загружена Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu О &QtEmu QtEmu &Help С&правка QtEmu F1 F1 Show Help Показать справку <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. <h1>QtEmu</h1>QtEmu - графический интерфейс пользователя для QEMU. QEMU позволяет выполнять виртуальные операционные системы на основной системе. Create a new virtual machine. A wizard will help you prepare for a new operating system Создать новую виртуальную машину Open an existing virtual machine Открыть существующую виртуальную машину Confi&gure Нас&тройка Ctrl+G Ctrl+G Customize the application Настройка программы MyMachines Мои_машины <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Версия %1</center><br><b><i>QtEmu</i></b> - графический интерфейс для <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Все права защищены.<br><br>Программа предоставляется КАК ЕСТЬ БЕЗ ВСЯКИХ ГАРАНТИЙ ЛЮБОГО ТИПА.<br><br>Значки взяты из тем KDE Crystal and Oxygen и распространяются под лицензией LGPL. <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <h2>QtEmu</h2>Версия %1<br><b><i>QtEmu</i></b> - графический интерфейс для <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Все права защищены.<br><br>Программа предоставляется КАК ЕСТЬ БЕЗ ВСЯКИХ ГАРАНТИЙ ЛЮБОГО ТИПА.<br><br>Значки взяты из тем KDE Crystal and Oxygen и распространяются под лицензией LGPL. &Pause &Пауза Ctrl+P Ctrl+P <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <h2>QtEmu</h2>Версия %1<br><b><i>QtEmu</i></b> - графический интерфейс для <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a><br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.. Все права защищены.<br><br>Программа предоставляется КАК ЕСТЬ БЕЗ ВСЯКИХ ГАРАНТИЙ ЛЮБОГО ТИПА.<br><br>Значки взяты из тем KDE Crystal and Oxygen и распространяются под лицензией LGPL. Virtual Machine Saving State! Сохранение состояния виртуальной машины! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Одна или несколько виртуальных машин в настоящий момент<br />сохраняют состояние. При выходе вы, наиболее вероятно,<br />повредите виртуальную машину! Exit confirmation Подтверждение выхода You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! Одна или несколько виртуальных машин всё ещё запущены.<br />Вы уверены, что хотите выйти? Выход без завершения работы<br />может повредить образ диска виртуальной машины. NetworkPage Form Форма &Networking &Сеть Enable networking Включить поддержку сети Enable network Включить поддержку сети Enter the advanced network settings dialog Открыть расширенные настройки сети Advanced Settings Расширенные настройки Select Network Interface Type: Выберите тип сетевого интерфейса: Guest Interfaces Интерфейсы виртуальной системы Host Interfaces Интерфейсы основной системы User Mode Bridged Interface Routed Interface Assign MAC address automatically Автоматически назначать MAC-адрес <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> <span style="color:#aa0000;">ЗАМЕЧАНИЕ: Данная функция ещё не завершена! Настройки сети вашей основной системы не изменяются, поэтому режим моста требует дополнительных усилий.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Назначить имя компьютера по DHCP Set up TFTP Server Встроенный сервер TFTP Broadcast BOOTP File Имя файла BOOTP Port Redirection... Перенаправление портов... Host Interface Name Имя интерфейса в основной системе Bridge Interface Name Имя интерфейса-моста Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Аппаратный интерфейс назначения Shared Virtual Lan Transport Настройки транспорта общей виртуальной сети UDP Multicast (Multiple Guests) UDP Multicast (несколько гостевых систем) udp udp TCP Unicast (Two Guests) TCP Unicast (две гостевых системы) tcp tcp Select Bus Address Выберите адрес шины Select Bus Port Выберите порт шины TAP Interface Name Имя TAP-интерфейса Interface Up Script Скрипт включения интерфейса Interface Down Script Скрипт выключения интерфейса Assign to Host Interface Привязать к интерфейсу основной системы Interface MAC Address MAC-адрес интерфейса Custom networking options disable all automatic options Пользовательские настроки сети отключают автоопределение i82551 i82551 i82557b i82557b i82559er i82559er ne2k_pci ne2k_pci ne2k_isa ne2k_isa pcnet pcnet rtl8139 rtl8139 e1000 e1000 virtio virtio Emulated Network Card Model Модель эмулируемой сетевой карты Generate new MAC Сгенерировать новый MAC-адрес Set a new, random MAC address upon each boot Назначать случайный MAC-адрес при каждой перезагрузке Custom networking options: Пользовательские настройки сети: Enter cutom networking options Введите пользовательские настройки сети SettingsTab Select a QtEmu hard disk image Выбор образа жёсткого диска QtEmu QtEmu hard disk images Образы жёсткого диска QtEmu Select a CD Image Выбор образа CD-ROM CD ROM images Образы оптических дисков Select a Floppy Disk Image Выбрать образ гибкого диска Floppy disk images Образы гибких дисков Upgrade Confirmation Подтвердите преобразование This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all operating systems and image compression on Windows.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. Произвести преобразование образа жёсткого диска в формат QEMU (qcow).<br /> Это обеспечит поддержку функции приостановки выполнения виртуальной машины.<br />Существующий образ удалён не будет. MyMachines Settings Настройки Cpu / Memory Процессор / Память Hard Disk Жёсткий диск Removable Media Съёмные носители Virtual Drives Виртуальные диски Networking Сеть Sound Звук Display Дисплей Other Options Другие настройки &Help По&мощь cpu-memory.html Cpu / &Memory &Процессор / Память Number of virtual &CPUs: &Количество виртуальных процессоров: Virtual CPU(s) &Memory for this virtual machine: &Объём памяти для виртуальной машины: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Установить объём доступной памяти для виртуальной машины.<br /><strong>ВНИМАНИЕ:</strong> Убедитесь, что как гостевой, так и основной системе достаточно памяти для работы Mb МБ Enable Hardware &Virtualization Включить &аппаратную виртуализацию Enable ACPI Включить ACPI Allow the virtual machine to use the system clock for improved accuracy: Использовать системное время для большей точности: Use the &System Clock &Системное время Linux Linux BSD BSD Other Другая harddisk.html &Hard Disk &Жёсткий диск Select a valid hard disk image for QtEmu. Выберите образ жёсткого диска для QtEmu. Upgrade Image Преобразовать образ Upgrade your image to enable advanced features Преобразовать образ диска для включения дополнительных возможностей removablemedia.html CD/DVD Image or device: Образ оптического диска или физическое устройство: Clear Очистить Boot from CD/DVD Загрузка с оптического диска Floppy disk Image or device: Образ гибкого диска или физическое устройство: Boot from floppy disk Загрузка с гибкого диска usb.html virtualdrives.html networking.html sound.html &Sound &Звук Enable sound Включить звук display.html &Display &Дисплей Embedded Display Встроенный дисплей VNC Transport Настройки VNC TCP Сетевой TCP-сокет tcp Host: Хост: Port: Порт: File Socket Локальный сокет unix Allow remote connection instead of embedding Разрешить внешние подключения вместо встраивания дисплея Scale display to fit window Масштабировать вывод по размерам окна otheroptions.html Additional QEMU Options Дополнительные опции QEMU Use Additional Options: Использовать дополнительные опции: Pre / Post Scripts Скрипты These commands will be executed before or after QEMU Эти команды будут запущены до или после QEMU Execute Before: Выполнить ДО: Execute After: Выполнить ПОСЛЕ: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. Эта операция преобразует ваш образ жёсткого диска в формат qcow.<br />Это активирует дополнительные возможности, такие как<br />приостановка работы для любых гостевых систем, а также сжатие образа<br />при использовании Windows в качестве основной системы.<br />Старый образ не будет изменён, поэтому вы всегда сможете вернуться. USB Support Поддержка USB Display an online help dialog Change the number of virtual CPUs your machine has Выбор числа виртуальных процессоров Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. Аппаратная виртуализация позволяет виртуальной машине работать почти со скоростью реальной. Требуется KVM или KQEMU. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. ACPI позволяет, в числе прочего, посылать сигналы для правильного завершения работы (рекомендуется). This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Включает доступ к часам реального времени основной системы, позволяя улучшить работу оптимизированных драйверов. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Выбор гостевой системы, с которой будет общаться QtEmu. В настоящее время ни на что не влияет. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista Windows Vista ReactOS ReactOS Installed Operating System Установленная операционная система The Hard Disk Image QtEmu tries to boot from. Образ жёсткого диска, с которого QtEmu будет загружаться. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> <strong>НЕ</strong> изменяйте эту настройку, если вы не знаете, что делаете! См. раздел Помощь Use Accelerated Disk Drivers. These are not supported for Windows guests. Использовать оптимизированные драйверы диска. Не поддерживаются для гостевых систем Windows. Accelerated Hard Disk Drivers Оптимизированные драйверы диска You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Вы можете преобразовать образ диска в формат qcow2 для включения дополнительных возможностей, таких как приостановление работы. Image Information Информация об образе Image Format: Формат образа: Img Format Virtual Image Size: Размер виртуального диска: Virt Size On Disk Size: Занимаемый размер: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. Введите путь к образу оптического диска или /dev/cdrom для использования физического привода. /dev/cdrom /dev/cdrom secect a new CD image Выбрать новый образ оптического диска Try to boot from the CD first Сначала пытаться загрузиться с оптического диска enter a floppy image or /dev/floppy to use the host floppy drive. Введите путь к образу гибкого диска или /dev/floppy для использования физического привода. /dev/floppy /dev/floppy secect a new floppy disk image Выбрать новый образ гибкого диска Try to boot from the floppy first Сначала пытаться загрузиться с гибкого диска Enable a virtual sound card Включить виртуальную звуковую карту Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. Выберите звуковую систему вашей основной ОС. Не все звуковые системы могут быть доступты в вашей версии qemu/kvm. Вы также можете ввести свой вариант. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Выберите звуковую систему для вывода звука Allow the guest virtual machine to show in an embedded window within QtEmu Отображать содержимое дисплея виртуальной машины внутри окна QtEmu Select the Transport VNC uses Выберите способ подключения для VNC Do not change this unless you have a good reason Не меняйте без весомых оснований Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Выберите способ подключения виртуальной машины к встроенному дисплею. В настоящий момент работает только TCP. Toggle scaling the virtual machine view to fit the window Масштабировать экран виртуальной машины по размерам окна Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. Включить широкоформатные и высокие разрешения. Используется стандартный VESA-совместимый видеоадаптер вместо Cirrus Logic. High Resolution and Widescreen Video Modes (Standard VGA) Режимы высокого разрешения и широкоформатные экраны (стандартный VGA) Enter your own options Введите собственные опции You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Вы можете ввести команды для запуска до или после виртуальной машины для каждой в отдельности (вдобавок к глобальным QtEmu). Enable or disable this script Включить или выключить скрипт UsbPage UsbPage USB Support Поддержка USB Enable support for USB devices, either virtual or shared with the Host Включить поддержку USB-устройств (как виртуальных, так и физических) Enable USB support Включить поддержку USB USB Devices Устройства USB Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Свободный переход указателя мыши между гостевой и основной системой. Требуется поддержка USB в гостевой системе. Seamless USB Mouse Интеграция мыши USB VncView Password required Требуется пароль Please enter the password for the remote desktop: Введите пароль для удалённого рабочего стола: Wizard Cancel Отмена < &Back < &Назад Next > Далее > &Finish &Завершить qtemu-2.0~alpha1/translations/qtemu_de.ts0000644000175000017500000026170611155002031020515 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Anderes Select the operating system you want to install Wählen Sie das Betriebsystem aus, welches Sie installieren möchten Select a System... Wählen Sie ein Betriebsystem aus... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config QtEmu Konfiguration General Allgemein Default "MyMachines" Path: Standard "MyMachines" Pfad: OK OK Cancel Abbrechen Select a folder for "MyMachines" Einen Ordner für "MyMachines" wählen Tabbar position: Position der Registrierkarten: Top Oben Bottom Unten Left Links Right Rechts Start and stop QEMU Starten und Stoppen von QEMU Execute before start: Ausführen vor Start: QEMU start command: QEMU-Start-Befehl: Execute after exit: Ausführen nach Beenden: Icon theme (*): Icon Thema (*): Language (*): Sprache (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Änderungen benötigen Neustart von QtEmu.</i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help QtEmu Hilfe Close Schliessen Help not found Hilfe nicht gefunden Help not found. It is probably not installed. Hilfe konnte nicht gefunden werden. Möglicherweise ist sie nicht installiert. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: &Festplatten Abbild Grösse: Specify disk image details Legen Sie die Festplatten Abbild Details fest GB GB Error Fehler Finished Fertiggestellt Image created Abbild wurde erstellt Image NOT created! Abbild wurde NICHT erstellt! Click here to write down some notes about this machine. Hier klicken, um Notizen über diese virtuelle Machine zu notieren. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Name: &Path: &Pfad: Choose name and location for the new machine Wählen Sie Namen und Speicherort für die neue Maschine Select a folder for saving the hard disk image Einen Ordner für das Speichern des Festplatten Abbilds auswählen MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Starten Start this virtual machine Diese virtuelle Maschine starten &Stop &Stoppen Stop this virtual machine Diese virtuelle Maschine stoppen Snapshot mode Snapshot Modus &Memory &Zwischenspeicher MB MB &Hard Disk &Festplatte Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Wählen Sie ein Festplatten Abbild für QtEmu aus. Wechseln Sie das Festplatten Abbild <b>nicht</b>, ausser Sie wissen genau, aus welchem Grund Sie dies tun!<br /><br />Festplatten Abbild für diese virtuelle Maschine: &CD ROM &CD ROM Select a QtEmu hard disk image Wählen Sie ein QtEmu Festplatten Abbild QtEmu hard disk images QtEmu Festplatten Abbilder QtEmu QtEmu Cannot read file %1: %2. %1 kann nicht gelesen werden: %2. Parse error at line %1, column %2: %3 Lesefehler in Line %1, Kolonne %2: %3 The file is not a QtEmu file. Die Datei ist keine QtEmu Datei. The file is not a QtEmu version 1.0 file. Die Datei ist keine QtEmu Version 1.0 Datei. Cannot write file %1: %2. %1 kann nicht geschrieben werden: %2. Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Wählen Sie ein CD ROM Abbild oder ein physikalisches Laufwerk aus.<br /><br />Abbild oder Laufwerk für diese Maschine: &Network &Netzwerk &Enable network &Netzwerk aktivieren Close this machine Diese Maschine schliessen <strong>Devices</strong> <strong>Komponenten</strong> &Boot from CD ROM &Von CD ROM starten &Other &Andere Virtual CPU(s) Virtuelle(r) Processor(en) <hr>Choose if the virtual machine should use the host machine clock. <hr>Wählen Sie, ob die virtuelle Maschine die Uhrzeit des Host Systems verwenden soll. Enable &local time &Lokale Uhrzeit aktivieren CD ROM images CD ROM Abbilder Confirm stop Beenden bestätigen You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Wollen Sie wirklich die aktuelle virtuelle Maschine gewaltvoll beenden?<br>Es ist empfehlenswert, das System manuell herunter zu fahren. Datenverlust ist möglich. <strong>Notes</strong> <strong>Notizen</strong> Select a CD ROM Drive Wählen Sie ein CD ROM Laufwerk aus Select a CD Image Wählen Sie ein CD Abbild aus Choose whether the network (and internet) connection should be available for this virtual machine. Wählen Sie aus, ob eine Netzwerk (und Internet) Verbindung für diese Maschine verfügbar sein soll. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Geben Sie die Grösse des Zwischenspeichers (RAM) an. Wenn Sie zu viel Zwischenspeicher angeben, kann es zu Memory Swapping auf dem Hostsystem kommen.<br /><br />Zwischenspeicher für diese virtuelle Maschine: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Diese Funktion ist unter Windows nicht verfügbar, da QEMU für Windows dies nicht unterstützt. Möglicherweise wird die Funktion in einer nächsten Version verfügbar sein. &Floppy Disk &Diskette Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Wählen Sie ein gültiges Disketten Abbild oder ein Diskettenlaufwerk.<br /><br />Abbild oder Laufwerk für diese virtuelle Maschine: Select a Floppy Disk Image Ein Disketten Abbild auswählen &Boot from floppy disk Von Diskette &starten Floppy disk images Disketten Abbilder Select a Floppy Disk Drive Ein Disketten Laufwerk auswählen Close confirmation Schliessbestätigung Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Sind Sie sicher, dass Sie diese virtuelle Maschine schliessen möchten?<br />Sie können sie wieder laden, indem Sie die dazugehörige .qte Datei im "MyMachines" Ordner öffnen. C&ustom network options (leave blank for the default): Er&weiterte Netzwerkoptionen (leer lassen für standard Wert): &Sound &Audio Choose whether sound support should be available for this virtual machine. Wählen Sie aus, ob Audioausgabe für diese Maschine verfügbar sein soll. &Enable sound A&udio aktivieren Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Wählen Sie aus, ob die Maus übergangslos zwischen Host und Gast System wechseln soll. Diese Option ist vom Betriebssystem des virtuellen Systems abhängig. Es ist zum Beispiel bei textbasierten Systemen nicht unterstützt. <strong>Achtung: </strong>Diese Option kann sich kann sich negativ auf die Systemleistung auswirken. Enable seamless mo&use Ü&bergangslose Maus aktivieren <hr>Choose the number of &virtual CPUs. <hr>Wählen Sie die Anzahl von &virtuellen Prozessoren. &Additional QEMU options: &Zusätzliche QEMU Optionen: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Eine neue Maschine erstellen Click here to write down some notes about this machine. Hier klicken, um Notizen über diese virtuelle Machine zu notieren. Error Fehler Image NOT created! Abbild wurde NICHT erstellt! Finished Fertiggestellt Image created Abbild wurde erstellt MainWindow QtEmu QtEmu Choose a virtual machine Wählen Sie eine virtuelle Maschine aus QtEmu machines QtEmu Maschinen About QtEmu Über QtEmu &New Machine &Neue Maschine Ctrl+N Ctrl+N Create a new machine Eine neue Maschine erstellen &Open Machine... &Maschine öffnen... Ctrl+O Ctrl+O Open an existing machine Eine bestehende Maschine öffnen E&xit &Beenden Ctrl+Q Ctrl+Q Exit the application Anwendung beenden &Start &Starten Start this virtual machine Diese Maschine starten S&top S&top Kill this machine Diese Maschine gewaltvoll beenden &Restart &Neustarten Restart this machine Diese Maschine neu starten Show the About box Den "Über" Dialog anzeigen &File &Datei &Power &Energie &Help &Hilfe File Datei Power Einergie Ready Bereit Main Start Machine loaded Maschine geladen Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu &Über QtEmu QtEmu &Help QtEmu &Hilfe F1 F1 Show Help Hilfe anzeigen <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu ist eine grafische Beutzeroberfläche für QEMU. Es kann virtuelle Betriebssysteme innerhalb eines realen Betriebssystems starten. Create a new virtual machine. A wizard will help you installing a new operating system Eine neue virtuelle Maschine erstellen. Ein Assisten hilft Ihnen bei der Installation des neuen Betriebssystems Open an existing virtual machine Eine bestehende virtuelle Maschine öffnen Confi&gure Konfi&gurieren Ctrl+G Ctrl+G Customize the application Die Anwendung anpassen MyMachines MyMachines <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> ist eine grafische Benutzeroberfläche für <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Alle Rechte vorbehalten.<br><br>Dieses Programm wird "AS IS" zur Verfügung gestellt, ohne jegliche Garantien.<br><br>Verwendete Icons stammen vom KDE Crystal und Oxygen Icontheme, welche unter der LGPL Lizenz stehen. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Wählen Sie ein QtEmu Festplatten Abbild QtEmu hard disk images QtEmu Festplatten Abbilder Select a CD Image Wählen Sie ein CD Abbild aus CD ROM images CD ROM Abbilder Select a Floppy Disk Image Ein Disketten Abbild auswählen Floppy disk images Disketten Abbilder Upgrade Confirmation MyMachines MyMachines Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help &Hilfe cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) Virtuelle(r) Processor(en) &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linux BSD Other Anderes harddisk.html &Hard Disk &Festplatte Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Audio Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Abbrechen < &Back < &Zurück Next > Weiter > &Finish &Fertigstellen qtemu-2.0~alpha1/translations/qtemu_tr.ts0000644000175000017500000026102311155002031020542 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Diğer Select the operating system you want to install Yüklemek istediğiniz işletim sistemini seçin Select a System... Bir Sistem Seçin... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config QtEmu Yapılandırma General Genel Default "MyMachines" Path: Varsayılan "Makinelerim" Yolu: OK Tamam Cancel İptal Select a folder for "MyMachines" "Makinelerim" için bir dizin seçin Tabbar position: Sekme çubuğu konumu: Top Üst Bottom Alt Left Sol Right Sağ Start and stop QEMU QEMU'yu başlat ve durdur Execute before start: Başlamadan önce çalıştır: QEMU start command: QEMU başlatma komutu: Execute after exit: Çıktıktan sonra çalıştır: Icon theme (*): Simge teması (*): Language (*): Dil (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Değişiklik, QtEmu'nun baştan başlatılmasını gerektirir.</i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help QtEmu Yardım Close Kapat Help not found Yardım bulunamadı Help not found. It is probably not installed. Yardım bulunamadı. Büyük ihtimalle yüklü değil. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: &Disk görüntüsü boyutu: Specify disk image details Disk görüntüsü detaylarını belirtin GB GB Error Hata Finished Tamamlandı Image created Görüntü oluşturuldu Image NOT created! Görüntü oluşturulMAdı! Click here to write down some notes about this machine. Bu makine hakkında ufak notlar tutmak için buraya tıklayın. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Ad: &Path: &Yol: Choose name and location for the new machine Yeni makine için ad ve konum belirtin Select a folder for saving the hard disk image Sabit disk görüntüsünü kaydetmek için bir dizin seçin MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Başla Start this virtual machine Bu sanal makineyi başlat &Stop &Durdur Stop this virtual machine Bu sanal makineyi durdur Snapshot mode Görüntü yakalama modu &Memory &Hafıza MB MB &Hard Disk &Sabit disk Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: QtEmu için geçerli bir sabit disk görüntüsü seçin. Ne yaptığınızı kesin olarak bilmiyorsanız sabit disk görüntüsünü <b>değiştirmeyin!</b><br /><br /> Bu sanal makine için sabit disk görüntüsü: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Geçerli bir CD ROM görüntüsü veya fiziksel aygıt seçin.<br /><br />Bu sanal makine için görüntü veya aygıt: &Network &Ağ &Enable network &Ağı etkinleştir Close this machine Bu makineyi kapat <strong>Devices</strong> <strong>Aygıtlar</strong> &Boot from CD ROM &CD ROM'dan başlat &Other &Diğer Virtual CPU(s) Sanal MİB(leri) <hr>Choose if the virtual machine should use the host machine clock. <hr>Sanal makinenin asıl makinenin saatini kullanıp kullanmayacağını seçin. Enable &local time Yere&l saati etkinleştir <strong>Notes</strong> <strong>Notlar</strong> Select a CD ROM Drive Bir CD ROM sürücü seç Select a CD Image Bir CD görüntüsü seç Choose whether the network (and internet) connection should be available for this virtual machine. Bu sanal makine için ağ (ve internet) bağlantısının açık olup olmayacağını belirleyin. Select a QtEmu hard disk image Bir QtEmu sabit disk görüntüsü seçin QtEmu hard disk images QtEmu sabit disk görüntüleri CD ROM images CD ROM görüntüleri QtEmu QtEmu Cannot read file %1: %2. %1 dosyası okunamıyor: %2. Parse error at line %1, column %2: %3 Satır %1, sütun %2 noktasında ayrıştırma hatası: %3 The file is not a QtEmu file. Dosya bir QtEmu dosyası değil. The file is not a QtEmu version 1.0 file. Dosya bir QtEmu sürüm 1.0 dosyası değil. Cannot write file %1: %2. %1 dosyası yazılamıyor: %2. Confirm stop Durdurmayı onaylayın You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Aktif makineyi öldüreceksiniz. Emin misiniz?<br>Sanal makineyi elle kapatmak daha iyi olacaktır. Öldürmek disk görüntüsüne zarar verebilir. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Bu sanal makine için hafıza boyutunu seçin. Eğer çok yüksek bir değer girerseniz, ek tampon hafıza kullanımı gerekli olabilir.<br /><br />Bu sanal makine için hafıza: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Bu fonksiyon Windows altında QEMU fonksiyonları olmadığı için Windows altında kapalıdır. Büyük ihtimalle daha sonra çıkacak bir sürümde düzeltilecektir. &Floppy Disk Di&sket Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Bir disket görüntüsü veya fiziksel disket aygıtı seçin.<br /><br />Bu sanal makine için görüntü veya aygıt: Select a Floppy Disk Image Bir disket görüntüsü seçin &Boot from floppy disk Disketten &Başla Floppy disk images Disket görüntüleri Select a Floppy Disk Drive Bir disket sürücü aygıtı seçin Close confirmation Kapatma onayı Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Bu makineyi kapatmak istediğinizden emin misiniz?<br /> Daha sonra onu "MyMachines" dizininizdeki ilgili .qte dosyasını kullanarak açabilirsiniz. C&ustom network options (leave blank for the default): Ö&zel ağ ayarları (öntanımlı ayarlar için boş bırakın): &Sound &Ses Choose whether sound support should be available for this virtual machine. Bu sanal makine için ses desteğinin olup olmayacağını belirleyin. &Enable sound &Sesi etkinleştir Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Farenin ana sisteminiz ile sanal sistem arasında hemen geçiş yapıp yapmayacağını seçin. Bu seçenek işletim sistemiyle ilişkilidir. Metin tabanlı sistemler tarafından desteklenmez. <strong>Uyarı:</strong> Bu seçenek sistem başarımını düşürebilir. Enable seamless mo&use &Gecikmesiz fareyi etkinleştir <hr>Choose the number of &virtual CPUs. <hr>&Sanal MİB (işlemci) sayısını seçin. &Additional QEMU options: &Daha fazla QEMU ayarları: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Yeni Makine Oluştur Click here to write down some notes about this machine. Bu makine hakkında ufak notlar tutmak için buraya tıklayın. Error Hata Image NOT created! Görüntü oluşturulMAdı! Finished Tamamlandı Image created Görüntü oluşturuldu MainWindow QtEmu QtEmu Choose a virtual machine Sanal makine seçin QtEmu machines QtEmu makineleri About QtEmu QtEmu hakkında &New Machine &Yeni Makine Ctrl+N Ctrl+N Create a new machine Yeni makine oluştur &Open Machine... &Makine Aç... Ctrl+O Ctrl+O Open an existing machine Varolan bir makineyi aç E&xit Çı&k Ctrl+Q Ctrl+Q Exit the application Uygulamadan çık &Start &Başla Start this virtual machine Bu sanal makineyi başlat S&top &Durdur Kill this machine Bu makineyi öldür &Restart &Yeniden başlat Restart this machine Bu makineyi yeniden başlat Show the About box Hakkında kutusunu göster &File &Dosya &Power &Güç &Help &Yardım File Dosya Power Güç Ready Hazır Main Ana Machine loaded Makine yüklendi Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu QtEmu &Hakkında QtEmu &Help QtEmu &Yardım F1 F1 Show Help Yardımı Göster <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu QEMU için grafik bir arayüzdür. Yerel sistemlerde sanal işletim sistemleri çalıştırabilir. Create a new virtual machine. A wizard will help you installing a new operating system Yeni bir sanal makine oluştur. Bir sihirbaz size yeni işletim sistemini kurmada yardımcı olacaktır Open an existing virtual machine Varolan bir sanal makineyi aç Confi&gure &Yapılandır Ctrl+G Ctrl+G Customize the application Uygulamayı kişiselleştir MyMachines Makinelerim <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Sürüm %1</center><br><b><i>QtEmu</i></b> <a href=http://qemu.org>QEMU</a> için bir grafik kullanıcı arabirimidir.<br><br>Kopyalama Hakkı &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Tüm hakları saklıdır.<br><br>Program HİÇBİR GARANTİ içermeden, olduğu gibi dağıtılmaktadır.<br><br>Simgeler LGPL lisanslı olan KDE Crystal ve Oxygen temalarından alınmıştır. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Bir QtEmu sabit disk görüntüsü seçin QtEmu hard disk images QtEmu sabit disk görüntüleri Select a CD Image Bir CD görüntüsü seç CD ROM images CD ROM görüntüleri Select a Floppy Disk Image Bir disket görüntüsü seçin Floppy disk images Disket görüntüleri Upgrade Confirmation MyMachines Makinelerim Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help &Yardım cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) Sanal MİB(leri) &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linux BSD Other Diğer harddisk.html &Hard Disk &Sabit disk Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Ses Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel İptal < &Back < &Geri Next > Sonraki > &Finish &Bitir qtemu-2.0~alpha1/translations/qtemu_pt-BR.ts0000644000175000017500000026212311155002031021043 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Outro Select the operating system you want to install Selecione o sistema operacional que você deseja instalar Select a System... Selecione um Sistema... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config Configuração do QtEmu General Geral Default "MyMachines" Path: Caminho padrão para "Minhas Máquinas": OK OK Cancel Cancelar Select a folder for "MyMachines" Selecione um diretório para "Minhas Máquinas" Tabbar position: Posição da barra lateral: Top Topo Bottom Abaixo Left Esquerda Right Direita Start and stop QEMU Iniciar e parar QEMU Execute before start: Executar antes de iniciar: QEMU start command: Comando de início do QEMU: Execute after exit: Executar depois de sair: Icon theme (*): Tema dos ícones (*): Language (*): Língua (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Para que as alterações tenham efeito é necessário reiniciar o QtEmu. </i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help Ajuda do QtEmu Close Fechar Help not found Ajuda não encontrada Help not found. It is probably not installed. Ajuda não encontrada. Possivelmente não está instalada. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Tamanho da imagem do &disco: Specify disk image details Especifique os detalhes da imagem de disco GB GB Error Erro Finished Terminado Image created Imagem criada Image NOT created! Imagem NÃO criada! Click here to write down some notes about this machine. Clique aqui para escrever algum comentário sobre essa máquina. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Nome: &Path: &Caminho: Choose name and location for the new machine Escolha um nome e um local para a nova máquina Select a folder for saving the hard disk image Selecione um diretório para salvar a imagem do disco rígido MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Iniciar Start this virtual machine Iniciar esta máquina virtual &Stop &Parar Stop this virtual machine Parar esta máquina virtual Snapshot mode Modo Snapshot &Memory &Memória MB MB &Hard Disk &Disco Rígido Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Selecione um disco rígido válido para o QtEmu. <b>Não mude</b> a imagem do disco rígido a não ser que você saiba o que está fazendo!<br /><br />Imagem do disco rígido para esta máquina virtual: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Selecione uma imagem de CD ROM ou um dispositivo físico válido.<br /><br />Imagem ou dispositivo para esta máquina virtual: &Network &Rede &Enable network Habilitar R&ede Close this machine Fechar esta máquina <strong>Devices</strong> <strong>Dispositivos</strong> &Boot from CD ROM &Iniciar do CD ROM &Other &Outro Virtual CPU(s) CPU(s) Virtuais <hr>Choose if the virtual machine should use the host machine clock. <hr>Escolha se a máquina virtual deve usar o relógio da máquina servidor. Enable &local time Habilitar hora &local <strong>Notes</strong> <strong>Notas</strong> Select a CD ROM Drive Selecione um Drive de CD ROM Select a CD Image Selecione uma Imagem de CD Choose whether the network (and internet) connection should be available for this virtual machine. Escolha se a conexão de rede (e de internet) devem estar disponíveis para esta máquina virtual. Select a QtEmu hard disk image Selecione uma imagem de disco rígido do QtEmu QtEmu hard disk images Imagens de disco rígido do QtEmu CD ROM images Imagens de CD ROM QtEmu QtEmu Cannot read file %1: %2. Não foi possível ler o arquivo %1: %2. Parse error at line %1, column %2: %3 Erro de parâmetro na linha %1, coluna %2: %3 The file is not a QtEmu file. O arquivo não é um arquivo QtEmu. The file is not a QtEmu version 1.0 file. O arquivo não é um arquivo QtEmu versão 1.0. Cannot write file %1: %2. Não foi possível gravar o arquivo %1: %2. Confirm stop Confirme a parada You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Você irá matar a máquina atual. Você tem certeza?<br>Seria melhor se você desligasse manualmente a máquina virtual. Dessa forma danos à imagem de disco podem ocorrer. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Determine o tamanho da memória para esta máquina virtual. Se você determinar uma quantidade muito grande, pode ocorrer criação de memória swap.<br /><br />Memória para esta máquina virtual: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Esta função não está disponível no Windows devido a falta da função do QEMU no Windows. Provavelmente isso será corrigido em uma próxima versão. &Floppy Disk &Disquete Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Selecione uma imagem ou dispositivo físico de disquete.<br /><br />Imagem ou dispositivo para esta máquina virtual: Select a Floppy Disk Image Selecione uma imagem de Disquete &Boot from floppy disk &Iniciar do disquete Floppy disk images Imagens de disquete Select a Floppy Disk Drive Selecione um Drive de Disquete Close confirmation Confirmação de fechamento Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Você tem certeza que deseja fechar esta máquina?<br />Você pode abri-la novamente com o arquivo .qte correspondente no seu diretório "Minhas Máquinas". C&ustom network options (leave blank for the default): O&pções personalizadas de rede (deixe em branco para o padrão): &Sound &Som Choose whether sound support should be available for this virtual machine. Escolha se o suporte ao som deverá estar disponível para esta máquina virtual. &Enable sound &Habilitar som Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Escolha se o mouse deverá mudar continuamente entre o servidor e o sistema virtual. Esta opção depende do sistema operacional. Por exemplo, ela não é suportada por sistemas baseados em texto. <strong>Atenção:</strong> Esta opção pode reduzir a performance do sistema. Enable seamless mo&use Habilitar mo&use contínuo <hr>Choose the number of &virtual CPUs. <hr>Escolha o número de CPUs &virtuais. &Additional QEMU options: Opções &adicionais do QEMU: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Criar uma nova Máquina Click here to write down some notes about this machine. Clique aqui para escrever algum comentário sobre essa máquina. Error Erro Image NOT created! Imagem NÃO criada! Finished Terminado Image created Imagem criada MainWindow QtEmu QtEmu Choose a virtual machine Escolha uma máquina virtual QtEmu machines Máquinas do QtEmu About QtEmu Sobre o QtEmu &New Machine &Nova Máquina Ctrl+N Ctrl+N Create a new machine Criar uma nova máquina &Open Machine... &Abrir Máquina... Ctrl+O Ctrl+O Open an existing machine Abrir uma máquina existente E&xit &Sair Ctrl+Q Ctrl+Q Exit the application Sair da aplicação &Start &Iniciar Start this virtual machine Iniciar esta máquina virtual S&top &Parar Kill this machine Matar esta máquina &Restart &Reiniciar Restart this machine Reiniciar esta máquina Show the About box Mostrar a caixa Sobre &File &Arquivo &Power &Ligar &Help A&juda File Arquivo Power Ligar Ready Pronto Main Principal Machine loaded Máquina carregada Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu &Sobre o QtEmu QtEmu &Help A&juda do QtEmu F1 F1 Show Help Mostrar Ajuda <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu é uma interface gráfica para o QEMU. Ele tem a habilidade de executar sistemas operacionais virtuais em sistemas nativos. Create a new virtual machine. A wizard will help you installing a new operating system Cria uma nova máquina virtual. Um assistente irá ajudá-lo a instalar um novo sistema operacional Open an existing virtual machine Abrir uma máquina virtual existente Confi&gure Confi&gurar Ctrl+G Ctrl+G Customize the application Customizar a aplicação MyMachines Minhas Máquinas <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Versão %1</center><br><b><i>QtEmu</i></b> é uma interface para <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Todos os direitos reservados.<br><br>O programa é disponibilizado COMO SE APRESENTA SEM GARANTIA DE QUALQUER TIPO.<br><br>Os ícones foram tirados dos temas KDE Crystal e Oxygen que são licenciados pela LGPL. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Selecione uma imagem de disco rígido do QtEmu QtEmu hard disk images Imagens de disco rígido do QtEmu Select a CD Image Selecione uma Imagem de CD CD ROM images Imagens de CD ROM Select a Floppy Disk Image Selecione uma imagem de Disquete Floppy disk images Imagens de disquete Upgrade Confirmation MyMachines Minhas Máquinas Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help A&juda cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) CPU(s) Virtuais &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linux BSD Other Outro harddisk.html &Hard Disk &Disco Rígido Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Som Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Cancelar < &Back < &Voltar Next > Próxima > &Finish &Terminar qtemu-2.0~alpha1/translations/template_qtemu.ts0000644000175000017500000023027711155002031021737 0ustar fboudrafboudra ChooseSystemPage ReactOS Other Select the operating system you want to install Select a System... Linux Windows 98 Windows 2000 Windows XP Windows Vista BSD ConfigWindow QtEmu Config General Default "MyMachines" Path: OK Cancel Select a folder for "MyMachines" Tabbar position: Top Bottom Left Right Start and stop QEMU Execute before start: QEMU start command: Execute after exit: Icon theme (*): Language (*): <i>(*) Change requires restart of QtEmu.</i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help Close Help not found Help not found. It is probably not installed. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Specify disk image details GB Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Path: Choose name and location for the new machine Select a folder for saving the hard disk image MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start Start this virtual machine &Stop Snapshot mode Close this machine <strong>Notes</strong> Close confirmation Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Click here to write down some notes about this machine. Error Image NOT created! Finished Image created MainWindow QtEmu Choose a virtual machine QtEmu machines About QtEmu &New Machine Ctrl+N Create a new machine &Open Machine... Ctrl+O Open an existing machine E&xit Ctrl+Q Exit the application &Start Start this virtual machine S&top Kill this machine &Restart Restart this machine Show the About box &File &Power &Help File Power Ready Main Machine loaded Ctrl+S Ctrl+T Ctrl+R &About QtEmu QtEmu &Help F1 Show Help Open an existing virtual machine Confi&gure Ctrl+G Customize the application MyMachines &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image QtEmu hard disk images Select a CD Image CD ROM images Select a Floppy Disk Image Floppy disk images Upgrade Confirmation MyMachines Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux BSD Other harddisk.html &Hard Disk Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 2000 Windows XP Windows Vista ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel < &Back Next > &Finish qtemu-2.0~alpha1/translations/qtemu_es.ts0000644000175000017500000026132111155002031020525 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Otros Select the operating system you want to install Seleccione el Sistema Operativo que desea instalar Select a System... Seleccione un Sistema... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config Configuración de QtEmu General General Default "MyMachines" Path: Ruta predeterminada de "Mis Maquinas": OK OK Cancel Cancelar Select a folder for "MyMachines" Seleccione una Carpeta para "Mis Maquinas" Tabbar position: Posición de la Barra de Tabulación: Top Arriba Bottom Abajo Left Izquierda Right Derecha Start and stop QEMU Iniciar y Detener QEMU Execute before start: Ejecutar despues de iniciar: QEMU start command: QEMU comando de inicio: Execute after exit: Ejecutar despues de salir: Icon theme (*): Tema de Iconos (*): Language (*): Lenguaje (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Los cambios requiren que QtEmu se reinicie. <i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help Ayuda de QtEmu Close Cerrar Help not found Ayuda no encontrada Help not found. It is probably not installed. Ayuda no encontrada. Probablemente no este instalada. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Tamaño de la imagen del &Disco: Specify disk image details Especifique los detalles de la imagen del Disco GB GB Error Error Finished Terminado Image created Imagen creada Image NOT created! Imagen NO creada! Click here to write down some notes about this machine. Haga Click aqui para escribir algunas notas sobre esta maquina. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Nombre: &Path: &Ruta: Choose name and location for the new machine Escoja un nombre y lugar para la nueva maquina Select a folder for saving the hard disk image Seleccione una carpeta para salvar la imagen del disco duro MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Inicio Start this virtual machine Iniciar esta maquina virtual &Stop &Detener Stop this virtual machine Detener esta maquina virtual Snapshot mode modo Snapshot &Memory &Memoria MB MB &Hard Disk &Disco duro Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Seleccione una imagen de disco duro valida para QtEmu. <b>No cambie</b> la imagen de disco duro de esta maquina virtual, al menos que sepa lo que esta haciendo.<br /><br />Imagen del disco duro para esta maquina virtual: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Seleccione una imagen valida de CD ROM o un dispositivo físico.<br /><br />Imagen o dispositivo para esta maquina virtual: &Network &Red &Enable network &Habilitar la Red Close this machine Cerrar esta Maquina <strong>Devices</strong> <strong>Dispositivos</strong> &Boot from CD ROM &Iniciar desde CD ROM &Other &Otros Virtual CPU(s) CPU(s) Virtuales <hr>Choose if the virtual machine should use the host machine clock. <hr>Escoja si la maquina virtual debe usar el reloj de la maquina anfitriona. Enable &local time Habilitar Tiempo &local <strong>Notes</strong> <strong>Notas</strong> Select a CD ROM Drive Seleccione una torre de CD ROM Select a CD Image Seleccione una Imagen de CD Choose whether the network (and internet) connection should be available for this virtual machine. Escoja si la coneción de red (e Internet) debe estar disponible para esta maquina virtual. Select a QtEmu hard disk image Seleccione una imagen de disco duro QtEmu QtEmu hard disk images imagenes de disco duro QtEmu CD ROM images imagenes CD ROM QtEmu QtEmu Cannot read file %1: %2. No puedo leer fichero %1: %2. Parse error at line %1, column %2: %3 Error de sintasis en la linea %1, columna %2: %3 The file is not a QtEmu file. No es un fichero QtEmu válido. The file is not a QtEmu version 1.0 file. No es un fichero QtEmu versi� 1.0. Cannot write file %1: %2. No puedo escribir en el fichero %1: %2. Confirm stop Confirmar Detener You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Esta a punto de detener la maquina actual. est�seguro?<br>Es mejor si apaga manualmente la maquina virtual. de continuar puede da�r la imagen del disco duro. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Establesca la cantidad de memoria para esta maquina virtual. De ser mucha cantidad, puede cocurrir intercambio con el disco duro.<br /><br />Memoria para esta maquina virtual: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Esta función no esta disponible en sistemas windows, debido a que falta la función en QEMU en estos sistemas. Pudiera ser corregido en versiones posteriores. &Floppy Disk Disco &Floppy Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Seleccione una imagen de disco floppy valida o un dispositivo físico.<br /><br />Imagen o dispositivo para esta maquina virtual: Select a Floppy Disk Image Seleccione una Imagen de Disco floppy &Boot from floppy disk &Iniciar desde Disco floppy Floppy disk images Imagenes de Disco floppy Select a Floppy Disk Drive Seleccione una torre de Disco floppy Close confirmation Cerrar confitmación Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. ¿Esta seguro que desea cerrar esta maquina virtual? <br /> Usted puede abrirla otra vez con el fichero .qte correspondiente en su carpeta "Mis Maquinas". C&ustom network options (leave blank for the default): &Opciones de Red Personalizadas (en blanco por defecto): &Sound &Sonido Choose whether sound support should be available for this virtual machine. Escoja si el soporte de sonido debe estar disponible para esta maquina virtual. &Enable sound &Habilitar Sonido Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Escoja si el ratón debe comnutar de forma transparente entre la maquina virtual y el sistema anfitrión. Esta opción depende del sistema operativo de la maquina virtual. Por ejemplo no está soportado en sistemas sin interfas Gráfica.<strong>Atención: </strong> Esta opción puede reducir el desempeño del sistema. Enable seamless mo&use Habilitar conmutación tran&sparente del ratón <hr>Choose the number of &virtual CPUs. <hr>Escoja el múmero de Procesadores &virtuales. &Additional QEMU options: Opciones de QEMU &Adicionales: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Crear una maquina virtual nueva Click here to write down some notes about this machine. Haga Click aqui para escribir algunas notas sobre esta maquina. Error Error Image NOT created! Imagen NO creada! Finished Terminado Image created Imagen creada MainWindow QtEmu QtEmu Choose a virtual machine Escoja una maquina virtual QtEmu machines Maquinas QtEmu About QtEmu Acerca de QtEmu &New Machine &Nueva Maquina Ctrl+N Ctrl+N Create a new machine Crear una nueva maquina &Open Machine... &Abrir Maquina Virtual... Ctrl+O Ctrl+O Open an existing machine Abrir una Maquina Virtual existente E&xit &Salir Ctrl+Q Ctrl+Q Exit the application Salir de la aplicación &Start &Arrancar Start this virtual machine Arrancar esta maquina virtual S&top &Detener Kill this machine Detener esta maquina virtual &Restart &Reiniciar Restart this machine Reiniciar esta maquina virtual Show the About box Mostrar el dialogo Acerca de &File &Archivo &Power &Encender &Help A&yuda File Archivo Power Encender Ready Listo Main Pricipal Machine loaded Maquina cargada Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu &Acerca de QtEmu QtEmu &Help A&yuda de QtEmu F1 F1 Show Help Mostrar Ayuda <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu es una Interface Gráfica para QEMU. Que tiene la habilidad de correr sistemas operativos virtuales sobre sistemas nativos. Create a new virtual machine. A wizard will help you installing a new operating system Cree una nueva maquina virtual. Un asistente lo ayudará a instalar un sistema operativo nuevo Open an existing virtual machine Abrir una maquina virtual existente Confi&gure Confi&gurar Ctrl+G Ctrl+G Customize the application Personalice la aplicación MyMachines Mis Maquinas <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Versión %1</center><br><b><i>QtEmu</i></b> es una Interfas Gráfica para <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Todos los derechos reservados.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>Los iconos han sido tomados de los temas KDE Crystal y Oxygen los cuales estan bajo licencia LGPL. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Seleccione una imagen de disco duro QtEmu QtEmu hard disk images imagenes de disco duro QtEmu Select a CD Image Seleccione una Imagen de CD CD ROM images imagenes CD ROM Select a Floppy Disk Image Seleccione una Imagen de Disco floppy Floppy disk images Imagenes de Disco floppy Upgrade Confirmation MyMachines Mis Maquinas Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help A&yuda cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) CPU(s) Virtuales &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linux BSD Other Otros harddisk.html &Hard Disk &Disco duro Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Sonido Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Cancelar < &Back < &Atras Next > Siguiente > &Finish &Terminar qtemu-2.0~alpha1/translations/qtemu_it.ts0000644000175000017500000026220011155002031020527 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Altro Select the operating system you want to install Selezionare il sistema operativo che si desidera installare Select a System... Selezionare un Sistema... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config Configurazione di QtEmu General Generale Default "MyMachines" Path: Percorso predefinito per "I Miei Sistemi": OK Fatto Cancel Annulla Select a folder for "MyMachines" Selezionare una cartella per "I Miei Sistemi" Tabbar position: Posizione delle etichette: Top In Alto Bottom In Basso Left A Sinistra Right A Destra Start and stop QEMU Avvio e Interruzione di QEMU Execute before start: Da eseguire prima dell'avvio: QEMU start command: Comando di avvio di QEMU: Execute after exit: Da eseguire dopo l'uscita: Icon theme (*): Tema icone (*): Language (*): Lingua (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) La modifica richiede il riavvio di QtEmu.</i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help Guida di QtEmu Close Chiudere Help not found Guida non trovata Help not found. It is probably not installed. Guida non trovata. Probabilmente non è installata. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Dimensione dell'immagine del &Disco: Specify disk image details Specificare i dettagli dell'immagine del disco GB GB Error Errore Finished Concluso Image created Immagine creata Image NOT created! Immagine NON creata! Click here to write down some notes about this machine. Selezionare qui per scrivere qualche nota su questo Sistema. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Nome: &Path: &Percorso: Choose name and location for the new machine Scegliere un nome ed un percorso per il nuovo Sistema Select a folder for saving the hard disk image Selezionare una cartella per salvare l'immagine del disco fisso MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Avviare Start this virtual machine Avviare questo Sistema Virtuale &Stop &Fermare Stop this virtual machine Fermare questo Sistema Virtuale Snapshot mode Modalità di "Snapshot" (Fotografia Istantanea) &Memory &Memoria MB MB &Hard Disk &Disco Fisso Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Selezionare un'immagine valida di disco fisso per QtEmu. <b>Non cambiare</b> l'immagine del disco a meno che non si sappia cosa si sta facendo!<br /><br />Immagine di disco fisso per questo Sistema Virtuale: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Selezionare un'immagine di CD ROM valida o un device fisico.<br /><br />Immagine o device per questo Sistema Virtuale: &Network &Rete &Enable network &Abilitare la rete Close this machine Chiudere questo Sistema Virtuale <strong>Devices</strong> <strong>Periferiche</strong> &Boot from CD ROM &Avviare da CD ROM &Other &Altro Virtual CPU(s) CPU virtuali <hr>Choose if the virtual machine should use the host machine clock. <hr>Scegliere se il Sistema Virtuale debba utilizzare l'orologio del sistema fisico. Enable &local time Abilitare l'ora &locale <strong>Notes</strong> <strong>Note</strong> Select a CD ROM Drive Selezionare un'unità CD ROM Select a CD Image Selezionare un'immagine di CD Choose whether the network (and internet) connection should be available for this virtual machine. Scegliere se permettere l'abilitazione della connessione di rete (e di internet) per questo Sistema Virtuale. Select a QtEmu hard disk image Selezionare un'immagine QtEmu di disco fisso QtEmu hard disk images Immagini QtEmu di disco fisso CD ROM images Immagini CD ROM QtEmu QtEmu Cannot read file %1: %2. Impossibile leggere il file %1: %2. Parse error at line %1, column %2: %3 Errore durante l'analisi alla linea %1, colonna %2: %3 The file is not a QtEmu file. Il file non è di tipo QtEMu. The file is not a QtEmu version 1.0 file. Il file non è di tipo QtEmu versione 1.0. Cannot write file %1: %2. Impossibile scrivere il file %1: %2. Confirm stop Confermare l'arresto You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Si sta per terminare il Sistema corrente. Si è sicuri?<br>Sarebbe meglio arrestare manualmente il Sistema Virtuale. Procedendo si potrebbe danneggiare l'immagine del disco. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Impostare la dimensione per la memoria di questo Sistema Virtuale. Se si imposta un valore troppo elevato, potrebbe verificarsi swap della memoria fisica.<br /><br />Memoria per questo Sistema Virtuale: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Questa funzione non è disponibile sotto Windows a causa della mancanza della funzionalità di QEMU sotto WIndows. Verrà probabilmente corretta in una versione successiva. &Floppy Disk &Floppy Disk Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Selezionare un'immagine valida di floppy disk o una periferica fisica.<br /><br/>Immagine o periferica per questo Sistema Virtuale: Select a Floppy Disk Image Selezionare un'immagine di Floppy Disk &Boot from floppy disk &Avviare da floppy disk Floppy disk images Immagini di floppy disk Select a Floppy Disk Drive Selezionare una periferica per il Floppy Disk Close confirmation Conferma di chiusura Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Si è sicuri di voler chiudere questo Sistema?<br />Sarà possibile aprirlo nuovamente tramite il corrispondente file con estensione .qte nella propria cartella "I MieiSistemi". C&ustom network options (leave blank for the default): O&pzioni di rete personalizzate (lasciare vuoto per utilizzare quelle predefinite): &Sound &Audio Choose whether sound support should be available for this virtual machine. Scegliere se il supporto audio debba essere disponibile per questo Sistema Virtuale. &Enable sound Abilitar&e l'audio Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Scegliere se il puntatore del mouse debba spostarsi in maniera trasparente tra host e Sistema Virtuale. Questa opzione dipende dal sistema operativo. Non è ad esempio supportata da sistemi <i>text based</i>. <strong>Attenzione:</strong> Questa opzione potrebbe ridurre le prestazioni del sistema. Enable seamless mo&use Abilitare modalità mo&use trasparente <hr>Choose the number of &virtual CPUs. <hr>Scegliere il numero di CPU &virtuali. &Additional QEMU options: Opzioni &addizionali di QEMU: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Creare un nuovo Sistema Click here to write down some notes about this machine. Selezionare qui per scrivere qualche nota su questo Sistema. Error Errore Image NOT created! Immagine NON creata! Finished Concluso Image created Immagine creata MainWindow QtEmu QtEmu Choose a virtual machine Scegliere un Sistema Virtuale QtEmu machines Sistemi QtEmu About QtEmu Informazioni su QtEmu &New Machine &Nuovo Sistema Ctrl+N Ctrl+N Create a new machine Crea un nuovo Sistema &Open Machine... &Aprire Sistema... Ctrl+O Ctrl+O Open an existing machine Apre un Sistema esistente E&xit &Uscire Ctrl+Q Ctrl+Q Exit the application Esce dall'applicazione &Start &Avviare Start this virtual machine Avvia questo Sistema Virtuale S&top &Fermare Kill this machine Termina questo Sistema Virtuale &Restart &Riavviare Restart this machine Riavvia questo Sistema Virtuale Show the About box Mostra riquadro "Informazioni su..." &File &File &Power &Accendere &Help &Guida File File Power Accendere Ready Pronto Main Principale Machine loaded Sistema Virtuale caricato Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu Inform&azioni su QtEmu QtEmu &Help &Guida di QtEmu F1 F1 Show Help Mostra la Guida <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu è un'interfaccia grafica per QEMU. Ha la capacità di poter eseguire sistemi operativi virtuali all'interno di sistemi fisici. Create a new virtual machine. A wizard will help you installing a new operating system Creare un nuovo Sistema Virtuale. Un wizard vi assisterà nell'installazione di un nuovo sistema Open an existing virtual machine Aprire un Sistema Virtuale esistente Confi&gure Confi&gurazione Ctrl+G Ctrl+G Customize the application Personalizza l'applicazione MyMachines I MieiSistemi <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Versione %1</center><br><b><i>QtEmu</i></b> è un'interfaccia grafica per gestire <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br>Tutti i diritti sono riservati.<br><br>Il programma viene fornito<br>NELLO STATO IN CUI SI TROVA SENZA GARANZIA DI ALCUN TIPO.<br><br>Le icone utilizzate provengono dai temi<br>Crystal e Oxygen di KDE che sono sotto licenza LGPL. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Selezionare un'immagine QtEmu di disco fisso QtEmu hard disk images Immagini QtEmu di disco fisso Select a CD Image Selezionare un'immagine di CD CD ROM images Immagini CD ROM Select a Floppy Disk Image Selezionare un'immagine di Floppy Disk Floppy disk images Immagini di floppy disk Upgrade Confirmation MyMachines I MieiSistemi Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help &Guida cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) CPU virtuali &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linux BSD Other Altro harddisk.html &Hard Disk &Disco Fisso Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Audio Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Annulla < &Back < &Indietro Next > Avanti > &Finish &Fine qtemu-2.0~alpha1/translations/qtemu_fr.ts0000644000175000017500000026206211155002031020530 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Autre Select the operating system you want to install Choisir le système d'exploitation que vous voulez installer Select a System... Choisir un système... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config Configuration de QtEmu General Options générales Default "MyMachines" Path: Chemin par défaut "MyMachines": OK OK Cancel Annuler Select a folder for "MyMachines" Sélectionner un répertoire pour "MyMachines" Tabbar position: Position de la barre (tabbar): Top Haut Bottom Bas Left Gauche Right Droite Start and stop QEMU Démarrer et arrêter QEMU Execute before start: Exécuter avant de démarrer: QEMU start command: commande de démarrage de QEMU: Execute after exit: Exécuter après la sortie: Icon theme (*): Thème d'icones (*): Language (*): Langue (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Changement nécessitant un redémarrage de QtEmu.</i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help Aide de QtEmu Close Fermer Help not found Aide introuvable Help not found. It is probably not installed. Aide introuvable. Elle n'est probablement pas installé. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Taille de l'image &disque: Specify disk image details Spécifier les détails de l'image disque GB Go Error Erreur Finished Terminer Image created Image crée Image NOT created! Image NON crée! Click here to write down some notes about this machine. Cliquer ici pour écrire quelques notes à propos de cette machine. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Nom: &Path: &Chemin: Choose name and location for the new machine Choisir le nom et le chemin pour la nouvelle machine Select a folder for saving the hard disk image Sélectionner un répertoire pour sauvegarder l'image du disque dur MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Démarrer Start this virtual machine Démarrer cette machine virtuelle &Stop &Arrêter Stop this virtual machine Arrêter cette machine virtuelle Snapshot mode mode Snapshot (image de disque en lecture seule) &Memory &Memoire MB Mo &Hard Disk &Disque Dur Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Sélectionner une image de disque dur valide pour QtEmu. <b>ne changer pas</b> l'image de disque dur à moins que vous sachiez ce que vous faites!<br /><br />Image de disque dur pour cette machine virtuelle: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Sélectionne une image de CD ROM valide ou un périphérique physique.<br /><br />Image or périphérique pour cette machine virtuelle: &Network &Réseau &Enable network &Activer le réseau Close this machine Fermer cette machine <strong>Devices</strong> <strong>Périphériques</strong> &Boot from CD ROM &Démarrer depuis le CD ROM &Other &Autre Virtual CPU(s) Processeur(s) virtuelle <hr>Choose if the virtual machine should use the host machine clock. <hr>Choisir si la machine virtuelle doit utiliser l'horloge de la machine hôte. Enable &local time Activer horloge &locale <strong>Notes</strong> <strong>Notes</strong> Select a CD ROM Drive Sélectionner un lecteur CD ROM Select a CD Image Sélectionner une image CD Choose whether the network (and internet) connection should be available for this virtual machine. Choisir si la connexion réseau (et internet) doit être disponible pour cette machine virtuelle. Select a QtEmu hard disk image Sélectionner une image de disque dur QtEmu QtEmu hard disk images Images de disque dur QtEmu CD ROM images Images CD ROM QtEmu QtEmu Cannot read file %1: %2. Le fichier %1 ne peut être lu: %2. Parse error at line %1, column %2: %3 Erreur d'analyse à la ligne %1, colonne %2: %3 The file is not a QtEmu file. Le fichier n'est pas un fichier QtEmu. The file is not a QtEmu version 1.0 file. Le fichier n'est pas un fichier QtEmu version 1.0. Cannot write file %1: %2. Le fichier %1 ne peut être écrit: %2. Confirm stop Confirmer arrêt You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Vous allez la machine en cours. Etes vous sûr?<br>Il est préférable d'arrêter manuellement la machine virtuelle. Cette manière peut endommager l'image du disque. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Définir la taille mémoire pou cette machine virtuelle. Si vous définissez une valeur trop élevé, il peut se produire un swapping mémoire.<br /><br />Memoire pour cette machine virtuelle: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Cette fonction n'est pas disponible sous Windows pour cause de fonction manquante à QEMU sous Windows. Il sera probablement corrigé dans une future version. &Floppy Disk &Disquette Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Sélectionner une image de disquette valide ou un périphérique physique.<br /><br />Image or périphérique pour cette machine virtuelle: Select a Floppy Disk Image Sélectionner une image de disquette &Boot from floppy disk &Démarrer depuis la disquette Floppy disk images Images de disquette Select a Floppy Disk Drive Sélectionner un lecteur de disquette Close confirmation Fermer la confirmation Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Etes-vous sûr de vouloir fermer cette machine?<br />Vous pouvez l'ouvrir à nouveau avec le fichier .qte correspondant dans le répertoire "MyMachines". C&ustom network options (leave blank for the default): Options résea&u personnaliser (laisser vide pour la valeur par défaut): &Sound &Son Choose whether sound support should be available for this virtual machine. Choisir si le support du son doit être disponible pour cette machine virtuelle. &Enable sound &Activer le son Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Choisir si la souris doit basculer entre l'hôte et le système virtuelle. Cette option dépend du sytème d'exploitation de la machine virtuelle. Par exemple, elle n'est pas supportée par les systèmes basé sur du texte (installations). <strong>Attention: </strong>Cette option peut réduire les performances du système. Enable seamless mo&use Activer &souris (seamless) <hr>Choose the number of &virtual CPUs. <hr>Choisir le nombre de processeur(s) &virtuelle. &Additional QEMU options: Options QEMU &additionnelles: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Créer une nouvelle machine Click here to write down some notes about this machine. Cliquer ici pour écrire quelques notes à propos de cette machine. Error Erreur Image NOT created! Image NON crée! Finished Terminer Image created Image crée MainWindow QtEmu QtEmu Choose a virtual machine Choisir une machine virtuelle QtEmu machines machines QtEmu About QtEmu A propos de QtEmu &New Machine &Nouvelle Machine Ctrl+N Ctrl+N Create a new machine Créer une nouvelle machine &Open Machine... &Ouvrir une machine... Ctrl+O Ctrl+O Open an existing machine Ouvrir une machine existante E&xit &Quitter Ctrl+Q Ctrl+Q Exit the application Quitter l'application &Start &Démarrer Start this virtual machine Démarrer cette machine virtuelle S&top Arrê&ter Kill this machine Stopper cette machine &Restart &Redémarrer Restart this machine Redémarrer cette machine Show the About box Afficher la boite de dialogue A propos &File &Fichier &Power &Mise sous tension &Help &Aide File Fichier Power Mise sous tension Ready Prêt Main Principale Machine loaded Machine chargé Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu &A propos de QtEmu QtEmu &Help &Aide de QtEmu F1 F1 Show Help Afficher l'aide <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu est une interface graphique pour QEMU. QEMU permet d'exécuter un ou plusieurs systèmes d'exploitation (et leurs applications) de manière isolée sur une même machine physique. Create a new virtual machine. A wizard will help you installing a new operating system Créer une nouvelle machine virtuelle. Un assistant vous aidera à installer un nouveau système d'exploitation Open an existing virtual machine Ouvrir une machine virtuelle existante Confi&gure Confi&gurer Ctrl+G Ctrl+G Customize the application Personnaliser l'application MyMachines MesMachines <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> est une interface graphique pour <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Tout droits réservés.<br><br>Le programme est fourni TEL QUEL avec AUCUNE GARANTIE D'AUCUNE SORTE.<br><br>Les icônes ont été prises du thème Crystal de KDE qui est sous licence LGPL. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Sélectionner une image de disque dur QtEmu QtEmu hard disk images Images de disque dur QtEmu Select a CD Image Sélectionner une image CD CD ROM images Images CD ROM Select a Floppy Disk Image Sélectionner une image de disquette Floppy disk images Images de disquette Upgrade Confirmation MyMachines MesMachines Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help &Aide cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) Processeur(s) virtuelle &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linux BSD Other Autre harddisk.html &Hard Disk &Disque Dur Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Son Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Annuler < &Back < &Précédent Next > Suivant > &Finish &Terminer qtemu-2.0~alpha1/translations/qtemu_pl.ts0000644000175000017500000026067111155002031020540 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Inne Select the operating system you want to install Wybierz system operacyjny, który chcesz zainstaować Select a System... Wybierz system... Linux Linuks Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config Konfiguracja QTEmu General Główne Default "MyMachines" Path: Domyślna ścieżka "Moje_Maszyny": OK OK Cancel Anuluj Select a folder for "MyMachines" Wybierz katalog dla "Moje_Maszyny" Tabbar position: Pozycja zakładek: Top Góra Bottom Dół Left Lewo Right Prawo Start and stop QEMU Uruchom i zatrzymaj QEMU Execute before start: Wykonaj przed uruchomieniem: QEMU start command: Komendy startowe QEMU: Execute after exit: Wykonaj przy wyjściu: Icon theme (*): Motyw ikon (*): Language (*): Język (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Zmiany wymagają restartu QtEmu.</i> ControlPanel Form Reload Optical Drive Reload Reload Floppy Drive Screen Shot Do Scaling Save a Screenshot Pictures Screen Controls Media Controls Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Toggle scaling the virtual machine view to fit the window Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help Pomoc QTEmu Close Zamknij Help not found Plik pomocy nie znaleziony Help not found. It is probably not installed. Plik pomocy nie znaleziony. Prawdopodobnie nie został zainstalowany. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Rozmiar obrazu &dysku: Specify disk image details Ustaw inne opcje obrazu dysku GB GB Error Błąd Finished Zakończone Image created Obraz stworzony Image NOT created! Obraz NIE ZOSTAŁ utworzony! Click here to write down some notes about this machine. Kliknij tutaj aby wpisać kilka notek o tej maszynie. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Nazwa: &Path: &Ścieżka: Choose name and location for the new machine Wybierz nazwę i lokalizację dla nowej maszyny Select a folder for saving the hard disk image Wybierz folder gdzie ma być zapisany obraz dysku MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Startuj Start this virtual machine Startuj wirtualną maszynę &Stop Zatrzymaj Stop this virtual machine Zatrzymaj tą wirtualną maszynę Snapshot mode Snapshot mode &Memory Pamięć MB MB &Hard Disk Twardy Dysk Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Wybierz prawidłowy obraz dysku twardego dla QTEmu. <b>NIE ZMIENIAJ<b> obrazu twardego dysku chyba, że wiesz co robisz!<br/><br/>Obraz twardego dysku dla tej wirtualnej maszyny: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Wybierz właściwy obraz płyty CD albo napęd fizyczny.<br /><br />Obraz lub urządzenie dla tej wirtualnej maszyny: &Network Sieć &Enable network Włącz sieć Close this machine Zamknij tą maszynę <strong>Devices</strong> <strong>Urządzenia</strong> &Boot from CD ROM Uruchom z napędu CD ROM &Other Inne Virtual CPU(s) Wirtualny procesor (CPU) <hr>Choose if the virtual machine should use the host machine clock. <hr>Wybierz czy wirtualna maszyna powinna używać zegara maszyny gospodarza. Enable &local time Ustaw &lokalny czas <strong>Notes</strong> <strong>Notatki</strong> Select a CD ROM Drive Wybierz napęd CD ROM Select a CD Image Wybierz obraz płyty CD Choose whether the network (and internet) connection should be available for this virtual machine. Wybierz czy połączenie sieciowe (i internet) powinny być dostępne dla tej wirtualnej maszyny. Select a QtEmu hard disk image Wybierz obraz twardego dysku dla QTEmu QtEmu hard disk images Obrazy twardego dysku QTEmu CD ROM images Obrazy CD ROM QtEmu QTEmu Cannot read file %1: %2. Nie mogę odczytać pliku %1:%2. Parse error at line %1, column %2: %3 Błąd w parsowaniu linii %1, kolumny %2: %3 The file is not a QtEmu file. To nie jest plik QTEmu. The file is not a QtEmu version 1.0 file. Ten plik nie jest kompatybilny z wersją 1.0 QTEmu. Cannot write file %1: %2. Nie mogę zapisać pliku %1: %2. Confirm stop Potwierdź zatrzymanie You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Zamierzasz zabić wirtualną maszynę. Czy jesteś pewien?<br>Lepiej byłoby gdyby została ona zamknięta ręcznie. W innym wypadku w obrazie twardego dysku mogą wystąpić błędy. Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Ustal wielkośc pamięci operacyjnej dla wirtualnej maszyny. Jeśli ustawisz zbyt dużą, może zostać użyta pamięć wymiany co spowolni działąnie.<br /><br />Pamięć dla wirtualnej maszyny: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Ta funkcja nie jest dostępna pod systemem Windows z powodu ich braku w wersji QEMU dla windows. Prawdpodobnie zostanie to poprawione w następnej wersji QEMU. &Floppy Disk Stacja dyskietek Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Wybierz obraz dyskietki lub urządzenie stacji dysków.<br /><br />Obraz lub urządzenie dla tej maszyny: Select a Floppy Disk Image Wybierz Obraz Dyskietki &Boot from floppy disk Startuj ze stacji dysków Floppy disk images Obrazy dyskietek Select a Floppy Disk Drive Wybierz urządzenie stacji dysków Close confirmation Potwierdzenie zamknięcia Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Czy napewno chcesz zamknąć wirtualną maszynę?<br />Mozesz ją znów uruchomić używając pliku .qte ,który znajduje się w katalogu "Moje_Maszyny". C&ustom network options (leave blank for the default): &Ustaw opcje sieci (zostaw puste dla domyślnych): &Sound &Dźwięk Choose whether sound support should be available for this virtual machine. Wybierz czy dźwięk ma być dostępny na tej wirtualnej maszynie. &Enable sound &Aktywuj dźwięk Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Czy kursor myszki powinien być automatycznie przechwytywany pomiędzy systemem gościnnym a gospodarzem (bez potrzeby używania odpowiedniego klawisza funkcyjnego). Ta opcja zależy od uruchamianego wirtualnego systemu. Nie jest ona dostępna np: na systemach tekstowych (tj: dos lub konfiguratory tekstowe). <strong>Uwaga: </strong>Ta opcja może spowodować obniżenie wydajności wirtualizacji. Enable seamless mo&use Włącz przechwytywanie k&ursora myszki <hr>Choose the number of &virtual CPUs. <hr>Wybierz ilość wirtualnych procesorów. &Additional QEMU options: Dod&atkowe opcje QEMU: &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. (uncheck to commit changes) QtEmu Error &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off Hold down this button for additional options QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Stwórz nową Maszynę Click here to write down some notes about this machine. Kliknij tutaj aby wpisać kilka notek o tej maszynie. Error Błąd Image NOT created! Obraz NIE ZOSTAŁ utworzony! Finished Zakończone Image created Obraz stworzony MainWindow QtEmu QtEmu Choose a virtual machine Wybierz wirtualną maszynę QtEmu machines Maszyny QTEmu About QtEmu O QtEmu &New Machine &Nowa Maszyna Ctrl+N Ctrl+N Create a new machine Utwórz nową maszynę &Open Machine... &Otwórz Maszynę... Ctrl+O Ctrl+O Open an existing machine Otwórz istniejącą maszynę E&xit Zamknij Ctrl+Q Ctrl+Q Exit the application Wyjdź z programu &Start &Startuj Start this virtual machine Uruchom tą wirtualną maszynę S&top Zatrzymaj Kill this machine Zabij tą maszynę &Restart &Restartuj Restart this machine Restartuj tą maszynę Show the About box Pokaż informacje O &File Plik &Power Włącz &Help Pomoc File Plik Power Włącz Ready Gotowy Main Główny Machine loaded Maszyna załadowana Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu O QTEmu QtEmu &Help QtEmu &Help F1 F1 Show Help Pokaż Pomoc <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu to graficzny interfejs dla QEMU. Posiada on możliwość uruchamiania wirtualnych systemów operacyjnych bez ingerencji w system główny. Create a new virtual machine. A wizard will help you installing a new operating system Utwórz nową witualną maszynę. Kreator pomoże Ci zainstalować nowy system Open an existing virtual machine Otwórz istniejącą wirtualną maszynę Confi&gure Konfi&guruj Ctrl+G Ctrl+G Customize the application Dostosuj aplikację MyMachines Moje_Maszyny <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Wersja %1</center><br><b><i>QtEmu</i></b> jest graficznym interfejsem dla programu <a href=http://qemu.org>QEMU</a>.<br><br>Copyright; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Wszystkie prawa zastrzeżone.<br><br>Program jest udostępniony bez ŻADNYCH GWARANCJI.<br><br>Ikony zostały wzięte z motywu KDE Crystal oraz Oxygen, które są objęte licencją LGPL. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Wybierz obraz twardego dysku dla QTEmu QtEmu hard disk images Obrazy twardego dysku QTEmu Select a CD Image Wybierz obraz płyty CD CD ROM images Obrazy CD ROM Select a Floppy Disk Image Wybierz Obraz Dyskietki Floppy disk images Obrazy dyskietek Upgrade Confirmation MyMachines Moje_Maszyny Settings Cpu / Memory Hard Disk Removable Media Virtual Drives Networking Sound Display Other Options &Help Pomoc cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Virtual CPU(s) Wirtualny procesor (CPU) &Memory for this virtual machine: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Enable Hardware &Virtualization Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: Use the &System Clock Linux Linuks BSD Other Inne harddisk.html &Hard Disk Twardy Dysk Select a valid hard disk image for QtEmu. Upgrade Image Upgrade your image to enable advanced features removablemedia.html CD/DVD Image or device: Clear Boot from CD/DVD Floppy disk Image or device: Boot from floppy disk usb.html virtualdrives.html networking.html sound.html &Sound &Dźwięk Enable sound display.html &Display Embedded Display VNC Transport TCP tcp Host: Port: File Socket unix Allow remote connection instead of embedding Scale display to fit window otheroptions.html Additional QEMU Options Use Additional Options: Pre / Post Scripts These commands will be executed before or after QEMU Execute Before: Execute After: about:blank This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. USB Support Display an online help dialog Change the number of virtual CPUs your machine has Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS Installed Operating System The Hard Disk Image QtEmu tries to boot from. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Try to boot from the CD first enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Enable a virtual sound card Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation Allow the guest virtual machine to show in an embedded window within QtEmu Select the Transport VNC uses Do not change this unless you have a good reason Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Toggle scaling the virtual machine view to fit the window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Enter your own options You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Enable or disable this script UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Anuluj < &Back < Powrót Next > Następny > &Finish Zakończ qtemu-2.0~alpha1/translations/qtemu_cz.ts0000644000175000017500000026065111155002031020537 0ustar fboudrafboudra ChooseSystemPage ReactOS ReactOS Other Jiný Select the operating system you want to install Zvolte operační systém, který chcete nainstalovat Select a System... Zvolte systém... Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista BSD ConfigWindow QtEmu Config QtEmu nastavení General Obecné Default "MyMachines" Path: Výchozí adresář "MyMachines": OK OK Cancel Zrušit Select a folder for "MyMachines" Zvolte složku pro "MyMachines" Tabbar position: Umístění panelu záložek: Top Nahoře Bottom Dole Left Vlevo Right Vpravo Start and stop QEMU Spuštění QEMU Execute before start: Provést před spuštením: QEMU start command: Příkaz pro spuštění QEMU: Execute after exit: Provést po ukončení: Icon theme (*): Motiv ikon (*): Language (*): Jazyk (*): <i>(*) Change requires restart of QtEmu.</i> <i>(*) Změna vyžaduje znovuspuštění QtEmu.</i> ControlPanel Save a Screenshot Pictures Form Screen Controls Media Controls Reload Optical Drive Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Eject the CD ROM from the guest and re-insert the new one specified above. Reload Reload Floppy Drive enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Eject the old floppy from the guest and re-insert the new one specified above. Send special keys to the guest OS. Useful for key strokes that are intercepted by the host and cannot be sent directly. Send Special Keys Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen Ctrl+Alt+Return Save a screen shot to a file Screen Shot Toggle scaling the virtual machine view to fit the window Do Scaling Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse GuestInterface random HardDiskManager Upgrading your hard disk image failed! Do you have enough disk space?<br />You may want to try upgrading manually using the program qemu-img. QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable. QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable. HelpWindow QtEmu Help QtEmu nápověda Close Zavřít Help not found Nápověda nenalezena Help not found. It is probably not installed. Nápověda nenalezena. Pravděpodobně není nainstalována. HostInterface User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP ImagePage &Disk image size: Velikost obrazu pevného &disku: Specify disk image details Zvolte podrobnosti nastavení obrazu disku GB GB Error Chyba Finished Hotovo Image created Obraz vytvořen Image NOT created! Obraz NEBYL vytvořen! Click here to write down some notes about this machine. Pro zapsáni poznámek o tomto virtuálním počítači klepněte sem. Disk image format: Native image (qcow) Raw image (img) VMWare image (vmdk) The native image format enables<br>suspend/resume features, all other formats<br>lack suspend/resume. Use "Native image (qcow)"<br>unless you know what you are doing. LocationPage &Name: &Jméno: &Path: &Adresář: Choose name and location for the new machine Zvolte jméno a adresář pro nový virtuální počítač Select a folder for saving the hard disk image Zvolte složku pro uložení obrazu disku MachineProcess ALSA OSS PulseAudio ESD MachineTab &Start &Spustit Start this virtual machine Spustit tento virtuální počítač &Stop &Zastavit Stop this virtual machine Zastavit tento virtuální počítač Snapshot mode Snapshot mód &Memory &Paměť RAM MB MB &Hard Disk Pevný &Disk Select a valid hard disk image for QtEmu. Do <b>not change</b> the hard disk image unless you know what you are doing!<br /><br />Hard disk image for this virtual machine: Existující obraz disku pro QtEmu. Měňte obraz disku <b>jen</b> ,pokud víte, co děláte!<br /><br />Obraz disku tohoto virtuálního počítače: &CD ROM &CD ROM Select a valid CD ROM image or a physical device.<br /><br />Image or device for this virtual machine: Zvolte platný obraz CD ROM nebo fyzickou jednotku.<br /><br />Obraz nebo fyzická jednotka pro tento virtuální počítač: &Network &Síť &Enable network &Aktivovat síť Close this machine Zavřít tento virtuální počítač <strong>Devices</strong> <strong>Zařízení</strong> &Boot from CD ROM &Bootovat z CD ROM &Other &Ostatní Virtual CPU(s) Virtuální CPU <hr>Choose if the virtual machine should use the host machine clock. <hr>Zvolte zdali virtuální pocítač smí použít lokalizovaný čas Vašeho počítače. Enable &local time Povolit &místní čas <strong>Notes</strong> <strong>Poznámky</strong> Select a CD ROM Drive Zvolte CD ROM jednotku Select a CD Image Zvolte obraz CD Choose whether the network (and internet) connection should be available for this virtual machine. Zvolte zdali virtuální počítač dostane přístup k síti (a k internetu). Select a QtEmu hard disk image Zvolte obraz disku QtEmu QtEmu hard disk images Obrazy disku QtEmu CD ROM images Obraz CD QtEmu QtEmu Cannot read file %1: %2. Nelze přečíst soubor %1:%2. Parse error at line %1, column %2: %3 Chyba parsování na řádku %1, sloupec %2:%3 The file is not a QtEmu file. To není soubor QtEmu. The file is not a QtEmu version 1.0 file. Tento soubor není typu QtEmu v 1.0. Cannot write file %1: %2. Nelze uložit soubor %1:%2. Confirm stop Potvrd'te přerušení You are going to kill the current machine. Are you sure?<br>It would be better if you shut the virtual machine manually down. This way damage on the disk image may occur. Chystáte se ukončit tento virtuální počítač "natvrdo" - může dojít k poškození obrazu disku. Jste si jistý? Set the size of memory for this virtual machine. If you set a too high amount, there may occur memory swapping.<br /><br />Memory for this virtual machine: Nastavte velikost paměti RAM pro tento virtuální počítač. Vysoké hodnoty mohou vyvolat swapování.<br /><br />Pamět pro tento virtuální počítač: This function is not available under Windows due to the missing function of QEMU under Windows. It will probably be fixed in a later version. Tato funkce není k dizpoci ve Windows z důvodu absence této fukce v QEMU pod Windows. &Floppy Disk &Disketa Select a valid floppy disk image or a physical device.<br /><br />Image or device for this virtual machine: Zvolte platný obraz diskety nebo fyzickou jednotku.<br /><br />Obraz nebo fyzická jednotka pro tento virtuální počítač: Select a Floppy Disk Image Zvolte obraz diskety &Boot from floppy disk &Bootovat z diskety Floppy disk images Obrazy disket Select a Floppy Disk Drive Zvolte disketovou jednotku Close confirmation Potvrzení zavření Are you sure you want to close this machine?<br />You can open it again with the corresponding .qte file in your "MyMachines" folder. Chcete zavřít tento virtuální počítač?<br />Můžete jej otevřít odpovídajícím .qte souborem ve složce "MyMachines". C&ustom network options (leave blank for the default): Vlastní nasta&vení sítě (zanechate prázdné pro výchozí nastavení): &Sound &Zvuk Choose whether sound support should be available for this virtual machine. Zvolte zdali podpora zvuku má být k dispozici pro tento virtuální počítač. &Enable sound &Aktivovat zvuk Choose whether the mouse should switch seamlessly between host and virtual system. This option depends on the operating system. It is for example not supported by text based systems. <strong>Attention:</strong> This option may reduce the system performance. Zvolte zdali se myš smí pohybovat bezmezně mezi opravdovým systémem a virtuálním počítačem. Toto nastavení závisí na operačním systému virtuálního počítače. Na příklad to nepodporují textové systémy. <strong>Pozor: </strong>Tato volba může snížit výkon systému. Enable seamless mo&use Aktivovat &bezmeznou myš <hr>Choose the number of &virtual CPUs. <hr>Zvolte počet &virtuálních CPU. &Additional QEMU options: &Dodatečné nastavení QEMU: &Shutdown &Force Poweroff Tell this virtual machine to shut down Force this virtual machine to stop immediately Hold down this button for additional options &Suspend Suspend this virtual machine &Resume Resume this virtual machine &Pause Pause/Unpause this virtual machine Set preview screenshot <strong>Control Panel</strong> Display Settings Console Enter Command Resume Your machine is being resumed. USB devices will not function properly on Windows. You must reload<br />the USB driver to use your usb devices including the seamless mouse.<br />In addition the advanced VGA adapter will not refresh initially on any OS. This will force the current machine to power down. Are you sure?<br />You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image. Force Power Off QtEmu machine already running! There is already a virtual machine running on the specified<br />VNC port or file. This may mean a previous QtEmu session crashed; <br />if this is the case you can try to connect to the virtual machine <br />to rescue your data and shut it down safely.<br /><br />Try to connect to this machine? QtEmu Sound Error QtEmu is having trouble accessing your sound system. Make sure<br />you have your host sound system selected correctly in the Sound<br />section of the settings tab. Also make sure your version of <br />qemu/KVM has support for the sound system you selected. QtEmu Error An error has occurred. This may have been caused by<br />an incorrect setting. The error is:<br /> (uncheck to commit changes) MachineView QtEmu Fullscreen Fullscreen Exit Fullscreen Mode Scale Display MachineWizard Image NOT created!<br> You may be missing either qemu-img or kvm-img, or they are not executable! Image NOT created!<br> You may be missing qemu/qemu-img.exe! Create a new Machine Vytvořit nový virtuální počítač Click here to write down some notes about this machine. Pro zapsáni poznámek o tomto virtuálním počítači klepněte sem. Error Chyba Image NOT created! Obraz NEBYL vytvořen! Finished Hotovo Image created Obraz vytvořen MainWindow QtEmu QtEmu Choose a virtual machine Zvolte virtuální počítač QtEmu machines Počítače QtEmu About QtEmu O programu QtEmu &New Machine &Nový virtuální počítač Ctrl+N Ctrl+N Create a new machine Vytvořit nový virtuální počítač &Open Machine... &Otevřít virtuální počítač... Ctrl+O Ctrl+O Open an existing machine Otevřít existující počítač E&xit &Konec Ctrl+Q Ctrl+Q Exit the application Ukončit program &Start &Spustit Start this virtual machine Spustit tento virtuální počítač S&top Zas&tavit Kill this machine Ukončit tento počítač "natvrdo" &Restart &Restart Restart this machine Restartovat tento počítač Show the About box Zobrazit informace o programu &File &Soubor &Power &Počítač &Help &Nápověda File Soubor Power Počítač Ready Připraven Main Hlavní Machine loaded Počítač nastartován Ctrl+S Ctrl+S Ctrl+T Ctrl+T Ctrl+R Ctrl+R &About QtEmu &O programu QtEmu QtEmu &Help QtEmu &Nápověda F1 F1 Show Help Zobrazit nápovědu <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. <h1>QtEmu</h1>QtEmu je grafické uživatelské rozhraní pro emulátor QEMU. Tento program umožnuje spouštení virtuálních operačních systémů na mateřských systémech. Create a new virtual machine. A wizard will help you installing a new operating system Vytvořte nový virtuální počítač. Průvodce Vám pomůže nainstalovat nový operační systém Open an existing virtual machine Otevřít existující virtuální počítač Confi&gure &Nastavit Ctrl+G Ctrl+G Customize the application Přizpůsobit program MyMachines Moje počítače <center><h2>QtEmu</h2>Version %1</center><br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. <center><h2>QtEmu</h2>Verze %1</center><br><b><i>QtEmu</i></b> je grafické uživatelské rozhraní pro emulátor <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2007 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>. Všechna práva vyhrazena.<br><br>Tento program je poskytován TAK, JAK JE, BEZ JAKÉKOLI ZÁRUKY.<br><br>Ikony byly převzaty z KDE motivů Crystal a Oxygen pod licencí LGPL. Virtual Machine Saving State! You have virtual machines currently saving thier state.<br />Quitting now would very likely damage your Virtual Machine!! Exit confirmation You have virtual machines currently running. Are you sure you want to quit?<br />quitting in this manner may cause damage to the virtual machine image! <h2>QtEmu</h2>Version %1<br><b><i>QtEmu</i></b> is a graphical user interface for <a href=http://qemu.org>QEMU</a>.<br><br>Copyright &copy; 2006-2008 Urs Wolfer <a href=mailto:uwolfer%2fwo.ch>uwolfer%2fwo.ch</a>.<br />Copyright &copy; 2008 Ben Klopfenstein <a href=mailto:benklop%2gmail.com>benklop%2gmail.com</a>.<br />All rights reserved.<br><br>The program is provided AS IS with NO WARRANTY OF ANY KIND.<br><br>The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed. &Pause Ctrl+P Pause this machine <h1>QtEmu</h1>QtEmu is a graphical user interface for QEMU. It has the ability to run operating systems virtually in a window on native systems. Create a new virtual machine. A wizard will help you prepare for a new operating system NetworkPage Form &Networking Enable networking Enable network Enter the advanced network settings dialog Advanced Settings Select Network Interface Type: Guest Interfaces Host Interfaces User Mode Bridged Interface Routed Interface Assign MAC address automatically <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> Shared Virtual Lan Custom TAP Assign Hostname via DHCP Set up TFTP Server Broadcast BOOTP File Port Redirection... Host Interface Name Bridge Interface Name Bridged Hardware Interface Use Spanning Tree Hardware interface to route to Shared Virtual Lan Transport UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp Select Bus Address Select Bus Port TAP Interface Name Interface Up Script Interface Down Script Assign to Host Interface Interface MAC Address Custom networking options disable all automatic options i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Emulated Network Card Model Generate new MAC Set a new, random MAC address upon each boot Custom networking options: Enter cutom networking options SettingsTab Select a QtEmu hard disk image Zvolte obraz disku QtEmu QtEmu hard disk images Obrazy disku QtEmu Select a CD Image Zvolte obraz CD CD ROM images Obraz CD Select a Floppy Disk Image Zvolte obraz diskety Floppy disk images Obrazy disket Upgrade Confirmation This will upgrade your Hard Disk image to the qcow format.<br />This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.<br />Your old image will remain intact, so if you want to revert afterwards you may do so. MyMachines Moje počítače Settings Cpu / Memory Hard Disk Removable Media USB Support Networking Sound Display Other Options Display an online help dialog &Help &Nápověda cpu-memory.html Cpu / &Memory Number of virtual &CPUs: Change the number of virtual CPUs your machine has Virtual CPU(s) Virtuální CPU &Memory for this virtual machine: Mb Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. Enable Hardware &Virtualization ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. Enable ACPI Allow the virtual machine to use the system clock for improved accuracy: This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Use the &System Clock Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Linux Linux Windows 98 Windows 98 Windows 2000 Windows 2000 Windows XP Windows XP Windows Vista ReactOS ReactOS BSD Other Jiný Installed Operating System harddisk.html &Hard Disk Pevný &Disk Select a valid hard disk image for QtEmu. The Hard Disk Image QtEmu tries to boot from. Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Upgrade Image Upgrade your image to enable advanced features Image Information Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size removablemedia.html CD/DVD Image or device: Enter a CD image name or /dev/cdrom to use the host cd drive. /dev/cdrom secect a new CD image Clear Try to boot from the CD first Boot from CD/DVD Floppy disk Image or device: enter a floppy image or /dev/floppy to use the host floppy drive. /dev/floppy secect a new floppy disk image Try to boot from the floppy first Boot from floppy disk usb.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> networking.html sound.html &Sound &Zvuk Enable a virtual sound card Enable sound Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation display.html &Display Allow the guest virtual machine to show in an embedded window within QtEmu Embedded Display Select the Transport VNC uses VNC Transport TCP tcp Port: Host: Do not change this unless you have a good reason File Socket unix Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. Allow remote connection instead of embedding Toggle scaling the virtual machine view to fit the window Scale display to fit window Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) otheroptions.html Additional QEMU Options Enter your own options Use Additional Options: You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Pre / Post Scripts These commands will be executed before or after QEMU Enable or disable this script Execute Before: Execute After: virtualdrives.html Virtual Drives about:blank UsbPage UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support USB Devices Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse VncView Password required Please enter the password for the remote desktop: Wizard Cancel Zrušit < &Back < &Zpět Next > Další > &Finish &Dokončit qtemu-2.0~alpha1/machineprocess.h0000644000175000017500000000676311201111746017003 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINEPROCESS_H #define MACHINEPROCESS_H #include #include #include #include "qtemuenvironment.h" #include "harddiskmanager.h" class NetConfig; class UsbConfig; class MachineProcess : public QObject { Q_OBJECT public: enum ProcessState {NotRunning = 0, Starting = 1, Running = 2, Stopping = 3, Saving = 4}; MachineProcess(MachineTab *parent = 0); qint64 write(const QByteArray & byteArray); HardDiskManager* getHdManager(); UsbConfig* getUsbConfig(); QProcess* getProcess(); bool event(QEvent *event); MachineProcess::ProcessState state(); void checkIfRunning(); public slots: void start(); void resume(const QString& snapshotName = QString("Default")); void suspend(const QString& snapshotName = QString("Default")); void stop(); void forceStop(); void togglePause(); void changeCdrom(); void changeFloppy(); void loadCdrom(); signals: void suspending(const QString & snapshotName); void suspended(const QString & snapshotName); void booting(); void resuming(const QString & snapshotName); void resumed(const QString & snapshotName); void error(const QString & errorText); void stdout(const QString & stdoutText); void stdin(const QString & stdoutText); void rawConsole(const QString & consoleOutput); void cleanConsole(const QString & consoleOutput); void stateChanged(MachineProcess::ProcessState newState); void started(); void finished(); private: void getVersion(); void commitTmp(); void createTmp(); QStringList buildParamList(); QStringList buildEnvironment(); QString snapshotNameString; QtEmuEnvironment env; long versionMajor, versionMinor, versionBugfix, kvmVersion; bool paused; bool doResume; HardDiskManager *hdManager; QString lastOutput; QStringList outputParts; MachineProcess::ProcessState myState; NetConfig *netConfig; UsbConfig *usbConfig; QLocalSocket *console; QProcess *process; private slots: void connectToProcess(); void beforeRunExecute(); void afterExitExecute(); void readProcess(); void readProcessErrors(); void writeDebugInfo(const QString& debugText); void resumeFinished(const QString& returnedText); void suspendFinished(const QString& returnedText); void deleteTmp(int successfulCommit); void saveState(MachineProcess::ProcessState newState); }; #endif qtemu-2.0~alpha1/machineview.cpp0000644000175000017500000001743711215051465016640 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machineview.h" #include #include #include #include #include #include #include #include MachineView::MachineView(MachineConfigObject *config, QWidget *parent) : QWidget(parent) , view(new VncView(this)) , splash(new MachineSplash(this)) , config(config) , fullscreenEnabled(false) { embeddedScrollArea = new MachineScrollArea(this); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(embeddedScrollArea); setLayout(layout); showSplash(true); connect(embeddedScrollArea, SIGNAL(resized(int, int)), view, SLOT(scaleResize(int, int))); } MachineView::~MachineView() { } void MachineView::initView() { showSplash(true); delete view; QUrl url; url.setScheme("vnc"); if(property("vncTransport").toString() == "tcp") { url.setHost(property("vncHost").toString()); url.setPort(property("vncPort").toInt() + 5900); } else { QString socketLocation = property("hdd").toString(); socketLocation.replace(QRegExp("[.][^.]+$"), ".vnc"); url.setPath(socketLocation); } //#ifdef DEVELOPER qDebug("connecting to:" + url.toString().toAscii()); //#endif view = new VncView(this, url); view->start(); showSplash(false); connect(view, SIGNAL(changeSize(int, int)), this, SLOT(newViewSize())); } void MachineView::showSplash(bool show) { if(!show) { splash->hide(); embeddedScrollArea->takeWidget(); embeddedScrollArea->setWidget(view); embeddedScrollArea->setSplashShown(false); view->show(); } else { view->hide(); embeddedScrollArea->takeWidget(); embeddedScrollArea->setWidget(splash); embeddedScrollArea->setSplashShown(true); splash->show(); splash->setPreview(); } } void MachineView::fullscreen(bool enable) { if(enable) { //entering fullscreen showSplash(true); fullscreenWindow = new QWidget(this, Qt::Window); fullscreenWindow->setWindowTitle(tr("QtEmu Fullscreen") + " (" + property("name").toString() + ')'); fullscreenScrollArea = new MachineScrollArea(fullscreenWindow); fullscreenScrollArea->setWidget(view); fullscreenScrollArea->setProperty("scaleEmbeddedDisplay", property("scaleEmbeddedDisplay")); connect(fullscreenScrollArea, SIGNAL(resized(int, int)), view, SLOT(scaleResize(int, int))); QPalette palette = fullscreenScrollArea->palette(); palette.setColor(QPalette::Dark, QColor(22,22,22)); fullscreenScrollArea->setPalette(palette); fullscreenScrollArea->setBackgroundRole(QPalette::Dark); QVBoxLayout *fullscreenLayout = new QVBoxLayout(fullscreenWindow); fullscreenLayout->setMargin(0); fullscreenLayout->addWidget(fullscreenScrollArea); MinimizePixel *minimizePixel = new MinimizePixel(fullscreenWindow); minimizePixel->winId(); // force it to be a native widget (prevents problem with QX11EmbedContainer) connect(minimizePixel, SIGNAL(rightClicked()), fullscreenWindow, SLOT(showMinimized())); fullscreenWindow->setWindowFlags(Qt::Window); fullscreenWindow->showFullScreen(); showToolBar(); captureAllKeys(true); view->grabKeyboard(); } else if(fullscreenEnabled) { //exiting fullscreen //show(); fullscreenWindow->setWindowState(0); fullscreenWindow->hide(); //get rid of the toolbar config->unregisterObject(scaleAction); toolBar->hideAndDestroy(); toolBar->deleteLater(); toolBar = 0; fullscreenWindow->deleteLater(); fullscreenWindow = 0; showSplash(false); } fullscreenEnabled = enable; emit fullscreenToggled(enable); view->switchFullscreen(enable); } void MachineView::showToolBar() { //create actions //TODO: make actions shared between everyplace QAction *fullscreenAction = new QAction(QIcon(":/images/oxygen/fullscreen.png"), tr("Fullscreen"), this); fullscreenAction->setToolTip(tr("Exit Fullscreen Mode")); fullscreenAction->setCheckable(true); fullscreenAction->setChecked(true); connect(fullscreenAction, SIGNAL(toggled( bool )), this, SLOT(fullscreen(bool))); scaleAction = new QAction(QIcon(":/images/oxygen/scale.png"), tr("Scale Display"), this); config->registerObject(scaleAction, "scaleEmbeddedDisplay"); //add a toolbar toolBar = new FloatingToolBar(fullscreenWindow, fullscreenWindow); toolBar->winId(); toolBar->setSide(FloatingToolBar::Top); toolBar->addAction(fullscreenAction); toolBar->addAction(scaleAction); QLabel *guestLabel = new QLabel(property("name").toString(), toolBar); toolBar->addWidget(guestLabel); toolBar->showAndAnimate(); } void MachineView::captureAllKeys(bool enabled) { view->setGrabAllKeys(enabled); } void MachineView::sendKey(QKeyEvent * event) { view->keyEvent(event); } void MachineView::newViewSize() { MachineScrollArea *currentScrollArea; if(fullscreenEnabled) currentScrollArea = fullscreenScrollArea; else currentScrollArea = embeddedScrollArea; currentScrollArea->setProperty("scaleEmbeddedDisplay", property("scaleEmbeddedDisplay")); currentScrollArea->resizeView(currentScrollArea->maximumViewportSize().width(), currentScrollArea->maximumViewportSize().height()); } bool MachineView::event(QEvent * event) { if(event->type() == QEvent::DynamicPropertyChange) { //any property changes dealt with in here QDynamicPropertyChangeEvent *propEvent = static_cast(event); if(propEvent->propertyName() == "scaleEmbeddedDisplay") { newViewSize(); } else if(propEvent->propertyName() == "preview") { splash->setPreview(property("preview").toString()); } return false; } else if(event->type() == QEvent::Enter&&!embeddedScrollArea->isSplashShown()) { view->setFocus(); view->grabKeyboard(); //repainting here fixes an issue where the vncview goes blank on mouseout //view->repaint(); return true; } else if (event->type() == QEvent::Leave) { view->clearFocus(); view->releaseKeyboard(); //repainting here fixes an issue where the vncview goes blank on mouseout //view->repaint(); return true; } else if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast(event); if (ke->key() == Qt::Key_Return && ke->modifiers() == Qt::ControlModifier + Qt::AltModifier) { fullscreen(false); return true; } } return QWidget::event(event); } qtemu-2.0~alpha1/usbpage.h0000644000175000017500000000262611160177564015436 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef USBPAGE_H #define USBPAGE_H #include #include "ui_usbpage.h" class MachineConfigObject; class UsbModel; class UsbPage : public QWidget , public Ui::UsbPage { Q_OBJECT public: UsbPage(MachineConfigObject *config, QWidget *parent); ~UsbPage(); UsbModel* getModel(); private: MachineConfigObject *config; void registerWidgets(); UsbModel *model; }; #endif // USBPAGE_H qtemu-2.0~alpha1/cmake/0000755000175000017500000000000011217515374014707 5ustar fboudrafboudraqtemu-2.0~alpha1/cmake/modules/0000755000175000017500000000000011217515374016357 5ustar fboudrafboudraqtemu-2.0~alpha1/cmake/modules/CheckPointerMember.cmake0000644000175000017500000000247111037720672023072 0ustar fboudrafboudra# - Check if the given struct or class has the specified member variable # CHECK_POINTER_MEMBER (POINTER MEMBER HEADER VARIABLE) # # POINTER - the name of the struct or class you are interested in # MEMBER - the member which existence you want to check # HEADER - the header(s) where the prototype should be declared # VARIABLE - variable to store the result # # The following variables may be set before calling this macro to # modify the way the check is run: # # CMAKE_REQUIRED_FLAGS = string of compile command line flags # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) # CMAKE_REQUIRED_INCLUDES = list of include directories # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CheckCXXSourceCompiles) MACRO (CHECK_POINTER_MEMBER _STRUCT _MEMBER _HEADER _RESULT) SET(_INCLUDE_FILES) FOREACH (it ${_HEADER}) SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") ENDFOREACH (it) SET(_CHECK_POINTER_MEMBER_SOURCE_CODE " ${_INCLUDE_FILES} int main() { ${_STRUCT} tmp; tmp->${_MEMBER}; return 0; } ") CHECK_CXX_SOURCE_COMPILES("${_CHECK_POINTER_MEMBER_SOURCE_CODE}" ${_RESULT}) ENDMACRO (CHECK_POINTER_MEMBER) qtemu-2.0~alpha1/cmake/modules/FindLibVNCServer.cmake0000644000175000017500000000325311037720672022430 0ustar fboudrafboudra# cmake macro to test LIBVNCSERVER LIB # Copyright (c) 2006, Alessandro Praduroux # Copyright (c) 2007, Urs Wolfer # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CheckPointerMember) IF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) # Already in cache, be silent SET(LIBVNCSERVER_FIND_QUIETLY TRUE) ENDIF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) FIND_PATH(LIBVNCSERVER_INCLUDE_DIR rfb/rfb.h) FIND_LIBRARY(LIBVNCSERVER_LIBRARIES NAMES vncserver libvncserver) # libvncserver and libvncclient are in the same package, so it does # not make sense to add a new cmake script for finding libvncclient. # instead just find the libvncclient also in this file. FIND_PATH(LIBVNCCLIENT_INCLUDE_DIR rfb/rfbclient.h) FIND_LIBRARY(LIBVNCCLIENT_LIBRARIES NAMES vncclient libvncclient) IF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) SET(CMAKE_REQUIRED_INCLUDES "${LIBVNCSERVER_INCLUDE_DIR}" "${CMAKE_REQUIRED_INCLUDES}") CHECK_POINTER_MEMBER(rfbClient* GotXCutText rfb/rfbclient.h LIBVNCSERVER_FOUND) ENDIF (LIBVNCSERVER_INCLUDE_DIR AND LIBVNCSERVER_LIBRARIES) IF (LIBVNCSERVER_FOUND) IF (NOT LIBVNCSERVER_FIND_QUIETLY) MESSAGE(STATUS "Found LibVNCServer: ${LIBVNCSERVER_LIBRARIES}") ENDIF (NOT LIBVNCSERVER_FIND_QUIETLY) ELSE (LIBVNCSERVER_FOUND) IF (LIBVNCSERVER_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could NOT find acceptable version of LibVNCServer (version 0.9 or later required).") ENDIF (LIBVNCSERVER_FIND_REQUIRED) ENDIF (LIBVNCSERVER_FOUND) MARK_AS_ADVANCED(LIBVNCSERVER_INCLUDE_DIR LIBVNCSERVER_LIBRARIES) qtemu-2.0~alpha1/netconfig.cpp0000644000175000017500000001577311203077345016320 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machineconfigobject.h" #include "netconfig.h" #include #include #include #include //Main NetConfig Class NetConfig::NetConfig(QObject *parent, MachineConfigObject *config) : QObject(parent) , config(config) { hostIfs = new QList; guestIfs = new QList; hostIfNames = QStringList(); } void NetConfig::buildIfs() { hostIfs->clear(); guestIfs->clear(); QStringList guestNames = config->getConfig()->getAllOptionNames("net-guest", ""); QStringList hostNames = config->getConfig()->getAllOptionNames("net-host", ""); for(int i=0;iappend(new HostInterface(this,hostNames.at(i))); hostIfs->last()->setVlan(i); hostIfNames << hostIfs->last()->property("name").toString(); } for(int i=0;iappend(new GuestInterface(this,guestNames.at(i))); if(guestIfs->last()->property("host").isValid()) { guestIfs->last()->setVlan(hostIfs->at(hostIfNames.indexOf(guestIfs->last()->property("host").toString()))->getVlan()); } else { guestIfs->last()->setVlan(-1); guestIfs->last()->setProperty("enabled", false); } } } QStringList NetConfig::getOptionString() { buildIfs(); QStringList opts; QList usedHostIfs; for(int i=0;isize();i++) { if(guestIfs->at(i)->property("enabled").toBool()) { opts << guestIfs->at(i)->parseOpts(); usedHostIfs.append(hostIfs->at(hostIfNames.indexOf(guestIfs->at(i)->property("host").toString()))); } } for(int i=0;iparseOpts(); } return opts; } //Basic NetInterface Class NetInterface::NetInterface(NetConfig *parent, QString nodeType, QString nodeName) : QObject(parent) , config(parent->config) , nodeType(nodeType) , nodeName(nodeName) { config->registerObject(this, nodeType, nodeName); } int NetInterface::getVlan() { return vlan; } void NetInterface::setVlan(int number) { vlan = number; } QStringList NetInterface::parseOpts() { return QStringList(); } GuestInterface::GuestInterface(NetConfig *parent, QString nodeName) : NetInterface(parent, QString("net-guest"), nodeName) { } QStringList GuestInterface::parseOpts() { static bool firstTime = true; //need to come up with the mac properly. QString mac; if (property("randomize").toBool() || property("mac").toString() == tr("random")) { if (firstTime) { firstTime = false; QTime midnight(0, 0, 0); qsrand(midnight.secsTo(QTime::currentTime())); } mac="52:54:00:"; for (int i=1;i<=6;i++) { mac.append(QString().setNum(qrand() % 16, 16)); if(i%2 == 0 && i != 6) mac.append(":"); } setProperty("mac", mac); } else { mac = property("mac").toString(); } QStringList opts; opts << "-net" << "nic,vlan=" + QString().setNum(vlan) + ",macaddr=" + mac + ",model=" + property("nic").toString(); return opts; } HostInterface::HostInterface(NetConfig *parent, QString nodeName) : NetInterface(parent, QString("net-host"), nodeName) { } QStringList HostInterface::parseOpts() { QString type; QStringList netOpts; QStringList opts; //FIXME: this will not work for a translated gui?? if(property("type").toString() == tr("User Mode")) { //-net user[,vlan=n][,hostname=name] type="user"; //additional options for this type: netOpts << "hostname=" + property("hostname").toString(); //tftp and bootp if(property("bootp").toBool()) opts << "-bootp" << property("bootpPath").toString(); if(property("tftp").toBool()) opts << "-tftp" << property("tftpPath").toString(); //TODO: add SMB support } else if(property("type").toString() == tr("Bridged Interface")) { //-net tap[,vlan=n][,fd=h][,ifname=name][,script=file] type="tap"; //additional options for this type: //[fd=h] netOpts << "ifname=" + property("interface").toString(); //[script=file] netOpts << "script=no"; netOpts << "downscript=no"; } else if(property("type").toString() == tr("Routed Interface")) { //-net tap[,vlan=n][,fd=h][,ifname=name][,script=file] type="tap"; //additional options for this type: //[fd=h] netOpts << "ifname=" + property("interface").toString(); //[script=file] netOpts << "script=no"; netOpts << "downscript=no"; } else if(property("type").toString() == tr("Shared Virtual Lan")) { type="socket"; if(property("vlanType").toString() == "udp") { //-net socket[,vlan=n][,fd=h][,mcast=maddr:port] netOpts << "mcast=" + property("address").toString() + ':' + property("port").toString(); } else { //-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port] qDebug() << "tcp not yet supported"; } } else if(property("type").toString() == tr("Custom TAP")) { //-net tap[,vlan=n][,fd=h][,ifname=name][,script=file] type="tap"; netOpts << "ifname=" + property("interface").toString(); netOpts << "script=" + property("ifUp").toString(); netOpts << "downscript=" + property("ifDown").toString(); } opts << "-net" << type + ",vlan=" + QString().setNum(vlan) + (netOpts.isEmpty()?QString():(',' + netOpts.join(","))); return opts; } HostActionItem::HostActionItem(NetConfig *parent, HostAction action, HostItem item, QString interface, QString interfaceTo) :QObject(parent) ,action(action) ,item(item) ,interface(interface) ,toInterface(interfaceTo) { } qtemu-2.0~alpha1/vnc/0000755000175000017500000000000011217515374014415 5ustar fboudrafboudraqtemu-2.0~alpha1/vnc/vncclientthread.h0000644000175000017500000000731511155001655017742 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2007-2008 Urs Wolfer ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef VNCCLIENTTHREAD_H #define VNCCLIENTTHREAD_H #ifdef QTONLY #include #define kDebug(n) qDebug() #define kBacktrace() "" #define i18n tr #else #include #include #endif #include "remoteview.h" #include #include #include #include extern "C" { #include } class ClientEvent { public: virtual ~ClientEvent(); virtual void fire(rfbClient*) = 0; }; class KeyClientEvent : public ClientEvent { public: KeyClientEvent(int key, int pressed) : m_key(key), m_pressed(pressed) {} void fire(rfbClient*); private: int m_key; int m_pressed; }; class PointerClientEvent : public ClientEvent { public: PointerClientEvent(int x, int y, int buttonMask) : m_x(x), m_y(y), m_buttonMask(buttonMask) {} void fire(rfbClient*); private: int m_x; int m_y; int m_buttonMask; }; class ClientCutEvent : public ClientEvent { public: ClientCutEvent(const QString &text) : text(text) {} void fire(rfbClient*); private: QString text; }; class VncClientThread: public QThread { Q_OBJECT public: explicit VncClientThread(QObject *parent = 0); ~VncClientThread(); const QImage image(int x = 0, int y = 0, int w = 0, int h = 0); void setImage(const QImage &img); void emitUpdated(int x, int y, int w, int h); void emitGotCut(const QString &text); void stop(); void setHost(const QString &host); void setPort(int port); void setQuality(RemoteView::Quality quality); void setPassword(const QString &password) { m_password = password; } const QString password() const { return m_password; } RemoteView::Quality quality() const; uint8_t *frameBuffer; signals: void imageUpdated(int x, int y, int w, int h); void gotCut(const QString &text); void passwordRequest(); void outputErrorMessage(const QString &message); public slots: void mouseEvent(int x, int y, int buttonMask); void keyEvent(int key, bool pressed); void clientCut(const QString &text); protected: void run(); private: static rfbBool newclient(rfbClient *cl); static void updatefb(rfbClient *cl, int x, int y, int w, int h); static void cuttext(rfbClient *cl, const char *text, int textlen); static char* passwdHandler(rfbClient *cl); static void outputHandler(const char *format, ...); QImage m_image; rfbClient *cl; QString m_host; QString m_password; int m_port; QMutex mutex; RemoteView::Quality m_quality; QQueue m_eventQueue; volatile bool m_stopped; volatile bool m_passwordError; private slots: void checkOutputErrorMessage(); }; #endif qtemu-2.0~alpha1/vnc/remoteview.h0000644000175000017500000002713211155001655016752 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2002-2003 Tim Jansen ** Copyright (C) 2007-2008 Urs Wolfer ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef REMOTEVIEW_H #define REMOTEVIEW_H #ifdef QTONLY #include #define KUrl QUrl #define KDE_EXPORT #else #include #include #endif #include class HostPreferences; /** * Generic widget that displays a remote framebuffer. * Implement this if you want to add another backend. * * Things to take care of: * @li The RemoteView is responsible for its size. In * non-scaling mode, set the fixed size of the widget * to the remote resolution. In scaling mode, set the * maximum size to the remote size and minimum size to the * smallest resolution that your scaler can handle. * @li if you override mouseMoveEvent() * you must ignore the QEvent, because the KRDC widget will * need it for stuff like toolbar auto-hide and bump * scrolling. If you use x11Event(), make sure that * MotionNotify events will be forwarded. * */ class KDE_EXPORT RemoteView : public QWidget { Q_OBJECT public: Q_ENUMS(Quality) enum Quality { Unknown, High, Medium, Low }; /** * Describes the state of a local cursor, if there is such a concept in the backend. * With local cursors, there are two cursors: the cursor on the local machine (client), * and the cursor on the remote machine (server). Because there is usually some lag, * some backends show both cursors simultanously. In the VNC backend the local cursor * is a dot and the remote cursor is the 'real' cursor, usually an arrow. */ Q_ENUMS(DotCursorState) enum DotCursorState { CursorOn, ///< Always show local cursor (and the remote one). CursorOff, ///< Never show local cursor, only the remote one. /// Try to measure the lag and enable the local cursor if the latency is too high. CursorAuto }; /** * State of the connection. The state of the connection is returned * by @ref RemoteView::status(). * * Not every state transition is allowed. You are only allowed to transition * a state to the following state, with three exceptions: * @li You can move from every state directly to Disconnected * @li You can move from every state except Disconnected to * Disconnecting * @li You can move from Disconnected to Connecting * * @ref RemoteView::setStatus() will follow this rules for you. * (If you add/remove a state here, you must adapt it) */ Q_ENUMS(RemoteStatus) enum RemoteStatus { Connecting = 0, Authenticating = 1, Preparing = 2, Connected = 3, Disconnecting = -1, Disconnected = -2 }; Q_ENUMS(ErrorCode) enum ErrorCode { None = 0, Internal, Connection, Protocol, IO, Name, NoServer, ServerBlocked, Authentication }; virtual ~RemoteView(); /** * Checks whether the backend supports scaling. The * default implementation returns false. * @return true if scaling is supported * @see scaling() */ virtual bool supportsScaling() const; /** * Checks whether the widget is in scale mode. The * default implementation always returns false. * @return true if scaling is activated. Must always be * false if @ref supportsScaling() returns false * @see supportsScaling() */ virtual bool scaling() const; /** * Checks whether the backend supports the concept of local cursors. The * default implementation returns false. * @return true if local cursors are supported/known * @see DotCursorState * @see showDotCursor() * @see dotCursorState() */ virtual bool supportsLocalCursor() const; /** * Sets the state of the dot cursor, if supported by the backend. * The default implementation does nothing. * @param state the new state (CursorOn, CursorOff or * CursorAuto) * @see dotCursorState() * @see supportsLocalCursor() */ virtual void showDotCursor(DotCursorState state); /** * Returns the state of the local cursor. The default implementation returns * always CursorOff. * @return true if local cursors are supported/known * @see showDotCursor() * @see supportsLocalCursor() */ virtual DotCursorState dotCursorState() const; /** * Checks whether the view is in view-only mode. This means * that all input is ignored. */ virtual bool viewOnly(); /** * Checks whether grabbing all possible keys is enabled. */ virtual bool grabAllKeys(); /** * Returns the resolution of the remote framebuffer. * It should return a null @ref QSize when the size * is not known. * The backend must also emit a @ref framebufferSizeChanged() * when the size of the framebuffer becomes available * for the first time or the size changed. * @return the remote framebuffer size, a null QSize * if unknown */ virtual QSize framebufferSize(); /** * Initiate the disconnection. This doesn't need to happen * immediately. The call must not block. * @see isQuitting() */ virtual void startQuitting(); /** * Checks whether the view is currently quitting. * @return true if it is quitting * @see startQuitting() * @see setStatus() */ virtual bool isQuitting(); /** * @return the host the view is connected to */ virtual QString host(); /** * @return the port the view is connected to */ virtual int port(); /** * Initialize the view (for example by showing configuration * dialogs to the user) and start connecting. Should not block * without running the event loop (so displaying a dialog is ok). * When the view starts connecting the application must call * @ref setStatus() with the status Connecting. * @return true if successful (so far), false * otherwise * @see connected() * @see disconnected() * @see disconnectedError() * @see statusChanged() */ virtual bool start() = 0; /** * Called when the configuration is changed. * The default implementation does nothing. */ virtual void updateConfiguration(); #ifndef QTONLY /** * Returns the current host preferences of this view. */ virtual HostPreferences* hostPreferences() = 0; #endif /** * Returns the current status of the connection. * @return the status of the connection * @see setStatus() */ RemoteStatus status(); /** * @return the current url */ KUrl url(); public slots: /** * Called to enable or disable scaling. * Ignored if @ref supportsScaling() is false. * The default implementation does nothing. * @param s true to enable, false to disable. * @see supportsScaling() * @see scaling() */ virtual void enableScaling(bool scale); /** * Enables/disables the view-only mode. * Ignored if @ref supportsScaling() is false. * The default implementation does nothing. * @param viewOnly true to enable, false to disable. * @see supportsScaling() * @see viewOnly() */ virtual void setViewOnly(bool viewOnly); /** * Enables/disables grabbing all possible keys. * @param grabAllKeys true to enable, false to disable. * Default is false. * @see grabAllKeys() */ virtual void setGrabAllKeys(bool grabAllKeys); /** * Called to let the backend know it when * we switch from/to fullscreen. * @param on true when switching to fullscreen, * false when switching from fullscreen. */ virtual void switchFullscreen(bool on); /** * Sends a QKeyEvent to the remote server. * @param event the key to send */ virtual void keyEvent(QKeyEvent *event); /** * Called when the visible place changed so remote * view can resize itself. */ virtual void scaleResize(int w, int h); signals: /** * Emitted when the size of the remote screen changes. Also * called when the size is known for the first time. * @param x the width of the screen * @param y the height of the screen */ void framebufferSizeChanged(int w, int h); /** * Emitted when the view connected successfully. */ void connected(); /** * Emitted when the view disconnected without error. */ void disconnected(); /** * Emitted when the view disconnected with error. */ void disconnectedError(); /** * Emitted when the view has a specific error. */ void errorMessage(const QString &title, const QString &message); /** * Emitted when the status of the view changed. * @param s the new status */ void statusChanged(RemoteView::RemoteStatus s); /** * Emitted when the password dialog is shown or hidden. * @param b true when the dialog is shown, false when it has been hidden */ void showingPasswordDialog(bool b); /** * Emitted when the mouse on the remote side has been moved. * @param x the new x coordinate * @param y the new y coordinate * @param buttonMask the mask of mouse buttons (bit 0 for first mouse * button, 1 for second button etc)a */ void mouseStateChanged(int x, int y, int buttonMask); protected: RemoteView(QWidget *parent = 0); void focusInEvent(QFocusEvent *event); void focusOutEvent(QFocusEvent *event); /** * The status of the remote view. */ RemoteStatus m_status; /** * Set the status of the connection. * Emits a statusChanged() signal. * Note that the states need to be set in a certain order, * see @ref Status. setStatus() will try to do this * transition automatically, so if you are in Connecting * and call setStatus(Preparing), setStatus() will * emit a Authenticating and then Preparing. * If you transition backwards, it will emit a * Disconnected before doing the transition. * @param s the new status */ virtual void setStatus(RemoteStatus s); QCursor localDotCursor() const; QString m_host; int m_port; bool m_viewOnly; bool m_grabAllKeys; bool m_scale; bool m_keyboardIsGrabbed; KUrl m_url; #ifndef QTONLY QString readWalletPassword(bool fromUserNameOnly = false); void saveWalletPassword(const QString &password, bool fromUserNameOnly = false); KWallet::Wallet *m_wallet; #endif DotCursorState m_dotCursorState; }; #endif qtemu-2.0~alpha1/vnc/vncview.cpp0000644000175000017500000004361611215051465016606 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2007-2008 Urs Wolfer ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "vncview.h" #ifdef QTONLY #include #include #define KMessageBox QMessageBox #define error(parent, message, caption) \ critical(parent, caption, message) #else #include "settings.h" #include #include #include #include #include #endif #include #include #include #include // Definition of key modifier mask constants #define KMOD_Alt_R 0x01 #define KMOD_Alt_L 0x02 #define KMOD_Meta_L 0x04 #define KMOD_Control_L 0x08 #define KMOD_Shift_L 0x10 VncView::VncView(QWidget *parent, const KUrl &url, KConfigGroup configGroup) : RemoteView(parent), m_initDone(false), m_buttonMask(0), m_repaint(false), m_quitFlag(false), m_firstPasswordTry(true), m_authenticaionCanceled(false), m_dontSendClipboard(false), m_horizontalFactor(1.0), m_verticalFactor(1.0), m_forceLocalCursor(false) { m_url = url; m_host = url.host(); m_port = url.port(); connect(&vncThread, SIGNAL(imageUpdated(int, int, int, int)), this, SLOT(updateImage(int, int, int, int)), Qt::BlockingQueuedConnection); connect(&vncThread, SIGNAL(gotCut(const QString&)), this, SLOT(setCut(const QString&)), Qt::BlockingQueuedConnection); connect(&vncThread, SIGNAL(passwordRequest()), this, SLOT(requestPassword()), Qt::BlockingQueuedConnection); connect(&vncThread, SIGNAL(outputErrorMessage(QString)), this, SLOT(outputErrorMessage(QString))); m_clipboard = QApplication::clipboard(); connect(m_clipboard, SIGNAL(selectionChanged()), this, SLOT(clipboardSelectionChanged())); connect(m_clipboard, SIGNAL(dataChanged()), this, SLOT(clipboardDataChanged())); #ifndef QTONLY m_hostPreferences = new VncHostPreferences(configGroup, this); #else Q_UNUSED(configGroup); #endif } VncView::~VncView() { unpressModifiers(); // Disconnect all signals so that we don't get any more callbacks from the client thread disconnect(&vncThread, SIGNAL(imageUpdated(int, int, int, int)), this, SLOT(updateImage(int, int, int, int))); disconnect(&vncThread, SIGNAL(gotCut(const QString&)), this, SLOT(setCut(const QString&))); disconnect(&vncThread, SIGNAL(passwordRequest()), this, SLOT(requestPassword())); disconnect(&vncThread, SIGNAL(outputErrorMessage(QString)), this, SLOT(outputErrorMessage(QString))); startQuitting(); } bool VncView::eventFilter(QObject *obj, QEvent *event) { if (m_viewOnly) { if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease || event->type() == QEvent::MouseButtonDblClick || event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::Wheel || event->type() == QEvent::MouseMove) return true; } return RemoteView::eventFilter(obj, event); } QSize VncView::framebufferSize() { return m_frame.size(); } QSize VncView::sizeHint() const { return size(); } QSize VncView::minimumSizeHint() const { return size(); } void VncView::scaleResize(int w, int h) { RemoteView::scaleResize(w, h); kDebug(5011) << w << h; if (m_scale) { m_verticalFactor = (qreal) h / m_frame.height(); m_horizontalFactor = (qreal) w / m_frame.width(); #ifndef QTONLY if (Settings::keepAspectRatio()) { m_verticalFactor = m_horizontalFactor = qMin(m_verticalFactor, m_horizontalFactor); } #else m_verticalFactor = m_horizontalFactor = qMin(m_verticalFactor, m_horizontalFactor); #endif const qreal newW = m_frame.width() * m_horizontalFactor; const qreal newH = m_frame.height() * m_verticalFactor; setMaximumSize(newW, newH); //This is a hack to force Qt to center the view in the scroll area resize(newW, newH); } } void VncView::updateConfiguration() { RemoteView::updateConfiguration(); // Update the scaling mode in case KeepAspectRatio changed scaleResize(parentWidget()->width(), parentWidget()->height()); } void VncView::startQuitting() { kDebug(5011) << "about to quit"; const bool connected = status() == RemoteView::Connected; setStatus(Disconnecting); m_quitFlag = true; if (connected) { vncThread.stop(); } vncThread.quit(); const bool quitSuccess = vncThread.wait(500); kDebug(5011) << "Quit VNC thread success:" << quitSuccess; setStatus(Disconnected); } bool VncView::isQuitting() { return m_quitFlag; } bool VncView::start() { if(m_host.isEmpty()) vncThread.setHost(m_url.path()); else { vncThread.setHost(m_host); vncThread.setPort(m_port); } RemoteView::Quality quality; #ifdef QTONLY quality = (RemoteView::Quality)((QCoreApplication::arguments().count() > 2) ? QCoreApplication::arguments().at(2).toInt() : 2); #else quality = m_hostPreferences->quality(); #endif vncThread.setQuality(quality); // set local cursor on by default because low quality mostly means slow internet connection if (quality == RemoteView::Low) { showDotCursor(RemoteView::CursorOn); #ifndef QTONLY // KRDC does always just have one main window, so at(0) is safe KXMLGUIClient *mainWindow = dynamic_cast(KMainWindow::memberList().at(0)); if (mainWindow) mainWindow->actionCollection()->action("show_local_cursor")->setChecked(true); #endif } setStatus(Connecting); vncThread.start(); return true; } bool VncView::supportsScaling() const { return true; } bool VncView::supportsLocalCursor() const { return true; } void VncView::requestPassword() { kDebug(5011) << "request password"; if (m_authenticaionCanceled) { startQuitting(); return; } setStatus(Authenticating); #ifndef QTONLY if (m_hostPreferences->walletSupport()) { QString walletPassword = readWalletPassword(); if (!walletPassword.isNull()) { vncThread.setPassword(walletPassword); return; } } #endif if (!m_url.password().isNull()) { vncThread.setPassword(m_url.password()); return; } #ifdef QTONLY bool ok; QString password = QInputDialog::getText(this, //krazy:exclude=qclasses tr("Password required"), tr("Please enter the password for the remote desktop:"), QLineEdit::Password, QString(), &ok); m_firstPasswordTry = false; if (ok) vncThread.setPassword(password); else m_authenticaionCanceled = true; #else KPasswordDialog dialog(this); dialog.setPrompt(m_firstPasswordTry ? i18n("Access to the system requires a password.") : i18n("Authentication failed. Please try again.")); if (dialog.exec() == KPasswordDialog::Accepted) { m_firstPasswordTry = false; vncThread.setPassword(dialog.password()); } else { kDebug(5011) << "password dialog not accepted"; m_authenticaionCanceled = true; } #endif } void VncView::outputErrorMessage(const QString &message) { kDebug(5011) << message; if (message == "INTERNAL:APPLE_VNC_COMPATIBILTY") { setCursor(localDotCursor()); m_forceLocalCursor = true; return; } startQuitting(); #ifndef QTONLY KMessageBox::error(this, message, i18n("VNC failure")); #endif emit errorMessage(i18n("VNC failure"), message); } #ifndef QTONLY HostPreferences* VncView::hostPreferences() { return m_hostPreferences; } #endif void VncView::updateImage(int x, int y, int w, int h) { // kDebug(5011) << "got update" << width() << height(); m_x = x; m_y = y; m_w = w; m_h = h; if (m_horizontalFactor != 1.0 || m_verticalFactor != 1.0) { // If the view is scaled, grow the update rectangle to avoid artifacts m_x-=1; m_y-=1; m_w+=2; m_h+=2; } m_frame = vncThread.image(); if (!m_initDone) { setAttribute(Qt::WA_StaticContents); setAttribute(Qt::WA_OpaquePaintEvent); installEventFilter(this); setCursor(((m_dotCursorState == CursorOn) || m_forceLocalCursor) ? localDotCursor() : Qt::BlankCursor); setMouseTracking(true); // get mouse events even when there is no mousebutton pressed setFocusPolicy(Qt::WheelFocus); setStatus(Connected); // emit framebufferSizeChanged(m_frame.width(), m_frame.height()); emit connected(); if (m_scale) { if (parentWidget()) scaleResize(parentWidget()->width(), parentWidget()->height()); } m_initDone = true; #ifndef QTONLY if (m_hostPreferences->walletSupport()) { saveWalletPassword(vncThread.password()); } #endif } if ((y == 0 && x == 0) && (m_frame.size() != size())) { kDebug(5011) << "Updating framebuffer size"; if (m_scale) { setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); if (parentWidget()) scaleResize(parentWidget()->width(), parentWidget()->height()); } else { kDebug(5011) << "Resizing: " << m_frame.width() << m_frame.height(); resize(m_frame.width(), m_frame.height()); setMaximumSize(m_frame.width(), m_frame.height()); //This is a hack to force Qt to center the view in the scroll area setMinimumSize(m_frame.width(), m_frame.height()); } emit framebufferSizeChanged(m_frame.width(), m_frame.height()); } m_repaint = true; repaint(qRound(m_x * m_horizontalFactor), qRound(m_y * m_verticalFactor), qRound(m_w * m_horizontalFactor), qRound(m_h * m_verticalFactor)); m_repaint = false; } void VncView::setViewOnly(bool viewOnly) { RemoteView::setViewOnly(viewOnly); m_dontSendClipboard = viewOnly; if (viewOnly) setCursor(Qt::ArrowCursor); else setCursor(m_dotCursorState == CursorOn ? localDotCursor() : Qt::BlankCursor); } void VncView::showDotCursor(DotCursorState state) { RemoteView::showDotCursor(state); setCursor(state == CursorOn ? localDotCursor() : Qt::BlankCursor); } void VncView::enableScaling(bool scale) { RemoteView::enableScaling(scale); if (scale) { setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); setMinimumSize(1, 1); if (parentWidget()) scaleResize(parentWidget()->width(), parentWidget()->height()); } else { m_verticalFactor = 1.0; m_horizontalFactor = 1.0; setMaximumSize(m_frame.width(), m_frame.height()); //This is a hack to force Qt to center the view in the scroll area setMinimumSize(m_frame.width(), m_frame.height()); resize(m_frame.width(), m_frame.height()); } } void VncView::setCut(const QString &text) { m_dontSendClipboard = true; m_clipboard->setText(text, QClipboard::Clipboard); m_clipboard->setText(text, QClipboard::Selection); m_dontSendClipboard = false; } void VncView::paintEvent(QPaintEvent *event) { // kDebug(5011) << "paint event: x: " << m_x << ", y: " << m_y << ", w: " << m_w << ", h: " << m_h; if (m_frame.isNull() || m_frame.format() == QImage::Format_Invalid) { kDebug(5011) << "no valid image to paint"; //RemoteView::paintEvent(event); return; } //event->accept(); QPainter painter(this); if (m_repaint) { // kDebug(5011) << "normal repaint"; painter.drawImage(QRect(qRound(m_x*m_horizontalFactor), qRound(m_y*m_verticalFactor), qRound(m_w*m_horizontalFactor), qRound(m_h*m_verticalFactor)), m_frame.copy(m_x, m_y, m_w, m_h).scaled(qRound(m_w*m_horizontalFactor), qRound(m_h*m_verticalFactor), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } else { // kDebug(5011) << "resize repaint"; QRect rect = event->rect(); if (rect.width() != width() || rect.height() != height()) { // kDebug(5011) << "Partial repaint"; const int sx = rect.x()/m_horizontalFactor; const int sy = rect.y()/m_verticalFactor; const int sw = rect.width()/m_horizontalFactor; const int sh = rect.height()/m_verticalFactor; painter.drawImage(rect, m_frame.copy(sx, sy, sw, sh).scaled(rect.width(), rect.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } else { // kDebug(5011) << "Full repaint" << width() << height() << m_frame.width() << m_frame.height(); painter.drawImage(QRect(0, 0, width(), height()), m_frame.scaled(m_frame.width() * m_horizontalFactor, m_frame.height() * m_verticalFactor, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } } //RemoteView::paintEvent(event); } void VncView::resizeEvent(QResizeEvent *event) { RemoteView::resizeEvent(event); update(); } bool VncView::event(QEvent *event) { switch (event->type()) { case QEvent::KeyPress: case QEvent::KeyRelease: // kDebug(5011) << "keyEvent"; keyEventHandler(static_cast(event)); return true; break; case QEvent::MouseButtonDblClick: case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: // kDebug(5011) << "mouseEvent"; mouseEventHandler(static_cast(event)); return true; break; case QEvent::Wheel: // kDebug(5011) << "wheelEvent"; wheelEventHandler(static_cast(event)); return true; break; default: return RemoteView::event(event); } } void VncView::mouseEventHandler(QMouseEvent *e) { if (e->type() != QEvent::MouseMove) { if ((e->type() == QEvent::MouseButtonPress) || (e->type() == QEvent::MouseButtonDblClick)) { if (e->button() & Qt::LeftButton) m_buttonMask |= 0x01; if (e->button() & Qt::MidButton) m_buttonMask |= 0x02; if (e->button() & Qt::RightButton) m_buttonMask |= 0x04; } else if (e->type() == QEvent::MouseButtonRelease) { if (e->button() & Qt::LeftButton) m_buttonMask &= 0xfe; if (e->button() & Qt::MidButton) m_buttonMask &= 0xfd; if (e->button() & Qt::RightButton) m_buttonMask &= 0xfb; } } vncThread.mouseEvent(qRound(e->x() / m_horizontalFactor), qRound(e->y() / m_verticalFactor), m_buttonMask); } void VncView::wheelEventHandler(QWheelEvent *event) { int eb = 0; if (event->delta() < 0) eb |= 0x10; else eb |= 0x8; const int x = qRound(event->x() / m_horizontalFactor); const int y = qRound(event->y() / m_verticalFactor); vncThread.mouseEvent(x, y, eb | m_buttonMask); vncThread.mouseEvent(x, y, m_buttonMask); } void VncView::keyEventHandler(QKeyEvent *e) { // parts of this code are based on http://italc.sourcearchive.com/documentation/1.0.9.1/vncview_8cpp-source.html rfbKeySym k = e->nativeVirtualKey(); // we do not handle Key_Backtab separately as the Shift-modifier // is already enabled if (e->key() == Qt::Key_Backtab) { k = XK_Tab; } const bool pressed = (e->type() == QEvent::KeyPress); // handle modifiers if (k == XK_Shift_L || k == XK_Control_L || k == XK_Meta_L || k == XK_Alt_L) { if (pressed) { m_mods[k] = true; } else if (m_mods.contains(k)) { m_mods.remove(k); } else { unpressModifiers(); } } if (k) { vncThread.keyEvent(k, pressed); } } void VncView::unpressModifiers() { const QList keys = m_mods.keys(); QList::const_iterator it = keys.constBegin(); while (it != keys.end()) { vncThread.keyEvent(*it, false); it++; } m_mods.clear(); } void VncView::clipboardSelectionChanged() { kDebug(5011); if (m_status != Connected) return; if (m_clipboard->ownsSelection() || m_dontSendClipboard) return; const QString text = m_clipboard->text(QClipboard::Selection); vncThread.clientCut(text); } void VncView::clipboardDataChanged() { kDebug(5011); if (m_status != Connected) return; if (m_clipboard->ownsClipboard() || m_dontSendClipboard) return; const QString text = m_clipboard->text(QClipboard::Clipboard); vncThread.clientCut(text); } qtemu-2.0~alpha1/vnc/vncclientthread.cpp0000644000175000017500000002277011155001655020277 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2007-2008 Urs Wolfer ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "vncclientthread.h" #include #include static QString outputErrorMessageString; rfbBool VncClientThread::newclient(rfbClient *cl) { VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); Q_ASSERT(t); const int width = cl->width, height = cl->height, depth = cl->format.bitsPerPixel; const int size = width * height * (depth / 8); if (t->frameBuffer) delete [] t->frameBuffer; // do not leak if we get a new framebuffer size t->frameBuffer = new uint8_t[size]; cl->frameBuffer = t->frameBuffer; memset(cl->frameBuffer, '\0', size); cl->format.bitsPerPixel = 32; cl->format.redShift = 16; cl->format.greenShift = 8; cl->format.blueShift = 0; cl->format.redMax = 0xff; cl->format.greenMax = 0xff; cl->format.blueMax = 0xff; switch (t->quality()) { case RemoteView::High: cl->appData.useBGR233 = 0; cl->appData.encodingsString = "copyrect hextile raw"; cl->appData.compressLevel = 0; cl->appData.qualityLevel = 9; break; case RemoteView::Medium: cl->appData.useBGR233 = 0; cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; cl->appData.compressLevel = 5; cl->appData.qualityLevel = 7; break; case RemoteView::Low: case RemoteView::Unknown: default: cl->appData.useBGR233 = 1; cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; cl->appData.compressLevel = 9; cl->appData.qualityLevel = 1; } SetFormatAndEncodings(cl); return true; } void VncClientThread::updatefb(rfbClient* cl, int x, int y, int w, int h) { // kDebug(5011) << "updated client: x: " << x << ", y: " << y << ", w: " << w << ", h: " << h; const int width = cl->width, height = cl->height; const QImage img(cl->frameBuffer, width, height, QImage::Format_RGB32); if (img.isNull()) kDebug(5011) << "image not loaded"; VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); Q_ASSERT(t); t->setImage(img); t->emitUpdated(x, y, w, h); } void VncClientThread::cuttext(rfbClient* cl, const char *text, int textlen) { const QString cutText = QString::fromUtf8(text, textlen); kDebug(5011) << cutText; if (!cutText.isEmpty()) { VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); Q_ASSERT(t); t->emitGotCut(cutText); } } char *VncClientThread::passwdHandler(rfbClient *cl) { kDebug(5011) << "password request" << kBacktrace(); VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); Q_ASSERT(t); t->passwordRequest(); t->m_passwordError = true; return strdup(t->password().toLocal8Bit()); } void VncClientThread::outputHandler(const char *format, ...) { va_list args; va_start(args, format); QString message; message.vsprintf(format, args); va_end(args); message = message.trimmed(); kDebug(5011) << message; if ((message.contains("Couldn't convert ")) || (message.contains("Unable to connect to VNC server"))) outputErrorMessageString = i18n("Server not found."); if ((message.contains("VNC connection failed: Authentication failed, too many tries")) || (message.contains("VNC connection failed: Too many authentication failures"))) outputErrorMessageString = i18n("VNC authentication failed because of too many authentication tries."); if (message.contains("VNC connection failed: Authentication failed")) outputErrorMessageString = i18n("VNC authentication failed."); if (message.contains("VNC server closed connection")) outputErrorMessageString = i18n("VNC server closed connection."); // internal messages, not displayed to user if (message.contains("VNC server supports protocol version 3.889")) // see http://bugs.kde.org/162640 outputErrorMessageString = "INTERNAL:APPLE_VNC_COMPATIBILTY"; } VncClientThread::VncClientThread(QObject *parent) : QThread(parent) , frameBuffer(0) { QMutexLocker locker(&mutex); m_stopped = false; QTimer *outputErrorMessagesCheckTimer = new QTimer(this); outputErrorMessagesCheckTimer->setInterval(500); connect(outputErrorMessagesCheckTimer, SIGNAL(timeout()), this, SLOT(checkOutputErrorMessage())); outputErrorMessagesCheckTimer->start(); } VncClientThread::~VncClientThread() { stop(); const bool quitSuccess = wait(500); kDebug(5011) << "Quit VNC thread success:" << quitSuccess; delete [] frameBuffer; } void VncClientThread::checkOutputErrorMessage() { if (!outputErrorMessageString.isEmpty()) { kDebug(5011) << outputErrorMessageString; QString errorMessage = outputErrorMessageString; outputErrorMessageString.clear(); // show authentication failure error only after the 3rd unsuccessful try if ((errorMessage != i18n("VNC authentication failed.")) || m_passwordError) outputErrorMessage(errorMessage); } } void VncClientThread::setHost(const QString &host) { QMutexLocker locker(&mutex); m_host = host; } void VncClientThread::setPort(int port) { QMutexLocker locker(&mutex); m_port = port; } void VncClientThread::setQuality(RemoteView::Quality quality) { m_quality = quality; } RemoteView::Quality VncClientThread::quality() const { return m_quality; } void VncClientThread::setImage(const QImage &img) { QMutexLocker locker(&mutex); m_image = img; } const QImage VncClientThread::image(int x, int y, int w, int h) { QMutexLocker locker(&mutex); if (w == 0) // full image requested return m_image; else return m_image.copy(x, y, w, h); } void VncClientThread::emitUpdated(int x, int y, int w, int h) { emit imageUpdated(x, y, w, h); } void VncClientThread::emitGotCut(const QString &text) { emit gotCut(text); } void VncClientThread::stop() { QMutexLocker locker(&mutex); m_stopped = true; } void VncClientThread::run() { QMutexLocker locker(&mutex); while (!m_stopped) { // try to connect as long as the server allows m_passwordError = false; rfbClientLog = outputHandler; rfbClientErr = outputHandler; cl = rfbGetClient(8, 3, 4); cl->MallocFrameBuffer = newclient; cl->canHandleNewFBSize = true; cl->GetPassword = passwdHandler; cl->GotFrameBufferUpdate = updatefb; cl->GotXCutText = cuttext; rfbClientSetClientData(cl, 0, this); cl->serverHost = strdup(m_host.toUtf8().constData()); if (m_port < 0 || !m_port) // port is invalid or empty... m_port = 5900; // fallback: try an often used VNC port if (m_port >= 0 && m_port < 100) // the user most likely used the short form (e.g. :1) m_port += 5900; cl->serverPort = m_port; kDebug(5011) << "--------------------- trying init ---------------------"; if (rfbInitClient(cl, 0, 0)) break; if (m_passwordError) continue; return; } locker.unlock(); // Main VNC event loop while (!m_stopped) { const int i = WaitForMessage(cl, 500); if (i < 0) break; if (i) if (!HandleRFBServerMessage(cl)) break; locker.relock(); while (!m_eventQueue.isEmpty()) { ClientEvent* clientEvent = m_eventQueue.dequeue(); clientEvent->fire(cl); delete clientEvent; } locker.unlock(); } // Cleanup allocated resources locker.relock(); rfbClientCleanup(cl); m_stopped = true; } ClientEvent::~ClientEvent() { } void PointerClientEvent::fire(rfbClient* cl) { SendPointerEvent(cl, m_x, m_y, m_buttonMask); } void KeyClientEvent::fire(rfbClient* cl) { SendKeyEvent(cl, m_key, m_pressed); } void ClientCutEvent::fire(rfbClient* cl) { SendClientCutText(cl, text.toUtf8().data(), text.size()); } void VncClientThread::mouseEvent(int x, int y, int buttonMask) { QMutexLocker lock(&mutex); if (m_stopped) return; m_eventQueue.enqueue(new PointerClientEvent(x, y, buttonMask)); } void VncClientThread::keyEvent(int key, bool pressed) { QMutexLocker lock(&mutex); if (m_stopped) return; m_eventQueue.enqueue(new KeyClientEvent(key, pressed)); } void VncClientThread::clientCut(const QString &text) { QMutexLocker lock(&mutex); if (m_stopped) return; m_eventQueue.enqueue(new ClientCutEvent(text)); } qtemu-2.0~alpha1/vnc/vnc.pro0000644000175000017500000000043611025763214015723 0ustar fboudrafboudra#TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . LIBS += -lvncclient DEFINES += QTONLY HEADERS += remoteview.h\ vncclientthread.h\ vncview.h SOURCES += remoteview.cpp\ vncclientthread.cpp\ vncview.cpp #CONFIG += debug_and_releaseqtemu-2.0~alpha1/vnc/vncview.h0000644000175000017500000000574411155001655016252 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2007-2008 Urs Wolfer ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef VNCVIEW_H #define VNCVIEW_H #include "remoteview.h" #include "vncclientthread.h" #ifdef QTONLY class KConfigGroup{}; #else #include "vnchostpreferences.h" #endif #include extern "C" { #include } class VncView: public RemoteView { Q_OBJECT public: explicit VncView(QWidget *parent = 0, const KUrl &url = KUrl(), KConfigGroup configGroup = KConfigGroup()); ~VncView(); QSize framebufferSize(); QSize sizeHint() const; QSize minimumSizeHint() const; void startQuitting(); bool isQuitting(); bool start(); bool supportsScaling() const; bool supportsLocalCursor() const; #ifndef QTONLY HostPreferences* hostPreferences(); #endif void setViewOnly(bool viewOnly); void showDotCursor(DotCursorState state); void enableScaling(bool scale); virtual void updateConfiguration(); public slots: void scaleResize(int w, int h); protected: void paintEvent(QPaintEvent *event); bool event(QEvent *event); void resizeEvent(QResizeEvent *event); bool eventFilter(QObject *obj, QEvent *event); private: VncClientThread vncThread; QClipboard *m_clipboard; bool m_initDone; int m_buttonMask; QMap m_mods; int m_x, m_y, m_w, m_h; bool m_repaint; bool m_quitFlag; bool m_firstPasswordTry; bool m_authenticaionCanceled; bool m_dontSendClipboard; qreal m_horizontalFactor; qreal m_verticalFactor; #ifndef QTONLY VncHostPreferences *m_hostPreferences; #endif QImage m_frame; bool m_forceLocalCursor; void keyEventHandler(QKeyEvent *e); void unpressModifiers(); void wheelEventHandler(QWheelEvent *event); void mouseEventHandler(QMouseEvent *event); private slots: void updateImage(int x, int y, int w, int h); void setCut(const QString &text); void requestPassword(); void outputErrorMessage(const QString &message); void clipboardSelectionChanged(); void clipboardDataChanged(); }; #endif qtemu-2.0~alpha1/vnc/remoteview.cpp0000644000175000017500000001414511155001655017305 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2002-2003 Tim Jansen ** Copyright (C) 2007-2008 Urs Wolfer ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "remoteview.h" #ifndef QTONLY #include #include #endif #include RemoteView::RemoteView(QWidget *parent) : QWidget(parent), m_status(Disconnected), m_host(QString()), m_port(0), m_viewOnly(false), m_grabAllKeys(false), m_scale(false), m_keyboardIsGrabbed(false), #ifndef QTONLY m_wallet(0), #endif m_dotCursorState(CursorOff) { } RemoteView::~RemoteView() { #ifndef QTONLY delete m_wallet; #endif } RemoteView::RemoteStatus RemoteView::status() { return m_status; } void RemoteView::setStatus(RemoteView::RemoteStatus s) { if (m_status == s) return; if (((1+ m_status) != s) && (s != Disconnected)) { // follow state transition rules if (s == Disconnecting) { if (m_status == Disconnected) return; } else { Q_ASSERT(((int) s) >= 0); if (m_status > s) { m_status = Disconnected; emit statusChanged(Disconnected); } // smooth state transition RemoteStatus origState = m_status; for (int i = origState; i < s; ++i) { m_status = (RemoteStatus) i; emit statusChanged((RemoteStatus) i); } } } m_status = s; emit statusChanged(m_status); } bool RemoteView::supportsScaling() const { return false; } bool RemoteView::supportsLocalCursor() const { return false; } QString RemoteView::host() { return m_host; } QSize RemoteView::framebufferSize() { return QSize(0, 0); } void RemoteView::startQuitting() { } bool RemoteView::isQuitting() { return false; } int RemoteView::port() { return m_port; } void RemoteView::updateConfiguration() { } void RemoteView::keyEvent(QKeyEvent *) { } bool RemoteView::viewOnly() { return m_viewOnly; } void RemoteView::setViewOnly(bool viewOnly) { m_viewOnly = viewOnly; } bool RemoteView::grabAllKeys() { return m_grabAllKeys; } void RemoteView::setGrabAllKeys(bool grabAllKeys) { m_grabAllKeys = grabAllKeys; if (grabAllKeys) { m_keyboardIsGrabbed = true; grabKeyboard(); } else if (m_keyboardIsGrabbed) { releaseKeyboard(); } } void RemoteView::showDotCursor(DotCursorState state) { m_dotCursorState = state; } RemoteView::DotCursorState RemoteView::dotCursorState() const { return m_dotCursorState; } bool RemoteView::scaling() const { return m_scale; } void RemoteView::enableScaling(bool scale) { m_scale = scale; } void RemoteView::switchFullscreen(bool) { } void RemoteView::scaleResize(int, int) { } KUrl RemoteView::url() { return m_url; } #ifndef QTONLY QString RemoteView::readWalletPassword(bool fromUserNameOnly) { const QString KRDCFOLDER = "KRDC"; window()->setDisabled(true); // WORKAROUND: disable inputs so users cannot close the current tab (see #181230) m_wallet = KWallet::Wallet::openWallet(KWallet::Wallet::NetworkWallet(), window()->winId()); window()->setDisabled(false); if (m_wallet) { bool walletOK = m_wallet->hasFolder(KRDCFOLDER); if (!walletOK) { walletOK = m_wallet->createFolder(KRDCFOLDER); kDebug(5010) << "Wallet folder created"; } if (walletOK) { kDebug(5010) << "Wallet OK"; m_wallet->setFolder(KRDCFOLDER); QString password; QString key; if (fromUserNameOnly) key = m_url.userName(); else key = m_url.prettyUrl(KUrl::RemoveTrailingSlash); if (m_wallet->hasEntry(key) && !m_wallet->readPassword(key, password)) { kDebug(5010) << "Password read OK"; return password; } } } return QString(); } void RemoteView::saveWalletPassword(const QString &password, bool fromUserNameOnly) { QString key; if (fromUserNameOnly) key = m_url.userName(); else key = m_url.prettyUrl(KUrl::RemoveTrailingSlash); if (m_wallet && m_wallet->isOpen() && !m_wallet->hasEntry(key)) { kDebug(5010) << "Write wallet password"; m_wallet->writePassword(key, password); } } #endif QCursor RemoteView::localDotCursor() const { #ifdef QTONLY return QCursor(); //TODO #else QBitmap cursorBitmap(KGlobal::dirs()->findResource("appdata", "pics/pointcursor.png")); QBitmap cursorMask(KGlobal::dirs()->findResource("appdata", "pics/pointcursormask.png")); return QCursor(cursorBitmap, cursorMask); #endif } void RemoteView::focusInEvent(QFocusEvent *event) { if (m_grabAllKeys) { m_keyboardIsGrabbed = true; grabKeyboard(); } QWidget::focusInEvent(event); } void RemoteView::focusOutEvent(QFocusEvent *event) { if (m_grabAllKeys || m_keyboardIsGrabbed) { m_keyboardIsGrabbed = false; releaseKeyboard(); } QWidget::focusOutEvent(event); } qtemu-2.0~alpha1/harddiskmanager.h0000644000175000017500000000454611065502004017120 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef HARDDISKMANAGER_H #define HARDDISKMANAGER_H #include #include #include #include "machinetab.h" class QTimer; class QProcess; class MachineProcess; /** @author Ben Klopfenstein */ class HardDiskManager : public QObject { Q_OBJECT public: HardDiskManager(MachineProcess *parent = 0); ~HardDiskManager(); bool imageIs(); bool event(QEvent * event); bool isSuspendable() const; private: void addDisk(const QString &path, const int address); //data QStringList diskImages; //used for some functions MachineProcess *parent; QString upgradeImageName; QTimer *updateProgressTimer; QProcess *currentProcess; QString currentFormat; QFileInfo currentImage; qint64 virtualSize; qint64 oldSize; bool suspendable; bool resumable; public slots: void upgradeImage(); void testImage(); private slots: void upgradeComplete(int status); void updateUpgradeProgress(); signals: void processingImage(bool processing); void imageUpgradable(bool elegability); void upgradeProgress(qint64 size, qint64 total); void error(const QString &errorString); void imageFormat(QString format); void imageSize(qint64 size); void phySize(qint64 size); void supportsSuspending(bool status); void supportsResuming(bool status); }; #endif qtemu-2.0~alpha1/machinescrollarea.h0000644000175000017500000000264611121307531017450 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINESCROLLAREA_H #define MACHINESCROLLAREA_H // #include // class MachineScrollArea : public QScrollArea { Q_OBJECT public: MachineScrollArea(QWidget *parent); void resizeEvent(QResizeEvent * event); void resizeView(int widgetWidth, int widgetHeight); bool isSplashShown(); void setSplashShown(bool value); private: bool splashShown; signals: void resized(int, int); }; #endif qtemu-2.0~alpha1/CMakeLists.txt0000644000175000017500000001436211214664406016373 0ustar fboudrafboudra#/**************************************************************************** #** #** Copyright (C) 2006-2008 Urs Wolfer #** #** This file is part of QtEmu. #** #** 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 2 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 Library General Public License #** along with this library; see the file COPYING.LIB. If not, write to #** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, #** Boston, MA 02110-1301, USA. #** #****************************************************************************/ PROJECT(qtemu) CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0) # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) SET(qtemu_SRCS main.cpp mainwindow.cpp helpwindow.cpp configwindow.cpp machineprocess.cpp wizard.cpp machinewizard.cpp machinetab.cpp vnc/remoteview.cpp vnc/vncclientthread.cpp vnc/vncview.cpp machineview.cpp machinesplash.cpp machinescrollarea.cpp machineconfig.cpp machineconfigobject.cpp netconfig.cpp usbconfig.cpp settingstab.cpp qtemuenvironment.cpp harddiskmanager.cpp controlpanel.cpp networkpage.cpp usbpage.cpp usbmodel.cpp interfacemodel.cpp floatingtoolbar.cpp halobject.cpp guesttoolslistener.cpp GuestTools/modules/guestmodule.cpp GuestTools/modules/clipboard/clipboardsync.cpp ) SET(qtemu_MOC_HDRS config.h machineprocess.h machinetab.h wizard.h machinewizard.h helpwindow.h configwindow.h mainwindow.h vnc/vncview.h vnc/remoteview.h vnc/vncclientthread.h machineview.h machinesplash.h machinescrollarea.h machineconfig.h machineconfigobject.h netconfig.h usbconfig.h settingstab.h qtemuenvironment.h harddiskmanager.h controlpanel.h networkpage.h usbpage.h usbmodel.h interfacemodel.h floatingtoolbar.h halobject.h guesttoolslistener.h GuestTools/modules/guestmodule.h GuestTools/modules/clipboard/clipboardsync.h ) SET(qtemu_UIS ui/settingstab.ui ui/controlpanel.ui ui/networkpage.ui usbpage.ui ) SET(qtemu_RCS qtemu.rc ) SET(qtemu_RESOUCES qtemu.qrc ) IF(MINGW) # resource compilation for MinGW ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qtemu.o COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/qtemu.rc -o ${CMAKE_CURRENT_BINARY_DIR}/qtemu.o) SET(qtemu_SRCS ${qtemu_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/qtemu.o) ELSE(MINGW) SET(qtemu_SRCS ${qtemu_SRCS} ${qtemu_RCS}) ENDIF(MINGW) # verbose - on # SET(CMAKE_VERBOSE_MAKEFILE ON) SET(QT_MIN_VERSION "4.4.0") FIND_PACKAGE(Qt4 REQUIRED) INCLUDE(${QT_USE_FILE}) find_package(LibVNCServer REQUIRED) add_definitions(-DQTONLY) # translation start FIND_PROGRAM(QT_LRELEASE_EXECUTABLE NAMES lrelease PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) # needed to create translation files IF(NOT QT_LRELEASE_EXECUTABLE) MESSAGE(FATAL_ERROR "Qt4 lrelease not found. Make sure that it has been built and installed by the Qt4 package.") ENDIF(NOT QT_LRELEASE_EXECUTABLE) MACRO(ADD_TRANSLATION_FILES _sources) FOREACH(_current_FILE ${ARGN}) GET_FILENAME_COMPONENT(_in ${_current_FILE} ABSOLUTE) GET_FILENAME_COMPONENT(_basename ${_current_FILE} NAME_WE) SET(_out ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.qm) ADD_CUSTOM_COMMAND( OUTPUT ${_out} COMMAND ${QT_LRELEASE_EXECUTABLE} ARGS -verbose ${_in} -qm ${_out} DEPENDS ${_in} ) SET(${_sources} ${${_sources}} ${_out}) ENDFOREACH(_current_FILE) ENDMACRO(ADD_TRANSLATION_FILES) FILE(GLOB TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/translations/qtemu_*.ts) ADD_TRANSLATION_FILES(QM_FILES ${TS_FILES}) # creating a custom target is needed to make the files build # "ALL" means that it will be run by default ADD_CUSTOM_TARGET(translations ALL DEPENDS ${QM_FILES}) INSTALL (FILES ${QM_FILES} DESTINATION share/qtemu/translations) # translation end SET(QT_USE_QTXML) QT4_WRAP_CPP(qtemu_SRCS ${qtemu_MOC_HDRS}) QT4_ADD_RESOURCES (qtemu_SRCS ${qtemu_RESOUCES}) QT4_WRAP_UI(qtemu_SRCS ${qtemu_UIS}) QT4_AUTOMOC(${qtemu_SRCS}) ADD_DEFINITIONS( -Wall ${QT_DEFINITIONS} ) INCLUDE_DIRECTORIES( ${QT_INCLUDES} ${VNCCLIENT_INCLUDE_DIRS} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/vnc ) ADD_EXECUTABLE(qtemu ${qtemu_SRCS} ${qtemu_MOC_SRCS} ${qtsourceview_RC_SRCS} ) TARGET_LINK_LIBRARIES(qtemu ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTWEBKIT_LIBRARY} ${QT_QTDBUS_LIBRARY} ${LIBVNCCLIENT_LIBRARIES} ) FILE(GLOB helpfiles "${CMAKE_CURRENT_SOURCE_DIR}/help/*.png") INSTALL(FILES ${helpfiles} DESTINATION share/qtemu/help) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/help/main.htm DESTINATION share/qtemu/help) FILE(GLOB dynamichelp "${CMAKE_CURRENT_SOURCE_DIR}/help/dynamic/*.html") INSTALL(FILES ${dynamichelp} DESTINATION share/qtemu/help/dynamic) FILE(GLOB dynamichelpimg "${CMAKE_CURRENT_SOURCE_DIR}/help/dynamic/*.png") INSTALL(FILES ${dynamichelpimg} DESTINATION share/qtemu/help/dynamic) FILE(GLOB helpfiles_de "${CMAKE_CURRENT_SOURCE_DIR}/help/de/*.png") INSTALL(FILES ${helpfiles_de} DESTINATION share/qtemu/help/de) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/help/de/main.htm DESTINATION share/qtemu/help/de) INSTALL(TARGETS qtemu DESTINATION bin) IF(UNIX) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/qtemu.desktop DESTINATION share/applications) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/images/crystal/qtemu.png DESTINATION share/icons/hicolor/32x32/apps) ENDIF(UNIX) qtemu-2.0~alpha1/qtemu.pro0000644000175000017500000000415211214661046015501 0ustar fboudrafboudramessage("The preferred way of building QtEmu is to use CMake. ('cmake . -DCMAKE_INSTALL_PREFIX = /usr')") HEADERS = config.h \ machineprocess.h \ machinetab.h \ wizard.h \ machinewizard.h \ helpwindow.h \ configwindow.h \ mainwindow.h \ vnc/remoteview.h \ vnc/vncclientthread.h \ vnc/vncview.h \ machineview.h \ machinesplash.h \ machineconfig.h \ machineconfigobject.h \ settingstab.h \ qtemuenvironment.h \ harddiskmanager.h \ controlpanel.h \ networkpage.h \ interfacemodel.h \ floatingtoolbar.h \ netconfig.h \ machinescrollarea.h \ usbpage.h \ usbconfig.h \ usbmodel.h \ halobject.h\ guesttoolslistener.h SOURCES = main.cpp \ mainwindow.cpp \ helpwindow.cpp \ configwindow.cpp \ machineprocess.cpp \ wizard.cpp \ machinewizard.cpp \ machinetab.cpp \ vnc/remoteview.cpp \ vnc/vncclientthread.cpp \ vnc/vncview.cpp \ machineview.cpp \ machinesplash.cpp \ machineconfig.cpp \ machineconfigobject.cpp \ settingstab.cpp \ qtemuenvironment.cpp \ harddiskmanager.cpp \ controlpanel.cpp \ networkpage.cpp \ interfacemodel.cpp \ floatingtoolbar.cpp \ netconfig.cpp \ machinescrollarea.cpp \ usbpage.cpp \ usbconfig.cpp \ usbmodel.cpp \ halobject.cpp \ guesttoolslistener.cpp include(GuestTools/modules/host.pri) RESOURCES = qtemu.qrc QT += xml \ svg \ webkit \ network \ dbus win32 { LIBS = -lshell32 RC_FILE = qtemu.rc } TEMPLATE = app TRANSLATIONS = translations/template_qtemu.ts \ translations/qtemu_de.ts \ translations/qtemu_tr.ts \ translations/qtemu_ru.ts \ translations/qtemu_cz.ts \ translations/qtemu_fr.ts \ translations/qtemu_it.ts \ translations/qtemu_es.ts \ translations/qtemu_pt-BR.ts \ translations/qtemu_pl.ts CONFIG += debug_and_release LIBS += -lvncclient DEFINES += QTONLY # DEFINES += DEVELOPER DISTFILES += TODO \ CHANGELOG \ README FORMS += ui/settingstab.ui \ ui/controlpanel.ui \ ui/networkpage.ui \ usbpage.ui \ overview.ui qtemu-2.0~alpha1/settingstab.cpp0000644000175000017500000002264511203077345016667 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "settingstab.h" #include "machineconfigobject.h" #include "helpwindow.h" #include "networkpage.h" #include "usbpage.h" #include "qtemuenvironment.h" #include "usbmodel.h" #include "usbconfig.h" #include #include #include #include #include SettingsTab::SettingsTab(MachineConfigObject *config, MachineTab *parent) : QFrame(parent) ,config(config) ,parent(parent) { getSettings(); //add the ui elements setupUi(this); netPage = new NetworkPage(config, this); networkPage->setLayout(new QVBoxLayout()); networkPage->layout()->addWidget(netPage); usbPageWidget = new UsbPage(config, this); usbPage->setLayout(new QVBoxLayout()); usbPage->layout()->addWidget(usbPageWidget); setupConnections(); //load current drives foreach(OptDevice device, QtEmuEnvironment::getHal()->opticalList()) cdImage->addItem(device.name, device.device); //register all the widgets with their associated options registerWidgets(); setupHelp(); disableUnsupportedOptions(); } SettingsTab::~SettingsTab() { } void SettingsTab::registerWidgets() { config->registerObject(cpuSpinBox, "cpu", QVariant(1)); config->registerObject(memorySpinBox, "memory"); config->registerObject(virtCheckBox, "virtualization", QVariant(false)); config->registerObject(hdImage, "hdd"); config->registerObject(cdImage, "cdrom"); config->registerObject(floppyImage, "floppy"); config->registerObject(cdBootCheck, "bootFromCd", QVariant(false)); config->registerObject(floppyBootCheck, "bootFromFloppy", QVariant(false)); config->registerObject(soundCheck, "sound", QVariant(false)); config->registerObject(soundCombo, "soundSystem", QVariant("oss")); config->registerObject(timeCheck, "time", QVariant(true)); config->registerObject(embedCheck, "embeddedDisplay", QVariant(true)); config->registerObject(scaleCheck, "scaleEmbeddedDisplay", QVariant(true)); config->registerObject(portBox, "vncPort"); config->registerObject(hostEdit, "vncHost", QVariant("localhost")); config->registerObject(tcpRadio, "vncTransport", QVariant("tcp")); config->registerObject(fileRadio, "vncTransport"); config->registerObject(additionalCheck, "useAdditionalOptions", QVariant(false)); config->registerObject(additionalEdit, "additionalOptions"); config->registerObject(beforeCheck, "enableExecBefore", QVariant(false)); config->registerObject(beforeEdit, "execBefore"); config->registerObject(afterCheck, "enableExecAfter", QVariant(false)); config->registerObject(afterEdit, "execAfter"); config->registerObject(osCheck, "operatingSystem", QVariant("Other")); config->registerObject(hiResCheck, "hiRes", QVariant(false)); config->registerObject(acpiCheck, "acpi", QVariant(true)); config->registerObject(hddAccelCheck, "hddVirtio", QVariant(false)); } void SettingsTab::changeHelpTopic() { //QString helpFile = ; QUrl helpFile(HelpWindow::getHelpLocation().toString() + "dynamic/" + settingsStack->currentWidget()->property("helpFile").toString()); helpView->load(helpFile); } void SettingsTab::setupHelp() { //set up the help browser helpArea->hide(); changeHelpTopic(); connect(settingsStack, SIGNAL(currentChanged(int)), this, SLOT(changeHelpTopic())); } void SettingsTab::setupConnections() { connect(hdSelectButton, SIGNAL(clicked()), this, SLOT(setNewHddPath())); connect(cdSelectButton, SIGNAL(clicked()), this, SLOT(setNewCdImagePath())); connect(floppySelectButton, SIGNAL(clicked()), this, SLOT(setNewFloppyImagePath())); connect(upgradeButton, SIGNAL(clicked()), this, SLOT(confirmUpgrade())); //connections for usb support UsbModel * model = usbPageWidget->getModel();\ UsbConfig * conf = parent->machineProcess->getUsbConfig(); connect(model, SIGNAL(vmDeviceAdded(QString)), conf, SLOT(vmAddDevice(QString))); connect(model, SIGNAL(vmDeviceRemoved(QString)), conf, SLOT(vmRemoveDevice(QString))); //connections for optical drive detection connect(QtEmuEnvironment::getHal(), SIGNAL(opticalAdded(QString,QString)),this,SLOT(optAdded(QString,QString))); connect(QtEmuEnvironment::getHal(), SIGNAL(opticalRemoved(QString,QString)),this,SLOT(optRemoved(QString,QString))); } //various file select dialogs void SettingsTab::setNewHddPath() { QString newHddPath = QFileDialog::getOpenFileName(this, tr("Select a QtEmu hard disk image"), config->getOption("hdd", myMachinesPath).toString(), tr("QtEmu hard disk images")+" (*.img *.qcow *.vmdk *.hdd *.vpc)"); if (!newHddPath.isEmpty()) config->setOption("hdd", newHddPath); } void SettingsTab::setNewCdImagePath() { QString newCdPath = QFileDialog::getOpenFileName(this, tr("Select a CD Image"), config->getOption("cdrom", myMachinesPath).toString(), tr("CD ROM images")+" (*.iso *.img)"); if (!newCdPath.isEmpty()) config->setOption("cdrom", newCdPath); } void SettingsTab::setNewFloppyImagePath() { QString newFloppyPath = QFileDialog::getOpenFileName(this, tr("Select a Floppy Disk Image"), config->getOption("floppy", myMachinesPath).toString(), tr("Floppy disk images")+" (*.iso *.img)"); if (!newFloppyPath.isEmpty()) config->setOption("floppy", newFloppyPath); } //end file select dialogs //warning dialogs void SettingsTab::confirmUpgrade() { if (QMessageBox::question(this, tr("Upgrade Confirmation"), tr("This will upgrade your Hard Disk image to the qcow format.
This enables more advanced features such as suspend/resume on all host operating systems and image compression on Windows hosts.
Your old image will remain intact, so if you want to revert afterwards you may do so."), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { emit upgradeHdd(); } } //end warning dialogs //load program wide settings void SettingsTab::getSettings() { QSettings settings("QtEmu", "QtEmu"); myMachinesPath = settings.value("machinesPath", QString(QDir::homePath()+'/'+tr("MyMachines"))).toString(); } void SettingsTab::setVirtSize(qint64 size) { QString sizeS; float sizeK = size/1024.0; float sizeM = sizeK/1024.0; float sizeG = sizeM/1024.0; if(sizeM<1) sizeS = QString::number((int)sizeK) + "." + QString::number(((int)size)%1024) + " Kilobyte" + ((sizeK<2)?'\0':'s'); else if(sizeG<1) sizeS = QString::number((int)sizeM) + "." + QString::number(((int)sizeK)%1024) + " Megabyte" + ((sizeM<2)?'\0':'s'); else sizeS = QString::number((int)sizeG) + "." + QString::number(((int)sizeM)%1024) + " Gigabyte" + ((sizeG<2)?'\0':'s'); virtSizeLabel->setText(sizeS); } void SettingsTab::setPhySize(qint64 size) { QString sizeS; float sizeK = size/1024.0; float sizeM = sizeK/1024.0; float sizeG = sizeM/1024.0; if(sizeM<1) sizeS = QString::number((int)sizeK) + "." + QString::number(((int)size)%1024) + " Kilobyte" + ((sizeK<2)?'\0':'s'); else if(sizeG<1) sizeS = QString::number((int)sizeM) + "." + QString::number(((int)sizeK)%1024) + " Megabyte" + ((sizeM<2)?'\0':'s'); else sizeS = QString::number((int)sizeG) + "." + QString::number(((int)sizeM)%1024) + " Gigabyte" + ((sizeG<2)?'\0':'s'); phySizeLabel->setText(sizeS); } void SettingsTab::getDrives() { //TODO:set a list of removable drives to be chosen by the dropdown menu for optical media / floppy drives. on linux this must be obtained through dbus, but on windows it can be gotten through Qt itself. //qDebug(QDir::drives()); } void SettingsTab::disableUnsupportedOptions() { if(QtEmuEnvironment::getKvmVersion()<1) { hddAccelCheck->setEnabled(false); hddAccelCheck->setChecked(false); // netPage->netAccelCheck->setEnabled(false); // netPage->netAccelCheck->setChecked(false); } } UsbPage* SettingsTab::getUsbPage() { return usbPageWidget; } void SettingsTab::optAdded(QString devName, QString devPath) { cdImage->addItem(devName, devPath); } void SettingsTab::optRemoved(QString devName, QString devPath) { cdImage->removeItem(cdImage->findData(devPath)); } qtemu-2.0~alpha1/machinewizard.cpp0000644000175000017500000003432411153622557017167 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machinewizard.h" #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MachineWizard::MachineWizard(const QString &myMachinesPathParent, QWidget *parent) : QWizard(parent) , myMachinesPath(myMachinesPathParent) { addPage(new ChooseSystemPage(this)); addPage(new LocationPage(this)); addPage(new ImagePage(this)); setWindowTitle(tr("Create a new Machine")); QSettings settings("QtEmu", "QtEmu"); QString iconTheme = settings.value("iconTheme", "oxygen").toString(); setPixmap(QWizard::LogoPixmap, QPixmap(":/images/" + iconTheme + "/qtemu.png")); } QString MachineWizard::newMachine(const QString &myMachinesPath, QWidget *parent) { MachineWizard wizard(myMachinesPath, parent); QString result; bool accepted = (wizard.exec() == QDialog::Accepted); if (accepted) result = wizard.field("path").toString()+'/'+wizard.field("name").toString().replace(' ', '_')+".qte"; return result; } void MachineWizard::accept() { QString osName = field("name").toString(); QString osPath = field("path").toString(); QString osType = field("operatingSystem").toString(); QDir *dir = new QDir(); dir->mkpath(osPath); QDomDocument domDocument("qtemu"); QDomProcessingInstruction process = domDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); domDocument.appendChild(process); QDomElement root = domDocument.createElement("qtemu"); root.setAttribute("version", "1.0"); domDocument.appendChild(root); QDomElement machine = domDocument.createElement("machine"); root.appendChild(machine); QDomElement domElement; QDomText domText; domElement = domDocument.createElement("name"); machine.appendChild(domElement); domText = domDocument.createTextNode(osName); domElement.appendChild(domText); domElement = domDocument.createElement("operatingSystem"); machine.appendChild(domElement); domText = domDocument.createTextNode(osType); domElement.appendChild(domText); domElement = domDocument.createElement("hdd"); machine.appendChild(domElement); if(field("format").toInt()==0) domText = domDocument.createTextNode(osPath+'/'+osName.replace(' ', '_')+".qcow"); else if(field("format").toInt()==1) domText = domDocument.createTextNode(osPath+'/'+osName.replace(' ', '_')+".img"); else domText = domDocument.createTextNode(osPath+'/'+osName.replace(' ', '_')+".vmdk"); domElement.appendChild(domText); domElement = domDocument.createElement("memory"); machine.appendChild(domElement); domText = domDocument.createTextNode("128"); domElement.appendChild(domText); domElement = domDocument.createElement("notes"); machine.appendChild(domElement); domText = domDocument.createTextNode(tr("Click here to write down some notes " "about this machine.")); domElement.appendChild(domText); domElement = domDocument.createElement("snapshot"); machine.appendChild(domElement); #ifdef DEVELOPER domText = domDocument.createTextNode("true"); #else domText = domDocument.createTextNode("false"); #endif domElement.appendChild(domText); QDomElement netElement = domDocument.createElement("net-guest"); QDomElement element = domDocument.createElement("guest0"); netElement.appendChild(element); root.appendChild(netElement); domElement = domDocument.createElement("name"); element.appendChild(domElement); domText = domDocument.createTextNode("Interface 0"); domElement.appendChild(domText); domElement = domDocument.createElement("nic"); element.appendChild(domElement); domText = domDocument.createTextNode("rtl8139"); domElement.appendChild(domText); domElement = domDocument.createElement("nic"); element.appendChild(domElement); domText = domDocument.createTextNode("rtl8139"); domElement.appendChild(domText); domElement = domDocument.createElement("randomize"); element.appendChild(domElement); domText = domDocument.createTextNode("false"); domElement.appendChild(domText); domElement = domDocument.createElement("host"); element.appendChild(domElement); domText = domDocument.createTextNode("Interface 0"); domElement.appendChild(domText); domElement = domDocument.createElement("enabled"); element.appendChild(domElement); domText = domDocument.createTextNode("true"); domElement.appendChild(domText); domElement = domDocument.createElement("mac"); element.appendChild(domElement); QString mac="52:54:00:"; for (int i=1;i<=6;i++) { mac.append(QString().setNum(qrand() % 16, 16)); if(i%2 == 0 && i != 6) mac.append(":"); } domText = domDocument.createTextNode(mac); domElement.appendChild(domText); netElement = domDocument.createElement("net-host"); element = domDocument.createElement("host0"); netElement.appendChild(element); root.appendChild(netElement); domElement = domDocument.createElement("name"); element.appendChild(domElement); domText = domDocument.createTextNode("Interface 0"); domElement.appendChild(domText); domElement = domDocument.createElement("type"); element.appendChild(domElement); domText = domDocument.createTextNode("User Mode"); domElement.appendChild(domText); domElement = domDocument.createElement("hostname"); element.appendChild(domElement); domText = domDocument.createTextNode(osName); domElement.appendChild(domText); QFile file(osPath+'/'+osName.replace(' ', '_')+".qte"); if (!file.open(QFile::WriteOnly | QFile::Truncate)) { QMessageBox::critical(this, tr("Error"), tr("Image NOT created!")); return; } QTextStream out(&file); domDocument.save(out, 4); QProcess *imageCreateProcess = new QProcess(this); imageCreateProcess->setWorkingDirectory(osPath); QStringList arguments; if(field("format").toInt()==0) { arguments << "create" << "-f" << "qcow2" << osName.replace(' ', '_')+".qcow"; } else if(field("format").toInt()==1) { arguments << "create" << "-f" << "raw" << osName.replace(' ', '_')+".img"; } else { arguments << "create" << "-f" << "vmdk" << osName.replace(' ', '_')+".vmdk"; } arguments << QString::number(field("size").toDouble()*1024)+'M'; #ifndef Q_OS_WIN32 imageCreateProcess->start("qemu-img", arguments); imageCreateProcess->waitForFinished(); if(imageCreateProcess->error() != QProcess::UnknownError) { //we may be on a system that uses "kvm-img" instead imageCreateProcess->start("kvm-img", arguments); imageCreateProcess->waitForFinished(); } #elif defined(Q_OS_WIN32) imageCreateProcess->start("qemu/qemu-img.exe", arguments); #endif if(imageCreateProcess->error() == QProcess::UnknownError) QMessageBox::information(this, tr("Finished"), tr("Image created")); else #ifndef Q_OS_WIN32 QMessageBox::warning(this, tr("Finished"), tr("Image NOT created!
You may be missing either qemu-img or kvm-img, or they are not executable!")); #elif defined(Q_OS_WIN32) QMessageBox::warning(this, tr("Finished"), tr("Image NOT created!
You may be missing qemu/qemu-img.exe!")); #endif QDialog::accept(); } ChooseSystemPage::ChooseSystemPage(MachineWizard *wizard) : QWizardPage(wizard) { comboSystem = new QComboBox; registerField("system", comboSystem, "currentText"); comboSystem->addItem(tr("Select a System...")); comboSystem->addItem(tr("Linux")); comboSystem->addItem(tr("Windows 98")); comboSystem->addItem(tr("Windows 2000")); comboSystem->addItem(tr("Windows XP")); comboSystem->addItem(tr("Windows Vista")); comboSystem->addItem(tr("ReactOS")); comboSystem->addItem(tr("BSD")); comboSystem->addItem(tr("Other")); registerField("operatingSystem", comboSystem, "currentText"); connect(comboSystem, SIGNAL(activated(int)), this, SIGNAL(completeChanged())); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(comboSystem); layout->addStretch(); setLayout(layout); setTitle(tr("Select the operating system you want to install")); } bool ChooseSystemPage::isComplete() const { return !(comboSystem->currentText()==tr("Select a System...")); } LocationPage::LocationPage(MachineWizard *wizard) : QWizardPage(wizard) { QLineEdit *pathHidden = new QLineEdit(wizard->myMachinesPath, this); pathHidden->setVisible(false); registerField("myMachinesPath", pathHidden); QLabel *nameLabel = new QLabel(tr("&Name:")); nameLineEdit = new QLineEdit; registerField("name", nameLineEdit); nameLabel->setBuddy(nameLineEdit); connect(nameLineEdit, SIGNAL(textChanged(QString)), this, SLOT(updatePath())); QLabel *pathLabel = new QLabel(tr("&Path:")); pathLineEdit = new QLineEdit; registerField("path", pathLineEdit); pathLabel->setBuddy(pathLineEdit); QSettings settings("QtEmu", "QtEmu"); QString iconTheme = settings.value("iconTheme", "oxygen").toString(); QPushButton *pathSelectButton = new QPushButton(QIcon(":/images/" + iconTheme + "/open.png"), QString(), this); connect(pathSelectButton, SIGNAL(clicked()), this, SLOT(setNewPath())); QHBoxLayout *pathLayout = new QHBoxLayout; pathLayout->addWidget(pathLineEdit); pathLayout->addWidget(pathSelectButton); connect(nameLineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged())); QGridLayout *layout = new QGridLayout; layout->addWidget(nameLabel, 1, 0); layout->addWidget(nameLineEdit, 1, 1); layout->addWidget(pathLabel, 2, 0); layout->addLayout(pathLayout, 2, 1); layout->setRowStretch(3, 1); setLayout(layout); setTitle(tr("Choose name and location for the new machine")); } void LocationPage::updatePath() { pathLineEdit->setText(field("myMachinesPath").toString()+ '/'+nameLineEdit->text().replace(' ', '_')); } void LocationPage::setNewPath() { QString newPath = QFileDialog::getExistingDirectory(this, tr("Select a folder for saving the hard disk image"), field("myMachinesPath").toString()); if (!newPath.isEmpty()) pathLineEdit->setText(newPath); } void LocationPage::initializePage() { nameLineEdit->setText(field("system").toString()); updatePath(); } bool LocationPage::isComplete() const { return !(nameLineEdit->text().isEmpty()); } ImagePage::ImagePage(MachineWizard *wizard) : QWizardPage(wizard) { QLabel *sizeLabel = new QLabel(tr("&Disk image size:")); sizeSpinBox = new QDoubleSpinBox; registerField("size", sizeSpinBox, "value"); sizeSpinBox->setFixedSize(sizeSpinBox->sizeHint()); sizeSpinBox->setValue(2); sizeLabel->setBuddy(sizeSpinBox); QLabel *sizeGbLabel = new QLabel(tr("GB")); sizeGbLabel->setFixedSize(sizeGbLabel->sizeHint()); sizeGbLabel->setBuddy(sizeSpinBox); connect(sizeSpinBox, SIGNAL(valueChanged(double)), this, SIGNAL(completeChanged())); QLabel *formatLabel = new QLabel(tr("Disk image format:")); QComboBox *formatComboBox = new QComboBox; registerField("format", formatComboBox); formatComboBox->addItem(tr("Native image (qcow)")); formatComboBox->addItem(tr("Raw image (img)")); formatComboBox->addItem(tr("VMWare image (vmdk)")); //encryptionCheckBox = new QCheckBox;//qemu does not appear to support this very well, and kvm doesn't boot encrypted images at all... QLabel *formatInfoLabel = new QLabel(tr("The native image format enables
" "suspend/resume features, all other formats
" "lack suspend/resume. Use \"Native image (qcow)\"
" "unless you know what you are doing.")); formatLabel->setBuddy(formatComboBox); connect(formatComboBox, SIGNAL(activated(int)), this, SIGNAL(completeChanged())); QVBoxLayout *layout = new QVBoxLayout; QHBoxLayout *sizeLayout = new QHBoxLayout; sizeLayout->addWidget(sizeLabel); sizeLayout->addWidget(sizeSpinBox); sizeLayout->addWidget(sizeGbLabel); QHBoxLayout *formatLayout = new QHBoxLayout; formatLayout->addWidget(formatLabel); formatLayout->addWidget(formatComboBox); layout->addLayout(sizeLayout); layout->addLayout(formatLayout); layout->addStretch(); layout->addWidget(formatInfoLabel); layout->addStretch(); setLayout(layout); setTitle(tr("Specify disk image details")); } void ImagePage::cleanupPage() { sizeSpinBox->setValue(0); } bool ImagePage::isComplete() const { return (sizeSpinBox->value()!=0); } /*void ImagePage::enableEncryption(int choice) { if(choice == 0) encryptionCheckBox->setEnabled(true); else encryptionCheckBox->setEnabled(false); }*/ qtemu-2.0~alpha1/images/0000755000175000017500000000000011217515403015065 5ustar fboudrafboudraqtemu-2.0~alpha1/images/crystal/0000755000175000017500000000000011217515403016546 5ustar fboudrafboudraqtemu-2.0~alpha1/images/crystal/cdimage.png0000644000175000017500000000337310753140477020664 0ustar fboudrafboudraPNG  IHDR szz pHYs  gAMA|Q cHRMz%u0`:o_FqIDATxb?C~~?@glbc?}ԩS-*Ȟw߿307ft? 665aa0P*_3;kpDe@$ ~pf)313E#D ݷWn/ >}b`gggH(4@"'`6t1'@@w'''333 X!H4X9ȑ1,A4rA삙@,Ȇ,&U }0AF`accAQB@$EÇ^~ 4 ,, X(,|2ء"/\АsX}ŋ /^"nnnp[n( P8qtr4r" x%ûw@>88q 8Q+W=,@au7,Aće#c@RP019v@(AG'D@A5yV| ,A & n#@qZ ˃!z @Y3@à{=^ѠrE,A )t |ʊb9(AK u| @(@yV}V@gCd Cw77AhW 8yD '6d@|>$_" ؑI>5 95\ GO0XЂ@ f9rYReÇ3\~ @gFP~iA4A( )))x'hc@rX%*߿1 A///X abbb۷oAz" &F2P"QRRڵk`@Ԁ,aP)eJd qPU^ yP PBd#b{.7(aP jD9"s9yV6 G@;Vރ\ðaW^1hjj} 9(@B`R{npݻ\)!;H(D@"@T| ngPi%*:Pz*8Aiԇ``MMۙ3gFΘ1 :b+AA?X0r:ܠr 3` {;ydgP rrr`a2k0(@PJtP+++M4(tf'@XVz,+@Ah}}= zpu r [ŤAwuu @(@/)FN29@z ׀ů&r\F/r'%|Q@`*;=Sy,˄ @"L_mIENDB`qtemu-2.0~alpha1/images/crystal/suspend.png0000644000175000017500000000244010757623347020754 0ustar fboudrafboudraPNG  IHDR D pHYs  @AtIME  2k]PLTEeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee2h2ieeeeeeeee2eeeeeeeeeeeee2i2ieeeeeeeee2eeee2^2a2\2i2i2h2i2g2f2^2e2e2e2e2d2c2b2b2b2h2i2h2e2e2e2e2j2h2i2h2i2h2h2h2g2g2g2i2f2f2f2h2h2i2i2i2k2l2l2m2m2q2r2r2r2s2w2x2z8~9m9o;n;w;q"Aaз^uNiM.5NQ~Ta4MߏCnYBqި5 I*b!.^(#PZ Io0<IENDB`qtemu-2.0~alpha1/images/crystal/floppy.png0000644000175000017500000000310210753140477020572 0ustar fboudrafboudraPNG  IHDR szzgAMA7IDATxWiHiLi&#\'SHi6J0**HljtHEX4B",{8ڦٔ6VPRu枋OXM6̅{=>:͛q1m4L2x)޼y[n+Vpc9d` 'TJjj*lقH>|Xg^[[/B)lÆ >}:BCCsN<;wɓKt$U) 8fTϞ=qARKpvY3۱fٳ>}T ' HP$$$\;_hIfq]>TUUQ3Hz*?&VZZжSX@.gf6g5hˢo.1ׯSݻ96d'`'$<== Nc*`5;vٳg`P׮]ëWr T;Ŵ=;7!̓;2a&GK# $(7deͰ"ijF//03;ԵcPxz H{&;Z֭[Ӯ"lllxƣb9r$͛/fРb4e,n N/`YT# <|kƣG 8UO4X(y_,<994NF%rbZ  *'',KH;sdV߿ v.Ia… Z+vrrjIHww mbfB_9/f Fwaπ{KK:Jtй@at`Rf x|dd_1vXDDD%}tRQǰk/)ѮhtGEҳ]Vm4 ,'"O:?(/>VҍE+Ԇ0QAE(ǐ)-+ď,%9Z)Ag\W o _cCIENDB`qtemu-2.0~alpha1/images/crystal/stop.png0000644000175000017500000000234410753140477020255 0ustar fboudrafboudraPNG  IHDR D pHYs ?@"tIME $PLTEeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee2h2ieeeeeeeee2eeeeeeeeeeeee2i2ieeeeeeeee2eeee2^2a2\2i2i2h2i2g2f2^2e2e2e2e2d2c2b2b2b2h2i2h2e2e2e2e2j2h2i2h2i2h2h2h2g2g2g2i2f2f2f2h2h2i2i2i2k2l2l2m2m2q2r2r2r2s2w2x2z8~9m9o;n;w;(8יy3 ;O[Cn뱘vER<:i-]r>WL#fՂ[e-wO-=ٳKԫw!6kG* ]ͶBBA|:TҜh;ECW+0lTKmlyyAX .+vBvƄy'&܁B{lBh !$Tԑ3)gak @nhGqm阣Jٮm."aS&s> f $6|Q: qhH߶w O|_j'YZ1%rbQ;>n! image/svg+xml QtEmu No Preview Available qtemu-2.0~alpha1/images/crystal/hdd.png0000644000175000017500000000353310753140477020030 0ustar fboudrafboudraPNG  IHDR szzgAMA7IDATxWKo$Wꪶm{d0 !,@ à(, l’H,!"@Y2"0glnw=3n*k7_[Q4] }Ԧw&-Ua:ԆLuw3'\3Əxׯ|5m#Mظ,Ӏ.56k o2>ƽ{ N3w;_(\B "k1DVy9ǥ4Ef9~V_ &Q2z\SҌ5(gS(%'!SaBt;ٮyr1J {k`p2' [ . SW"d酾@Be+3@P krY.=# C̰*l2GhP%ua1Y|`Gi:ǍX e&EbTl[ 0aj `^ԸP|('cpq8G4 ݦ_l?ba/4fNFp+dX$4lǩD\+K-Q(e>  [Y~)VA$R7 &AEJA]No3LۚmہAׯ]W6i3(*\  eHK0 powQenl k w.ZYA&Zͅ^1M ]K$$2ى~5|ni4f5bQ> 1QxL6gg?N$YR|2fԫX]nJLy;bxhoޗU'lWaȻ3<5Dd4q8H% 4uh|rғ$$<@ q6`6U5VzTKʹ( d8D6hb9T\MSmxHhDGVh/hѠϊd]EbssS.%p~a f 5=_hEd!^;-),- M>ŷ?wx0ap&`v~@q=DE pڸ!#*BNF쐠V / / :CMq!h4{ajL 5Hâ[*<99aff24P#ixz`ѵM@ZL$c`-Epa1iq&{fs20 17f8*f^^F Xr0;j֣0w7BoP t@gGp_M_: X7xVo_ݰT2n#_zXUAp#pzg{vbPBh=9ꉉ®'ܬҭ.|~-:4?0gQn'??w-6,sBHԆ۶HH=y&{k}K| {Vw_ow=;uΙ8B}}_a|E]猁~@DրPૐ44nG5s:H Q*y pK+rǩC;y)@7Jc~BU@kPB돮△,i my\c'y`B>b1 Y0??Ayjo 5m|"<>L׭u,X1d<ƨ1W q>8V :iu\f7p85RSrGg,_{[fJh~%8'1>N]opϯ\/8x /5fչRo -v ):»F L:=L<:`^e /bŶ!KrycoTt #Pi ʁ,/>&I}4Bab*0*U&J0k ^9UVF9Yx#h,ٙ _0'Agw*PPmmj̗ ar!iA:lӇQ4y?Ba^;{pto7#yd/Oc8Ul^S*.\3Vjixů)fK dSqDc壃@#Gx'oпWJ39=\g^Y4LB$5jX.͸^3)M!7Ҟ“&E'~<b# % . ܘK+4(XkJW5d+eO#&xv gӪ;pEN00/q+,MI6[j]xkW]L~ h\u `tħQsѢmVb' ucJwS8Ǥt'R=>m@ꐿ{"5ôp,;EvJ#F%IjAhb0 :hDiר8B''h2@sdzqAJB&v '71Fh.m4yth]L7*lX *`e‶ƲBm_ t\k(8I;â nJ%p=qq]'PCcb̙1+rb6]B H$ҌVH@WvZJJJnӃž}R~l^W0MȲePQ0X0NbϞ= 0 9zall 9<_,XUVсza)EhpQ}aސ $ 711!(ΔV$k" "m9_i 7hb1HRWWyf2콶f aT&JH@Jg j R?}I({WP=/$###bG̜AfTOٝI8hRs8{ ^ 7:"-@;=}(nBϚ2_(΅rVlX-\"QbE G\(SEs͙(J! COnZoxw j5]UԿ;Y3 ,xH@Zљd0+q\@_#强FEЬD`fQz0DW6G`C*4|m\R))CjkkYDLmm̿7ES 0&U T7dUvj溦۵kK[nv-Uil޼-[ ]tt,F܁y0{Td??Bs ;v//5k<_f~MVKڑU~(fE#m&O-\(H_(nnrA7?XlWmii((G^ UΒ3<Cq Q{~fupKnCFLhwxR [F[*zGwUR;{4_syح̃ާ\g^z>~*2(h`X?x7ߙH>.6-@4_>Y H4ר7BEX ŨcI3=_$z!`dn0]0D UÌx'zepmpN \1slhXX , ,uӜ \*+^"]WgZ)*攁pjGD7)@H'Py#%9Hd~~g0> ?жLUɠeQȤ1#!paaڧ`$an0z*/'%Qҙ/\=* lHmdcEYȖPV n"!$;'׉F]T;0 `psX TGSm=j:au|n2s&'~|@Wo6)p(0ქypǀ~`(-n^VIENDB`qtemu-2.0~alpha1/images/crystal/pause.png0000644000175000017500000000237310753140477020407 0ustar fboudrafboudraPNG  IHDR D pHYs ,tIME  i*t"PLTEeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee2h2ieeeeeeeee2eeeeeeeeeeeee2i2ieeeeeeeee2eeee2^2a2\2i2i2h2i2g2f2^2e2e2e2e2d2c2b2b2b2h2i2h2e2e2e2e2j2h2i2h2i2h2h2h2g2g2g2i2f2f2f2h2h2i2i2i2k2l2l2m2m2q2r2r2r2s2w2x2z8~9m9o;n;w;| $Z5ŀr +\"8DINWB˿ du,Q&3!T9HF$H) "KcK(ؔ3# ^w/UΟ6=<8LroZ&.mE|DaݐL+r^r81P(Ziu??M|bܬ;T|^O2.^6_wqjUni/$E;kln?ؤ8IENDB`qtemu-2.0~alpha1/images/crystal/memory.png0000644000175000017500000000350410753140477020577 0ustar fboudrafboudraPNG  IHDR szzbKGDIDATxiPMMjR8mlcEMP"qjԎZ)mR!4FhuTpl€" (* ( ,"(ٷh2i5C'ϼ9#_Jyr|tEτǺxzpbpsW'7<2RhPS#zz]v ?m7yTKj+@3_'f'HciiBssRرm*OBVF#tww:io\mmtuuSRRIQ} kױw {2mԨվ߯%--̬"{qwZǁ˨/%& 󮬬]g>UԾrHN&)YGa,]=Y.X;F(%ХHY=n*2SZSTTN^m.\BTT:WҵuBNVmzt<ȡG#ک9#&t[Hf-N$ÓФՙR2e嵬Yɜ.-/c%6H^LTV`0kI$$\'%EOzz.Υrh'Nh:~$JXl>!)7`gb7oI dn"[e<~X0y)Y +hqBl+u뤶MҦk4ͽNkZ"s}sνqJyhn> d][^c}s ,DYl)YPc\xebf#{`)l.i4s }(o[&ӍwA&pnfM @읉{ǂ !@T}/a g`_hζi> AeROr_\LcrWï:j^4Q`i.`k@Ǣ`뱱a%VƋWbP&04iaJ IENDB`qtemu-2.0~alpha1/images/crystal/sound.png0000644000175000017500000000416410753140477020422 0ustar fboudrafboudraPNG  IHDR szzgAMA7+IDATxŗ[h3;;Jڕ%l]lyc9%!fS!ց~2R(B&NI\bC(r$JFdGZZV^ggNݸC| 9s{n=#(Ez@Qٲ,F&H$ρ `ttTwtt,?0@EQZm VVVFL,szzBp;'N IR\vx<i"vGQxw.\իW/Jvp?W^y%[obcc*sG"s>쩧~ZX^^_O?Ų,EAu4MCUՆVX[[cjju"Q>.^먪z[E$9N`4MT*1??B6FVq;rԩ>n0pzn3reyzUU)ˤi:D P_, `pp5|fC{{;a6L7neY 4UÌE:'){ȑGCl-|> 4(j044D ,LӤz mvYZZ!O&''_Cwnut:VٳgpEQ(Jj5l&S*|{a6#L60 Ej*\||>י|܆V2؎;|T-~?@UUe˅((' ڊq˲LPիLNNdX]]w07i&KKKE4MsB"¶4<_||gER^tff l;IѣGeppOUUA]vEGG>]םT-b+++:#H0>> 7fWp8$It]i("­41MJB,|G677|sw ~E冋 hun{K/\.[Nn7T|=hǎr:& C8銢x```cǎa<|.;w'vH$|[[. UUx<477;B477zٳ~9۶_jw:nfR0s===^zzzb׮]NѪT*\r7xz?vݾ < n ,˵t:]^bk-gO !XXp'?IENDB`qtemu-2.0~alpha1/images/crystal/alpha.svg0000644000175000017500000001227611044622161020362 0ustar fboudrafboudra image/svg+xml qtemu-2.0~alpha1/images/crystal/restart.png0000644000175000017500000000314710753140477020756 0ustar fboudrafboudraPNG  IHDR D pHYs ,tIME 9 @PLTEeeeRRReeeXXXRRRUUUeeeXXXeeeRRReeeUUUeeeeeeeeeeeeeeeeeeRRReeeRRReee2h2ieeeeeeeee2eeeeRRReeeeeeeee2i2ieeeeeeeee2eQQQeee2^PPP2a2\2i2i2h2i2g2f2^2e2e2e2e2d2c2b2b2b2h2i2h2e2e2e2e2j2h2i2h2i2h2h2h2g2g2g2i2f2f2f2h2h2i2i2i2k2l2l2m2m2q2r2r2r2s2w2x2z8~9m9o;n;w;s֫ujmdfoXVJus7;7(+^B}N+ogօr,ynC~P$X\:4zV2goxtat3P~B;G4A'tc+kUn;k@UYDXcD 1~<@F$'%gUvw F^W8?/I V<_ϱN wPq#`J vNያsꓧgMﵣvIJTq?8J}y7-ؚYgjmhpQ0x ы;7 G7'V#T;G{~\eH;=~l Ns m"x ^bH^֡on^2laM[օᓜ}KDxλb \FzkKE}D˅ (V`6m" sE1j)%O^a(^kTe\c.@^U>1+ seCyU5!ۘө. pe~4 w|> ,C%9lB~;KsՂO'0pYɖ%a8GQce] .?M>Uo`&i+40NjHN38&G]xh&SéIg*QJ2$c0V+W17"~IENDB`qtemu-2.0~alpha1/images/crystal/camera.png0000644000175000017500000000163211037720672020514 0ustar fboudrafboudraPNG  IHDR ssBITUF pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATu7;wDQI $F!AD6hoiL0?QXYZ vfvgg~D5Lb;_ͭ彴ѨIȞ~?$ boE5RJOm.ZuB_(]*,Jq,М*?)%,$tͩ -2]֬y'^ԕXw%WteiE$-9v[.5mŖL eZQDߔҼ1K Pb֦,FQC)MZ0g΄g]aҖ R۲n6@פYwiU:J2m_@H&46R (ٖŖ`T/EZ#h M 1P* ISr%N([ݦrضQh/ȴ9ҳ3)%5ԵfhɊN5.fKdž\&F,H+A-M)Mʟ.A"VT(SK@#G=CM(j JC-ybKCJOFظLb;ءkZb aGIENDB`qtemu-2.0~alpha1/images/crystal/qtemu.png0000644000175000017500000000341710753140477020425 0ustar fboudrafboudraPNG  IHDR szz pHYs  bKGDIDATxWKH\g>5GGѨclҌjYD !ͺvQȪP(-nRH6$PRh y`3yܹwΝ{3Ҥs) -ݺGqӧ˅B+'O~pcX}gİ|>o^p˫W~* (###cmyuttix\pKdaEӴt:MtlmT* }xx̙3 j0`o=o0_WW[,ݻ9,TU%>99s>Ġ_F!Ewܡ %%pXH a{q2Bi:\SIU\űKY&dž\-rM{'8 |mmM0`Q֫Ϡh4D!TE0ӴX,Q!/XTș/WR=E:JjdF Dl{j $yR"J"u,JgWdb*9<.1.7+: \ )pWs**TDr˜xϢ"jX%8yhd( Qoo+  \@tAYWZ0]#`cj$E^"D^S4ҟL")6{ve1qTes JWqW w}m?n*FYZ._<}СVC t(XYͻWpA|E(^MS!Rww7>'pʕov@bSЧ!z}bbbլC:'e͛9.:ux:=|LJFf`K*! wkx6@$_HfwccZm\Z}Tkggg*/cGjƆ,Zsk ~_7PIENDB`qtemu-2.0~alpha1/images/crystal/new.png0000644000175000017500000000341710753140477020063 0ustar fboudrafboudraPNG  IHDR szz pHYs  bKGDIDATxWKH\g>5GGѨclҌjYD !ͺvQȪP(-nRH6$PRh y`3yܹwΝ{3Ҥs) -ݺGqӧ˅B+'O~pcX}gİ|>o^p˫W~* (###cmyuttix\pKdaEӴt:MtlmT* }xx̙3 j0`o=o0_WW[,ݻ9,TU%>99s>Ġ_F!Ewܡ %%pXH a{q2Bi:\SIU\űKY&dž\-rM{'8 |mmM0`Q֫Ϡh4D!TE0ӴX,Q!/XTș/WR=E:JjdF Dl{j $yR"J"u,JgWdb*9<.1.7+: \ )pWs**TDr˜xϢ"jX%8yhd( Qoo+  \@tAYWZ0]#`cj$E^"D^S4ҟL")6{ve1qTes JWqW w}m?n*FYZ._<}СVC t(XYͻWpA|E(^MS!Rww7>'pʕov@bSЧ!z}bbbլC:'e͛9.:ux:=|LJFf`K*! wkx6@$_HfwccZm\Z}Tkggg*/cGjƆ,Zsk ~_7PIENDB`qtemu-2.0~alpha1/images/crystal/resume.png0000644000175000017500000000244510757623347020600 0ustar fboudrafboudraPNG  IHDR D pHYs mtIME I^PLTEeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee2h2ieeeeeeeee2eeeeeeeeeeeee2i2ieeeeeeeee2eeee2^2a2\2i2i2h2i2g2f2^2e2e2e2e2d2c2b2b2b2h2i2h2e2e2e2e2j2h2i2h2i2h2h2h2g2g2g2i2f2f2f2h2h2i2i2i2k2l2l2m2m2q2r2r2r2s2w2x2z8~9m9o;n;w;i}F;E0BJdgα3!8$Kpwk{юu4 ^ƨd_[4z\2;K9;ZoSOXΤ 6q m{fcC@wSyh.r{HW\zln:AyVnɛ+8q0 %:ӈZ4߾(JI-XKxL9YU-8eǻ"0P%sўaT[KЭ4M!_OpM^HjRM,@$=f޴hi(WM$&):K-rr/%g@Il5DiMc_j6wEq0h4YVn? MJa5PCYi5 z3K(NJ-z!lܢ3~׌Rq~*arRz5n,tW p hHl`u#p,K6fL(Ӳ9)6ZH@ Q{IENDB`qtemu-2.0~alpha1/images/crystal/network.png0000644000175000017500000000336410753140477020764 0ustar fboudrafboudraPNG  IHDR szzgAMA7IDATxڵWMhTW>fIğhA+mQ["XPP [RՅ+(X]t#)t#ZCڠFQcM̛y?9ܠ&Fo<{߻;9羫AH߿wɤ1= ioRdY ̈́֏z^8uTr!Ws}~JR"Ii aa"nbSy)5@˗/+>( THgh" IIGq,2-)*B*lq+F*!!HEƌ V-\4Yixjc#*8YbxRl&?{0KLuk)J<jF0!80(%# ai-,Ď)xSDP"jc<L̟ЂI) -bKT *9k"5M ~&$p8 E*,?3d sE7m ˆlZIB!E V+i'砀vyd4pd%LJ lTSitד,+|UפLԡQ,!MNh4#a$SdɈpd~ҥTK/ z6 ybH1KM9Jda: DB`ߑamB@1"&s VM$%p.9 㒛u @'. } r)I<#DV!P0xO=4 ,]$A)!o x9([lPa`t$& 5/,<UM \Ȫ2ҥy5^H{ <6['@E>@/R .œlbJ*J t6> f0<CriC +IJz:sFgϞ 2;T_pbH @ })Xm{cʩX[nCCCeGܹs;vx $Hbd2Zڦ` GGG.=38ŋbZv$l m۶m5u+z.]ʝ>}ɓGGFFzA"yyaH8p۷o000 ~r9fU__ jkk{LicE\.lqㆺpoҐ>a4 ls`yE |p&% E:łn`lRVe 6޹kRE:@@e-.fe>x6Cy?'U)1F#r#ɩ O6OTPZM8~}2! "TbAv"%-U_9+> scWs 0S)Z۞E7 7>Ziwyh!bݝHzadMP(9yek§)UC6%)^=ajF7J0!ɑZ@ \@<@sm NǍ+@2Uڻf$F8Ή^B_E1?awlLH]Qr=6Y"jrvLl.YujQ_q1 +[䮝+g.L&pyR%GuDhl."x&Zs ڃr5S܅qn>HuӘd@LӮ"2&OX+bS>yNꉅ35i<ͤ~C`־'sQ=@ɦl;20NwQr&v H@Sȯc @.!M:zg?@ qFzd#&18(g6qd:y)zŗ,gj6ښ{SnlluE! MGϬ;Rč!ulq]$ fZWVVݻCz  E8.p"ժΝ; ~:'H1R[n} ,ɾ > { ?es_T>a~9∁k!O(P6FY^HܜeDRIENDB`qtemu-2.0~alpha1/images/oxygen/remove.png0000644000175000017500000000205111051453634020402 0ustar fboudrafboudraPNG  IHDR szzbKGD pHYs7\7\ǤIDATxT=oG}w$AlJEB vۅP$_`r >F8K6@)-Ȗ"C"ivB.sѱH3xݙy3e,h0D~~st8H/CNֹg޺+ĵ` ăB͛'Ol. X_ǻׯCNMRB7braA47qPښ|v4ɽwt<ܹcW^|Ul4>?\yp =GN"!MT2S{Ur?GBժU[|)pAvv֓ahB2`p~ cX;;?Ϥ1eeBZWZZ>^YQ숧#'L S~cxR"`ǾV6/ ZK(‡׮ybYT9A*5r5~Z#%Oӧ<2Ge174 ;\fM?G V~ vozpnŽo/j͌<74X% $%Ѥb0Jk5 =زKȐZYI%mI"4`E~=BFEB&) `,cX'ߝ"zTXtSoftwarex+//.NN,H/J6XS\IENDB`qtemu-2.0~alpha1/images/oxygen/suspend.png0000644000175000017500000000307710757623347020613 0ustar fboudrafboudraPNG  IHDR szzsRGBbKGD pHYs7]7]F]tIME 0ۀIDATXŗOl\G?3ޮKSj!7iß&HA%-"6IʵzR$(q.r@QD$"$ct:z7ί)[Fo>\TuᆪUT6F cZىm؍\ϻ5buNѕN8pw]|flȉC_\KSP3ɉʱp/htkuDcWf&vrO}k]>N$潫A hs" ?DerPkіv5KĖ姖/:y ?R2r6F,a"C+0=11}uŽj\,6{ D&!֦\|Ħ6sJ.+< IS JjsA"``Jv![(ԧM8G JljBH[l"B)A)H"9 %!˸VEۥ  [  j-BdH5f~`3RTaQ_CԘo>ڝo.F .. J0֡2b_QI>p-ν.9*DF90'l6Y!?8-Q19ܣRV6]#QTO>"׺1ˁfh{ qpy'.xAfffV=g&3/*J8Aoa9("/?~#k߉w'&$Is; wkۏl6{7b[a]ìD:`;F ho}v3(P<;7gG™?q;L@BgNx$Ơ \ "mF~gh ^d~;ĸ Z;=J:uqvBN}[p>\`}~n F+& BVlO/ {^l!L t؉'}{X yN/9{@d9UD[]8=lӘ`Lkh&E530aj{]6 ёW/zûwB]\ l=~,_VF8 ӳ5L0tf6nWso-;MOz:$IENDB`qtemu-2.0~alpha1/images/oxygen/floppy.png0000644000175000017500000000231310757623347020433 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<HIDATxWnEً7K; B/'w(Rp_#+HDH,%Hu0{iNfk{S5^YYkUFn_%{ߥl;Go} *y }܏'lĖ[Ӊ_~Hbkkh<m?}@tۥK˴k!U}W18?dJb_E(MSjZ*b*"7CNu9g* R^'y <ښm\$F=Lc-&oCݖ@M4 HNSr`U*PoA(&eYb@cH-xOQŒe'6l\lI%XL'֗MfoINlFD`b7>[̚)i GLDn/n|k\ =SC /^’L%D=;ŽfrjMh  ,j!UVg@9!׺Wz}qj4uxx(%`8IRA@FÍ|,U1DZKW_;2lvn&/#x#0LH)ECV~7fD Qc~^pZH\$Ih:TT`2RN3$FbfZ.e =P͐y:aQ҈H *ܞ('Z]ܖ$wSi\)8#kp0r#6J OG^FX&k?W^NzȃYp׮}hNOo1(zfuUBz"VBXg%Og&JH?see˭+づc՗pO !! y|_`}<៓M+GP ZV ƨ)kPebvLBwppApQklpwEO!/'$ڨV*J)K;99 dQm4qb |ȸv\ḷjIENDB`qtemu-2.0~alpha1/images/oxygen/keys.png0000644000175000017500000000207411165512044020062 0ustar fboudrafboudraPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTEzz|xxzĒwx3tRNS  *+vn3 IDAT8c`000sq<\ 쑕IJJ*jZںRnAa q53BGdꍘ^0#xRn3Z+88;meܥ,e=$L4䜤| [98{z- uaB˜9ӳw-WpNQg:PAKHx`(KxTZg3k֌޾ 9B} |u _j15 ؔ"-@mitfӽ'3$|@$skǝ̢'V0t7 |fr^I[J@fwmѢ Ȉ.Fy=~Y|`Ass}܎]eYжmMk"@/us& PjjKeJ%(iB=6x)6;q=ش?u\…_,hY(HT'QI {"d{ [idΟ++_YJP u\Jpj{f pa ؆ɕxuhU#>P%\Rh%l"G ].vQH,T ޽Tٟy-\W)̑ Hš-fřpYL} L]GW t)f` 3nDA؜"ދInOv|$_}MUyz3)x.35mWk>z]:Uig;ASa}Wd9a ]fF[Չ[]K5 M aR@c1cBznڊuqv#[8M Pຈ:C AK9>CvI,yީ}`Ym]ŕTb9e*5蓟q%Dm(7E,Q{wOs (s@2@ 8}?~Tһ|vwAɒ]YcxzZ"R9_"sF\C?FH+^~;^a|vUp늈P(P=3ap,=X6q0X^- D n?z[ĕ.< ~@W_!Ĺd4MYb1]Pn؂O_ 5fSGڏ=o :?TS ROVQU?q ?Չ$a[G=J 1k侜 BfHe%=OOT_$-v(ؐ(sZ3x_΋wr1ojk>s O^NYZoL˟v'5r *z&脰GklhhMazo]fN%_{wd&M[rÌ>t:{w's:O aHڋO>_.{ bIENDB`qtemu-2.0~alpha1/images/oxygen/splash.svg0000644000175000017500000024501511044622161020416 0ustar fboudrafboudra image/svg+xml QtEmu No Preview Available qtemu-2.0~alpha1/images/oxygen/hdd.png0000644000175000017500000000336210753140477017660 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<oIDATXWKo=#hRoE,X(ra$7`$nr@"ˢˋ ‰ȈbɖlǶ$S8Ӆ5SJ8|Ea$'7o>bƶmu] 4mK`<GQI27Bs9~ڶ޻w "W^mU*?}lllp8D@(@D`jc8" C! R)JID[DO1_Tpax!|MEDJdp||zq#4 pcpΑN0]5_LDzxɂQypH<m#ιR!cpα ER÷oߐf[0J ZBu1qbظU)|߇aJniX4 d2t:Z²,^0MD0 z/ as \.q0"BZ]C\bʈL&S뺁akkk(pB\^^booi"{ s Na`kk BQ`6!J; !kd26mt(Jjzd2,NIms"B8==yibT1fZ-UP!JR'ϟ4muǪZ-5ͩb0,5M"2%P}!7I򺸸P3"B.gT+Xq8`mm XO>DTsN'ܛmWVRP*0J`I ciIA(%,*,+F 坹Ie8c a JxIR24M[J(eYlH2{9HfX3MƼ* H/30DQIJeaccL@zAqt]׍$9)6* >}a4a4)%u]r9J%z=|sUZ] qn "zuA4v,K5Vv5r ue߸`0*NuטL&ŋznvwwfHňhR~)P.Qu_xEQ0 >$1pW&/ommLt_@v[b<>*J@PX`^εw(1?P؀i>|;d2 Opwl;۰td,u}0`6sǏjm1 0\0 7~{wss FW"*̟C!voӼ0Y6? !"JsW "_'IENDB`qtemu-2.0~alpha1/images/oxygen/scale.png0000644000175000017500000001323711046632600020200 0ustar fboudrafboudraPNG  IHDR #ꦷ pHYs7\7\Ǥ vpAg bKGD XIDATxYwTS?(EA (cÊ{C(Hj&( :6HÀRBHBi@;sYoz{>fy: !#l ?!zAuS4q!EDt@L{ʩT\)B@;<ApBv)!ܣrY*xg>ʵ^Ss6860MwY?+cs sb)! 6^l(^aO쏰3R,'nVbb|6#ĝr\q le((zWt"Buc\+cC"3B^ \i^4w&CYZ> u@u[m.M.5f,"8_gs+cpʤFՍz̡@2uWIMֻeY1T߈G${~ ^WzBLpk9bEj }cG3o'j@tdEV>:;Sɺ˕NbwF1v=5)Z@*d;&7s Ɔ[zFKW/~2cO)1P-JбyQ<56ekog?e`͹Fpc7 ~l*5ǯAeԘ|D=۸yNTc=kuȓMQ1陖+@qy%hcd߈U03lWrNޡM ĵ4- >Sf ? 0Uv@y]^{* %T) ȶ9HۿtɖylޜEhO<*ޞ=::)ʚKZvp`a%{ү6dlkM67e즒fWƻ- `aƪ҆{@Q]{}n,yK6Q/M}g3ӇL9UF0BVnoFyQ6lf~> kM;EYSDx]9*vcy*ndk]6\6 Gs cq+7:Z}a Ra  zz{`uG=pS[nuVwa:t-/aLwJгgrw_wb}oZv07km2?nh: مgi!N:22>qt;iCʍܬC|8ozCs07yH ;ؐ`v/F YLbYjl֗20] H|p0DxABc]x!dA(:CK[_ۀRЂyȯA1   ,l{o5Z /g\r [EkӕII<[la۪\)VeF*FHit NAE=`ZZ TgӮs nSrHVgxQi<>wOK} NaE^\$ik{G`G:F̆u;Z"$B,C^$LP:M` H Z36TM@G.@+Ef՞~#DLH~I8?R(fUD4݆B;{3ԃaơfjzTr<*x?0q'n ͐B糃@Śk Hܲ,ɥVfXҳp6=LIan"bel MV]* ij!"f ѓ/mA"`':6@+U꒖vdj8Qӏ`pkI&:)`48x7!r$ ͽ)@ Ruِ ґQ _mਝEѩcPnh,[ mCDht{#EO6vvcd!bLCD|D FJ,k0m/E?Oޝ =DDg"bwd7PXfd̾c ״ YyoS CEQʝHVcx#;bvʟ5G3ElTJ{(Lt@.DG.` KTX1BPŧ.}2ȋR@}K-@t(|SC'fxoS3 5 V NfG(܅A3kԌX,2y/ڭה:h9#= Gm};P=b10"YqvVXxxtq=i~'\3}|3&]}Oրo>ˮ(Yr_>s:l"w'95P!ҔRd '{W>AI$I:A)ٌP\.YO\x9P^*fBa!ҾNf:%gLGEh\~wL J0Ո4ah}ޣ +/=}+e!|Ԛ_ X$gjO͜{L*\}p)q.!zոQS[MS!YcRt]6ɊxK ۽RvtIxYByH"ihpE ݴ4yPUӛweV'}V~vIr.C~.hME{AWc}`\*N8QO5i;caƑR+郿KQt;Mpn3J2Yh5fĽǰ9R1H5/$r!=%y>y&. ?Bnsݷ8S ;V=-t5T'}a7c~ܸF衖G[FZ~ꩋfh7\}?S ]3 ;rLZC:pb܈ ڋeh+Z&vQuJ ൡ*t׊@^w!߂bt:?z=o4݇W`sЭVmo5,x3xqY˸ ghUmݒ0-Sh⩐"=,`/³l_sr}J| ۤ\O;P?*lzz#qHewy+<8i8 E򰦸To>6Z|9qgbSU|f$hO ;[~Y(1:~`׫[ ?(Mp"v tyMMbǣ %;3ಕ1'" KFfV,H7yl༪\ЄĮrљ_IK*5tj-'arJB^ 5sXS~['[:Ȣsu)3k_SSg9ߦi8.bOaw{lRHfC rgA8u8qho6]vސj_Fߌ^6=\e^pF#!MI/%8㵄vJnYB=ڻ²\=nFD+ZbG~\)|ן*i>?0U*=i#ni)K\"ڨ{*dNlg7޸Ѿ#}S hXlNś)wY7x]FG i5.T# )h 88td.N˱@C0! qR)cg770+'T*%y%%`h}b<5J@Á5P^OQxߐ/0FGgc;lt_}t}HM':)!pL8pMKj*u.`B\o7/Q}h_`xÞ4\6" 1=6z:xFhn Q"zTXtSoftwarex+//.NN,H/J6XS\IENDB`qtemu-2.0~alpha1/images/oxygen/add.png0000644000175000017500000000271711051453634017646 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<LIDATxŗoTEǿ3sΞni @C1B "D0i|21ÓȋP#ojOK !BjD@)KK={ficbҘf93ngW03wok~lhֿ #h˭{z `Cbmz[k u=wK{S@N>)M{>ա~V)'I^a\kA퇘ęط-LaTiwIF3+/W153 E(<]2#5!$!uVG16@ !BGXcYd`,ji֞j bD:^MyN\69wAdCJHw81!2Ơv9b ul{<_uF56ڞNE_Ti=mA[$lʹ8wMXؘ%@D^ck(pW564֞hGoFwmׁ`.Au\ܓ5 r,?!$p{GQP҃'{g !܉nύw#zڻ0T-4 QJJ7(Y 'LJXLx"2XQ:4yLvrƦ02uEQNVpH̲Dm0xúz̕1} gGF0md|T[k8 $K+A8dTV0 10o J(2Vv@RYf ^ ?Ll>I2,]G D"hÓ!h"DS@W.N.-Aw .@9 A$H('܇5H-rkea;Q73L9)[cUe1edu~qBkx1P +)^ {zVT3 !%B.j!%=@YyK B&cY, 0@M`;SU\kC}%@{DxNڹDвNg|M2 G*Jr$ ;#RMH&bb|Lh@)p3 TJXF+E( 8P2JR1 (DF+F! , k<)D q*VPĮ,fdz^FAEQKڴU)@=1B.Rgނk3nRDVނr=d^d;ݷ9k箽{5uM}eU>UJpqGJ'ؼn qĖnq} U j 9+6c_[`0$7:Ѕs-g&nun^яTq((1048(d s,vb^aJ2u-8Hծs%\K(Gw(\fѕB,11 l23WT!0I(vd7/OE-&mKN xK'XNʬ8PoQcC: 6:[0M] 9q <|@J22 ?Ly[ S =3b@d?n;/&t A^cwFj^N+qeFz'369005EpT9(`sdΫo9f$ h$FPlP zbӑr9}ЬjƍGP QU@҃FXr/G}8jء"hG6j$-H,nCa):D*qƢC;C"₰'@4fm( i,d>)ja2:NA M ^$5 6}Dm]?-x賔V G(6` F.0O6q,EvLyUNiW9Lnpld;n9*3+~%s{"wEng*iR~[NbD@Hj Hb< V(` hӸV)G8ԻVP #efXFB!\!!ՀZj+Ca`x$Tl_M<6)0JSCP)wilrs_7^l6PIl_mVZPՅf\$()BD,YAUbp 'RZ^ VvTiQr 1MҤ!n })@6a\\T\aBD\2I }0!ߩY>)'9 RF)Pc 둥!Q].ndnIEh.ڟ 9m .-| yL\Y ^/tl~#ƋSS#0B]3DKk`R M󯗤#ɧ790r23-)oq-: B2tAyVO,R|NQ`3 @v)I0JbE#M; &4a٘- KCŋ͈BKo~s}yyynQ]+qku+|U/R P]:f2y}P`s@>B``AΆ?3#@ԇawq(d5øe˨?_4*x y,y@B [P{ZJKڕ+n2L&du/(=gΣ2f@qzv:>A95G+/A P%18pQ~=.P^/~U8(ؖŹݻ唼8x$gk`ŀ)+VP1`i,3kfqű ,! dPiȊ,+ qJ| VYIŜ;`ݤ.SvחHuMw F0#d2N|&.]J)[&<'k(G,ZV;d׾#X5|>T7_51izzЦNgS?_ZJŜ;xqxK1 0\$ 4(|p4Uk)֘fڻ"l8NT䗨A H&}}DǎexlApdBK)PRW_ AEdB5j+yÏ?B2mT sp Ny PAl lV6H`!Rrq;+"&M%Z3D75t {ZX3E%f[;F" X8FY8C3h9o"VR{\M2XՆpQC"tAyjAV"̙#~c9NbC E.ІMIx)@))WPTpaSYsg=;8k;ז5TLr9\BUd- Pl0Y8^fЖe,\[`'-!,%,#⦡W$0DȤC|6* ~9r ` i~8656{Aq6A_ :L7AKr${+A \ކʕ. zzݜ Ft }X?hIj%wCH|{_I115n 5IENDB`qtemu-2.0~alpha1/images/oxygen/usb.png0000644000175000017500000000302411043550022017665 0ustar fboudrafboudraPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE LLLWWWlllzzzmmm```ccc999TTT[[[<<<;;;++}}бɹ˳鹝ǯͰ醙èũi~ƪȫor{ˬ}ͮnzˮаԷpqs˱̲ΧӲz˧ճsy~׵ȗָ~ɗŏծ~ʙƎ˘Ϡ†Ō4ѺAtRNS  "$(,4EI[cwzz dIDATxڅOKUQ>{e bFd%eM h%c}AE)N$ç{ww}:SZso6'ǂsQ@ @8 a!\N\iq f)zJr8^íOjͣ:n6}nkBřJF@:co 'qE~I9kys;8@y~Pk>XL\}?#< (P"^ BY#<"y}+fg!;j?0x9ǛߩĵFTԾ$@w~ T]+5ݱׁ 8J 8ƌ7I ` 0]p[uafXS ZۈJW/tV6H/</:T3 DxQ=&9FxOD\*J S8fs'`p +l:b4SsEB@&O.d jrWS @NhcK{ FD#wW!9TA\x{IuHRCCL;YN0e=VNf'I䀤@ʊN(X|"jUNlũ@vQ41<$(dIENDB`qtemu-2.0~alpha1/images/oxygen/share.png0000644000175000017500000000415411163767267020233 0ustar fboudrafboudraPNG  IHDR szz pHYs7\7\ǤbKGDIDATYe3sft)]BEE ȍ$c /L jDMHL = A,DQB%Z错g-8DhJq j>/e9vJw=߹)S?rVZÿ~<$Ŕ1|ᬮ>xɗe|lm/>x]?>>pH ݐmCUӂ콜co5<G|<†so¯];{Ͷ..ZhSt^ux߷{\+== e}I>Ya~?xB]&7 ZhQ=wH[m9o<;UHh(:\V(tCoPTGJrmӇn%r飵pT)Qd6o mQ#j&+eWV+;syV{g4izW\#(p݀ytf5f;Tudc-9:v^ՕJN[+)Y!Yff23rk-Ϲ1ܹ[{W_>Sʫ/(UH*ޫDHw? Daѫ4/gRo{HJLWcYN ZYZ휴an 8Vk߼~lr0߂p KeNxONԘZΤ+[0>1?^[Tֲ-C` OG? #"A!)<4 (3F0 |@l`fSb3M9I3D+te5-tÒ7+Sy55yr4߶՞h# "J2̿E?>}st҂NF[158–K$&Xd\ U (kDYF@CAi,̜\&%Gpޘb} (R5@SxĈ,-ueP, FĀ(@R)Zbzi'F?_Jy[Z]i(r+ojD; iQHGRe\>5ʞU#+B=q9"={ }lL[|AQU& *-~؀3t~e^5ɦ;8H}*hZ>fO0_0<1BC^؛Ll# ]@9M#d}@/)N4X96V&:gZlaeab1.!62|!"W_|-}e猩=*"DGc@yJ[`D0Z.kM@Ya$QZZFxUE bTYk*XC/{bbZ. eB O@P-FJiѠY 1fyluإna|,ġޣ^kP1d""U" ^9VfAsvVqYp! &Jc Rpj(v"뚱VvRAD?PTYcP-" "&('*q$vκs6b'l ^ N8SPH"CӉu6ފD$sbu 攳FzFB)P. qΝrucR$R ưB)cD8(RQ qYP5>ZeAhl]3ӌ""rFX 6mct:LclEK+␁KEz#m;t)@|[J</ /i_:>Cšr,NpIt]._Ͽq)ft8T]?sYUW_ M"zTXtSoftwarex+//.NN,H/J6XS\IENDB`qtemu-2.0~alpha1/images/oxygen/open.png0000644000175000017500000000210010757623347020055 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxŖM\E9Uu?{1a•0;E'vKW#J! H .id:=龷NyN);h4ũy[g]( a L _{M0f(xC9>R}_LJdSO߯F4#& 0ns2NXK6mUsy3q!j<*H#[.N{7@[V2 c.]^3W0P 6/7>no}k `pFF{80oOn?U5X['o:pbNW=?.|FڢCĚ70>WԻ̼րjfO˩L׾{4%ʬX$} CR<\1Ɓ>j 4˚xgc<=fɬjKܰؤ}gu"2- JbW-|ŋy`]N]B"Pfd=d*3B˜i4Pd7 4EH͋,>yW.$* :ΚɌ)TYO&yq*"%$䀔[̘?OMtH@v)^Wv''E뻖3vgd]v{,*G#:јu   \d 9_ɪIENDB`qtemu-2.0~alpha1/images/oxygen/other.png0000644000175000017500000000432011043510733020222 0ustar fboudrafboudraPNG  IHDR szz pHYs7\7\ǤbKGDBIDATxڭW PSg>]|*bΔ _](<@! cDPUPlj*-ZI48LwfEfL94I QbŠneURbp]X2>ȥ^"?p/((GQ 6 ͛|WˬXffh3Sedĉ[s75z@ |Ҕ ƲeKa;,X8fς~+[c>wN>qm:|0߷oOb񒅰nǍ? >N* zj*U+>|tܩqGșHLC"cc#$AL|7;nS`{eii df-L *M^-YT#["zTXtSoftwarex+//.NN,H/J6XS\IENDB`qtemu-2.0~alpha1/images/oxygen/pause.png0000644000175000017500000000323410757623347020242 0ustar fboudrafboudraPNG  IHDR szz pHYs^tIME ͞9bKGD)IDATxŕklU,ݥJ 3V WH&- $QT%$JWB/F0TS)4JPM5hWij{eLflIHqܶ={CXƸ.d3pyJy~лR U6Y33_>DJt}#㗵8CI!/k],͖ W| ߿"g"RHy]->ڸhr? Apx(;a&n a H!qA?Q/Pū&Ǡk:$bwp;󘘚O,Q`XZ!!%p;a  8$y4i@22Q㚁Zb&y(&,^oRv[XG*`OV1)Rӂ B审lL YT@Ck޺+4 h}ve s 03o oF&9Vנis @LD]& O7P RV9TlY("sxz&E"1"I<GOjjQu7LqF 3'/TC IAJ9:ĎX8{E@7rTOXl,FLc0:XI ș9GyF>hA8`8{7D"%^uu_nC`#hY܂l6ޯ{8Qr98ӣN(0'Gʂi }XH{(zoIδ^M[x27_/|I~8y@pS1w ng~&DEmΞ9 h y8)2j-Omlߙ}0 u)P}%ed돭ޖ.{/.@zZq8y9؋PRa~hA263cH`;]X—Ќ DF,Ȼ@\o^C$2_9k%NG]wN|{ޖ߽tJniC/OI~GNgN_ooĿ/k.]_>+qrUuCᴳuPV-`Zw3| &,,y54!Ѻ&nj58rJoc0;]Wa]Br dJf`MCz6Eg(z%%!IB82 w`O]FP:A$vrFEi@ӀZFZ *dJt( U@"X)K%LSW)61x -4,u;`8 r%g.QUL 5d1OY6B0\׳RhH@FƧQlb[T~#?tfk`>MK_˞5 A8>sbnh5-]Uܞw㱛/.@`+}41ZJ B{5bmB; +?5MP˘İT6 zxzS0>7=…u?ԧZ[%xÿftљ &UK~l.o/.y<}pч ~C .X=M[@b;G4zAQ -aemNC 3>q\~aÐ\BpHtL|Pi >vp( N :mVp{@CH 8vKJm{h4sYV׎*nʼn-@#P,/tjR4w HZYneM[=ۻmUJ:Z٦0q5 Rj# V%^"$Mf[` VPݽ(616 o۱kWT!r `.kH-lPLMM{x3 񨃕b] H9{b_%u|q9 _ONzu}OcOVνC#c߾}µm۶|~q:S7yRy G1hRbvMTFmX,Np#~>g]UZGSB,IצxeF/+IENDB`qtemu-2.0~alpha1/images/oxygen/cdrom.png0000644000175000017500000000430410757623347020230 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<AIDATxWkUW^{}΋iQ)-NRLL! " JKuBMX E4U[)):3<Ν:~{[fdR:{o9BkMϡ6Ǯ]T&ٔX|ܲTk$bI%)uruSlnOw?6Ƈ)ɮrjjXbӤd$ {)Eg|"pfU>#-hH<#)@@0j2 Xx>߸q-uɲE?M`۶mr'{+VD#T&4( T 2<|__<7߾[S Fpy_b$LSS6 IkAD@n1yFĝwu}iڋΟZ,`D UIn@ĐXiIL ABr|*>ukƸҔ% ɕ-YU &iB ŅBD7k׋gF9wvZ8wNW2$ [vHtYMDUBP  (<:vȲ{GQO0Q.gNϜ?xC&Ra%x@ԒN?R%8[h`.4r5"c"Q&WhpY"JC-р5b1šܹwKx8G~YT(,IrdMyfe0ݒFvF26lذ.T*uY+~9Kȿ%8K!ڈ($RR՛ {^$p[TkDV*;vNwvfYV}Fە ReC0IlJ: @1;^tL]Tŋkq碑_HhX<_V|cŭd:$T#14D_rGFFla<8Nsd.: &EJv)SL7@`:pDr uyGtz X6VĈmۦϭ1O`\(D2UB4@MWiM3N9ws{D4a$S$\'ͳ? "ny{wģ Π*6!nL/ϝ?iZ# q XGqb;DRqxjh/q>;6G,΅l"  ^-B Eyt(_q?٧DTr{, |EcȄS6_rw_18<z0Tp<,XTΛSlhH4IZZT\"@V5/`6K#91QoFa'Fو&=r\kDaIr\ADHj$|߼ƜԎ{~'\*8([@B.fٕ.ԸFH]йg{%k^iG oa j d2%ࢶHq=o^(0ӽzVZ7{g<>hQP@4|ϜO}k cLV1 y`Ձ?~)9a?_ czc i\(j-*û^H¶:uׯg3Ƈ~ Ϟ3agc]wwRc9DŽHbsܞoDe.zݟ]ӏ.]TFB@Sp;w/ۻ͓os;_Fpd{77l9d:57bL9\)_(Dz.^92w&\%"|oiXW7x2aoER۩IENDB`qtemu-2.0~alpha1/images/oxygen/sound.png0000644000175000017500000000344110757623347020255 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxklgά1v۵P+$@mZh J%P~ TE ^$Hm()$i$m%AfZ(KǎS;l{w;;*IJ)g[v9-cYq<ax//lTKOx x zN JDRl1u? v꣗ZǷөKa\OH"DV( ᅇ&lzx_㎱_/^%1>܍d2_W0/ $<^r3fSf=ɇJkQ@Ua}Ew5K;d Y!c`,$/{ȜGU`Y7\.'`4Y-% sO;9G߹W(s@T|ym<p,n7`6\!tvөmO"ưkϓ7WU X6r&|L抽 X0HۜR,\nN6L1[?FiU{pnFUWoQY]ͼ!8Dz 2dX!%%(+¯&A" $ a`T9w5dny$3-y'!Am\_5|gNÑ7Zι 0:1Jً^B>,JXbWav,%B&ŠR<0IQܴk{jC=^iD<E0Eu>b8BH%c\ I zK{kojOvM;ߊ$ִUޯ#] 0 hnjC~׆shk(nFG$ƺP>3Lrtceh55Z^~u WG`9Vu`*]aAyaZf@ב5jX&`x;y7|M_<ֶ|Ncݚ() `d|'Nc4\ cy9*@#mxr e%z' MsXdoAXOd1V; 0u 7L̯R1|jU?r#|,A|?WssS=Q:h3=_PS@uA8&$T c81,A2j()^?laKW- p+_PMMrG_?.^Y|A9aDZ5I0 !Xd'DX"XC9i]`tn_,\ͺit\E2@63GfEpY03HWSnf3I4g80HN бeߩrlF̆QAF,.)Ҥma."YUn{ zNg2ѡ',[㣻o -$Utit-o~+^EM*sIENDB`qtemu-2.0~alpha1/images/oxygen/COPYING0000644000175000017500000000434410753140477017447 0ustar fboudrafboudraThe Oxygen Icon Theme Copyright (C) 2007 David Vignoni Copyright (C) 2007 Johann Ollivier Lapeyre Copyright (C) 2007 Kenneth Wimer Copyright (C) 2007 Nuno Fernades Pinheiro Copyright (C) 2007 Riccardo Iaconelli and others You may copy it under the Creative Common Attribution-ShareAlike 3.0 license, as found here: http://creativecommons.org/licenses/by-sa/3.0/ or the GNU Library General Public License (with following clarification). This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA Clarification: The GNU Lesser General Public License or LGPL is written for software libraries in the first place. We expressly want the LGPL to be valid for this artwork library too. KDE Oxygen theme icons is a special kind of software library, it is an artwork library, it's elements can be used in a Graphical User Interface, or GUI. Source code, for this library means: - where they exist, SVG; - otherwise, if applicable, the multi-layered formats xcf or psd, or otherwise png. The LGPL in some sections obliges you to make the files carry notices. With images this is in some cases impossible or hardly useful. With this library a notice is placed at a prominent place in the directory containing the elements. You may follow this practice. The exception in section 6 of the GNU Lesser General Public License covers the use of elements of this art library in a GUI. kde-artists [at] kde.org qtemu-2.0~alpha1/images/oxygen/alpha.svg0000644000175000017500000002343111044532470020210 0ustar fboudrafboudra image/svg+xml qtemu-2.0~alpha1/images/oxygen/mouse.png0000644000175000017500000000300311046632600020227 0ustar fboudrafboudraPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE///NNN YYY>>>HHHTTTOOOOOOLLLddd444 DDD+++)))///mmm999~~~~~~???'''iiicccuuuȥ˼ϳʿԶ׾ۣ|||@@\\Ϲ555===TTTXXXcccgggoootttwww}}}66 ?}tRNS  "#%&-01239>CEFHKKWX]`abghijqw|n@IDATx]jAƻg6ɚ!1/?xl,XDd𽊻ZuM:38(cp9."(zHk%Kq nαf3/om vBMthEyMw$r*,"& IENDB`qtemu-2.0~alpha1/images/oxygen/restart.png0000644000175000017500000000316010757623347020607 0ustar fboudrafboudraPNG  IHDR szzbKGD pHYs^tIME *IDATxVKUέGWwOgz&3c hD•Rq 7MąX/ 'NNf<&33]]u>ʛ)fD=ͩ>w{?"LX7+Q _!it< h\y繛[џ\5kd25V4q7C?>x7MCH+1z- _ں!DԘNp]܅~gdBT웻do3h ''@2Q:` ̵% A" 0Abۚ a89,x`MˌcyID{. !^ggN%M5i(`tRBNG><:{ k衺`u @p{Иk}6/J40Z9`g@i(1|=; vC|A\JH? afmF$ԑ !zL:@5Tϊ;N!@Mӝyi~'7AvCJif= * J^7<#^rM\r%&7kߝEv2g`)9-kKފvBư)[AT#@nLUo¯ (H-Yl  }aA΅M㓠H~|>@-A\䆈iG $|5/ֹH JUbĆ"HH0 ["9=g̙ kSY+͋AMSLhU:;3}}f9-I4Zuu eԨ}'O&ޡ rzM0^]h65 Pшn6\߉D]=R |֏P!|uh‘A'͜938S"? ep;MJ29g{[1b*;Vś_@ h`#obrV$WO j (_{O}E,)ą!b6=IΙqX)d>[kBaB&ۖSU,bz {w ;UD2Il/&e"RD[Oq XKY(Uasze 'WQ-lm%e1pgU1P, w׆h zZ̲yPH" Ȥ !@@{RA|ϞGDLop:>  ?͓"*8c1!oj07:,Gb /pC>Z2YDÜ.ЭWh4W{Q#(Ep%MsШ x .1=6tl,Ϧ {t ENXqitDu8>Ў0n/ye{f7vDhIENDB`qtemu-2.0~alpha1/images/oxygen/start.png0000644000175000017500000000332510757623347020263 0ustar fboudrafboudraPNG  IHDR szz pHYs^tIME &mR9obKGDbIDATxW[oTU:3LKKKi@*@4\D}Q4>aO FG"%1("ZK@KeJ˴әss5=gfh!4gw^צwT*2C St`PÇH[:6iVŮM)DP/na>xQ8Ӹzuݣw߹;}ȡ@M˲m]ߴ<, UU7:Jg~'lS26_YޚgNܼÎx~ n\AhӲߪ.@πqs9"xtTT/3q$-Og14cJ/p3AUi78XZfй[6B"`10NWo#cK <>O"A@2%2PW !Ly|bv܎ )gLa9"cNϗ{ 'VixL~i 1GϾ>.qE=@B(-A2aFDL\11"3T]-k𸞪aߏO|[>&7'ܳsxD>7>Ay142[#|m}iȬ;qP P >ajZe G>,'#(@;>EdQ h]vsP:Tyat7b_Kb(IM8Fg[B\e1 `΢|Wu^kkXаbISV(iضF4|6Sg.q ARih]X +X$@6#+!4 ȏKnՃDsY@(X$x i(&Q,{@\ `#G~kMԃYҸ M4.]0 4]#{ByB`КDZ:wnMA7 f3%L.94Kغ*ݛ[L yqH@%p)bu DL4!0LemBaڰl薉!3YןC,@Hei@`(usC͊jg$R fDHin;Wۨ>Lx?=wG PY0Qd{+^jFmx M@ Qi~ѩ'~9?tQ&C)4eR~g66E մv-Vӕ7bR^QIL*eY_z}s8 r3W~;:-X___nᅦEˀ,y翢@'ŭ-_3Bx-CQ{#wxJ@.{Q'Ѿ u6๞κ}0Qй9:(̎Kgr,JlN`QUAs¡u×z-@ VWf&0דG<"TDCrps'Ǿ.aDys.ߋPSx"h[ϭfzNk HG(2(״؎~& )H崜FlTIENDB`qtemu-2.0~alpha1/images/oxygen/camera.png0000644000175000017500000000163211037720672020344 0ustar fboudrafboudraPNG  IHDR ssBITUF pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATu7;wDQI $F!AD6hoiL0?QXYZ vfvgg~D5Lb;_ͭ彴ѨIȞ~?$ boE5RJOm.ZuB_(]*,Jq,М*?)%,$tͩ -2]֬y'^ԕXw%WteiE$-9v[.5mŖL eZQDߔҼ1K Pb֦,FQC)MZ0g΄g]aҖ R۲n6@פYwiU:J2m_@H&46R (ٖŖ`T/EZ#h M 1P* ISr%N([ݦrضQh/ȴ9ҳ3)%5ԵfhɊN5.fKdž\&F,H+A-M)Mʟ.A"VT(SK@#G=CM(j JC-ybKCJOFظLb;ءkZb aGIENDB`qtemu-2.0~alpha1/images/oxygen/qtemu.png0000644000175000017500000000354310753140477020255 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATXۋeGkUϭg:3 &3Ɉh!`@%ې !/ys >̟$8QD/%mNϭ9{WCsD,(޵[Z?ybu*:Dw=e(~掻;F:cf[7gN}U("R802]֙{6r?tX7'prJ JJT J AUA4smnܜS@?|sw.H]^%DlBox}5A2] ' $q A߷Jk+aM#BPYq]rB*Nc.T&9fB lݎ9S8Rqk V yw>1S!A *1 ‡7v>{j ;K?4Yp`fR4:A pAVA6evv(xTS F7MЦ#0%|rf`5Tdp0 fNPTj$YtNWf Y]`U =PTa8`.^>`T;y_‡ .ڲ((a1 v( h ͼt/gp|2Tj (Xf]ptk^=3t9 :SpDhi* 1,3B9B1sl%DD4B*}H2K.{)9W &Kۧ@VJ{E&YسBz(N9!8A?HU^!$b̟$8QD/%mNϭ9{WCsD,(޵[Z?ybu*:Dw=e(~掻;F:cf[7gN}U("R802]֙{6r?tX7'prJ JJT J AUA4smnܜS@?|sw.H]^%DlBox}5A2] ' $q A߷Jk+aM#BPYq]rB*Nc.T&9fB lݎ9S8Rqk V yw>1S!A *1 ‡7v>{j ;K?4Yp`fR4:A pAVA6evv(xTS F7MЦ#0%|rf`5Tdp0 fNPTj$YtNWf Y]`U =PTa8`.^>`T;y_‡ .ڲ((a1 v( h ͼt/gp|2Tj (Xf]ptk^=3t9 :SpDhi* 1,3B9B1sl%DD4B*}H2K.{)9W &Kۧ@VJ{E&YسBz(N9!8A?HU^!$bCEGIJLPRTJgIDAT8c`$Դ5.UV<@WATUՖWek1hWVVUUVUVG6eD'TDz ĐBWh TTA@ 8A7HAE@VdGVE'DAi2tA@'XAQ6#`V;XAPq cn`Fh*FNm@sd@ m@g9BXš#- yӆP@ j[BH($f`lx8;:999:8:yxz3/3s KHJH p20rp I)(hhik++JKr0<m3!IENDB`qtemu-2.0~alpha1/images/oxygen/resume.png0000644000175000017500000000321510757623347020424 0ustar fboudrafboudraPNG  IHDR szz pHYs^tIME 7'jbKGDIDATxWKo[U}NLj4WCˣ-.( ukU''T-BBBbBbQH+*JPBRÉ: 8l"gsqNע˻/l1Nװl iz}]zU'.]<{tS:˶J-~y隁~}3OYy̵kW+Lƅ\|$,~Z4ӟ/.\'i}r?heh\o~y1A"6b4l4P)pP*hx3y1F-UV a(ؓl'~0W@ס؋C fuK Fe yض#Sȉ}rje}&zA]|7RJ0f9[e(+仺aZe}|T7+;x=} f P>,m R PGayH/8ŀV1wcD +u&:sI2w >ق2-9!lVɤx-UbP$gm'NQ(U[uUOszUl<$}%cW+R@mr,ꆯe ԕ@E "6nlV۳h${lҢ:Qm`(z^kɎ+x @U$*?1(i"0Y;RƑdRِADb2-1:o#̀0OAE| bjI)%VJh 92r 8HZOIP´"I2,&4tМO={'Y԰-2"# Q:#*11 V\r6L"z_R|])ޯޝR^lx85VZLbU2n&lgNٝ0f˿o5n=|ڰ\ ͏?IENDB`qtemu-2.0~alpha1/images/oxygen/network.png0000644000175000017500000000426210757623347020620 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org</IDATxڭWil\W=ox8؎NREE*iZ)G@PQB@*A?4bGʿ"*A(il4ixLƞ}yo->RS 7~~|> ^G~I%hScKe\rԫK s-bƣ=1:j PL[P*V'槞{}s/a@=}qjٸ~=DVȊ K@ـ'/&Ƌv`G^=۳3ҀfO,`a9*9 \$ºhKHkW&fpsaA2{9`/2h9jcBHUCa L:ũyla E)!קlq*5>OgϿOe,,K5M;HSf3ԑ͔P#e2XiʲLGu*|q/z,'=B(=zTٲ`r5py*+7P*T'x׭!J͈ ,Bɵ 7×W𾭈7`!UÀ CнI@ uQ)/!"yyEl%x"7h6|.:3 ,!K<ۊ&&"̽qW#zo@yIL\'3l[%nb E%rz]Cq'gK ?*_o_<ދzvz1|rFE&,P S%$=ڑIENDB`qtemu-2.0~alpha1/images/qtemu.ico0000644000175000017500000000427610753140477016736 0ustar fboudrafboudra ( @y8eee<nÛĨX ޕRyyyΫݠm˃RLj+ՆD_ѷՒ`yֶΪqqqǶ޺b"q1ЋYSgڽkkkڍKFY?Š{OٚgsӯүӰΪd*@X׵ٸ]dv5ۑN͆V˨n.}<׉H\QӃBjعHh.f&ԳZ?TUוbwִH ҍ[ѭЬ=A PTNk,ݒPW¦ۜhٻߢnЬͩ_ s3w6޼άI UYY`!d%g(z:}=ҁ@ԅCֈFڎM[alf۾Ri)q/؋I_ַ>Wo/rrru4y8Ҁ?ٌIߖTe'ep!!pe!Ip@I888ވ2I#ah8#۲G!p#kb8Ҏ?ݲIp@bbbbhۥ Cp뺈Ip1OV!paݲk뺧Ipp%W@d[YFZ9lJ|+nKo:}!hC!!(^=""=< -;p!?akGT,33̵UTx*,mmf,*#kʮ*c,\\,cjtybbhLjU*vv*UjG@CQ4.U˚*R4z͈م޶Mzv榤c*ѓ!#Qc\6m,RhbۆbAC_ߦ]]]3m{DEpkkkhv\6 5~m,PS>>_fiXϜguGGA7f]/qXi )ɽkkhO w$s0r ǟwH& !>`ȄahB@hGن޸hhhhhhN!!!!!!!!pp`qtemu-2.0~alpha1/images/mac_classic.svg0000644000175000017500000010637611073762235020073 0ustar fboudrafboudra image/svg+xml Macintosh Classic 10/05/08 Javier Cárcamo Inkscape 0.46 mac macintosh apple computing El Macintosh Classic, el computador que cambió la informática casera para siempre. Macintosh Classic qtemu-2.0~alpha1/halobject.cpp0000644000175000017500000001447211203076444016271 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "halobject.h" #include /*************************************************************************** ** ** HalObject is supposed to be used ONCE by qtemu, and each VM talks to it. ** HalObject or another class should assure that only one machine uses each ** device, but this is not done yet. ** ***************************************************************************/ HalObject::HalObject() { hal = new QDBusInterface("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager", "org.freedesktop.Hal.Manager", QDBusConnection::systemBus(), this); connect(hal, SIGNAL(DeviceAdded(QString)), this, SLOT(halDeviceAdded(QString))); connect(hal, SIGNAL(DeviceRemoved(QString)), this, SLOT(halDeviceRemoved(QString))); QDBusReply deviceList = hal->call("GetAllDevices"); if (deviceList.isValid()) { for(int i = 0; i < deviceList.value().size(); i++) halDeviceAdded(deviceList.value().at(i)); } else { //hal is probably not installed or running } } void HalObject::halDeviceAdded(QString name) { QDBusInterface * tempInterface = new QDBusInterface("org.freedesktop.Hal", name, "org.freedesktop.Hal.Device", QDBusConnection::systemBus(), this); //generic device signal emit deviceAdded(name); #ifdef DEVELOPER qDebug(name.toAscii()); qDebug("capabilities:" + QVariant(tempInterface->call("GetPropertyStringList", "info.capabilities").arguments()).toStringList().join(", ").toAscii()); #endif //USB device that is not a hub added... if(tempInterface->call("GetProperty", "info.subsystem").arguments().at(0).toString() == "usb_device" && tempInterface->call("GetProperty", "usb_device.num_ports").arguments().at(0).toInt() == 0 ) { #ifdef DEVELOPER qDebug("usb added"); #endif UsbDevice device; device.address = tempInterface->call("GetProperty", "usb_device.bus_number").arguments().at(0).toString() + '.' + tempInterface->call("GetProperty", "usb_device.linux.device_number").arguments().at(0).toString(); device.id = name; device.product = tempInterface->call("GetProperty", "info.product").arguments().at(0).toString(); device.vendor = tempInterface->call("GetProperty", "info.vendor").arguments().at(0).toString(); usbDeviceHash.insert(name, device); emit usbAdded(name, device); } else if(tempInterface->call("QueryCapability", "storage.cdrom").arguments().at(0).toBool()) { #ifdef DEVELOPER qDebug("optical added"); qDebug("at device: " + tempInterface->call("GetProperty", "block.device").arguments().at(0).toByteArray()); #endif OptDevice device; device.device = tempInterface->call("GetProperty", "block.device").arguments().at(0).toString(); device.id = name; device.name = tempInterface->call("GetProperty", "storage.model").arguments().at(0).toString(); optDeviceHash.insert(name, device); emit opticalAdded(device.name, device.device); } else if(tempInterface->call("QueryCapability", "volume.disc").arguments().at(0).toBool()) { foreach(OptDevice testDevice, optDeviceHash) { if(testDevice.device == tempInterface->call("GetProperty", "block.device").arguments().at(0).toString()) { testDevice.volume = tempInterface->call("GetProperty", "volume.label").arguments().at(0).toString(); testDevice.volumeId = name; emit opticalAdded(testDevice.name + " (" + testDevice.volume + ')', testDevice.device); emit opticalRemoved(testDevice.name, testDevice.device); optDeviceHash.insert(testDevice.id, testDevice); break; } } } } void HalObject::halDeviceRemoved(QString name) { //generic device signal emit(deviceRemoved(name)); #ifdef DEVELOPER qDebug(name.toAscii()); #endif //USB device that is not a hub deleted... if(usbDeviceHash.contains(name)) { #ifdef DEVELOPER qDebug("usb removed"); #endif emit usbRemoved(name, usbDeviceHash.value(name)); usbDeviceHash.remove(name); } if(optDeviceHash.contains(name)) { #ifdef DEVELOPER qDebug("optical removed"); #endif emit opticalRemoved(optDeviceHash.value(name).name, optDeviceHash.value(name).device); optDeviceHash.remove(name); } foreach(OptDevice testDevice, optDeviceHash) { if(testDevice.volumeId == name) { emit opticalAdded(testDevice.name, testDevice.device); emit opticalRemoved(testDevice.name + " (" + testDevice.volume + ')', testDevice.device); testDevice.volume.clear(); testDevice.volumeId.clear(); optDeviceHash.insert(testDevice.id, testDevice); break; } } } const QList HalObject::usbList() { return usbDeviceHash.values(); } const QList HalObject::opticalList() { return optDeviceHash.values(); } qtemu-2.0~alpha1/helpwindow.h0000644000175000017500000000236711043510733016157 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef HELPWINDOW_H #define HELPWINDOW_H #include #include class HelpWindow : public QDialog { Q_OBJECT public: HelpWindow(QWidget *parent = 0); static QUrl getHelpLocation(); private slots: QUrl getHelpFile(); }; #endif qtemu-2.0~alpha1/qtemuenvironment.cpp0000644000175000017500000000723211201111746017743 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "halobject.h" #include "qtemuenvironment.h" #include #include #include #include QtEmuEnvironment::QtEmuEnvironment() { getVersion(); if(hal == 0) hal = new HalObject(); } QtEmuEnvironment::~ QtEmuEnvironment() { } void QtEmuEnvironment::getVersion() { QSettings settings("QtEmu", "QtEmu"); QString versionString; QProcess *findVersion = new QProcess(); #ifndef Q_OS_WIN32 const QString qemuCommand = settings.value("command", "qemu").toString(); #elif defined(Q_OS_WIN32) const QString qemuCommand = settings.value("command", QCoreApplication::applicationDirPath() + "/qemu/qemu.exe").toString(); QDir path(qemuCommand); path.cdUp(); setWorkingDirectory(path->path()); #endif findVersion->start(qemuCommand, QStringList("--help")); findVersion->waitForFinished(); if( findVersion->error() != QProcess::UnknownError ) { qemuVersion[0] = -1; qemuVersion[1] = -1; qemuVersion[2] = -1; kvmVersion = -1; return; } QString infoString = findVersion->readLine(); if( !infoString.contains("QEMU") ) { qemuVersion[0] = -1; qemuVersion[1] = -1; qemuVersion[2] = -1; kvmVersion = -1; return; } QStringList infoStringList = infoString.split(' '); versionString = infoStringList.at(4); QStringList versionStringList = versionString.split('.'); qemuVersion[0] = versionStringList.at(0).toInt(); qemuVersion[1] = versionStringList.at(1).toInt(); qemuVersion[2] = versionStringList.at(2).toInt(); versionString = infoStringList.at(5); versionString.remove(QRegExp("[(),]")); if(versionString.contains(QRegExp("kvm"))) { kvmVersion = versionString.remove(QRegExp("kvm-")).toInt(); } else kvmVersion = 0; delete findVersion; #ifdef Q_OS_WIN32 delete path; #endif versionChecked = true; #ifdef DEVELOPER qDebug(("kvm: " + QString::number(kvmVersion) + " qemu: " + QString::number(qemuVersion[0]) + '.' + QString::number(qemuVersion[1]) + '.' + QString::number(qemuVersion[2])).toAscii()); #endif } int * QtEmuEnvironment::getQemuVersion() { if(!versionChecked) getVersion(); return qemuVersion; } int QtEmuEnvironment::getKvmVersion() { if(!versionChecked) getVersion(); return kvmVersion; } HalObject* QtEmuEnvironment::getHal() { if(hal == 0) hal = new HalObject(); return hal; } HalObject* QtEmuEnvironment::hal = 0; int QtEmuEnvironment::qemuVersion[] = {-1, -1, -1}; int QtEmuEnvironment::kvmVersion = -1; bool QtEmuEnvironment::versionChecked = false; qtemu-2.0~alpha1/networkpage.h0000644000175000017500000000447711203100046016317 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef NETWORKPAGE_H #define NETWORKPAGE_H #include #include #include "ui_networkpage.h" class MachineConfigObject; class GuestInterfaceModel; class HostInterfaceModel; /** @author Ben Klopfenstein */ /**************************************************************************** ** C++ Interface: networkpage ** ** Description: ** ****************************************************************************/ class NetworkPage : public QWidget , public Ui::NetworkPage { Q_OBJECT public: explicit NetworkPage(MachineConfigObject *config, QWidget *parent = 0); ~NetworkPage(); private: void makeConnections(); void setupPage(); void setupModels(); void registerObjects(); MachineConfigObject *config; GuestInterfaceModel *guestModel; HostInterfaceModel *hostModel; bool changingSelection; //dealing with model/view private slots: void changeNetPage(bool state); void delGuestInterface(); void addGuestInterface(); void delHostInterface(); void addHostInterface(); void guestSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); void hostSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); void loadHostEthIfs(); }; //class hostInterfaceModel; #endif qtemu-2.0~alpha1/halobject.h0000644000175000017500000000535111165342562015736 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef HALOBJECT_H #define HALOBJECT_H #include #include #include #include #include struct UsbDevice { QString id; QString vendor; QString product; QString address; }; struct OptDevice { QString device; QString id; QString name; QString volume; QString volumeId; }; class HalObject : public QObject { Q_OBJECT public: HalObject(); const QStringList deviceList(); const QList usbList(); const QStringList ifList(); const QList opticalList(); private: QStringList getDevices(); QDBusInterface *hal; QHash usbDeviceHash; QHash optDeviceHash; signals: //generic catchall device notification void deviceAdded(const QString devString); void deviceRemoved(const QString devString); //ethernet notifications void ifAdded(const QString ifName, const QString macAddr); void ifRemoved(const QString ifName, const QString macAddr); //might need if activated/deactivated notifications //optical drive notifications void opticalAdded(const QString devName, const QString devPath); void opticalRemoved(const QString devName, const QString devPath); //floppy drive notifications void floppyAdded(const QString devName, const QString devPath); void floppyRemoved(const QString devName, const QString devPath); //usb notifications void usbAdded(const QString devString, const UsbDevice device); void usbRemoved(const QString devString, const UsbDevice device); private slots: void halDeviceAdded(const QString name); void halDeviceRemoved(const QString name); }; #endif // HALOBJECT_H qtemu-2.0~alpha1/ui/0000755000175000017500000000000011217515421014235 5ustar fboudrafboudraqtemu-2.0~alpha1/ui/networkpage.ui0000644000175000017500000012116611200720440017120 0ustar fboudrafboudra NetworkPage 0 0 608 518 Form 0 0 &Networking 4 Enable networking Enable network true Qt::Horizontal QFrame::NoFrame QFrame::Raised 0 0 true Enter the advanced network settings dialog Advanced Settings true Qt::Horizontal 40 20 true QFrame::StyledPanel QFrame::Raised 0 true 0 0 User Mode Bridged Interface Routed Interface Select Network Interface Type: Assign MAC address automatically true false Use accelerated network drivers virtio rtl8139 <span style="color:#aa0000;">NOTICE: This interface is not yet complete! Networking modes do not modify your host operating system's network setup! This means bridging requires additional steps.</span> true Qt::Vertical 20 40 0 Guest Interfaces Qt::AlignCenter 0 0 :/images/oxygen/add.png:/images/oxygen/add.png :/images/oxygen/remove.png:/images/oxygen/remove.png Qt::Horizontal 40 20 100 0 Host Interfaces Qt::AlignCenter 0 0 :/images/oxygen/add.png:/images/oxygen/add.png false 0 0 :/images/oxygen/remove.png:/images/oxygen/remove.png 0 0 User Mode Bridged Interface Routed Interface Shared Virtual Lan Custom TAP QFrame::StyledPanel QFrame::Sunken 6 QFormLayout::AllNonFixedFieldsGrow Assign Hostname via DHCP Set up TFTP Server 4 0 0 32 16777215 :/images/oxygen/open.png:/images/oxygen/open.png 16 16 Broadcast BOOTP File 4 0 0 32 16777215 :/images/oxygen/open.png:/images/oxygen/open.png 16 16 false Port Redirection... QFormLayout::AllNonFixedFieldsGrow Host Interface Name Bridge Interface Name Bridged Hardware Interface false false Use Spanning Tree Hardware interface to route to Host Interface Name Shared Virtual Lan Transport false false 4 0 0 UDP Multicast (Multiple Guests) udp TCP Unicast (Two Guests) tcp true Select Bus Address Select Bus Port Qt::Vertical 20 40 QFormLayout::AllNonFixedFieldsGrow TAP Interface Name Interface Up Script Interface Down Script 4 0 0 32 16777215 :/images/oxygen/open.png:/images/oxygen/open.png 16 16 4 0 0 32 16777215 :/images/oxygen/open.png:/images/oxygen/open.png 16 16 Qt::Vertical 20 40 QFormLayout::AllNonFixedFieldsGrow Emulated Network Card Model i82551 i82557b i82559er ne2k_pci ne2k_isa pcnet rtl8139 e1000 virtio Assign to Host Interface Interface MAC Address Generate new MAC Set a new, random MAC address upon each boot Qt::Vertical 20 40 Custom networking options: networkEdit Enter cutom networking options Custom networking options disable all automatic options hostTypeBox currentIndexChanged(int) propertyStack setCurrentIndex(int) 535 165 115 378 randomCheck toggled(bool) macEdit setDisabled(bool) 135 429 317 364 randomCheck toggled(bool) macButton setDisabled(bool) 135 429 55 398 checkBox toggled(bool) easyMacEdit setDisabled(bool) 131 155 362 158 qtemu-2.0~alpha1/ui/controlpanel.ui0000644000175000017500000004763511215303626017313 0ustar fboudrafboudra ControlPanel 0 0 270 260 0 0 16777215 260 Form 0 0 QFrame::StyledPanel QFrame::Raised 30 30 Screen Controls :/images/oxygen/new.png:/images/oxygen/new.png true true true 30 0 30 30 Media Controls :/images/oxygen/cdrom.png:/images/oxygen/cdrom.png true false true 30 30 USB Controls :/images/oxygen/usb.png:/images/oxygen/usb.png true true Qt::Vertical 20 40 50 0 QFrame::StyledPanel QFrame::Raised 0 Reload Optical Drive Enter a CD image name or /dev/cdrom to use the host cd drive. true 0 30 16777215 select a new CD image :/images/oxygen/cdrom.png:/images/oxygen/cdrom.png Eject the CD ROM from the guest and re-insert the new one specified above. Reload :/images/oxygen/reload.png:/images/oxygen/reload.png Qt::Horizontal 40 20 Qt::Horizontal Reload Floppy Drive enter a floppy image or /dev/floppy to use the host floppy drive. true -1 /dev/floppy 30 16777215 select a new floppy disk image :/images/oxygen/floppy.png:/images/oxygen/floppy.png Eject the old floppy from the guest and re-insert the new one specified above. Reload :/images/oxygen/reload.png:/images/oxygen/reload.png Qt::Horizontal 40 20 Qt::Vertical 20 40 QFrame::NoFrame QFrame::Plain 0 0 USB Devices Qt::AlignCenter 200 10 0 1 200 175 Add this device to the Virtual Machine true QFrame::NoFrame QFrame::Plain 0 Qt::ScrollBarAlwaysOff QAbstractItemView::NoEditTriggers false false QAbstractItemView::NoSelection QListView::ListMode true true false Qt::Horizontal Automatically add newly plugged in devices to this virtual machine Auto add new devices QLayout::SetDefaultConstraint false 0 0 Toggle full screen mode. Press CTRL+ALT+ENTER to return to windowed mode. &Fullscreen :/images/oxygen/fullscreen.png:/images/oxygen/fullscreen.png 32 32 Ctrl+Alt+Return true Qt::ToolButtonTextUnderIcon false 0 0 Save a screen shot to a file Screen Shot :/images/oxygen/camera.png:/images/oxygen/camera.png 32 32 Qt::ToolButtonTextUnderIcon 0 0 Toggle scaling the virtual machine view to fit the window Do Scaling :/images/oxygen/scale.png:/images/oxygen/scale.png 32 32 true Qt::ToolButtonTextUnderIcon 0 0 Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Smooth Mouse :/images/oxygen/mouse.png:/images/oxygen/mouse.png 32 32 true Qt::ToolButtonTextUnderIcon Qt::Vertical 20 40 qtemu-2.0~alpha1/ui/settingstab.ui0000644000175000017500000020244011214661046017127 0ustar fboudrafboudra SettingsTab Qt::NonModal 0 0 705 574 652 0 Settings QFrame::NoFrame QFrame::Raised 0 10 192 0 Qt::ActionsContextMenu QAbstractItemView::NoEditTriggers false true 48 48 false QListView::Adjust 4 false true true -1 Cpu / Memory :/images/oxygen/memory.png:/images/oxygen/memory.png Hard Disk :/images/oxygen/hdd.png:/images/oxygen/hdd.png Removable Media :/images/oxygen/cdrom.png:/images/oxygen/cdrom.png USB Support :/images/oxygen/usb.png:/images/oxygen/usb.png Networking :/images/oxygen/network.png:/images/oxygen/network.png Sound :/images/oxygen/sound.png:/images/oxygen/sound.png Display :/images/oxygen/new.png:/images/oxygen/new.png Other Options :/images/oxygen/other.png:/images/oxygen/other.png Display an online help dialog &Help true 0 0 0 0 false QFrame::NoFrame 0 true true 0 0 497 432 0 1 cpu-memory.html Cpu / &Memory Number of virtual &CPUs: cpuSpinBox QFormLayout::AllNonFixedFieldsGrow Change the number of virtual CPUs your machine has Change the number of virtual CPUs your machine has Virtual CPU(s) cpuSpinBox Qt::Horizontal &Memory for this virtual machine: memorySpinBox <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> 1024 1 128 Qt::Horizontal QSlider::NoTicks 128 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> 0 4096 1 128 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the amount of virtual memory your machine has.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;">WARNING: <span style=" font-weight:400;">Do not exceed your physical memory limitations - both your virtual and your physical machines must have enough memory to run!</span></p></body></html> Mb Qt::Horizontal 40 20 Qt::Horizontal Hardware virtualization will allow your machine to run at near-hardware speeds. This uses either KVM or KQEMU if available. Enable Hardware &Virtualization ACPI support allows QtEmu to tell the machine to shut down gracefully, among other things. It is reccommended. Enable ACPI Qt::Horizontal Allow the virtual machine to use the system clock for improved accuracy: true This uses the host Real Time Clock for timing events, and should speed up accelerated drivers performance. Use the &System Clock Qt::Horizontal QFormLayout::AllNonFixedFieldsGrow true Change the guest operating system QtEmu tries to interoperate with. This option does not yet have any effect. Linux Windows 98 Windows 2000 Windows XP Windows Vista ReactOS BSD Other true Installed Operating System osCheck Qt::Vertical 20 40 harddisk.html &Hard Disk Select a valid hard disk image for QtEmu. hdImage The Hard Disk Image QtEmu tries to boot from. :/images/oxygen/open.png <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">do not</span> change this if you do not know what you are doing! See the help for more details.</p></body></html> true Use Accelerated Disk Drivers. These are not supported for Windows guests. Accelerated Hard Disk Drivers false QFrame::NoFrame QFrame::Raised Qt::Horizontal You may upgrade your image to the qcow2 format to recieve additional features like suspend/resume. Upgrade Image Upgrade your image to enable advanced features true Qt::Horizontal Image Information Qt::AlignCenter QFormLayout::AllNonFixedFieldsGrow Image Format: Img Format Virtual Image Size: Virt Size On Disk Size: Phy Size Qt::Vertical 20 40 removablemedia.html Removable Media CD/DVD Image or device: 0 0 Enter a CD image name or /dev/cdrom to use the host cd drive. true secect a new CD image :/images/oxygen/cdrom.png Qt::Horizontal 40 20 Clear :/images/oxygen/close.png:/images/oxygen/close.png Try to boot from the CD first Boot from CD/DVD Qt::Horizontal 40 20 Qt::Horizontal Floppy disk Image or device: 0 0 enter a floppy image or /dev/floppy to use the host floppy drive. true -1 /dev/floppy secect a new floppy disk image :/images/oxygen/floppy.png Qt::Horizontal 40 20 Clear :/images/oxygen/close.png:/images/oxygen/close.png Try to boot from the floppy first Boot from floppy disk Qt::Horizontal 40 20 Qt::Vertical 20 40 usb.html networking.html sound.html &Sound Qt::Horizontal Enable a virtual sound card Enable sound QFrame::StyledPanel QFrame::Raised Select your Host Sound System. Not all sound systems may be compiled in to your version of qemu/kvm. You may enter your own sound system here as well. true ALSA OSS ESD PulseAudio Choose sound system to use for sound emulation soundCombo Qt::Vertical 20 40 display.html &Display Allow the guest virtual machine to show in an embedded window within QtEmu Embedded Display true true Select the Transport VNC uses false VNC Transport false false TCP true tcp true QFrame::StyledPanel QFrame::Raised Port: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter portBox 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 59635 Host: hostEdit Do not change this unless you have a good reason true File Socket unix 0 0 Set the method used to connect the virtual machine to the embedded display. TCP is the only option available at the moment. false true false Allow remote connection instead of embedding true Toggle scaling the virtual machine view to fit the window Scale display to fit window true Qt::Horizontal Allow large and widescreen video modes. this uses a vesa compliant video card, rather than an emulated cirrus logic card. High Resolution and Widescreen Video Modes (Standard VGA) Qt::Vertical 20 40 otheroptions.html Other Options Additional QEMU Options Enter your own options Use Additional Options: false false Qt::Horizontal You may enter scripts that run before of after the virtual machine on a per-machine basis. these run in addition to the QtEmu-wide scripts. Pre / Post Scripts These commands will be executed before or after QEMU Enable or disable this script Execute Before: Enable or disable this script Execute After: false false false false false virtualdrives.html Virtual Drives false QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable 0 0 true 0 0 477 88 about:blank QWebView QWidget
QtWebKit/QWebView
memorySlider memorySpinBox memorySlider valueChanged(int) memorySpinBox setValue(int) 402 199 472 202 memorySpinBox valueChanged(int) memorySlider setValue(int) 472 202 402 199 embedCheck toggled(bool) embedGroup setEnabled(bool) 502 68 502 113 tcpRadio toggled(bool) tcpFrame setEnabled(bool) 395 136 395 208 embedCheck toggled(bool) scaleCheck setEnabled(bool) 502 68 502 315 additionalCheck toggled(bool) additionalEdit setEnabled(bool) 502 103 502 138 beforeCheck toggled(bool) beforeEdit setEnabled(bool) 449 242 448 281 afterCheck toggled(bool) afterEdit setEnabled(bool) 676 242 676 298 pushButton clicked() cdImage clearEditText() 313 134 416 98 pushButton_2 clicked() floppyImage clearEditText() 313 232 416 198 helpButton toggled(bool) helpArea setVisible(bool) 143 534 210 476 helpArea visibilityChanged(bool) helpButton setChecked(bool) 212 514 169 543 settingsList currentRowChanged(int) settingsStack setCurrentIndex(int) 136 223 451 223 soundCheck toggled(bool) frame_2 setEnabled(bool) 286 64 267 82
qtemu-2.0~alpha1/configwindow.h0000644000175000017500000000326211001747214016467 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef CONFIGWINDOW_H #define CONFIGWINDOW_H #include class QLineEdit; class QComboBox; class QTextEdit; class QCheckBox; class ConfigWindow : public QDialog { Q_OBJECT public: ConfigWindow(const QString &myMachinesPath, int tabPosition, QWidget *parent = 0); QLineEdit *myMachinePathLineEdit; QComboBox *comboTabPosition; QComboBox *languagePosition; private: QString myMachinesPath; QTextEdit *beforeStartExeTextEdit; QTextEdit *afterExitExeTextEdit; QLineEdit *commandLineEdit; QComboBox *comboIconTheme; private slots: void setNewPath(); void languageChange(int index); void loadSettings(); void writeSettings(); }; #endif qtemu-2.0~alpha1/helpwindow.cpp0000644000175000017500000000700011043510733016477 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "helpwindow.h" #include #include #include #include #include #include #include #include #include HelpWindow::HelpWindow(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("QtEmu Help")); resize(850, 600); setSizeGripEnabled(true); QTextBrowser *textBrowser = new QTextBrowser(this); QUrl url = getHelpFile(); if (!url.isEmpty()) textBrowser->setSource(url); else //there is no help available QTimer::singleShot(0, this, SLOT(close())); textBrowser->scroll(0, 0); QPushButton *closeButton = new QPushButton(tr("Close")); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); QHBoxLayout *buttonsLayout = new QHBoxLayout; buttonsLayout->addStretch(1); buttonsLayout->addWidget(closeButton); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(textBrowser); mainLayout->addLayout(buttonsLayout); setLayout(mainLayout); } QUrl HelpWindow::getHelpFile() { QUrl url = QUrl(getHelpLocation().toString() + "main.htm"); if(url.isEmpty()) QMessageBox::critical(this, tr("Help not found"), tr("Help not found. It is probably not installed.")); return url; } QUrl HelpWindow::getHelpLocation() { QSettings settings("QtEmu", "QtEmu"); QString locale = settings.value("language", QString(QLocale::system().name())).toString(); if (locale != "en") { //check for case when qtemu executable is in same dir (linux / win) QUrl testUrl = QUrl(QCoreApplication::applicationDirPath() + "/help/" + locale); if (QFile::exists(testUrl.toString())) return testUrl; //check for case when qtemu executable is in bin/ (installed on linux) testUrl = QUrl(QCoreApplication::applicationDirPath() + "/../share/qtemu/help/" + locale); if (QFile::exists(testUrl.toString())) return testUrl; } //check for case when qtemu executable is in same dir (linux / win) QUrl testUrl = QUrl(QCoreApplication::applicationDirPath() + "/help/"); if (QFile::exists(testUrl.toString())) return testUrl; //check for case when qtemu executable is in bin/ (installed on linux) testUrl = QUrl(QCoreApplication::applicationDirPath() + "/../share/qtemu/help/"); if (QFile::exists(testUrl.toString())) return testUrl; //qDebug(testUrl.toString().toLocal8Bit().constData()); return QUrl(); } qtemu-2.0~alpha1/mainwindow.h0000644000175000017500000000444311163767267016173 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include class QAction; class QMenu; class QTabWidget; class QPushButton; class QWidget; class QLabel; class QStringList; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); protected: void closeEvent(QCloseEvent *event); private slots: void createNew(); void open(); void configure(); void start(); void pause(); void stop(); void restart(); void about(); void help(); void changeMachineState(int value = -1); private: void createActions(); void createMenus(); void createToolBars(); void createStatusBar(); void createMainTab(); void readSettings(); void writeSettings(); void loadFile(const QString &fileName); QTabWidget *tabWidget; QMenu *fileMenu; QMenu *powerMenu; QMenu *helpMenu; QToolBar *fileToolBar; QToolBar *powerToolBar; QAction *newAct; QAction *openAct; QAction *confAct; QAction *exitAct; QAction *startAct; QAction *stopAct; QAction *restartAct; QAction *pauseAct; QAction *helpAct; QAction *aboutAct; QWidget *mainTabWidget; QLabel *mainTabLabel; QPushButton *newButton; QPushButton *openButton; QString myMachinesPath; QString iconTheme; }; #endif qtemu-2.0~alpha1/harddiskmanager.cpp0000644000175000017500000001374211202622546017460 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "harddiskmanager.h" #include "machineprocess.h" #include "qtemuenvironment.h" #include #include #include HardDiskManager::HardDiskManager(MachineProcess *parent) : QObject(parent) , parent(parent) { } HardDiskManager::~HardDiskManager() { } void HardDiskManager::upgradeImage() { emit processingImage(true); upgradeImageName = currentImage.path() + '/' + currentImage.completeBaseName() + ".qcow"; #ifndef Q_OS_WIN32 QString program = "qemu-img"; #elif defined(Q_OS_WIN32) QString program = "qemu/qemu-img.exe"; #endif QStringList arguments; currentProcess = new QProcess(this); connect(currentProcess, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(upgradeComplete(int))); arguments << "convert" << currentImage.filePath() << "-O" << "qcow2" << upgradeImageName; currentProcess->start(program, arguments); updateProgressTimer = new QTimer(this); connect(updateProgressTimer, SIGNAL(timeout()), this, SLOT(updateUpgradeProgress())); updateProgressTimer->start(1000); } void HardDiskManager::upgradeComplete(int status) { emit processingImage(false); if(status == 0) { setProperty("hdd", QVariant(upgradeImageName)); } else { emit error(tr("Upgrading your hard disk image failed! Do you have enough disk space?
You may want to try upgrading manually using the program qemu-img.")); } } void HardDiskManager::updateUpgradeProgress() { // qint64 size = QFileInfo(upgradeImageName).size(); //TODO: update a progress bar } void HardDiskManager::testImage() { if(!currentImage.exists()||!currentImage.isFile()) { emit imageFormat("none"); emit imageUpgradable(false); emit supportsSuspending(false); emit supportsResuming(false); emit imageSize(0); emit phySize(0); return; } #ifndef Q_OS_WIN32 QString program = "qemu-img"; #elif defined(Q_OS_WIN32) QString program = "qemu/qemu-img.exe"; #endif QStringList arguments; QProcess *testProcess = new QProcess(this); arguments << "info" << currentImage.filePath(); testProcess->start(program, arguments); testProcess->waitForFinished(); #ifndef Q_OS_WIN32 if(testProcess->error() != QProcess::UnknownError) { //we may be on a system that uses "kvm-img" instead program = "kvm-img"; testProcess->start(program, arguments); testProcess->waitForFinished(); } #endif //make sure we didn't error out if(testProcess->error() != QProcess::UnknownError) { emit imageFormat("unknown"); emit imageUpgradable(false); emit supportsSuspending(false); emit supportsResuming(false); emit imageSize(0); emit phySize(0); #ifndef Q_OS_WIN32 emit error(tr("QtEmu could not run the kvm-img or qemu-img programs in your path. Disk image statistics will be unavailable.")); #elif defined(Q_OS_WIN32) emit error(tr("QtEmu could not run the qemu/qemu-img.exe program. Disk image statistics will be unavailable.")); #endif return; } //time to parse the output and get all the info available //splits are on colons. QStringList output = QString(testProcess->readAll()).split('\n'); currentFormat = output.at(1).split(':').at(1).simplified(); emit imageFormat(currentFormat); if(currentFormat!="qcow2") { emit imageUpgradable(true); suspendable = false; } else { emit imageUpgradable(false); suspendable = true; } if(property("snapshot").toBool()) suspendable = false; emit supportsSuspending(suspendable); QString virtSize = output.at(2).section('(', 1); virtSize.chop(6); virtSize.simplified(); virtualSize = virtSize.toLongLong(); emit imageSize(virtualSize); emit phySize(currentImage.size()); resumable = false; if(output.size()>6) { QString currentLine; QStringList list; for(int i = 7; itype() == QEvent::DynamicPropertyChange) { //any property changes dealt with in here QDynamicPropertyChangeEvent *propEvent = static_cast(event); if((propEvent->propertyName() == "hdd" || propEvent->propertyName() == "snapshot") && parent->state()==MachineProcess::NotRunning) { currentImage = QFileInfo(property("hdd").toString()); testImage(); } return false; } return QObject::event(event); } bool HardDiskManager::isSuspendable() const { return suspendable; } qtemu-2.0~alpha1/machineview.h0000644000175000017500000000535011203100046016257 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINEVIEW_H #define MACHINEVIEW_H #include "vnc/vncview.h" #include "machinesplash.h" #include "floatingtoolbar.h" #include "machineconfigobject.h" #include "machinescrollarea.h" #include #include #include #include #include #include #include #include #include #include #include /** @author Ben Klopfenstein */ class MachineView : public QWidget { Q_OBJECT public: explicit MachineView(MachineConfigObject *config, QWidget *parent = 0); ~MachineView(); void showSplash(bool show); void captureAllKeys(bool enabled); void sendKey(QKeyEvent *event); bool event(QEvent * event); public slots: void newViewSize(); void fullscreen(bool enable); void initView(); private slots: void showToolBar(); signals: void fullscreenToggled(bool enabled); private: VncView *view; MachineSplash *splash; FloatingToolBar *toolBar; MachineConfigObject *config; QWidget *fullscreenWindow; MachineScrollArea *fullscreenScrollArea; MachineScrollArea *embeddedScrollArea; bool fullscreenEnabled; int port; //actions... will later be moved to its own file QAction *scaleAction; }; class MinimizePixel : public QWidget { Q_OBJECT public: MinimizePixel(QWidget *parent) : QWidget(parent) { setFixedSize(1, 1); move(QApplication::desktop()->screenGeometry().width() - 1, 0); } signals: void rightClicked(); protected: void mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::RightButton) emit rightClicked(); } }; #endif qtemu-2.0~alpha1/overview.ui0000644000175000017500000000526011214661046016032 0ustar fboudrafboudra Form 0 0 421 307 Form QFrame::StyledPanel QFrame::Raised TextLabel Qt::AlignCenter 0 0 QFrame::StyledPanel QFrame::Sunken 0 0 Machine Name Start false Pause Resume qtemu-2.0~alpha1/interfacemodel.h0000644000175000017500000000622211203100046016740 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ /**************************************************************************** ** ** C++ Interface: interfacemodel ** ** Description: provides a model for the model/view framework to describe the ** various options for a qemu network interface, both guest and host models ** are provided. ** ****************************************************************************/ #ifndef INTERFACEMODEL_H #define INTERFACEMODEL_H #include #include class MachineConfigObject; /** @author Ben Klopfenstein */ class InterfaceModel : public QAbstractTableModel { Q_OBJECT public: InterfaceModel(MachineConfigObject *config, QString nodeType, QObject *parent = 0); int rowCount(const QModelIndex & parent = QModelIndex() ) const; int columnCount(const QModelIndex & parent = QModelIndex() ) const; QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; Qt::ItemFlags flags ( const QModelIndex &index ) const; bool setData( const QModelIndex & index, const QVariant& value, int role ); QString rowName(int row) const; QString colName(int col) const; protected: MachineConfigObject *config; QString nodeType; //first string in the list is the key QStringList columns; protected slots: void optionChanged(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value); }; class GuestInterfaceModel : public InterfaceModel { Q_OBJECT public: explicit GuestInterfaceModel(MachineConfigObject *config, QObject *parent = 0); bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex()); bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); }; class HostInterfaceModel : public InterfaceModel { Q_OBJECT public: explicit HostInterfaceModel(MachineConfigObject *config, QObject *parent = 0); bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex()); bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); }; #endif qtemu-2.0~alpha1/qtemu.rc0000644000175000017500000000006110753140477015307 0ustar fboudrafboudraIDI_ICON1 ICON DISCARDABLE "images/qtemu.ico" qtemu-2.0~alpha1/controlpanel.h0000644000175000017500000000416211165342562016502 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ /**************************************************************************** ** C++ Interface: controlpanel ** ** Description: ** ****************************************************************************/ #ifndef CONTROLPANEL_H #define CONTROLPANEL_H #include "ui_controlpanel.h" #include class MachineTab; class MachineConfigObject; class MachineProcess; class SettingsTab; /** @author Ben Klopfenstein */ class ControlPanel : public QWidget , public Ui::ControlPanel { Q_OBJECT public: explicit ControlPanel(MachineTab *parent); ~ControlPanel(); private: void makeConnections(); void registerObjects(); MachineTab *parent; MachineConfigObject *config; private slots: void mediaActivate(); void displayActivate(); void usbActivate(); void saveScreenshot(); void running(); void stopped(); void optionChanged(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value); void optAdded(const QString devName, const QString devPath); void optRemoved(const QString devName, const QString devPath); }; #endif qtemu-2.0~alpha1/wizard.h0000644000175000017500000000457410753140477015314 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** Some parts of this file have been taken from ** examples/dialogs/complexwizard of Qt 4.1 which is ** Copyright (C) 2004-2006 Trolltech ASA. All rights reserved. ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef WIZARD_H #define WIZARD_H #include #include class QHBoxLayout; class QPushButton; class QVBoxLayout; class QFrame; class QLabel; class WizardPage; class Wizard : public QDialog { Q_OBJECT public: Wizard(QWidget *parent = 0); QList historyPages() const { return history; } public slots: void setTitle(const QString &title); signals: void finished(); protected: void setFirstPage(WizardPage *page); private slots: void backButtonClicked(); void nextButtonClicked(); void completeStateChanged(); private: void switchPage(WizardPage *oldPage); QList history; QPushButton *cancelButton; QPushButton *backButton; QPushButton *nextButton; QHBoxLayout *buttonLayout; QVBoxLayout *mainLayout; QFrame *headerFrame; QLabel *headerLabel; QLabel *headerIcon; }; class WizardPage : public QWidget { Q_OBJECT public: WizardPage(QWidget *parent = 0); virtual void updateTitle(); virtual void resetPage(); virtual WizardPage *nextPage(); virtual bool isLastPage(); virtual bool isComplete(); signals: void completeStateChanged(); private slots: virtual void privateSlot(); }; #endif qtemu-2.0~alpha1/machineprocess.cpp0000644000175000017500000005770611214661046017350 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machineprocess.h" #include "netconfig.h" #include "usbconfig.h" #include "config.h" #include #include #include #include #include #include MachineProcess::MachineProcess(MachineTab *parent) : QObject(parent) , paused(false) , doResume(false) // , hdManager(new HardDiskManager(this)) { hdManager = new HardDiskManager(this); console = new QLocalSocket(this); process = new QProcess(this); myState = MachineProcess::NotRunning; getVersion(); parent->machineConfigObject->registerObject(this); parent->machineConfigObject->registerObject(hdManager); netConfig = new NetConfig(this, parent->machineConfigObject); usbConfig = new UsbConfig(this, parent->machineConfigObject); connect(console, SIGNAL(readyRead()), this, SLOT(readProcess())); connect(console, SIGNAL(disconnected()), SLOT(afterExitExecute())); connect(process, SIGNAL(readyReadStandardError()), this, SLOT(readProcessErrors())); connect(process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(connectToProcess())); connect(this, SIGNAL(stdout(const QString&)), this, SLOT(writeDebugInfo(const QString&))); connect(this, SIGNAL(stdin(const QString&)), this, SLOT(writeDebugInfo(const QString&))); connect(this, SIGNAL(stateChanged(MachineProcess::ProcessState)), this, SLOT(saveState(MachineProcess::ProcessState))); connect(this, SIGNAL(finished()), parent, SLOT(finished())); connect(this, SIGNAL(started()), parent, SLOT(started())); connect(this, SIGNAL(suspending(QString)), parent, SLOT(suspending())); connect(this, SIGNAL(suspended(QString)), parent, SLOT(suspended())); connect(this, SIGNAL(resuming(QString)), parent, SLOT(resuming())); connect(this, SIGNAL(resumed(QString)), parent, SLOT(resumed())); connect(this, SIGNAL(error(QString)), parent, SLOT(error(QString))); connect(this, SIGNAL(booting()), parent, SLOT(booting())); } HardDiskManager * MachineProcess::getHdManager() { return hdManager; } UsbConfig* MachineProcess::getUsbConfig() { return usbConfig; } QProcess* MachineProcess::getProcess() { return process; } QStringList MachineProcess::buildParamList() { getVersion(); //if(versionMajor == -1)//executable was not found QStringList arguments; //add any additional options if (property("useAdditionalOptions").toBool() && !property("additionalOptions").toString().isEmpty()) arguments << property("additionalOptions").toString().split(' ', QString::SkipEmptyParts); //enable built in vnc viewer if (property("embeddedDisplay").toBool()) { if(property("vncTransport").toString() == "tcp") arguments << "-vnc" << property("vncHost").toString() + ':' + property("vncPort").toString(); else { QString socketLocation = property("hdd").toString(); socketLocation.replace(QRegExp("[.][^.]+$"), ".vnc"); arguments << "-vnc" << "unix:" + socketLocation; } } //support for high res video modes if(property("hiRes").toBool()) { if(kvmVersion >= 78 || versionMinor >= 10) arguments << "-vga" << "std"; //TODO: other options are cirrus and vmware.. maybe we can make use of this. else arguments << "-std-vga"; } //ACPI if(!property("acpi").toBool()) arguments << "-no-acpi"; //networking support if (property("network").toBool()) { if (!property("networkCustomOptions").toString().isEmpty()) arguments << property("networkCustomOptions").toString().split(' ', QString::SkipEmptyParts); else { arguments << netConfig->getOptionString(); } } else arguments << "-net" << "none"; /*using the drive syntax, multiple drives can be added to a VM. drives can be specified as disconnected, allowing media to be inserted after bootup. the initialization can take the form of a loop, and the device settings can be put in an array of drive objects. this also would allow both IDE and SCSI drives to be specified, making more than 4 disks possible. in order to take advantage of this, the interface will need a custom drive widget that can be inserted multiple times easily. to save these complex settings, settings can be saved under with a specific in the .qte file. this does not work correctly with qemu < 0.9.1 */ if ( (versionMajor >= 0 && versionMinor >= 9 && versionBugfix >= 1) || (kvmVersion>=60) ) { //TODO: modify to support multiple floppies and cdroms(index=0 and index=1) if (!property("cdrom").toString().isEmpty()) { QString cdRomPathString = property("cdrom").toString().replace(QRegExp(","),",,"); arguments << "-drive" << "file=" + cdRomPathString + ",if=ide,bus=1,unit=0,media=cdrom"; //TODO:make the drive location configurable if (property("bootFromCd").toBool()) arguments << "-boot" << "d"; } else//allows the cdrom to exist if not specified { arguments << "-drive" << "if=ide,bus=1,unit=0,media=cdrom"; //TODO:make the drive location configurable } if (!property("floppy").toString().isEmpty()) { arguments << "-drive" << "file=" + property("floppy").toString() + ",index=0,if=floppy"; if (property("bootFromFloppy").toBool()) arguments << "-boot" << "a"; } } else //use old (<0.9.1) drive syntax, cdrom must exist on startup to be inserted { if (!property("cdrom").toString().isEmpty()) { arguments << "-cdrom" << property("cdrom").toString(); if (property("bootFromCd").toBool()) arguments << "-boot" << "d"; } if (!property("floppy").toString().isEmpty()) { arguments << "-fda" << property("floppy").toString(); if (property("bootFromFloppy").toBool()) arguments << "-boot" << "a"; } } //sound support if (property("sound").toBool()) { //TODO: allow selecting hardware arguments << "-soundhw" << "es1370"; } //memory size if (property("memory").toInt() > 0) arguments << "-m" << QString::number(property("memory").toInt()); //number of CPUs if (property("cpu").toInt() > 1) arguments << "-smp" << QString::number(property("cpu").toInt()); //usb support if (property("usbSupport").toBool()) { arguments << "-usb"; arguments << usbConfig->getOptionString(); } if (property("usbSupport").toBool() && property("mouse").toBool()) arguments << "-usbdevice" << "tablet"; //set time from host if (property("time").toBool()) arguments << "-localtime"; //Acceleration support //FIXME we should detect if the CPU/Kernel supports kvm, them use it. otherwise use kqemu instead. "-enable-kvm" is the option to enable kvm in qemu if (!(property("virtualization").toBool()) && kvmVersion > 0) arguments << "-no-kvm"; else if (!(property("virtualization").toBool())) arguments << "-no-kqemu"; else if (property("virtualization").toBool() && kvmVersion <= 0) arguments << "-kernel-kqemu"; //Image resume support if (doResume) arguments << "-loadvm" << snapshotNameString; //allow access to the monitor via socket / pipe //FIXME: does this work in windows? if so, then most of the new features will work in // windows too. if not, the pipe:filename option might work, if we can make a named pipe... // http://en.wikipedia.org/wiki/Named_pipe QString consoleLocation = property("hdd").toString(); consoleLocation.replace(QRegExp("[.][^.]+$"), ".cnsl"); QString pidLocation = property("hdd").toString(); pidLocation.replace(QRegExp("[.][^.]+$"), ".pid"); QString toolsLocation = property("hdd").toString(); toolsLocation.replace(QRegExp("[.][^.]+$"), ".tools"); #ifndef Q_OS_WIN32 arguments << "-monitor" << "unix:" + consoleLocation + ",server,nowait"; arguments << "-serial" << "unix:" + toolsLocation + ",server,nowait"; #else arguments << "-monitor" << "pipe:" + consoleLocation; arguments << "-serial" << "pipe:" + toolsLocation; #endif arguments << "-daemonize"; arguments << "-pidfile" << pidLocation; //show name in title if available if( (versionMajor >= 0 && versionMinor >= 9 && versionBugfix >= 1) || (kvmVersion>=60) ) arguments << "-name" << "\"" + property("name").toString() + "\""; // Add the VM image name arguments << "-drive"; // And use the temp file if snapshot is enabled if (property("snapshot").toBool()) { createTmp(); //arguments << pathString + ".tmp"; arguments << "file=" + property("hdd").toString() + ".tmp" + (property("hddVirtio").toBool()?",if=virtio,index=0,boot=on":""); } else //arguments << pathString; arguments << "file=" + property("hdd").toString() + + (property("hddVirtio").toBool()?",if=virtio,index=0,boot=on":""); return arguments; } QStringList MachineProcess::buildEnvironment() { QStringList env = process->systemEnvironment(); if (property("sound").toBool()) { //TODO:on windows and mac i assume we have to stick with the default... (directSound / coreAudio) .. need to ifndef this for those platforms. QString driver = "oss"; if(property("soundSystem").toString() == tr("ALSA")) driver = "alsa"; else if(property("soundSystem").toString() == tr("OSS")) driver = "oss"; else if(property("soundSystem").toString() == tr("PulseAudio")) driver = "pa"; else if(property("soundSystem").toString() == tr("ESD")) driver = "esd"; else driver = property("soundSystem").toString(); env << "QEMU_AUDIO_DRV=" + driver; } return env; } void MachineProcess::start() { emit stateChanged(MachineProcess::Starting); QSettings settings("QtEmu", "QtEmu"); QStringList arguments = buildParamList(); process->setEnvironment(buildEnvironment()); beforeRunExecute(); #ifndef Q_OS_WIN32 process->start(settings.value("command", "qemu").toString(), arguments); #elif defined(Q_OS_WIN32) arguments << "-L" << "."; QString qemuCommand = settings.value("command", QCoreApplication::applicationDirPath() + "/qemu/qemu.exe").toString(); QDir path(qemuCommand); path.cdUp(); process->setWorkingDirectory(path.path()); process->start(qemuCommand, arguments); #endif emit cleanConsole(settings.value("command", "qemu").toString() + ' ' + arguments.join(" ")); } void MachineProcess::beforeRunExecute() { QSettings settings("QtEmu", "QtEmu"); QProcess *beforeProcess = new QProcess(this); QString command = settings.value("beforeStart").toString(); if (!command.isEmpty()) { QStringList commandList; commandList = command.split('\n'); QStringList paramList; for (int i = 0; i < commandList.size(); ++i) { paramList = commandList.at(i).split(' ');//FIXME: this will split parameters even if the space is enclosed in quotes or escaped. this is not quite right. same below if(paramList.size()==1) beforeProcess->start(commandList.at(i).toLocal8Bit().constData()); else beforeProcess->start(paramList.takeFirst().toLocal8Bit().constData(),paramList); while (beforeProcess->waitForFinished()) { QTime sleepTime = QTime::currentTime().addMSecs(5); while (QTime::currentTime() < sleepTime) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } } } command = property("execBefore").toString(); if (property("enableExecBefore").toBool()&&!command.isEmpty()) { QStringList commandList; commandList = command.split('\n'); QStringList paramList; for (int i = 0; i < commandList.size(); ++i) { paramList = commandList.at(i).split(' ');//FIXME if(paramList.size()==1) beforeProcess->start(commandList.at(i).toLocal8Bit().constData()); else beforeProcess->start(paramList.takeFirst().toLocal8Bit().constData(),paramList); while (beforeProcess->waitForFinished()) { QTime sleepTime = QTime::currentTime().addMSecs(5); while (QTime::currentTime() < sleepTime) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } } } } void MachineProcess::afterExitExecute() { emit(stateChanged(MachineProcess::Saving)); if(property("snapshot").toBool()) deleteTmp(0); else if(QFile::exists(property("hdd").toString() + ".tmp")) commitTmp(); QSettings settings("QtEmu", "QtEmu"); QProcess *afterProcess = new QProcess(this); QString command = settings.value("afterExit").toString(); if (!command.isEmpty()) { QStringList commandList; commandList = command.split('\n'); QStringList paramList; for (int i = 0; i < commandList.size(); ++i) { paramList = commandList.at(i).split(' ');//FIXME if(paramList.size()==1) afterProcess->start(commandList.at(i).toLocal8Bit().constData()); else afterProcess->start(paramList.takeFirst().toLocal8Bit().constData(),paramList); while (afterProcess->waitForFinished()) { QTime sleepTime = QTime::currentTime().addMSecs(5); while (QTime::currentTime() < sleepTime) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } } } command = property("execAfter").toString(); if (property("enableExecAfter").toBool()&&!command.isEmpty()) { QStringList commandList; commandList = command.split('\n'); QStringList paramList; for (int i = 0; i < commandList.size(); ++i) { paramList = commandList.at(i).split(' ');//FIXME if(paramList.size()==1) afterProcess->start(commandList.at(i).toLocal8Bit().constData()); else afterProcess->start(paramList.takeFirst().toLocal8Bit().constData(),paramList); while (afterProcess->waitForFinished()) { QTime sleepTime = QTime::currentTime().addMSecs(5); while (QTime::currentTime() < sleepTime) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } } } doResume=false; QString pidLocation = property("hdd").toString(); pidLocation.replace(QRegExp("[.][^.]+$"), ".pid"); QFile::remove( pidLocation ); emit(stateChanged(MachineProcess::NotRunning)); } void MachineProcess::connectToProcess() { emit stateChanged(MachineProcess::Running); //it is now safe to connect to the machine qDebug() << "got the OK to connect!"; //connect console QString consoleLocation = property("hdd").toString(); consoleLocation.replace(QRegExp("[.][^.]+$"), ".cnsl"); console->connectToServer(consoleLocation, QIODevice::ReadWrite); //ready to connect vnc emit booting(); } void MachineProcess::resume(const QString & snapshotName) { snapshotNameString = snapshotName; if(process->state()==QProcess::Running) { write("loadvm " + snapshotName.toAscii() + '\n'); emit resuming(snapshotName); } else { doResume=true; start(); emit resuming(snapshotName); write("\n"); } connect(this, SIGNAL(stdout(const QString&)),this,SLOT(resumeFinished(const QString&))); } void MachineProcess::resumeFinished(const QString& returnedText) { if(returnedText.contains("(qemu)")) { emit resumed(snapshotNameString); disconnect(this, SIGNAL(stdout(const QString&)),this,SLOT(resumeFinished(const QString&))); } //might need to reconnect the usb tablet here... } void MachineProcess::suspend(const QString & snapshotName) { snapshotNameString = snapshotName; emit suspending(snapshotName); //usb is not properly resumed, so we need to disable it first in order to keep things working afterwords. //this also means that we need to dynamically get usb devices to unload and save them with the qtemu config //file for proper usb support with suspend. as it is we just unload the tablet, which is all we know about. if(property("mouse").toBool()) { write("usb_del 0.1\n"); sleep(2);//wait for the guest OS to notice } write("stop\n"); write("savevm " + snapshotName.toAscii() + '\n'); emit stateChanged(MachineProcess::Saving); connect(this, SIGNAL(stdout(const QString&)),this,SLOT(suspendFinished(const QString&))); } void MachineProcess::suspendFinished(const QString& returnedText) { if(returnedText == "(qemu)") { write("cont\n"); emit suspended(snapshotNameString); emit stateChanged(MachineProcess::NotRunning); disconnect(this, SIGNAL(stdout(const QString&)),this,SLOT(suspendFinished(const QString&))); } } void MachineProcess::togglePause() { paused ? write("cont\n") : write("stop\n"); paused = !paused; } void MachineProcess::stop() { write("system_powerdown\n"); emit(stateChanged(MachineProcess::Stopping)); } void MachineProcess::forceStop() { write("quit\n"); emit(stateChanged(MachineProcess::Stopping)); } void MachineProcess::readProcess() { //this needs to write to a qlocalsocket instead QByteArray rawOutput = console->readAll(); //QByteArray rawOutput = readAllStandardOutput(); emit rawConsole(rawOutput); //for connection to a fully interactive console... eventually QString convOutput = rawOutput; QStringList splitOutput = convOutput.split(""); if (splitOutput.last()==splitOutput.first()) { emit cleanConsole(convOutput.trimmed()); emit stdout(convOutput.simplified()); lastOutput.append(convOutput.simplified()); } else { if(!splitOutput.last().isEmpty()) { QString cleanOutput = splitOutput.last().remove(QRegExp("\[[KD].")); emit cleanConsole(cleanOutput.trimmed()); emit stdout(cleanOutput.simplified()); lastOutput.append(convOutput.simplified()); } } outputParts = lastOutput.split("(qemu)"); //qDebug(outputParts.last().toAscii()); } void MachineProcess::readProcessErrors() { QString errorText = process->readAllStandardError(); emit error(errorText); } qint64 MachineProcess::write ( const QByteArray & byteArray ) { if(console->isWritable()) { emit stdin(((QString)byteArray).simplified()); emit cleanConsole(((QString)byteArray).trimmed()); return console->write(byteArray); } else return 0; } void MachineProcess::writeDebugInfo(const QString & debugText) { #ifdef DEVELOPER qDebug(debugText.toAscii()); #endif } void MachineProcess::getVersion() { int *qemuVersion = env.getQemuVersion(); versionMajor = qemuVersion[0]; versionMinor = qemuVersion[1]; versionBugfix = qemuVersion[2]; kvmVersion = env.getKvmVersion(); } void MachineProcess::changeCdrom() { //handle differing version syntax... if ((versionMajor >= 0 && versionMinor >= 9 && versionBugfix >= 1)|(kvmVersion>=60)) write("eject -f ide1-cd0\n"); else write("eject -f cdrom\n"); QTimer::singleShot(5000, this, SLOT(loadCdrom())); } //TODO: accept a drive assignment to eject/insert. void MachineProcess::changeFloppy() { //handle differing version syntax... //if ((versionMajor >= 0 && versionMinor >= 9 && versionBugfix >= 1)|(kvmVersion>=60)) write("eject -f floppy\n");//might need to be fda , not floppy write("change floppy " + property("floppy").toByteArray() + '\n'); } void MachineProcess::loadCdrom() { //handle differing version syntax... if ((versionMajor >= 0 && versionMinor >= 9 && versionBugfix >= 1)|(kvmVersion>=60)) write("change ide1-cd0 " + property("cdrom").toByteArray() + '\n'); else write("change cdrom" + property("cdrom").toByteArray() + '\n'); } void MachineProcess::commitTmp() { emit stateChanged(MachineProcess::Saving); QProcess commitTmpProcess; commitTmpProcess.start("qemu-img", QStringList() << "commit" << property("hdd").toString() + ".tmp"); connect(&commitTmpProcess, SIGNAL(finished (int, QProcess::ExitStatus)), this, SLOT(deleteTmp(int))); } void MachineProcess::deleteTmp(int successfulCommit) { if(successfulCommit == 0) QFile::remove( property("hdd").toString() + ".tmp" ); emit stateChanged(MachineProcess::NotRunning); } void MachineProcess::createTmp() { //this mkaes it so if the temp file exists we use it... this could result in all sorts of wierd behavior. //if(QFile::exists(property("hdd").toString() + ".tmp")) //return; QProcess createTmpProcess; createTmpProcess.start("qemu-img", QStringList() << "create" << "-f" << "qcow2" << "-b" << property("hdd").toString() << property("hdd").toString() + ".tmp"); createTmpProcess.waitForFinished(); } bool MachineProcess::event(QEvent * event) { if(event->type() == QEvent::DynamicPropertyChange) { //any property changes dealt with in here QDynamicPropertyChangeEvent *propEvent = static_cast(event); if(propEvent->propertyName() == "mouse") { if(!property("mouse").toBool()) { //TODO: we need to actually detect the proper device... write("usb_del 0.1\n"); } else { write("usb_add tablet\n"); } } return false; } return true; } MachineProcess::ProcessState MachineProcess::state() { return myState; } void MachineProcess::saveState(MachineProcess::ProcessState newState) { myState = newState; if(newState == MachineProcess::NotRunning) { emit cleanConsole("(virtual machine quit)"); emit finished(); } else if(newState == MachineProcess::Running) emit started(); } void MachineProcess::checkIfRunning() { //all this talk of PIDs is nonsense on win32 #ifndef WIN32 QString pidLocation = property("hdd").toString(); pidLocation.replace(QRegExp("[.][^.]+$"), ".pid"); QFile pidFile(pidLocation); if(pidFile.exists()) { pidFile.open(QFile::ReadWrite); //check if that pid is running (posix) QString pid = pidFile.readLine(); if(kill(pid.toInt(), 0) == 0) { //then the machine should be running... connectToProcess(); pidFile.close(); } else { pidFile.remove(); } } #else if(pidFile.exists()) { connectToProcess(); } #endif } qtemu-2.0~alpha1/usbconfig.cpp0000644000175000017500000000425611165515756016327 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "usbconfig.h" #include "machineconfigobject.h" #include "machineprocess.h" #include "machinetab.h" UsbConfig::UsbConfig(MachineProcess * parent, MachineConfigObject * config) : QObject(parent) , config(config) , parent(parent) { config->registerObject(this); qobject_cast(parent->parent()); } QStringList UsbConfig::getOptionString() { QStringList hostDeviceNames = config->getConfig()->getAllOptionNames("usb", ""); QStringList optionString; foreach(QString name, hostDeviceNames) { optionString << "-usbdevice" << "host:" + config->getOption("usb", name, "address", QString()).toString(); } return optionString; } void UsbConfig::vmAddDevice(QString id) { if(parent->state() == 2) { parent->write(QString("usb_add host:" + id + '\n').toAscii()); } } void UsbConfig::vmRemoveDevice(QString id) { if(parent->state() == 2) { parent->write(QString("usb_del host:" + id + '\n').toAscii()); } //this may not be right... or needed sometimes. //if the device is physically removed this is exteranious, //if you just uncheck the device's checkbox, then it is required. } qtemu-2.0~alpha1/help/0000755000175000017500000000000011217515417014555 5ustar fboudrafboudraqtemu-2.0~alpha1/help/wizard_2_1.png0000644000175000017500000001250010753140477017226 0ustar fboudrafboudraPNG  IHDRa/<bKGD pHYs  tIME  ?-RIDATxpwIakADP.xIb tT- gΎLDx. 6Ği4zD 1BXdlل$N}~wADDDDDDDDDDDD:b㽚a`(\DDmt)`+ȵ&0~zxuED:$0RȀ$T 'X*""Ϡ A?yha(TDDPaKP`H4ؤ*i-?[3X U*""u&n,~,F+kJyKΜKED7}'%3k ~S ̴Z_GU%"؏ lU@yV5%" >pB{jn W@hIHrҟ׫{OEGDJkXܥ8xo nv]`KDdJ3,~:x,`fj:u Jaa!dee#xb͛שeyGBSQQAFFFJKKY|^"]7 VȖ)/l0 r%3f Qٳ\t .?;v*"}J`X%TtH x;v555l6-Z}Gee%%%%̝;˗޽{;d޽x<֬YO~fϞ{It?> .$//WL2loߎaŊ̘1sRTT@yy96JKKΦS[ìY7ɓ8r䈯{ꩧx' AaT)a_zj֭[s={lСv, {eǎdff/ȉ'OJqq1,\yo>"##y׸x"-⭷"??Km۳g۶m#22K}z'Na 6 ե[0?+W$>>cXh;(&f^a떳իyTǏ]R5;&%%qmel믿 ΰlܸ~~'|nɾn6}j>}*bbbZOVV>6!C0zh{1RSS9yd/k.߿gΜIVVӦMk3f3g`]6&L|o߾rrrp=""*F@`3o׵pt}QE^8!˹/nZ|cԷLNhhZow¾F{MMa>;]t9T""&XC˃ʺHDDBx(TDDd@ߧ2?ږaB ʛ=/B iu"2uU,W` tS(TDDD"""P\"uDDzλKEEEl+11;C""ҟeʕ͛7\`Q rss{+—-[ƟgʵVb@xM^>u/|y@2e^"k 5VbN2o]r5cƌa׮]!CEt+ӥ原/~Sc6Wݧ""Cgz73cs Z SN1zhl6iii[Q^^@II {Kqq1}zܞk='Ną 8/"2?~<;vUWWٳgt.\ "JL>FzpFF2~(R~< [>uRr`Cȑ#q8`Xhwv{=VX3g ==_ݷI&u1|˱lg\.K,{%--?b.,X@JJ v￟ɓ'c}sss{HOOȑ#mwa֬Ykɓ}盛LBvv6۷oҥKM=rHx73goG}_3cƌ9g…δ3Kȑ#deeSOO)ǃ ^/K<0w,4)[F$s97|pB n/--e :ݎba޽ر R[[3웷P\Q?~Fss3q8<8NÇ7r0 8}5[w6]Ba0l0\.}odΞ=3 n1cETT|'|G63 #hƍ}7;$==7k7fG믿1c_Ν;r/n:N'/^dĈ 4ȴKJJ &&wc~VWWSTT R.3fy\r%߿E׻HB3O\3gba$>\~iͦ+1V۶mco>y"""ڄGUUU1Gm711/^ɓ'kرcq:<䓾'rÆ YV}}Æ  ==e˖k7@BBOg?Y,]UVLlll˼KL8\8p>|MI5؋ظiٸq#=viӦiCw3ye˖-lڴT:9Sv{h~\̓Ia0q?TTzgŅ |7|}K40}BL @iiilذӧOSUUELL G/`ٲe!IMMɓ֖ow 9ϢE8p86oր 8vfbȐ!r-m7a!...zvM^^ b$$$mwAk%ߖ_W۷/ef̘ի9w111l6 9s&_'jcr?_~ev[̙3bڴi*+igII x֮]&q$$$Ctt4k׮gՙSix>8~sG:e5Ry~θ/jAWPḉ63}6T u-j<++wQHoW*:v9SX& Q"7x::7N2/%&::w/՗⻜Y.cΝ:ҧ%륬n,M߃8 444GP_ N7ccc*""DovTĤ˟eixx\455PWÉӅj0 *AQ=^/)jԭ[SJrS,:ܴUի9p/,,nݺ9L0rsDi;, Ù9sf%8556L烢(*8{9z!z $11.O?T>~xZl @dd$_K.̘1~qebccfĈ;v EQ4iR/0;;S ڎ@vvv5\xxx>8^ZPg5'W?4Jٳo ŋplݺ //yZ-Y΅*t0;g-+-rqrqrqrq۞+ `+fⲲ.ܧ~ʘ1c8r:t Tpg 233C%33͛wpgYf½曅/ o݆*1p+d@@)jm.^Ŷ$jWUzF+ujDN( uаEz55eoZcǣ}Ctߗ=?#̞ez@wbHOf,wAVL>:t ;!W(\rQ&7MnM5ʽFn;i zRnŎ̙=Bl%{͛7ӪU+<˳FnjV+۾{JG%33Bnn.=z0{9E!..ɓ'ѥKM(X,|A"## U\⋥l^Fttt52Xy?l s}EeJك\m%~x̘1j><-[Vp2ޱGq_nQ\6i$>#>LΝKG[1**;G}Pݻ[V*ׅ)uedx@\d"++KGff>k{{޽;_ ̵Gp=\0݊~^/=rJ#҄m+^2+86mʜ9sȑ#̜9ӣG,XCXp!999ܹѣGsw~6oLTT< ~;III2m4IJJ"==}Һuk8~8iiiDEE###9}4}zqF"""P9sD@@=]t!44ݻӾ}{Zja(aaa+|rVZEDD~!ͣM6eRX}' Ґ4ҩX`WwFW\wFp =AA@ÀXoU~gd„ WfJ.tmյiL:J;PrQ-ZDHH?wP k/̅ Xp!zbƍ|W$$$pe;kl۶JV@@ V-A&M7n\lZ=*DR߶mÇgͬZ{b6y70`[n-޸lڸq5jFm۶Ixx8;wcǎ̛7oRTڵHJJ*?|*4__ߪW쑾G)4A MB*苫 YWZomk׮7ϡCxٱDDD0hР2I[zz7"b*6̶mpss+0uj@ll7 ,`ҢE ~m9+W_}^Z,4Ʉ)x_i٫p< YYYl޼Zj^d% \- E .7?OښaJ1"NFp,p[!P2c"N4 5lurVrni ;EE*TX9 8J;H5lvU~,P1{4MbNOG3C]<|W@2?vջՌAGM郼7p:ჯ ߍo~=n<˚ղ9hu֖ٞ]<| `VTAwEweߑ(Ƽ;]>mn<ѷ1cq ,9ܴѩ:&N^uYmĻ7$_myhRZĆ5UΝ;V73=ك5 Xyt8ʊoc{0}\-""Xޗ_~h4+ :H=JN$ˈLUkW^-&<<\-e'kGyݗ~Ǣx|х:>nP*R!lƖ!|<~]5="6_t|mѬ j$媁x \r\@iJavՒY˿ jvjV Ѹm_mИ}+rp}'S8Ѳ)*S;{+mycazɬb4dǹlEÞY2Aux"9F4h.r7VijP>m?zND.wհiR$݊_?7mz)tS73\βiDwEsyQZ\M9d|Nr<+׼*)'y<2 w[ə= -H"yMRqd6) (OL$rVW AnD'BhGJB%ښ5k8<ݻwgǎ 8CN͛GzzukFXXP-ꖶuS73.-9#T{l=ʙ=R1Rui M,ZB" &""̼* vL2\)dz>7֭;6~x֯__hQ#oɓ'O7nǏ'44PvܩիW5j#?[fϞŋ cʕŦ}ܹ3;1i$GQ]e̙@ru;]t)Uvg, sBѣG>|8z_###4;vmۖ?[Z˖- uPi@z*6ep=NJeӿ0ksʤuV֭[GLL &,,L֯_̙3yG_^7o/9;=zz,%%LBBB8q"… հXӕ^h;v;N:j4(^x{.]xWhݺ5?8IIIW_} &зo_^xۧKJJRc„ DFF"o箻SNy+;)SqFZfk׮v:u*[={4"T .~lVx,n58S>(3&B&X,JˠAh4|7 :sasC9ZX4;p:#Gd%:'::֭[EѢ) ۸qa(SO=Ś5kn՞#&o[SO3ɬ'w^5^\?-O,W;n c=n`~,FG梪ZGhuhZᯣ<F#55 ooo<==p֭E=Ofőp;zݦ#'9ھ5@W:1O/vِg:@'7a]hXst/Y,-Yidvmh07ntjHvv6n`pe.872݃}+ 9IcU\<йb6չ`NէT.nWZ]bVFlEգsƔFb6aJջ$>ޓ.A>L}{'2p ;ӴNb],0Oxسk/B+4j -_]d@V1Wӹy C\kkr~hr'VqmǎGYIȸ7Zz:zfXգu񸮸lqK3}PũЌɆ"erq9 ג9 A?G: _#B[MDh BA&UDhW\ŋ:vh)Av=>c4hȑ#ILLd޼y:yi IDAT@HH;v` 8N(l۶Mr_6j!B'L>Jbb"[nŋ㣆1۵k< k׮% a ӣG2Xdž8+2 BEo>"{:b3Q:Ch A&"4ADh BzAlllϫ"4п[r& [naREQX֭ݻw,]lgdXBߒtgHfx?uT?𜰰0bbbs%** <'F Ν; uulɓ'yW c0`ӦM+u0aE!66VЫW/MmKRerV+QESMSX?Wv$DZKxѯWk~?nBhڵ/GQ|AϾ}g\x۝7fN< iܸ1!!! .Õ+W*իWxyy}Qo߮ o֬Yl߾.]Çnݺ 4:g1c8];CΝ;v,wlG}Ddd$ǎ#((H=ϖn`,X@yWر#?8ylW^͛x뭷HNNV7'иqcX`?ݺuK#@ǎoUfM B3͘f&v3xi9M%5\qUMѣG1bVbܹ$&&7pbb"ubϋ/](kת?3z׸qc6mT(0nܸb36] V}vccc9sL矷|7{euwqYYYyΝS]|s1|sx 4iV6mW'ik> СCv(5];wf͚(gehŠܿ! nkDڬ8 hN=mРAڵ˩ 㷼3Ü:uP۶:tޓz57t.mШ7d{:\mI{͛Kuo|4utv9 ;wksUWl3rzz jr5s _<ҽ/TIMk׳@4ҥK%#n{ߣ8hfRFeF;wvZIqSLJsGsO&Ll6s9ڴiT?+ȢUAj)Sƒ_xuJˊ+!7mڔ#Fy h;]vfvޭ>@E=6lțo)"cTjK> {OUhXzZG;?2 T, A&MDh BA&"4ADh B "4A M A MDh rQb/X&L <<\rLӣGUl HQDh m4ʲzjZv4e˴i̘1iҷlٲ2m*Ъ3hذS… <+vB #''ilܸqbфc]YRg[GQt:ф87EDD0|pEaڵ,ʢd 믿o!))QFqyC=lf<F?\X,RuʦVR7O>Fڲ{Nh(pBڵkǢE0t҅#G[oQn]z-4hP&Th{eь9EQ>}:3f̸eU1c0l0FABBjBQ88 5kW\sΥE*Ԣu]u]vq-YL;/JeK/T:x 5 6:Dh [4gjm)="4B-ZEֽ/BJͯ'Ģ g}Ƽ?;]l矉u5M7 ysbON_=tWo2o<~XJ Bdy  ͛'BE+MJ!h[a aA(kLj\<9 W$  jzYJV u1ͧRLuޢ Z/ 懓*P]|kYHf9?!<3H D`VBGκ Dd+4[i[3P݅fHVSЊ%4[fWkf~c~Q/,Pf -;CȢY#$E"4 M) | gr1/uV%YdSu\igQg]("6Du=Vut$8H4"&A(UMAAAAє"@A( +;An| WI?oΠa 7s)F) AI:s~̞e؏vo)a+) Ar$+-SRᏧo]Vfmp$71pKQ1{Qu5, 7V(L&fA'YCu<:M."/`f1n8hؠMhuvyǃ^1dfr-=DW׮%Qvmu{FS(ydH ݛlR6?dzx^Kqj\LegT"zvbbsoryڻ1oI.\JsXm9/%xiQ Tq4Zu%9) f37l`-5}IgwN9\iDlV6q-qD) L&V[lF̗wi>e9zOls<݇ԯO=)z^ΫN`+[pw{lމcR qQM7VO]WFv \rs>?֚O_bՏ^i}1DNWûc[י+\ϥ\/f2<%O\' T GvƿGҸC"OQ)ejrXNwG-,6 / z-4V )g21pswAb2)ɼKƵlrss2b2(ּ^ ~=z qوY -m*mx&5n @]/īl%k񻖜 gF0{@M;]ь㛨K@krɺ| ,d?!Wߺh:Z6C'q񫏛ct1cWE&Қ9H).={W=UO0X)]d}f5x~5 ^FA M1d^gA1d1<8iVnnnF233I2E s/.]̙3xzzX$w_ȾrCF-C|K4 :WM\;scVgpDD|wBکH\}P~K2aLŧh\I WhAhLYiht.hnrҩQn ]$ǐ)+ ɀFonɾrcU q  iI'<Q1)mH W:{bbN51zsk0{^< ǜ9A݆y`m%G J۟Suf]&?K3l\2h'.e:sE)iVSYRJ&L(Aٜ?sztA=KU؊1K1(ڍpUnԓ0eƂV{kU 4E*3YWҶv=ƳNǖK'9-1t`Ь{h5bÎ72L_mໜ[ :V޿=zAh$ גJ}wmj4ux2)"ߥ^dM AJoϱ3R:ۑ6F o Z;gMA(5N82f%5p%6~ZjAɸ4AJ MA& bA*~P СCy+쿣 @ pK_gϲsBEg /ܹsi׮.\`̘1 6Ȱs̡utܙaÆ1et:׮]c͚5R B+;46rE-ZDtt4pBڷoϒ%Kؼy3˖-(6{c=FQF뫆AV$2a„bÍ?~!Ch4hтZj1w\RRR8utڵKD.\@-[,R $<<`zti+sN],3ABvvuϫ*moAcذa"3877k=z3f:~IΝ˫JTTqqqٓiӦF~ -ZJ{#={vդ ^kQOaťFٷo , 22Rel;66:0~xRSSիWq9(.˪v^yX (- /GL콤gK(W -lR߅__0nbʁ=zٱc ==b2Z۶m^#""ݻDۼys-Z/LǎhРm۶穧bvF]b >(_~CcpQ,jF'$**CMHHZz5k׮:"55.IzΝ;wCk#GX,O>Q-::>}IݱX,=z [/ǜ9stt{ij*4:+22RSFqw{n&Md.߉'x衇Xx1֭9eyf^|E6mO>>ڵ,5ڵkh4L<^Obb"pԩBt:L&SOҷo_QfM;пMNcŊ{iӦКpڵC0͚5Ѩ> lV+X&M۶moƇ~X(xС???Z- Zm^} yki4ׯOVpuuU}nGOvWfMJӧثW/֭[0ÇӦM"g[n>ɶ-h] udg璝m '' z]d+<>///qJ PQW`PM3/x,KަXPffLJS,Bv%0@r&R9x -[ 6l 88 ZV^to|C[ =z SQ]& +%\ppp'M ދ#A1h ,HpK.ȿ %?s-[& R> BU`0ܰƎƍŠ,VGUVOп5LTT6l`vf,Z .ТE uʕ+Eiס丸8fΜW_}usLBvv63g[ EQnxL.#o9]r%L2kr5ճ'4i/^dʔ)1W^eʔ)t:5̙Cܹ֭3=a5k]v%99PFhd餤… qwwgܹ￯o{nuƐ!Ca4;w.ڵ… 3F5;v,Ku>EQx爋`0ϳw^͛BvA [FQFdeeս"Z BIDATjYp!&L ((+V:k~WWWqoߞ%K86mڰh"N=Xv-S֭wI&:uP|ԨQl2xw Ӿ}{e٧OՠU7c樅(J}-J .dÆ ,[cǎҥK CAN:]rE ZEvYlOf\|SRn].\pLL8^~i{1._̤I[.< O<[l!##5kְg'>>FhѢ?^}9(7,-[rĉjmf3 _>K.%99ӧOSF :wd6iڴ)L0g}V1h\|z c-,#L<4 A o̗߮_~)T:vXBŶA(ZIϭ A*A8'2 BUfǎ7t8'2B P/GAA  8 (R9 X pĂP6sb'0hqqq̞=[(T?9'ӧ۷ˋO??~˗SO|rVZU(LTT2K*+2I[hE9vh42i$rssiڴ)`޽DDDg,X@޽ٻwøԩ0EQxg9}4 t޽Z:H!fڷo϶mEEEŋ3f Ch42ydUgϘ̙^Lll,cǎܹs̜9CJbĠ E9(vwaذa1\ QҸׯ0Emwǎbʹ9uvxׯ 2aÆa04hfףbLJ@{0(m;OhhPe 8'`OY5kCgfĉlڴ@t:ݻwg͚5̘1]S~WUHR==)djn 81:h`t%.=6y.8\U,d)oWly5U)Zʂ :3jޮٶ}q^ a=ܤNN?vhF!ooYC yRn;q\iGq9^Hc kLɇ Iev2bvJ);)y5.Uh2 J"}M=t-78#˲遗 :)/?eǔk z\;d:KUg-yfyKtٙ#d uyu]UWW+ ʶmy<iaq1|Okk25{NN=vc +oVk, zjn!z5W޽8pK-Ѭsb.oԒݺ:wvE5՟߅l^?QzO$I0MWŻ!9靥9UϽG?.?]8.veN9*xh|L ?>iM'6;* ˓ɶ 55Iukh]}lۖ뺲,uSg3F!ZuYUstJ/kM??}hUe: ~qEz+t.;x+CIUxn5)ψs a[OM}k<+'g=!WV谽.LǺXfY")Quz:khi.Jш%#v V55*Еm۲,c'|6$_jt%_|р+'ϯW%)T׶ڈM+?jP^ЫEyLC{BUڴ;{$iBY޻=.=|OVmS jcz5Wa~ɴ4PלOG*_0X>;jkCVJH\=^WIw}vr却t}{]i٧Gɛ;mSVkeiWf N5K$ɲUmюgwSzU{gw,+*///yHRQr$I,P@aՕztɻ*lӆj͖˗X_,'$WڣyzY{e (- 闯l$mݹO}%_kt~SƶRQjL,=UZyrjo ׵v[$igkQQzT?ߠm=ښ*8.PWVoWcs4:ߧw0y_]Ў-˟spaܟ܆zxTHamkGӉ2%NN/'UOMms֤t <'ܛuДڹ~aEMHǨ@ L}5o2=^)ǐaz$Ik.T@y-t ۓAAvX}iL/5zuzd%U-;8{}-g)XT*&]3fGihʛ](ß~!Ӻ ԓ /[w-~[Kh97h '^q>ӤDǟ|o>-ȓu }2_|lkb\85~o9R7z^!.`yvx'#۾}uï7eOzR'aꬳ@3%xts'My<亊["!AelE#QUT*q;5BZVFoQW%+v !?t˿8FAkA=-տ$_ј%u%Q$hpi.\67Sҷe^+kvخUh-CI$UGןWq]Ҭ+&?hI:s ګp$@ e]תrelյS9K^Rqz*u+ WJ7Au[ P*5dŝ.5.n}Jdl%Mm.D;B{*wkze|1&)*)")n NN2c+4L(/7Gx\HD(//OygGFԿ555\C3:`XdxZLoP9*lĐ7>dex}2 $Wiʗ["-^+:PAeP  T;'c[F -vv<6 Ȓǟ#p]2SFKez|m+t|Emn>Ce~0:q-aK3YR -a*N?vҶqf42_~]ȃe;5?iD)vk_ UCddevw9I)~;ggtdʛ]vރ3ǟWm%wnݷm}) f\7+__ٶ?S9#>5i;چI)ֶ'v᛺qd>3f.aZ .;.A3/'C҆H2Cx7)%ZWAƷBbuTRXvJ2-$g@gk8eyv:K.ߎG/?ma=o :cq/{పOje(^!`㧲%>MFs3zTh Gh4ZXX_]6mb82rHs9;1-ff… %IǏq};* 38>͚5Ǟ}@44448y8X;w*v8W~ 4@[o)''G`P릝0 kպ?)G8θz 0@~_`05`j˖-Thc۶Bl>@m[ӧ`qIrGe)%Hǎ;TQQTa$7\}Q$QEE-q亮,R<i͕i'4!VZ;OW4ו߯5k֨2MS0 qYE*77WocV|P|yy<^SOd㸲-GȶlY2-57/Шaի A$1Yj9CORZV֬#c*;ۧ,Y~>!rZDb b 7G ; |HD:bڳg|>_@m[ihc$))崣rJ̎ۊۑa-7wlq[ʵki_-Ӕ"lV$I^CKMI=}q4g+ \W8ed.]zHFZlosc>ʾGcgi?4LYXV\]S,ӬYTPP\]{ BwSNUnngl31^<=}Ge]O>Y'0 =im߯p8v^uUYg PcƌQuuu~eCqeVX||i[nQ޽庮OrIҙg.H6lH;PP(ߩ֬Ykڕ`ݺui=liF-Ug)vp\p\6i&9#vdfYYY *,,E)//OW\qN:$}$3FO<&O[oU_~y麮~mI&iȑZ`]jРAcjѢEݻ^z%׿ՓO>y2=jjjrJAEQ 2D]ty ??hzG;N׫Ѽy󔓓~X3f͝;7ٯٳgCq7n\瞫_W[oP(m۶iժU뮻TXXg}4}GM:M5znz)G冏];U+WY~|yLÐZ?-7wbBQmR}]H^֎-ϧ^z)$?TeH>Mכm&3e=Z?ϟ/u3=yD7zhIO?ᗖ>s*,,%\\g֬Yt]w)'ͤ/oӯζ&^oaƽXnݺ6N"?^ .ԕW^QF뿔O?]sM;ƷkѾٵ:dڇ(/?diHj ,Ǖz>!cȍZ-jjjիiYjllӰaèкKII|M=,K'O~B]vF{Ͳ7|synfmܸQo]z~ .нޫgyFUUUv_ii}?9su]͘1C;#?_z/~ wfyT^^crS͚5Kf͚}k2 [w׮]竺ZO*IPz҅^qڴiS+!Ӹ;w.O;^ZSLѣuydLo{GڦMPu5xꩧi;pl-/W0h>W^GrQ[>LYzMS2 2m[Uiiih4H$ q1~3$C/z|۲S7ˍ>35k{ge˖_^~AXqG>:-\P3gtFzꩺ'8x }ҍo??A@'#+lԒf+Yn# [a ӫMJӏx\7رcugt .UW]횶`wkze%Yb"SujN9,):Y-Q=Bñ1w\}G*,,Էm}t۷kРA7n1C'J5y}-z48L%Iʲ9qWZkzFB,:n@=ziڼy!/7pc =1Cr.QE 3#o]n"ZO7b@skvR^Gu[oŒ?'Bu]Y3{봲ְq8nEi 'qd;ۖm;W-ٶG-9)9aَ#RMu6mޤp8++++y[YM6T>Õc-X-6ډ;jI ǖi;r[Ǖ:e5Zf]ubc*/+W^^V^-߯w{Mu) 4Qs=WK.[o}O>ΖI~,k׮]ھ}4n8|>}2M͍$?'nۯmW!4@۷룏>҆ TQQ&EQI-w@)ϧkȑ2d/7U]8*))Q~44zh5JhTp^W@ ; kF ~x0 檠@}a( * vy<0cd4444 ȑ#pBF3 .ȑ#{dߎW_s9 ?Fs9Guuu'Fi?~<>gzbI\C'4 =+_b*++y(++Ӕ)S y@7뇵 $3j,*++5gE"@&X찏^{~hu]@{q>UIlݺUr,Y|lC@Th=DFJzv`***tjرڹsj}_Պ++;$wyzoSO=_HDgo@F$/D-xNN^aM>]\rA$~Kzq{hV庮xR5kƎŋ0 pBVh555*))9hޚQ+D5jKWk߾}rG[nmmݦ'{4ydv'\&I{Q߾}|Z7Wh| IR~4gΜ=zu뭷*???ŋ5p@]} ;tw8*ݻwTwN;֍$ 4/KIҏK.M#T͘1#_/khN -aΝ'Ў!{LVJQFTh'pQ@8hL-җ%@&HDMMMUVVF[|9{ tղ<z!hhhh    @@@@4444 @@@@hhhhh    @@@@4444 @@@@hhhh     @@@@4444 @@@@hhhh    @@@@@4444 @@@@hhhh    @@@@@4444 @@@@@hhhh    @@@@44444 @@@@@hhhh    @@)2)VXJ"2M21 V~jzJ}[R4e02Of<3G>of1 ?Eu.0G 0v>n/d=CFGqA81c1$@FuAƌgq0f wqјy]tEKt'8*Y~fϞ}ԶXagӾ}_BO_?wܩ_~X-[TPP˗u]رC^z!Ԥ 6יS@k{ܹsϫ_~rGV:*Jy,|Z|m۷o_͜9SeЙg){H B~8F_:sk_ԣ>Aj۱XL`>~hqZw{饗tT0 M8QM7$ǣF-\PwcjΝ1cկq}{͛|;?~nvmݺUXL~vkhMMMZnl٢I&iȑϲ,ɲ,eeeQK,ib6mrssl23ϔamXl 5a„j BXBÆ Kq%IzSOW4U}}~m͙3GrN:$IR4ՕW^#F誫j3')G =.Ժ۞={ԯ_O?-4kѢEW{ Ú>}.R=rGӟ/YDG>tWg?Qێcuu]UTThÆ |:5eeee)+%竮ŋw^_YYYD"+>@*((8x亮n*۶?Q ҤId۶"g~ S[od庮^xᅃ/~ڲe}Y_^/٦@@K,ц 3G?:,]wuׯ0;zJJJm۶ڮםwީp8Fq >\((qmڴIgqF6***[$y}*^eYZf5yd :TXL?WII:q=sڸqoʲ,EQu] 2D몮NR)̭[j4ibXHQ<=bwM^%q4sL7N/NkN;M}%ЀB ueJJJ亮֮]UV\7x^|E-[ ߉O:$׾lNR8$ݸqqWy<͘1Ch͚5ZlJKK5~x^˲T__/IjllԮ]TRR)ShÆ ڼyJJJGSNi3eee*--/:6]-ܢo}[*..N_%u}O?Ot=h2MSe?۶xb*..֕W^y%_ 8av4~YLf͒eY>}/??UUUjeee=iӦiŊꪫyiڴi?3f(''G#Fe]v\^CK9qDM2E;wm2MSm'穮֓O>H$`0ѣGk޽zبzAk˖- 0tg$}NoVXv01=ZC Qcccrj/ 4HW_@ ;#x㍺4j(IR,ѣ>O%{"#c$sSu[v/FqQF3gTCCeYzt 71Ƀi׫^z)0 9:y<˲,)uU__d$IV}}rrrxu{:3f艧 e-s駟2lT~{MU,$KR\RLRu N)?%E['u%9։ 'Nvc٨.ohķwǁ1d 4 1d 4e c4 z` l ^CX n@CPVVEc02xTVV1<쳵ѣG3XlذAg}6d2eʔ+1NٳgV^>XM={6tjl~zBp\ @<榙`9 @ZN&e~y5}Q-/z+Z;]#=Zy5G:jpZ+ ?HU6IN.2#cZ%);ej}<(:yZ'3ͮ٭2Ue0$[HJ­G%Zb*vkNN '%/8.uM䰮yNIM+S<'| D!v'v؁Y]yR5N9`鲤}1O [y.U:p1FxpTjyBs['535MhBĮ\=˗X`tM-:ZjJ1/X1=hH48qMJ}?)ܮVhR5QIj^C9HhR{1_KKWucgw9ѺruE%:UA: - N@Nt7'RLB})[":;HhJ >NCiXi0juFh4Gmo~|}N!TnŒ.]B-ݷt4ڰ_yeпBҟ>tTm龸$j?ubTgLUZgvհij #ĩкl!~9񡄉LvEh[ r&! @GוjudPmBENC@B ;oIENDB`qtemu-2.0~alpha1/help/mainwindow_new_machine_1.png0000644000175000017500000007745510753140477022242 0ustar fboudrafboudraPNG  IHDRmZbKGD pHYs  tIME   + IDATxyUY2KfMHdU"H(%(uW/rDDVY"!l,m2Ld齶=ݙ[9穧N:u9u @ @ @ Ft'c)$B XaXHG -!@pEl#q#Cu(p!G/C{T ԡdDO%#GB``bH!A sаSx%Gl:}&O0d\I  bHrj=IzӦH(Bޖ vX΀`\Xys {M5;K\݄&f7a0moukA r@:xP 1.EZNg&nYa/$-5X  Fyshys粩f3'pĥbt-}HkIjhs*"\v 9u(Mm477r0MEQHO  I]HKgh?Ľ4$E'VʹK>x}.\.]7EStF5gvaYD"#(W{4n:Sgq(jM{xgWؑ⹵<*uI4,|W(Dӆ!1CHKY z]]8FV:XdIbwX.fӐF#djuDh&ib6atV**K9*ں64qřenϝQj[xM8r鵆c<L&mg&@Xc+8t׺!Z]IJ7a6V%k5 V#9ȲLgGP6`ɄN3AKSh4wiq+ KgU᝚O@fg'>[ 8o}&G'/(cjP7:`rɯ_CIeK'Ж?m,}aX^gN-+5;#! nip%ǟ7t|>5<幃3[,AѯkI$g9Eiy.TUƲl4͝bכG~~>Td2ozYfNzTo,jmLfVU?:P}{vvy&w7/9ťS}<>8vAh\0d}[&lCuT@tFx>7_uѡCGo:g^^oMt,- #DdȖ4 |+' ecetjxLӢp8L,pdue6;IVP$^o+pm8/م|?-1|#c5běꐪ2nO*+o_@ғ2) ]ל˂mց_Ķ-$Y7@ ,N_P[{ ib985r>+ Av@,Ip{%^'*c&XUU1,p8c9 skIp ~>$Yed?,QS ҁsU (>>[gp4V3۶O;H\f~vfb@ ,=_oqtkD>~h%K+8D!(6aLI$b.!oX^dq.^ARz̺VfIe"jB1dz#]kg;ht ^AJoxgpq. YQ˝40dq8X)nsyuiU8Nt]+⯫ryUjR__ς P@ .j:j0{G}%-̪)TW߿c&z}7 X#>o4z,F-[M]yEܷ]#)HFR`9k~ᡝԿ̀ˇ,w} lk$!+2sʽ}^t]'LbY~D'I*B4ˉFbSwq%Mwa L ]qYu.3D֜$xJgy ze(./޲H* IPneը|ev#G*@pd! n@` Ƞq@ q@ q!uuuL>..l޼~83Xlgy&/Wuuu\vف ~J :.\zǺ{w[ۉ,X'x={pE|L7M}@ ,1atMߖeq뭷rWp%z1;ɓDu/_βe˸ٸq#wy'+W$NS^^ڵkimm+3Ok׮sᦛnG<֮]Yg7M:|IQki9lذe˖og}UU_J$᪫3Wƍ)))ᩧ￟m۶q뭷o}W^yÙgɪUO3O?яp8{c^.Tjs;.,⬳b'YOwˡ;[laÆ 90 ~_ꫯr0k,Xt)?z|_痿%|ӟW^3OwܸKcc#]wݐcˈdY6JJJDG8 ̙3I$|{1:֯_ϕW^)--tt:Yz5z+in:~P__+O֭;$)(wy''|26l@e-ZD:FQ>t+r~:7 qY$@zʦ [acUļ h䎆uy\x1- C>C B@ A B@ A B@ A !?Nޑ%gy&@py{%x\\@ @ 8/c(S@pLXӧO'??_"T NF=eҥKE#6ƈ2G8tttXt(#L Ӧ#fKZJx2>MyYE*Bu,+Y4 Ӊ,2/1)ɺCXa6?Ip\8N$i:]7MA{܏92Mm6ԧPdai\AI@).Lsu)viJkk+PxhrAC+/FEP3og{̉DM6܌a(i( XH$B{{;v2o< Ǵ8Jֲ\OmVCkk+f²=u۶m6jkkťeېHlm%18N|g;5[dkL{#).w&ᔇ\9Nʂ9 o=>瘸mX~=Oee%|m"}իʋ@0a,=Bh4װU$Iǃa&N !e`egEƒ>()g.ׄł9FUuP\DQ-3RW;[(1%"B/,9ڀ)(j77;?x(i'|,fΜIUU~I0MPUU())-[}v,b޼yIy&8 9sp8CPUUeYٳx<ȉKVw?ùgfDk,q%l㓧`]*VG(8 x]oFآ$U\#D"1MYf1e4M0S $I;v60 "it:q(,`BYYi1xMHNáth,KXEZ7H ItJ=Kf  yyy9R2q"((pQTGT | ONĴiL*43融K*~{KϞFQwLbi_=N8₥:["mJcaH,1褹UN8=^7+|I̘1Rt]\QXXȬYؼy36mbŸ\1ɋiN,R^^&L&I$=Dq"L8q;De;Ӽ]'j|.. E0 dR'KF!bt\E:XD";Oӹj7̽`&Ņ^ tv9j{C4RBUCZljHPUVSu҆F8 fBeu;bo$~omf8g-r |ZZZhmm","LbyyO7DuA `ҤI455ɓmT*iL6G(//6EGt{ i^ċwP)IY@M]iXEkk+iR\\,躞AӈD"躎0 ژ4ixqb6}"Ʈt]V."L8qEQ2#eBqRlӴ& R&Ьg!H EI& Hr",˹@i(`c eE9aVS*nM^,Y-hӉtֶlBq02툙loL!9z? P3>  rmi\#4+̔} C{*UUq\$ɜ{g8.u( PX,U^RK, Ass3---i4MC$t]GӴ\\QE pGHD3EKҠ؏•6PTI,ӰH IbtǰL *:\C4dq ;)+1oWcnJa6X[XM[84;K, l߸Psd2%-;,M*>^nq@yaH̠3%V> B4><NgQ@C:D"' Hx&% АAyy9>G0!#ɋ@0a#k$IEXILxU-]7I%t$i#=?4sS ӴL \CCmt0@m Fm>VAM0X6(2yazYMPv RSw&99I>c=/)!q`0,+tdjx嚵\.Wnh,C& p/7d6<ɓsjE+E pFȲȸ=y*.)mXXm á:H:mN!2ap:=z1 +#IB$]V__:9b& uZcIRiXk[ұ)fͰ9de%$uLMM.]|=Y_%{u4͜%jQF::(t:ÂI$drd-ZԯȌU^ %uȲ۸. KEQ䮇21T@VddEBUQ(Rʹ `׮]Ï9٘īPR"4Sxd}m6ZL6ki 'IG;5ERI6)bjJIJʮpW|Uª}MRYv +,X,cPK(M*?$ycD!C,[ur;p4TMɈaN(M5aXdJ*#ry4:Yqش-IS8 !foBݢ#h :&A3MGs'hSqH:f2܍=deqʔi5%Qw^XR˂"g>AA^fiZXNP{4M\OQW^3g3f LR[[˞={(//gҤI҉΋@0a#k$qI3"9TMMDOɸTRGO=MtΜ:X6Mݮ0_,ZPhMhٟ@LWI! Gt$mN2c- gt}4+S]mHr@#;, E̐WIoP&7ӉF΋@0!-aǙ|b #3ĴL,IJ̧iB&ئN$us-T***:>R71 $p:UےؖmZA3A"i$c&j7_PtNĵ)n^و}Y] 8x&iSʺljOJ$jcW! ( ڵ+7%EP(?'J( Ør[رUU@Qnw1ΒL&QUuTy&8 wd7I<ϹNJ0̉iX5mr=$STTv7;vଥgݻ4 ˲=ߍ ^n :C:m(hiH$ b1ΘEJH'l ]H;H$)^Np,Gn~CU X8;QQP+[Uywę׿ .eV+YP,**f^o,hnzF@ @QQшϟܹsQU5T  2{l*++x<躎i# Jo {zEQUEPUklOkޘfR"?۷ Lʂx>1&xM6kNYvL0w"z?>eс$I:%;=L><4M(kuV2/FqlܸÁEU՜8GUUZZZظq#mmm̟?0rdFʺK*ejr#2=F 2Hi$XD2E< OH&uTdkmٕҘ*S$q<ej1Z|_m;$iis]u"IRn7o>N۶siO{(m4`ˆHZz୷¶\cg?Nikk#P\\̆ z$߳@ 0K2_?2$q6yoiX]ѸN[6OelQ7)SCc1CfK+CcvwՔ-[YiK%.?R<ǨUU$PSSCcc#RPP̉h)P(͛G^^^.~s,E 0HZVQQA0d477ߛ5񋋋Ypanur3v3,++cƌ:)nZ%zmiS5f/iBfДI.Bؐv_{S(]r0 <ĂsUW3Cp1[2yyy,^FGGmmmeY8)((כs\aqG_ aڴiL2ǻ%Iʽ+I'4 ˲L~~Ki4e] 7g`lPH,M*mt{`'3,˸\.*++)--%Nsq"Irep<ڏG^$ (JΚɛ o9 oL XH!Ef3߯k +Ȳyκ*h:2Ǹ0(S@p0@@ 8@ A 3dRvԌ@ 'y(C3e۶mR_sǨQsi?c %xW㎟s_.v7?"XbbPz)l楗^?,'sN{1QpQS.8?On㪫>A}}3_wXf҃-Tٳgq\<裇rx{{'|T*uD^+VccQVV&ZÏ^{+V|㎛BUUf̨_}K}#G@rZގm|+_ꫯ>,'?IvիuӬ\e˖1yd867o_2ͣJ;^iA&b MFyy9ghmm/~W_W_;}zK/ĕW^IeeeǿKrvY}},cRPP5\OSnh9Ǽ+?=W^y %%$)B;-8 E|sWq]'0w}Or͚5رs=G֗Egʕbܺ^{>Ft]'f6m+kGy?<+V8d7|]=$Isꩧr- /c w+Z1 /I=̚UIud(MMmTUMI8&M*g^`JYƊ?Ϲ'G?bO2x<CggwPX),,w97N'\pq>/b~OO<?\{msh4?%Kpꩧ|4inn>$KAA-UUyofΜ)Z1O[[D"Ecc3uuo@KU$4_vm e!2mmr``;`ƌp [r(-+W… ٳg7ofi6ݭ ۝n!UUU{߲>O:K.$; rWVC0!,vظ]q Vёq/ ^:v-Ao|ZE|r/_~XN{sꩧrꩧ|'W_% SNQQQۇt|EQr{oV7]{{5& EE"NB87ܰ3H&45SZ߿@N ro6eCgg'/ ۥi -ZDyy9 rG?h4ʕ+?1.iǎ\Dzf͚1I^{ ?444ڶ˗cYSLS?h9<'8x<,|1g44?|Ǿ}mTTs-עiXNZ8a O>z_ff=<ӹ_N(<䓹mes=9]wEuu5,[lpyXlY}W/_3fp7\^bȲ}wԩSm~,"..Ll[+RW_ ڑ${ymv׿q.켉Vrя~DCC>(G(..-rR/~gzy9O}rTUp '0wܣwyy睹s g?ˍJ#3p7r)z,˴p7vi^7hh0 |)(( 2sD"1o_9*UgS/Y?[ٴn>X}򯐌uk?p饗 EG klaJNB2I]7~'8Ecv{B*Dר;Ё4Z]KZ,2P{F>K%K_6ٙlnO^wZ . k.k.9&OX@ C[@ jn%@ ˡ6A  a9 b9r!ךVjjj0M37$I=D`Am3<p@ 8Z->D"'L2`t:ٳg~d2I{{;J##19in^/,rHӸ\.dYfÆ @ K{yդ(Ȳ$IHR,Y$g-Ȳ< 0;#ߵ;LڊiضM*"NriiG+R)Q8Z#Fs䜏CYYT Mrփ@ rq-|444PUUwMM-M7xoճw^(`ǻ@pY~ b% EINF"HpqǑϓO>9f/Yj FEuu5~k#} +\'lJXM ߃`r+I$t]GӴ1+V'/iE]vtZ^/T C*BUGeP[[ˍ7H*5N0*>#{Ê&8Tup20TMSPTEe UQUMUQU5>A=CY[VV&>?ZteHFd%It 0,,4,$4M#Jt:m1fGm ݋mS|<{uM m{un%X4IgM"3DUebiֆE4lFU1+$۶ٳgπ陖M(j1H*>UDdXm$Ii( .+7c@1%#!P(FsS|-:X㡺zL ڶm*++ٽ{wljHQ7J4T@¥(W.wr yr &՛@@8&bYm( |*++)**uMpll&hGSLu8 @Y)((Sm^i6^PGR3}YŝUv?;[L״0Rs0oW&z3Z!m6ك$I|>&MGQ(H&)((`޼yB$pXiٳϜU$IU$$I2c xqlfʔ)ڵ+n{;UK,)W.KBuM%6ɛ:zB &z3q|P\\)**i& 0v5kְpBʄ@q86-~iӦKd{} y-M4~Yx걿C9"y2_>6ʜ)^qt7#q+b1֭[G8fL:˕{; Ajjjq8AQGxm3m4v {;U.?5# U"0,N@-W[y03ʴ1U%8֛Z۶mjN(D/JKK1M7R[[ '0~r8|lo۶ٝR,V3!H, >=ig=Ym,Tnf4Mc? w^f͚5<w{7C}vvMQQAKKˠIAATTT)--͹2M#( %%%}N$P\v6d(ϛaزe [ne̙x^lgx| _'? ,Oss373g'x";vmb fΜ)javD$p˅i!iBGGc6HX,sc:Nؿ?nIHlڴ={ /xb}]sb&/2$ fΜq'._Ɠ?tM#r+͜9E$x&6zlPWp2oD0,^tJB{EKGyRWW7Lcc#v\s W^y%p瘦GdY駟桇⢋.p,7?+˱̙3پ}JDX,FAA C$IH$@fT_2$db!HgyN;4ϟܹs,+_x<*Z[[y93P+]׹? !?o5c {۶mlܕ"kxiq IpyS=tl~qh$I"m;I$s,_&9.H$H$줸۶={v(l۶mX!a91Z -p~8C֊Ȳh"N>d4կXp!mcDyy9ep8vSXXmD܌ Tp饗ٳAL:h QdsX6tT:ӽG)͛d=ԶgE'\O0D44 0e0m'xsruꫯ /gf֭v+ٶeYN"@?l(Q -X,"c&$xe9W'躞FeߏaA4r{LF$Yai} ڶml4.%qMs ѴAzVoNm4)ximm-?q݄B!n&<ӦM뮻~z{.No1{lq&l2JãyavbȌzQd2ɒ%KrqNlFeb$qWRPPeYrim߾`0W\eYȲU'L(qjjj0-i%*7=-|[:X b]=®}z'Ar)FQBjjjFd98~?xЛۻwQy7#yB}av4y7M<;L&m|#ꌔPQQ!B8d {ƍRSf&X)8ւoI3wZ)bWG *tLQr=&z3;??Z[[|a~Bbx@ @0DQt:A%LXq,X #B4 `LII✿n_Vpl7#>`ԩq0EEE=Ec&pM(//G A ןcqSH:[i>}ro7Kތt=qǖ-[hjj7`hVEa!!c\؋-?̭+/Ը7O`-NMR)*d'7,ZC1v7h '.8ʹ2GܬHnlìYr×(yyy ji2|>uMpL7 N4M#Lrms^ߺuz\nPfooMR_[#8ٟ-. ,z8NdY7 [oFVz3g477J:΍^2MUUxr!)ŋv'?CfVJkD-&6mU<+xZf߉Cf$7,G2= g6$t:q:h{N`ˆE]m\x<䓜}. m{Iq0{T+`l֛Z4 M k>/FΣ>7n֭[wH Nsğ}UX2HEgS/Y?[ٴeyo{n1X,wq9~/| =Fxg?/ֵ{D0f IDATR&Z7FKdZbݾ'Tbt-&`y}J?r߽^ @uu5=и>:բ {];8Z}O@0ڎF>&8uض͋/k6's-8uMp#HDEE>(q@ 8 8dn<._""!c@ |խӟW_}狒a9dg>޽{Ŝ1@ ,<<=։ @ Lpq8Bo㫨nJ ` d-(}UXD}ڧ."(" $$!}~@n($|߯׼r9̹gf;~zW^""+bbb(((8رcf:-ZpCsS}:uL:!C0rH~_ko~_,--%##ɉHN7p~mXt)p,^z%/^+"M'۹(+222HNN&""" {0qDFIAA?V+ż2{l.2=СC=z4DEE /@ff&SLa{l9ˌ38v7aʕlٲӧ3{lu{G%;;Yf~z̙35jTuܙ;MBBB <| nӯ_?[Dn8tMdee1c :ă>~3oR#F0rHXr%zK2do \{172l0NZe]"Ǝȑ#Yf qqqddd0g.\Haaa#Ųeسgz+9n3jԨZNvx'غu+~)l6V^MQQr -" ~aL6iӦqa رcHLLt(..b+~hѣ7'|aÆѿΝ @n0 ` 0ԩ>e/ àe˖$''p8p8\:˫<4O;EDXe8ᐛKll,vv;~ut֍;T}v܉ix<:yg}Cr뭷;sNƍ޽{iժV5ZmOU^ǎٷo_0<*$''S^^c=vUD޽{yꩧp:0k,\~vr!5vѲGeԨQ_^=AD|C/ pP=={/۷m۶u]s 7Cyy9gϦ}oߞc&iiiۗ-Z̲esDIIMMeݺuDEE;S/o駟fժUyK.HDDSL!118q"˗/W^aڵ~FM޽ѣ|vsDDpzErr2fmۖzAu]opޞ={[Zg~M6mؽ{7Ǐj-† 0`QQQ<6""?z;da(/ꗿ%}]^j6l.]`ƃWeL֭[ǤI0 ˗Arr2zhpvmHMMeȐ!DGGgCLL wq>,SNe׮]W4Mƌ=CXX_=?]16SNll TRSSٶmZ]D,m۶ݻwJ܅ߵw?/\'Si;9`wP]Ox>#""-"" Q8ADD""pH9Ν;fi{W8p`6""¡>}r aZ DFFr8vV7|Cyy9"" 9;d6 ߏ$<<Bhh(P, iii~BCCZ""M9, V Évs饗RVVFDDNy4D`"??ߏin<DEFT]5ݮȅn(Lk4K())"~;yG s}iݺ5niÇi259\DBDD9=9%//BZjVi餬X\^!!vcpR^^N.]bS[AD3‘Q4 #"IH#Cn3A6myx}~_1b&L2i /(?33)Spײfsa̘1 :-[}vzn/_^2\-[G7wy'cǎeȐ!WYg'6mڰ}v7n\Vק'NdUWr 70{lƏl9j(L]wUzoù۸ky뭷;x뭷?Vwޕ0vXn~ӟr!knv̛oY7o\+FowZρj}tu?:U]&ۖRR!ˇ >/@ `0+G!SYf iv*o /KnƍWy]"Ǝȑ#IMMfzj[xꩧp8OGk׮;,wxbx x`Μ9eOXX `ʹk׎۶b{QfڵkO<֭[O8e]@yy9#F`ȑUsƍ 6SVY<\.-[ƞ={[q݌?QFպ*S.\x1bDzWʕ+X,[,]!CP\\̺ux< 0#Fٮ뚿}Zڼӵumk׮NUəlKi4%.M<,M;FDDvVoO޽{+jߴi={5uaDGGꫯHKK Cxm]t >ejo>z@N8|pXp!w}$;;I&XomNW[WNWDNg*7nO>$Æ ̝;%`-[$99ÁrqVӵwmVʊy(++xwaЪU+=Z躶~z6tm]=uԵM"RQQ9 (((%p!%%n (**"''ӵkz{a?OY~=yyyCD_|E:u֭[k4h_~yj{&''sed,YW^e*Xcǎܹ3bZlHH!!!lٲ>}ٱcG Xեcǎ۷/,|߿_uvKE}j[ګzWoЭ[7^|E&N\WzzzK&667k֌cǎU}N絕U=u6AWNi4iĚ%t 7(-aZFYiӦ z{a-Zgop;v,^ziFѣ gN|xbΝo~ӮsȑlݺcIbb"C 92?pOOL<x{SRR3sV١5zm]kIMMnӡCڵkG6mjLN꟮R:]{uرF+0`=| L2Ç3gl6[ڵ+eee̜9ZGum~j{}zOڶ=àAj'A pLM?î})Ç'66w^1 #x$0Nܾ; 7/z=-"l۶ݻwJ܅ߵw?/\'Si;9`g`:u:2[Vit[TQ8a$~z¨}j눈4p2ݻK<Op""@á" W^J""r4sv/ADD""p(DDD "" Q8ADDD "" Q8ADD""p(DDD "" Q8ADD""p(DDD""p(DDD "" Q8ADD""p(DDD "" Q8(DDD "" Q8ADD""p(DDD "" Q8ADD""pQ8ADD""p(DDD "" Q8ADD""p(DDD ""p(DDD "" Q8ADD""p(DDDPCLL [檫bٲe߫?¡)K/Df͸xϺ=zj*z"" cǎ :o׿ٳi߾=۷gɔ)S۷/}͛73;wdررܹsСZ'4K-HNN#(ڴiÇYt) k׮3zhzͤI[عs'16dzs`9K._gРA;v2228z(|n0Q84$:t.ݻw0~xV+׿e˖^?[]v0m4v;j-[naÆ 0(}Qu^&" [VV֭^v3i$?X]K/1x`=JJJJ~/_Ntt4&LW_z(~l+V`ʕ$$$[oCFF&Mrs=IXhZb5ʛ:u*{xǙ>}:>`۷~|y'DQ2ggzov;ĺ{^y^Pȅf۶m޽UEW.a֬Yq"(,ZAD Lf̘RFa,_\PL4M8i4ʦJ#Å7rq"" 39dgv{ܹhp!7#/J.I86>i&Vw=myYYYӇ+V0tPƏOYY֭SCc99r;]tbە>x˯ev֍u1d )(( $$^7j#pP8"E4G4Me~bZu_eӮ2۴iC~~>nwyA`&@y摕a޼y裏Kvv6fbÆ dff2sLF{ѣ\.~i|>s!%%>}͕W^7L~~>wqk֬;JDp8ۆ8!m-Gd%Ѧ80M9 OXj nIvky9&\s ׿ذaseӦMRSSX,\"&NȂ pݼ|WL4> ̈́ >|8o͛7gɒ%ddd0w\}QG[bXO㹶O9_PR22Я_wJlw\{ma#HHHc7 ,XPbbbxׂw1Mƒ%K|^ӱcGpQ8(oCO6Sx/ ,>W$-\WOII~ȘMvTڴ,m۶]oNNN;wc1m4DD* yq뵿h??#+k)) ~#QQ59xݻwg hFc7t}ޛb%%Rp,6tґEDp*X,-賙o3+v^J"t=_hhGD !!vȅ6r%DD#CjlyIJe8pz4 6m"))IPllbߥph -"ҘX""p(DDD ""I]yf233UEQХ1f͚'"¢Ed@4pdƌ\.8i&OM?)"mP{""_i "pGO';lXXG LiMn)"rk#ܣEn׎ ?vny8Z(..c:zN.z\#KSlʓb|j6mx]Gɑ`XY,x߷o#F;''org:]{cǎ3ѣGsmqLdL6DIDAT fϞIG9x~z=}>~?6ׇT~?VLӤ{lL4>.]sպDqJib6J\?CxhV X01-p8Nz8p]waZ).._$//9s搒B>}4iwun:w_uUDDD'** ɟs= yzlj( i׋aRT\LhÜ&7u| 6 a7k3vX<Op=kX,֮]ҥKO~qժU\tE$it9X,ziٳJG4oޜ@hf̘1,\#Gү_?~L?G3FD4rP8IcFD'a,DFFw͎&$$Fy]j]veԩ_7X.!!}af𦀧;eHJJ믿 22w5c&7x#۷䩧һMDpʈ0b"p{}xV B>Rf!4,˅s]yW_ͣ>Jvv6yyy8>|8fbu@6Mt&L'22W^ykZjׯnsӶm[;w͒%K?> .;NDp8Uc㳄Rn#aY E%.` LB)++#222XFBB+W ۪U+֮]i$%%׿Fz\f?"!!ݻwZ:w<1~X״i|gÏЕO8jK (x;/"70001IpؓF7*DDДG!!!xMjA[DhW+ìA#JPURR˖-cq"(lڴ$C}߿EDˇڊ}¡6HcbQADD""pԇ&u͛?)"R fRFWb@4pdƌ\.8i&O-ED>ҍDDpG999|X,|>~N sδhB=UDMuP|>}p 56al߾]vqW4磏>pz1 #a`Xٳ'{x"CSnO>޽{sUjZDFFr5װyf*e~g}b  )++cݺuzG(w䐗Gxx8ǎtRPP@ͱlL J  @~~>3gd͚5nݚ@ LӤ{YL4> @uX={rϽKjj*8pѣGi&LӤ[n[!CPXXHAA!!!:.p8/,MMd޽-]ZZbx唖RTTDJJ lذ!CЪU+L0 .*2M222̯\aa!;Ð!C4M."}ڴiC~~>nwyAX&My eees~aUׯ_pްaxq4aR?tp8Z8N'-[E;v,8(** ^z 4 6,w5}'T4MChh(_|7|36lȑ#INN}]w]9m۶eU.0\&V{Chv;NLL C~JJJp\arbcco˝wމ1zhJә0a~H^y*`ԩ3< SN%,, ŋ$???ZI#?(//'""<nػw/>/GuU6Z߾}Yzuu޽;!!+W_{\{I~XfM'$$bŊ*eo*D #^z2n80 b bi׮YYYx<v;iiivmrڶm[rrrԻEIj#E]Ķm۸(..tiXV:t7|Czz:{~2ED#C=z`ӦMY}RRRBII v`Pܹp~h/" ]wiii,_DZhAtt4.bعs' CDDЄGuFJJ vb׮]l۶ 4q:t҅_U%(.ƶX,tޝݻ7$"pKF DD+CݒXlTFaӦMUnԩp6HcP[R8s@4ԆiL,jQ8ADD""pФVڼy3ڪ"(R fRFaѢE 2 L8dff2c \.z4 'Of V-ED>ҍDDFGYsV+ˉh׮"phJ*Ñ#Gٳ'qGBH ?@y7%n-^HFF)))"rAk#00&iyv.nf%"҆#F $@Q\mq鼅h@?`xA)',LGY2E(/+QFVV}a 8C1}t֬YSKKKɡSN?l߾+V^"\,"ehN;V4z9xC50MΝ;ruo>^z%/^^Kh$#pP860pR3)<^jp|MLÂ;q(Z_|1͚5ct!̛7,<[laDDDpM7qWӱcG֭[E]Č3xW{8z(.~ǜ9sHIIO> 8q塇"!!;S(l `A:mX~ۋ#Ćf Uɽh bXXr%EEEL8gyǏ'qFN'\s 1ڵ_~[4oޜ%KܹsyGq8uرʹi8p cǎDD'M#Bvf7)+scDDX|V@i֬ٳtnGN}駟&,,Yf?l&LƍѣiLnnnV2>Cz1ctxID#ùh@ aXH}~׃zzV||>/eX,Záb0c bcc;ry2_}U0dO?ٳgٱcO=1f233q>4MnFڷoσ>SO=wA}rck׎7z)++#22.׋#Nxx86ۉׯ_pt_Lqq1i2tPnʄ '11ٳgԩSyIOO0 wb0|p6nĉ)))aCF;w͒%K?> .;JDp!m={رcDEECqq1'L:r'O&++ BTTT2XbEp_2a`u|~*#6%Kxnš6mZL"ph ] ےBBB|XVJJJDEEQ^^Nii).m۶)י."Mq㽶mےɶmh޼9%xҥK=x`M~A@ݷ$$t8p!!ѫW7Z ~|"" oOmVx<>^/Q\ueܹr7a ]*" epX>NvrNj9t 6 3TDDp!7n/!"9(_DR8-))e˖1p@8i6mDRR¡>?""CmžKPPZD1ѷDDD "" Q8ADDEZidffjHKYc0̚5K=NDE4Ȁh2ᐙɌ3p\q"(L<˗+[]iJ79|l6 8cX8z(?Os"phj]{aaa8N{/sFͦM楗^bXVKD 5rX,dddpñlX,oM{^^/3&x{w2dqqqE]5\ٲe ӧOo&33)S~^FA `޼ydeex7oaaa̙3mݦwAP ]7 łn~BX,A z)++U8|0Z2UV2vX?γ>ˎ;(//7ߤ[oaÆbaʕ1qD,X~;r"" zNbAXX͚5tp8#׋aVcU}w/89\r QQQCzz:w}wNiҹsgApRDDj4Mm#ea!,<֭[7T`7|3#G;E:t>z|>_@\4INNGy$8/lCDM+O>t:GO6|v9n"}6;v7o3<ԩS rxb"##СL:#FTu:t([ne„ "p1+UVN|>oWG}I"9 ["8@'^&}7Xf~XfM8* \ヒi jԳG |5tǏaÆ*_V?9ހA +ǖ4}. ӶmS3''G=\D&;rh׮ڵ߭[GIQ? fѰ;fq_ƶ7w`9l/"9(8-τQ˧ץ,m"9y$YEEDFE犈Bhȫ"ﯯk'#$Fb-)ca88t[sEVB9GF/K),,-`;Ep"+u ~BDDp4nE>m0݊BD4rP8Shp[RR˖-cq"(lڴ$C}߿EDˇڊ}¡6HcbQADD""p(DDD "" Q8ADD""p(DDD "" (DDD "" Q8ADD""p(DDD "" Q8ADD""" Q8ADD""p(DDD "" Q8ADD""p(DDD""p(DDD "" Q8ADD""p(DDD "" Q8(DDD "" Q8ADD""p(DDD "" Q8ADD""pQ8ADD""p(DDD "" Q8ADD""p(DDD "" (DDD "" Q8ADD""p(DDD "" Q8ADD""" Q8ADD""p(DDD "" Q8ADD""p(DDD""p(DDD "" Q8ADD""p4\$~mv-%"ݻw_(߿QDD.dIII'_|pCDDD "" Q8ADD""f͚)DDj0̛7O ""?N0(DDQ0h ""5ADD 5A#Ï F 9(tADDp`e`RYߺ)DDP0h "`9Ùs0+Mu3K3n-("ҀL'&]<^S)PVir<'C`Hdbg␓I$"" H8'i⌝vrr!@(*MΓCzrT*L ""u_jV J^{訜OwsⰒT=\lPrS(P*AA "¢6ն_p)0 U%PiC "rNGjP1z?& w8.WZ-F:$"àrJE+c%UTz8(DDMXuSbs2r0O:;V*ZdF""n`RHNE8xj AԵZár0~b$2+T2*(""&᥺<ӑC] U1jL%RT>t6""gPyj=]Tyo\qrEOD*""/Nuhm'+'*uDpWUT))DD_8PiG_= Y_tW+ͫ|(r0A "rP!@+J_zNP)#PiDQ[0(DD}hTZ@s=\69~(PhsOէSF ""gp8+鎻z@pCA!"Fgp7;Qq]ap;{SDP82ώ8""rBLvC?0OArg`i!"""""""""""JmIENDB`qtemu-2.0~alpha1/help/mainwindow_new_machine_7.png0000644000175000017500000000553410753140477022235 0ustar fboudrafboudraPNG  IHDRGLbKGD pHYs  tIME  5Arӎ IDATx[l3;W;8RJQ^RJ)5oH@_J-UUEr(-)!%/Yvwvad:;k/?ix;~A$D"H$}vD"?RXM:h 5D+ ^=dR{.]!!oh+P|$/V";#_f]ێWs/J{ࠜQMG)[ Kn ~ ?srD5ѣ{@[\t:5qo=~pp>鴜9QMz9vX9s,Yǫ1uz~QG)R2)J)}J |_{q/" \& 2:}YV~ ͍# w|_o=kΊD\Iv#iƒRYҴ6tAwQ4M:,YGNob?d|:2/Nqꬅfi-[t1r M62<'ܿQܿ)rful;.s:;SAM8 z%LfI΍<&v?h@a>c߲oٶ1Ćuo[C{7$g]vAv{7+7w`ؠ>itww/277իW"o9[q AԜBO~]6?\\Nѵ>Pw>{468y$---΢ҥKKE_[%{2'g ^KxpSv62pOǚ^rC50<>X2EC,5kp9Ο?Ogg'X ogΜ>=$ >|˲8x ۷o'H{nz{{s|/J!_1>mz|F1砂gg:^L$4J|vbhhg}:Ğ={xꩧȑ#?~ukq: /@(ضΝ;yǗ"nwuc{UM23Lh YOF21DMȨ )7e߿QvIooR ӃRNPJuVRhFss3D!w_)L*tk":c Am^jllfLӤ 4fN6E)͛'`ppVR `6eq5s|_uY4 H36e.YڧeMeǣk`+1RD"$< hv._޽{9x NbϞ=K/a6 ۷qy_ைjrxκ5:oiѥ߇3wTQhtǎ8qw0ez>gϞW^yeռѢեmTbb3p5հ#bBa?e%p'47t?22/u {o?o iWJT֐ə4=ͷ! .ժ޸gumͷ,ܻ1Ȏ\Φ;L*F<ew[to `+ZQ}'hr+גtoi heo6SJfxey"SP[s}?)m^K[sMӋȤŹ42a-m1ds~hd'_KIF&Bi.#x}ζcx,Kb:EGc=QѨ@/SƖ ~pO1Go4< bB!t]4 تfpEb:C*C)77E^T_iĢAb /ǯ J-SN<ΉjR?e?Jl*JE/gNT|>&|T^ Гɤ%HtM R2/tӖd|Q]=Л nE }oUu_T{9}Ue>|Q=v-ʕ٫\w2]ZEs1,EʇnqzVpR(^EUWe91﬎ƭs93~=vsඐzsXA.|Q{Q[ecn] z\TMgPe&Ye~]zYz%K :וb7lx^U4Jn2vUb)59~91H )xŷ)WVᫀ/Z.OBJi>hJwc}WnAO\vDG"H$D"[euIENDB`qtemu-2.0~alpha1/help/mainwindow_new_machine_2.png0000644000175000017500000003133610753140477022227 0ustar fboudrafboudraPNG  IHDRW%abKGD pHYs  tIME  $2= IDATxyteoIg%@@dAQL1zqDQ A 9Q $A tgNwU?H$I >stR]U_z B!B!BC;[Bڅ EW ZC 74 Y!DGU ?7?\KKK.hժUs=8ZY!CӵK$vWx<&&#gΜb ̝~KryY~='O䮻b˖-EQ0LM8m۶5۷cga0PUXoYYYY^xAC!: Ż˜9sqQQQA~ 2(5J'G>AhΑXVLF0` ֚w9񾏥s=L&,YDFm=܃_~hcƌ!,,( +VࡇG!""ƫϫ*>(cr QJSo&P54%`-inфSd$!6N"[#+&ł`@Ѩ57rrrHMMZ_OXX?0lذ7|oK/O޽y'ؽ{7|u>PXXHTT| IIIyr{8q"-p,wPt 4Vc2[ #8Ċtڕ[ Ge!!DSpPkyC -0|4MnOSUU ::M4hގ|Fi1+o;.]g3f|rMUW]#3f/(XN>OoR6sin'$,0a6 bA3` ˆH Oa2[p\[K.suz׏Ciyyyqǎv駟HII!-- MӸӧ˖-gUA~T>.]b Q^^d`4F3׿m%02\m> V#E.O^̪wa-0xP<_~b(v hz[^T~VH4&r:Q#pBpt}*VNO0$X}un,#\}շ+:k- (H}Po7'Xn!耕kPMunZ7'B\+n7@Jmy뭷8q1!Dm6e+ohfرc !DGgcC*U0e!.VQQQ p >CPU3jso~ VBkUg|*U%BõU|_@ W!llH !DpB6l߾]Bwފվ-=&w ]fk^^wNSC={6W>ok\}oسgOyGyvx YZj ,vӻwFo"ZUUov.'*|~~BEVo}zN8c0x<Eb* k׮Ellߜjk-AUU۷/GsN4iRc0b\}ղׅmѣ仧[\9rMP/kՊ`8( Ȉ#?뮓=/hSsTѿ>_ͨQ(**"::R+\M&b2gܸql߾1cZΝ;y1TWW3k,Ǝu]ǨQ4~iz]k|}bnv͛;X|96 OGf͚5$''Fee%6m#SV+|  Fii)]tl6zWjQUJl6<dddУGTU%33M6lp}v}6y`Ĉu]qFbbb8~8ӧOg۶mhСCٴiIIIQZZJPPiA?-i 0\PUUVEE3gPVVxvUUUUTTT`ILLow$%%ѽ{w4M`0pe sM3f aaa&&ZmPUf̘w}K/:urwNAAaܸq|l޼Km6{>ׄM0fL&hFff&6QFQXX㡼ÁdtQ9vX0uSowҥ8M2dk׮eϞ=VoKNNfBQYjU7Ν7s1w\BBBp:˄S\\>@w\~ǎ׻]#::٬xX,x<rss)//o[9m"11vYn] 2{o APPFEQ%??j, ̙3Gd{p}'NDq߱> ؜zݻ0aCh}iL&C9995J+)9JNNNs6l >m۶W\Ayy9cX7} K/BuA=aYz5qqqtڕHN'lرc !D[>|x0#k߿{n4Mf1x`~ Bwu޽m46lÆ 8B#Gd޽}-͋9RQ>~wϧf;oQ!hƍ\y뭷8q1!Dm۶Z_֚[n۶MC?onvB\ ڲ[(W!ZBH !BH !pB W!pB!*B!*BU!$\BU!BH !p\̝;$MƟ8p 4yqZm훹h|M[mmqYbE-..`Æ UU`ذal߾n? UTT0|p͛Gqq1> 6m"&&Ǐg}СCٴiɔQZZJPPP^( &邷=lD;\#""9x ,Y3f̎;y=*?0SNe֬YdffvZv /--%553gr7rZmzGٺu+%%%L2y8… qyz뭤}7o&99=zݰF#_~yƎKXXXve `˖-$%%@ll,ƍO>gϞS]]͖-[b<#̝;>@.//;Ǔ?οo:u*yyypwp=>Z'c64ůr~G~~>w'Odٲe~lܸ̺u̜9^xsw}7a}VzkDDk׮h4~z|M{13gb &M|3cƌZ 66z]v7{ٳIۦ{Pk|vv6ӧO'33W^yzUk={RXX>~xK6oLzzz7t:[8p[n={rHKK#%%6IHH >>?Oٳ;wg[ly8x K,'jۇϣ*ǏgԩTUUav;L6o˗s׳vZغu+SLaܹ֟QxSc6_RXl 6lhp;_Q ^^N:5\Cjj*?#zߒj\nn.oNOdddf͚F8t#G늉ѣMjS7~ذa||榛n"&&#GԚ_~a̘1SNrѹsF?d ݺucXVV+N3v4 :TogC,жKHHԩS *m@U!$\BU!$\BH !BH !pB W!pB!*B!*BU!$\BU!B\|᚟ϴi:F0a9M~1|fϞߺ***8x p}=P-м=۩1m 4tkHLLdŊ͚rq1V^%\rNot-iyEizۓl!ufeeqM71gƏ7o&L`̙39y$nٳg3sL-[Wdf̘Arr2;v쨵>IMM%))kYp!W7wɭJzz>z}Qn @II SL,\UUyᇙ:u*f"33Ѷ>>| `ϩk׮eǎ,XǏwЫ GJJ wqsO}W۟yl@ ++I&xbQFIBf;ov:[8p[n={rHKK#%%֮]hd$$$ϟ'Ν;ظq#fuaۙ9s&[lוAtt4dɒ%>ӧ$hGcС̛77'п~ONNN>'@j.o>nfrss޽{A0`:\cINNW^sDEE!IKKkr[[nT+@Mɋ/[no߾ .w:u޶?[uyE}TPP@n$%D\s5<>|BBBHIIaܹ̜9>}`26mv"55pxeFyy9=\RRRX`K.~֓ȑ#y7j-gԩ|WL>P/^h[\Ǒ#G={6))) nߵkײqF, '66o7z-[Fee%< <6ms V_Ѹq駟$%D }*FLV\B4UTT2jY3T >?WS3( h5C\={6qi^z%9-~mKBG>*B!*B!$\BU!$\BH !D{dM a块u3v W!DuѢEe}ޏ  W!Dq}߁fϞիY{kE@YSN{5Mk[SSsф7X vݤfmtrWpUW_-4h ֬Y`6Rxعs'qqqL4^  ؿ?W_}uGUUCII frtRUUrQYYIee%ѣ(*hS@(|\{XVn~[EQ0 FFA\\1]w]TѫW/u놦iթ`0`0PUU\f{#"" غ_ͨQ(**{_IDATUUAQ= 7۷\޹b` AQ>̩Sp8?iDDDpA-iTBV\ Fii)]tl6 '*lV\ (..f =F#G={WV*W!\sssIUU***x<9s2ƳQPUUEEEvD4+WjrssX,( mݻ7p8UѬ`wNXX^z<;(l6N|8۶m###+Bh7hGhh(^zi嵴0`}y[ѣ5EpBj5aYz5qqqtڕHN'lرc ֨\o khСC1rViU+WCٿ?wF4l6}֪\;uĊ+]($$$0bĈViE޽U>!DYUa6lXe׏~J5ޞYzw͚5!D++M rʵ=;vlݭ{@{ZE+۷z'm۶n W!D!s¼֞ `0B\ TΚf p AT@tW!hB!*B!*BU!$\BU!D'޽{<ȑ#9r!kchѢ&OK/I ![)ݥ\ܘO\\L7|fϞ?&Ν$%%1uT&Oիk3fpw?7Ǐw;vDjj*ٳG'**M6Ӧ,GK 0l0}B̟?ݻ7i|^u^~Z].ǎ㣏>5^QL&S\\\< ѣYl߾n?=|`̛7b|A6mDLL Ǐ'%%> 8M6m"992JKK;z !rv( 6 IMM%))֮]ˎ;X`y>̂ عs'^{- .d~M7Ĝ9s?~<ׯg޼yL0k͛INNGg7_^ocVmuvزe III˸qOٳ'TWWe&O,GR~n6>̕W^Idd$Ѽk}:+ЫWZٓB_yf׾ !:X:dyv؁?СCN:w\S 7З{Z/z% 0uTrܹBH6.22 }ͥ{~ǙL&<Oo?+JMM_c8p`e]~ɓٴiEEE8q/I&rQz9…nIMMtҩS'Lb?&--r{9덋ȑ#̞=Zj )))(9k׮u]XV<3F=;hXϟ?+Wo׿;N'*zk;Z{/s̑="8oNr \iiBh P!#G믟B!ڄBZW !BH !B W!pB W!B!*B!$\BU!$\BH !BH !pB w"ؾ};yyyB||,!!!,ZW_}#G0k,n4RPPwA.?g̘1CTpΧmb0hEQiy@ !Zo)~&}:{&L u[K*h/rSEe>DX)i&<5MTB -)>CݠU_Z7X*V#\%LrU}:@Zh!@*~3YR !K功p U-hj54PoXJ !.TtluWXjYoUwa % *8J#ڹT 5P'O**hZ-Y:!5Ф.t x /^vx/n5BBo X}M Z,__PJ !.D^? hJ@~~ BVS{@o8\BUBWq*W!YuY k$@=t@k*vH !.dX7 s 79>J !:JB/n֗fk𳄦ք۬r !~ UnnRZa(*CV!B!B!9IENDB`qtemu-2.0~alpha1/help/de/0000755000175000017500000000000011217515416015144 5ustar fboudrafboudraqtemu-2.0~alpha1/help/de/wizard_2_1.png0000644000175000017500000001617310753140477017630 0ustar fboudrafboudraPNG  IHDR_ԜSbKGD pHYs  tIME " NpIDATx{xT @B7"ᶽ$ 9Hb=yl9 f%H(zBj"HH҈&Ǭf23=d2ַ.z{./tBL6M X,=;2۰wqAc/ҨN ,(s6K||ʕ+ 7lʘ1cͦ$''+6Ml9s\hf)/_VvE|V@Tз_G}QTVVR]]MTTOΫaXV#Vvڥn@:p*p/e d!*B/ȈK@:]#lxYDgxK'ǁdt j&E݇% dl6RVV|6e7n\}h~&4nONr2x2eo~@&++|TU 6hWb$^\H΂AcnxPnc t.\~Maٔ &qaÆ).\PV2b/[#++Kϻn݆8q™(G)CUrrr! iPp[?s8_)p ppSЪ!/;I %մl|NgxFVV撗GFF9oرc)//'%%뷂N'_5%%%lܸQ`ѢE^}SPP@^^oǏǏBnnnmjjj~ۓIJMMMX"hrDLAtttȐoIQߪ:f(BBzA'׏b}[Ems'(otQH] $QD(Cm0; -T>@  :1Rh5Jz$b޲ =!}Zy4эBVː;ۂ.RܚF3frvZN<ɤI8wWŕ5ŋSPP@jj[AAiiinX6 Au36!~`ڝNZK@D:Xu$ n娒pQ$)DKh:D||bZ ~3aRQQAtt4%%%TWWfΜ9Ұ^PP8py摞@rrT7э$Ų{_)GW/pXmH;!uk7nΝ(wqkİuV͛Gbb"+^]?qF}ݠXׯ_Ѝtwf웰֝Z̚5'qy/rիW@:))) am6}*䥇QVVJ'2"#~RȊKJJbȑ-'IBRngpJWiZm$H5x&+xH-N`Æ ,Zhrrr13(**҅-%%Ǐ{mۡǤM$_1ѭ1A>/'g 'My.Τ5w6 f6lG'k&FZG?/>70߸Q9QA/۷Ţ `\\Wᾡ +4ވ ݘI#?ovbw02:)o\&”-igVßc%tt|a$̥Kٚ$1.Th&Ob^xLNz@w< Dz:_AGLUKsZHmFZ6Z6Q@ALBd4뜪P&T^+ZhUpY- A¤}CU2ZфJL1|"& P N  Ⱥk  7"Fnx{ (DVu ,L ԣ_h *I"8B'j>(yYF,6xUhԏ|0Zs^en@ÛcOJk 5[? t<td25{ ϘZ  w>Bf^$!ZIh 7hQƓ%?t{Boaӳ,}of % td Z,[^;0:tk $ 4iDLIIII)/@).g:rz:0={{w'ȅYTpYdRSSyQYYIzzch#{^^֍NZvqNGwfJWF tu\.]KCX)&&٬?$k׮嗿%}Ν WjSOq)=iwܡO2k]5h6nUwbb"{%77Yf/p}cy==/jɪ}# W?djIj&Åˡ5'cXJ1rGUi& Mh6o ŋӧ_t-=쳀T({]u],^t}_WtML2'N|r=˹&eee^@L&Sv]lpI&ѻwo6lؠW:ԒG6C_\]T;޿_fj)'O$--]njMM 111^й]t'qW͌{'NZXÇQ^A_G|Mz,* D ErҔ4dBQO>^n6xD"rŸPˠ_ࢂ(ٳX,p7yΜ9L>QhѢ۔Y5$ 7 jCb@ ~d\N[OD5[0ayyy|'^l6fΜ?<),,dڴidggN~~> , ##|ZtŊ7:u>}<.uӟDaaaZEE+W{ѽɓ'^'--W_}K_&%%Yf5C aӦM 6Yfa2Gftڕ={0aV^- /o>/KKOaa!3fhpիWs!&L38zh󥰰3~x}рi?zhΝ;ǂ X|{nn./vK.tRyAhPW l6G-Kгlmv6](AZxsΗ_a!?~V-5x֨:  ݬ mxAe;!4)JmE%AnTﻰBy m t˜\bYw(O i;c(OI-hdf  A!B!8t%%%mr$F)IAjeɒ%7MW[[jmu?;bҬÇS,BDqȑ^(69:NWLRJKK\bl۶-br\Mĩ|s=,{ܾP6kٳgׯ3gd̘1ݻ 2o.re,z-8@NNk׮bXp8'?a<^u55E0|I֯_Ocp8xG8q"cƌ/c2k,J^^g&%%8ӧOŭZJk/d_~_裏c^ʎ;p\!s^ Μ9C\\^=z4 , >>k_c}{졬Ν;np}aΝx[yw OYY 4HoիW֭[eժULR>MRhy.]DVV/r%9O-M mʕ+^KvvoҥKٰa=V|;Թ79W\pJGu~rK^=`e~loU^ǪV'|w|!QL Bka +eA?X,n6fZ1@Ĩ; 袖h| )&mɳZQxSVL .DTd8.j/A:2GSLvWw*'s1PHQedN BPLsPNQxFn䫔P+mPHuj]^($I!Hn(<'%BzL[.?JɩT*QL G1u12( 'JŨh g_/qASVY!~pUTxE ߓR@ƕpN81u [EA)1En   BKZ\Bd^IENDB`qtemu-2.0~alpha1/help/de/config.png0000644000175000017500000005130010753140477017123 0ustar fboudrafboudraPNG  IHDRhbKGD pHYs  tIME %x IDATxwxTUS{RCB@B7" ]A?PUA]VE!$$OL2LBIH{̝{==@F2p5lU"Am l\Jұ|id1Y<{zkX{>W8][ ֒c*Xܕk;85^= HSL|` +Z@Su4^MzZYh<|z`6d+0֠׸geVӁ ZZf͚ P'F 4vqSWOTTf͚?~۷Ogĉ^xAZFʩFSn0囸|-7q=LvxG|7xxxT=znukNvo>r[h/q5/b[lY}fSҞ܀f= j8 ] :^Db yloLjh.|K_G,V+۫pԖo-)ɩh> :v`qWxXи7OG8'_W?5 8''q)-zn7sL><AG:j7Z;,BW~ݯ}<*+xlR(O_?&EsͣpV_n bGguV  :uZCoUe СC:t *V+q7p{?0eF#/SN-VctҹsgV+QQQ5~8Nk{<+Qo?B6o+*m۶X6U0;i͚5+†JckUv\M$a0I$LfoGh4"MzsU!c 3L(fdgg;NfϞMVV999ribc4hr`&~}{8P[,g.:o=cBߺ9?c Yv4+hXgrK4{V7zC{i=}1d49\K&g2i ?҉sGi~x/DzZ`i v;o.sjĀMy=|s nHC^VZE||<͛7o߾4nܘ ЬY3IJJ'@K 4igϞQF={uaX{ۅ,wRGx|F:4W88U+Ve9ѩ}p^z\xߎm yÑ@*eɀʈ`qgwNsww`(YM?}N: [l۶M~`ǎXV9Bdd$ҥKU}7lVV "&&,8@VV ++[Tt_U%%~UW}wUJ:}fZٲe cǎ%66m/*5kְ{2OܸqxᇩV|/ k׮eJ|U?Xzu1==JJZ@@@< {B)B\(^M[Z 76ӥKìzf,`Ȑ!o\WEV,Z;wãұ. N#7n$::?Cر#˖-ѣ,X.]0fΝ;obݕf20+m@{F} ""{|ʽ͛;-2໲S Jpg$<}fɯAaw-sÚvsA BA(߾OƘ֕mψy[ZZM,x)j?W|K wk HqƻFC[!8<yLNOԀrҨDy|c/aگRn]n#--X&/N 6MmAmi~\҃éiRӇgڳf14%ZwqIFѢ~p}lݚ&~\҃mݛWghv=m6%=)`bW,Wo*_/d%=Y:obѨ?}3onHc*ueU3}[Gͦvq&yV p XsSfhXskyQ3؛.7*o:?>^iT k~Btlwc{rsg?Y>}LБXVzCR9 Rָ٫|r<ϲT7?~W1쏉crrӌhAI;ew>mz\N%#(~nɛ0+rf?hNpHu# *TZ7Q%6*CNv{߽UBgro;&'X~}}mQi84Qkmgиy^,e."jn>U^pL4_P}=4 D *ŕF`ZE$V1^d-yş>"quLEcTj HMDʡ,ZA"hNKB:tȩ"**S8NW5^SN<>44{4SNG1n8N8Axx8| _ΨQ6sd\ ?8n犅 2f:t3gxg}0ae2&&C2zh>C|Aw@ǎ ;Syfڅv.]5m4^~ +|Uap dWEq/_qgx,)qѣ={#GVv]Ix_e)))h4|5jvW$_/Zh4i˱*]}o/+CUp<}Rk= ״Q-PՊhRL04Ɉ2Qsc2?1]M2j}Y ZӄʁUb!PtTBʣKd@@heF6mdD%Ap#$̙3իWߕT0Le.h]u|޽Unݔ>@y,X744;vYW^Rf0X, f3 z=3g?T`0HHH`޼y F#}J|) ҽ_L@@r LӦM~dD%モIŕ7'.1#P  &"h & &"hP(ͩY"hPȤJ[&_S_WD%XV#Jj @XXF!C̞={n9 РA.\<~ɴoߞ02Ya}7Y1t&>ٹԮTut<۬"m6Ya-\vuv((!B? ѽUOf̘0aB;Ǖ6 A .֋]Q s:$H D!\V!+P4g&q8w$ ) h @u <|~n’g @1d Bzy{=2 ӧ2f~\u)/Nz¡"~:/3gěh [xSTj 3-Vb*َMnj_;ky^\Rjb'DZ /~=OZZ:~~~x{{xx{gWmHCn0.t<΍/vᙰ\@x;sAuU:ފ13u_Zb㾿aӷ&cGzvXnZ5/'8pZGu#&=^SZ/& jҳꔕT IpY}8Lj|y KBW`i-QA IDAT] {ڰ`v|S-/؅, x@t:ǜnV8q^J]LoL!|ůjT_5AKo3TZϗ-W6ć<^ʜU_mSho|!xGDF[\p @]gԁyhM m]|0 5C7}+S(qbu*ΣR;!]rQK&jJ~lԘЙQS3q26 =G|"A-Mcuܼx`b6ָaҥ_SNj7@_534|ѧ'ŔPcV 12zce_6ܪ$%l. h2SAj+VZQya1j1Z4~t4Zf~@4Sk٥ )bVx&$װme΍f{cA lb2ljU4FȐq 7`T;MJJݯUkh]HqxhXjn.I ZF>AKs%hڛaZG=w4jwS gS ڕ¸2bN )=A(܏(S} DAMDAA*$hÆ #==8n) "%!ņ >ƴm۶ʧ~ ĉ d7{lN$%:D &~z&M7zcԯ PV-u5kM4˫sNдiSzUjX3CJt"ɓĄ*ǀWr=Q\2 !Rl &"h & V@*8p+p3p@_bk׮-saA+ڵdD4MjV "he@׮]ٳdDo4ZW|'MH\o3dҤI1 +44T^p!6^5j3g_2X8KxN:/oҤ }`EƷ0 Č3J *[BBB;wo߾N*mJСC 1f) bT6OSe|з%=J!h)))J3#G0zh.]ă>ĉYh 2XfϞhd̘1N9`{ٳk׮)U?\~]y xx'صk"xc׮]X,O?1rHON͚52d6mڰo>^{5|}}xoaXx:uرcӧ111<#l۶Ν;0k,EHVXO?3`ƍba߿]vZ͛ƍxg߿?C`0pI<s!8tML{㉈f@ٛ^=Z`XҙbV>AOz*ٓ&Mi۶>bɒ%ԫWb >#p{IՕرcxR\R)֭1Yj[oիy7U˗/aÆ4nܘt颸=v#F`޼yJ]111jՊf͚q%߷o|pqBBB4jԈMꫯr=/ӡCO,/Zfo)))ʺq1i$ׯO`` *}]vu#@/LJJJ4ٌlh`0ç ,y^zJC&vYqWTUB ڐ!C3f $$$pAjԨ. `,^/sc +R_>[n ))Iy7n\pBҥ W^… ܵiFцY|\p___/^LXXvG~/` X:q!:*)l=ZY1d V8q 9rO.жj!V%#vtn]zu8E,AJfnTmVwV֣U^NJ.dN:93om;WVE=gKH{]+KP%mڀ^p G{A oKF1{\mL2W^P<6l@~JiӦ"hp4hР&dAiUNnu]P"hw[j eömۊe=Zef5 w[ѕمΥۛ JIJvAAAAA(sTe_A`-Sh!( pmJqZ9ְqOs>(! 2ɉH$Y`W&|kq[HA(Crғ0e_/?O5+l8.˧0svtZlތF}TdjRxkBG<xzj1dg%%ڟdWqV @o7f5g 5KR/bӝ°X~R:y9Ik&sNѿ>~ZvʈNUV>[n?oVvAP57.E SdFckWn8(B[jFɓFÉsgZ mDl3_' & ՊJ.25 `c9x"=?Z5=55/+Z٫^_u%Z6gF-w{NDZO'Ѓ[˼ y3-'9Q /\ӈvMj{ٵ7k47]1Wjs!5hX͓-3pLZTSgڊ眻 ”1wdt{'R6CURZ-3SB5{F"jo|H?َNydL1f\#o+[ posq}_{%t*PMF'N!scE")ܼkW;-ZY^֛)4Zh* w7R1Mxxժ1,ԓCדcd2;Pt Ym~>vxd'f ju{4qxաZ3ȗ'@lxMe\e_jԐ6 7>hƷee%)ȹr8tOj:: FR+|B@N<`CQ9o}.1e,݆})H+fG`d[|3N/ܕ#K?=6>RO^Zff?DKŁ:;m:lU#aָi;t _|-'>8JAA{j qqZV3WѠ {ڢ@xEcPYU¾I -Сeo)3?IDJBS9j[Gf+6fHo3nj4XM&rs r sqwDFf~~~X, ܗy{Ѽi=֩&*+?E`A@%lP7R'V_5pRs٤-}*m dG9Ty-qI{ߛ0)|]| p墅86io\jbadv*h4MZO1peFݧH ^tZAw-CV2-jyG8v7`^~d&Řjfx h,VO_{Zu84CIz/WǧVs.aIGqC=Zk \s?ƤAw,,<kSٗOa̾l@q3.nR~ %] ^~n^o @Z/`C /&דduev7+\lԣlj6ظZ 2Nv[w@] [JJ._.ApII<!]j_p2GAnqqꞫI!9W: q4Aɕh laND=YTc2[͉&,! lf#f9ohBz-\r.cX^7jwKv tPYQk= 'wj ZsPh78k4p8}]=B)l ~gN-9 mP}P+=fT7;8K9B:/}PE S1.$cL._wj\!)LpD@UK|2`J}K Aw@XFY:ǙJ Jyb)4Cf2_i!o PbWt̊ԒՂ BZnA*(4AA  BAЦNرcqqqDFF*Ay>KA(}w:۷ok׮yf'fh42ydz=7ݻ3<ٳg,Z///,YBpp0̝;/ӧO3gF_PP,\6mpEƌÈ#MAV8,^VZp [b#FF3hmg7|86m|r.]J&Mx뭷HIIaڴi|'2rH-[V"66Y+Z~ h۶IY6Eo>^}Ubbb,K+M=섄ڷoHKKG۷0nŏ+ǪRL b0?IuGM콬e׾Xԩ]z BlGlv݈B+""" ajՊ]vx{ܹ^{XNS楗^_~i@בf͚od:t@:uhݺ5~-O>$?[wa˖-7*;vp;jU"+={vy駟sYf ׯiZ]& V[hkxb=jU>[lQ-..~CϞ=Z;v gOOOW۟O+ܹ3`Uf5IDAT\*%LiWڵcLĔ)S9s&zN:1rH4 & ףR2e Z$4iFQy ߢhٲ oq={6'88I) 83fhxw8sL~\ŵUV.iӦ *%qGfOOOꫯ0͊2 wQ΋[_~!;;44o޼(h"+۷oJ"00}Pm6/μSTs={ク ;Q@@wz^pp0)))JάY|۷/6lp֑#Gs]`tڕ'RZ5~-gh46lؠL){gJRw%*Wt1 ;eϋF*ZNFJ/PۛKYpJ+ؔ$'&w%wvfUiUc*3:Cw߹{vvrrrӧw¦M NFEE1uT233 m!}㋳L՘p/zKI&]4p,>W!7cV6ՌiëO"((4Oݖcb'!>|X2 cr,BֿOsas[/Ѡ ͵iט>2___aJ P UW`HKy~VXXff f4#&,VZ Nt(4RдiS:$' UM6Ѵi[Rh=Mo鹅).i B9ҫWJ )Sa]e& mMV|A* +Qrd+AA  TQ؏)=*G}^ZCχʆ`e;v,7o w99s&MA>}ؽ{wIvv6NJ[1]}u(scK/?E_E=ȿYS:tӽcǎ1mڴBɈ',bTtcXnoUBڴihԨ̚5Tt:˗/ӓ 'k׮U/[ݻwӵkW &hd…iӆ/2f;FiӦ Q[,yΞ=^gѢExyyOӲeK:uĉ]?shiiAkk+Q[[ACCիq…?hBw} ްP.I}Y477㣏> 022l\r>/V3Dh˗֮DĮ,?dBԶmpuv#NBرc} /~FDТ60h^2Ј$ZQ$EDD 4""DCX(2'fQ`qbX8mjj ;v.\"۷ﶿ_|,DG;-7nĺu I~X"@L\.9rC ס%@}wx<#+\.ڵ xll0Ss駟ƹs8p"8V+{?gj-{qY+777!nY_矇u 8p%%%hjj UV?c6mbD h,NGNBcc#/^k׮ncѢEK.W^0jkkqbpp0HoVHv_~%233k.L ε./ДB`ٲehmmEnn.l6<.]LBv[Q2ЈʼnfDIʼn(r$""FDD@#""FDD@#""FDD@#""FDD@#""FDD%"J1Nyyy o ē<Q_#4""",`CrF;?b9un7;@^^^žRb*lw M cBGGNo&6n2011әhD)HrssqvHMe]Y!`$)aFp_/,Ϻ,$ 4N !J!х"nmdd%%%/_ƺuz?^f~m\MZMX,cttB9s;w [hMOOG(Ο?N P$l8^Í7i~?bhiߏӺ4@1h@4ЈRvI!# N =D@#J_6/8 !A_U2BcKI!7~Qs S_E h!FDDwjTGDDDDDDI(p $IENDB`qtemu-2.0~alpha1/help/de/wizard_1_1.png0000644000175000017500000005022510753140477017623 0ustar fboudrafboudraPNG  IHDR~ܨKbKGD pHYs  tIME $VH IDATxw|TUǿwZ&Bo1". EVA,e5⊈*uW\Q* º*ARDB/ J O/c 3L I|I{i;g_ @kS [xghxtzcV^bʲZ5Oe@Q-( nkHZ{SS/7wpp (-'RtXTZFgӊZ3ћq+cQ.TՍVorpj<.;`kc'gBgk@#5 :tti'kI:Vߠzqm’9ko(deeb JKKC=RAUUUy}^Uˤ.c?>0.hjEEژfOݻWUUUP+**T`&Pt4lݺ9bwލ_xZ#dM2~y~`085={xزe wqGid$kdQQIII\}Fv޽iP.cEGeX,z~l6;$d2lc68p`t=\2L&m%KMSNaKOOُ77&_^'ĵ)&%%r'q40;mig 8o6rUu= (uN]_ O[jp!;}b;GvmCSxsMa p_^ʳycT/]#Jmg!iM??짇r;KS]Iʌ>ȹ;=ݙČ_Qt nGuzSAu;Cl2( 2@E]t"dex64z#]q9ޥJ́~oywu(RQQѦzskiuYYgF\vVTT555!qJĩԊ+ ĽkMw}.VGya'W>^_ Bv{Dɕ1bcǎm0H 11751LÞ=i .amՍ[O*˳ۊ_cDztRF_ݪٯ:EEE|ji6춏4R)FJ#Hi4R)FJ#Hi4R)FJ#-F1ldffeggM 'g#l<,dƍ|tbZ >R\\Lii)TTTpqEAUU'f| zVѡC:t@.]ׯi'>i?-l"I뤧Z<ŋS[[+uOk͐' >RC bH1 ĐR )!1 C bHA )!1RC bHA )ĐRC!1h?t5LKVVKff&SLi/\ȋ6HSDf3GW^f֭[رc1LlfΝ>+V`00|'_pCE񐔔Dff&_}-!쾪f3<OHOfcs|dnQ&Vps9jK+ާގ@χʳ[[ψV*u*SHzb Sw%xV<;&WUg ?e/f@H͐@wĽ?8Yu#tN ف/~`y]yz<$o#C\;5޻>&*=24:C\ .k .k%EbKY{➨Fg@U=(8^]>: ^mT n]t"FiAoj=!Ik%ziY;l Z!W9[l}'7b^ {p3 #~(o94ԢD -r*}ۇ(ҹsg1bk/vQrހѣGruPΊ+ʪ+eekvts$''eX^ܩ4*0 z{}999 R7'Vk2\g瓟=|?=Baa!n8h z=ӦMh442]M_|1[l Ŀ꫸n***B;udɒ@ZNGnn.z>}RZEE}]YO<x+ԩS!77{7|3Xwp ;nܸ,X/yϟd )0_~嗒ܽ_be߾}X,?Yp,z}xA3[ڭ; 0 #))I y@9݄ۣrMr#/*|nu5}N[ZΡC/wA޽ݻI-i+cr*}c#;6J@Q FĈCiߺ Yd &M l/\~ dN}Zd#0{lkFTTXp\8:vHQQљ3b߾}Y|y`[QQi3ȑ#ԧ W^ afsH?뤎{ThȽS' bDA(ňQ# bD1 FĈQ(1 F# bDA(ňQ# bD1 FĈQ#1 FĈbDA(1Q# bDA(FĈQ#1 FĈbDA(&*_Gk0%;(+?<QZQM|m*tBzz:7n kj_lgfft:9|pTUm0m۶5~n^NG t:8q"7%p8mC- fժUp8ٹs'N3n~^}seܸq8N<@`T#ʗX,fd25_FF3fhR~K,!==Kv6:OlGz^NF~>)xMUb4⧟~,Q-zm N;TNN6/T]Qm5I#uyr $)!h2 J\ P<:U'PZ_F@NN߈snԊ[݀ͧ@n!P2ΈbJUBQOw)2ipHSO\SV.Ӡx?ͻo2BD 'N+7GQ@EUA^d~Ga uU%fK9>kP 3 HM!j4:?gsKݻeܖq Lbb"]vEitM3usq9X7gżrKOLլ3q|Ł]3 IHŤxUn0w6µxTfʺ90i=\[Ί10mE. c9Nxn0ͺ98crm"3aє>ށ4߾1oߘI4aԃ|:iZh ~} Rv}H݌Fg@qkA*₾}۱k7=- @=4'|jޗ]Q . U.F 4XVh4pvh3kꆰzTA8s( +"FAho,Y”)S'Mlg! ™Ӄ S5Sr8x`H`gϞ"FAh.EUF[nnV+:72tP 4W_}5gl?_oEQY`@H}~Ecǎ>|sk x饗?ᩧ I篧=;ܬ,LFGeÆ <3ܹ}ĉ_; 0z@?gff6N#Sv];}v<"|;q;;nݺѱYv9܋&NLL_]kjj3g;ce7J\_C\hEt0کR[na8pTVVb۩ ;L [5ϭy=I4NL\\" ByԩvZ֮]ˬY4i6m;`ҥ! nƈezu68TTTh"\.W d2_}]6m_'pz=ׯoCt駟R]]Gaܸql۶'|)S}?~ر]I}EXǏ{᪫raq:>ϛ7Ӊ(Z ˅Froꫯ "H.h2=z4n;p!1 |WTWWj*ԩ rPUfc.]h׮cƌ|q\̞=8:Nn& ҤׇRv'ĉzVKUUU&!!!dN{M7>[tiȼ[ZLj,v:whv5ϭy= Xj(JJ 7ʜ,{Fb꣪^-~X(N01N FUU[l=PKUhA(m@@0H/ B3 n_DJ\n@<$Q>k"! x|"sZ TWw7:݀m;}|BՆ bkŧ#O_U%TKME/bAGVZ=;EܿP!@GGĻh\յ/ њLB,, \jkfIcI J φwɛBcH)-Fo.kx6D2+5Z1 tn0&qυZb0^ Gc4n0jllqb~)]RZ]:9jJֵ<\ g?|0m Lؤ4 G;?b#ޥg" QѰeS>;eǶ#lr*0La oF\܇$題j' wۺZh׏_ȼq짇?g_w]û+}enW[ٲ7 KyTn3פ:{ ˒._p;4M?syyz6PyqcXFo@L!=\q_%C zO Op"3F=8{U Hޟz@4>MBi24h5tOM!}<**6 Ӂn*y }\{~|e6//gH7-=G*x8%%t2$v9M(bN׿N!h 9묱LMnIL`.уXHc;B"%<]OƗ*md͗7y|s{텑!}OppEBhW!LJ?mZߍ`).r\^7iyy5EǮ]8vX+E[kE8FEh׃lc w1ɫ6pH>Sފn9Rдxnjm/7_ʿ, i 3zQG1гS"߯ xۣU IDAT! ^/ xf ߾1&w}p4$V1} uYa5cf{^@ C UV+QF#*Iq4WZ+1urhunӆh0ĶERCB'eD%tQ]FoD3qDGuq`.:.P!-{ev8jAVaՃvhu8-r )Vo#E} )Ɛ EѠM^qܗD{u\@.se|jtqc͈0q]%!XVEʌs¥P<4sGP@iCxdQzE%tlF_g;i^u-Әs<1ruqKp>&?:.|cQzeSַLD%t"OTS'DYa!mkѾ)V*:94[:#&- 'DGM)g/S7{OyԢ yG D BA(-&1*''+BzL|YA]o>yA8C Q A.>|׳gO 34CUUz}_< 4>|AJTTQQQFN'nUUElݺv @TA.6'6+te)$55ǃd"DAhZ-dd&MTUFer$HrATUt՞yQQV^d;8jjj6%VX`ӧ7ז-[KC=k.))ޱ'go+k71>\(JǞ,. t*بPVZKqQ5EՔbSScFQL&FbbLL  6W_}Tl¼yعs'xꩧ`(BVVSLAn#GR[[˸qBo66lgaΝgϞ 2SSRRBee%YYYL8kO?( | ~!ׯgԨQ|WX?h駟&''[NEa=:?agk.0 bn~mE IWF⩧c˖-asNz@}WXXHEEEP<Eayv( 1 ,@W_φm.S~il9B*J).WkQn7QQQt֍Ν;:8}t/_άY(((`rq&L@YYY`Rh3N<~1--e˖xի^Y?#!oNzzzH>]tzK$b222k͟'#OLLLH\v-+WiL~(++ w>lFpw رc:.pn;uih4 zLlNTUYPQn\k'dP]]իYz5~YYSq]/=3k,Y”)S~s48p_p`ڵvw1QZ<AM 3؞ U8󨮮l6vZᄚ{3k ~'+3'q%@PMcSL)($֯q Dakq{:v̙3lTTTrHMMeȑh4jjj 9fȐ!"DA8F:wcŝϠ B "DAh!4f͔)SXp i3.ʰ \JsP sDAD BA("DArZ˓^(&Lt2qD6mDnn.#Fvo޼3g+bn{/_N~~>dffr9z(_u娪> 7wa8Nz{TUnc׮]8ߺnf3?0.Ieې̙Naa!=zu]ڵnݺ1w\-[IKK#++ vy饗h6!v>sFEZZZ ~ɒ%vuҤI!q{tЁ\&N`y|QN3ɤIZT,YN|n>\.nw}E}G}T/7{)x0@)PՀ pkz=bKkzu>}k_9bKAx-]-և"Dbb8"pꤧO^^^_^BV|G<-E@-Ç-M͞ A! A "DAhԻYcKI)bKBްWfDvJA8=Wfu$H0UX h 0ɐV"Uxט@-޵."5֍wAz>#`E]k ߶;g$X"T|z7! BBg 捑vqHGU LlS:تOv][sx~nO}P依2;*,R|Rm\͜/F൵Ƿ|"R:$ȑF1ZZvF%)CɉN`:Rx##iprPUEiv,?_>Peʒ٣tX=E͎2^{͠33 .a~:Xzmgtֽ}㼱(w^ڙWvcև{`usϡ֙;vұG/lO^A2w=_Hפ(" sϾB I1z>PUCe6f-K)33](q2}^SMm0 =(/(fۆJ:3]<{C~tJ04>8:1o;XKqTb)ca>+)P4oH7|LF=8p6b>_S]!ۑ@2'Dwv#>{S&jcNQilh Qz8.zt: .͉Nmݎra61 $!)o@q5D{]ӎVWx{\ɽ׏r͏\4?w_ۣDsGg4N6U (zgvGvpegT.KGp]#B`BAGN&2n?f,bQ N'h{ײ11k0у^?$*#W޳B׏.d)4k>0 w6UM^]uCB'3l[M2yD%uu]^ȽcmpX..YB)^DzaMzp>= [tk(??G=8^ލfY gWw&1LQ *NHcn Zfs`8mvⓨ&..ǃR/B4Z'Q=zv( ; Tv$&s%WGFhu#Iu Heo}3FnO{suڊգnWks)7rZ݂jc|?&\\6sJs{uuעPQQƍҥ &Etb4چ;(І0 v":ƀd :ڀ1ڀѨGoТQ\.v ́jub5۱X?qqq z=VEѠ(JBtbccqԠjFQ>c>cnVnV/^ @VVbŊ|#ş,iӦho߾ϧNc\EAQt:}omNVVG )mj~=ٺ%:O^Mmp>$֯_%\O<@BB <#8YǍG\\\cWXo7ټy3nRX,&Lh$===gzN#))ٳg^>}ttЁz+l*̙`}=\w(\EQoK\\֭kr-ZDRRz"'''l}:#GP7|3lںuZ lҤIseAbb"8"oE!;;;p'hrݔTUno߾ 6q5p\̘1d񜎔_cuns8܅vb۝;wIShLsyҥc{ݻwkw^,IdVU8cGʩ4SYaK).jJ)+LUJ U+nsp8qTWWSUUEee%唕QQQABBA1rHϟOFF1c?8˖-cƌfڷoOLL N^zUV[(//_~9iӦpBv;v ?!P\\\ǣ*((( !!nϗ_~Iuu5n Hjz<N3\ؾ};#b}֯_ =~QSSe]6zTTTЧOƍ~))SpwrM71u԰imƌ wa~ f׮]!ywL;9sc1c ֯_ϳ>ۤdaZy"ӑkuvb[֨M"X=ʕ+OYM9z!~m˩7'eϓ=RVj8s IDAT?PJ*XAǏURxp/@^1s)*l@MTT:N(\.V{{n:uĈ#5k~-~Jqq1&K/; 2^_,+۷/7|sU<m%\Bjj*SLaذa'?y7n?>pFj׶m())AQL&S/͛#!b}uƘ1c9s&!Aԥ6}G$&&k.꫰U׳h"G}Ӻi֭xݺuk3T5r8+\ ǃzxT<ۻQxF7{8p8]h ؗJ.]FQ_mCA_|1+WСC۞^_LLL n| :>s2d%%%|sJ#Gc0Xf ֦SAhC0a/??j1͔`00(ȑ#CN'111hZ&ᠺ#p:[A ߏ(tVdBUՐqqq$$$PXXȱcHKKtp8hwm ysӱTBn`T+`+"uC'r}!NRrq}؛1XRvNmhu}Xtι/l4il?d',.V4]%UZZ;w*_~.^'FMӔц _P(_IK4MS6mRUUQ"WUU;j E"<~_GavK9rD~ ۪|F555X$y.VEDQ(@ d/S{{;?( vܙu;;;T[[Ks1666s@Fy?7 !,Ka$?k޽:vXrȈ:Çs-`\ iS)˲4887xC?& $ĉꫯGDqmLeY2MSzw%I۶mScc,ZtG}T>O7oVoox≼@M6-Պa3H>4%LyuuuiϞ=L۫s Bz7uv3-[$/Go0x<窪* /$ϓoz璗Դ lNoJP+lKo obYQGKKN:1@(0Gz>O---D1kO>(@ E"DQ(@ E"DQ(@ E"DQ(@ E"DQ(@ E@ E"DQ(@ E"DQ(@ E"DQ(@ E"DQ(@ E"DE"DQ(@ E"DQ(@ E"DQ(@ E"DQ(@ nƘ>O*~_[,FϨ() j׮]z'  jiiaWid٘Rss",˒aL 4[0\ٹ45}lD.utt0 {jllӧeqMLL,;Gvڕ}XLsss8$M\)2^~euuu[LӔeYL>?cbۇc)á~߿_ijjjJ;vP(k-ҏ?(0t5444͌RSSLܜoߞJ1a駟ѣ駟vqFEaoQ{{FGGuI4MAUTTh||\Pyy~wP(H$ZԩSt=d?,ñ_x\anOYYu1IZ ֭[e˓+L?}z!!כj|z)~}wouyԨ2ܜ>577kͺ|$ڵk,K{U,̌,ʸir݊F Òh4*ө-[hrrRӫMz__TCCUYY)ǣzK=VΞ= JTq0 >ƍ{nrQQtlsHr>=}:sn\kϸ(h`P/ =wx\PhOzd*++U\\x<F5;;;zQii^?~a\.YYIJ^L.+s9lnn{dD9lLυww[N>m< M9_wKR\RLRTRxa\[s)%EF|aLI`)vabՖp'/\?YTTi]timD"E"E2'IW\x}IYsx' Qĺ 锌~98$+BgCVݭz&Ɖ'Uú:OecttTuuu ݪp"DQ 2۬ X\(E+144$I1PLaeeNa\^^IE%H*M% ۋ%yka8Sn3Wv+Ddty]?#q:FXS2#JѲy :#DDi|"ҡhڈi񹈶ĝbK`bh|-p*H D#i#4լDi_KQ<ŬY'H/-]B@!.ݔG"IENDB`qtemu-2.0~alpha1/help/de/mainwindow_new_machine_1.png0000644000175000017500000013040710753140477022615 0ustar fboudrafboudraPNG  IHDR]CbKGD pHYs  tIME $,' IDATxwxTUSAЛ"AW4%ITd$KQܵ+,OFD] HWABi03ɝ1K&$ 33{==}{*\(F7zdC={S;`Pzd:V60gc1)Xw9]x`cC$zvdoY(j@C߶͞Ѹ]=+ D(J4]:B#Z;PW |rz!zwߍ+ 6n(-))ãœV-/;wxqkHM"+'VEf3 xÉOsl1 m۶{Go>n6,Jx]y+NTZN}_/~U,_@N N_pEL"}1p@._<>XL7e̘1 F8[L?<}ɖ@zz:YYYzn6<==񡬬i-O/WFz"kqjI43AYqqq6ƍWc]ti"Ҡ4g<<<())!++ ???y;Ɋm0xW1 !I>($ټ.+fO>m-̚53gFK.M˗ϬY/֮/lShũbr{ǵؒ$)AW$ҩS^ϝ;KĥdC\-7&;fgC1Aρ&y\z=FڷoO^^WWW~“v#@ףRd\Wݛ<<<ضmCW\Z"l,-[66Z\f???I6iz;aooo{9XBBB5v5)# / [Zw"˩v8;;ۜ\x1FlvDT^Cբje!QTT丵X/Yh9|0&MۧJ$mƢEشi|O<>KTT-bΝ<r|/ ##ӧpB8Cl1bDo[z^bDDDDDDh4ݻ:п+k-_p%U[]v%""x89/2eJHZ8`޼yv;].]ʕ+5FZhݺcͭv~v7%wfƌuOݻ[Nԫ8t /B슩\W@E,,xU 8 +V59Zqh4[lmtYy'HLL9ÁZb;$؋,RUY_????=ztT9}4͡P5Tz2mͅ˽Zct:NyZ@JJ {fWuvv!E$]<% gL:Jvg>>LKرc'OhZinV؀<Yh TgWy>I0%%žNXXp֭[gBbb"f͒_U_M92ftuŮXS񛊸8.\X$IYlFJ,0KѮ]kAFFeee&ZE(Jc^gۯiBݻԩGɓ'7̰ٙ[B z BoP٣ %##A7vssC$z͑#GHMMb 1r.Tr~q9NIDc>[dooo*Rrrr|;+N5ٌ^D8" AFa…6#[m^K"==u9dCOO V-@BBL&yn7|9qs̑C$**Jn>}\+aѢEL&Ξ=V$11ķ~ … 9q&MuTc-֑q1p@BBBˀl[~u+s-8?YcԵ񦠠={x]ii)ޜ&#͍K.(+zzkLDnn.V5Y<' 6H'bccYj}>cC-رcok5+['<FD넛;w䥗^~>s,СCoy ,{1qD-S?ayx{{#w<&$$kՉ"I.C=ZL7- ,rȺ}}rqfzDQ['Z" nq$D"D"D"D"D"D"D"D"D"D"D MĠAZu"QpũjdIh4H,+ -օLD< @(Jpe]1ƇV hj9^0O>/Rg%L.>"9JC'-s{6Z஀(J/QzR^ho=wt(%ń\S~;Vmw2}S kfT]nA]dr[,=֝X]]cn lN),8 ~rQԛ=]~t3EN51X{YOOYYK.x `̙L19Q/'74=߾nU2wדg 6M&;v $$Tj|qqqV|m6BV"jȮv#O5Pیj6`0`0;Bo%I?^^^o{~f͚%;pAAAeԩS+$f,N:U^j?s̒._ە=ҥ -Q4 Z޽{ 6X*fK O5 wݺuc˖-hZAΝ1ͭÍ߶i#_~U{bW]H0''GfWCɉ\y5 >ݕαcDŽhlD6mK7_5RYB&w|8:Fͳm޼={rq&Nbϥqrr *WjZy^ LӋ'q kĉ]GyZwy,Yۛ$zRRRxWm:t(*m۶1qDk"##$3f6m?ܨ%IR ̚mfB]1MtH-V򼼼g+..۝رcQshb9tUkEظq#`uΤ?[kXUĉ-\]v%""6_|qDFmkMVj.4-XzyT[` 6cްmDs,#5d#jԈ#Gk x?/^LHHr;Qll,GGxC=C=k&r)5"?_K"Zդ`m~uZ>ҥ򢼱"G7 ::ZW?,,I[neΜ9r0˖-c̘16q,YfΜɴiXt)`ȲŚ6m˖-gYT={,>|y:kXYl給37J*/_=t-QkZ@BB !!@B !!s[{r-о}{KHH;vآnEO=?f̪e3^u#Mi4ATdg._.bĈ~ߌ1O?m۲xbƏ/2 44˗ /СCjZ>.ׂ$IuD quužF<%Ajۻ[dFXlڱAtp%55N:OFXXW&))7xV^͓O>ɛoyYlFXmDZZ...899#GY899h"6nȦMزe 'uCφ ֭SNt:BCCOt=ѣGo4ao#FF-4h|EXqo1NNN?~?_~Iݻ7111\7mHFt:"͘4&BC- mf^d⭷ުvl#fΜ&=FAii)ݻwK.dee_СC9v۷ogϞpiRMn#;Fyy9{ۣT*t<<7mhV?i BB!!@BB !!AAZ ĢYNmE4WۅL`-o0^yz †4:f@²uy (~Va8U PUڅ`6e@9`Y#TEQ}MU9^0iZoR|í.Sx+^T]a ܳ.<}z.sЕeIa '7%@q6BvE0Ƨ`|g~~"}p8%[wYwD߾l'*g=~޵O 9L] B++7q(jg d_*DףT;T;s2~*(\7"B%Q?3>H+=~P OSY̓FdJdj>p 5Ul6j59u:j}O)2l߾_~]tm۶~M&Fz?n[/)y tLII ϗI;j^WtF7e^09.^d m60`}Q9F.)d4wQ*m/nņ%iÚo/V6avQI2hUΙ2~O*fA-lٳ y3 .g0={DPTTDZZ*L~~)J(+3h*9p#%W⻣^ĽySk|5]Қtԍ-z1eh 돇\eZMZZلW*Wkd^x:Dqq1iie>}Zb{z(h]m QBnoo:u1ηbyyS|ļko/l+ Y|||ܹs5駟2d.\ӓ6m\(Μ9CVV撑am'Y0dޫUcwx1bLX1+&A$ gggf3ڵ߶Q2**4ǯJ>}zflYg} ^6b߾} 8n8[%1cP^^^!h&Aj%ahWFL&B8,ٌhh4'M 8PޠB0h Νȑ#h4ttAl h5 QQQrת5NGdÆIN"55Z5[nję3gx+ yMѿ;ݛ޽{s!RSSl6/c0غu+ ͛7٤Vgut Vڮ6J>9 nNpshAAAƬ]V~իW롮E#̼@ooo^u,X@xx8RN&77Iݷ Zl2|amu  ZL=ؿ?`Օ՞-""Ş΂سgÆ {`0d &jɄ`iJiӦM 3c ZU"_~Ʈޖ~ FDDD7+*22k4xMvH+h5Qe>|8s+٬\+V0heQF[o~zVX!X_c^-[n'0ҥKxy-N_pjC* P }hZJkFԵPĂ]D/Ǐh4SOh4Xh:tFuFd41̈́s& hokN}Je)_A;w2 M4 Y$,C-%q-۵ܟy?~AJ駟&00իWWTFj|b2gzڡavlYx͚5w׬Y#?53gΔނǾ^Zj uU* !!@BB !!AA BB!!D8~8' os$I$Ɍ3tÏhF(L唗P*A }Kmذ^w=Ф+! z?ѧOS?BG?B~D֝Vܐ$QFq)N$I?I=z4L8񆫺6yu֭ 2өS'شiΝC$>s֮]7|?իokW_N>|8 Hd?bH$!FB ==O>3f#&L | G?B~޳,m1\gK{n.r4ءS*IE$I oSF1DWbQ7Q(T`sq?_亠ttٜF SNJP*}*)ٞBX=jjgʉ\?w8EʺATp-T:aFY8)ooeSH(_ߞY)K.a`~xAA: 7ND\^7a>ӋaL/Zk8aQrJt\ihW %[ zqq#ϝrRҜظ}#Nz'P<񗉍=X6~h]7ləo~v_s8x87<ӗP(QԢ]w aZhg3?:[ڵì}3!,|,{Y`O%+µ|[XTs> %g4T;P9a,+@J݄ŀ (ҜԻs'N&رg$qhՄ+HXzrWX&$'hj+Wm9 LRzՏ]*DiizAQj<ٳDGG3sL%%%6й3&LWog &&̙ɓ'E' Xv-*.dq%r+kϖ-[8p JwwB@@;vGVVOoFV"n4_{PT6&keWQdgZJP/Ք*0"ovFiiiPoB2;ˇ{sLx;w6n7?.1ym>gxxx5pr*g(wzR*9arNKjq˗QTt֭BpҥѣtWWWڴi#z*_aj5݌ƵvW)̚=jU&{:;}B_f<\L\OCWq{yyj1Lvϛf * //}\tK.1vX Dvv6AAA6/H2ҡCrrr(**sу_\]]f2Z-gggqqqA{Kh$;;IP*r3҇Z!S*8;ΆkS9յ4 7 _TkC >DV|O]HOOO䬠ED he2u  VMfZ?dɒjn8[o X aA!puumB;wFSm"h4 ={<5kV#h9 /|@ff!GaʔE-l!LfF,p3gάvzj 0l }8|0}AѐΝ;kLh4z+رcjQQQT=rHh4>}ZfpL.˖%8؟an%"/̜|2iӆ[ amw={6G#""[FѦ/;,"P]vk.l׬Y# ڷo/ۿ;##Cet'h> ]hX3230axÀZ{ήqqqhv4fvMŊ[Y\\]Ը=f*haz(jRe1L( f<=|p!9uA⮻@ii)>>HC +"B׳}'H/hwr o>"##En_-[aS^`ȘZXf 3fh0R-ͪJLF ,̸]5%%z2$\K+jՍ=9%%F!bbblFb4bN:e,Zf = (/X 53.okJ`< v,⛟҈[y&`igϞ63t:;wdРA&p(y" QWj)f0+4*bEg3LӟwV)ɗP7xl߾0ws=˗ɡ^z>___._;III [!C8f}ԩjcǎ8p R>`ݻ!C?ܹ֭\ʱc -E];I!1c*Lr|od™ wƒB\,oFWWW}YFҥKl6hdժUF^}UF~Bȝ{ Nii)*0 |'̟?www$IBRa6qvv* WWWF#'NwޡK.7B땳Q8~ޒO'%jPeL-' 3ׯwZMAAf~vt[h4]I:!IF^s+sG{b6qt _ף+WP&ݥP*‡CDDF$y)BAhh(899U,C4јf5ѿzscAG!EϞ=HyԢ Dbb"7|siL|2b\X3So @  Z=zGV;޿/ h54G'$?#ɖXp!6mB2yd222:t(>('Ndܹ$$$0}t6mڄ$IDGGs (O}(B!{WÃgyիWfrrrڵ++VݝL\]]>c֬YcIRd"((tvvM&Y;?> n,BTMC4ć_pV"""lFd 7Brŋmݻ@,#p<4i'NhЍ~i dSgΜĉmY0k4ڶm?9|llu9T}Jԩ)''YlvÇiwQbw3( 6CǢ^h˩ԩ} _wk^^^fօKP@'&&h\cau'L`s<99ڽkcժUDEE5k {T~ږwVYl޼@~$$$ؽ_cQm5  #Re8J7"##|m۶_res+W$&&X/_.^p!yyye̒QF1k,VXAx뭷0Veijr!+++ ;;4~rq1vXcVn[㳾h*uJ~Č3*]v؂өn|%j@(@ B  !BB!P@(@ B  !BB!P@(@ B  !8Ͳٵk >q5}˫qsX;v¸qlVh4$''vZ4 {~`ʔ),XHٻw/۷o'$$ жm[le˖ WL+#4嵮w^F##F4fR:t@8 T1w\ۂFGӡT*K!$I4:FQ7nwssG3PZ*qvoچ:/SZZʡC4iseܸq̞=r8x <@ll,cƌСC̟?7r)N``L>&߼yn@/>-q*B<]Mae oG!yuP"b6l2N:1cO?eR$ Rhsμꫲ`0rJy{DYYnnndffV [VZ%,]+I4-x0|_4X!|||ٵRE=K/׈uC2WB~ASML||Q[4ȩvHMw`ꄳA!|ܹst %Kիy#<<˗o>nvzE۶m_g~L&<<Gl$޽|o߾,]S7W_opBQZnBr7Aff&夥QXX+^^^L2cǢT*y׸qww>($I_gذa3R7|_|B-V7p8ªÆ cu]бcG4 6l`ĉr!/>c*"""I~ IXv-$hBp bfڶmKYYQQQ !4!\\\W)yvR]}KHXPoڡC4(}`dbbb`ذaڬfcǎa0HII-X׹hLZd]&ą $&ba(F5{K!~]&Ҿ}[L&Sh@CMm!D?p~tQPP ϑT;l?+wu۷Hii)O=C *>ӧ֭cȐ!33fΝ;ycԩ׽ߠ9EpB)uR9^ཀྵ+)UX+J6zLfEuA?8E%尯 E#ܮLf9]䶠HBztl[S%wC\.HAQBVJ#B xGWʘ릤_ ꌡ"@qT>WQX))* 6D5`UEQ]kGqqGo"-+~yD=V}OPp?փo>NQ2n@JU2cY=~|nڻ'j 3w 2>#>cmFJT t( .?$>݃0Lֽ;/^30#i `p>8Xʾx繘_'ʭOm]8ys+ðyklweT0]r*`*WIJа1cF7P&SVVFAA݄|5 a wϟ.{Q-`u-"4IךiC:z/`sxaǻ"25@ګIonMf`w @ɓP\#X|=]3u5K>##Ԇ#oMlB,P]FV{ jJ>Y>>l{Yp%l~[AJqeW&TV|@6za IDAT㈹򁥃Jг:WW0"77Vwb &B9+R'wPz`ԗ`2J(UNt8{PP/JuFinݫ'N&4J뿤FlV|.c.j {&C9jrvՄp$ʝCV\#!! i&L&Lj#Xv-ӦMg[hQQQ JK/5!Q7Q(aʕqlڴ6mڰrJBBBի>|8N曙9s&>>>DF^NLLcǎ J… 22qew};dggl&%%cǒMxxx1֪ lfr YlnB]S#I!w<=hlƈ6l>C}:u*l۶!>zGo,v8uB6&@'O?!Ի$e27v}ww@(  D5.GyN+ȑ#"!U5\ML~~>9:EZXXh ݰ*I2RT\K~~>yyy۟C/7;YNRĿxs{/z=ۥK8}e(z聓S0$%%dÃ],f Ze'<<"L&L&Sf,~ġC|r="JgkS,`^qӓ40U9^ՍrHm|{7z#CҝoƸ{^ղXI5M>"|.v/PTپ};]tk׮6 iӆ;wҾ}{|||jCӑѣqrr"##Z' ((~qơTo&*gLxlr^12.ggg$I @@7J=e21;zcE/y[n kp5ΒB+6ANm]8U&ƉA}sTݷ؍;++ ʒRٷosOJ{nHii)!!!8,&44/ѵRMR*_.FTI1SZ\FA~ Nuťַlh?/2eXXE]Nm2q맸G%,,w5)@9RE|7.NJҢP( ڑ}FeHII!44B U_IOOl6oP(ӣGL&Ǐl6c0 ''VK~~PG&)JN'gSXDzLq4-1xyFQQQupwQUO$2 Ă   ,⊺]ZPWmUJ⊈D&ZHBz>sf̤@u_ryN}ZO :WU`yCȯg?TP葨_aEI&ƞ엠SW+inp8pz㛴& դ^/6-4p׮]n B')&LFRbGeFU'&PTEQp-vi`~f*YaV/w)C<n.'*&:j#ؘ_#5Stumf]xz=@!֡k~x< ́Cyd6q.D,X,FEP]a%*R Z3˫14~5}Z9XF1Y73Fۏ5)=ވsdO!M?`ԫt`NYYYU!:$::0l6n̞={ݻ7a甔`4 CŤVSqލ|>e2*KV,WF9i4jjjœ([z!革Xbt:JKK tχ5k:mGT %?F rjM2ӒBzZ4fZݗZ9Wa;o!))HEHFroNc̘1_ZRSS1 \.JJJ@UU1zE U(js@ pH*U4EJfKQBbbbhp Mp:c61l6"""8&s[36h `0:gkxpI:8 V'pvXK"?Z5WLG*A*Miŋ9ɓ'K '#n6/69nG'}ONbA1C 2TTTH jkkQU^/VCbRp{ *p2?nMSJ ?3J v?k&[6 joϞ=;!\}rO>:7n9qb: k߿maԩ hW^M.] G׮]&~aS0*ӧ]oCE>ݎ$!!3ge!y\RR(/᷿r/NĈaO|| &_:3g1b IJh.caڴi}|Ǚg'#̚u1gs/^D7|ٳg˛,ͨQC[- 6-}‰$**gO "A81yV?_^ n7gqX,Yr%r*&~ˉDIIIAUU)N 'gl0jz^s3%VS2DGG( OKcgϞ\v-^o]R.\GvZ.IG1bĈc/#Qu:fA\ ߏ9laИk&\IV{|P(/…lMFFpjz5$ŚNNR38}"*r'*$8N [RӴpepZ ҪM˓s\ ~9N IKKvsA""" NЎb4?N ;Ėpk%dvIej\|8=qFn6C=18N+.B""~q?p@'|¸qD2͋VUmxqa>"-z\_r{, :*++Yb;wW^nng,&5o >Fx((( ==EQxwHKK;Z C.у+6Drrx(*G5ueOA9]b)//g娪̙3yyꩧx駹k5k? 硇">>~ طo߰s֯_dg&OLdd$_~%@GMM Fb˖-t҅޽{tR=\֬Yjm^ k׮ 5[o-C^U_r=m:Hׂl&h?ӣYl$..s=ݻ˓O>ɀٴi>ɡ ,h*Zl6aE !ѨJ݉geʔ)dggi&N;4N'SN#G .++#..oFMLLLY昊o߾\U_ V<\x͡?EMCs0p饗xXj_jkkJnn.7p<C b^Ӥ_*lذaÆ;#N~`ĉ;MB{|@ZZ^7fgLcVLjo1 i :`.0)tP]^HTwJaa!cƌ {+V`ɒ%-~X2R7 Mc0֪CUU{=ϗ_~Y\\ԩSi'N o[ژ065 wruk8sC/{*P.י?jMJLLDc4/ΉaÆ*oIIITVV6-ؕ& $Q^#JKô )g[jMӧ?эF۷޽{cZO4;b;y駹Yp!="y"_la6LqDDD/pn={َaa{$~fڰ`0p%q!E u$$$4YJϟ3VO55Q,ҷ#FkhXpD$S[ O=ThmA8 EEETTTPaApU\EPBÑ2o޼&_$뮣Ma7t:`Ϟ=l۶'2qD>CyBUZghn9ݍ33f0m4&L@NNw}7˗/'77k_ sr%׷L ~iӦe̙ZC)SpM7!bh^GZynV\Iqq1ХKr ,7ne-frEG1c ^xP_CB{Yt)]w&M⡇j߬,z!_i Ä 9s&V5lAAA3g*VZnGUհU0az sҵkWy}ƌ,ZO>$dyG M.V$&f>a0x`yca9&4՚裏,Ek~ԭI"C&i?4 'AN 4KԘzA8_h rŤ.RI5A,?7>^B֬YիmG Y|}@]Bff&7t_~(MP8YiӦqg:ȢE4hPȹW[>}:w}7{壏>?' 9}xǹ뮻|sJL8bٻw/\pׯon IOO{ 3g^,Xbwб*z>V7:#֧@ޖq b H!իW4te8vXIEgbpCNp*&z***d2a1[HNNS28pV+Z7JǠ $S2tޝn=S7.vb֭;wl.ndz}f [<]?ٳ/"LVkQMq5jTi{h~AĂ^HbMޯ=8bGe`YE{mAUU.r֭[ѣyB4M_wrW뮻8q"999q|.W-5j999̞=+V0jԨ8iw3s%;;;,5f̘Кs_}hަ3s&"誦>xI&›9sfΨQ]Ҫ~Çs~q\X~s.|LiuMoxmB ej8^nxt>,X@JJ O<dΜ9c3g ]tg[o۾};@;{.,S/^̒%Kx饗ذaдo۷7o}5+믿3>ӼMEUM}>(._ ڵkaVAnff͚g\C / QSS_To[!`.%)P =ֺ&nJJJ6lXD|뭷{B_:Xqa֤ Ç7e˖Mm߆45\ìY};3tUu*%>>>tkV@h %wԩSٴiSsLҼ>MoðK!CS1W1p<9RW1--5n۶툖0I'#]vj""$A1AD b A "A1AD b A "A1AD b A "A1AD b A "A1AD bA "A1 n 11g͚5Fov;eee|>233馛Xf saܸqdeeQZZn'##͛7 n7v.]g2334-l)S0 ^/ٻw/YYY\y\q\q /PPP@޽)))9sYx1?Oa*++Mg '2ʓO>IVVǏSNiYYY,]Yf?֜9s4K/4lѣ8p`%tm<%cL>[x1g>Teeٰa`ݛ[݀ʀR<Peh-"/& AD й8.Mk׮%77WR[hw渋aܸq=Zޜ&"MPUUޜ $MPER[ t2ʁX,V͇}ɓ'3yd}Ѱ[nm~mnv OuZ18 II TU9>"vl߅|-_=g}Fzz:%%%ʮ]kPU;3+MӸkXb@SvZF͌3PU.nM6q]wtҰs5M;lx^x!|'k1)ݶo#9ر!=λv >#E駟fٲeɀX`Ijj*c1m4v:7==U]}RܓbRX]L,l624QqL> 2rH B~~>j*_ٳ] IDATg4;RV4+..&??MӸ+{ɉOrp\FjjjPU.T3УGIIv23Ӱ"]WPPЮO?1h O"}Fܑ;Mȴ~H󈰚9쁡*oO  MBgw"<6 H? t1k\xᅒBӳg%L%ld d>2A|AŤ XAOt#oC85 ]/͍ݏYoߺP=z`q:DEE[Cn)wI^ W eWԤ$|ˀX|9@3f0|z)RRRHJJm۶ѣG^y4Mcڴi\. Byy96l`ɒ%<̟?Dz:V1 UӈFAE*F]`Ah.AnHMM/̛7{"4M M߿?wq+V]l2yBDz Ehh2DZԺ`5̚5Cm6̙32&Mʕ+4bccÎp <# :T*Bdz 5Nl ASIN,_Mjj*|s=<(_Fǃ2HPh/?0MPݚ =Bà4_d^pg2A! bYL Bg(|S#3]/8?خcС+AW_qz|>8 <Oȑu4i/{L2ݻs磪*k׮eԩlذ\*&Lxct 9!\.|>~-#GdժUXe˖{1i$> /|gu]7a2CŤjfݺu >@ )..m_4<_`s :eڵ+QQQvTUÁ(TUeԨQ̘1ɓ'eOs=2srW_;UUIOO7`ʔ)bmV^͵^ &&Xv؁NK.AQ.R֬Y6!ӿ(?9蜥Ke:e0a+Wo߾X,޽;9v1_A:9?rrrZ\~3F>|*&ׯkT^ 2A8V|A8gcAg1I3.NgZL 3,.pz()31 6SC zdh..'֞n.,l0|yyB9{{v;ٽ1vXk4M#0uT֮]˕W^ɋ/ܹsٰa}Y}.B^}U4M{ 02cv'"N\\$5""Lx<ް ' pr 7p3x`&MIJexHJJ 7`j O?$C=i222 nߟUGVryy5M㥗^;C 7@rr2;v`ȑ 2nE]7=2t\ːL޽Ec2HKK C37FCP(MBk1@{,[:djjj*U))a ?! I)իPUUѨL,oB8u,W#pʈA3  p 1,&|3e>Щ YI~ G1I.]!bPUm۶;4:7k,,Y"oG8yrEz)))ᮻ .]r7yEou]GZZ>(yyWXp!3f` >\ުIVj, ^/z!رc0` ,@Q.&L(l۶LEg l2yBǷ v?ݎ^ocUl?phv;~!]taҤI'd1>S֯__KIII(;Yf1tP }ea((AB8pg{CA}?p|'t 0x` I2#]l#X&pYA8u$uxJJJ2z}/:Ť?qR b ±B3!d> D b A "A1AD b A "A1AD b A "A1AD b A "A1AD b A AD b A "A1AD b A "A1AD b A "A1AD b 3={aIUᄲm6+#FțN8guK!$A: A M㏋{1"{W, B A, Bh2h6pjehQFq~J 'e[`ߪN (J ~@m$gXh$ @ CtBBW|ʀzb`l&0P@CyE=WWBgRCq0BR>SA::=7+c ^CV@,K1I$$P1(; BmX6&oUзP "r<^Yie(h%XБP{}*a[w7Eh,b:!h!CBPZ#@}"3AkPQi7ǯ^њ}DA8,     5cp4 Vk?m<A [#ڿGg.*6A:e6_>hVyi% y t\%me'26Æ @p*p5 ۸Z|d]9=*@BQ@zA8&Kӯo 툮ߺm;IY.fx~gpgMg(h&j6M7|zR ~WEFLLQ6+V_R[㡼ČDTUEUU:]iⶱ ?N27mu5RXÜb#||יaaG)No8lӚ;Z8͐(mz ``~;k5vH?FEQ8j%$ũ|>[Lcy^Vcd go%IGpߤA|[Tga?9:1^>X!|3]-E>1f K!]o$-suy|f O `Q t`D7&y^7ꖅt=6so.f'MR^j/qzFAG 9:,VF@@uzqN'fhpZjnދ5>k|v(F$κE1sݓ`Sהe۩(t=u[wNe,ܿw>4_~5g( Oy>ݠ8_slQYANè[9d|ؾػQ^R8cG躠auBFay!à73m9[(ƜKz0aɬ`Ёx|]>Nf;55DGG**A{LNgVbD)d1>rQ]zSt"]4 hj]ͩH*]$g{>²΢vcGgt*p{6{Wrbܚ-S?>nYȗ/Η/b|!AsR!@c:bBW..?/Nbp:}T ,[Ϡ sA`0;L]t->GS,>_masfjUDƈGTX(Κ V,2~]HCm->z`a6ozz 'ۊxA(ʡJ EF d#S$b`Sq܉jz&+蚤3.n6N;c爺3Lf)md-C*蛩)q0ڻRDW n4GߵEt pXRz+ _mY5G'ңC\/Z .8G` ' Sdl?~GEh5vk*-ykA8L|nGSƢՆD/I-pRsD5 1 A={pe_v-\pִ͛73o޼TU]t(rLۚg(,,daܾ};z+^7 B91={nݺ|+V?9ܕ+WrPSS_۹ێ:7ofڴiL6{.Rn7cǎm6999\|q|? ƍ5j@(MўpM77L@ hlYA17߰sN΢Etp FJJJ0 Pj?.0`K.m?;;~ӧO:MlNkv0|BVr; 47I軍{]l](CY@UUz=?/$ ǔ[]\ >ymCo7uӕp8@:`aСbA87IAA  AAh;Kj pb:q6lAͷ;mYIAhS^^N\\f;!i*‰gHBձ4hT9U}ɨ#Ң'fdgSU׋RL&,KhȩA8CL-Xڭj׈ݻUU1 M:񫩩!33~L?$`iFSCq$iZVhU9Tz8b" Irc5*쫌 2.2 \?.~Y)nnJII @d"&&t|BEEEѯ_?NIm{zAvv6UUU*++q8zjmiDdd$_ @QJKKٺu+#Fh}F_5V7<4{\#nlXLzpIrRYIT׺ϗ[yN*II vkVjKg6me^#=AIujgx|EUեL=)G Ϝ- AOZ1g%4 (;u\~^3ׄmd0;>>c54T0ʻE/ו(..W^$$$cbbhjjj0X,wΝ;پ};} y=x<ud ;?&&F~~>'zqiV:L`JJ=5$&Emj1b0tP8j=T;prk  E GFFR]]ݦ'C@2,>r2UUUTUw{ ?U18}9~G[ٷe/:b4-(67IIEh0 ub\=&2/_TMK֫Z_Sd-}k|z덃ᠰ(L&555 6&w~?"l6S\\Lzz:GFuٽ{w@ @VV6 Fii)_}QEY0M @d_(*iHUT7 ( ^{ 8N, nqTUT J<|{.Nlf4QZ(((ѨT42UU8\@U~AI-M wբ'nm0t=.bhɼ}VMހo*ш^? z.+0k\8@iii]zt A h"ҬԊ5zH:"X#DXMMt:J@Sx8nES13d<^=4<3.Q4xqztT9 V*TT(.SVOUj<7J@vlU:3n-Mc d&l*2 `]k>[/tA_{[MX,DEEQSSӨ/>>MaVQ3Бe֭t撗Gjj*))))--=4+ rѻ+{oEQPTu2;WX (4GEO5=^o]Ζk(MO@c>FŶrrY)SQBQx< .g2E~=WAk8{ÄjHm[4)Ȕscٻ"ڝ[j53_oúҤ 1S FEdF)ٓM6TUUk׮kzhF.]Z,un>3zMFF jTcP% rTqiV:LH|VUb!)) łj>v\>K>|8U,:}{1Ƨ+ˈZWsrR NP'^߇ut|y5:-*YhsDl;^ރOw(̦zxf}~NJ6\W_}ic4C #&&@ @EEln۷}j( TU SUsqiV:Llj޽;QQQ`ӐjfMQQ\.Jhz ׋v,X7 XA 3@a2}(rq<=^‡us dl6[ sl$ _ob6=8S4*?[V,=$9юl>l7lقd"))v)-- GHOOfUcA, @֬S'bJJJp:|>t:FHHNkCᙹB߾}C綪株fmIHJRRQ*&M7Tzu%GAN á9J@#&RG$}u4o#""خ_MEqq1TUU5lfaIHH0'<.V"FA584Z"PH pCt"i*‰JH a,*eBXv-=pJӳg:i#jVZv-yyyp }7&O&7܂ '#6lxb IDAT`82o<~ # 'q prqhi .,,$))U׉A5ڴ4@jj*Œ 5so[]c B'9X`A ph]?99۷뮻NXaرжsc_}{900zcz/Aڎfϸg?qq=t;CQQw}7'Of̙'O4r2m4~Vazm^Lxp3c naA-6m'^ࢋ.ࢋ.ht{xW?<v;q}o}k7n`ĉ,][`w]%=z~9/԰Hp?ޓ'OntUW]n϶pB *k!--԰8׿ĉCkkkt:oSXXHVVv??l ,]o)6df&Νy.F=ɜuV?nj^SzS8Cܺ)))W+_xFͯk^uV\lmJ6lMzy晡col?:>f>c ~7)**qƵxùBy!::[n~QSSó>YdժoHLLdӦ|y7q<s&&G|| ><7',yG}u3aÆo>֭as98tM233;sΝKeeekz۷owdddwp9cMVVVw;xtMWPPIپ})A|| {ge„sIJQTTj[f yۣO-p8a6ٰa/ӧOo߾UUqXd +V`ʔ)J˗/j-1d.]baƍjVj}F?~|}m~ٓlv;ōνk8qbOnxի%%%{'5-8Đbgdgxs}tzLnS>-xb{3g1ܿ/&OL||| t6n3ϼN.]-nl`Ϟ}۷gj{nذm۶܎LhkG+ lyf|ɓ+&^YA8HAAA1m6Mxe'%%Cdd$@b!??h< ^/{W6Mކ B]'flfbcc1LX,֒d 'K͡^/f*TVq8\(F~i.{t$~:^Պ^c p2| ͅ*5.)b1k7cHߌj%..*Vkkג+oU8*zɈ#[:ķ C5M 5=JUTRb8=PCTTzŋ&Hŋ={|k :qfP ET U;ODDDw8Z4nEFF m"ݴ[ ~kpyVGVr@ɾݥEx޽"##h4qؤgD^ll^@-\$ƚo6fn+^NOI Tdٓ!Cܡk9f_~ۗ{RRR2dFQ^NÉN`R=&TV~ypgıun"F.A5Y./ D۬{6͛7h".\x*¶mZ}1il޼ҿbccq:noy-[2vbӦM 0 ֭[)**K/Ex0ݻ.E'ơ]9f9o3{6/B/~vE'"oh;P\M(H =\/}e/31>5;L:,ƍǀx֪PUO @UUVXg6mĄ PUNvʕ+{QU*&LMPUCq}4+ߙTVVRXXH\\TUU*v:OٳJKKC~Bx 6n܈@4F#6\ {Uy};32!D! 97z 4=$\)VϊzV[[=j,ў"RԖZjCPa&d2G2ә@0$W&{AGȅaX8쐑lǴOpRC}lf#`%***[L:2l6[$V\fonsLdܸqrB$&&b&iiilذjFi$&&th9D׵`0y\ss36[Yy}6رc|~[m+}nkk" `ʕL:F@GBB~K0$55P(D0?G֩e\WTTP__& $''Ǭ|+a rͲs;ކD>MII +V\.G[na߾}wy8n7ַhoo0PPP@0СC)))E4^JNqSًH!wz"'$#Uoxsog?/8[x9˂^?!=saIP|t+Agb]tUUU$%%Y7N>n\A(bѤŬG/eN <Od~SSSk! ?tG,} ollTEps8Ʉ._K`҅i" >b$csN,' QSJ2HJR8pb]bʔ)ٳ6rrrp8<-55508zhg0lb?t'z=~?f~9I;"_`ێ׏,3@;G1^49zGBk`0ɘ zU8[_rr2'OLJJJ iNKK mmmGff&1'* M6o'|ߦ$n-h#c rϱf/'\\`%R]\.Zj1(Nr(,,IJ, ttt`FWc6tp8 À~}>##nK/=/⩌MEW3m͔sXr3(..p0y^soޜMѧ䐛%++IƓy6?{Ipef=V j{W|*ӟNڕīE۾};{am4^] 5wMmQ}k uM`՗j+EzWxxGs~ep9Uɪkv6ppy}AFFvj pF""AzڵK[YDD-̘1C bkJ233mYv֭G?:!4z[w97ŵo3z菫 7.c}AȘ 7|3 444D$}Dz2s&MfI(: pDW_׾{*˲,"`g> 2u'Hu\!]YYŋO>y.@bժUOu[Ocu"" >a'b |>Maagsʭު-."Yo9|{׿IX8<|_\iXz'nYp! .d׮]$&&f͚Dۙv>vwWt0Nئ}T3"s677SRRœ9s(g=UR8-0 0L Ӵp:$''c&1SJc1o 6pwBii)UUUmtXxq+e=~h?;w.>Yfmݺ5NYfaY{졨@ 덼xX`A5kp=G[nwqǧz.wy˲L:0N}\f w۶mSXb+W)ܹ<<38O|}]fĈL8͛7sw:x |ms8>xx<p4ik׮eڵ<=~HJJ ##M60a„^t\L0llS>.(( 99`0yO(v|sĉl2vX\.W䌱\tE<ۿ[deYk Pw^__OII 3gΌlN5uu߶ehYV Δ멼oo9saEEE\|'[ln?zioTenvz!/rH&$$k4i6}>TNVN|}}CS-ˢaPy6?{IpefMyyyLECo>233l1of2M440a„+zWw!}vږi95@kjڢn )_Ol; ѻ Z@&M҆s837\|qY)SP\\LqqqV1c9EDӀ[Q""p(DDD "" Q8ADD""pQ8ADD""p(DDD "" Q8ADD""p(DDD "" (DDD "" Q8ADD""p(DDD "" Q8ADD"""d8vYt)?`k2Pa u-cD=Npm￟aÆٳYj? !%[?ǢE5jꫯ)!Ħk/e1~x9~8ClL<_~l<O>KBBB>^DӰ`ϟ$8UVVR^^NvvY@:gڵ۷gֶL\ݯq?j)kj]S(%c "A/蛸|l%Q8ADD""ΙnJmm-wUDe˖1fgJmm-z+>O5ND믿UV)4˲0MS5ND:0^?p0~qFVȀg)Bˡc\pyXò,:8GpJ\~]]_=6m"33_UUŪUxa8Da:[)r0 C3m{?dރl۶C'伀]/C4{ャY-[Ɩ-[x7Yh˗/祗^bҥڵo駟)gݺuy1LӤP(DSSf0 ֯_]w݅a?~R}]Νa2{l }`3gz,7~ɶ&MI-1vUqvqH:9rGٳN[[\qŕ|GN.X`/#F?m4{1y馛X~=6mb߾}XEEE YlY2Dc0MB,"==`0iB!1M46l@uu5G4M sI{{{$~?aX޽{,_oܸqGdΙ*++[z]ǔCYL)/f~ ϱdR04''0aB>6eo0lx<<# @`uQQQqe^?V G?^g:^&N Tk_g„HKsͻ~s|8q"=9ZDE: }B3-&4}.R嚄fM<9Tֳ7B<͘n XXIDATuED ?S[['"˜1ccS*..} 6[DD""rjAD,xqDdxqDd0Epq 9-$esG$LHL`HPr z,d٪"},Z;Ȼ0 z' `Bt$8 Dv ;/iOMM O=˗/u<8RpC! bw$#4{[IMIGIKN!h8oXD, Æ?de/{oZq:p 1 ӎ;ȦM0M͛7Gtl6v;6l`ݔG]oƍpK{<ҳ>|(i&Jˆ?Žѣ.X36 GbbbLy׿iMt0SlB!LulpN+Wfq7b9rHo4~kQAJ HNqAm$ѕ@aiXA;:[KV͍ /SnYYeee1v{uE/]4XEBB[l`ر,]4RZZqEn@PDpa~u %%N' v F3`>_+NG" ~_7 "=gpIZLs>e&/tzd2M,|dg$he:D#"j9rs `C밍(AD'ADnQ8ȩi<D9āsF9s8|0n 0 L\-"r2.}alٲ|FfnJJJTcE$n~mpر<>̑#GfgѽBԳfb˖-Eihhsm6jkk;wnd-[0sH)z9˅^Sn}}=ireLmm-,^49~8\s S&MC[lf1 dv;ٴhoogԨQl޼/}K<3tM 6,RɓٿM6 /[2}fcMM ,o˖-0HC 0 FW{9JJJ8s=q]w p^  ==RRRp\~ػw/.TZZZ蠵4ILLFʹ7osaСXEuu51q[۷+"&A^뮻;뮻yQVVFNNիWꫯr1o0{l-ZDVVր?F)"lpa%t\.nҰl2ydN'P}ڊfò,=ʈ#"nx㍘7 fSy=aǃxg#t0MÇoƳ>iˑ׭[pQ8(>a/j>̕W^륵222" ؿ?vbȑ\ve:|#"qg)r4i7owޡazaΝS^^>\DrP8|p+,,YYY̘13f(DD-s9t8HD  "s "?e(DD4Y@9`uAzzzq8G9r$"r"8CuGeI.,2RHKO•ihiqSy|g„ "},l6;FJ3INvpر,`Р&RF%M9:1l06l؀n㥗^qjjjxꩧX|y>0عs'V'KD-'i9tn:H$!#a4,, AzF2.a&F'? ,`ٲee~oZ~xy7Xlo&7of<L6#GBy> {/7ng\uU,\P0޶,4MMc=Fuu5/7tׯgӦMlܸ򪫫7n\d=LtRPP; Qˡzgg]]vaqq_JӲr ^vzIJJ0  n*"q Yn]ؾ};{am4^] 5wMmQ}k uM`V9Imm-!C[oi}5P}&j8Anv;IMMamL9V }K {\>: x"ù:4$" CsF9ĉs[DD""rjAD,xqDdxq}޽{IHHf1vcǎ1y""g.c8sHOO[2dȐ>.Rv_Z+"qg)rp8l6?s7CSSSWYh"v;dffy*^{S.gCgp8HHH`466p`&aioo z_:O?4ŋϳcx^|E|>_ٴik׮e׮]?f'X ׯ?a}"¡nİa2d)))$%%p8,  @&mf'5-^oLWVVrUWy/_ѣ1MDiFb0M32uoc?teߓZ ~Hnoog߿P(D0$װ,#[8pl_n/ SLcG(2W^4;i2nܸ2b*CQQQL=-3YaЄC1cFZ[pl=d~nbs|TGnQ~"}!-S7:z\3ǻ48s-ic9"g%RҘzXf xDD-inh!B9`D9u"$"" Q8ADD""p(DDD "" Q8ADD""p(DDD""p(DDD "" Q8ADD""p(DDD "" Q8(DDD "" Q8ADD""p(DDD "" Q8ADD""pQ8ADD""p(DDD "" Q8ADD""p(DDD ""p(DDD "" 9sUTTuVjkkNgژ1c` bU3DDHDDD "" sBVV?pܞ/A\Dd`w w -"PB Z"" ^BCQV/{p疃y6?{Ip%zDD]^]~@ h:@Fdv$>]_T!ܒ?r0?I!zS)" ]{FW0$tC8`N ý훣ч>~QIVm%!zgoFwE[0(DD/C]O~cۢJ2W8|p݂FEv%Yr *zZPT08Pp9px6B m:CK1w1mrtkCI t?{P>ͷv[/AS 3ӷz >]%}:;n[- ! ""'OBSflӎ^Dd""""""g4IENDB`qtemu-2.0~alpha1/help/de/mainwindow_new_machine_7.png0000644000175000017500000001101310753140477022612 0ustar fboudrafboudraPNG  IHDRK, bKGD pHYs  tIME -KzjIDATx{pu?}y熄GG  K鸅fѻa(,Ö;ctqVkQj\]%֚#QFaP3fInB۽}>F~ߪ_sWG^7Q~vͷlp p&`D>~@;p<V.dɦ(/}$`lC6ද 9>8yw9W!@h? pjO zm$@jhh{B!8P>Y~_OO$0 8 )E\T{ݼKAG0R`3>WFKxہ_= ~e*]G3`ci j.Hh0 (3Іp>ZvthєsdxtgqߏcYkhhпbmJKu|Ex bq.f\r%cȲ̦MsSY+rGeJٿ?Ȳ̃>r әR8~UU߭r$PSrs3r-Ъ9N$_-f*L#EB盚r.@&BraUI)b0 Tc wg M߫}·9$yEstk+16/%P(҄,[l9RȗVN\ܪf~/sh ^6f}PݻnIH3yj*mF ifA@3Y6H3Z[[ IvL{WLటߚ,jM}]֭wU/YȬK*(/0s^v~2K>Qn-q]2]ge7r-+9}d.x7{YfQSS?Ι3geǏa^u.\HUUU[oz'x2']`TQ'Är?U(cq5M{dY~z,YºuXv-. EQFCa;}W5ۯ)7 ڨPb>=7!Z aPDJ"/f˟l='H+h49y,PդkFvՎߠvXר#jSzO.'RRFN.sJv@k!!),|p}h73خR:yD5: ] V4V5A aX0 $| .Æ _$8ɴ2K"o}N10] N{0~}l,Mt~ҭp*6G;L^ n*?v(a0A_KpRA BiP__od|tKg̘/6H2``` !AḐ3@̧; :,CGEIL~**!Bie*JE1gGy5낉hB1S3|UU_tJ~g 1#m<2jORM2`,nBGtIf\X{e70ߢ2oV~lI3Rݡބk[~1scYf ~;w_RSSV;n\2ݧY|x>BE9EQرcpsAV\ɁkYf $?|ʹsNEf|GZ@F=m[LI4T%tb743s6D>V67>o(+BvH7"+H(o]u⋤\s m[ wA6?B 2<2jBY12FE$[تą:%޽{EEkV2QR$ن>QA`l۶-k^=Bro 1Rj{l ]ba!i \%3,S'<b>jc{ɥ+\[[HmUx ~*4}@xdmV[]yxE+V\B^OD' L-`R[+/Tda5Xn٣z4mƑj M]}JxJe5 Y}]!9_bOIX3"4~Vď**x {|gB?̙2H{A$?X\ě['wYE1innfQXXȁxW n0elM2a E=o0-0GNș7:v~nu̦Oa'~+V0sLnjkkٵkWޏ7x{ EQ8|0uuutR%kH$|SS>(Ͳehiia(BDPR懽swz %(*Ey6J 2*8 $VBwvvzjnB .!I,(IRFD"Bh4yYq(Baa!MMM߿*Ev7k|5aĦΔRz#|qM{7~͔q Dy3~@s:477pE /g+V( gfǎ߿. UUq8|G[||bϟ?Mbo" Y#&@k [&)xbö)v@7! ɞ͛7''yxMwH;rP;Ñ?_Xe|G-.gx1=[2;OVѓ!v1b7US{ kpO[LWO ?J2v{|* ߈.~|+pl^ḫv¼9v/Sr0B OHdFS3OhxA&~uu5[nON`DسgӖ5-b  Z!dc^R/`fS'!"K 2pcsbɐ& U|Zy=ԥ5Gj~vw+5ttt祆<[cʡ96b ;\ԘѮw(oڵg j[ߘvJw錔N *T_ 14rn^d YIZVA;L&N& Z:VY"ULOt&׬ 7Ժ:lg~==IENDB`qtemu-2.0~alpha1/help/de/mainwindow_new_machine_2.png0000644000175000017500000004115710753140477022621 0ustar fboudrafboudraPNG  IHDRWLՌbKGD pHYs  tIME #^ݡ IDATxyxUЬ!$DP"F#0":c@E (#U ,MIBT $SOwWߺ}OuϹЀPTŽ1u<䓼 4aÆ /pEزeK? Xmq;UoIzc7L}Ύ;5so>4iŽ;۷^ԩSoO>zyy tԩtzw1LkCCYo^{nn … ekrßB]… yW.V~:QHLL^lC꫆c Vp3::7xÇa/_Ynxyy?OOO~w>NQ Ql)g 6 G#ClӋ0tPѣ t=<0Lvzh 8@)k׮ ҩ @ʲcGf:?_/ʕqqݴk׎ŋc1m4֮]͛?~|)111`Wz6004H>}ic,Y0Pxܸq={;}ݧ58q WL:j5jԨKf1'sXƎ5Ç`6_J||<_7oo'Ofҥ̛7 &?X=wd4.("TEtA0qF),,T:t耧'?ڵuQZZJ֭uϏ;vuVEl0UG+yi]0Ν;5L9GftkAwHII!!!޽{ӪU+VZueNA?.]@0~ ̩ps{J[EDRB&[X'ff:pPáCٳUߓ>>>L0\3Og +TةS'Ǝ@p,PF@1mh9tlll,#GСCDEEO&M\Я_?mT^q%///n6N8ANNqqq֭[Ynw͛7'''n^e宻^&o@")+Wcz)֭[ǜ9sX`G&>>!vxJ=(c=ƙ3g1騨(~az6m/Hxx8%%%kmce|dd$.\FUyGfwf̘1z=g׮] 4Ho7nkYͩ3{lׯsP vիwϫuڵk?#G͌3[hG'dѢEJdd$YYYХKJKK뮻GAUUO`Ȑ!L2&Nl޽$>c޹s2n8Ǝ СC*ܜWbgϫ1=":e.b6m:4;;h`0Knnn{_~?kZm* ۛ"vAaasaa!%%%|W_hOv^HHHˈV1R-}4iǏw{ŷ$%%I׬YÑ#Gls,YB||<Ço'Oܭ:rK.i Lll,3gdٖ3)'1?l6[:& tT)=l6|||((( 66xw} _3`,B*'l"7D\wj>Fč"\JVޱڣj:c ˭؉ZOM&tԑmHNN&77;Yb tU[/sf___L&_j[+b}V4!֭[=؀L&_?bsqfrRsL 2I~l6H-wl͏5h;[Uu'.m) bpЬY3鱚ӄ ,+7`zU >>}AF#{sΨʉ']T?B呞NPPz(i0|ᇜ?דKJJ lذW1BġC!,,iӦ-[0smM޽䰰0-w'Bnհ".ǪEuWEIAll,፪C3330`~~~n'L>Ze~YWX`ʦp5eS2M6[ZeffRPP'M4qP!%%.]hJj:燏}ˎgΝlܸF{UZb!//M6ѩS'f̘3ʼ{@AH :?666>=Of*S՟\ B#@_%''Gza,i8qzBHf͚@Yz5׿x*doۼyU:ƄK_S_5֥Hg֑ұұұBހP9EEEz9tlۛ׿K#;sڵ Vk;bOϨA8qoooVXiiitؑ#F2e,ת6jbZUuk;DO kם3g3ЦM׿ɪU? 11m`Ÿy*\y)˹t^NeilչTJK,}~窏fczUNS;,kb\kyRv\guߩ6M8 uw:9\UlVV ewߵmq]xx'fR6ۛd:v?~i, >}_̜9={2p@V^ͮ]5k ,jCѵkWxb6#&Ӫmײjekʲj-P?' ByB:27w zj<Ȣ5L} |,\%8&?G*$9F{$1A Kt*72fS6Ne\qўg BmO4L ˕5%z.o9e )Dzp*7Hr{tוK@\\ݺuj-[8-&&&&+*r⶛ *3J]-J( rJƌ/LYt)@Y^͛ٷooӃ }| gSURX{kl9socX8wǎ;dΝz/k2yd>#z.\h$..Xyf͚E=;w.\uF]F bcc?~<>}:( 6vIN<)gEpI^8z'(w-%Hl%lʆJ=JѣIOO'8s挜 ].;N㰵2+;u.`A Vjhcǎe{ۗ,&MDjj*cǎ;r!/ZY`^ϸqe5 .?G2;w([n'))(>c۸q#k׮9rdDGG3c =3팊ѣU};C_ɾOmFzz:,\'x\hm?~8q{EUU)zmڴq8>>>xyy韫(CZ[\C=(s뭷2o<,Xo}HMM.fR[zoӦMlZPtXK|XgڵKg.\ %Bp A V`1r>Αs.˥rǜ9s_+-;ԩSyW*`ϠAHHHV;غu+@u+ k׮/\cӦMK&hw`=z4. ;;9s裏:0JMM%44^zӧ?KPPPuҍlڨ|r7ng4zɤI* g Xk(2%K beooo1}UϥP|FwcdŊxںt:uTv(|W 8z駟h޼9 deeMVVS6rz?zwM64oޜ"iݺ5}%--f͚UFiҤ ۷fa4IOO' Ұ^%)cVV7p;wRΞ=Knn.>>>Tɓ'1LS\\̡ChժcV$5 4իW_蟭\IRu~U(EM))E bPԇ5~Z3Xx]ֹ\gEF̌<=u]GRR'OW>(Um=ύ7(gcZRS]W-m^F*x{ZTc2n8BBB;w.ݻw'>>nݺ*V"!!Gy{f͚E^X,s=_^j#7X'ôZWq@r~@ м|3M\"\.P- @ R*qi+1W_nF1\bU{eQ?7+@xkūvƪPfAXDJRSV*n\E555عbBm&6;Ѵg2>QRrne#  \(TFj!*Nb0R7 ^^^b6ӲE3rsiѢ)% '-@ܥKzϘ1c`ĉ̘1Gҽ{wF֭[QUrJ BCC޽;gȐ!ZFl=L&\ll6\sMK<PRj%ȯ%v֍?-[`زe 0n8^xl6b0PU5kкukEY,xCϟ㬖Gms0Xƪ✖vitlVY4m\7O>Ƙ1c}6޽{3ql6}UA /T'u0VXV+|h޼%Yxzz(, ˯WƲejT^jhΟ^~fjeuCW&fMf+Y"Bmk e3 N.gU\C֧KTF' jem2Ф0m;r7ϽܹDJqISn6¸CVVHpy}iaMYʡt"ʕ\n̒c@ϙVdpJs /+/rQ0l&11ѕ*U[cUEVBZjZ1 tY?w҃esk?^{-f"JKK4i?^{̙3̙3 9sx>H/;uT ]wsek[)?Lhh(ҲeK}-Lͺ8u;(š5k8p z/;M7$npq e\`0ԩS߿[nl i׮1s{u6 tQ/=*ŋy/W'ϊbyPTT7Lff譢(s=L2EQx9s&u͝;nI&a0裏ؼy3V"==]U[322l6ӼysIMMI&q1vŌ3СC'OܲyfŔz_nV^^^oܹso;̙3u?UC jgo΍7=<DŽgg~%\``cXAUc1VAcXݰpBBBB/x衇7nzJ)))a<3Uvь9$1cozوL&@;qڢ;ٷuРAn\{n> .8&ujDFFV9s_/uj>(:EEE3t}iӦe9&Nݻ:tq|wBYW_n_~%_57nz7/ٺu+6mbᔖү_?|YشiSP)S*ѣG;g _ŋg`ܸq?sǨoMTTF'&&2m4{1&OP}[bҤIO{6mDii)u],ZyGvٍ}lܸ1coжm[Xv-+W_u,_nO>DgĈtܙ.]T(%,,e|OɶmxxXn](aÆ_:5w{E>}?}/O2s: _$33}G9i:5E!((HoFNXx1+V`ʕ<$$$CۮϪ]\}Ťa/1qD-ZleL:1c9 6m̨1o|Hhٲ%rYe9tݻwwt޽BֶB#+?x ɍrZfM XeJqVAbnݰ \1cu7nCІ=rrr7:EF  XAUX1VAc1VAU^*2u*hAZ۫\> wAI`pzt#_t)M4aǎᶮ'xBܹs :C:AYHɓO>ւ}AZ{ ӌw\E 50Xgg˴`x e-[沮,[L?SN8ԯ3F$/$$!>0N>QkoU{1110X/g`Ů?Cz \7oCo>}pYuy睼ǸG믿v߹ B[U=:_YWEf] r%b *4&< ?5>&,,I=b[CPyڪk\\͚5_ٻwoEl6[lr]Okbb"k縺<"..#G)AJJJ2pmۖrssBQ )--w([Y=Bmۖ6mн{wN:ENզ^}@NNwX,Ν;Ur9|}}IOO'88UU+GUЮ];I6YYYcZX,}+**ߟ͛( 䠨5VVm۱c&| h4ѣrUیF#ZUZP-uԨQlٲsΑfcǎ$''c4 Zl7Lpp0ݻw[ndggӱcGYKwÇLJ'2tPrUoF gϞUS:}tVX!gxnݺѭ[7e3fLsWΈ07//}绶$R@H(cXAUcX*l3{\\Yg8jK8slz^8}LNJFFiii9s<exqVmb *5֙3grO?c2n8Xڴi0|޽[=abbbUVk׎ 6Yj^ު`K.eȑFlȑ#+Iʌ:ܹ W=}tڵ7mĆ 6m餤 ݖ-[b3{lN:b>--]`Xt#ꫯ*IT~[l MMn vkmNJ:SVA*B1VAcXAUX1VA|GbbP\ywX,ҳBc?V*sh;F̟boCypōUiRZPXdb @&dee/ pq:w\,\W^yEՉjl4 (/%D'y~?~}ٹs'bX0aqqqL<7|9sw^IKKs(7x`֬Y,Y$oVgn@mniS?r!afl/Z⥗^[naL8o1cgl2Zlѣ?={СC.s3 [VeR*ke<$ 3xS;KQUUZ`tM$&&2{lZjoݻ7gϞu(e k&su)`mz>@AU^Nn&ZR2ˇ+KeCWjrCU\ TH(*rRWWcWPPPjrc=\8r,{\\1Vb4u-:?Bs(^T^db¥\I8Z+SVvWj1P f+ (nF44=7 uCWCY*Wl ź[M+1J    2%BCFK׬ j /y*; ,(/// 4 bLxrr2 .d>ƒ%KHJJ%Kкuk/^L`` <3|ׄ3bbbbӧ.\`L0^{5.]ܹs1;[o Cxx8s|:AhBBDX)PBl<|*^fjb$ Ll ņ٪`XP?jV__%$$^zw}߿?V'MLL gٲeDEEѿ=nfLQQ|rfΜQE!&&gbQխ ͆+ŊRYCSSupkT4I*ZǓ?s0 ''@/g333INNߟnm۶qy6mٳgX,Ȍ37n̚54MFIOOGUUΟ?OJJ :ujb?|ѢE>_2, Bãm !u5{>Vl+YYY6Wg&77Ww4iZ)( PPn0(g*@SNz^{ˆԨ:ć~ŢAЯ?3W7؉n=Z^kȪu⹂J=HXXW7o/9x=P 6@-J-Q١3g%=z`ٲea Piajbj.J6C{^iZa*C\ŵ W+۝.Z8AjY\gԵNTtZ0תdP 'NTZaaa r{emQš\QQ}u7##EQHMMeĈpiƍ?(1i$~eM] jsMJJm۶999`Z`0ЬY3 )**:O?1h 0uTڴi}M7q)ϼ[ر# << fΜɡCXlAuk׎dzi& D6mڵ+;wO>aٲe< sX,營^^^ѣG&((\fMAA^ה)Sk텿: ۗÇ A#??\:tbѣG Z 4Jjm*VϞ=ؾ};'44-Z`4Zq>̀;v vXPR5))I={ڴiSyGyzxY555Ug`(0 ^@gЊwjp5Z1W-@DD غuu9*\AjKq u     * * * OqO? +;v,G`<.>> V؟@ttEO?_s֔Axx8Νӏ۷oIIIDFFQU  u7-- 3gp7GRR6md]aa!cǎeTz>׾)=jysGe߿&Sz&mv;aZk{58qٴif={vZ^}UԄVU7͛7tR9سe,Y@nn.#G$>>qPTT+'**:0l0u#<ު>W;:˜9sӧBr#G0azbbbmժP{aÆ ӽ{woUV=gs'66sߏЯ_?]\Ogr{ꩧ8~8cǎu{/X->>^oٸNO8{ٰaok֬ Z?2w\>S]<\.sUM\ vWuVGO?]b;>,?#'OfժU|\ع߮aٳg3tPL&^^^ȯʽٳ9s&:uʡ~///vʾ}*]8tU;]KUtg7m5Lzq СC,_ 6w^VZ#B5*)q;wTis,W컺utᬪ].W"|iQ ʊkc]wUwߵ"wU-n!EW{ jBwmdEb Ȱ  * * *p!]  8yG/\0  U`A.#11h.K{~֯_M=J\ccc gK… 2}teTUVHoJJ O`0`XZxzzbҥ -Z|OxzzKJJPUU/^^^# \aZ2d:tcǎz4jEQ |=Tg]l{V+vEOM@KJJH;-YksYgus%ZHfU}^z1|pbcc>|86m_~|obb"/&00~m^|EkÙ5k˖-h4ի9<-k׮tM$%%}Q}])))'׷~kY`=>>>̜9VZ/2l0.yxW}:7p1119rD/|rh߾=˗/瞫V? Ј **m۶QXXȒ%Kxx衇OgA\EmL:={0fX,DEEq뭷rlo]}a޼y̚5{;w2j((..gO>$%%Ю];֬Y@ZZ:m1L={FΝILLdԩL2E2 9 }%KN@@}5E:uD˜9s]wqg2%gOK.sիNʋ KZ%Ռ " " "  B}Ac>  +W^BE\HΘ  ￟oqLJYӱZ=h4b0B$%%Ѯ]; PV")222ѽÞ=W`S$/ol6Y@ X9ZڵuA+ZVv_ рVJH9_y~HJJ{UVlٲT~a6o GwW_NZ>|IAhZ>Ejs-X-M㍇рͪb}1yQRRRFHH?<&L`ʕz/^x\L‹/XM6߳rJv1br ڵԩStСB}K.ofs2x`Bqz*V[DkU\ l6ÿ`Z1K1-X,f3fՊbb1W( cʔ)4k ͆bF&Mزe ǎP]IDATb`?9s&֭#22-¿o:'|¬Yꫯغuk:D.]vl6<== eL0A,Tj1ٵͅغ*t%ͣ|_ͯ|^{ӎP*,A:u\xj R@f A1\#Uuj?7ЖG0g@I\DLABJ\i4j/jX@uڬNZb'fk5ؕq uҲT5 T#l\-NisUMXV[Aİ;f!R7[!Ӈ+: ;QuVqrkeWVaV{Uk"nӦ ͕V [\] nZՋ7Ih NBBXE\AR:]Cj9հ\pq3CdW͝*;O1o߁ucXC:Yˋ&wgk[sp)8f'Z8!b 1!Sb:^Վ^b0rC1ZRЛbQecgΜj\뱟p_y˄h;qZYYύh=sNM4L+++Ӏi@&a}駟أ;V233O|iՋ^zt.󓍝p?^UU9F.YXuлwo&##y1c 7|ç~Ν;h#7:_mk3FaXu:ZًhόHh|yҟʪ6%%`w:\￶wXLo9H#Hi4R)FJ#Hi4R)FJ#Hi4R8(JGQf͚1޽{kcǎtgf;aM6DMm{p:}sF`ʪwqƝ0;svkR@,0ߤ;9 s`z|SΑ3o!J ; )[x8KǾUM 5?9BZrsr_ĸ~0rk_O)L}\Gu<ђy<*`oЛq`M Wu ^Ձ`4nL曚5a֜]m SZ~u@.`Msvzݻپ}_j}'U`־[f}݁mr+܂h L&L2<:O] (JĈQ|u6{uqڷT={9r$&Lo߾}:˖-|_Ua5''?O!yfĈL0ѣGzCg뾢@p8^'zN4tܹ3TWW / Aӎ6kɝwމihFLL _|9cvgQQ@ |zz:o3f ?I+3OgڌQGFm4+hwlĈgoQr4Ν;3`2 lѾoῨ.r(1 F# bDA(ňQ# bD1 FĈQ(1 F# bDA(ňQ# bD1 FĈQ(1 F# bDA(ňQ# bDA(FĈQ#1 Fho7L jΝKVV%1n|Rņ B"~5נj2xވsw͛#]IrBqq12j(\.6lG`rZH\.X~wӟXXd F0l06lΝ;zTWWssN xM 56A)Z~mڴ^-], <O&111~N}&u&۷o)??Oz>h|H~׿Xvi7p@&O|nND;ubB8颦aD-̘O@pp> À. *GU@QMbc_45vR~#zg8O8j謱[t5F5P8Q;ŀ_t BCc"RdS琦~9R)](Aő|~u}ZŠ&k{kB( ii(hhqTc4/)Pz]htLԹ}1[ :{Pp 3 H]u: _cs{~ fw$''ӦMtz} `"%'x.?џt=җnΠOgB)o`Ovn?џ5㱑m(<e?=ZBu-yچOǢ= ԣW1eYD{O>?Hd%:3"~q\wk:zp]=]h%e.V>rT™ osۡp5'LOL#h43ܺѩ.ggxEneXeam O6ާh"Pt6SI5}f^y`8,@?a?mhߪ9,Y_o?. ٦e~h/=0 }y(1l~TvMNnn.ӧO'##\V\w}_WnGx^uV{@Ɂz(·~ˠAj- nKxvڵVyU?^AQQQ-}!~ڸ; ٶ?t[~o=̑B?|?|ڶmKggKpόH899"qXkWn7CwmGBb 1&V;S]jc霟;<8N#S#3ɵ0G{:Mkӑ=mF߇ZEU*zTɢwѽKwvA>}0U \pŤlFQtzZjE=(--###.xv A8 tWn^/Df3Çłb!-{E7KRRRjm;“a 4bN3Y]vI Ʌ^ /lAa Aha |)(9@Ru{Ν0`@={1c^{-'N}׮]dffַoN׮]Ciӆuxbf̘YBsrrߗI9r$zzkײrJ9ʛ?ɳV+k3F#ujj*! ttԉL>=L8q"#F ''FuĜ9sشw6=z4˗ʹiӘ3g{OWڵ+"N'@e?~ `ѢE|GL>=p6\reH}xyyrrrDGo,a͚5g]'5Q<ee6mwr g p8򗕕t:1 Z߳>Q<! UU!x<Y7<=z=撎x<uц A1 Q A1 Q A1 Q A1 Q A1 Q A1 b "FA1 b "FA1 b "FA1 b "FA1 b "FA1 bA("FAD bA("FAD bA(MtaL:gdee׭[U} 0 >n851wyGԸ{Z>v[z~~~NbU-Z$ԦEUՈW_e|deeZ|8&Lફvt:QUYPUEQqt:n7_ ޽{wz뭨>%1#ֻwba֬Y8p{ UUѣv[H\pn7-͚5 ̙3xp\lFvݏtP–ًόH40zFSCRRR57بlٲe!׵Z~uJc@1PX'4f<˞r5hV+1կihFfm=PcScCf 'p[Oߒ^<5-qT`bD Hk 'ߝr%jMZwSuf\#T} *FAjtdї'|DP#@u5j<_jа>dUN0| ߉ najAԤAAFA5d|FA ) 0V/!f/> wu4{{{K-!L}0dˑJEA8M: j۷jv*gxj+DxXk,j旵W-B@W%e;4HclbpTbT|k\5Z HBTT2i wBmDQԹh4f5s?pX'RN3o{_}mbw<*=͚5d2'3 ěpVϊ齈1TP:1K`+`/wJu *XҐr%VN/U4uo~H1DNc!l>M(/ !!F]}{8Yx?.HOʸvjv ̺-Ŕ~;Ƨ3{ӽ]"w^pǀ6x0d[pwzV&vƋCb^7_܊TYz_wnAݙՉbʸdQyqXE\k_ϸBt%;<=K@Op"36P IDATnOיX4;@45I5BC ]kĐN]TRp88UN0cB5e6/㢶z6y;QQ\ELK@_m+T]E%#u'tif aCљ|׬ lB[ߓsI]s!f֒5|]@R..3Xf>ޭQt)o|yyxp6#^WEľN`qd~Xc>o$dH Q_scC/闕ʍz2~ڤضmxy~ss@md Û߂AQ(:_w>ͼ;2j+MzM/'km3'48{O(ze!W˟ x?0K@rC.Lf]۝|F/ywC! V>r\  'V:wg̚cvA$V1'4Pg#: ɸjR ~V=vsL hЋVApcJHv h7:@Qt⛃`+SRKI-qUCgAg0u;ͣbo((ӔgQL qU:GoErPmrMx\v_{ *”EaoHM5$vTp[k/Wg0k@lQoٶAX[5{(\\JpѾ;`ã:м^z~zr0ưolj ^fL5[EoJL )ȫ㒏c" WoUFp>aœ}E;N?MT0 uؚ)^*49$4Xgv )2rΓG^(g퉼Q"DA! BFBW\!=&5Y /z]vI ҄ MAA! Q?A8΁p:!qLgiM0-Z$Q8P5Ml6c6AUU<!駟kމ͇XLL&tq:TvWlVHzʷ~+B@Jb$d Q]堼Ki9Hw^4MCUU32ӾFT.g}SO= /@II C4yyy}T]:Ĝ9sOđ#Gtx^rssYr%@Ȳe :|QLvfΜylՔ1 )TW9,QR\MJVRZjҎIUEQX,{Vנ7kE>FQ.\Ȕ)Sjoݺ{ AcOi&~ᇐ/"sDM0|ٳ/P<~( GaРARVV(;vrssFޒnݻws}dZlsx[=z4:u )_m-( RxcEVPtcU=Rx0ʹmۖVZtˑ#GӧOOp|n())`ڵZ gpzN:*7_~%<LxHLLWkt:&#)J;v*lڰV;zTVV__zr\rkw,]zgrJ;x6:Wh<]?GHJohj8.Y4zwR8󩬬jvZZyΝ;c֊9{'_/aߪ:c@ Pɉ^P :ED&п[sb3c2xm.*TVӣiN!/PU?tOoX\.nՍv*n{fXV*+زu ;w>;7Do2݇ij*poZ}o߾$w_ӪU+EАЬY3Zjᠲ˅`[n۷Պ9LQ]]j 44 уdߧ***xСv= rz|-BSEL6 AYYn:0p@t:UUUsELCV"z̄^ 4D BA(z߬fܹc;g\' o MAA! Q AG&} M6gS7:gee>ߊ/xoSE辁D*++xZBر#={?jÿv"33r͛ǦMݻ7@ڵ+{Wի?Anxꩧy~\~r7!&ZQﴯr)MLLc{a̙ٓ?ύ/B˘1c=z4&M駟&''+'>|x`Ν;_}յf׏ŋp]wZ n֐}?S/_SO=ŦM2e 2{llo~~>&Lࡇbȑr72-fW /Mjbp\..Ç?.c`ٲe|'fs=G-xgȠcǎ;_t֍7|"ڶmKRRR`%\‡~ؿgϞ,]4wii)Vg`LV2?ϒ%KB_XsgٲeL81PߔJKK}r72*mNbL>>?B +锐pʢp . .Gr!233?~<{eذa7l3jԨ~,[/sZxyGBc X_`SNm4={6YYY^{3g6>|g!6)\}x<vСCk-42bTUeԨQ|޽/ؾqFMhDa֬YXM7Ϟoɗ_~alܸKJʐ:k#Ygywy,i޼yȲ .ӹ馛Co0d&i~-^?Ot:ƌxzC|x`?ۏ ,Cz\r+M"i@,XرcU.]x`0PYYyRyi&\PPРs$&&ǍO'N# VǻwyV;)z V~@1p (*^kz=bckzu0  ~]huJoݶشFOR?Â'AʱN1gNQ|]9J<c@U=XTU:()2%RUULjj*^׋NQjL j=,{e'{E x ~7mop6T9^D(:}Bj3T+AH^1[zwJ#%KE`xqU"Ғ\.n7tuvֽG/ Zet SIxٖwya"-ā?={+COcx'G6~gW~q/i+;aoescֿ[lE F~A 4|rӛ6)f:6>vH3.M_;3 Z:LqwwH%ǝGώi|؋oJIO0c 2nL2討^PԼpb/U^0Cuyۨ^AhNр =/t_X4.e}|_}hDDwGY6R&N N])*:H>+.sAPV9t:Tn7V(r)EYY~zSիNTGo[a|mwă{j7W_WCKۺp Ri8Ja+4ߕ]-sLTUি,;.铽E6bbM2[Z}\:u! ODH58wМY^I-4/۷1qsJk'w8S͝C:չOn(ŐLθBR0o'NO>CYxO&^+AD>CCӥV~u/=]qн/WAWBcCT]]c<+E%ch9#/`44TÅnu`2:IJL^/JB UoMRiZJ_iubo.&ѷnk}EvNī8(zt摢9K{v`gpELeGT EoDg lwi[֜'|ANNVc/ь y{RhCT6t†)9JlJޠ}+'b6%Ӱ"b[VpPǫKۚ^&PwZCչO]6Z :QκB}:ޗ;#Pg>+wuWidϏX(Xnw߰PœftJQaT;bGAح1M11vBlFUUV+6#^Α#Gطo^˟(:q9(e/B7`JL#Y[*m”F\.8Ja?KNZ`+ڃj-GS(zxZ%!tN:BMm>Gf0vT*cB_NXFKqm.hkux6=^.<CLՁqxvlG񸝀!&KL؋ZT'$h#hIb[ˎpwt ZH#Hͨ 4͋:0vXZt~l_P &9 ["or:6dj|O>"M$㡰DWlaSU SyyUw/Hx9RjeQ7ޤ i_ S3.#XO:زm;FO0#;NNӉhN&vNiG!(HD_POo:+ĵCŸOz_SB*q-:6|%iTc8Z?Na hI:}4Z]ڨ %Bc~vvMAU9{g$X_'YoAAN R  SAq Ù4995kְk.aA!L NqܹdggsWA~bر^rTA) 8EAA( A AH]8bbbдEQdĈLMۣA1<6 syhFii)͛7'==@> '[Inn.3]}W}> ('[}j.bгgO^=%55_8|X3X\..ՅIUR+Քr*v ͅFuRiٲ%[M6ЪUxQUI&DRRӧOG4l6#F && &NpOBÆ #!!;Rʕ+yW馛裏ظq#}W} [VVI+O>$vСCG׮]1 ~9B^^yyy\zF#^UU4o6p8P]]M׮]6lXHyV4PU{?V^SN=?tӦMc̘1[t҅cdž-BYYY:G>v /pMӢ{x?8W+n[.ӲGޠJJٷ}{qp) 8r )8TƁ}/E-W.z=f !0r<裁W ,W^aҤI\p7tf \y?EQQ=A-m޼/:MygBҜ( Px88O6?ڵ//d2Ew;v,p/!!m2dMFy.Ydm'|Rn%\OnjCjj*>(yyy˔2iҤ@wy'bŇS111ߟ_|իWGm_x?DhD[]4ߎS1B<5 śęc-&$&Œ,f$7gƋsUUv*˱8s(q 0dz|4K3]t)g^.]w^7n/O@nn.O>aС!pvZ[vwb1kM1 L F]yz^ܪp㰩.\6ܒN. F3;vD4N'UUQU7|C=J;qVR (T8j&X퀳&k8R(GHIu.1Rd{4 Ba=l= ]5+F?i&L|eff0 c?^fҼyݭPQaGɲ,hƌ~"#zG$Ijoo< ˥>uww+==]&MaQ__ c~effriC|>iѢEC" ̙3r89s\.&O,˲x2eM&ITGG>[H+5%)kz500oV|Ο?~)|Ũir:0aMKzեFuuu Yv}i;Pvv6Hm'Nٳ5{VEEMU+""""<sssUUUEuCTUU)777%mL>;wΝ}@d)p#"     H%FI`l}% [ I$+Rc8򔗗O#|/j>!@;;=d:)FۇLw…G:|zS)sBdeeNC(0fg>Ԭyg5?~^wfr! ^ c܇~(H(y8n=w_I|.Zϼ@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(@(BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB4(ƓO?TO6n p)BUTTXզMCQ հL֭[)05,++޽{ E`,Y%0( 4!5!jH(wЩ!5YC m0.GɴQ+VPII~&mݺuȴv%D7Ͳ1a"6-X \Z25:f TRR}>ZZZiӦpOjǶZsH(8RLVMM6n(4eYd^|A~f4M9߿_۶miQqqUYYn˲tq/HiƝYViӲe˒~ɌrթL6lzw۷AGՔ)StQm߾=ŋeMgWgϧ7^h0T|P1MSڼy+4M;v,\]vzzC[_hױ3mذAivZ++++ΩSGgϞ )vӅvuNKKSNN Yf&Ryə3g]R s{JKKaZf^}N<yLPt9$9l7ϫLn%{\Z=6^] ʴo߾RC4t:xTUU]vl ˓t'5pSZ/J HKI`x/i fH2%YH)C w M߯;w EäF!0RL:5"psݪђ%K(#GvS1aaa֭[^{bxTXXƅ6w.>EEEE` gřf>B0.!+#ޒ,Iz:y iVL*%#҂-]DI$eH2$M6W9#6nQ0[2~|+Fv o[2bC4e!G$~x>d(Ȍ4E x+& !Z ; BՄgp ƁEx5P=ii,zBaӴQs@$(v9h1r83j.dFx}F#6%#b,ވ1>'[~=>=zb_fV`#ʼ54=U9U_?@7U|s/IIIܹ8//^(Uplk֬`ɒ^`Ak[:(7; `U,v!b2y={1b^bccl6VXo۶Ϗ ki:8ǪEPϷn0,Kc˾-q]HNN&--P͚5sάX0ǎ[&V9`.Aܹ3;woI_(Z"n{N S`Tb &D@QU@ZƯ:Re$ֽ"eؕ~:1yuۓ017u!.o=HXt M긿ONZ5:o $r\XBLfrOcc`{ ΂\L&3:%$/n~FHdt|ykx5ϯu; 2,WUӀOUǰǗnݺ(^;N$>C{vwĉڵ 9spwtR>|) $$$h߯ݣ( /^11*bR^m̍J+Os=[d|%$$oʕv>77WߠA;fȯngR|;\ʖ2+m t 5kJިxG, \&ʘy#}+Y7t;hBީôz8=3 Z T735:H\<:2^Z11O3+8Ȕ5s/a|ڵ5:'ԳskPnkB{ٶB{ҹFxs{aY5-09U6@= LMoUMWq,d??/Hwwk*={/XbbbZB?/|w. uNХKzY*+;geeQPPW;%66E[K\ߕ_<}\ƫ, ƛo;wEQ8|AϴZQxxꩧ=z4+Wd̜9)SꫯR{s Ư(oTX.KK|#ӦM#77%KˤIe޼yÎĿYzhe)4e|fCʉZ;ឳbFwdO'p=AbB<%YdW4߁{y'2-G(2}Jo(cz;VL1{f{]L|u,R$wѤڵ;ڍ=>=uօk2[CiiE\7bbvr\sUg;S3*2`J,njR[Zvk5э׳l*رd8G~~z#g/8Mɩ4]qtIӰ{7T ^/yV 6%r=|}ZFnGhk7.&fk(+lإ<'Oyٞ_[ˮsYyo]6{4o{9'l (ea%Gy!kjֈ(9gFr(.Bk~%ZO1ykݗ\uh 7X좾N59|XǀL`/p:#-Et/=Kjkm22rɨ'ͳU{@D oYAqI\ڵkp}Fc #S #xu4y_RRR%8}e+E« (: c|GԩSG[G/]ұcG֯_3zh&ObK@y=o6++n 0T?bc/g(mW)JJb}g<Æ~yǵcu gЦMͮRQ[fϞ͆ ۷fO׮]˖-`^W^pg:['//O+ϝ;l-./;wΫ诫fggӷo_IOO]z]=V㡗D/GuԲ݀RVjQRQg(R LUɢ^Wzpȵ~ %ZEpP4r0bnZp;}I:zB)iU*uvY(AGOMM믗> G߾}(ԟ~zrQƎ?OK޺u2e ?#~;^hxAh\&ӓ ?vӦM+o0͝;͛7cYn%)u\:tB,*&̕W\¯^:EăAi!VU |;'TZQ/$T۹Ф@s6'TT VpO?{ vĿx;p֓v|&Mp/\ܾWNx'I6:t$xN;IRk P0q$_OB?x#ʁDp}<${}3Ս5F@^[_V3cAAQ  ̊oȨ~H].M`IM( *W M> o58ĝ;n 1114hZlT$;fJ߸qOh4[iS ?q ֋o$;~n}f|7Vn65NbwoS,,'hU lӞNxn>ߪw9ʉ7r5-&@#*Vǽơm -ؠ֋nHdv4!!`?TEPw,Om@ꑜ:skby}Z?-Pn21xp`{Raְ}ЍO~>㺐ugۆlv5GNg>i .1Ɣ6?;XCKOǽw {{{ /3E>_.%fk5!ĵȗrtu jm\ܺNo,W:`bഹ5DRiwfK!b 3A(rO s~۝Jd\c?/Hx9(arp[܋WHtUR1ד&\qPoϿg_g!+¶2 BUo/(@bbbi BUPzĖz=NVV<۷TRSSٸq#^ ui*BϞ=Yj_pS?ꫯpB&N]+P~5kCjjj333˯N_F ӟ=ɄS׽?'BQ5esRAy oR  {d„ +.K},ZkdWd'йsgnQzkLT49^J#Sa7j(㴴 ?5Ny^bDnn.ӧOo߾ٳQF*L_\.W6l_} 77RRRJQyqgC wOL2ua߿?۶mcǎRPKaKڇ PfM~\.6 lSUKsPݎdaE( ;4hP~}ͣW^٬.5kp2W _f vkСCq:A J|rv;FPd郥m۶\+͛7t:Yj-[,tDHGP;; ^ũOEf͚Vm ( WJ!"?{HQ :nm w@z~1Ê8 ewqqs3[i^=|;|# Z᭘U3|x*J\^0:oXv+/Zu>wqwȡGXx8( :uݨsκX!1!ᘭӞd#&8t ^s' g]ӄEl %7VBkz#/E#l(C"pjV'?=Ofndg|A== &̀|FRRRX_/nD|||!To/uJׯ_֭[Yh_=k׮`РA'xsiW^ڵ8Zl ɓ5*gfĈlذTLO<++BϞ=gym۶|? 799Y˘7no߾~2~x.]WYf(VZ1eN'=˖-d/TZl6k:w̼y|T.ڵk'¸ Xc߿ǡ-f=y$p^gJl Ud۪h6WOzߺ/ P(+.V^*Zw}\i|BBBuEºvaټF]Yť$q .i%.1Q6%?ݺu+2^Et:v&%yVq/kKbwɰaÀ-*jk/n^z{n ۷&]jn%}w[]MCFԮ7|ϰaٳ'6l`{WEM6?+W*kbeӷo_,W^VrT|w"N}@cDfͼ _ o}\_jj_G};S߅uRZ֭[n:HzN0Z^z NoA:@93}|89rD;S|A> >sΝK͙0aF{Wxh«k輾; ]XEu r8^~.F}^VdddеkW(}233ٷoWףo݃⭏QTg>wge+ꖋ1VZzRRR/33cƌ߽{w lVrʢ;v2_VV,JQxVNݙe2[NZ rYYYL~%KDʂp)PYq2V@+YFDA+ S_\E+L|~'>vvL~*>lcIDAT:wXD/-bر٢XC*GΠҴ!4/8qbѣEEl˅Ѹ@qHqt\~cQx-tU֭[r-p17n\f5sΡCӟW_]!dد_?\.}Y<#,^2.b t:K䒓ݻ7W_}5C oe?a%u._C=D~Jfidb 6m͛9uÇ{u]8N{\ Ey 2_|u/GKu*^㣏>bРA3lذ2/ ].rżyhݺ5tr-0l0/^}z ҸӧsIڵklj'8zh3uׯr3p2_qd8rH:t('NVZ\.0nرcZt—oРرcebzk,/ xm3 /rbA^4eɌ꟥ [K JSA--Pc *ΠEuD‹_ oC-+L| vmҎǎˊ+*|~U5kk$ 1a„ .E*XEs΢`W2[NDA"( TuBkf"A֨uy\OmYDpephˢһ) ՁXE@ǟTQq)w.[INy@Z`)(L"wA(_UW5ײ7&KxYΘAᄇ[۝\q\>3Cq8krr0L~鉎Ɍ[.~98y^t.O[bR >=X&qߐ?8%S;wULofX0zz)K'Aʊl)v>ݮs>GaFo 6r^7Y,>Ͼ .""XC,8.\8G[&ub\p8P\k{qg?3uP+5qQ o}NT(GNG9TZZ~խ4翝ops?C9CdlS{'{Ǯhy޸)7waLJpq³Cкa E|;~t(Ol2xqğ]q ڈ _g}R?,N2ip[xn͓kvoVe*Pydc:d! os@W+ɫ1F+seMEMfa!9CAXxVE~6.fkpChh(` ȇZi aB5j.pm^u]]^S6lnlՒ:_ʹů4 &ݛ;3"֨N#gG'@iN#0W@۸(Ҏf 2?R2M^MLT On""uWWI]-]Nӷxozu-gƃ㸯K/weڈx69Gw`=T/PkwN3,Q>ũjj=cM:;Ϭ3Ůɛ_ zN7_'!f,( vr '4FtT,ΟF\.L~yzB,[qnCR3* u=Fv52ybhdžEhj&ok`xAdrlT9< 2ף wŷ^;i>c7+v\,J,fKx{?]ڶԣ:mgl/`gٛ~7b;æ=6.Տam׳?'pGuYY0  - Hd?`|֌܁HԴl_4x*_. w h"n?HW?{ę|>r9w9vΧ@Uːfy[S& n\'$]9~8"22«'3ct䓵7a$Xë%܌s΢1YëS?afBl6BP?sהz\8{Y=0牬ߌШe;̈Z 1YlΦm#Z,gA."6J^A]=aLXëYֈ(.ف=7EqyUs,߇n^= I;b9w'/1=Qu=6O]Sшڥ~A+9GuT9w')t3|jꮱ>.Ԧ|Gᤗ{<g54iF39>GFitzF;K\1Nx͆XEZd!CA.'oS19Fq#cs u3/;؆dА <r;|D2KE%D TׄGOQpT Qj 5~Z&xfbո3&s^LA*!žGqڱ_8g =/A8:I]AA(,kd5AEԂ P)Q _  TR yAA$%",IAAk򱱱Ģ(h.&&X֬YSnJJJ??5roOi&RSS8q[Rl6ƍ$$$3x_BRRR辢/=7''}X&O{/WӉ? >ZqYKȿ0ٗ$UGIHHw̞=[,P5Xq7BQdzثL:)Spwd^u/_ȑ#/;w.vI&q7oA.{bxꩧ`̙nݚcǎ1rHꫯ8}4/2͛7Q:uҮϝ;ӥKؼy3 6G/VX͘1믿vqM7ydSOG׮];sL҈dƌfҸ8|0ӦM{lɻ⡇bpy.]+{Q>S:t@׮]ٵk_B/4|%)^|EC_8Ջ+VЫW/֯_Oǎ/0773gExx8K,)Qlyl4i҄[7|0O[ܹs5L& nׯ/R}ٻw/<=C5sǎ@:R2]vlذuֱepB _d k֬qԬYuѠAȰafҤIKٓ :z3|RSSiؽy3gmڴat(ݛ޽{An_ wƍӧٸq# .VZ<^iӦ /VPg?~իWk5K/U7mT '>>}^z%СClӧH9d2q5אlf޼y;/;w$;;Ew߱k.5zܹs;N:1fV\IFF\/WT^~e&L@NNfd3иqc8@ΝKFy8K$$$ ֬Y0Oۄ  */݂c_xHHHs,_/Ν:u ZHqːoGoc+OLLGZ}`-Zıc;v̘1_TVӧc2Geĉl۶}zL;F-ܻz>cƌ'ѣ$&&U4 ?xw2zyh aÆ,[L[a2ܲe 'N 66GjQ.*III7Fi5h 3ꩧ-=3 ƏOݺu \#-CΟ?ω'ĺ (9 jvV32Fe%KKӽ {EQ8}4 .duM3`^l5OAM>޻]JAMy+R^KǪUDplKc݃s  ^+04i҄5jTP6SJ3f wVѧCDN%nh⥌oE"L+ODo.UӴiS ƝwѣG+JRV,3_xe%o/MmڴaÆ ^aO?g4oM7on@S>_ƍټy3y7|2l0)yF;e+ѴY_Znͺu/SN_xq2zTЍ7;vS FGv;dX,~7:)tpw}QSƍ9s M4)ÇөS'x NW5b޼y4mڔ+Vj*.]ʗ_~Mhٲ%gٲe\LMx ^{a|W,\+N [f>}:yWN/O>dakGn{y-N&::yf{fƍhт'Npuבϳ>ŋ9s #G+2]7lPS FFJ07ia#Lz9޽6m=GO?g֬YyuX:uVZibzׯwy'#Gzjn&}YUVd8i[=QNi{Wt.,^c(ŕ${1֭ɓٷo_/J?_Φm۶aܹaÆ1tP>/^L- >$%(yGٲe Ç_~,]$֯_w\h̙lݺC2zh~嗀), +d ]I sU^ʕ+1O==_ W&efBLs}iJnfnfKM7'|"JDUyI볲^]-^APًK}ErAy1 PE  F^A1  7VA7PhKD v1a„B$''& @fܹP ^1 O/$@N^CFի XI&ѣGVXbcǎ^" y.j ᅨ@<8}<ˊ( NS@> V F^(_.J0*"+#/2#/EQp5U:|0ƍ>cɒ%8MVdt:6U MOO6%ڸq#&M?Pydx)φ ꪫp\l߾=xKjj*zP!뫸/kذ!| :tUV$&&ax \.gϞ_~,^wyKVEQF :T;rXf O?4.={0hРrgyp<ԫWOGv8\.ׯ_~a\.rrrݻ7.>$p^!CA`\:/oMl6ӠA5jpZjlذӉjt2d.\HF.kM'mҤ saĈԬYө]S[$+)ѣG@S믿}vL&ƍl6ktJAAWk>~Fu޽= byg9yui0` dҎ~_QF8NZh}Ȑ! 2D3^k׮rF>&&+nݚ֭[kC>};wO? 75oޜ_~Y F^`5yx`weD^ F^P5ΕPR>DRx'5y W'BUwUISs&;k viU"|MRUO#{ Uc޽+_|E˲ K/Cdز38 mY$@qs\BQTM^ 9y9}1Gw]5&' b/fή8;st#ADD1vQWk w%ڷzSkN6.qV|VZ/_A F=ڼFofxs/bQ fz1 BU3gށwӽ~)X߾tY8s1 yA@ޥ3z_>`}؛ .F^AFc茸Q7WJk`}=tS Ahx@䃞3_k*AA1Z. /   Bd>lWIENDB`qtemu-2.0~alpha1/help/de/mainwindow_new_machine_4.png0000644000175000017500000000667510753140477022631 0ustar fboudrafboudraPNG  IHDR8ZbKGD pHYs  tIME ' JIDATxole?;ۖ3vlLf?O   DU2ƭ[pwSWWix<,YBOO\1G@$kgN#t , P0_ yСD Ȩ Dhyyyܹ! X,&W@P(eeeM&)W&|OF EE)#, YngϞl oj*k-k,% {?lz3\uEa|q 5|mȕ9g B@ ƍ줶Za EhA!t" n2CDZLh ~7t<a,T՞ɺPX6'Őhy'vX֫i>!gr[w^a_. Es#8_ 9Υ`1d8?t㮧Uw=IU?˱qD%e]Z>ΝKAAлoBao"td H׋(x^ǘV__?85k0::jo`мo̶'xO?r{Ǻu/-umD^uO>1h)X> g0~vէW7===twws̙CMM %%%@Su4q$0nɸfg´0N%9}y©-Cԓ'3aР1&>kɘKcDN.HR+mEÌ:"#uby9ŗB%;j b1 y$fA'ǠH蒝XO8i3 d yp.y&HWMT I95&<\đq>WB'iFRN3hѢC/`(Fz!-Af͝;]qmQe͓\Q9*b|NX,륾z^FvڕrD˗/cڵ<׮]K8ܻl2 6mbxxʄ~/YL+'*eCujkkꢫڄ꺣GOCC*ǎѣ544PZZj-Ywugynll={,5M?6۠fΟ?8&. '^s ZDi&麎Y3EyN~GرcuQQN~0Q~^|EV\iݺ:*++={ť)((p#W,YZ4 ,s/;;v***Xf ݻ`0ŋ'c`` }+W4[***|gO?c9aKߕt ʁW@/R6$\$&l Pb1m+Xt<ݷoUUU >,' /p9FGGimm%}vdf]A{_~?OQQQ}VQQA[[{N>#<ƍٷo`֭[_)))@ @YYdŊ|W {qoNAA~ZZZ/X|9x^FFF̙3l۶;3{`0h޿evɓ'|2 999)L<[gdt.ɴd6o:tttNqq1&Ж.]Joo/,7o/;vSWWǭJKK V⩧Ƌ;::(..歷ࡇrd\<0U~M6y* .ĉfΝ,X/( R\\L[[0^mO?… hmmeǎi) ͕ԥ 4 `P&r|qb7ol3$[?999ޞj:ŋinn_f8p .ٙ 6lȑ#]G ]ʿHUQQrŦMB ۴iC <9?:袉Er8J;i` pCEShW`(ۣ} w\\/**bǎmUy@AD$G]va68~8ǎySNEaذaȲL< 'mZ]#vk֬aȑ!1"fKwM7E>^0LXіʧ[NQE,Û/Y#w9R˱qyW\9KJJ9sfBUnҥu.|>}~-˱r/*~ZfUz@?*La…̟??19N}2'7 Hg^i /lhl6f|>&Mx'x/nb{! ?u?˗녾+ޠS*~z_2('[VtWcOOX?7K1 *Y$*7uԘM%GPEe9pC>5h%B]+ {?`CF`T[ȎQݵ}n2j~)|+,3xN N">ո# YZmk?~\2M2O%Ї#%@*ߡ%\$_'##l۶{2p@dY?Pĉٱc,xOeF\.( }#2Gl ֞A5-hekiNg̘[l뭷\C^W^G zݺu+@D,@qq.rr233p'N_~)={v9Q ӟ *c$D`#BkzG}BQEm}' 6maHZeeeG?W룼ڋ }sjYYY }ZZG閑D^NN/|y_7'WY?MS x,V}T,QUE/O~~>TUUt:Y`˖-#33ϓ¡C?>+VoB?[vcnEU-06y)|>7o#Gdܹ̚5 UU/v5kdeeYd #Gjڑ~a:+v |a#v{QݺuڵkѸ;G`itN.cF1u{PU78YEGU~/xl;b2$`e^}#CUUMNq5."b\%z4^dYN%0= x,iF~5n}A G(itM#0eF@"-c`{]pkdx4kOOc7z؉B?(x.Z91'3f2!J8(lT0V>\#o.YGp:ƨ VwSQnjp-^QB.>bpx Od\<,K/Ek*4AE 0 hZƎ+"[걃d̙C^8w\~˲Lmmt:by] w%0>Jok gx׀ЌAsa~ c=ÇCFLje'%%%ddd><5hee%[laԨQ$''hѢNo7N'Ÿ[7xCRVVisׯ{z4ܹsINNf5C ooQjj*7xcX,L4_?~Rdw,Ok` 6 ͛7Q@Oh".^'|j7rQnݪ?xez-{MM Vbzv'#ɠ5uI?#}ᠺo6:̎;x7kZqtՌ7quŋ5kVȄz).]$IzdB'b،.U?Zʎo "0MC}ێ>\B !a$... ~1g!&P\\ܪAQ;>)))"b444`23Q:>:>1 %4_Q)+wt=zU \Q]mV)x9~%1_#Y *H*̺4WhW~z#\lÜN* J\q|Wǩ*<8.7'V:z(ԩSyPC(J帵Y( o{Mts͠Tln7?p[s9]-P]]Mii)0ydv̈́ 8}4#F`L<C}v.Ə CTsf*j|$Y ӨwK,ZfJgݺuTTTɏc `ɒ% 4)So>6l@vv~_l5c(d'eWJcG@B$ѣ2e 62vIVV.LEQ(++cԨQTUUq 7ZTJ ZhZW];@ՏY iEQ>sz/r]w~+W4A:+E/FIa ߶{{k^v.]QӧO_BLO,(ݩ+3pw.*df/:&^YV3 UfV=Xet:aw(!0*?v}BTU.p&Rg}GZ DGaaav,˿6g".M5~h~,vqri"BBOA5l-K쇨cEm.1HQ̻JKv ,d}XWÄ  CQ^$QS{3\!4 l#RFi,ׄ5|*:!@hDxtyĕ?E{b^CkT%"CP6OS-^g+w&)d{):T1#Ji[o[/v0":Ӿ$ɰ: QX=>%(H27֦gLG!t4qPM$ȑ#$|,s-I%k{ ąun]O n4`L|lCi^xݻw7nk=ۍnO8ϙ3\fW 46RE]Sjh&op۞={Xx1XfSNOԌ}o6>#z"h믿q?:-K]{'2qD***"CNN={ ڲ, Ï; V^Myy9yyyȲCw^\mfZH-^6orq2qDv;_1b&L`Ŋlܸ1%ڵ}Cv2d~Nf̘Qŋd͛7sNy2ogΜ̙3s=M޿< ؿ?< 8Z^}U>ӄl53E#5`Xb+9svӻwkqnhd:}?%%E+}# nRSSV.;]k8x`] T &7pmϸrJ}1c"4x}|.]J9{LrMK44i-byb1TBpYA 7b냛^:K̡Hu$[,H.pC\ 4ycѴxܚ]\@hrArArKœo۶Mdh3ZMI^RRٳC- jUYmZN$ꤛ\HJH$dgZ(e'TW yjvp}d~:;coUδEDZ3^6u z50kT&Cdj.m Y31fX7of hgnajaڈ4ޑƎ_{[;՘nl6~E[A3SB `Ĉ3ꄓçHI2G+c#Y+Q]IO L^v-{g]x4 x 믿z+֐\Q8@^ &/'+=8ַSZRsK7ɲs {,E[ߣ҇G=|y^رc{aРAlذA_NKj-X}1j(EA7nȳ>(0j(ǃ>(8N+fy+mN~\>~P1K E::h`~ NOH*HGwWVV2uTf̘ofH{ٲeHĴi0LTVV( ^{^zχnGQظq#EQx<A4yܓ&JJJ1c>ϒuԔ?D6&P|M=|v(4b t Or]W8|>!~rYK mb6Q8i|>"9hvlr9USY[R聜XSC 4X)/3 /i偣΍}n$Ew%+ϵG$^If&YcI13^~^Ʌ@6yK&fp ;}Jk;=,tS1~EJ\f+^ɤb6N yhr#rxȆ(7x9WB.UUXẾfLj ͆Š$Oxlw=R-OhnA!yaa!˗/;OIM),,~!gcQ!$dY~yW]Z.wEC\4Jp -M@~dÖܴZh7Rz5ג\xkw3s̞k{-L~)$]4nn޼-[K/e>`0Ї,˙Apso>^|K槟`ٳM6qohiiWUg{u0x&so8+Xf :"=_Ϯ]D"ڵ QkSuu5`p'2X ,,:L]^ Tdݛ$.{K&cH;YzuFwww}{/|M6e .o@@-<w)eU! SbFFFG;,oe՞w/6l|޹s'v[ah?8zQMee5{4G݌Ν^H_ꫯw-z+_P?Y.ǎd#9ۧ,s~TﵲȞ v*L}=˗/'Hdѽ0^~gzraNX '˸?ӠlԥV/FH!M5{ vzzz?sn:f{ ymDWWhG}t{[Z!kK Kv#/?{,}}}9%7D*xwa/"pdMufoN8躎B8$122;w.LfaT\B"71nF7˶5wZlrӲJjoGmo g$4Yp!`;wQSSCMM yryWhllvٱcGo߾J 100@SSh4G.c N E%~Ϸ!B0.SUU[Zo#-8qq8a֯_S&޽{q$IZZZhii/4ϞFe ?p8eU@SZr T$; q@ 3ƫf4%xVųY7Hq̳,i!$YY@~;޽{ v{9l7<Pyf6nHWW۶mq`M:!2. 1_{|k_CUUv]?8 rʌfL}'hhhIy- ]M_}$4N`wE.,y"ewŒ1 /Ŋ+" 1440KD/U8xY 5U8$q\NKKKfSI1~j*>aÆLmmm|??;3[NZ[[y'h4O)q`qZ퍒L/kB `䯀 %%}6LG]PQHI_,[G-&>v, O{aEf3^-34-H䢄-vJLBQڵ}MPe%2P`0H0dtt ZoI։o߾ ς9x |g wBi;vW^Ae\..~oÇKk??9s +~y䴰8i߾}z9w'K]}%3:a?UO+Be$5M&܁3|hyu5n dR%bꚅ%5Ã[5;8=yϾa][[[_p,|ŰX,klܸ۷zj--- AO,bZgTVV9vPB{{;~> a˅u"Q\h? ǁaEUU"NEQPN$oWsu,XJ׉=:6F_Tgkcm{<:ߝvͪa=j͛ȜQVh4: x^Mgg'x<#N:j7璉b!ZZZȲjE4***Ra%֯_?Oz:IRDD" bDS߹1gJ9Xu>Κq;1:>WIl`K ={SN<~*_~Bή]3gNAq=88Hss3/W%l)*EɌXQQ-j6miN:a ˥UuBݽa%l  3^/.kAQ.hχnnxp\%H lAy9G(D%5p8B"}Y'fQW%MPklN-DXcd􏢤 MQ3IY9+L{3{IGW-:epəW.n&L!\gL\dva3y 8!anr o$wjDyrޭ+e]zNf֭" 0KL1RQJu!Hضm9rl j^߰Q;bO?͏c?֭[;׾ƶmxKDbŊ[n{ SƁxenJmw4-[5^~eZ[[TDZRݤVҌS9 Y ̼y󨪪{' ]+VSOe({ַ~y&MMM|_Xx1Tƕ+ ZIj8hU>nݺ,Y>n7K,k 2y6o<.n~=w_fG#<ДB_\2xWEK|FgLE%/￟/}Ke͇,UAR"ӯcj"CYD&%ATAڶ&QgJެ`u"ǣ4FJ"Ctߗw.Sʛ Le%5kfF& l 꺞srt)NB,v+~uʽ;Ёgok?ٿ?˗/Q߿^6n8.uU>4McΝn֮]9y)8… YlD·GHmv>:P|(Q*tfʕ]v;WaV-fLE/Yӹd^7ġApv'Nذvڂ4HI\/z@+ eH$RR`Ygk `~?cccNFFFby$':mbѨ%N4?_sz;W_}uIj!@%~#2Oz&l8+9~Q`lNgTVVrbtwwсfˈޡ!>/M{4UPdY %$AqXTIݕյ?c85jk*d'Ƙ_-gw{t4_1X,b1XjMMM^ꫯ@EE288HEE^{-h]PEQ!cgϣ tTEम]Su$@EQx^Ga}eQ3e WQng)R3w6N8fA n6p2sУhk;Hm^6`Ȏw%{M/D\kB#o%H0,e0"O/1aJP PV>QPCg?;a*NSEvbo)mgƍ9ŶmH&9ߙɈZ7\8vv(߉0iٳ`޽>,_Ws}yǀTo.|)֡Cغu+[nGRAn n+ZpSO=_x73:*b3L~~)9 :0qA3YbV#7[S Ӫ?~uAԧ>jehhŒj<_ѣ/_O?=~{{; h)TD,u=sЙBe\6O~$-bD٨RwD`IrH۲ZQNęIIdϫ(~x ~bb҉h3%Hl&1آMf5a2Yg̪,&;OéŘ\g5a’IJ`2aąC9a \YM!P 6S90qA3k{fՒg u6abVTM̺o߾LVf~=:aϚeܩф{ڬjҝ4-z*"6L3.555_ wR"}kѬqGqYc_Od|*t( `jjjqLDXs*.O*?x)ȁSII'o8*g.z6hGYZq&saPłf2FD̞fͲe˨u3}hkkD"@ u]g4ӌHݍ$I_t +>Ft[jl^a9fT1Uokihr l9;#ĝl\S+u֥2iCQW P{:mMSnO?GA$X`_J$sQb,[lʌr923봪G~N  ݊if"! RR!P2c>i1$hډDwyIJ#I _HDIYh\eടAn_7E PUeUQCHxvD*u"k%cjjpBüvJdÚnVa;?IPTʆګi:ox~+wQ[*=ohoog8all6AEuu5Vt^XV4M#vrI$H#t]R]f,"kg4‚ ..bTdB#2Cp@ 2nOeQYz=! rn6q8nlFסԄƱCq&q_xaVȜ:'\pI`Eyף9.7,P >S[ie!y4PN+O|VJWYv`WW>%KPWW ^/---p8jph"?NWWK.-+Kc$ .\8.#K"a֩e`-WglmDJܕN+ hhHBd,H(IZ,X,TUB NBPTNs2CB?9z:3J8o#m!*A6dYey4[]0ۧ}#2P@K/`kCavIDATvK#I^~;XLe,)2y|_KNKXuUDvcÙz', 0::g|̝;`"rxRJO:5NWV</<\jg`$b X-TF,& "UPȲhQTdRӈ(DQx$e M/͋6qPX73 : 4^;D##;$Ww|`eÔfrTVtC/u66d_]YWyuxrgϰh!)H$;deIfTՊ(Fb9jhc`J]$Iʙϝ;>oI/I4!ZTF aဂ?  Q KP5WuS]]}QlI7E|7v[yK5Dyn'Wl Y6D"8jkk31Jv) $ VZE]]v}Z"85]4!eM.3zSnt"I-vg Cu:x<*++dddX,*TVVd$dx<$IL*nOqe@l6 ,j2 O$c T^mWm\r6Ḙsʡ1~ӏnEU4TۊGuAwO'$\'r kÆ wfЀ嚰.xߟY;w.'d3tάSY7:144D4E$AjRQQ9shlL8-%`ҥgKu@jTÇ 餡l1|!PUX'c#qr@"ձXUE[!0A,PraZ/`4|>FFF9fiv<555e<(^8N3ab`W&jjj#7`,-ŨѬ{Fд4{_aDyl.8۔PPb1k:}5N*+H_g#-Q&L̄Lj0j~>l[4yRg]kˮL~ ɒͬBw&s[YeR#9Rئβ4;#Vv%F-oVBE&f jzFPlKaZkPӌ1ǤZJdTyM58a'7RtH~y$ٰJʈe2YĬijZO,a Lp"dVY 1l,[*t*Y<{ dVYUm%yKel;ѽr5ab0k1KwQE(Ʉ&LwB1m:3ɜ&LL}66a„ &L\2sn-IENDB`qtemu-2.0~alpha1/help/de/wizard_1.png0000644000175000017500000005340310753140477017404 0ustar fboudrafboudraPNG  IHDR~ܨKbKGD pHYs  tIME #.kh Y IDATxw|TUwZ&B 5`DdE`.v v]~XwWE UYU,*E $B@BڤM;G2L2lus=s{W6f6G:T޺w4|w<¡/2yq-w Qgv眙̏(3s8#]wү%d[Sj ߙBYYs,֗uT31wquԠ {d FKzS49Mi*z׃Noe3?S\Vo|w> x`PhNK.|r/@v~&z@OG%117Q\%KˋQ#x E!;;e˖W_QVVGm h.ջO\50}F&/دYV1/'Ԯ~m׮]ijլV=q(6mbl߿O{d BQ~ᇈ/_ݻz l?$b|/((f1x.BV]u6r…ͦI׭[5LT~(uQu?[t V{Sj0q5ֺ5JCWcBӑS<x.d۞":'vB_0n0 @ik(]3ʜ'!:[x3:rfg[KS^JN/n}x{.4|Q"EvVZj%;;X-[FMM prJfs `ʕL:EQ(--JQUUIMM^x;{,]Qz@o&[n 47 EQرcu>Ϋ?ۗ-[ȯ9s搓òeMܹEQx/7S̿x_Ŭ[>QksGXJJJ(++#11JQQi3G_| FɣK.tޝW~2胝Ž(d[M:5?d\s G*7n+G~jkk5ר5\HA )!ŐRC bH1 ĐRC!1 ĐbHA )!1RC bHA )!ŐB[]b.y<8z=YYYL>$k[n uj>C4x (4Iy%ngq̑jN=uuO DPyvk@78L7) 0+U&mW^C5AhKۧ o 9-Q )0zEi HϝZiSt=^?Lj?jkq`t:%M8+Z-#nwV 9ҢqZGu]TЛXPtz fР,x`h ΟƟnР:[>@2A1Ns`%%q:BWbԛ>cnh'rf}:ڃ;d:v3s8933W-}M|n>HeZeB<|noU\' پ 2ۛ!F3g;HЛu>pSE=Vyz46-[OBB>>^3ԖO'#)SSy:oVkzj;tF1OV]Q-K#j yt $}S]hte@ jJZߟF=@e'/]ll &U  :vtg1 춭w`ܧOy~XZMRjT6caM4XVh4q^5 g CXd= 8& Q7S .dk@ݏ'Njg! ‰Ӄ S=SzٻwoHdO>"FAh-EӮ4 KϞ=QUÁ``ݺu >\(_ΙЭGII1Gc4q9=TU9VذWbFf3N猪r]w/kqWS\\jEQ-[(|W|(¶mx'NGrrr o5sLrssٴi4*EQزe ɪUu4iݺu WQ̙j%%%;wqF{Fz(G}ܹsB'~Ek׮߿_|QΝK//' I篧=;l&ONk.l_ٵYf1{VرcYt@VC\h ExպrP[ag.tTUEeeeajeeerx[~}iz9 ;BD'۷τ(x=x;\{yڙܹCa 8 HJJ"11(E^[j*gDE>}pEˀ"z?#iݮz|> DEE1n8ĉY~=v- ~%pG,SUFu68XVϟ ĽX,VX7oׯ/9pFk6Y?b0ؽ{7nh.]OQQ+V/8p%KسgO"\۱Ǎǝwe]rx}={6EQXr%^NW^ ~gG<^1b0zhTU HL&K.+WGn8p`H׋iԴcbbxIOOW_ NGTT^ѣGrB⮻~: @Qf ׇǃ~ljzZ^OUUU$$$n6g- > gp@P  p*ɜ${FfiZTڇrim~yUDթA(Bs&f+;+ޗ^VT`x HD X!AOX^.ꮜV]eԧkt5:U >A_KzAudחpDGj_}Dм0z'hk8dU lZZ5.AA r:AZ>l/("HA8fZ$ UA8N޺%H|ZBRT-(Iژ)YuWs?T{5bvWCm]qTsZnW *iQP]YN pYj=?=]5 up~U,, jGہVIcI J%o 7F?Rtzߞӛ&f;ѓd 5FpPw')6Jif>{h01fkffϺ%i[ߧ\GY1A74,l]+BʕpS-JT:HiD)XLQ]3ظm[ ٺ78,K؂0@Y3s8p3s8C$q=x^Dk:Ataţg3ƞ5[ə9A1xl]CكӍBaw1ofgC0 &ڭit^*Wyt+ɍ{Q=nnu&2NOu9o>u;+]N.[H{4_ݓ\ĆQSp[;8iei!R:? lzz!Z!.1dh蕖BJx44N/.EUUUpa*ƸΜ~e2 [vBj0r>|vܱD=嫸۞ElԑI<7d=z%:Sݜ+X{& IDAT1L=?FaC7|_GZWR..㌝pfӰ7^;_"9 [v Up> ۷±,>?w}6 D#/8HtyB+ݠ=?t=R l߾C=l?_) v2ݙ7ћQ=xE_w>xnfr9&n=މFۢ:4xۛPuwԽc/.;[`AÁ冴?L]Ǚb랯3F13-n5lzwuaH{y[/WApTgd18 )s"Fs}{BV>.mte"ncq8D͠iSVV󹡓VͧU:*1uu hq(:L@Q)r.Eg43y]z0v]]f i0Nk*@ހ7]<@Tb{` ]S) ^W-ZTH{ @^[e| &qct?g1 wJKu\&3CPS!?n|"ӼS<ڏn Q1'$7/*K{` t;/FІiN^?5bƘr qKp1&?:.|}QFeҷJD%t "m;?MA0B443FHbUa$v4qhYh#!k|ib=A8F~G- Ipۜw! B@("DADFhrssKo!C\{nyA8A Q Ac.#߿קOL4PiFqxDAh <iDEEl*5شi1NasDTɀi\^\NNK^LZZ>ڵkEzTV#I-D[LhFmJ }D;ػw/xOü{( Vbn7555i[իeٲeM6mZymܸ??$W_}5𽴴FMlCH|W_Q.lEQhzW`MIuZJWSr l.jjl(bl6}RyB!33#F+ƍ={6۶m/' 33UV( L<]s@:.bjkk;vlH駟f۶msΐ 6?$R*++f„ |O(W_}|ڵk5jT e˖?`69s&lڴ)pP( se!u?'[O?۷d;v=FQt 9j(|I}Y6n۶m' wXF'py*–-[ [oEQ>#Νhdҥ<3aKsǔ z=[rP\TEiI5%UEUlRDEEѳgORSSIIIiB6m9> `ȑRTT)//Lu:}]@xˑ/׏ŋ`7*~ ###$ݖ-[ɧ{TW=B 1C;< +d,Zn=zp96+`ĉ!i7qH%%%dffpWs?}ῴ~a=[/_;R^^yf< (ΟI&pW CbIv10$&Yp:=TW;rPeccum1fժUZ\i85 .dɿF~سg ޒ~>|wt`!&6 QϧtqRi9SO=jl6~-sOX[5JKr(4͉! " }RUUd:UU/ yyyʈ#Bx̘1ٲTU%77E$tzN'.W&99ŋ|x^ TU/2vX*jkkk+֭[C6h[oeС!i5McÆ Ap8pݼ;ʮ]PU?PUʆ zuYTVVvQUg}'|2GBIII!QUUFM||<QUyx<Q'|B߾}1L8>|R'}` t4ƎҥKer$u/i#4N;Ś?\.D !k䪩 #reʕ+iDVL'X! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! Q A! B "DA! B "DA! B "DA! B "DA! B "DA! B "DA! B "DA! B "DA! B "DA! B "DA! BAēøqTKFL233hW}(Blt:\S:qEUUt4MkSu|vՇ2Gl|[n1cƌ@\BK5 xyl޼>9sDL /-'//}*+VٶdJJJZR?b;_ڵ+QF1oBVXd9úuX~=[neϞ=|>>C 4ŋSRR?Ɇ PU_|mQY"$Yfdݻwσ ;`ٓ_|ŋ3x`Gvv6K/Dfff rdFE~ .$-- UUuĉ!q999u]t҅<&LdyիWȚ5kP={}@\׮]4h( W\q?"_??$##{2n8:uٿgn硇oۿ%̣t:Ǝ륢ǪU0L̟?ݻgz!q{. ,trrrNsK/%==?s=RSS4 qu(_L׮]OT eژjo駉rZ,&Nئp#333o}x^Um.~/ g> ؀J (ʁj x\5=_5=:N6턵/ B]<55e|Q~$X |9!q>MgOJ4:3{v}󽜃ח Ek۹M_[ɣzqKwECn7^MPt&;ʿmԿ_t*^f =$)N~ҙ;G9r'+h'3Lty ˛w x}U!vo}6"m[ѵw:w&`9=:Qӆg#) N!(`w#O_ۏA4}N\*+JΑtOcƫ?j2oY: ^Eת}T:_I8qf35n˼ [ ?NLJ?ˆy,Q{q>AE=#'R{}8E.}g0 _)s5#4Ion)$sI~gwFiA@947STt (#6./Qf#ׇV㢶ƁnzlL&@iS@Ƣ5{Л\DžYSw=ob%i> +=;ݩ Q!emgy!_@ʽ Q-//w0Zēw\'{K$Mwy\0}>#njbhZ<*e]yp&]ԛG^?%*+#wBI|^;aGJ}sna9~˹%qɐ>arKU%Q/~FTRw~Y2곹k)M늣1%Wh3;ޅ{̿4|{WszKfx̡+C{Z_{O 8QS4ʻbb ?+4;D%5\x rG=ST=v0q~Phҡ+ix^N7͉"!>j|h( )T9M7aKWFA3(}ͅ1:s|>BζL$%[ \w^/vS\Q(zw摤sƮ7{%9fnO8jmB́m\Гv٬U ̞|!zep2gy~><} (fEy Ե))+_yS\'@{UUv l7;c%kض|ӅwD&\0<[nHζ5f`kmG%+˧̡9s&74OK'| ~}'M g;wX( fdfK33Gy1Msm/8QQQx<l6v9x֋(**ł^g`/ڍqa0ǡzh~Au9G9Ktth%{جhuhak$RwCv`/ NA w}Wšm1DS3{Òzj];(-hQ}ݩ$g]MsdaKx -!mU7^ xH| np'4%eo/0_Z;UQ;]EΫ=}{9%YGYWQTaca/4ՃOUo@v tg6cX:isc+wq)_FrǴ&sR/E1EXl|O^A&k? pהbkDrKyӨ~h˜; '%Tڊ6O/#[5e|>49A !I؁꤫A1 ) 8EAA( a1Loؽ{ BKu8ŷzɓ's%A~bĉm^rTA) 8EAA( A Ap|`6ѴEQN'`LݣA:bQU4 :uD.]0́x^n7N 6) m%Kp饗לk6kMʺu޽;:.E`61:;(Ё0L3gy5OFt Dt s وѤG(x>\./Nݍasaw))(OeE݈d2a44-z=:EQ:DdddԠ AQ>#>#nfnf,X@vv6lٲ|#->Sl3> ӦM;z( `00`_u\.),, %mj~=ںu$:^-mp>%֮]yO̡TVڨک(s%ՔWqՔTS^ZFUJ;؛_*TUUQYYIEEXVdZ 2/9s搙?yGYx1ӧOfѹsgbbbxf͚jGa˖-׏ӧvZySLaܹ>|_tskht6kH4WO|c|Kx~ jkkO8*{1ߒ:=P^^K2 r`_Z):TIJáJZ_Pƞ~+pq^WoK7zh0  Ep8dڳ;vЭ[7."|Akt:p8`X8BAF0Ckw}egq7xcU<6oyGZZ'OfĈ G?ٳ;v,7.pFj͛)--EQ,Kěgf? >={d̘1̘1{ iM~!l߾K(]sN>@6L۰n͕ kH/K/4$puCQ/^wRR=g#ӟ;w.Ǐgذa-:.SҥKx'"ӑkXicYImC6hcx4ߒc^&11X&L?ϣ-sS4M$$[HKJX:Ēd!6.(,1Q1Q'DCrJ,1Xbx̚555TVVp8p\!Nti;8ڣC 4E$("X#^xEFk<FmPQ B ݙtvZ)H>2k߻k?O_dN~6nҥK5w\۹s 1cƨB(Qgiʔ)zwoRR쿹Ɨ7 O۶6mF8zMT{!Y1Y)1bQ(R0i2MSm뫯RnnnddXB5XdJ2$;Z[Gky.)͒dk-q0GͩgTI8jm[c˶َ߶#?4jٖl˒eyeٶl+Ue˲/m0x|][o]2d~\.W1uB &BGtӶmh„ JOOeYC##m׮]ھ}{tx:U[[PO.ϧUVq1OЇ뢋.F۷kܸqxrdYڪ)S誫ty<Tp PSS /4C"-[r4tPy<9wrFF/IQuu>s1Bi0h̏2 #7J(z@ Yf) i۶m_k.Dm[n[)))߿{G{QYYY%ڶN:IÆ #[jjFQFhaÆ[oWՊ?999zW.W^yE999܎ݧcǎرcӓy'zEEEEEE/BUUU***U^dɒ%5k!mxbeggkɄbOTUUoW{{;@E 8ku]z c:|8,ˊ"\Rei:Sd,҂ T^^.˲4gmܸQ,Kk׮ռyeY~g͝;V]E]|ۓm7oެ,͜9SӦMSqqquiӦ3Y\h4Zomֶ H#͛"_ /͞=[z'TWW={衇iڱc,RUU:矺;5sLٶ-qd>mݺUa׽ޫ\UWWkٚ9sfUVVj޽ZhN?t\苞l&M{~>p@9ke)77WLԔ)S4opP$ <8z{(,sIr'Ȝ~mRE#KKKu7wqbzGUXXإ7(//5FwY>@Gf,MmH K2%#W5\~֬Y#ۭ5kwQKK,믿p8,۝~y^-YD8<ӵm6}qٳ'5l֦5khɒ%Zzsc{UZZ< 0@t饗_ք r>نaYtyNNNp8IOOWyy>'˲tgʶm/i=?.˲=ң1w߇5J999wiǎ;v233봶ӵ^O>Y$M㨮.V'xLTssImz2 C`Pdn:555#Yg_~Y'N$}Ǻ&۶*#I*,,޽{8\. Ðajkk[& yf~}9reF>u%YO~9ڸZˋFrEVZZ9s *++;G z433Siii eaEX|>ꔒ@ ֓qHRttyvwmmm܇duIqB(]>4? Eb¢SCjH(ǹlkˣITVV*;;R^]cm?u    }seNulG(D0: NXn$i5NҜa٣`I$%bcyh}v^`a$#S2L=%]OňLjt CO):IN9sD"᧘GBթp(! 2+&NT\Ĥ't C3&#@'gv^^!pBI9cS"-%^v(vH:,rBA6v%% Yuc u5(c{EB;&!lؔP,)cg +~(5WR u.7?@JJ >(O< -pܓI-%cWdiP)s*-^xRu/4(}Y=k^LM#x^ 6sv ,ȉ+&ޟܑ~/m#b+܀a^p)Uu!<{a6 ǖ.4Cx,l܎b4z#]v:%C7{{سg)Rzw([:ͤ;exvm>rzS+$$BmaJ%/|7{ҁD:]6hή/EחKs+f+h֬Y%u%bw:t#NgMzU& [h233DOnl`wuO ͆j=z4_~%}%118 ưajUEL~:.׺p3h&klZEcƌ+0%%{ : RSS9p~;{v#0dz;s2jZ9F8v_txv24.b.۞U%`*C7ɤdR2)LJ&%IɤdR2)LJ&%IɤdIXlbHJJ׿5`X0 L0{";ʤ y3=huB1Di9wgQ.:cxXt.$ߣ )R,ڝ.zy,ƣ13ΣHe#vKSxz/)ҀeT'26%›ukHQ tR = Mfsy.z~Wz]N]}"4?6n+ %&&k[G@9nܸ*%F bE}]OeC!Д+mvѵkWL&}pu1sL;8p o&:twDEE70fKΝk2e ?O,Zzd.]3_6Lh\3F@1%[J+:w2z@TɌ[ |(8SmUYb"M ~"6T~NKP-Z˧vG5ЩS:uݽciƂ&J۩SsaE!<<1bm`{ Eu[ylT[@5;ݽ{w fcݺulذ\W_} cvvu|W==}+?iCQnr=ʪ1#&m7td+Oy#v^ϔ)Su( ٓ;wmD׳a<(lڴ 6x']r%0yd;o\6laÆlڴ/OcѢE(ºu8y$P25_oo/]soڴ-[xUL2EQ8ySRRR8Es9X>|Rnib\%T7u8.Φ2M!''Ν;lb JĈQ|bIJJ7ɡ_~5ccǎa4iԨQazMiݺ~ `jm۶1sLvɸq2eJ'O>X#n=z.|Yu_ Qŋt51sp w*'w*D #$$$tuۉo߾bj4q8<޺x1Zhٳg9s -7w ;ٳ'SN'g߾}މ2339r$d̘1L2>Ç3tP ޽{4i6mgϞҘn5H\߆ ^Ą?~B׿t::t(m۶@UUZ-Cb4i:xg)G^AjQ ))q;ɣ˲ &Btt47Fzitb"Ml}[_ig}盧{򏻚T9"o=n}x/[XӔRGqn:[_C>9rkC޼9sF4f}0it aSݽqm؇-4rb}{([_CLk4-!`ƭm kZ_~}qmDax<-SY.;glh8OزJi  @,PͭjyFOr4@R%*=YWOx(gk/7gCYMRNCtjFӄzdt>~8ۧ ^[[zSIEA.NfYh"^Z+xy[QZ4Z={ůd=}ec6Fqtҩ\~=Y.ysE,Wd .M=7 wo໷f$@&^Ǡw[3ʄj!tGpHϜ2tΰmtht>4Ztl]}{߬9HϔVK (yzyުjkiPIeZH%-k8 }頯?+Dƣ •Cd"b ZLZ'J %/?⫖g! •ӃTS6VSt:9~6@fDPSlذpT8M*t:iҤ . ՊNc۶m[(5!C85c #"2^A~3|Μ<^h4R\\|UwmFC=ļyx7[ 77EQذaƍ^n7( V4 ڵ 0m4~gΝ˾}PE1l0Ea…lܸ{'\v@xxgҢ( K.eڴi5k,5kV.~Oz8nf^y}~,={`,YRaz<'߾HNN.>sz:th /]ؽ{wŷL}[pq#2ؿ4{v3=rݿ3ȠM6iӆ&MРp8k#kt:1bF-{&2:H#FFpb.o(ºӦ\.l<З62T>ņ ka2sB;p8p:8!X6_>ut޽vTSо}{!::EVaB;u"''f͚qS뮫I \ڵJW8Nn7:HBBB5jL&L&%/{1 BMw( 111Ĕw5'TAb7mÇh۶-]vmصk= RM "FAj۷XCj,Xnycǎ1ydΜ9wQعs'YAO2f̘JKMMNLLg=;_]A,^~(yڨQ#j_4!CЭ[7KN<ٳhӦ b=NQ6*H5jZFNN ,k A͕l/G~(.HNN,CRRGW6l:,] x1̙#<š5k9s&۷v<{v1͛xj1b֭[w0ׯGUUF*{nclڴ))){ұc*taÆ*#, ,pOyXq⼃Z٭ EE68Dͯj:kdN|||w߀HLL,rҤI@ɬs=z4wu˖-Jp t,477{˗#HOzܹsILL䦛n*wβyyf (*nwӽwu|s"W i7v]~St\i.цFٲe\u3V/u:|ѤQGӊH=^ĩϦE,{ܪU0X!>=>Fluк !!AсӾ}67{w,'Nn#Fy*E21b15|n Ӊfp=|t:h48N.]ʂ wؑ> t^x駽;vd21|NTAA Fp T Y%v("HAdW$ĉOJ \&Kkj籅o͇OW-Rˤ閴 0U_!rcP-FF Ur$- 5kXC'2j$>4wSdVKhԸzWUPW抅ZR4t?P#a a1bKWLɐ7cWEeLϦL``ϡ^m%PKll,γl}w`7-1!t8_.LM/[_f4>VcZ_wf]RZ]4 6R\)]`J*,g_EaJGɋ@8`d訦lLBh4ܞƾ=)~y|"""0LOͽ:ZnԌz3zӵY՘7'\Cj-D|_?Սw61z)<_Fk"ys>s8ۉmy wYyOs!<:_ΪZ'.;udYb+ZsMiVIZ<<>bXu@}-\e/.)l<\eomabtxB_+,Q|tW&y7nECu9(Cx=P,G1D5QMHTChtNa/ӅFxi-z s@Vn)9FEepXr5[K\AZt%Q{ 31D5DAi+BQ4c- s!:c9rxΫč ' F˜⛖۷I[pVzH_zy)? (FuX!rDžDE_f=a]״ŒWF*CVw^]h7M}8ϱcsS[!B{k_/.?LRk+ч^HbU֡7Eq<^~”qViXh9! X;XO.1 UjQBżQ A! BP/FڵJ B)6mk׮W#>|XJ^&j*FA("DA<'Ofmk֬Õ}5M< *zܶ_< cV+s ''">ovMVay] v򦥪 Wi1[ EY*"\ 1SP`\dЌ(L&F#W%}-İ0.\H>}X`͛7gΝ̟?}_spB6n܈(lذ'og1rH<ddd{AQ>c-Z(|7|(¾}iHNN. d\.Wt)ٳg4h_#GdѢEo#99/eӱgEan8}N>cDDDanfҥK*,/|M3>r:u*_4u~7߾Xre|ԯ_UVy}?Xi~}˴t]-4 z [ϵc\d#dvSPPƍٸq#}U)7bfժUL8Qw׫aؼy3' 'g2^V)),,&/JM6`6ټyV˒%K?~|c"H[)S<d\l:Ek3.H %,,^jSXPLA~aZTEqq16by|!5lnppp88gN7NG}{"DALn&rss9~< UUIHHfسgObbHHH <<\(5ILL $$$P\\LAAvNGHKKl6B^)**l6KTjy:uDttɧYz5͛7jzvnQQj 0c tҼys FaӦMٓ-[/i#zxwy#xhժ?| ks*oӫW/^uc0b=Ap0bvѣsVv3|pl¬Y^JIIq~q/Y9s%W=z4vo#Gҿn77t۶mÛ믿+ܩS2p'|һ}ر~oWG7 hBz sHM8,Nܫ&˪ٳc̙39w裏CCC={d߾}[뮻+GϞ=9p ̝;^z{w%++;ŋ:u*#;;}\s5dddK/ЦM~m9uŋ[hAllls{/K.+b¥[5swZ$EnD+qXM6}jکS'>3zzz:aaa̞=~~=G棏>*'^xsѧO^}UW<]Xn7f͚vZo-[ʕ+O>Mxx8/Æ cK.]X,9d|rǜSF]o^rv_SOe0 ^/ZOzYx>"m§3dl(5=zߏG6NAc:;-Mf23-SN 6 v!Np-YRCpu^p% 44ͷFUSJwkPN>nƍu{aA\+,5(AD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD BA("DAD A(QD A(QD A(QD A(QD A(QD A(QD T'99QFUѯ_?zRRӧO-\Dŋ3gNPys222hڴiߝ:ug4i҄yzjtB˖-ٰa.˻r ֘f3<SLaƍgϞno. mMy饗*=_ SqШQ#֭[ɓ7og޼yJ>}Xfwl].z_^{]+V5j9}X,f͚ŝw/gUխ -[On?h7n_=3gDUUo\|ո=NS$%%1~JӪUt: Gƍk4}NH XlYP#<Š+m?|DOf @P 8^e콦MSX /Ul#Em+C ^Sp$&&ti'555h׺uk?+V`„ AUڇ"Z `_~~~0R~!/A(Q"B`\g!"-%#!"]T 1m&E)GsW1+R@8+]`( 'UZAȧdi6 Q2IcM=uQ2 X}>;-#`E]hZK]⩀28H|i-F]UwV.Tqjrkq[Z8UȩG8NTUEh*-(Ͼ}qן>jL\3 Ѵ^(/_t~ G8]¯OrZȇwvCgykiM!RTܞ|4mͨ.gӺq=DB^X7DŽ(04gX 3t&UU9]ȷ:9%(:BsV*$,Ђ-fo8Ѳ,Hͣ~GϷ˲G;07dŏgyɇ=/k ,чM*LOEu([9{kkxmTDo[( Lgh+uťFnS}ŜrQ0I3c9 148n mZlX,N'f(Urcy^dt1W(.,ٗq1ά#=t⁁qUE\( m# ht!~nX2ZҲ+:nʃ~sEi  W&3-DB :6468= D摤"raf?D5@UݴnڸP?÷gXGYjl' j}} gU[`+f>Ր]mǗi!1xkǃKW77h}߶kW.y(EZ>-@OP_gWv1Vzl_\.Fd\ ZTIqŎ\Ao#*2"""pݨ(;raFk@5*qFT\ }x=4Ȓc}<092YQ"k8\[цhuPZՍ#F[4nܜC6B<8EϔCgV OF}nlMRFm:OZff-i:z.b;+z[[d@̼F5hLl\,؜%嗝oQ%4ƛ_Ze13!`&;E#1o `^8hihn:؞A*,yhxJ _݂VAVX|IDAT]Wݧf=GӬJUOUWO#[3$.K 06=9i~B)4+v|Zç;$t*nZ[wc+4 p80Y\N>ٳa2j,17Tj\܃[mj EUK݆!2cl vb',9OԠ!Q daCuhuh%\ͺӒO^ՎCb m'NK~#Ӆ,. ,-xG/znO>(GkΡd6 Q-zv;=aCg(Fu9n͊\*. P05h5s.:=:;=`~h僧u٭X2 6Ą-LB#):+K>ƔЦ$ 7ORz|ZABPsa`K`Ҷ}N޷TWoU@ KdV+P2UV):k}V".7gs?՜Mr>uI+X?AJػfA/泇GXAOEn _U*YG%eLAMQ>Fu9puAq  NQA) 8EAA:)A!7o&,, ш&/P\\̩S=z4C8EA:br.9UUɡ^zԯ_~#׉n;vk.z-NQA>sLDDE;VTrssٶm5Bx(8F#:]p'Apfd2jjhԣ7h( NIqŎjaLaTDDD`0]Z-EQDm rQXXV( wwذan:x+^]n7SL!22H_]P͛p8iӦoޣ>6\  PbBLpJP0 ި=->JQ R*")\"F6&fy &al5 923;~7TjWk6/N>,%$$+_pӧOk׮zW4k֬ˮZQ-;N}璤<9{ەmYL̅8%&%(0=WUOe^}y^%U:Wz^V :?` *..T׮]խ[7vmv[$ jݺu/o}[ڿ>#P.]4e=zTO?6oެ;v _Z:uR^TPP`0ٳg+99YzeY6vX%%%V^I&i۶m裏twG5pշo==zr馛nO?:to|Zb:v~\ѲmٲECwCzѢEǭփ>x͘1#EW4322Ծ}{hQ. );;[:uRBB}و뽩z?^IIIڴikڴiuݺuѣս{w9B!ﯵkתF={Ԗ-[Խ{wm޼Ysk֠u|뭷iDShjiE7Һoζ<`=ZGSL]w6~W.Kr^}f+Y;ЧϪ2{U~ZeS)OqWsR%J׹2*ʫUQ^3#M@@PaR*//WYYJKKu9%''SZҔ˗kŊZpSO)//Oْ$׫oYڵS0~33ydٳZlYxGf~~\R]{7n:uJGիhOc]p~mUVV^ {z͛7OϟW߾}5vبj#hʕ:{|>뽩͚5KUUUӟkתLϟז-[R8 IZr,jpܤ.P^x7YϺiN0MM}5^gь[^^ ,Pjjt{Nnrv:i ,Yj-St*-=“_d>LEg鋢rVT3T:Y''<:[\a֮N'%eQ|mG8`M0AiiiԷo_=󊉉c=&I|xy睚4i***~.ҡC 4dK i?U Ћ/ղm|uMӴJ-33SFȑ#FY;/SN}1bלz7չsgm߾]wy%_~_v[nQuuq5*zouZJicǎ,KǏڵkgϞ5f͟?_?UXXq6UpGSl_Yq v^-oݺA׉McP/(S}eYzj 9$̘Rmٽƍ}45zhm߾]<;w*==]v׏\qqJHpr;B8bcp3MS@ dpSSP:ܢ=rƩW^,`0`0(4g 0 K2{(֗Q?TS۪kc$m 6C Z-oԨQ7q_) [Cn*4eYLӒioZ2 F Ӑi2 Ӕi0Lƅ2 Cr::[|VOSnݔ Q>0֎;gٻ=MTllv0 Wu̙3*,,q׿m`egvwߕeYիvfG(@Ү];8qII uwtDn[r82 CzJOOפIݡ`Pڵq3TYY@ O`ޕJ(Z|@~'r8t:(˲%)))IɒbS^ p8;  z"JLLԔ)S駟ѣ:sΟ?/oYLLbcc=z(55UO<<x.vM7߬ݻ-..N}Q>}5^5gΜVOBBBZf \d͚5JMMmvM>MKKSZZYm@kD(@(@(@(@(@(=Qk*((pRRR4l0B5=ܣ P Ռ3Zu(|xq/gp.UMrr/@MM{*Tc1J~Җ_ȴֵ[;$3XwB¾QF(^r%$$( roi&?$ݻ4[t~I/˲쐐_] .$}9r5tPYCgϞ 7MI͛t |NS˗/ի/9߷~.m߾]?n:uǎӤI$I/֯_8ƍxbzG.p5k[jr6m{!AK:Qӿ !R֪?U(:YOR>M[1k޽z9͚5˾}Tjj$վ=Գ>{ZZ:v`0hoh11W+IЭު>}vv*99Y^-g?;w%bZ~֮]`%'=ܣܹ=wt:~zdH^Z~b{y W~+\m Èj9#|edd Y/x!!>PdZ]Ut^*(TpR1E__z3fV-J ;E[GƾuTuu 6-[Sj?Jݓ5nۧn/RyBL@WlWQWZX?tMm0V{(>%&&?@V➢zTIRvRV|>|jjŪ&QKrJ4{Mj߾}iC1n͞ y+N˲ ʹd Ôa*+*7%Ӓ,KCvIjO Eq(W4jC>wHGO QZhE}zz"ņ]X{*Ʊ7,z""""""""""""""""""""""""""""""""""""                                     uhKvޭ AJJ F q _yܹbE9ss|>jƌpԩںuϟO.QéS7 kɲ,A!"0MRVQCBJؒZ:57j(r dO9J?~d5^ix~hw5eYפѴʈϝ8qB{]Zsj||=kohɒ%2 C˖-Sff8 04|pG7 j;we4 ˶CB=洬,[N999={LӔeYϗaѐ!C #߷oƍ'4p8e-ZHi\ƍS^^.\-ҡCdΝ; v}LӔ՘1c\n Bz75uT͜9S۶mSMM¾~ڴivڥ$ڵK/1bLӼƑ^΁@@gƍhG wWNNVX]vO>ܹsmÚ7o>ڦ״2n9rD?O^xAgΜ*S:#GcǎzH,m(a veڵk-[h֭` P~dڷo`0(0Žq2 Cnf-v]'jРAڸqVZ_3gTx<M8Q7nTnСcڙӧO~oi |~@B =B=P:˘H#)!.a#l Oؖ裟^w=P?p zեg_ gIb6["a~-"a~-#ymqfVՃtMZݘ7Myh#{聗?{p[<-~[~b^{Iw/G߭+W'rKe->zJ}'־]>yYm{ѶMwݭmgW~A?vm菎G#_߽CON=.I 7)IƟvly>%;?)I_o#1ڒ{=眙VI]7^?@4M4&LegϜЮї%I.}P__zFf69UD/}W龻ף}𗯯KK$im4ҥGB/z[6٭_3宽·?zy=Oj_˟{/vV$п_-I̟9cnf&'a}=\=(t 4~PW?+_LOZ}v~.>_ښpM]m:s Om裏]֯7C~^{]/huE={_zrNyn{==ėuK߿?l,o4]:Wgh)Ϗxe?jջ{ğe֛a~8+PzMR{Ƴ閻tߡޫ{Z t[Y}vuW{+g>֝~}:Hk#w]}_q>[?y=cΗy^?uY[Ү;tc_ݻ.lXR_XGo_i++3za^,X`i z;О6oެѺ(O>4zznوݣO=~O>+>nڍ|F3G8q7~7J\fo-^w~F#~%'l$#}'=,P썅˰ӎѓ׭kOke媖uʟ빧Ѧ;ܯeI/街LOJ8?_yGiO(zd|~zKs죏7ywWW>[mlUqi隴|@m+;~JoIO͑0Kr&=خ]<^=S;xHK_3Nm]O}h5ض۩>%}Kz^}ܡ 7m$ݱ{~mڹGH/%~Ohfvza6/ EǾYN=:w]erZorOo&}|'~YOmdH6?W !܋xF+P=ͼmݮ;ѵӖGޣ-i@>{H?}9o[^rhm~>|qcoꍿ?uV7>|h`vM_?ozFڗ룏<?V~ܙjJ~|o23mze|}4O|ҭ6W}Z?ыw=m󊍟oyhi ݷ6mڤFi洸foQ3Ycz~mVzou?g>tms$̇.Izu9kOOמ~*4MGl<` |oǴ3bϝޯΛ03zeQI_('i\gD;^V~p_o{ִz jJ[ofl߽۶֝gWiS66~׋7o֗?$1N~?`&'_Y}y'qWB|ROr3'_WIs.yPV>[/_cK/̎9Y/ IGxM9u6M/o~嶗߼/e'hu/WM['J93է>]jiwivӖoU+uÏڵkZ~Bի3j띯U7m^o r^Wy>[nW3cү{BWЪޣ酧7PHotlݹ}m޹gk{ mڶkcPmNh\'\|8ڼsO-q +/}lgjYew7pf~~>sss|2&e,Bylh{jo**!`a3ZtANi䉣V% %H6\"*iyY$K?zn@M}Gy Vb [ ====@@@@o&o.gEO})gel7i٪ZO-̺֯L[m7fUn6oQXV۬ʾjt9^T[!u }tg Ocr&k>q̛ +in=tXH;iʮ_u者'UhamEݷԹZg}9>`Ri蛀 }[4|>8ǢtYVR]4V`Z(Z65̻l˫oAM۩m} k`5Za캵%(UYe;mov7Mށ:k>Ier}^]gUղ Giە%Z6o'IhgMߦ;g~>CrujǴ9{-cyuyD[ڪK\E9n{dŴPܧ+Vsi.Tߴo{?N]6'T}i-2bBL+I'ej>V:Ӽ+T>ʪ͡=֖ЖmP!ٴ~ZGb>p[W{ CtWB}i >\i U- 9)( fH} Ts+( 6iݨl t$`~V(dt}d[TguvEe=x|umuߡ(] %P7Q*&kA0iKYORhy>/TNj|; Oy~T/(om:˞,8mOKzIoRuXez>ƾR/yϊ˴UѢ]_s&o]/]ŅSZw۾n4&! $@@@$p>-񡙆iiiiiaR~֓{#Z8w^p-_ xQIV$]?K_PIw {+OdͷUz>K@$<<z{/HqZ=li\DzӦj'eg;yvr}A_ mВ.iY}zP^r8eug;.m ~B;94{mێQz[8QșJk&BI(@ֶ`^.:Y>'Xnwy$֣6OV{;o2PYNVEdw&V>r(2W:o߃H.a>mW._ɺNӶ0o!ݢunˮ}SGe1kI+ڇ.}#yeZ?yeJ=<.D!eʼ땿=f bbߴ~\XJu񓝪k9|o"؇JNcq@:}dWͶ:f}Ӗ$²~kd)} _7 rt벷i~4m.Ff>H$wu5qV(JB&uP_wX=QWo[!:wpKYORhy>/,2Ai.-HivY^yXnuc]arIj˰Z.#ԳeMhS3]}/2}9i|Z]Ca3ZtANi䉣V% %H6\"*iyY$K?}SW@nFhM ~*Ύ7>q`+En* @U4ڭdzcde̖eZy r*tΰ4ۨrN[H'mP]2)&*Gm2Իj{U5&,n(gևƚ&I*y(5\e}e+m .evYw໾eM]Wz-iYۢ}6vs;DoYlZ^gk~ncq'ܤ/U2Ty`z&-;~5mVrXl0侮XU6݊ <$<<#'mĥmLT\IuҨԡvwmeۑeyXUd>6f︄hg{v/]ŅSZ/T*lzW^AJok' ߐmg[N 0e~Pnsr@:諾ͦYP:ua~PzM!7*4>dDžKy8)wߢa'CGpNGm?KtqO8*iUPҊkϕg)㮝ǟgMҺOUEhF!nVjJIA 2cXM3KCe>dKYZ!?۴=|}uw2Mo6ex귩!h~Rx53Uu,MX.v.~Df" &i[x:Y ۔^M%m !7 |QfJ]0CwڨvdMW/0v*F`Y_)%mi~I}W*sV2uՉzs#o٦>=oyۢ[m.g?NZUZ탾uU&Y;֡egՃխUǧ7n/o(s|ozܲ'N.e*sZ}k=ǏW/( IDATyO.DrsCi '\Ϫ]r&ӥ-/+u^ VN%mХn짮4~갊}0ƫM?l|MI]巜?WkyΧ#C}յ+iWClM/xTiL[_r5<>^зL`U.>XOUӲ= vr\a`Ϻ)0PFCڦ.m,vTmU?a']dH-iPbgBYgz)?I=xxx-;%n\FbHIiWfZ\:ɫP^7Jړ.#T]ym̺=[wteF(OW]em K;妊cku,A+=Wч=ZeEkViN,>Y%.iM}چU;t)zٺnRGedW״mAK+̻zٝ}+b,y/*,g ]ʜ5OXIR=.4oi˪[-j>-@z)?I=xxx-;Q[h]\8œ'JZ4"seYguY.i4lS@{===0-Epz(ߡ,ne7u^un2˲j`x_*ǔ 4qM4`&ɷ.)[2\P@->~k/)XCݬj>Y6R|M'HIgRCu >A%LwEcha4'yPiO*Ox@cy] tYS9}0"A6\uDt8[ݖ0_vߺh|,+a7o @r9DF.CV5P[ eqZ][oS_gӧ򳞤ރ¹:}l8/]ŅSZU    MaC-W˳,sVeu9eJ1g }Re0I/<ɨѿ;IZՋS ,w>rDn(Vn++[5el-G LP v..>!iU.@RXND ʖǪsI'yl^,2>|P5kweYKR ]/g=I:su>j p-_ xQIV$]?K_YGYVe밊c]!X@> XzouVNHrƕ-˺q,/k&0Eמ}Ȳ\/eecieϾ0l, }`6nza2TEW6(UYOO=i?յ^V9+fìúͻEt$']9kSg)IzuO/ݭ_˲NJI;/+k&+: |3H{sY~u ʻzyzUڊ{ho]m[Om/!\L;d:׫:̻?1:r'}^z4Mz9|J0_30s"mlۘK]opIO FV4cBe몟k~zƓXh/^Yh7k@;R~֓{#Z8w^Kf@#u49:4tmyoa*х6iSxh$PNuY+i)sp*˲.knʖ'mXm겭*r\4iԪ?V}K'|!E擷mBhϖusܩ:[-57GSVmåo]hU3K,3]y,eլW\5Ey\CTM]u]ɪC7>ZZ{hWB}t'lYu'NiwݭxZ|\چoyW tߠhayΫ. ?CV<{ns]XPuMU2ۢhX|K6>W+I ʷө6u?ؾNoqǷEl?ޢ̖N*Ҿ8M`䵝mm<P,t0Ɲ(27Ycv[sJ={>uMclMOXU{)&z)?I=xxx-;߿xSqe2#M,ק}5@RfY>|ANEF`8}G/Yۡq{]3±-_ xQIV$]?K_ )ЯaZ} ̣T$'d@H}@ :H)Џ@qQ'@Z HU갩ֆ\ն_:/׹L1ѳű~ רԙgGh 6Q6.ֽmMruROܛM:aX(B[Nhn.oUd kdeVEp}f|c[|VĬu~˶(SfcQ?>}o5&mxK0Եչ/-WU|ѶQIFV,ۡ[]~f6WG@ZX,EvWӗ9WzXz?mQelmYF}X0[l˓ᶴ媶Y]uhі2ۢiygYe.dzSw|i>PW,˼mڗ{o `e-֏ŷVMoS˶^/nB]>;FS\!zUn+ݗ{ٷiE6l[/# ̣޾MoCDzm\w@ЉVCw㰪.>Ficߗv.sUC|")Z:FCwԬ$M[Ey'k|٧.ԡh:V5:D^]f򸎸2MLZEkm}L=ice|*kg-qUMwjjmd-'rGz(ܠ+>`;#nPĺ:V׋0T@ߑPĺکq/?b!  ʛ[nku;jbiG ޚ*Oh3 ص^h{2z懁i7[n꾪Rh/VӔ)cW8fGhN m;O Xm7R3Jv)qihIl7kevG6D+'-k:y}eyҦq}Kl}3[|eo9M0oў-j|ުouU¥m eWաL8-m,o[~j*/$ȧ-(oeo I HjEڬr|4oGq mEl]~AZ>XT -O]H_2-mhYU}bؗS,2mު~|Ʋ MuKs򳦵Z>\[`bykL9i*׃N$pTۂ6V}ۺh^n˺~\PļOE7]Ena}v_mAh{߅btgFX%|{vbЕ}j,g^,i@7L< d5M@Grپzd2Cmb)^UhA-tYgiv>8=i*ƨgu\OecT]b6Vr]|g'iZ':MV}{o|ރ`>eNZ3U5MS.ֵk{-\Q cUa]#V&n,[]kc>ϺLiMrʾ\zE9*Ng&'5`;@h̴kr ηΡX6WW<zš6vslzY57@V}T١8-_ Sm_ǪǰTZֹzp6I+o۽K[OYˡhM^յ٦wh WɧS]Cijo @Mq지+Fzŗ2i(t;sA@h񦽬W7[\{X!Hy\ٷnʼ-{oyϛ-xZkVz6VۢzeUh=iCUuE+}Kݔ?~lXN?.Y6'daZ][/PFݢx╽>r} kynڧjWQ?m7֟~NEO'}om=`lYoUucV۳>u,ۙEU:ƮMU}^Iu_6pr_w$]h<>'z]PEU'Ǜ&ӄں,7> aеF;}9B}h}mim+-73 (CDHwP?鬹 h_;f^,Ř˶RV!a[PekZOwчbIQn;K4>#*2L}#;=YSejclmcUfhM=BU{n^M Ys?좺m$w6*mbvu'j8o aJե>}º`[n p \z~@jfY|σڏ˲  ylh? cItTgh?qA 렬ޚ2+"ieJ[7-ˢ\"+oͮ責갮zs˶Y٪2)˼7k]Vr,4䰕y_">A2V_uo~ u7>6/r~؉A^05l&#wIep'e>u0ypiRұZ϶ ~}y~ڶh~Zg9\eLc?vboZȏO7CB9;iP-[m3ڵvi?m盯<0如5!VA@oz]&} WiZڲB۸~I>A?vOdV'7Cy+3˲ϲev]Fuw}@еV2N:B/|yh~Ze}!o~~e9zPl@wMShj] n0]{4;PJk@:GMK{]zG^ `4YwP-n@qB8iiiiif I/g=I:su>NG pJ'O*i(iEҵUI&i]h-7@===@@@@4o|TN G}Țh'ty<`B? Y{O2MIT>@ = N/g=I:su>l\I_ pJ'O*i(iEҵUI&i]h5lKel0(nC@ \[+@=Fn^m޹Gdi Ia>Ge/Sl C/3>\OY]r2:zNw936KEVI"oiyhavGIDAT)G0?~ơƟAM/q'9'|"'@Oxg-I҅8eYê^4==0+"yk9p Bvn,>|V|G_*z6Iaぞi iw+iLЏ;q`(R\@|g,e%_x? 'CZ,lp3-GzLa7ia~*&W3^$Go݆@.z)YIWn&{ N7)@fv=FLz@6U$GüRB}>?)P/%0A?GPXqG >: fX>ܳ~?w'p'y yɴptU~T6'zy?{y0݋;-t=!gxwg07C˿+ YK} _E'B=Hdx$4IENDB`qtemu-2.0~alpha1/help/de/mainwindow.png0000644000175000017500000011511610753140477020040 0ustar fboudrafboudraPNG  IHDR]CbKGD pHYs  tIME %;F IDATxwxTU_  $ 5  *"@).`TdEvaw ]./h4ŊH1*%! !^H:F |^3sv=4]F/v{y;vR0dY7˙_zDSo^ԇOp?v; ֻ9 }ظ?^hPY^w+wN p?(Ψj5L Qk|t@_ի뮻1b>>>SYYUI'x={=9$#~~~-Ua2<0ӉFDGGӧoǎ3F_s7b0.["`캓^V[A+Il6)((̙3yj4hWF W{wߵ2o<2~J/_qrNN ٳ`X  88zy[[26$Wq51+/#yDDe/"TBBBZluӳgOe˖񖑈{S&}PǏwC^}UYt/ְXVVֲmb'VŬY.ȇ~ N͆f#GdNYfl2~aXlL65kp&Nŋ)))bfFffgN7vi Do'.ݥbXtOߟwI7_ꉨDdäoٵ'(--eݺuҽ{wRSS?ڵknÈ#&99={2eYl׿ o^n(5{ V^e<ß^+p8n|nOBwn7v J;!DH"$I$B!DH"$I$B!DH"$I$B!DH"$WM"꼏ӫWyIqܴja ?o Z@: Ul  (Z-x)VtE[--SmN=sm]ot2?ismyQzT=~F+q~,~ɀ*m`Z/63^m~FzSM~tRr )**rd4|䩵Qzz:qqq,_^{￟$c۷vWB-{h2(((u@M ǎ#$$pΝ;=znݚTxRC~V'fddxl`6[ RѫWz6bx2ϜPКiGe޽U޽[}(֥hxx8Wư݋S4B4M/ċ/?O=Fy1L#ruСCׯ%%% 8Xj& vz{ _Ç:u꯮`UjRb-lXf1uTuso}ݧn`٘5k3fرc|,[F K,a͚5l6, ۷oWΝ˖-[8r999̝;vqJ4hl|cR6YvEqWyQQ /__{HD,N6SG y?F=d~jx}1w\u?̝;sWU]\Y_QQ6\T[VVFǎ9l|$00UnWmPifm-iVP I$B!DH"$I$B!DH"$I$B!DH"$I$B!jQ}4H\r]g"ܬQsWj&@Uh4F#zŵтÕ'P[P"J ".ZT\;Fi  _%y$p{_qxKAПa?v޽Wjmәozk$`Pk zlUH꫻ %S-A]~Cp-uӖ#8#!?grU/tOQ`GO=`4MT7dI4P(j`K#5&E2wY#@UE@G%.3elzz:seڴiXVVXQkz`ƌ$%%E||<5kֈ25,ؒ鸔 iṶҨڜEP=_OEEÇW'G"B X-6 8eὗY;wٳg lwCddd0fzbRRRCWKh#npشiŵAk'K]ɿ{]믿Nnn.FQ%=cEs8u]v͵¼y(**RИB#,>DLBf.Kɡ_"41zOLHHP`@՞B'Nd@$_bb"wqǦyd~D wݺuL<ŋILLdڵrױ 9s&K.U7xl9s &Lw+mM:uis.]jJJJbذaϊ+d21|̙+HLLd۶m̙3G-Q<sQ]Kq)wڪrŌ7NvYïPiԩztfϞM\\\F̙3`߾}̙3qyrB=jE/"\ BȺ)&O"##:t{~:"UM6`K,|7Gaٳ'8qsJLLםbGeŊ֥l6fΜ㏪'NTmBx({/-bĉ<l6{3gdԨQ?e˖lix7X,L6Z^SYYy&F`p ee͔Y(ȯ@Q76ghZx!((x={uVJKKl={SN?v#0aRRR())O>`vzʼn'xG 6XJJJlK 6 ш``˖-7?Sc, gΜ`0ЫW/؁%228V2CLnHII/U/1 hZZ-/2g&77~'JT=(t6nhqIQ׬)S Cl5{mI/IΝ;K7ƾ$V-y_0fQK|.զ`le-kjO}7*++y%#|x狳aleNǛOA'}8mqļyX,|s=,\c2k,xll,w}76cb\+Wn?)S;v,qqqL4 [Yp!,]{{1"##y<ؽrqIW)/ 儍ww咗Uwi>}301^ZWF]䔕 ajj wk q{$!Zj)oiHUDB!DA!BDB!DA!BDB!DADB!DA!BDB!DA!BDd__NC{7%{ z qp}uhtiC'`ɧ@nvaj%r\ߕd DsDžjg-Nɟˮ!c狾8jv_5GRN<ʳW.>?'Wu?=DП$Z~/@yuB"KAӾ ?`n|z8_6py~ٖ?]!9=Db>y ͋0գj"jOqhz/g-b{{pح F] wxG4Z{#:yQ54yp۞:fwM5;_ߺeqT2M[yXMTK|T_@Vo&,[[%u&+IsI@6`֧٥ej!\BsMo-9uDKj&+DJJ ƍ#>>7UY|9v FңLO';;xܿqqqуS^^N۶mk駟p8tUNSg{ݻ7j+kqC_TT$eo#XLSڈfkf!dl9x ђۗk館W>H-xttt{_5;wniR]vW_{\vѣG>!Zm`X8rgirٔk9 X-¨Qjx7(ȑ#:t(gΜ;v 7@޽ٹs%{\wvfgwz.m",4;Úayٽ{%PTTٳg9ydRw^1F233ٻw={b4)++#++ NGAAY5yxQ\looo^#%|]y@6tճ[5L&N>MVV}!33sU^'++BVVo߾XU}C)//'+JjjjoÊ ^A~ v\oÆ ~Ϗݻw\iժF`uVr n6233 ]vWg4aNةS'%+ħ~ʈ#hZΜ9O׮]ѣ> ɓ 6@bbbcǫ׭[ɓYv-Æ S3%;;dzzj?oJ^^zlx{{nݺZqfĈjWzϞ=lݺf̘^XذuV&N̙3yILL;h!="'NuMU?q%E9.i駟0Lp!g˖-dffbYr%۷(233i׮+W$22 k1elf֬Yddd0e&L~Ȉ#سgӧOSNj}}iкukN:'|Bll,ڵ#??N:h""##ILL߿5k~y~m5tޝUVaX裏Xp!"##9qObɒ%$$$o^qēO>|@ eϫ]+ǧLNcժU_u8pÁ:uLJUVm֭[=ׯs^xHuuk˯Z.>3ڷovszu(|gl߾_|QY LMq,YVWSI&WBDhM6I5/E J74E|jhڵ(p%;vd} DJJ v]*))^{׳~|}}9}47oW^YGQXXӧپ};3?wy8f3XVyYlzN:3ϰ|rf͚E`` $''SXX[oEff&ݻwW?1m4.\lÁV_gľ|'mG tEQ4iϢ( {psϡh8s ЦME᫯p?FAQЭ[7|||Pg}?WѨvΞ={p:iӆg}:ͨQ8N'z2\EQlS6mwLzBsL}SGGO@@5ո?NS]ҹ[(sD[ÁjEQϟϱcx'2dߓe˰|7̜9EQX`zLQnMHKKc(½ĉ9vwuC bO?aq( 3g櫯bĈL6M 7--[oiӦ1d/^?aHMMEQrss?>C aڴiL2 k$DΝ+O[ !$''(k8i۶-p8ذak׮EQ˛o({EQڷo뮻p8EQ0 k׮mAee{EQx7h4 }Pݮ䉊Ro*zj}:ΫOGIQ|WmR'Ue}Z54*DGa >JJ6֮5ѣqp8 8Aw2 q>&A!BDA!BDB!DA!BDB!DA!BDA!BDB!DA!BDB!DA!BDA!BDB!DA!BDB!DA!BDA!BDB!DA!j/?pVsb[_H$mڵkE.lFc[h xW;i$;'l@eZ&gcPT} "49<.b.RB.8)%| FZc@,d6җvqCxc__y/^^ÉLr@EK u8>_n[=Kjg1=Xm §|Z |RBlɴ<VZ+ (rt_Lxp R ΟOt;z< @yv2ǬzAu]4enzYK2  AxҪUO)..ӭ)**":tQ2+,N_=v]`ǎ|Wv|}}%;;>cǎ5 ü{X TqF2кukrr2߰0ڵ ߋr+J8{t1+DDD/dF 4;p_|q2=z'OrI?aÆZH<FZn~~΋h4RPP J MoWM 깗'x(((`ӦM8 ] WZ*[r rrr߿?}"zIDDF'OȐ!xFƌS/+0h vJyy(,\uީvvZ46mb뙮}Z][Oϟ'11c}YawѨuFpDyy9=z ???4 vnc1Ͳ*S k׮G31]UEJjpN.UoweРA|gD͛ǻᆱ~LKKcܹ 4T/_΄ HJJ"11K 66}`ۙ1cÆ #11￟"f̘Avv6QQQ$&&z\硇b̙$&&2w:u^xM7yaРA,XCqvnѣG?~S׸ժmذڵk޽;>>>q:7߬3\8"""<w}T= 6Tժ׬+m6l`ҥ+uڷoh4DFFי/ݻw;`1׵]f͚϶m۸;i#Fn:JJJ<4r㞇jzzGݵrkQBU/H*sӮ!.>Daa!!!!ǫ5\JJ =zuA=ԻPHLLd5k^ׯרMOO_~/QkU3e˖hHeL&ҥKoQu]sW}'矫n+ܺ΋'n:Ո+**c5w4wFQ6l,X%K^)//y]ầep5u^{x.mӧ=mذ#nqv{bbb9rDZ 6xtRuٰajW2]*j!?Nbʔ)ϸL7?ew zɕ6fe9]zauslܸAq urĈL>]JpDR3|u5eٯ_?~mnQJ1 \1v+e1A1Aj"76mĢE$&l67NWNk9 4%IR^IP p)EFqq17oFQRSS?~<3fȑ#jMqAu#55Ea̘1<^`%,XШwygni(ϚӘw4b߾}$y7͏m0CqRRb2VBEEaaaXz .P СC 8Ç3j(2339{V]n}'`„ tܙ_~#FSO=J߾}Yzu\Oo󸶢(ۗiӦt:)((`ŊhBXB\dɒ%qt{8p ̟?_|:qqqر >\}zΥO}׫W/zENNO>$s=굝N'<7}֊k6E є\;՛6mb>|m{Έ/N'جTTX9wuLDDv>N*}k6;ծ|J͔Z(-1SRlDQaV[%Nfl6SVV>V߫-űc8v0oÇ7zjv%$'':VߧxOZZӧO'?=C}.`^5FP( J;vݎfazhOR>cǎp}Y|9!\}8FYp0 X#%oo DbUĒC0 PAAk\WRe\s=ʟ؍}׏ I&1sL=JÇ7^s79zhiHKKGQƏ=E5'd(ٳpY.BVN":t.Ébwb: oHvP/p^n'/E EQa>|0j(۷oW3-66!CZ:vXɓԩQ#Geggӭ[7~i7n^^^y/cƌLJkתJKKO>}pwOR. ZK?\l255صkW?RZZʿ/bbb0(R+}WluLgx?y}agNe849g'󜕌3Vrr͜NB[t{Oӻwo#TVVPDNXZjQ<ń ņllaaX1ɾStQV ߐ[>>:PX0PT\JII%em#>>>bgWԩSu3ךڷV<_i˿###)--&g޽Mx1yUphgmdq A A A A A A A A A A A A !b !b !b !b !b !b !b !b !b !b !b ! A A A A A A A A A A A A !b !b !b !b !- BBB$W_yI !ejՊk׊Abjbµbr,.Y,\-Z0`ʀB]М TVQ0\߮ߚz Bs5ޏT7zj5AAi2vqn(jFÂ-2 ^.8~W.;O+\ ^lb~^q3TVTo෶7Ӏ _fIn n.%sX'N4o ~mث[{ ehu Pʔ#VVZl6_HMC@7 .)i Z-& ѱSkt:-Yg yzrC(//WS@I<37D/yO}yV=nq jʝ{>ۜWgΫGzӚIT-1r-Sj<.jIJJ5n }ýQ͙?UԸغ1{WIq7Mt҆6mpbjaZ)))3az`DqA=;l1cr.?qߤl 3W5iJvK&\7c8} 巎Mp_p7饏SXz̗NӡMo?jEmqgӿMUg? ~O~ >tC~~>OP{c-`d`1^,ZvS@b T T h l-*t>>$&׶SUkd|qYxȯRhexP㨴G[p:@:ڵ|TE;8Գ;v\xjt*OA[S3:uVh\[`NtOO2[Y>=2PZ4wMsuL&M_MAA."""%++xJJIOO'&&Yf]TD/;1113$̙# Yp!EEE̘1l.N8All,kTX lݺD.]JBBC clܸ9srJ˗3a„KJ5kEaW7Kh4n:nfh׮֭Cs=w'0 fL'%%ѹsKJҥKg -Gaԩ //mt:IKKcĉn+t:T yVZӧf%)Nj-p]|8Gc8EE<ń3{lٱcepu2o2vGCۗ'j1>|0f`׮]3du IDAT>y$vK.qm1"TVVUWq& , NSݒ&ZQ||)AVBnJ7v!ݱXn}Ic^equꊫl&11ѣGc0X, 7@hh(| &MBv"""HpڵkǞ={7qFpQqQ7)=.mq:s.OjWvftBk LAk?R]p p=?;>].g1h f3fd#((;r̙zWOhh(999jd2_͘1cDuT999XFEhf$VKqa9:َ'r+%k卷wDqBα39Ku_Op0joMf{^t7l6hlj չsgt:'ODѐlFǎ)--%$$Rogt:)..(GtRYY?ϟͬjIMɣBPpV2fQ9.|}})++IPfCca:0[Xl0*ҊBMZP^^Q[={j~yy9fVKHHH-`d2i ZTf3:ZjEHHJ-d0 ?/ۄV8El67xYm Ҳ?r䄙tgZkfrnVbPPPfc?n\ wQskv7qťœ9sXCLI@sF]7zEBI~]h9NLV'Ɔ\'鄙 =r+9m\S13}f1`mKMMT N#00۷oO~~:TFNpԸEN<̺I}JRAclk,$lyw =:hp O{ѩzSRb&^JTltrII:pM&##c'77}~TTk׎3gp EA՛fVɓL&郢(9rP^^NyyyqY7; //:-@xx8{ϏiQTTDYYY]%nD b4hidQ^Ey־z4f6)::ݻwN###~nm0۷/'O$,,nRVVCm{\JKK=6Qطo̺I3:YnV$@@EZ BDZmVqmZwuk M@/wG7f599g3g?YdL&(B^z|>^oDo5il]Qׇ.4ƭW'n& &_RWWGzz:F8묳ڵkp޽{Njj*111Çaر8-GQO@Gz(hjl6ѠU#5*vhV]xczLjlldڴi2ems=X \B ˖-kGу͛7\zEyy9O<?8n6n6~HM '.N'QQQ:ȅ^C['Mɓ/ϒo{/{/&M2<رc <#AF:7;<v)OUUBmmq1woPnAeˌ߿;)-tvmo4?P(&>>>~=묳D'7ʂaW_.]0f̘v䣏>gϞԮ9bX`6lk]IIIÇs=vO%>, SL _/Xm6]s^z%CO?t@߾}0`4b:di~5Rv{A&ƏoLs\ݿp>& AD mf|hd2f3qD)E#ѣGp8p|q'%(f3bpk9A8-<÷~U>RG]{f83Rf~xo߾JntDrj<}aRK I1:81$&&ݦa444Я_?fΜfC;hicaΜ9XxqtA]IBdo8rss[>|M]ڕvΜ9<#L>=iӦq77+Ұ`A[ӖCőzj\4{P:hk?< 6lk׮iO~¼yXf ׯ`ܸqA\ztMFC/790aQiwygPϙ3jnZNo ?i\r%lڴB#|ʛoIMM-Ο? v̟?iӦp 7o/=zwpwpW0w\֮]۬\WUUeɟ'?5kĉz{-s`_**JJJ*If֔Fr ]׌sZud+dСAwL~ҥKƍ6޽{ӭ[7NjlҵkW-[F=6lqOAAAPf̙7l0:nJii)~;,X8΃>Ⱥu =aCsssm_y<A6p:\qb fΜɞ={d"!!e˖qsWs=Ǹqصkvݺus=Au].57<|7]Kywϧڰ;ԞnsOy涡ۮ9ƍ̙35k `Μ9l۶3g/3f -jOii)EEEFK,#G6?;;ۘC7෿mPx%Kpey Cc5x~{_p {L:`?秬Tt]/k \SNe̜93~V\i;af̘?gmL/C?'OfAvl?K=-~Ƒ#GӓLJ),,lD˕"0vXƎV^} B;)XPP}}>}Ghc I8[["M-F{H~&}xw(++w׏$CO?4f Z7f֮]k䑙믿γ>#裏|¨`={ }ŊP$\ aC 9\8##èPl`~oҥK^0 c<|AO;1or10 m+,,a߿'f{=4_|K+,,/l)2u=lx40Ю?).0?pfh6 *Rxos`4|pbccC?j<Ч{zԩz$lKO B2|p.$Aj;Cj'kMaqB.RHKK2Ȋ+HJJvs bmzm=1tPMf}G E %RTU5Bj.+(j &KujjjSZ /;v v hA1AD b A "A1ANNHߤӠd äI0aԜ<3&"]֭1n `Gte?ݻvnK &|>Z\jjjڵ+}1>ҥ [nE4222>}:twAAA#..cmڴ}c.۷9_1}qZ*\N916^z,=+bPTTDII hfL>l0֭[grW:wqSNmqg}\pʥ^WBuM7+WrW /DLؓ&M0zht]/gٳk]Yx1W]us5װf6o̭ʚ5k+}\r O7|a4eTeȑ:W_}5xSt:ɘ.eХĤX+ ^*˖-k׮<]￟z{9~2tPΝ˦Mٳgt=zhvl]י?><ѽ{wHHHM9r$> ^ /'|MxG?~<A6o_nnnЀ ӧO%4LZjӅWYYɻKAA~qt Mӂc͚5m:1)P1qx] +(WG!ÇIOOG#N*IUՠ 2ƠF;E:wy'eees9~}%11]1L޽{IJJj1]cXX{=QU5hл_ o_YYEEEߟ9s4%0MFѦr{W_}O>$u=h޽{>}z㞬ᄌjۍ*^apEel6(*nZoÈub|ƨЁ 4z͝Bc8 18X,fJmʊTUsL+; |I 1:IcbD؉O&9ILGCC.j<Oc?pB.\s6nh߻wo}ۺK߮Hl\$uqOJƓ$.>hg^xV+vgx{rE O?70;efϞ}\zlٲ;37|H{nf̘_`7x#sO|n ޽{uhg? z#Ws%S.X3g3u=(\uU|7i,yW17ydcrYfM-W^y%r wchǼyXn'N JZDF+DUUAUTEym1x}.JuV233I}eٲeF +++!CC2d{Ν MXlSN5&KG4h?]hԩL?pP$)0ވ=}C=d?te1dn6ƍe]֭[Ύx8?ݮ]HKK㡇";;اuBnn߾ٳgaÆ<|I*ƎkҫW/Yx1\KΤI2d_~_Wf͚eLWOّ^z%Vߓ<}Rj*S[Y[xu*GLL,/}L>c^oQ2337o^بLA3Ƅi<Ȍ3HII {g"hFe߾}|Wt%h_~!]vYX;xs[)//gĈtVbǎ\~}~ǼyOdKYYyGLLΟ_?I mFee%ٸnjjj8RRRx>|89rMp՝2^AX/M TzTT7owX,<qqqfrss)//v1L\6p꒝MvvI['ת !!uqAEA49 d2*999U8kfO3g7BGiӦSO V2&SK ©ڳ@ A "A1AD bDNidHzA8)9$t1(a bhgx  %&&FjHy6ٷOr#0%%E!{W^4ʍsΥQU)-m{.$~At ]]̸xi)1|=;NbbԔ霰V&8:>̍35y`z^z̯oX5͜9]Y`AÕ/^vjeܸq-n+;dt]7&2ii5~緺~tMر9stP'j9%Šibڡ_ߴ4xrz98'%iC_7 ]tW]udɒrwԩSٳsigϦ>s 7n\7oogڵx<fϞ$hE1io~4McƌL0UV1{l^|E4M / J'.ͨQ4+iӦ~w2k,4Mcܹ]Mӂ c'|+ [| v뺎6'ywGov[{> _>9ӏ}Cla C5*((W^ƶ޽{2c[bb"UUUP֭#--|~4롇G5}衇ts}ʕ+ ̙yGϞ=XhpvCӠW_}5ӣGlO):+WdF9 =֣>/̍7HYx1˗/X|3tgP&Lπc)vq{?;xڐ[󐘘iq嗣(JЀĚ1x`ԩSҥ?(2uTc R&0-ZdvOBBQIQXXHbb1Jw`:v_Wbbbbl/k BjEqWSO P< kfQWWe%<dzc{j`~oK(W7s/ACxdəK+O⥗^:Z4 EsPj]qyuldqРiFQQQ[8=BStn *_AMWw .W#l.L+.ێ3"S_ gtnXojf(Vl6E`ZXTl63i pZAuvV왑XM/ 5TWQUSCMu-.z_j!66Vp<&iF_z믷U1QfSl3HӪ-?x1ZqIi  I/G!1AD b A "A1AD b A "A1AD b IDAT A "A1AD b A "A1AD b "A1AD b A "A1AD b A "A1AD b A "A1AD b A "A1AD bA "A1AD b A "A1AD b A "A1AD b A "A1AD b A "A1AD A "A1AD b A "A1AD b A "A1AD b A "A1AD b A "A1A A "A1AD b A "A,YVV_𽒟aرRΨQxm.yLi3AD x@ <w}A!}_B˞AXD C!Eb FIԔ!J Gv|ā/j(*: hI@ Hb;` IgbN"*p 5Bfь|G3sv<^ (Ԁ{zV^sTUla< bC9 aZ@ G 8o$yLҎ>o B x4xs pA8Y@Sp4նzh"pE "dCozA!܅m:z[ 5E *w{Զ!P1o[/~\).=cc    qcA8m\qΡϤEB${@[s3i>;'!pp@;[B{ki6]X[)!)CcMJCUYcIH;i C\ʣ$miU|-MiLEr yJATrOv5Fj:3Rul"6qtIo e%9e#(ja79R~wyX<7y^~ƿts[w!`"+n[=! Ga#A랻q`{eK]F:c$Q` 釾68vL+UչnZ?Hf7c@) nWWCB|uši:K_W2nۯˀ{)D1cD&UHO!72[R蕨R5j⺀-ʚF26DɑEî2WLzsoȊ+ äxSn goomўĄwiZ,%м\gb68|> ^-3CQZZJLL S+t`E?~6 v؈~Σ|5FLCU7$cǧrcVQS.lf]Kl`2KANQpݪ͈iѦ'V&6ҮC=}F0 \Ɩ!X PDc sDdz& Cf(3qR-}mP}z:+.dc3!R`Cy4ڍf̶(,M) ܖ+S7Ӿ^ھC>an9XBE*#Lѡu֤^@|bn~4k׵K\UbcOuGڝBl~'e>n|7ˈ=Bۜ|L'&}aIhw]᫯< quGxk@Ag/1YّANkE!AA  |a߾}̜9\pzXhQyj֡6/vm9&Ot̂,X &pҵƎKVV֬Yueʔ)p#//rrr뮻K.r1qĈv2eJW^y72n8pyt9tM2R\AZǃٽ{7cƌgd21oGVz|UF1z:QQi9]uۍdjQᝃ9ɏM^| 4T/2Ca@TTUGQ4TU#ag7Y3c\_RbmGGTUeƍIFF12k}}=v {sKMM%%%R 㬳"**ٌ륢]taرfjE4:Dll,DGGS[[#E$Bl6SݠJlX6cM*xߟkB[h}{n >=zZVkvӧ6-hxN'EEE-AR+!&TQ%%5ظ(V,V3& MQ WMeEu 46[,X,TU5111ԴvMq+&TL&8R[^(> Mө~cF: ^9>ʿq`~.xΡeZ__OII l6jkk>A2l0jkk9x EQhllnSZZJIOOolu?|:tlq: 4pEE{mT޽{t:q:l +X,bb}^TUmb44UC9\>|>Ռx<>ߏlFQp8\vۮkihy*ٗ8+8cUuPVSZsVJIPmH=;.:ViZjb6m^SСCٳg[n ;v9lim=H[^oPo={rgFxm +gb&>1.V1vDGٰ,L&TEUq{|4Իi,!n<lCq+MCKWCDu**#>T)Whw UѰHRQ>ƝMfVXjkk#RRR?p[n5&8㏣+BTTTKkdKrrr [vaF/G*3f 55:|c6OWUrinc9qFG_Bxx >ׄg:ގkU8p{9t帞,Rnݸ $''O? RJn7gu]tnH'F|||r8`PB^=4Mv- aVJv(^/}%66ֈCCQQQ8N8|0466 qqq ?rzǣb^̐p&l6 ^US46p=4\ݸn|>WO]Lp:ͱ=9N&MDqq1۷ofJtttD{t]rQ^^n|н{wNgc- aN[释 sX e*IdPApSXX(u#pjuMfzjf̘Ѯ!A믿fy'x20  AA  l!p Çӽ{w)qAi9|Gzz:%%%R ?t0o<^z%EAwb񤧧3tPc-XhcEE\͂ Üq,Y3fic/A>;hs9zx<y䑠oϞ=yw%tڰ-/2m< ?<_==z ??$~FIQQ :c Bgѩ񞤤$_g#h 4<2A8}C [)66_FXfɒ%1l޼9(&TӚx,v?...1u]7~Χ\\\l~W蔰9Á(..&##۷o}ۑw}|gl_~Pg|>8 nwa1bw^#ɓ'RX)ܾwm8g}8V AS`ذa+$;;DYdgg7뉤( ӦM믿׿5AX,v1Yf1k֬6q/Kj{aק7ȕ*©f aZy=ýoʕ+eN`ANVMƴiӤAZAA9 Ac9۷dn7111(bpPTTD\\nJ, 3eʔ ir0L08Nv; l6vpPWWGJJ 6Mj@tn9x<v;PUE)GUu q$pgx9# '9Kcc#ښF;a#!)[&&Z㩯7ANӖ(sX4EHORvc۩tJM DtBo%iѵ&l6hFttt{ȑ#52[FI}}=yyy,Zhzq>sN-Hq|]y|ZzNeAA , wKZ}o."O4M5={v.388TRŷTPR\ݥT KPRR°a:9^瓖@^ꪫ?&CNNwuqQM8]gذax^ꌉ֯_=c3nܸfypByV\&׭[w 4 7e#\.\.'N&W^y7Z,TU5nk֬GQ]PKob^^7 cfϞ͘1c8sHOO-_EDBW_7 wfƌF꺎sEU6X72Ȳ hc%qڢ+M7d\#*z +'6pO0LN+& Ʉy)-g>ܹs6m\r /7c=tP^{fydggc2ڵ+ ncq@@ȭ-1odȐ-K?-]lIKeeepBƏٳINN6GBx<8>3$?[. gk][;ֺﶧ[o:-4\7@•mkeq,ݐ[+ GKFIDATmStQp0l0̲eO낶v _[ {?f3/rt\u3tp,͛_4u;x`ugҤI|3{Ɏp]񶵼a|C0\Е+Wbו7\ٶh< GKζt۔kk-t殬o-x[z)}Tr1m4>CS[k$*DGGGIAr _XIA  s86ux s8IiY#uq= NZ_.zLANE+ )*/AfsA9 Aq 8AA  AA  sA9 ASfSXXȭ**)c=FVVcǎCgQXX-܂v,'9sPXXxRSO!W^͂ ANVzAqq1.\{9Cv[OB֑(Çx<-gڵ+v]~AZW~wZ9];u]?d̘1a2"ǫʈ#8p\ UGb> [uJJJغu+۶mc֭m^lʖ-[k׮s!n7f8磱ǃFu ;_dQU5} [Qm… ۝׎;曍w^ƌujƏԩS6o̭zJQ[+][^6m3f̠ɩsj{nNjK8W%RPׅݍvڍ"zPlzw)t 5lH$4Ow#w.F>}ӧ 8}qeqed4Mcǎ,XM6qi L0MXf /4j&Mg{}71^pm:Ɩ-[7o+Vd2MdMuPѴfitޝ!C[n˗|(iw}=󩨨@4g14h<;v瞣307L|>4M#!!۹sy,X &0k,r]b&nBii)/Zhƌ3x C6B9޺ }֭Aw71Lnf])//'--z dʕ?$.R׿=p:2tΡVn&ظq#&M≗67IDT Êafkr fw!"UTIxMe{2fXK֭q65MO>O>}T!,YYYzy嗥҉|qlX(=TCiY=]bI$:Ǝfb5c6djzSn^Jc#T7biZp8֭Ģ( /Oۮ6ظ(lVۇjXf,f3&s5UP|փl":Ǝia+>Z֯_o$Efw + DW u]7ZvZ ]RHM#k]ӿ[HOjZ)NS$&ǒC\B ^=ѣG3rH\5|MQuu53f̈oi&TUv6s tR4M㫯2"3cƌP=XjUt=֮]˟砞#@}k~;4Mc׮]\~m*G \Sׯvĉu]N~~>s'? guiiia :gtpnݞ={vO?4/bH6mc9<555ՕV:I@uu5w3z@wFwi* *Ҵ[S5TMEך.UU#o&cٶmv RRR١:0z4a6p?R}Aup88o۶m o1MGv ߮]= {躎4dπ &=w\V+#<T=&kBYYY:O`7OkٞPUdddI[zΝTVV:or] 4+Wp]wꫯb^Xǁpvsuc„ ,Ẓ>(-^#4hiiideeaZq:ƷMXW;Ӫ 7@MMNUU|SVVgABBN֬rzձsNX,\tE444pŇ9AtM'11ˣW^ >\=r᭷ފ8СCoj֬Y#NdR:>>}ń vzucHIIO>uYٳЀgϞtۻ8ÎqT3 bpZ4u`8!K3E 2-RGh9#j4Ʉ2`K4 2hZ@u0$qvw'3#TMu֬Nw5;xJ;4Qeee<?_|c%sGXݿ Zvm4_ zE亾|j<[4%WB(@JYaH\&.y&=\/}ӧqxZkME})4۫xÇuѮиgF:;;[~ppP˖-ӽ+kFGG֦իWxLg)4ns3>A.qrU*g&P5?\_^V~O+Om[kCt냿Э۫[-򡃺mAzW3}'߿UKzbuWi*_i~2XWtLe֣O֭Ӻuݝ9mܸQxq\RZٳG7oVXLV:;p1J&馛y^{'SYdVXQtb?î]Z_={g;t6l k|I=SgmP۷onݚ-26pBW^QWW}uxݑ ڶm[kӦM\wm=Ȯ]eYkuQ]V*䜿(,cnaN?yFI~]17Tz^D\i<.Mx\bDR2VFHo }#/UV5550ƨE=Yy`c$cѨR1*y^TV˽s,SʈTQQx@Jyc{Ξ^7\qp8[҇"x+̡9k>wBw4S]]քq(O.$hNZke1god|_^pzTRKIw!YaPǯV"QYY***P3P(Kv8Hl<7jmm-bنϺqqqqqqq8888888@@@@@@@       qqqqqqqq88888888@@@@@@@@        qqqqqqq8888888@@@@P"rڷo|577Cw%ڪVp qX @z=#"lr((twwK'72HɜCf&'9@n2+ ' L͹CK!{A)V[0M9a煁8}!CR{N7aTf*SV ?qǡ!w"sSCIBfʉCrVCIi8A:g?'^޸CK1?SG%)N EvH( P\@N%}!;nBB LO !L:gcv@IJY\ɻ\cIENDB`qtemu-2.0~alpha1/help/de/main.htm0000644000175000017500000001367410753140477016622 0ustar fboudrafboudra QtEmu Hilfe

QtEmu Hilfe


Letzte Aktualisierung: 2006-12-20

Index

Übersicht

QtEmu ist eine grafische Benutzeroberfläche für QEMU. Es kann virtuelle Betriebsysteme innerhalb eines realen Betriebsystems starten. Somit kann man einfach Betriebsysteme oder Live CDs ohne Probleme und Gefahren testen.
Mainwindow

Eine neue virtuelle Maschine erstellen - Schritt für Schritt

Klicken Sie auf "Neue Maschine erstellen" in der Toolbar oder auf dem Startfenster. Ein Assist wird geöffnet.
Wizard
Wählen Sie das Betriebsystem, welches Sie installieren wollen, aus der Liste aus. Wenn es nicht aufgelistet ist, wählen Sie "Anderes".
Wizard
Es wird ein Name für die neue virtuelle Maschine vorgeschlagen. Falls Sie "Anderes" ausgewählt haben, sollten Sie nun den Namen des Systems eingeben.
Wizard
Wenn der Name geändert wird, passt sich der Pfad automatisch an.
Wizard
Nun müssen Sie festlegen, wieviel Platz für das virtuelle System gebraucht werden soll. Geben Sie nicht eine grössere Zahl an, als Platz auf der gewählten Festplatte verfügbar ist. Klicken Sie "Fertigstellen" an. Der Assistent wird geschlossen und die neue virtuelle Maschine geöffnet.
Wizard
Nun können Sie das virtuelle System konfigurieren.
Mainwindow
Ihr Betriebsystem muss währscheindlich von CD installiert werden. Um dies einzurichen, öffnen Sie bitte den CD ROM-Bereich.
Mainwindow
Sie können zwischen einer "realen" CD oder einem CD Abbild wählen.
Mainwindow
Nachdem Sie eine CD-ROM ausgewählt haben, aktivieren Sie "Von CD ROM booten".
Mainwindow
Nun können Sie mit der Installtion beginnen. Falls Sie eine Live CD starten wollen, können Sie dies ebenfalls tun.
Mainwindow
Es erscheint ein neues Fenster nach einem Klick auf "Start". Dieses Fenster ist Ihr virtuelles System. Man kann in ihm arbeiten wie an einem realen Computer. Um die Maus und Tastatur zwischen dem vituellen und realen System zu wechseln, muss man ALT+CTRL drücken.
Mainwindow
Wenn Sie das virtuelle System beenden wollen, sollten Sie dies so tun, wie Sie es bei einem realen Computer tun würden. Falls das Betriebsystem keine Funktion zum Beenden hat, müssen Sie dies mit dem "Stop" Button tun. Aber Sie müssen sich bewusst sein: Der "Stop" Button hat für das System den gleichen Effekt, wie wenn Sie das Stromkabel bei Ihrem realen Computer ziehen würden.
Mainwindow
Wenn Sie sicher sind, dass Sie das System gewaltvoll beenden wollen, bestätigen Sie mit "Yes".
Mainwindow

Toolbar

Toolbar
  • Neue Maschine: Klicken Sie hier, um eine neue virtuelle Maschine zu erstellen.
  • Öffnen: Klicken Sie hier, um eine existierende QtEmu Maschine (.qte) zu öffnen.
  • Energie Buttons (Start, Stop, Neustart): Diese Buttons machen dasselbe wie die Buttons auf der Maschinen-Konfigurationsseite. Sie sind nur einfachheitshalber vorhanden.

Optionen

    Konfig Fenster
  • "MyMachines"-Pfad: Hier können Sie den "MyMachines"-Pfad ändern, welcher standardmässing in Ihrem Home Verzeichis (Dokumente und Einstellungen unter Windows) ist. Alle neuen virtuellen Maschinen werden standardmässig in den "MyMachines" Ordner gespeichert.
  • Registrierkarten Position: Hier können Sie die Position der Registrierkarten festlegen (Standard: links).
  • Sprache: Die Sprache ist standardmässig die Systemsprache, falls diese verfügbar ist.

Anderes

  • Snapshot Modus: Wenn Sie etwas in Ihrem virtuellen System testen wollen, ohne dass diese Änderung nach dem nächsten Neustart des Systems vorhanden sind, können Sie "Snapshot Modus" aktivieren.
  • Notizen: Sie können sich Notizen über das aktuelle System im dafür vorgesehenen Feld machen. Mögliche Notizen sind zum Beispiel, welche Anwendungen installiert sind.
qtemu-2.0~alpha1/help/de/mainwindow_new_machine_3.png0000644000175000017500000000506510753140477022620 0ustar fboudrafboudraPNG  IHDRiA}abKGD pHYs  tIME   IDATxOǿiKRD'@@"B/ _v M\&Mعs F!](([{yL*$7m=s?=e-kYZ5Y?Q.ׂU7v8vX5sr0Sk žB!&5L i^aP-HQWT {& Q#(|C9ꑑXFi)Uy Çt` Rm948;՞Xq}CwbnnRӦ eDd#gR3͸c Nen{ @Ţ*pW&' qrNEN%8ƙX,!2!x|@6E\FP@XDP@TBTB>G>ǝ;wgy5 ɚ0kDu7zrDIx7oބ$IT*8Nqyx9n߾} Jb̙3c pXUKTq8PJU|>L0REWnXkq:8;F˗D"H$(ˠqhooױ`_=9s~mmm `cc߿G&A*chooGGG> I,¼ yM6A ۠\8$~?RN< Q;Hu\|~u%)bll ǩ' D*B?o9NUh,^Ef5B! )re{{{B\.t:q5$(X[[A6!Ȳ LFϡEj0zw@FI5#NĉY*2b!AWW< <!w-Q.N1R@ |bfzi6R[$(p\7<_e1<Q!rcx-~?"8dYF6E& (N‹R A "vvv<~@ T*L&rK.}9hz>xHRtttC$I "z{{!I$|>",(EJuH1B  $IB[[r٬z<籽a9 _/Ax<HǃP(o߾ahhdYEr95(SHV\.# ɠ $ >===cT*8}Z;/rp@PQsSWWBTXJf!HR ߏd2 ׋b]UeCCC1::ZsaRn%Ni?J«W I ( N!gϞU16cDzll Ϟ=C4E"Pk<2:;;{{O~H$ΝIJ Rs.^׋ i5/ՅIpӧ|}>zS@ iI SN+]ZZBPׯ_H$Ґ?MX]]0 Q,dXJR$ LMMOS+Ic||hh`cll 3 qn)=!ΝdX Fyv:x&&&4kppQk*#rQ JsFFFcܸqPȟ. ߶׃IY4??(RkqdsPY̚T*UAlY(~$#FTՂQ]c85-GkE_ڪMy,kR>Nj1Rь@':pRm~_VkF\̚ЃQVgr:&GHufr!eivIJnp`b|#%Ym/1R:$Z (ZD HĤh8J$=(+55T$T0= Tqd*Pejӯx0df0tH"M ?ᮮ=VN7=) |hϬl uv;N7!E6 }-H]a0}Nv %瘕[ slu•ԧ!UNJou$ 33&̘03c^oQԚBQ0-YFWi>CN[3Ų,a}m2 Z2),LӔ<8#;/Fom4/"A͞b.Dc.ID{T')%'ϥPT偀W\KII!mVe&oK85N:0[)n, hv荥%-pn'( e%߅d9H[%I j'I?i]&韷9_eߌbsom$Reb-ذ;.I0 m-7Rf4̰}6쀒ݦLӔm õh4EtI׊5ꐝx4DuòӒzf2Ԝϔ>_k_3w??VxlK7)9{tYE{>rK+,p-'T>!hy('vxBftƄY$):kuXUk~K?,)ӴjЁJʴepMcJ~tIʢR]Lɝ$wr\6Y4g}rS;djZ} =Uzgfy:jdezpyk[FrӺ8ˇK7EKNlOP;{nkEQ,Vߣ W$-^UNoP@N5z$Iw?G1-a$IEzw&y3ɶ@1lY2#FٞXcVWS.$0hw"eln9u^߫A/7&1-HxEyPHkha()٫LCJIr(6UUl[a+\edd\~khkw}'pd8r; $iמr&g95ȋjm ^Z/i'^_?Yg62ղC'z[6r֞X㕥$K2tɠv&TTJΔI^ko{H U:Ge%3c Eekrfup|ih/^SB߬*.:xۇ/S%Yr& ~wr o뗡'αF8ިvSO{n,}G]kd}G4k~u>s{nmVj"̚:k*Ќx n<;ДiHP8,?*+}J Z_^^We o$ЖmҒ {4{;MGZT$y:!p4G}7SfFƜINR^o|߾}ѽ:+ ˶mɶY>S^u)ls~:8~Ya%۲e8rz-*tFY>YU+H[+u\ٶAv餕EU)͛*V ߼BNo eky3fQ۶EU >RpcrWZC㦯%oˠ\kh͘X9Nç~0poNHF6\qZedG2ʱnyO/X38eCV^NB!aU|e$++}4O?8}{o.Ҹ;]ur* QUIc:ն*~uٝ?PyuHK7сzcEO_snܣ{&]Żul=r9zx f~?2nYO C/߫:9e$'mպTiݪꕗ%$p:p|.]N%v˛\g}SgtK+6W~ڽ?|XqSWMģ7F4c}#a9irbQMy[?uDr0Y&[gR8mHrr͝Z޵ۖ*]rfw9 * ReU|F\#ܹSEEEJNNԷש$ʖ{*x`UA.NV(C/95]fU)TY&;tKUJeTsP@._̐_Vfrdb× U˶-%w!oF;UZ,wrZ-7ښ*Wϣ߻MեEJn׽f[%nx7IVjBUڠP>y2)97_acڷɝBҢXVJ]ʲB pjqP@rֱn6|ə*ߴDOPEѲ:Vq<.cxCL|7%a9E_pr[N:EʉUU^W~wܩ#MյSucflq M!ӡSP($/˲tC rر8s h2f}mOӗ$+AZa)C\IK Jp~. )ɖ;5Gv)#鬽VtԾAnoMkLX3ś#L\nӛRg&Imt[̎r5]FMΓ鮻G˝Ugt$px$htc[N Gͷ4')18c9\>VZhRL/>ZA9qn3qZdJ5kA6I# ^Sl|MK;VⰬ|UJfHi>Ԯ M'ay윜ԣ$gʕIm;'܎'-'eEi;*]uǴn_mJϺt(}ϸ|m4>ccǐ~a+p|~ VWND=^h֕biU^3jБ쑣-C;:]619ZjN:*ysdF+XK[h$y̓$'O*4u"7y]OZt NhO|oif078aھnsɽxWl5vK|F2 =Zh GhEiڵ0Czs9GeeeGEl„ p 6m$nߎJ#aǦ &7 @@@@hhhhc*cO8֎;}Qx4@'(%%E>Om}a*//ҥKuE}C.G8ضrŝ<gmذ嘦*yDf٣\||I,KpX`0h}vZJ)))2 #aWa$;\Zj,˲d۶BRSSpuK,y睧ԦY4ۖۧe˖cǎr8m[a* )h>!\JMMG_(=+]nSNSNC.CNgde2Ö¦%3l*jPXqVwꚭ6mڨSN")Dehi)-^G~PӔPr[IIҳjm˖eִ̐a2-Q3#h L[i\Kd9ikhP 3 ۷,KzTXXKH ;#I0aԶmv5Ewmݖpy ￯m۶5[q=Cᰩ`T(`**ʀ*+OƍΏ-wݻ\.rss)cԩrz饗̏-#r_~ugjʔ)T>}TRRիWsr\w`h++Q=5{gH&M$0rʸ{l+6u+k_:h,KipDoNJJQff1So5!Ch̘1z5c eee7ވ.ӧ^xq;4zhM6M .i2d {jԩzG5|pٳG~?Zk={߮KjذaO_+oӦM0 Μ9*--ŋTZZ*I>}^uKKkJII3lIRffN8-Y$>%N>db@@3\N9<.TuuH>K.SN@3ÖAS`Mcuڑiʲ,UUU) FC, t3о@[py 2Diiir8Ȉ.WձcG}ݻN:$I;CjŊjӦ{=IO<#GjM~p&L{]O$Nx]0 ͙3G1bf̘GyD_J?Əӧ7Orq\{ClW%%%1cNٶǗ^z·2Q=5eڵ+>5Vjĉŀzr9Mruu 2aHd٪ ,˖U;t9pr8 فpMY8Kkrڵ+-zꩧugڵk% 9=զMORaaVZ/XիO[nEk֬~;{コ;t7nAoԦM]p O0A ,аat +V;TIIڷoG}43駟ѣG+##Cӟj͛7O۷o}0a.!ө[n%n=5ۻwo :T?f͚q) @@%zet9jfP0!!L 4JMMU@@~_mGh-_~̏ڸq/Y34!IO>|:b[ [>Oyyyr5d͟??~ǖۍoydK??%y֭ ʱ,K'O/^wI'$_uOCPiET(h*Xf5lmIFÎ].233e ÐP(:f*m6uI4i6mڤLvm9#連\x5ztD[Ze)p%C$Ӵ[Bl:DaPN8cBкu8DmmWʒ^NjG9ڑ@n  LXi)N%ˮo* FB-ʶmMK?(lYacɲlYvhE۪ '˲dZ,ӔiZ2-[)S)YCeZdK%ZnձcG%%%EBp8kת}r,ì $+\3ьRMzlX%2l%SlK6.Qp_PJKKҥKxԹs~ H3ТEhѢ`2˲v5h 4MN۷oWQQQ]SOUiiv!PRr<B~0hY))) TQQP("mܸQ]vUZZRSS>LRƍ@ ly^]\wnoVʶluY|p:Rii e]&өJʶm|>!4UVV*o^8p>S9Naڴi`0(өP(@ p !ڻw,--M~_uF(7o  O ѡ?IN:7PYYZrrEC(r$UTThǎzwխ[G_YnS색 4Qs=W>kNJNNWV]];wj۶mP~vyf9:Ib ߳gOܧ%hѮ];]yڴiV^UV?dY5v+##Cٳt颒[*))iPn-RNN:t@׫OcZcI\C#4 8 {6kֽ6{(why ˗-((za?uTI"4 9wǷjraIOOWEEEecǎ̙3 4 Zg~1m4󳲲o_îI˲xj}gB6nܨݻK/%\믿^۶m$ZJzk-[_ mlo[k[$bHņ[4'>s >\#GԨQt}586Lh}jْ?XcǎբEԻwo=U摬ZӾhN}eY$o,rjNϕaH/-J;otڵkum۶Uqqq[h4iΝ;J,Y<O>l7W~~n:Sjol?z-mذA'Oѣo>?^NSs=x ֭>3}ᇲ,Kw}6mڤ@ _?]~}}СC[oI.\_:S7`-[3 *?ן_TA4u^&=Yڦ뒳 5oeYumǎ _ֈ#a&IlP($4D %o^Ζ$1bn: 8q?|]ve zj*]yZx.r=Z5k^{5͘1C={TAA~h$I͓Ҝ9sTQQ+Bovt[UFQFiΜ9z4h^MXEU>lF[jwm{$IwW]Vj\MZII:t IںuرCsΕ$\RcǎզMt+##@k vRNNNMCiĈ0>}0 kN=z$߿_>~r餓N6#V^*zMV}Xtk֬Y׹sg&@+t=4c˒n`p 7'dlLS-\mٲEԩS'͞=[ÇW8'gΜ)Ih"s9ڑOTQQ=zhՒ $ >\W^y$ .PΝuwGMXaqxWtI'馛nҼy{k׮o4f}CzX5sF+Qy |'GC77?]} WBHEp,;̘1ǰa4bM0A222\#W_}K/Te)--M3gά}:1nˢ7VO{s_E$I[JF^{~=ペޢ T%W.vޟp~"7V}X߯3gjܸqnOY@.^ޝr$TU;U\-)P;k'S%ɮZ+wkmڳggݩkw6_ELbb}%ߘB;GƞwXM?'~޽[m۶mݻwҰ >ZQNh֓B4&rcu)r;.'ЊZhlݺ52@:N-_SOkǹ9[mWnX`hP'jb+W>͘/Vh7"@ŷ4444 @@@@@hhhh    @@@@44444 @@@@hT@@@@hhhh    @@@@44444 @@@@@hhhh    @@@@4444 @@@@hhhhh    @@@@4444 @@@@hhhh     @@@@4444 @@@@hhhh     @@@@4444!pQh->c_H@r>3裏>lM8@:OG(??_&L806VZ'xBǏ,/~KJJJO?-斍뮻N7o߮QF]Z]buСAiiiz饗p84w\= \3fFsʲ:ߪx 9N+W_{wuDz,͙3GsURRƌ'ٖmZr~ӟHzefzݻw\|n?֥^ٶZ]v$.{ァÇ믯zTQQ+B#G$Ѐ:̎FINNlҠr=C#˲ԭ[7Y%׫P($˲vZviuXj+g?$ hGs[-m߯3f(77W\s-҇~~i̘1T֯>}_[zut>%\~XFCu]lVZZZt1Vj-=]p?JJJ'e˖i*,,ԓO>+ΉԣG} 8PSLє)S+Dٿˋ-M׫7|S'hԨQze˖9--Mv[Ӷm'?ѩꩱy^}U}'ڼysu4$Ҳci„ x< 3f:,UQQJJJ[hd?X_~RRR4yd >\*{⋏khe۶>3رC'pB+R~_ }> Ð$vmzꩧt>g+6ٳ[ovK.޽{s<Ќ ICCS+7Л{qQMǏWEE@8֜9s4n8(UW]ٳgSM K/5{S(PKW~w'),)$)(_;UN1?WK NɔdIk'Zh8~ZhR:Kla#uZB#/ u"mv̼Gk{ *:K'։: 4 :$ЀcR7!uH#o]P!| Σ2TPP@:@IIc>IY;9bl>-DH%j'T-*f]''Bsӊ31Aa_Nf)^5W3S6Q1i)5}ͪhVZlMaZSAVZ%C)kkCU/UC:FxpzqZj״H ͮ DµXv̎B |@ Dm#nņ"TnFG#FhRhC~c0BK֙6IЋj-Q+R}h  9+/- ⅚]/==CZl|䕡C2aG M}hi{pIl+X:$j5nCAKCU6n ""I!L?9BQ(.߯3XS̲0) NԜ %P{u+ HE C~ZD/  &W5:mV*PU)fGY W., QN'G)In5!GCa "vL!6„EX<„ pDQIp}s ``R,(xmy- ꤺOmq!sv)DD7_P `c4k4}~z[kÅ6`{.9u]qz9V% +}!VW^Y G$6>KWKPv<vk:cûB|Yww F/Snx_B Hs</],ºw`}^#)ք]0zP/|w4ru &#"V0;u}=]pwtCH* ڡ x0mX _\CÌ +30GwƘ~ >㟇Q\(0zP/=oҮ+lDD==Ի^z׫~eA' `aş~_  AfFdȨ0X,f :8NTW`@ `TsS&_No}Hwв܀ ( Ymt: 0E[2âҶ Lmj^[\V % !PT\؄8UN&|S'u1}㑖 [:cu#LmBo4\^chB#ϵWt@g0GDt`[sz~oTyI#\ *"0C0lFzH*+a0V0UUȹ Qk%`dB L wSL(Lze]Ŵ;cn%L3vG"}z:GtЇ=ad$IRk/sΠ̮Gԕ^aG]D׎QH# -8pƆi?{`"Pn5E#"\|719z@d9@M6Pz-t a7LN>v .-v;J2:{10DwmR~}_~5>#xrK>f_ =,t݆×Of M /cs iCB½.!mdle Ux0z/~W~j?LЇà2O""FY /ҫ^9L0Ԓ!*v5_ԅK2BǠhPF i!^sADt33Ghq0c0Gz(  `0Co0y!{FtX:a!pwX)>5=Z$QK1Ezr P]z[3kh եWcaon""VnͲ ""y ^w DDDԠ5: """b """ """b """b """ """b """ !Xڵk2DDDXP`DGGCa0rykɓ~/~ 9sUll<# Gyy9N(6mQcȑطo_yvL>'OҥKQjSvv6}Qdee{?I&jzg۷osLҥK~zw|G2Ν;̘1CuW]DQO<1c`ʔ)8x6񬹖mVCyO:Uaј9s&[bΜ96lnݪ?(Śھj飏>¨Q۷+ؼy3t:n݊7|iii0LD?C ())ɓuV$%%[ZM?u/l6ƌtyM4 Xfzo۶󫫫1o<{x8q"}E,l6|()) xbZ!I>Cc˔<++6xgk(oJlܸٸߢ &MرczV9'ՊիW`0`ܹS%쟿rJ >7ov@/{Q0{lMS-ŦMFt o^ A׻Zh4K.޽; 77 .] ŶO=***PZZ~qauϿ򐒒ׯq6%&&BCCp8Keg}cĉ;%% 22V_u9u:y&kJ5[n Сz ɄJAi=jk\QQ<)8v ?{ׯVVJ@'gQ0x`,YD6Uk pwh4OӣG?ĉq)tQQQ(**r+y9s`O}6 O=TmwcǎaܸquNQ(I=I^%XZ1bt/ /e_uի233OosCkvy*’UZIpw^,Y3gtj"55կ0zٲeի,KH#G׼MywCKEbȍ;| &M2Z ɨ… !C`8}4._zIOOǁ0a#11,{٘elex?(?z,X#Fw}W[l6lMT9K,۠͛}vFtA6Uk={{G}f"<&u2p4"v,ݤC~,U ؒNbڵ_"͆4ݻ7pDDMo*G?C5K8T*jr6UvrHS` ˟L-i$ XzűСCXl,XpAD-0(povP΋h裏X"rk`s텧/i """FՐ b1`F{46G/F^^M=rJ4:?oC]^?0Ocǎ5oֵF}Uּ)FYRϦ^nS6گJfۑtt #F@zz:֭[ۣ9jԚ懲FfFFKϺ{f gϞŦMsSmQQNg{tWh4o 6j*Zۣo1h^ 3WZ{;wFVV^'4nǬY0uT,[L='N>_WhAS~z'NPmT>_R>(^|E>}<l6M=qH槶c˗cϞ=j5jTQQ5/wUl҈j 讁QmyjWK͔I-QA=Z_J 6j.m6Ѩ=m}hN[Fʹa19x`| Ð!Cx <8$V+?W_}Rر2dƌ;vAS^x>|:k֬QmT>ڵk<#pTvnQ_'OW_}{/>725<|{y8zh*:~xj ƴ4R3}R{TmU;>_޶QijhmԶ] ۼW^#Akus<>AcjA`6ѱcGjA3׹=ןq8zN@y4҆i2Q_ //Z^gTZUm^%at@ڨLiUqA퍱/zOh9~)*ڨ=mn0G6븮c!i6a6o> 8NB#IdӦM[郛A}ğ j8'qdmő[ȳႽDDD DDDĀ͵k\yQphk0jBFtM0\!h"뫪xWޚ|kk0H-7!"G}MՃCaŊA~~>~`Ν… 1vX\v =z=JKKo 66> УG߿9DQŋqiTUUaٲe4h{YYY-o4h+W`Μ9u?>`#99-BNN[oc6 w3<ft?YYY@߾}1p@̚5(""jހњ5.OH Μ9ވ|A233Ukk$U""b 9_gChJ#f*=}JDD76C/G:MPiLǼf*o#A{0ȋ/mCSRRꍘ4歷s4SqG$"Vǹc M?IDD4hhBӧO$I(,,իtY²e8 $&ԜqH"" &ȓ000000000ypv 믿|-,nG1o6mRpd ^C" :wG28\p WM5$ $qgRM^C" :(">>Ν(9ܹs(rGj#kȀA̯ IDAT tΞ=˃?_`  "WBBΜ9brßA kP}0A.II&᫯$I{uZ&y{ְ%\DFFb޽$ .\ѣ-]ï կ0j( >ߚd9ǎüyZD#"z聼fYުU0{lڵ ׯ}݇:o=Z(wx饗0tPw;Z MWbZԩDQdYD d=WR׮]˗#++ ;wēO>iiiر#$I O"̝;zذa h"/^Ĕ)S0f%KԩSX,x'0`zkttt{0ZmHJJj;)Ο?wy'^z% l۶ zJJJ0uT5 #GĬY G_?@{DZtR $IjEvn:|F?+WĘ1c0h ,Z窇ֿ[ $&&"** _=ׯDQDRR._"lٳ]\\gy6 u*Efvb{o3b=0Zmݻ7N8b6 ݏ;N;&MB׮]]z ׿=ϟHnݺ?~,ǏcȐ!OJJƍqwX*>3$%%MXC€A7o^u_*Fa޼yo~vvv*.<Ԑ pkݘ$ !#5`^cF͸DDDt߽f1vr GLPyL@b`` @l }<vN:<Nk,\8kB6jP]B@փ8$#*LNY0qeae|rzLJ]aИz…Sb Ȟ#0`U0\tp,<zYoO\Pl,&Jφk3 ~4Pޝ"z;~<-jg` "" v6Z'FjÀ5ax(xz0$=+  AC e( y|1+@Tig<] d= DDD003WpADD|3dH!Cv I!dgÏ;>6Hx%h|/ Rx*{ADDC6D뇿g@# ""  .x( DDD-0 `y| ~LDDD'hI2XA#`ႈ DDDDDDDDDDDDDDDD\B:*IENDB`qtemu-2.0~alpha1/help/mainwindow_new_machine_4.png0000644000175000017500000000477110753140477022234 0ustar fboudrafboudraPNG  IHDR7vbKGD pHYs  tIME   U IDATxmHSoǿgS3[V 3|#H(XCI2n|W&`/J`iE/4%{%٧on;~Ѷm\u\gQF5jԨEjLCm[L +bp0q ^n13M t)izxZS@E1JP#YX( 5-*X@d"T&Xf ].Rz"KhQe!R0v]FGGN,Ur|u:ݿy*HR.I՟ TPͥg<6𸉥x+X %U?~G܏>gs~ݥKPQ/K"g 6Pc*I8,l6l6eY:AFFL&z=Μ96bhhH3łRyfAN^OO  ?{Łuvvn L&FtZ0W` Q?bٚpteaX䯫áC%GRNNX,HIIQtTFFFЀ˗/;N| xtEEEONN"--MљKIIgʕ+ ^:]ZZ&'' Sttt = WS)9Tr [L ,33FRvv6Z[[ݍo߾ ޽YYYSj֭';; `ժŪVEBBGPSHJJ ۷ֆF_~ h766W.(,,č7t:bŊHJ.O%RaA%XEEEEB0PJ%&&bbbk׮˗/}֩jn٣G3Bܹw+qxEPϟcff&hБ8Ajbjj w;wׯQZZE~<OHrJ\xVd͛ò,* bAMM qaɒ%p8Ųe`>|w(N(~R&1Tv%Rss3, *++𔕕G A}}=i*2!sGm[a\ު0LPHt}vJH€UI* )ORN#U'4(8QI*@Unn.BjHJŏ poӘ*j*d_֑DmJIzDɼߔt: ?Y"9o{r^PJAE_k|8͢PQcyCtܟFF"c^?|iBV#!ubeXAӄ/Ow8B K?lJR)|7# f)TyPN^ZF(d8 ca)'=<_B}J B`Fb<P *Ut(%V?)R{7BhnZJQ*0E5P8Pɩe >ZhWTr%_yd_HO(KmϧP.OGPETBO((u}J^#.Q _PET乓-O8@3<0 U@%VJE)M)G6D=)(<љZ Pd󧘒s^mqJ. fɾT'*H?Pp~ؔgH7p1-RɹCT' qI=w?>Pƺ?K~P7F]&5jԨQF_`O;IENDB`qtemu-2.0~alpha1/help/mainwindow_new_machine_5.png0000644000175000017500000001023710753140477022227 0ustar fboudrafboudraPNG  IHDRc(+bKGD pHYs  tIME  2 wl,IDATx}lT?̙L BzP^,0 /.YfF6((`dAVe"^ 7wQ v^љtz楴ɓ9s<=3>Ϝ"H$D"/Y;"QSE}+), [Oax믿~Y%JIb[8XFl 5 ĕ]]];}:+++&JUN.ے@Y7"ʦM۲e ,M˽^ZZJYYeee 6L0|r!7sr3U'͛7w|ddpw믿gϞ_,^Ç3{hJz!&MĐ!Cg]hll9|kײl2-[ooؾ};K,!??t .mjj2]ʞ={4hnh>(Zgww<#&!OM 2OOUUͣO>$7t|A<Ou;w~?̙3;տ{8}t֭[u?Oʽz (w̙3y'Xf ۶m9srJ Yjelff#]ۙ3gssLWyn&p%HtE?OZ㏣ӳ3$[CU;G ᫿O gur(Wp]coXSzxv6t, |j\og`I*eV84&pId~X4n$ҩo0xմc;S?ffOW/~2͟B/D5UrϝnOH ӯܰJaa!/>}qƥ, 1@3 mB!Z/v\(LrTΌ:鸍k3:\ˆ hiiAuxwYvmҾnIDip7/YCqghn UӓFul!N9x66'Mz&յ՜긬8tfر\.t]gӦMٳ>^}UTUS[[SO=ń :u*UUUV =(;W1Đk.t.:߲æ]0ØLl_t[~/P'8kH' :~lK*OS\\̙3g;w.-:MMM⋴Lnn.3~Nl(\uPmiaQaC%CWudR!?±/LϞ=KNNVlV+@UU Ζ-[8q"˗/g֭ر "q(4Ȱx95pf!Z|6\&t|KsUcUh5cxWp8x<}QN'8q˗s]ws jkk;e-ҎO?mzMޥsLT7 *uP:plXpv/ÜD۟1c}YmlNϟߥ'OA/N.%%T(qA!utbs[-!4I:_9Yx0!ƌm9z[/f-9v5.@`Z^QzDF'g<͜CLl=iv:= ,(#"Xxp7pȁP5C9t,bT x7>k<ԜSp` K<`(yO+g53fHu 9q:(=#JD6Uj/{sTnfUy;+-u Uq*pG48Ze\&?u>}At]GtsdYp9:y]G( . ƈ4pR?#_jz$ d}uI=1c 4HGcǤw\(q7_i#$s#aD0JH<wD\*(7sn'n.ADvu48%y.JJֿ\̵CI)C]B'c7y \K5% {I{9xԁ0J̇A1D!\#,bJ,zW$}c:^$qo^"c~C=lR\1`9hQ"xŁ<]t@ypP7g).P1y"qDIޖp'CG#p[Rto\7~]\Od7ftgcO6{"_I&(zOgQ"Pb>.J@ ƘR㔠s'X߀xo,~JOR( Ly<dI<ѤFrej;[7x'b%l;b!WL`VXԝs9x2a$S,\ L... ²+esP]ԗnWPD"H$D+*5r) IENDB`qtemu-2.0~alpha1/help/toolbar.png0000644000175000017500000001620110753140477016731 0ustar fboudrafboudraPNG  IHDR]pPbKGD pHYs  tIME  ,hX9IDATxil\וo,n%DID[dim'b;6&J,' L0 3 !_ /mAO$ӍFOۊۂg"-hV{z|ER"L?pj}usν>h.ۏ$$H- *$ւRZ'qٲ@\@}0 h@fB]B / ^( + U[5k ^Ђk ~֯!nMZ]n>- WWVr, 5 Wnrcj-5ȳ&PeA&j[_}U:0[@`m^ Ḵ:+llla9‘#GOʹs]ݶcccرGr!~qȑ ~?Z-sˡA8EV)7YaUۡ> o^u.\jٷo/_2/2?<=~9C+)kw, q-,ia =i]CFadl yID(05Yq<ƮH o.קE;USW|TtJ'hHuW9ok}DC|y033C2P(T $IHnz{{CӴ{–ĊW&+W}EQdZrybz&XCL/.ʼnI+v݉!j2 ]zTl]L̙3LMM.i(B>'.Fy]׶twwgnh<ʭ:ɂ+L儁W{fUɓ<% #U ̢˅K33.?D,jѕ{%|p$I[ .ǠGGK tx<^N8y,đwm c'''qزe by0M n޼$sNvyM>붬f&Ir\͒Y$RHH$R=@V;۶[Sٌ9o)s[&sc"[y6$xx_=ȻpC)ebLyQYrn4IM'wk T 1Cwgwh&>uuAhj'Uز!yх۾Q^-ifff)Kggd28q6n$SSSl޼H-ei۷ϯutvvm3EfCYQ5X.*#c.!2Ţmxf nܸa (UHO$ݘ=ٴ!a,mҌOHT 'JLo/qbMBn b,Fxb,d ;8MG140Eoڰc+Xq(qh}<#H 2T<88>2 Dp]Y6nl-_Ȗ lX^ǙWY- 2ׇKlE)UR,] |CU$Y* E>gQ,vc;.i"rUzhz~`&s|n['۟ە ea y>f 4l2T℅d$IR<}wO*Τm_r-])]quE:MnYT UU BjJ177WE!L B+Ų,8P%ضiH8hVLOO399"[>3jU$rYK_hG2$c.l<ٹ<_:!bxE 0'N )3nPʊD^wogWR<̦-F'l}(yd xzT'Vt Zi3Xve۱mI5?~&wZ2Sik鮚F2Bkd%76 c^ّ q0MJ rtttY~zUa+w]bXyd^-벚-I+$(QEUJ0?q<,!6enHug<:%o9ALBR]pq]pW p%'9;f" ~ 4Ǐ]&nYjBW#]J,Uǔ+x-6|@ULǓT,GhJ C,7],2Mt:}GZV)Zqؼy̼AQj1l!/זuY͖eI Gt::UB! MS }=@]WDul|lall Yq]|>azVKd+LGP!!1mB2 S[sL@2pO:_IJ=39>9 bXز1l1-a Ǔ)8I'꾑<ΟSE+]6U#%UU$h&Ys˭Wlm{^`&ӥmf߿`.[U5BPD':FH(\/̖"+2"ɮ* [B0u]]z ~i{eȆ†y'`"mnJLܜdLen+K[EK6/flM).ʵt9-[Q1]>m" CldYoVY|>?H,,widK2dӦMa,*C#hGO %QPX'P5Dfö=!nO)4 UUqY9I*d>qG ɴB~'WN%=.ٜG&ڤs6H.} LG=dnƧCfC$fKBc'Â"ǥteU+4:f[?#"XyG(jyl#[&&&ؽ{7;vX,r%`ƍwP(ؖuY͖sl$cH Ts8;F8^Ahէ]Q:1$iۤn+D"e򔆰$g-2=)tww377w,fOs”bdžaaK6ell[*gddl6ˆ '˭ؖuY lV՟&pR=|jx nܸi||x??5`6vm< ;d>#a#:%a[?{:wxp·Wn2݇Qw$Q|6w.X.p!uY'm__D)h\zRZ!U*"׷u r2 ;v<$044i!Wj˺foݺ~,ׯ_0 aT}4)#lKl+h޽{1 pr\!8-tJضXh6ضItQ"_j5;RxK=pߖ(vۆo ^M31G|زȬi{azz\.GOOOu<"˖9$j{*ʕ+*JlYkRf\488ȁ@QqeL0w^ك"===7r[l!8-vjg.g+5EQUEPU|%MjV*76{|Q>~=:.bl"&{D clGd7G픢({}R$jSr8 ىif(wzU\ifN>DQTUYUU:::PUiN>,{u}%}7oH$ ڶpuJs7ٲXF*磏>"SԶm4qPh^N]yyl۶{4 U*qǀ/]y~y+8κW.x~yyǵ[E~vl h}2v|r<nXE$:%}L&ٳgI&Jww7aT;,d28 V͖ eٱcG˫bTz[n155E>ǶjD{A״ yS^)rGUUU ,Kn[Ff>y1~W+c2Ws9[ =vhȱuQ}Uo(//윀qK QEVwO`0ٶp8F۷}n͸.(/RQWjZSΚ]Ź%I-ߡ_Lh}G}+ /so^8΋YAvYyI t3Sȇ['0Y Brs%_LC R[:PӠ,%˲8Lln,W)˩Cuf<ݺWO/ݪE:اѢs|tno󯯓?qp='^?汙|t=eY^I]'c졥3S,Vvʒ蝵{:kh.K5a%GFLynYH8wש@Ge4ͦ!vy:_UV놟YʗGzd?5Sn)3Ku*i۾-٦)7}7ޅ~]*ŕڴ;gg!IUV~u|k[]F/+U[o{[TQ>oMLOѴ{j*'у_~'ޭ;STucy6|ZKCsսo\TֻcXKO/M{W_{M2 %Yzh΅:}`~o(?˫=VHU.=}WJH\7>>{l2yq崥uy)籙?c[N;CfsݪgUevt1hV.u$ӴUZ;ОݵڳFUk{W*՞ݵ2͸UPP.C{fKYݻ\^rLξ00_CU{_k߾욁 !92hK;ߣo_P*+o_&Iںsߋztj^CƲRVjx*ټKQ7/nk$wMm6 :=z j!sAԋFQzev7Fom;}F<䖭=wJv|,+޴g{vi}Hl׎GѾu,,Kb/uiz}? {&!9I|w,ko ҕhy4UiufC3\+dێlۑiڲmG~WY>Yj֪Q>趆Rf0r!yM'V9W)I^^ *;K#sϣϭA= ڵIM6W~*a/]yzem{Frsykޗ[E/ZE{j/bןq[k+G#zȯ6=Un$igɎGZSoߛ(IWo7ҳ\'$/镕ȟ]#Fa~j}UiOkjZ{֥?Mژ;ZtÕ-禇6OӇfnO +WJO+1i|"=)$540+P~Ar{\2MKƘ<82mSݺuS~~jkkDڽiwM.#mp%I5ȝU@)rgVo؞ uu#7W8?KV,,';xx)Ě,(!գY˟@kʓU ×4i[[tҽ^}˚8lw]8@'r.}Auu3n_k+s탷}N7H-w`{e^zk]8Z?ޤm_VQXf9zr!-?mIϗVj':;k/Ќt nu(K^Kn!9⦩H$pȧpc@Y~KHTmiZf[HӨA5jEA.i!r{ζntyõ?PA~Yߓt2?p^yL9#9"q[}{/isc4,ȱnWU @7Me58`6Ѻʽ Gp{ժ=a?]+?GsmMtο*UTRw+CRp{}p2rhWڡn~BzIF_m^Cmǯ>Ttxs'u&`42i3˱ey/9ܲ͸z.Rbq:Aoۦ,^>lXB#FPj۟|R7کG &K>VjSS}Vm8[S-ZM]7[is՟YW׎*Ͼqzy>tcڲr!#^xf,7glݗ9}Їúv鳽 7nGתdd]ry !ajͿK榭OtOs}tU@~>5t޾&8y- ׌+:D;N9Ì_{t2P?Ci?R,dI!9 7Ն8XHWt92$߯xSaP3&?9E}Js!͊7ȉGd=rrTB6ɊG ʊGX 'Pu[SX7v|iXV~_&9_Y[כ҃sy ɓ >[Rv!i p{djǶ!+08e#W9\9G3MpxqeJZOAoQokf |ryeHz.\_OŸWu7#v>^/^ rt0VXq-dx)$HN׼?xa-Ii/Y:ogv|8Ymɕ㶜Y|0 c{9Gkt;f3wp&Oc&9 p܅=4Ɂ@hhhh  s4 -((kM6p2d?|Ԝ3f d#Gv!G NL3f貣o\C4 '<M'4sNE6_ԳgO|> V 8i_cjkkzj]~}1'qT[[޽{)]|>z}i˖-Dz,B!YͲ,۷OݺuS H>.Im4Mb 4@رc֯_lq0}I nݺ)h***RVVlۖ82MSx\.K999rN: UV /TNNN{ա^HК5kԫW/\.9#0e&ǣF-Jyyr{r]x\rÐlۑe2-[i4%nQW;HCX}INI,iJmhΓ)ܰOڨrv)+˫`Ч@Ч@+-a4mE"¡Q¶*C*b#",˒&0 I?U^aӰc;3 ٖ-0&w,YqKȱkiW%KD",KH$y -!0a&uimk֬YS PyyV^K.azk;hTK.}Hq,tպ'9:h?9\Ki)ZFD b 5FUcCD QB1E"qE#qE1S)ӴFUSS#ϧk8p ^ -[_?dM>\_ s]E1u?3K/iǴC}?v9d~Wޒm;;R,W4VpӰb1Ɔ-J ǢjkBLYx<{jϞ=ڵkWrٳgOr $BXL3gȑ#u뭷*??_w{ȧL1MSsQQQ.7N4{l!4~.qO<" 8PS,ӌ3p BO&LPNNg,3+R}񨰰P~{ں\R'Nʕ+eL8QBtM7nk &ǣnݺɓ5l0Ig}&0}mz6S^^9͛7O>|Z+S2… e/_|w(;JJJ8LrIg'jÆ i>Sα ;՚5k}O;[.~ UkoUkczg%vp\p\6hٶ-˲r7XA~|>|>0v̯M0ASLт 裏P-ի5|-[Lei„ =zw\O~_hҤIڷoZuY{t79Z\ӟ4n8}UW]~:+V0 3FC ѼyD7tSƺӧ~m1B ,PII^|E=x(h\pzO?]+W̸>}FUVi֬YHwСC=W ><Kro>d뮻N/:,??u뭷jZ`6nܨ+Bi_;iҤjo?z 4H4eʔߢ^\rI:dj@K):r#(//Ocƌѯ~+q]pڱcGڶԾLnOmΚ5 1h%-ϣXҁ G>_S.Cr$QS`َq+2rrfSَz3#MSz0`=RZZ7xCdƍK=z5yda :T͚5Khԩ;wz-IMSh/"U^^n7kĈ]T3fВ%K4c ]}2 㐩k׮ܹsUUU=z$[nя~#K/ڴiS#!S~]tE={.6W^SOU8օ^(۝3imk6mJ[Ց'8 @+ߧ@)м><iQ7V[M7Sc\ndd1$2=z$'EQE"N!9 7պ-;9C;\O?3fptXt.bKɓb۶,Y/~zt7j>}z3ɓԿ+8^u}K_/o]*_Fj+-#SKxR,f6d4#  GeeeIJx<.۶ohĈ;vl9|]wuޯI6*Z[{׽W@)).)&)ҼƔÒ͋ټXl5}ӥzh86fϞO>D}uo߮>}O?f3BBWMoS^CdO˶mq[.)\%Y#Ӵe9j~˓:&'y|OtEu.K7o>N9c]1Crl5vhuO}UII \ƍk^{--JmjΖeY-K]vء-0 И1cT]]![IDATwʨ1 )+)d?@l]z饪S<Weenݪ(77W999iLQ߿nݪ޽{+H~_ӎ];urlG}U~~8:n U]]-0tvQrG@ 555 Bѣ5j([r݊F2MS9y9bb1nqEj]UXX(4,77WHD-f(&*0 %|O?MN͏oI܃ff}hO>ZhjjjԻwx<y 'kȐ!]nG嫯?NC 矯#jjj4rH9wN0]1$N@@@@hhhh    pˍ/_\ iڑٜ9s8կѺ͓6ԎYUTTh֬YD"IbWo=ڑr#yx?{u۶]Ju'H$3gJGgq瞴}￿Cill5têԩ3 GzN>I *--գ>*IjhhI#uHEEzEώ::uvqh 6hƍ}~_kܹS0v4m4g?_zJ\s,YI&k_Zr^{mrz*G5m4;F:uJ~C|ZIIIݻ@;Z$nVzڽ{.BM2E6lЇ~nMz{n;vlj:} êWiii4h h߾}zs){Ws9bcذaݻL^W^WpY>yZ$I=={H^Wz*++S(doܸQ}nѢEZbdنa4C><3*//-ܢŋkҥ5\ z_JtUWkmtu]vmMݾmrG֭[Ɵ S-q.޽{~։$***__ :pn6eeeiҤIzw4uTeggkРA/^,׫~wފΝ;N8Hq+ogCKؽ{zݻw}hF ỈOam٩io|CmaM2E/ 7 1p#Lf{9|͝ZI6*Z[{׽W@)).)&)ҼƔÒ͋ټXlIN5zh??̙3?׬"s*X׸1b} pba>=4F|=4Fh[a$aҥ*((ШQN6,((Pnnv)ߟܞmZl/۶u9H{=M2E,R$g}_|QGVQQQ͟yj:SI 83٣={Rvnn|I\.-\P ,e]l׿V8֔)StWj…m[_/ZHn[qFoYx\OC}[ߒ$yIhGG{m4fiܸq߿b8pȐZiinFq=sڸqrsso4MEQqO㨦FR֭[ջwo3FXop>VmhI*))UUUUxVuu.\x<.q ugԩSzexaJϧN;M^W|ﯜN 8,^z&Oo|*--8ZvVZrr-Zx.]<$yZbdV8k7nxm֚5ktRC#GT^^!5MSzڵK?~6lؠ͛7T|N;m]VV=z襗^Jmz,IرcdIRqq ĉeYVK.E]7xC={amaQ۶Gi :4sLeee6 'e)**/K͘1C>Oijʔ):sXR0<6QI&i딝9shҤIzw4uTeggkРA[~_o/FO?ƌbIeY2 C^{d۶{\|$pB:Z3ƌg}ǟxC/?!{y췿1r4k,+'{ٚ6 4*++ӂ t*++ i.݆NzǏO 6N!mUې@O&]6 h '=ǜ4qX@C@@MÇ%tvX_}*&_n,[8lEkw ʿ@h2\V<(*_w$yINu1CM\͡H6/ŕRfG8~{`ze03%śHJY͏G%Ś1bzh*:94 vJ^p\bZe]_t0e3fJoL)148{lv@KR3j'Ԏ8 ֕r 3wJo!G8,] S3CϭVp>,Z}T|8ƥK*EQ 0LE0 !8F$~BPLl3o]5 {]u+'nooQ! pY!DA`(7B CA$ylj:=T%p>&^(dQ0  W&sEQ |+y{fܶҶ>a|X^m)/w9^D/T w4,b#Ox.j/ESx~@ImjR o=ƃDrct"$;N q<xmNp.KX9[I&xM^ ғX,՟JlՔcȦYm!:ZXIǬWI9/Wf O|+0,=NW୽pkp,GfZ HFչg=Z}?֫"҉a{4eoFkWS5^m6cX2XUd< :g[J,Y*icGlN޹K,cf=U/?փzI\ATHryo<Ҳjr?ͳ 8UXֳ+"S'\Oùgᗹ;iZRKvHͅ Tڱʢ5#CpRdx\J%Z1CuR=3PXI4 [YzZ<˿MO'Zᮾ+i,l:Q:>yU* KF5kʪd3 JY\VJw:b=Ia= yZ20Q/_c8Q,vTO};Kr 6 ZOyYII^a .Ow> E"ur>c`-5#GHb{*xYB -0{It#\vbԤPr=Djg!U&!Msq l9Z'_rz^ |Mgkj<1m4^`'Ct`,bN\K֓u]jߚם$&zBYRv$`YvӥsBb-e-`yu2S:!615.ǭkj_vxսm݋VGjw=y)(Z?^hI'Ήy@b=˾_GIijkñq4`="HrTF3Ʒ.b6Ea",JZEٵ9ֹq# z׀Z9ܪWTQCz6{LCk`(ɱ+$oQ;_RFAjmt=VoyN255zӓjEPYݐgVdvbzrk[`c=|(V3,S#$`=s*Q!UIaӾDؤs=݉,( k\hC91ϘK,Shzegshش1ea`ҁ2Oh`j)zr,'DP֝!:WcOPn\]4h+Hhռǔ)C*zk k 6XbkmA]^pV 0H+l<8m' K-'ꦧLwp|]|Qp%BmmɬMev"(jv-LQTI)9f 2Wo DuTǒ"Ֆm4 uXiRpk(,`5DSnUW \g=~::[u{rLïvy0Tj!q+ /3YϽa_Q[vù(ؐ 髖68C F˔j6V8Bt\I2rQϔ)(\y/wJ_ R9/a L\fRex y`{\6(Yb Y(%t[IQ \-ds') UUszrOUz#Wch2eWg= l=<@K6+mJM+ԝn&/PXOk`P.í-a[,SNJ2Խdcf&27V)S܆ZNBU ko_jؑLگWzrUf`=uQy@[z1ػXq(-+UqV,*\Y(z[K/ WlèXOPpKJk083K.P5&gFz].L &k3 9o -G'/aU,n;; v\[oȳP'M"ӢaGz΃[WhX1 fbY@af=)SuHxQ|Hy3s=0=Ynr!l"b] &6fF`Ƀ`:R0̀(BHSFsz;J/ۙdžTC\m4<˥46\O0P,AVQ>S<e[̬6?Zp ;_W@@ K̓aTЗZu}ST~|4N׽m]z,P!b4)S6˔7h6^X/QE`@dTBQ XʆmZj VLՍ,BL XQhl2"ݲ4o5u5yAұ΋EB9X/`DŽd>su̎\Pl m.2, &3k"׼r>۔)Yϰnh~8VDJ`ΐze f-irQΜSegҖ _[nrMoj:NYd={7z BGõ%q&:5M]SP8h^gd s:ڲ:ܗ`.2lmLnzpHdLfֳ:wYX&(_s^aފhmLU:@wXOYg=8밞zZl6멂2J4g[b=·k!(k猬,SW )tRXy|YwLw#Y[K3L2^uYO7[sl}kh[e=x`N)S^-Zqq8CmzLmr1yLu|J"x; =ngL1?!uM{,S[Lm!mgںeKyLin,SڞD1nBZ<|pS nX~|^/A >fޞmme*׼ez_J7(y_O5G"եEu'ȧ;Pgd"[KA-l=8_~޽G~w<ŇRY@,bljP{V7jخώm~=fzޓ7C_ 8/W7~fF"$[d2't:U!8h M7?@k|s#bVoBV+3#sk-nۯk|3<җ?w_Wy&1o _^{5<3OgF~q^z 7oė꾏}cG?w];mۊs|3?g;  @E R* nmn#"^~e|h4'?I N:Xy#MS03+__FQd2,l 8{B *<ϑ9^e6x9::qzzς @ð)ʓS(7v)4/rq#8Q$,ːyNX\(e,+w||܆pX|+1z,CHӴTy+FQ!(|嶷wi<k z$.M}e^,؏W^|Sw+W C d2`zUe/pZ˶ !օwPڑ\0jnKgME;-0 [k;]W_%f(=w6?v!"oBG ppWAgyGptfOMSa8&O>$Fy|||ąTvëtzzKxpzzZ&ɻy?ᥗ^ {a#f1('!#"'Z JӴA41110~%p$f;ϫ>j鴘fNL&L&HDy1s '< `* !fiN4~woEјGD4Zf}(sܺuqV@  8zP5m|^r:V݈rxGfSff<0[,=Ͳl_K/ m&[V'E%"e"R'I#$IRJ 6Uv dkU.mH2[]eO|hr2=!]f'Yd2|ߘ'?0\_{8e"*AU @<~;AnQ'׾5(3b~7ƍׯG1㎬OH_P5-HIrĖx{ ɗo 0j g}OQH"!trIDATWz=\|W\+yQj6*MimE0\0dZb8:<^G8<{ի?6 2"_'~Qb0^g $|Y &Ob6Y@ej& 8}Ww9oABTkO3g;\u<*ߣ8-i4KP€.W{1!ѹ؊{p];=N8q:`:"IR `t t Q̒43Mߺ~?o߾{b6>w4>+}vׯ\zpҕh pi*ky&i_y#BDq^0af0@)sz}{=z1^fY8 !PEsdyǽ{0L1M+F0F5(|~4=|pww~3kRߋMׯGп;yxq0So@4$G(}e#_&qx, .8FQ" "Q Ub&'@! p(D( <e xyl (i,M&YL&prۓ,sduXM\dNh[ [z ?Oxo4QE0 Gyp6)[Q::\@E Ke,r ՟ÛY"I|>fY>'t:O&ɛovo̗`BK0u cNwt;x h>ӣk׮~/^׋Ao87p`89&~,BpeY$Y̳$Iyd|M,tft:f4s7䭷J$x 0>RșryQv鍣(ۣ`F#p8h?  Fh0>à( Nd&Hs1%l&fNb2S$K$Qu3 Օ&@ho}e׸=5?y'rxIENDB`qtemu-2.0~alpha1/help/dynamic/sound.html0000644000175000017500000000045411043665447020230 0ustar fboudrafboudra

Sound Online help

qtemu-2.0~alpha1/help/dynamic/cpu.png0000644000175000017500000006461011043665447017513 0ustar fboudrafboudraPNG  IHDR!OysRGBbKGD pHYsytIME[-- IDATxiy6fEK,Kϱȣ/I3 `1@b H~G~ddd82EK"[d[,ے(S$b}{g~teuZN{e-NUϻ !}k_;b#R ?>|8wߤߑ!$BȖv\sBbq?8?|}cq,?|й$tHz֬Կwyy>3g1}ػw/2([ÿEωF:O }]\{` 'nGD;$2z,7L^i OX2`F\&p[#@Ӵ駟jL2::zv ۶A2mTI퇏G1II`$ 4{Fy Ď.*'?oY9wn ʐ&o6211Q޽{7liڌDc $:Y-:hhWxE S( 6<0sN_Fe }$(M~w Mt>_e) W^i߾}PXZZm`bt@eǢ2i@FA[tH$q0 i`\%͒iN_u-hGN @8 3H|c=EuݽmjR ^f JTI1ĬfcX[FGqp1!xp,ya`Ee}ǀ'ྔRl6o/*( h4T]G"*&w2 i/Έ7W7 qǃ%O8j&0 q4?iBQJ^pMܾ8s[}1JQ L"%t@0A =*3)(vjfpb$6 8iԿ{f?lqBM 1jЊ$JSY6;lc=F|A +)+ʵ{뺨T*p'l2Zkp;PYB.(^3Uo<:ಀs @`¦Ya I!B.1ɏ,iO 678uA2(clT*^hl1q'P_Ɗ; mYz*ka0DܲMдD*6to0eLj3I3fҞ3'=g&MIy9Imǎ]MJ" 7rPkkkhZ3hx+Aԍ) :7a#3X0 /~zL_BulPRx0SVCYO=qAFY ,3Ew@s(4[U-sS;$LQ ˲Lq,0F]wͿH~VhZ>I R웾k~B2. .G*֠ %, uQ$m(ݍJܪfR` Ↄ]ׅmRTUMl׼?M T*RX]]eYX~zq/Osr/7 ,+;`Va<C2 С][:e)(cLJ}V@Reuphc$e9cMZ֦a3tw](oL/eY_<-Ki3\TmN-x~Dvʓ@EIRgqb 2UY,)vLpAȟzxff=QVŝwމ_|?740VH6n% "Nھ,z$cru 4ϢIdG!Bz-p ۧHHtT¹sP*HVwy'_$>}"UA^{5*aљc<JvH$GÒ2 e3 q@5dGV Iv#ieIXy̵IϳIKmOAT*dii,-݉Ƿ^10 (*Jh4$0d>dA(㶈mi:xC$%w&8IsۊwnF}I'/MBj&, +M}׋rQVaf5/)(-VvEJ8:dfY . NvRH,:`7}¼RJR6N.-SdjjJyc}T*ض]?^uDeN'(2!6zNPNwL&PՊ1052" +bi mB8cj]300˲3kLdI=eK2 ĕCe* &H+9QZas8M:ߪfF$}Y'F+KlM199iZ!4Mrw߮m巾-ATU%8s>iWHTRnBIJt,hK*AX<&X:V`mvO݋A[2BiC5 XEFGmǏl锛TB* , U`fQs4eK5dXJ J2$&'iev,ˊͯP4y<r1 0iJ!uV m-QgY{W1ڕ}?69̀& _敖a Ķܹv[A9<^'ꖸ0{!!eheZOm \-R:400Z`)D)춁2 !S˲EZvOէ$i77$I2Ɲ,pЏ-JpdAf^{1yƴ`#Q\ q]$i(\R]׉\QQEQPdtvi 0鈲5@Iby =iϡiZD]m,(DdiF8fB԰G\(}(}ζEj|߼\.vle7j,G,CiHZқҞ!jQ[NӴTSZF` <ӎ婸LaXp]( ']ؠ#| lmmݻwò,Z23}<VB)kF2QԴI7,-E1NŃy$zW,>( yo "zM]qy 6YE\,gZAIư`v%6F5:d$d$35X1!,_sRr,g+e%q.)=J pl (кZF~"lFhLJVbt1Ns8Ķmy;(oX,B4ͭ05ؑ$> I1n`x 2/dٍ3$f|ĿffYqCfLQw]xB4Cch%HAY.9'j˿R\E2HfnJZ]TWLAY9(*JqRYf,+<%y ~Im52#vz螐k@+ZvHuXڑt]L58Dlێ]j\&!H'&A'΋3|EcXԂ<fG^,24pFDy|I)StEQ22%Rhۖe$Ig%&$I,fTAV 3)OQJ |Φ^笑\.C4h4ٳg ضH1fVeQǬe"$+cR֊[b~Z$7I֤%L2v+t&/xI0l R[zY'&)tsx^f mWÄ1!{3m ifV|l`Rr @e'645R1)kAdZ?z~X /OWiв ;IR G(eu=iN;gzI(yvh-:mu͊+N <+z~iwX۶Lc\%2zx@/ 1%Q(rR1Nr5?*AI)˘EQ81 ##߶e(FAz#B:f@f5UӀ"lܾ`<:sqƳho2(pM4#DuhFof7\ *L2dgVʪOdYw1-$1xӬsۃ$c֬2zy*ȏΜ25 W#tL>9d P)LUstJUUk?200.#AJ zO|Qi$$CgtQо,Kc$z,HpO$rZ-%f7k'&SӴoT~)j^ RUO.4jMDyQ9OϠ?sX08̨ @&L,cq%,D]HqPٵ:S&E\|঩Y](y3ƂGummM!}Wl ˚@V￿qjuSŸam$V[YcG.% \6{?VUuK@| o ӭGݰs>822VXZ\Wٱ0D#L%icV\RAޕd i44R>1]׷}i}VaJ,ɂJFlC&4c{ٲ\R(%6뙾/s]nXE_$+dyke)&QՓVD@ $[^ )m ݞXwJLBAbсpz9`{},z^$HYuSSgvYӿLL ` ّ~ր=]4WO^i汸wܱqERJL&՚N G^pAV0 hd^latT+dcܱR#%zv3W_);BlEX @=J;i~҆,K7ַ # @R ;~E~&{2۷} -ʵ{PXM\{rn vzD ^zfI (hW2 ִ>FR+!&he'0(7!pjYIJ{6Sm )y>f/u;>rw-a,lm+kH{ټ:cvf@AI) s]-aClIՃK85Z*!R׋e6bV} ~s-i9> IDAT4yMWFY?ߓp7蕞x%B<9D|du-)BEl}7U敤a@\8@Bv;^e8Tot.^BqxG ؘM*w]ucYիo4Lگ(J[T`8@p4:`ʤ~f{7y\ ?16ƘpU,LHW':ӏ߫_& n-Ij&]1M.$v]wK,ivUaKe>̼K7u [ac; sqa6l2xH7w8⦸ڟyr5(j:n5,Ғ۶{J+q%@)QmT*E+&)/IJ"ͲBh; aNI` '%l ʄJݟe`rM5a9wi>Z- eMl4:ѤAW-2 KԸ%yQl`S\f\i+ n5\+JJB(qFJ%clM[R !n@Q J` 6Ȝ&y(%RP0bԈ KٍJi~pdt rL$X6XwaNB5k @8W(64dFqLɺBz\-}=7kݫcՅ:n'hjW^iK JM I8ֶ-egmuU;{V=8R uSY0On7S7Ji#Jo*~6 kxw1ϲs'UӴ/l= Y,A}֩W7ų;q B/1G-4K.'DR'!#Ȣ,P@bjJKWRJőre-fL+$I<Ӗڊ"OcrrcK/zꃜltӧ /`zzGm?xӧO >iȑ#8zh{<{,N8C011RbaLMMRZu4 \t /^BGʗ뺸P*}nn/bONNK_Җg7|'Nu]|3U,}Y\x;]w]f~۶K36 \pΝKr *Q ̹RLMUvC%c7eM-c Ñ#Gpر{e->W^,{=|lCCCx' :wwy?>.\ÇСC[CٳgǑ#GtӧOwoXѣGOCCC`eeov122qzylfek|)n[__|ȒÈ9={ɓ.iV~˖y [K{= !uj+涬v;`tt4Z czz:ohY}Q,..vzǎWڱBs /tuQ|3+7|}m7~7011apyᇱ񾮽Z<={=+ 7܀?qbs]/^DVCP▌pj~혚j8pMuCxg6jJ ,q|_f/2{=Zy}LMMᮻΝ;;t|ݲgy{oR8pv~un 7|sǀ[ )`{'[8=~-Y*2Ayqbflm߇Aa.\G}m8] npf>~_Nn-曱3g3 -}l[b־4ٳg /஻ߏwkvv6088Ɏw\pԩL[,ikZmo8VSݻcǎ<^zk [ou[ni=ɓ'qԩc)J$O׈ry|ZLFZZuirq zMtX5+J>Ouw?OdΊ~ + >`^NX&>TUUUUaYu0uE*MNNvDi[Tzwq]萞ǎ>I! WyلeY[b #`rrr=%2 ԲdV𵌱-Q=k׮wi\{`hh:J)8k:GaaaL}`k4pb.a ( cl0cO8`\#GdIyqbtةl+$?s*J{c;0 #ߎnw}nLMMm]w݅ZLP&j50b38̙38p@}<䓩K,M) [זeYVV Avqqhwǎ[ j3]t ffJ3dY೑eĮe}4]244*7\#v`qv]vUEgggc7ߜ>FGGIx簸^5ScꫯW_mj6 {e֌ 1ںlbFq(j޽{/|ryK nMMMazzx`0 !0>>b>sifggf[_8 0|*E!&&&b3??ߖ|8y$~-5M 64)8WI4mLLҭBdn]x|'}}8x {=j5Rr{vo۷-9s-/Mwx^x~ծz)|oPA=AmvudgT*pypjlxaabqj7+S\Y[pzyP('vzޅKajh4[_7奮HX~!Ç;]s5[meeqZ.q=tgy.\GZ3]n螰k`7ضrsjF;.jn}y}qq8qi|.]Bӂ _bGfeYx駱1mnn?;|ԧ>G.\.8NG obb-!Ò-n==rǷ4 [[!4M(FZBURRJ $H,I8ǓI:OVӫ#ܸ$RvYv5eӤ]hkdQj344)n۫Qj^,k"GVCU$L XOnd,𺑄)Zce%i{A&/mBaQ#OFmVUUرX__ACǿL_[uR5Ze 0qa?vKeeHY̲J+Rrf-͊Ib>+:'i8g56Uu$2 }6cS(/KJBȱ(\ ݞ'LL{ieR%zY)0$,Lj+I*E-Ig]M2.%8Iɂ-?2:fEig4u͵5}uuiRܐǏ'逺Fd(f<>$339CZb[`7YJ" A&F[08'('?.Hu bzza4M{eeE_[[͹KMeJ@TJIncV P!/6tO22J=A/p]l6bbNH>)y%u%vY0A) HYX2n?uw''nnZ=Я4>E7` ^v5$;eiKd<s~ν&!%،R|>wv]B0//_R)XL&j*7T۲1-m,a~,>\) }ᝓ =Sns]:u ;2v]kSa͜ÿ}8GxѩQc Fw 8y߿gsԵM _;3; |־8XO\?07snmb.%L`7C^?#'흘$՝fbO}YTud}bi\}c7|9,Ξ'vY)?< &7Kk X9O~sчS͉/7Sf.`~,v\{;{ԹA~yѥu^Ҋwӧs3sʩkE4*͜Ai.\̙鋻>zsw)&++M/cq#헱8;ȡ߇4s ϜQ412>NΜgS4(8!L(O!9\Ѡ:'KJl4M"@EpE!0~>`9(`y]03l~6(φ {cXBp1Ojsnk,<Bs]W3 T%̳ w]RyFjU{b+k@꾢89R1T23nj0Ƕ5SQ e~1gz#-9PI:ȹE\K\Θp 8'hn$09ƼE)$.8^{ΙAxRq *9O+9'L ""HDG%8)8ç,+U2Էr] ݧ VSɄ HZ=Lort'D%Hi&8r!2oPZJ@ ,ק;!e)QE $dhBV2{ H,ׂxt+Tےx "NI8V\D,!yD 'ZDDqL*9y\{SϹK')/PHA ,K-4#YQ Jz XpJ-E/2&"Db(f]ֶgO~}O $HvA8y.FPhi=qyHEV4qXP7Py% ZMHXip L'})ėUuV5{i8^9Sj+=XŦ A9" T%0 c!=$%}۵],8ty[[HkOKRQ}Dk-[1mQ5M2 N.PtDLPZƨD3o]@ S;)8iE($IrcQh_&RPqU ~< `piz*k d MOcԫ=}]L~/D:NAřE.5zTEx/!5 n䚴8>ç, ENa $(DF G"'&K^oԲ#* Pcoوab3|29]B6\BdePmKj!N OJ-6@dFΛ@ke1mp1)  =ՅTw84I` {"*D(8wGJ.!|\Éc^E#C$>`t%uhH X 9nZ,[u=\:4!ΰ/ʜ\Vme9h8WƌvUE R >֩A<k]Z`#"6BUkuR4H}kMc]h EWZpd BZS/*>" (cQi`\*:5 R tx0Rw,d@ٔkybUTJْJAQ[ .J&}t$)mBI<u]^*J1mM00^'zkj=sj7J+6ٹ3 Ecbs@!5IHԚYlkBmL$bh }뱢RẢ[1 `kI|{k D`cbT!f/h٣kP0he~i k} (CQ+&;],=R8IH`%/7r4vor#[alv2HԒ9/7w+嚨A&hl8WAвJh yh9}7_:VJYIؕEe;{Ë|2f-RUٿ{Q]'^x@͞($ w|qLP*:{{oϾ~2-ͻw2$(# _=Ɨ6quz6sIoD Cc}xxYRЊW?FN8f^[;oHݏ;'2B A:f_?WgF[`R<C[OeZZz"* w{hzqD HE {~~SujcJgx]?ٟL:mz/ \3Q /qyj3f9ɂB�z4ʇ D](` X'qs!-' 4(w>8v䁷 j;PSٌ8H)t3)W N4N/c50;qz1 Q<04K-]DTybyY΁XvM'!a9Od]^>tIh2*ބlpq|Irr֩DmsƁszG*'փ5.=uZr&!!jqЍ|3/u=<cgBW&dk^c"iBb'9 Y0{u|s"G(5xk8Ҁr6:/gy>gI Lmj ߹8Hua_K>\Vm B)AvNvHwXY1dqא$0=Iu4K؎i4 9Q)+>?܎>q.r{~jSu(>{a|w8J (6Ut$ݱr)<v_BA@(bޣ^/_C4!ںYH8TRh(*^'yUw?,˭iY.IW{xpI,`m7{w7A D WA4i/;llܞ6͆ gBvkM@e1<([E  5/2ۦ|t>ѽrN'py^o˲g!x F nfTIuVY%17>>w΋2 0>A9OU;ϷV`ͰyaބVr&ހ+*kdy>ܞ30c ЅO9yoTfTqƀ1fuƛU뒧Eq,-[1xO&y,Hz0D(2eϿӇa]k`ҤHiU>ny90c F r|z¨Q1΁#DgBEc<WFZFý,HiR5˭E`|Mvd_U֫~eG5|#N"X+Q!id-˝ 09 nNٿxq\,6Z+WOնyZLt|ٚ~UŰf-' Ȳ? zpښ&G\H(l%'X~:[l?Q, PMhy{,j9Za@TV+Dժ wǓS#x?ܽ*z+g ߌE?;hLoXlfyAggƊִi2S]}i/n~S4ݽɓ?un#7&3yyUxlnN|8*ꝉ1ݦiz/S|ռ|{'MmW?~?Ͽ1/Ӄ^.{s]cm0v;O=Ye#{V}+//Σu+m,{,^otzq.,NupcX{5_:(o3k;i"w?so_{zpu5m8U8,$'GrtfL6M.w/}3{yw(+m2WRwp49ymv縪z:V7o>?8iLq/۶34M?_#~eH'|tTҰA[^VᏞ_YWIvڦ<^_'jh;n tٲo,f;@Y'>nA\`׿5mIۤy]gmULGgΗ`UUv`d._K4_y<~P8}Vj50wOjlڶ?o^܆>OG"{6gu~^IÖ(Oֱ@&()!@n@0

Hard Disk Online help

Selecting a Hard Disk Image:

There is often no need to change this option; your hard disk image is just like a computer's physical hard disk - it stores all of the information in your virtual machine. Unless you have a good reason to change this option, don't bother.

If you have decided you want to change the hard disk image, be aware that qemu supports several disk image types.

File Type Extension Read Mode Comments
Raw Image .raw / .img read / write default no frills format
Qemu Copy On Write (qcow2) .qcow read / write / overlay qemu native format. supports many advanced features.
VMWare image .vmdk read / write
Parallels image .hdd read only
Virtual PC Image .vpc read only

In addition to these formats, qemu supports the vvfat, bochs, dmg, cloop, qcow, cow, and host_device file types as well. Little info is available on their support however, so if you need to use one of these your milage may vary.

Upgrade Image:

This button will upgrade your hard disk image from whatever format it is using to the qcow2 format. your original image is preseved, so you will need at least enough disk space to hold a second complete copy of your image.

qtemu-2.0~alpha1/help/dynamic/hdd.png0000644000175000017500000003054411043665447017462 0ustar fboudrafboudraPNG  IHDR6sRGBbKGD pHYstIME% IDATx}IYvLf&sPTRiHI5w޴aUMmа@?oz^ۋ׆ 4l] ]BUw$L&39Eފp#RudL F|q{wyGz뭷E )<8L<o^nτ,;g2:^ܟ/ܲ,m/˲;F|?㏇ (z뭷T*Tʱ1677( ]L&}7k[$~^Ib?,q]“'O0 rXvSx<>LY$/Iܵk0??px l6qdp=rH'{E2s AQnR4AtF_|ZZ8Cل(X[[+ukkk8:: &Y$@E1= h8==ţGl6L&3ܿtz*岏:pim`Uu߶;;vka&-sZ$pxx_4 sssd24 lO2cyRzpbw}>8 =EQ I0%.2}*t]ǃpttcr9ܿibmm nw^F,a8BD>1$I`0$I, wX008w!]? `YDQ7˽3v3:Dq_-u#cHl6@\FB.ݻwl6ꫯ4M}pEQ ˲>]qm**TU$IReY}PU;w0 z=OoTjGGG( 0 ~b5Ph0M \feaqq0M;;;(˘`0/!_;w.>ܺuϞ=*FJ" Xī RIA+,Sn>|{CFqh#ITUU^gNd@. L$۷ ?я~oz> @4t]ֺ|>믣T*0M>>.Lӌl(PU~Ma_2 |)sKx 0|"I _}UfSabJhH<ǡV寒":CU)E.U3ӫ/#\~ S ѼֹAP(R,Fz87٬J&10g~S(mf|}@\ƹNQ*J`A**pY􂪪$ 8"fmʕ+S:76RY_,C ,2M#p5DOQ,--a0`0yC** N~27m&$IJ@We9͊f+٭[4 Z< D@y:AeYz4ZFA: (ԊT^p88vZ ͛4kL2Ķ?^̽ŢA(˺*1yM4~4qhyW]42eYʊmnn:, oq2^ծr{nýywUU5/| B1hc Q$5+ø8 OO>OrSkm(nT/$~[Qi-1/Ji Nߐ^*BI+I*kdcj5looyܿߑE:%eI (E$"k4M#fP0*QiMu [1gB5"KM|~Q.X^e2{&+$SV_y( &X*PQT`$#J=70CC5L6(\Xq*IN#) {\\.Odxꫯ( x G֥ĆYS@dYLqQT`'ɦrH-"Xvyb$>8"ܼ&|6>IncTUEܾ}{ ,5<ގ~<Mtn 3\RDQpHN7Ds$SkXjV幾^믿h47 (S#:4bRzQ u!vj,DRN% ,i q5#[-677qttt:W_}Ց(;N$XT3TwA*TR-//kdH:($pl6|>w:TUϧ{4aooׯ_"zLA4ȹ< 077P&!q鄸1:I`SǸrgN,k\ycXGq Ոa!B)0e@% pf"Hr zj:,/C_8vIE~ƱIZ1K&KӚIM TLL&t 1NNNniQ("IX}" VITTlVu]c;Xl(zB& )qZjUxzrX^^Ym+VYd֏W6qIu/2f[ \1Y.Aj{^JRS C0 R),--pWԋσrHd,s%SzhtOӴ)IuS1 JBi 8nTv; NjSꁡ! Ivn 0t$SO\ThJQ՝F {{{x)LӤ,_>],DM""j(A8I6x< M;;;!NOO!"j0^[[[z(j>f\?dPTh@Ʋ ZQqrr]Z-Zߔo.I*w8M0j(J( ‡~AK"a&Q,F/ S-II1Baoo<ڏ0 ӟNt:xAO~z=zO'{_3Tׯ $x'|O"޽{?|( Ar5XpH׽wժbEQ6Uz< ɞ.IE^iT*0MfӳnDX--w*W*=*1Z`Yt]GRaJ¬1** 4Mis;m^>:'˲ Dr={F"AE]${?l^+8341e:R/IZG}t]XqՋRa,U7yB׫9vMFmZ>IWRݻwOQeY8<,B*B=Zӓ|L* 3z"}'dt뺎L&VEKKK~۶4ά7Ѳ,JrIs1&R)wCB'*Ol }z=ŢGWRн}Mt!'IzC=iɉ,:p,v=XTJLx4`4Xl?fdfaY Ø"IT:Z_* F:T0%V?^?.$&қrʕK I ZAit̙0?v$WEit:ugϒ$CeJ/q5&cؔ MrCLcR I0ym\nzvTE%AHAلi*2֥R)A+ mu]=C5OFkwDRt:}!`*ra:.g٤׽h@uچ>?J=}]&5_b*T#h4@l ⎻Yt:t:0 6bJR:K4Fh]קfǑVITy6(Hw*?;Gq4+J(0iE$+,jʋE:LFF~_&A٤4,elq vJRIpjbwȬF:91EQFz\0\\egDݦS.+'26=N(`S>Q$ i:0Bq]!3+W8fѰbO48.,O97"EB.sm2{8~ ~j.La4 q:'1fLTry*v àh"מ :V3ZK5ؾuxW~սl(vUTp<4};ycOq/4MxeA`JBJvPڠen4^qeWc s]ZUSפr3A֋SJt]lzRTB" YY pI[79zԪ )J*eR2礼h4Jo~Ƅ 5Pa0 :J VլH}lzIXeNaet: ])WDuQ:Q<Ũj/ T(xQ R>6} Ta7"X%Uƺ(T*iPVs۬TXb{G\U:ޞeM?N$DYmRq08"%X/N BQ|>^*OQZϝx}$t5@5ǎ-Ljt`E(4͑t,}Iy] 888`24M á+n5kG?z=L@C}mmMAF<Q,qpp@U`tE$u2H,coP,Q,a6 à$y婪*RTp<=>f޳x9)X}ŵ5ikk7oFfӁH Ei43peT*w%IFgcY8A2 JD"7oԷZae=*N~0ӓFE}ޞ{]^G<B11PVqttDˠ)IIphD%I&d8f*L48d\^drTɋ%M9=`nn|L&EBgggnP^Lz6UvY.PM:k:iPl4TjP(gUIA2,fO$IԻ%5SAyLzUާnSyJt/`$PmIv远T&jNzF} v,Aܵ6 ']E*t:Se/JRUIt5ER?w:*=SIDATw%nTUXw~ t No%U-آc)m}a fO IjMSC4QEȰ\.Vףa/B β_J LQ#[㸩PCkR'h].Cߧ"mUU)&xQp,3/*Hք='Rw," |) (uF͢}hRvk*Vi"?UU=GQo߾p{?V@ϤVk$IX&}d@e :ZNu+H&o߾VwېuZ.r:z# xl=AȽwq`~t7nЧx*{ېYE4-9WY]WU%zD͓MlNQi-"4H^WjSn pP/:dVۯ.IھN@ Œ榈ggg-Yl0`Z()*j$.~"D+R"Ir4.fKШm-T(7fڔŦ(L}EyR"I0ʼnEEaν_>(4Q,7MPQO~TRg$(' uJӴ#f$3LJ%$H-ysssPU\k g M?UU57띄"T#3b'N!IB8Q4L bWE3T*PUJ$HFŬfRJ;7PxvM+_T W\2? E]e}vMr Ե%q6 0$I 8]j4uK,]q rQ%d\Z!I0O1ciic.Js'1?GېYfXzdE ihZvqmI+$7Re!yv@u:Z+%.$Ie 8⪿7޲,4V;类K;q+ `R <{Fǁgmllh}Yk׮9:rVVVPTPVv}aj0Hq3us8 z C\/,Cyr9 E.]a`ww6tvRE%դLfY+mT*ammQ!hHrrLG:jm5!I-C"dYm2:qrrQ@4+ۊlVAHd;a䏎*Bj7-A=HCѪ~^% `%ҊEQ٬ nllϢXJ0zmvM(,..ϋ:1:QV_h% q J6d0ѣGVhZN$(3dZ^G&L6Mmӑ+,@JXQO=z3z=d2,..ݻeyJ"b\ֽF-L yGh\6ZXM(HӴu*b*z:H+]_n;O;xIS,j^c1TꫯHFly]$57P(ɓ'/IKEcTUܹstլNI,lVe޽H Pҋ|'@ vP{^Ro:OQf51Nk'5JR9J% Cu|?#1q%EH-x lOh tnH)GA҉x~beIJ~]בfjgڵkT*jΓšHB4!I@X{JcM~EH %T3K&'K8c$'I(aeeoFZE \NC%ދMFxבNaYdY , l6KQ"¤g۰ q~#YhQ>{}nl6>fZE&2^)|X,~r~ЩZ (?q||ۂ#C P[C3>sܩ2^jr0Ν;xwnQ I{=Ȳh:IJF>fډfd2;2Ma*L¾JxOX~e؍g}[u]$E-n$`>V -QeϸeY8;;)ѝb̢ZIg,,7綁X~8P!Sn~O+ ǽ,v *jNGRajE:H$bċt:AFMGV,v3Rlq0;oLcH܃PTyf1^/{Y}Fe緯 888__AFk?G/u|{[+2s* zazid6Nzh0h6˲i-M+B)]a4: 'Oh 7q={6(jGa4!Jwy.,˨ry&>| |PU.>|E0[oÇ4 o6>|7nwE}<|>>|{'"],+d@#=2) "!HYפ"{0ЄTĜpx:܉p=8b s_{Y*YvIT^hH*{*Y KbxE^LaR*l61FPry;5j}};;;Wj8Fb?] 2|noT" tgvi2ƽA@ig(ʔ3b+++ )UV&^s5ON"^G'C| 4r\"1,¿ۿ? C,AYEZrt#p[ƿGeѬPq<OHRg˿ J^}U\~N:GWԽ޾7mȒzx?xL&?4 #n EEHS|GO1??9:'/#N?7Py^쟓1R~ůBLQ (0DlwVC^w S1HR6UJUU,epVӂyD& à@ܵ~j噘Ynh4 NOOdh%R]^@#J$IajoU(Bn <#"n߾m/i 4Mt:@}Ei\h B `{{\z `|(\F\.}G>}1W(o d&y9/4>S eKS [LCɫ+M a1mX/ܠ"8$K0^rj0yPq6 5yƗz9X@5ITdCs"^J#"j`,`k#2IENDB`qtemu-2.0~alpha1/help/dynamic/removablemedia.html0000644000175000017500000000047011043665447022052 0ustar fboudrafboudra

Removable Media Online help

qtemu-2.0~alpha1/help/dynamic/otheroptions.html0000644000175000017500000000015711043510733021620 0ustar fboudrafboudra qtemu-2.0~alpha1/help/dynamic/display.html0000644000175000017500000000323511044701100020517 0ustar fboudrafboudra

Display Online help

Embedded Display

This option determines whether the machine display is shown embedded in QtEmu's main window, or is shown in an external window. Non-embedded mode is slightly faster because it uses SDL (Simple DirectMedia Layer) to do it's drawing, whereas embedded mode uses VNC.

Vnc Transport

You may use either unix file sockets or tcp sockets to connect to the virtual machine. The default settings are to use tcp on a predetermined port on the hostname 'localhost'. this is fairly secure for single user machines, but communication could be intercepted locally. Unix sockets are preferred because they are only accessible by the user running the virtual machine and are thus more secure.

Allow Remote Connection

This option disables the internal viewer so you can connect from another viewer, either on this machine or remotely. This checkbox also stops the vnc port from being automatically assigned at every startup.

If you want to connect from a remote machine, you should also change the host name above to your machine's actual host name or IP address.

Password protection and other methods of protection for a remote session will be available in a future version. In the meantime you can set up password protection manually through the Other Options section if you know what you are doing.

qtemu-2.0~alpha1/help/dynamic/usb.png0000644000175000017500000002365411043665447017520 0ustar fboudrafboudraPNG  IHDR6sRGBbKGD pHYstIME9HR IDATxُ$ǝ߿ygUuUsp9C Pax]ÒJ~a_`ɐ~0YX@EQcp鳺 ?TeufUDdQ=C(tUQ o$?}Ot]@cE%7y7;$ߩu?O~ $_dsss4]z~ecGaccۯ\|~q"P2S(`Y|Wp,fK+J$} P%3ƊNF Ԧ|4@v+Y%  !EJ#H ;,Gݲ+cl}{y6J !T<ǒJ*:iZ %NAK,c x(æ Tސi!V^Zj JiFRŁ?*ݻ>qfRx, `RhfJ%Zz}| q_Ջ/XdUzM"Q/텿~ @hӾ 7Vo,<|p__Ep"E㨁1F^zb_cQ#P @WVV1hHj!W|Bz\4 { +xEA>-؂ðv,TԟX^^.!*sssiDī6$8~'); m;s%Ucxn3!nN'TW& .yt:.2mv*ht]ԔbS#ŋN@,&Gu$Y':"l;T'<;൵Oݏ#7pwjo24 BHƻ{Ћ/**DX^WW­BTTѐpgxĀu L R5xћ%RCGF]` F[ͷѼ6NZ Q5 h*<=1R ^~: M4<=Q=+ vvv$L .aR%0 'H"+0==}h uUo! wp7QvAMOOcss3AJc`4L6U>˲^B <ATB^KF;Ww2_]>xobbb#`'Ozj5I Mvs*FB, Y<W+믁\ibopڵ9 hk`4>3 KKKFC="ϟ?H50sFj1rFV]v s^ˢF^~߿.or{{{#3OeT||/C4KKKMՎz!լmڇsz}V tQÇc/ d )`vv֥$U\XLJt=: x篍ϠXԪO À5weTllFWIض-3tؼ%nr8JI~ϋjoc*zcE~wtc=lۖjX,:')Kɟ Ύ 8ejʡv,=UpmvvK|,@cP,8/v:8΁ZӰG)$'@izR~.G>eXfo&lل8!`B(U LF뗥333=]mlRJY9|" ޖd3 ">{T 3loo>I2 #X!MF-rYYҰhV;H馢(ubV\.4aYVM;I0 [u oll ^^>_3QЇ333MB`fxU0 N|YRJJ1lb~~нd%oNn.w, u]<|!o9uٳkׄA1]l>n XBױC S`-xSUcǎy%ivqVWWQi =hlt%AKspVᖧqT*/>\SԟSSSzjI i0 4J+6!x"xU*Y}ȃk8_T_ljuk~xpY2ST L|p5 \X96 8;sK8$]X%v? . BX'kpa\y 5nz,xHa[Ex63gjq E6j~zow7nfR~g6y;4/yD]AʱVJP,UC9QW !zmm rJ.zߢZ@d j9Nk`8kM055[?E>p+31r+fiarUt>63+5LhKύ.bI9F2n߾ʳ R5@ C j?H(4N`!vwQn>{_@Eۆk3^`;$jc-˃:IC eP(S5Į*M#O5gJlyskg_8$uH:>+< 2Y*8XU*B Mn۶ˇ"vSK5z:71q2i}9MG ,sղ%=B>AD`VVզĶmiOtD@<S'!a-?ξCP%,}͍ UQC}$E㓭8Wm]i3)]UGBkA& R@XaXI]vQh;I_WπL/cC ɂz STדߙX(Ua0 *'& .8$IZxUe,B;ryi*@ɛu_Ϥ5ߵH}WR. pdyyYFس~z zL*0oBxR|MRU B͍S)$<BzǨ𵹹=HqL}Froԏ.fv[jt,RH61===V}8;U$[ǾzEɓ8pcD}Ei敷q.<=b!1\bPXk3µ"=i|@7AWg?L} Tinýw\]迧$&kffnR*XOՌx%ZBIbO1jЛ?~ tP {,u6Mvq]ܻwNg7PfB@¹m .qj"q #XU^s7 (s';Շo'ADlbssF9&M9TYP6I_"IeB 0lSxj 쩹 @t f$A;nM&uo X Slb[JX: e]:&'+J@#HƲ,[EGZX`RpA(uj)/G]#X=,-L-~@NݷKc@X m bC47,Nf{SH0 jN֐8. ?Cuvnꀥ+?u<^VUbcffF3 KQK` |\bQ`I2%*յYSz}г |7P&U\ԮbqkX[mۘ*J? 'e%g\*R+]6&8PQb<[^GPx$0ŝ߯,1pr+G3S\ćOh* : l2f኷ :JffPK Xp8W1 #P_^^64MŒkZIT70)F{vE=XKL;9=\۶Uau]?}.Z>n0Q=]o8U@xWQu.e {IӜ>m;NEJ4ɡj6ら}R+vxWa}qtry@ހipK2RZu]吏x?2 .n> $'&ɱ%敟2^n6s`xm4] B!a ?.Lj =t*1 XiHH&,5tʹ퐤*)YLj\p0H!n!:]ID p3M@9 LIو)/U3T.\(WQ|Tt.O-O՘VK:(… ְsIR4ÒJ?u\WR % y'[P0żԡ&Ď;ޔ*H^L+9Xq%u'fffܑ8URqLeU_:y;T^]=nz{a5Nz*PR^UsP.N\gOԸaRNװvdE^[1 #cuN7o4;00!B;@ 4B!vCop#7)h{{U|U"k8kZpo7? Ν;'lLE, eut=l $UPatnU@GRqӏq~ymhIz.no7s 066t]R E4q|Ac T{fe.I{>T=|rj.ai,idyzP 4MW# 1*'L{\%L2G6~nJaW:OZ(8h:4͈"eQ4Tja򘕐dYwwwq!Lsd l}~X %\Iġh{8K,4!8CTi: Z{lggydp=`"Sl!\tTO=T|<Dw@%Iz}=wg`-v$8Xv,JE*jS B !i)]Wh hd_oX"?3T"M Xb)('5T O 3Xe$[&ĢTziwU\ZEA*PJE%i+SE(!XX.p.Xa(~xr@RR4ËT7@/P6pJLJfU`? IDAT'ڈdy{XJ C`t]TE405\bK/sGpZ,{ϗ^UCOфszr~b0i|OIkm[(:5ꡁs8UCm;D^͕iWwjIնVNfiK{+KZEEj=TP^HLS>.{1=節8#+hAa^Md[5޵eJpc`[RhaiYvTTaJR}c/.^Xhlf9sϢn +n1 ,l܃4MifR^xa_r&*^ݩ,kO}J5'ojlMؓ; XEY$TC+^D.]+++n\FUۓKK<σy R j@r7`$y"\$FX"i=W1O۳5'9Ɂ&6 `I^&rATHOԏ`X*poJ֨4 *i UCDZUir>WWX1ZkjT*G#%l9gI!m0*}_"U|6W_< (^QJc ZD_N_.5ML9jg xY[4|N?Gg /A[9r gg}dlq2pmuP֫Pgkc;p4/yH,6c ϢUpa%r B!uHRB`YVm⇝nʺ  T0!FUB;w %.|M\Uy,а|7 òp(Moepx^^W-aN&} Eס+r%w}FJyRlp玓CX&`.5LeE:n]{ c ;s^cZWos\/'9)$7agH&IԎԵ/mlZț\Sx3LJ](K`|sF~Qz. jYѰ=lE ''};]<gMcc tp{o`{rўW5`y\Eu EmUU MceqpT`H㹴]4tl__F? GOm?WwvUHt,*&UF6qw暶[Y2G% RrbMN"KS`ʕ>p͛ٶ^_d'6`Ull]s}21K|*2Gb2\ם?@$ *)%pK|3Z8 l\ƵزvlWv:˯h6SGsѭW~~:DJg+%`jRcED~.L&ɹ崠Q  dIOQt`',u8K]SeoƗY.yߵ9@S~O˹⇇ l %/GXobpyZ))5V)RC y%~iHGX5~nƆh?^HfK{͟~/;CO<.)㷫ț\o! }+ ҙ$}HDP-[ ;R*51a!.jҮ Ϛ|c6-/|m#=ⶵ{o?9DPUu0W a仑6 0ed2b# h0nf)3+VxJ?{מ㾏%^p.go._yճ*R;'C&"DixBiN4pvaƒ=3ՂuM4YZʟI.k^I2'Ƿ>|/}*u@7;;wvN 5:hО{x?اO0kn7VE+iȆjVqH6u.ss+ P-qpE(c2H糤lqWɑʥz9>neUcAX(sQn~?$lشp +(UtI.vE[m[5)-m\R!ZcHDk/hvѕ;‰b4c}mɝ`]*up vQ֘:L’61JQRUV.XPM!GOђh|6,>w˯s몫WX2e!@uYpIi`H)O#'!|6Ä_" ێ#|~'mXܱZ6&1/z[.P* r=.auS= bbںZ8Oh*FR# >W}u<{eF~f=_y7ϩtwK`*u1הnƺ86xcq3uhVhPZQ(AƃF+s2#fTgUΦ亥g h$@"{+;;aqxE$=xjjV`s𔋫\D7)`xv!!O!iXNku#=T1VEL""q 7_n\Zօ96tx!'7"&3F3ś,۲?|=Bpiz@t1t CvtwЛ{lQ(_)hmXʚE ' ѓу_k>4᧿5 qhwڕ}[*@bdҡex0vq& y+u0LAqB1=D|TG8ɗǻxO}gv\7BuVXf D s}b"޵ 4#`E n467O{Xpݥ )MUU@w_>G/kԀ|Ng.󩷙H4x#$IF8X0>6t?.Nwo2m~#)8Z9-;9JE. phMK]3GSP*)P˧ͲE,N01hb j /XNnhSd\}8LHq}\v5Uxг&@\grCbYĂ!ߤ3Qjhjbтܰ2}\Y{]Ϯ V&.oWM mx+*w1LZxI'#?1K`p7k.ƟK('v/|}q¡(ů>>Yy'{?+F9ƙJ 5yJ D?`%B1("TGℌ(tvVuLLBb46*w\H?N6contB}/l@u$AדxN]TL߫DͿ^s}_ne/oֻԢ/|e;f] ^܀7=\pUx6Hx㉣/C|xbY=:Sq^@ғ^>ٓ%X uj??u2d╬=6png}we&VgOYi P-nҐmٮZ1r%@JY<$8x:eUא ArX7״__S[[>E|"^OqeU|}Wk?6^>Z/"K}3K c!¶M,abS;8CY , 6-znbeq>_y?^%ר⭷ aeoL^&- @446x"7dXm[Ca?̓`SAb+bڣyS=uuu֫8R[ѶqGF_e,ڴ{xI;}=ᵔyv&*&=WpMZ?QS!XmF03R&ŸIp<3{dhG׈¤L5^ ~{{[?t>~OUSL\Tz&pMy㇇ J9;uhFI40Gd0ޓ=3^ŒWs[B+#53{plc6ːi[baʒo,J= ?ضxF?dq=YCv,L/ΘâEرc m۹K95x{NÇ`\= 6}]x*`=VpΜh {sHSlZ^1Zb:64i*Ŵ.heȾbJ \He] >i/K^E蔁)UvoOuZk*Ofdf!}>7ú̹$U.}]4c1$)UrPWRcqPeuj +15?F# ӓRa(Y<&@( x6~9v;Ɵa%C:"/ظi#?z'\ҵs>BdϞ=cmۢ@;daH39{?'rO oPeʧCw*Uŷq976RVuEdKy"B0Ya aQbW~{ q;¾,{=4y̮Op|a*;Us}b%c1U ilBDI%Sy#lI%qRJ\ўts=΍w^l9*zO)v[d< jLq}Tcc)YNF x- Tk{{-.6.XEm'Ӎͫs^>@O?Əjϸi%r˒+ޱ 89X$B(s"O< O9h|6U0^AZ&o|gl'uwd}cZӴVH$&U鍦(0f߳lD1?5x!&LYm$f˱XQΒڅ;1ZV oZX#'G:n[~ Q+RީZbVyI4CD6& )R!r{7_׬kFuWt:9aj3b% t{>)ܹFwnYXָ]|dQ+otC?cOkZНwctDOjVբ)Y޶݇'"NJ0 p8 twwH__ =YXPNM.mIDATٹs'&-qv%b =zK7^֭[qVKsMh (}aUH)њ\j\JH+?*M!4,5ؾd9Wld$9L6âNPKCŮ]j5ܽV.b}g]s}800|2߶n@[J'lNát6ȫ40 cyDցp"S%C~a(%Ѳ*>؄T(%O_҅q 3N2,lϕ#%('{$ԍd !p]!yrF̚WԼH$ 7CMM.YE@j Ջ?lv͌,;!#dr*u]rg> ̌pGyÆswW$r92M. 2Ct1&XدU*xL/NMXa)b, v:F/v]}~{{.ܸa#P(cJ{X,^uhUySFYx ƈ6$ y޴؂SzS/OǙdsviHRHd\ % JL$ @q8Arll&5>gբFTn ci?p-ZB,~?L̊NTo RrI{Aߍ5.FGZ1?1#tF`K[UJ1 if!S̓{D(8-A$Q}Jg(U|%Ab[!lB Ifаx`7@Bs#\Oow(*/^oڠ]{c 9ã~`(TO*Qw-_՜Yk50ӎ{9wZ7"9ԒT2WEfԧ*K YX9g-˪hGq*d&i.Oa9W3Yثj#N@UM7gړ sUI KӻPB D`hr3)5>M/D0$ H7|}րc% -0ZsV)ɹs NnLU9BɾͫXY׎ ^X-%I\q\-'z3({vGDtzn[qυ` wkضM:!bign zs7L?sb.6ʰXߞӈ Yӣ%RţYE߹hV;)>&2 uHk#5@nFkvpi^w<Cn2ʩR>pIcd2_~}]¾'8; +ڗ9h1LbZ_c0hl6-!aqM1䦊7KkZHjilL8~gPKPK1JH=c - }S&UR 6d\b$ y֭0\7re A B F윳4 -HgҌ 36ڛ*׻TJ?#\T/>2d$暎Jw`Ȭ}L1=K;>K.=Xs?xǟٟ.[nu]~i|I}jxov/ :Y$m:QHrBUÜx5Zk2N'"k;x~cM&WL3U3?k5SPDl_XC[BEYCij#U<(\{lݺ5r ?0555,Y[BUUUϥV<(ͺkxܦ%ź1^Q"h'B#@y8Y!<4 +Omy{ƒ<<PC@ܩ6ש\eՃ~i +Y׸!NJ`~TUW wCMM Hhooqb .$Fټy3{8% }9gα8^.F4B!@ SUUE6CJA(dLohw14ITUU3gLxQ;R7ЗyKOpm5 1NZwaksg1#&4w+a[{(9\hc:=6 7kqˮ[C4]ʚ[/AiI6Z}Ma~d?Z3,A:Dn\|lf}}#\\D5֒dR ,"JRWWG'|ǨԜ@vǚ8WpQHv=:\̹\eEK̙V,_drGM 47,d^%!VЉ66a|SC5El[gE= n۳P˚hƋ/bljs gܿ ;#S +V~Ô8yN2cR!|G;L`eaB.#џͅ:wjQ1N}$6g@t EOԞ|BFyu7ء`nIF>;Od1~,a5!^\,b,|=7EX r[F|c"3]ȧBc v$_H"V\ɮSઙo:(}b&7%fFWD G_]AénY[$t@Jɍdn;vΜhXd,Oߎ,޼oCn-~;lu-hN=NHXb/ Zx]4~Te6Q]_KbH0 d$ |*sTFGq3߽~o?ś'{l?7ֿˍS,2ȧO (YUfdꀔ7ZT=?aW6k^NY Zoޮ3G&08|/pֺm=;}?0 Z4sƫbe<7?,[A~O1tFx>;*_jHg2T.~j0]x[-&G^܋M7Hiw>y/~Kr9[{+Wy'm;6O Y4#}"iAu֫Wеo 5H@dn zyuV` qȺ9NtNLukZH.)M0T6CU Zs&<jndhtz>ĹOg _޾üh<~lg;'{mpꕲ{v_>oKYv~ȋKc㳚?7dfT*I$&`Sh˧„s-zXW(u*fq>y%$x+ǃϕ}n{5|O?aj%<~d۹wl.nx٣O^!jce S};q` # F,,56)" [GNfhj(3!ij^Aystl0èZ s,asnslη{W_" uDX|U]WUvXkǻ*E(" G$hp$J("4~^/*|ّ4%Dq=ȍy/ E\uñ|0gJ"=!=O1n%r0\eYnp]zPa8!pRͯl'2ƯP낲NH#¿Pݒ y0Z4aW{k٦g.[h- S^<\4DH0) eGCfM4vMt'&lz[,*q8a8kPE>9BӊbB |7\FUJҏtJïdFB ceZMJ SDi?aX8R%4R >@'m6Ji6LsƲ4.4iiElP>sMWZv؎Ω QtR;n0 H!1|.O6/A)]RPUP J$UIa°@inPY 4lpABRʸeYl]BH#!EO"%4h&9[b5f D^f8P]o`|#w|'~>4LƱgz6R]B6PZ ZJ9} ;oXU iڏ1i)Pi<ĉI &|p[Yf}|ꓟ0qzSJLYb35Bo䷄-W#P=TKI}If^ǧ@nݜ-ROW[>}aP M2p w~*w*)Wn{ 0AA2rNdyZ*U}gKgSMJ$u'=3Etm&Jc:6 P`ڲ喣A˲=4$WnY=MC{Y{X/w:r+i^՛ɕdNjK˺iz~eRzq2zQZL +EOS5ic4F9+;*ύghl}XYT0ry'bsZԢśŢQɍf?EL#^;c[ea›^[[[P+ư7i~dzsP [ɶ|u!V`EQz_ :fŊb3vk+9""pUThRK9?RE*H*r~5"o0fʑHE \C;'̙HYnryեzfa18*U9q==VS-sAV"L*HE*RT"HE*RT"(f5dIENDB`qtemu-2.0~alpha1/help/dynamic/usb.html0000644000175000017500000000045311043665447017670 0ustar fboudrafboudra

USB Online help

qtemu-2.0~alpha1/help/dynamic/cd.png0000644000175000017500000004524711043665447017317 0ustar fboudrafboudraPNG  IHDR<qsRGBbKGD pHYs88n+!tIME33,H IDATxydWy~.wOwϪf4Z0[E$l8& $x Ǐbg0Il6 G+bc@ Bh饺{EZOjj{zrygCsr[~M?{Zoԛ0 kyU"@)H${{[:Lp#^"oި5w &@3Š[BfW'yC)A$2-H'~~ks,~Xο7k_DIa+n CXVBT*>jyG<(&`0XCq#RQ8J$)H VՀzP 0 Td% E ,d']GPG(KXkhI~/z&ѣPuRq9UCcy`P E." !GB3O  ^=Lsǖqjv BPB}7> TY{G 4Sk/&("(JAaJ3>|(X!rPQQ)/%_< ^|wZ'Kɻbj]HSgbUO sk`b, " <"x3-tX<"{Ѡr_*C0wb A(9|Ghbd/bcg?^R6_TĖ6И !,e' @J'uSvAx*qAeDzAXvbm-tW[~oxUWzv >.XJ_cXcP1 -3e$!Qdf2sb9t0AJ)}d__~b]Kwt5a/i>჈`ir/`g+D Hd?r?bb-Sz;@}!WO. JZf嘭EBZ oEteעu08ާ(rFw=̈(n=oԹ\1zT=Zk7';9y4 +n6 [l0c*PBXA-3ÜYVi Jº4T uJ5ߏq߷C}97>o4Ul6>O+w@%$[!Ere?WN nB.OZ]83]ĺZTFmvN[YAg *BkBI\|_i,ls-᫠3wjVA㢡0]s'KJ'9&R㜇KÚdYQ{.71>؅a֬bջ\+6\&R_{T͟ˎm‚p6E;r(=bXb]1:ޔd!Yƅ"_@eV Ip~ݟOm !6uOTBu%8 &G\x^PwE.kI&Q޲,k1q cmTgT8~PF3aϾms{rG/]ۮHKKbG[cz˹MnT T&k<1^-  Xd>ZxݠAUXo8=qz7hnyU7އ>s@9XE1rrO W; œ"Ȱe,+Q*ewVM\hO0A|ْ/jTg|C_yz˟miL~D ˬ9STE6fqfKi=\;qO2 "aО侖o0<]LN7mS=W?;ߌei]o}ύ:pB[Fpf, s X!,:Qo+1 *7=?O&3ן0YU[Y3veF*iJTؾ t+/n<(4iRifYY/uس  &b6sXζlP!O칬="SaoYJ3p5`Yܱu?:u .P ٷ~tLC2'`zj,p.]bG-c Nn#R?.7! `m*Q"PaⱠ2۲DͻOAX猱,-ؽc R1u˯6r%Rn9 Q`*# *"ۻDć>3 g D}5T߆cUUpE kǮuJ *3Vru]X;¤{ Pb-@ƴ6SsTTP9@o$^q;7n?c#P(jƳLTx(,Gse Vο re9Q*7WI8e4"7H-{=ɜnh (f}baIƳ7Zblu}P<1nŪ'$frt'GE'%ao.9 SvC.UTΏ~P5ѿ^O>gQ/xK4*XVCBE3.k14ݮ 3n0 i*zb~eF6hf+.ʄ2[?û0Xj0(izz|_1mJT *7匔Rjp6*Zf<NVA.YkTL%r`IR]B5YG4rmpD8i %%Q6ۃ D+jFW0Nq$I0L+Jh4bXB_ q$i)i*<~Xg]- !2}vA>k*.W#SJPW m :ΙCm'kx,cضcjND˿|fB}Z+>Q^/ s'JrX@o'G'kzh4VuCYlSv0 A$J%@I~? !V՞gZw ~^-i rwLMn*4 c@eߙ##ƵPWN3R Lvz'u qVjༀpo 'Wh 8ƅ444I- MDJT̵gJ5n4iLZ  }VkuϞ=sakeAno;tVk3K~^[5hLөZU\! CT*Vިǽ^?W!$jT\!FW aRLYz'{"O/<!}l-mPZÈ+wR͓+Qo% C27g/+++n߾dToxN򕯜ksN8`@G_}G=<}{1&vԏ)!BA|jUΝXbH)8AE~vyhP +p+?v-ր3"p7 sn{"^z^20QB-3@ H)uI1 a [δZ?-ɟΒfJ97w9o@@bCk-ID6ɭC PY8V T&L'==X|u5"55_ymLiZX?׾~i`䩕i *y0 ERYLU ĪTVҀkU;p=u Dyéa4 e@eBfn]j)jNc,f.}_5MD aS1R!傊/8lS;_R/!ƚ3O!LmIm@iP 5K[: y"Z@Tb@5*GDtjuP?Ow:\ON8-n7$"9pE8&ŀ`f$`bX l ꂀʶhNVOg7^W8[P*Ԏ;!JfE)%MJRW`21`rCEQ%Ľ&89m#HWJxgAQU5!|Vُf5z)1A9VC-!VWQCZU㲉r0{^r ' M!Q2.1UZ4։'zN3VEQ2;;s I$,bkt+i1KJ()c ܁KR-w\G9}ȯEVMZZCT(}T{r}tB" pzL3Pَ|wyޕLzs *ۂ jRFgŸ(yŅ' * q`2 4t۵kW)3 x۶m $I ǾP,~)m.V6?*1SC񁕲U),cFJ65;xA xqJ@a*JqP׼&N6Uo|+ *J< PI1Y  dyDL@PT[N t{yh`W2K?V7 j*׽uSg,@/o(l4Yl>dI I6zKܒ ҀM)=J{n+KgcT=*(%6/𳍙eW@w͌!-$I|7y| 7\y7ߴAPy/yK=y{˅NJ2]< #  $(R$ق̀9))Y+ {0!Y)8~Ow|J QOcǽӆ{ ()C˄j-% -4>Zo >\AXrZ(@Ϧ"U5r6@.9ki̤8TB A;Ft{+5,yр %[B?!,* i=@mۖ;ΤR*pfff=Gw=윙^Vj}fffi\I)E|(GvӬ Fg! Ƃp4SfnYdW`w7-/xĈ%1T^|2YWW04Mmè\jsKKKp;pun7tS8`n馰\'>Ie~d-PI))MS :T OY+5t8$4[ev}Y|A=~3C *O,q_rޟ@TPVi\C;KLOOwݮ[Ywxqww6]0o|=x;l6wA0$I:==v͵4^zBw@xa6B=2iPYV󕲫NeE>*zqBp?cJvGaaq&8J.fPa$Ms2"Si1"+-\{ȑ#ڵ (T&!‰\{JNV/jFt:'֙4i ?V;-2* }ȞP;ࠢ%lZQ_٩U̶S~O%]*aHҸ3j̨q8J.zPJ2SSӻ4 e+}6]vy^f%Y'Dtte7x$txQJZVryWل tOhۣ(i+C\j޽sBCvO'Ir];8gggw<#j+tm (Xt!i;D(0Tڨ4F33TS@kˮp,n- CRA ~pZ_neG ]xZ~0RM䰮y2'ـɀLTgjj}ԩѣG0W''&E$I0 D5͹+1RRǢ~;ʤ T6Ms: ,r΃Ŷ|8wWuw 9} $ ??5wP ˒!WA֨g V!bfEv~R i`f,^|ٺu֭[O)Q~?AZh׮] LHDXŒl j5̇űVˁPW;I bw F#Fs蹣%tԃ]4XWX 5lf2d {s@5VPw;s!! .{TyMZa{aY]]H)=)гCU2Pn*"4|!ޘ yjJ:YcwsbH,qNvoșEM_=R`Znho:rn+QxqvxPf F8@.-.URX0%pmPTqSE{Kܽ"Uv>|_^X}.fp+Q;Wܫ X _!HlaeG(m=ujRUO6 8J)`.wRFD4l=j\_qKvȬ]#LHv/;3 -*g8 0c;2=V XQ?5TktL8~M^7Mv[9QܣTp,1P>Z t:+|ᵢAZ]mM4ժ m p:OV+puunh+܎"-:yWu8T^&AC:ƀ cA*lT\>((nFS[h"gaab;L}Zo9&0G)P+5 TfA 7Qm3ڡACЛ;ǖK0,J(No|[#X4ԟ6V';N\zN/CQrƙ1T8 P67T}㺂Rq RY%J*]F}B6};ۺ\@!X gE@%ʔÖ&)cJpi*Rx(},uVW~-|?Zapܪ%Ep%! #Gfȟ:7:AUȇh |(A[iub$-?QY+LuME m&'U#oEiRMն\v\+ TJ^}[N䚻دGc)O̿<[*ʡ͵ʠ,^0FM #AY&sL!X"Zv%:1I5RߐrU rP&>3E.LۿtUg,=z'!SUɇu茊|à*/L:T[lgAeRrb%@,k9C5 j-SI' C)JajM:8/ɚ ^W| aPFhT8PY |c*|NR>5șʖɂ r挢XW\(ibk,k䴭($@R/qLKHf3wlR!xT9P3u 499~-Lh4`2lWw[BS@ l,kQDn+|N/CF6kUncl;dʯ3qtڠ& @aP9o+$2x7Kluae,8N_=~/Zʹcy mwvp@1OlԐ#-\4K UaaR#:Q.\-֠!8 +wW5[Y3k~,Ca-l.\-e]X'z~i+H(`8۝aQ+7e!ϣ\wI%ʃ@5亻+F^Ti p8QU}ۿQU6OadyOx 6B*lFa-[6»OFo|ԥ nUKB:x` ͵Cd t[z`ej#5Z?_.O4SE.bG+2kOi(Tbiärc\I0W[fw}|T(xWz' . #lGsyWU^RH6saE̢C^Iw—m%׫Δ ZYi/E^^*-AMF0lֳ7Tɞ3~*{߬A) z*n{:(8֍Ʈ`'Y݋RF;˫jkT>O7"}&Y*im"@%rJ5nC* s s U V%$ ,-]??z|تVr&Lupd:߿mjDj訣*^''h|zf(T 5BۋT*W-˗AųQ} ,&tKK_occB o`}+h}uLa%8=0 TŃ1" h ->@ay܊:Z=}fx\j_(Q"]+sՙh@׼K˝YOL #,Vg3)yQ[V+BEawWU! V[Əi:lPm*?#7A0}654XQ/CW0#1 IDATJPJ9rc]EEsehYVBq^l~vn/w#N]lL`Ѩ_Y[[60 wt8ִҬtAM傪F|Pw򛢟+TE8gZR`4(iA;׾puY]h`}ˇ_دNL7"_|3 Ɓ0gưX7qcnrtt]+TWq:CjGƸS0AHb`xnzG7Kb]mf<_G)n=lWw9j4'oH34CɭB'+&R䫑@*MT]~ حr9 \pHNְbva+&cD[;~*fMUX}G^;DVEC˃\ǚ0YSngR[`cv698S5Ge)"ۙL2fc,,/z^\ X\J)|*jM;|*vaiŸ *ZHRqGy QC3n yd(v7Eay!BGN>z/EfԂ"8>AOj7}3;*9Bb,؟==L$՛5[vS_9֍x4: o.Oh4'Y|#2~U['= @UDo` G>[w> |GWG*PJiXY:z\^vO;kX4MnyNwI#MJ6ԙ9֧UIo+Cr;CQBj*GZ-) .%X>n/__w4X+.Nyw#[tNڶ|HPW 8(ďvn@l*רõr_M)Fw9E{>AE_/[/#mdCfLuC߅~{KlLe '>g=Vk'u;|xv<*gr5Pd]RUڂPnU)Iq& #;)$8xo˱\#ϐ@֛~}sS&0}a%eX RJm:P3  YV:@J%N$%0:j7IE01`W -o=}aUoT09ĖSO;w21ժW0V=

Networking Online help

qtemu-2.0~alpha1/help/dynamic/cpu-memory.html0000644000175000017500000000463211044444703021166 0ustar fboudrafboudra

Cpu / Memory Online help

Number of virtual cpus:

This option changes the number of virtual CPUs that qemu or kvm emulates. Currently (version 0.9.1) qemu does not use multithreading, so this does not actually use multiple physical CPUs.

Memory for this Virtual Machine:

You can set qemu or kvm to use any amount of memory from 1 to 1024 megabytes. You can set a higher amount by putting a larger number in the box.
Do not set the virtual machine memory higher than your machine can handle! all running virtual machines plus your host system must be able to run within your available memory.

Enable Virtualization

Enabling this makes qemu or kvm use your processor to directly run the host operating system, bypassing processor emulation. This usually will result in a large speed up.

If you are using kvm, this enables full virtualization. In qemu this option enables partial virtualization using kqemu. Additional configuration of your system is required for either of these solutions to be available to you, but usually installing your system's kvm package and setting QtEmu to use it is all that is required. more help for this can be found in your distribution's documentation.

Enable Local Time

Setting this option allows your virtual machine to use your host system's hardware clock, instead of an emulated clock. This will result in a more accurate clock in your virtual machine.

Change your Operating System prefrences

Here you can select which operating system you are using in your virtual machine. Selecting the correct operating system will allow QtEmu to use faster drivers for networking, and possibly hard disk as well. Whether or not qtemu is able to use these accelerated drivers is dependant on two things. First, you must be using KVM. Second, you must be usnig a supported operating system. So far, KVM supports Linux and Windows XP/2000/Vista for accelerated networking, and Linux only for accelerated hard disk access.

qtemu-2.0~alpha1/help/wizard_2.png0000644000175000017500000003713710753140477017023 0ustar fboudrafboudraPNG  IHDRPv{bKGD pHYs  tIME    IDATxy|Tϝ5,a dQD- WZąUkTj>}PEPTܐE5Ȗ@ }d$@u_{fs=DDDDDDDDDDDDD$\PHq`Ո&кfEDH.NbAƄ%#fxZbyhl9fnkoqBb)Ps4"O4W2\֨PS4޲b•{=GJf[N7f40X_E')[! 1NL o a3t| Wo{6ͮb,b0ļތɣzϩ5Qw2fUZ9r%gvWMl1Mp8Lcq`jRsDӇ6d4rHYKvt4;3['/)c mX՛r;`Y$%%Dq9\YӸ@ 2[u 95Xvq1TӓIIM")A(`r?%eX7ime[+M2iirC$lp 09@A<H˲Սe7E6Yuyl]tFy1aZG~M?aU^p=6?_sY<礷¥>^w?Қ^xtdw>W˯}Xw=e[^#ʉ]'c3c¬&̘wClT8PaN$b8Xcr$9"H3s: 2ӓVn0"-k|@kn:]l/3cvVn+'-oMN͠˿<=Z哗v%;sfbWnL$^?_n-EN-7h[_؁k}Cjq{޹wիy6}Z2,76;KӲk#s HXKOoM緣}}!|‘/ 2=0N֚ϟl#䆟vRM{_Eh [pKx 7S5WoǍo[4XNCꞙNϬ5[PK8hgш\n(SFRgw)[Qp8DJJ E'-/vm/g)9}pgǖ.;;[Vcf>TqH6X_UĴ#']#Z xlݵ.Z[ʍV}'3k*|hEW~씞p[kWž,73@[G9jsvdB??ؚEwPQi%]c>ĻsPtMٺ@tjkG Z*K0_r̍|տ4: ֨I0YW_97X+lkԔQ1Y\:Gu넝[zhF}=4fIqip0M ӴMLvIqݻ2*++q\UE73% ðcw'___+-~>s \%4=!rӽ]&,O Β2/wV{8K²6]ܴ~x?մ`ppɝp[k 1-3{#6qfvY`\I?̋ġ1=>oT.ᅲh6m,އ-C*CCؒ EC{X*ZmκWn6G󎤇VSVƖs yC¬n 1aei A:<oaO Ix0 =n22 22=;lA;Xa3Lvv6<" vg';6Na vO&I-;`wWӟ^7νrB.ےg^{2C$ w8q^,Z$0jPz˵=O&+%zϪ!Ѷy9g;2<<<}Ӵ]سbU~b:+7f[AP=}n9᲏pL?ӓNed_kUN:^Lz1ߧQoF=@9/OU sw1V4f5hFnfD#FplXp?W!PۍiU 5۽Rm]d\v,S+lv'_l2о%s;r/q>8@h:@0eY`C&f2|[e ia8z˥N @dc7]#ᶾq,Ͽ·漾Y_?D;VٵT|;s&WBZjŊB/T3+ 5*ڡ&Twޣ _9F<^_9/G}S;3sوɎfc[\vpnI("Sni!++ >\yO?T m*d]\<+gtKaOً7-.zǜ/}M:/ϣbk9~3q8ksWcip[Kx42nYfwaWљܚ;d?cfkIzv:ov6_;+`.݆Qu\ Iy+vsn^]9Wξ2-]ENDK<+pqy#7S> 5PN0/fmen;t9Ci8bì& 56;ql]FN ]2q:v9WbYA/?!ݱv BTVVR8Ӣ߼3%@L3ކ3`p־/6-_'mp&E ѾjQNe{2ϯ߰֝Sb~ucml9{Xޢ_Jac~[gU/\{3c{h6ڧB(c&iiit 8NڷocΡ lRؓ10 #v=p$gV/1p=xU`8l8S[ceG]v{zPm9U=aYF̄wZkHrk)lݝݕw[CוLfwގӅmwZR`\`vlawaت\ :}UMCK|*9WUeCY8=2~CrvaUq'aY9\}nkn#m%HԎ'gG"v嗺jv$L4٣uā(i9Hj֠É_p9YEDb[~&m؈;5a4rh+,V ;:1ˣ#UDs6l4("r,2rrrp\$%%]\.999eDDD"^/H-PRRBvv6IIIL$ ۪PHعs'7n$%%01+\~6nH-xb3˿)&=+ˎanpذ۫ӴMH8B8lV-0e\vmA˖-رctH)..4M4M%/wy';wlzuvkFޒiZ VV<`zcB@R/`H$B(b߾}{RTT$@k?yꩧꪫy'ϿkhтnݺQPP@0dʔ)dddĉz ꫯ8p8dgg [ ##{o(5lGEZZZt6mSN8k~„ 3df̘Aff&}Qmz=$&M`{'jp8̴ihѢ7IXs=;0Xr%Fbʕ OTXg}6O<C i+4~huVs-OhD}ݴj ˲;v,}cԨQqˮxIޫD/k֬7?r? %{+W\Wun,^fUV A;iD"&6-zurr2n˅"33:ݻwosa̘1̞=l^xfϞMZZƍgϞddd}< w^V\IRR@{3gd"\r  ?d;v?̞=;3sҫW/f̘?M7TkcڴikŲYouӺuk}]y W^{픕7qƌCIIIº,X:?L4M65XO~ǢΛ7^zrw7XeY|駴i&ZF=ڴis@uGO?ƍOzl߾UV裏&"Nt?>n/]#Fk 9NC wh2d ӎafP} FV(wR/k3e˖E5SnZ999ӷoC4iG~8q"vT֭[GFFFosYgg.h7ڵqѷowwAAAA@سgO]wݻw`رm߿?m֧$Nv)S֭nN'PuMLF÷C-Q5!TZn @zz: u-пeԭ[HD>l6^z%9y' Bq%ѱ_^}q3apر chI0 V =BUTd4#LӌdՄX(cO k?{xbF j_~7vl6WiqAV^p N']vUmۖ%K0}t:N'?o믿;,ZO[o)..m۶<?7rW套^jT}:,X@>}4oop[)SXx1FbĈ Zs\l޼Gy_s= ҦMFSO=E^^/bg}lIYpߋ#yGի9ݻ7> .F'joꢋ.:i 9vvThNÎaT 9R}aubP0Lafa2  J۶m@_ I~ 3[BL-X8-х58%""} 69o7sÕTu!t:pmU=hE#ꋬfD}a 8kGA8?B!L? in{@iV9fe*,u㨞hZpc0&wG[ä؉DLz `0&4)DDDeY#&iŀYacbU5[24M"f3!1f";>" -K|>ڷoOrrrtzh""Ҥ0maa@2US#57J 3-bb즅aD`U/]uACZZWrѩS#͜MDD:sYl˖-# UÊNAB$!R}mYsN tڕ>{k.RdO2.P(D0h""ҴRRRK)//' QXX֭[ڵ+iiiƽpee%t҅[C En&&sNoXeZtԉ h""rlvػw/a0~xv;ݻ˲HJJޫK۶mӧ>nä5+-[$ b B꾝 4fhdee,-- OYYYU;FofwEB!BPn45נT1ѱcGϟOii)999ѻ8G4 È^V^^ή]Xhݺu=ޘX&""njaĈ|'iӆl<. {nvAyy9~:NVk"I5KJJp8~q@iڴi5\ömشi7njftA>}ի;wwy'bAO4iݺ5ڵSȱvݻ7|>_Ý5Ï;v\ IDATދ 555'h""rLARRIII^'--Sl:LDDD&""@Q(DDD&""@Q(DDDvz̙3պ""'3gҫWfYcrÇGw\DDNzbᔖVZZʙgəgw_D$ tMDDN 4Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4Q8U/_NAABDNY=zW a6x`5VX 5D'?CDNY̙3Gh:&""'(Ў֭[bҥڵ+4LAA]tQ֭[ǤItԈ(j돦ǬYtԈ(jܹ3۷O>7nW_}5]vvb͚5\qL4Ç3o<&Ö#7oi2}t*ƌç~ ֭ofʕs9z뭌=sl2O}A裏'|G}TGH;^xyca٘7ofb~fϞƍkXr%@ & p8x7(//ꫯnzz袋?~|:ŋ3uTYh<-zIVVV ~a^/dggзo_ àM6˅i&\.:u:&x$0GϞ=|<X@QQmڴ9fNVV%%%|^3uT}YyJRR>-C.]`ذaxf'Lӊ߫[+VmfcQ@;J:t0n8j.2vE^^~)wq=tM >z+Zƀ^o&cǎ ??q1p@Ν @(nK/eذa]+Wr0~xH^^]w "///ڳ:u*#Gd|Gl2OǠAs7/_̸q8qbzwЁ{ ?>_~yu? . /uϨQ3f Ceǎw^W\֭[7ʕ+9s[=ztxmӘo;>+'G'4P3M w:MW&3#(?h9w?β{Y f1)dݺudggN^^6y1k,&L@YY3f`͚5|>~m7n\nzmذ}rJ^/K,QF1~x^cƍL:O^^֭/'??ѣ0ao&EQVVƘ1c㏣[lY:h駟fر~q]s]E]Ē%KxyGXx1/o˘1cx׸e$Z'##wyF^^?߿?edɒZC,Vjj*?<^.mq5j?Dŋ:u*,ZHr,ޤH"bhawZ! G,yi O!d ;*ߓ2h| ƍ# ~a^/dggJ2 pN:5iV\k Aff&Po6N;ݻwGR à]vrp\|>֯_W_}=rjm0ӧO믿71Çz7￟@ @˖-rJJJ>`Ϟ=S^^<를6mt:kX={D6Dm6뮻a…l7%#2-a ZrA0l ^ɐ!=YUB aZuqT(ԜC /Я_?&Ô n\>hӦ1nL=zfz6oLvymz/K z衇ʢ$bd̙ >o10\Νٶm/ĉ{8HMMmp_38SorilٲZ=B#/RD"N}mQZ$b6%rTsîPˢ`G>Z}{)~(ЎaÆCm6xQFF^jmTVV2yd222kot:޽;;wNXZ5=غL6 4j /{w-[g<ƍcҥ\r%V56=zhp?׬Y阓}xm/ҹsg&OLrr2w*'4U_NJMصC|+H?E*(ٱ DH ӽcIhF e%~.N=i_~SeذaXCHDLII sIx/-BEEš_h?.g𰞼pS&tc> ]arTO`%-C\//YYY x7136(þK)\4A ^Ke> P`Vr{h:ʏUVq=p})Dq-Ѥ>[j@tξ=<$8I X!5X$''Gh oKDyZ]e?ܽ` 2l|a9~gKﷱi[zbuMDD ApFÆa0J^>^oa 4i=~XglhŒDDL"KC&XI&---ap)DD~;A:Vl6Nd֣GVXAnnCD9sУG#AՍw2P_3gCD5#Q=(:DDNjȏ7{l.㲽K6jT&""fhҥ-@#U 4fj:8""@Q(DDDh""@Q(DDDh""@Q(DDDh""@Q(DDDh""@Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4(DDDh""" 4(DDDh""" 4(DDDh""" 4(DDDh""" 4(""@Q(DDDh""@Q(DDDh""@Q(DDDh""@Q(DDDh""@Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4Q(DDDh""" 4(DDDh""" 4(DDDh""" 4(DDDh""" 4(DDDh""" 4(DDDh""" 4MDDh""" 4MDDh""" 4MDDh""" 4MDDh""" 4MDDD&"" 4MDDD&"" 4MDDD&"" 4MDDD&"" 4MDDD&""@MDDD&""@MDDD&""@MDDD&""@MDDD&""@MDDD&""@QMDDD&""@QMDDD&""@QMDDD&""r9\,_5D=zW6?~J`ذavm 4>MH`ƌ ?ՆG߆5a;僧=z4@ 54 L:@ HoW_Ma6<6?ڰ:_M>eaYQ  m@LT#Pm@QM P&rXFm63F_ȑ#yWv6lmvDaC˖-[ڵ+cǎeȑ8W^w}yp˖-dddd,bΝ\qUٴi }Cicqb߾}y睼[k4Yj1VM'vee%)))ۿΝ OS&OL۶m]o˲cul__ >^xeAN4ZS{w=z4m۶Ų, `РA߿[oNEE3gΤk.Z~a&<~-))){|y׿f֭A~_u9ٽ{7yyy,^Sre~("۶m{H{lC=D.]2eIՆ;w&33˗ӵkLt"!|iҞ_}`o /q5sh5u=F{Ye`C -[0w\6l@YY_kv3|6mD^^2d7x#ڵS0;C=[f퇔]VVG|>n4֭iv BI~~>Uƍo:u*N7Ckm~f͚Evv6'NdȐ!lCc&}W^[oeٲe~釴n?=M?~:cǎ=ڰfwNff&+Vn+ޱd&r ~:z׫W/n&<seiF&r.RJ&OL֭,kײj*7;|pȉ{ɧ~UW]-gϞ|>~E_y擮vYp!۶m#//r7ӱcC[oZZ{!??vמeqөS'|A?4mX}nNJ-Wcɲ,xOrbÇ/;ТE ƏϴiӰ'@S>̎/K-x'2e .p8رcO{ )..&999eY3˗3aRRR6mcƌ/k%%%ݻsWкtߏeY|ڵ:ukdffresC9^{֜կ~ų>o~{챓 c,ݛΝ;SQQ=K;vC\wun~h;|  `niK&Ng],O\9f^~en ax &M6ڙӧO~oi |~@B =B=P:˘H#)!.a#l Oؖ裟^w=P?p zեg_ gIb6["a~-"a~-#ymqfVՃtMZݘ7Myh#{聗?{p[<-~[~b^{Iw/G߭+W'rKe->zJ}'־]>yYm{ѶMwݭmgW~A?vm菎G#_߽CON=.I 7)IƟvly>%;?)I_o#1ڒ{=眙VI]7^?@4M4&LegϜЮї%I.}P__zFf69UD/}W龻ף}𗯯KK$im4ҥGB/z[6٭_3宽·?zy=Oj_˟{/vV$п_-I̟9cnf&'a}=\=(t 4~PW?+_LOZ}v~.>_ښpM]m:s Om裏]֯7C~^{]/huE={_zrNyn{==ėuK߿?l,o4]:Wgh)Ϗxe?jջ{ğe֛a~8+PzMR{Ƴ閻tߡޫ{Z t[Y}vuW{+g>֝~}:Hk#w]}_q>[?y=cΗy^?uY[Ү;tc_ݻ.lXR_XGo_i++3za^,X`i z;О6oެѺ(O>4zznوݣO=~O>+>nڍ|F3G8q7~7J\fo-^w~F#~%'l$#}'=,P썅˰ӎѓ׭kOke媖uʟ빧Ѧ;ܯeI/街LOJ8?_yGiO(zd|~zKs죏7ywWW>[mlUqi隴|@m+;~JoIO͑0Kr&=خ]<^=S;xHK_3Nm]O}h5ض۩>%}Kz^}ܡ 7m$ݱ{~mڹGH/%~Ohfvza6/ EǾYN=:w]erZorOo&}|'~YOmdH6?W !܋xF+P=ͼmݮ;ѵӖGޣ-i@>{H?}9o[^rhm~>|qcoꍿ?uV7>|h`vM_?ozFڗ룏<?V~ܙjJ~|o23mze|}4O|ҭ6W}Z?ыw=m󊍟oyhi ݷ6mڤFi洸foQ3Ycz~mVzou?g>tms$̇.Izu9kOOמ~*4MGl<` |oǴ3bϝޯΛ03zeQI_('i\gD;^V~p_o{ִz jJ[ofl߽۶֝gWiS66~׋7o֗?$1N~?`&'_Y}y'qWB|ROr3'_WIs.yPV>[/_cK/̎9Y/ IGxM9u6M/o~嶗߼/e'hu/WM['J93է>]jiwivӖoU+uÏڵkZ~Bի3j띯U7m^o r^Wy>[nW3cү{BWЪޣ酧7PHotlݹ}m޹gk{ mڶkcPmNh\'\|8ڼsO-q +/}lgjYew7pf~~>sss|2&e,Bylh{jo**!`a3ZtANi䉣V% %H6\"*iyY$K?zn@M}Gy Vb [ ====@@@@o&o.gEO})gel7i٪ZO-̺֯L[m7fUn6oQXV۬ʾjt9^T[!u }tg Ocr&k>q̛ +in=tXH;iʮ_u者'UhamEݷԹZg}9>`Ri蛀 }[4|>8ǢtYVR]4V`Z(Z65̻l˫oAM۩m} k`5Za캵%(UYe;mov7Mށ:k>Ier}^]gUղ Giە%Z6o'IhgMߦ;g~>CrujǴ9{-cyuyD[ڪK\E9n{dŴPܧ+Vsi.Tߴo{?N]6'T}i-2bBL+I'ej>V:Ӽ+T>ʪ͡=֖ЖmP!ٴ~ZGb>p[W{ CtWB}i >\i U- 9)( fH} Ts+( 6iݨl t$`~V(dt}d[TguvEe=x|umuߡ(] %P7Q*&kA0iKYORhy>/TNj|; Oy~T/(om:˞,8mOKzIoRuXez>ƾR/yϊ˴UѢ]_s&o]/]ŅSZw۾n4&! $@@@$p>-񡙆iiiiiaR~֓{#Z8w^p-_ xQIV$]?K_PIw {+OdͷUz>K@$<<z{/HqZ=li\DzӦj'eg;yvr}A_ mВ.iY}zP^r8eug;.m ~B;94{mێQz[8QșJk&BI(@ֶ`^.:Y>'Xnwy$֣6OV{;o2PYNVEdw&V>r(2W:o߃H.a>mW._ɺNӶ0o!ݢunˮ}SGe1kI+ڇ.}#yeZ?yeJ=<.D!eʼ땿=f bbߴ~\XJu񓝪k9|o"؇JNcq@:}dWͶ:f}Ӗ$²~kd)} _7 rt벷i~4m.Ff>H$wu5qV(JB&uP_wX=QWo[!:wpKYORhy>/,2Ai.-HivY^yXnuc]arIj˰Z.#ԳeMhS3]}/2}9i|Z]Ca3ZtANi䉣V% %H6\"*iyY$K?}SW@nFhM ~*Ύ7>q`+En* @U4ڭdzcde̖eZy r*tΰ4ۨrN[H'mP]2)&*Gm2Իj{U5&,n(gևƚ&I*y(5\e}e+m .evYw໾eM]Wz-iYۢ}6vs;DoYlZ^gk~ncq'ܤ/U2Ty`z&-;~5mVrXl0侮XU6݊ <$<<#'mĥmLT\IuҨԡvwmeۑeyXUd>6f︄hg{v/]ŅSZ/T*lzW^AJok' ߐmg[N 0e~Pnsr@:諾ͦYP:ua~PzM!7*4>dDžKy8)wߢa'CGpNGm?KtqO8*iUPҊkϕg)㮝ǟgMҺOUEhF!nVjJIA 2cXM3KCe>dKYZ!?۴=|}uw2Mo6ex귩!h~Rx53Uu,MX.v.~Df" &i[x:Y ۔^M%m !7 |QfJ]0CwڨvdMW/0v*F`Y_)%mi~I}W*sV2uՉzs#o٦>=oyۢ[m.g?NZUZ탾uU&Y;֡egՃխUǧ7n/o(s|ozܲ'N.e*sZ}k=ǏW/( IDATyO.DrsCi '\Ϫ]r&ӥ-/+u^ VN%mХn짮4~갊}0ƫM?l|MI]巜?WkyΧ#C}յ+iWClM/xTiL[_r5<>^зL`U.>XOUӲ= vr\a`Ϻ)0PFCڦ.m,vTmU?a']dH-iPbgBYgz)?I=xxx-;%n\FbHIiWfZ\:ɫP^7Jړ.#T]ym̺=[wteF(OW]em K;妊cku,A+=Wч=ZeEkViN,>Y%.iM}چU;t)zٺnRGedW״mAK+̻zٝ}+b,y/*,g ]ʜ5OXIR=.4oi˪[-j>-@z)?I=xxx-;Q[h]\8œ'JZ4"seYguY.i4lS@{===0-Epz(ߡ,ne7u^un2˲j`x_*ǔ 4qM4`&ɷ.)[2\P@->~k/)XCݬj>Y6R|M'HIgRCu >A%LwEcha4'yPiO*Ox@cy] tYS9}0"A6\uDt8[ݖ0_vߺh|,+a7o @r9DF.CV5P[ eqZ][oS_gӧ򳞤ރ¹:}l8/]ŅSZU    MaC-W˳,sVeu9eJ1g }Re0I/<ɨѿ;IZՋS ,w>rDn(Vn++[5el-G LP v..>!iU.@RXND ʖǪsI'yl^,2>|P5kweYKR ]/g=I:su>j p-_ xQIV$]?K_YGYVe밊c]!X@> XzouVNHrƕ-˺q,/k&0Eמ}Ȳ\/eecieϾ0l, }`6nza2TEW6(UYOO=i?յ^V9+fìúͻEt$']9kSg)IzuO/ݭ_˲NJI;/+k&+: |3H{sY~u ʻzyzUڊ{ho]m[Om/!\L;d:׫:̻?1:r'}^z4Mz9|J0_30s"mlۘK]opIO FV4cBe몟k~zƓXh/^Yh7k@;R~֓{#Z8w^Kf@#u49:4tmyoa*х6iSxh$PNuY+i)sp*˲.knʖ'mXm겭*r\4iԪ?V}K'|!E擷mBhϖusܩ:[-57GSVmåo]hU3K,3]y,eլW\5Ey\CTM]u]ɪC7>ZZ{hWB}t'lYu'NiwݭxZ|\چoyW tߠhayΫ. ?CV<{ns]XPuMU2ۢhX|K6>W+I ʷө6u?ؾNoqǷEl?ޢ̖N*Ҿ8M`䵝mm<P,t0Ɲ(27Ycv[sJ={>uMclMOXU{)&z)?I=xxx-;߿xSqe2#M,ק}5@RfY>|ANEF`8}G/Yۡq{]3±-_ xQIV$]?K_ )ЯaZ} ̣T$'d@H}@ :H)Џ@qQ'@Z HU갩ֆ\ն_:/׹L1ѳű~ רԙgGh 6Q6.ֽmMruROܛM:aX(B[Nhn.oUd kdeVEp}f|c[|VĬu~˶(SfcQ?>}o5&mxK0Եչ/-WU|ѶQIFV,ۡ[]~f6WG@ZX,EvWӗ9WzXz?mQelmYF}X0[l˓ᶴ媶Y]uhі2ۢiygYe.dzSw|i>PW,˼mڗ{o `e-֏ŷVMoS˶^/nB]>;FS\!zUn+ݗ{ٷiE6l[/# ̣޾MoCDzm\w@ЉVCw㰪.>Ficߗv.sUC|")Z:FCwԬ$M[Ey'k|٧.ԡh:V5:D^]f򸎸2MLZEkm}L=ice|*kg-qUMwjjmd-'rGz(ܠ+>`;#nPĺ:V׋0T@ߑPĺکq/?b!  ʛ[nku;jbiG ޚ*Oh3 ص^h{2z懁i7[n꾪Rh/VӔ)cW8fGhN m;O Xm7R3Jv)qihIl7kevG6D+'-k:y}eyҦq}Kl}3[|eo9M0oў-j|ުouU¥m eWաL8-m,o[~j*/$ȧ-(oeo I HjEڬr|4oGq mEl]~AZ>XT -O]H_2-mhYU}bؗS,2mު~|Ʋ MuKs򳦵Z>\[`bykL9i*׃N$pTۂ6V}ۺh^n˺~\PļOE7]Ena}v_mAh{߅btgFX%|{vbЕ}j,g^,i@7L< d5M@Grپzd2Cmb)^UhA-tYgiv>8=i*ƨgu\OecT]b6Vr]|g'iZ':MV}{o|ރ`>eNZ3U5MS.ֵk{-\Q cUa]#V&n,[]kc>ϺLiMrʾ\zE9*Ng&'5`;@h̴kr ηΡX6WW<zš6vslzY57@V}T١8-_ Sm_ǪǰTZֹzp6I+o۽K[OYˡhM^յ٦wh WɧS]Cijo @Mq지+Fzŗ2i(t;sA@h񦽬W7[\{X!Hy\ٷnʼ-{oyϛ-xZkVz6VۢzeUh=iCUuE+}Kݔ?~lXN?.Y6'daZ][/PFݢx╽>r} kynڧjWQ?m7֟~NEO'}om=`lYoUucV۳>u,ۙEU:ƮMU}^Iu_6pr_w$]h<>'z]PEU'Ǜ&ӄں,7> aеF;}9B}h}mim+-73 (CDHwP?鬹 h_;f^,Ř˶RV!a[PekZOwчbIQn;K4>#*2L}#;=YSejclmcUfhM=BU{n^M Ys?좺m$w6*mbvu'j8o aJե>}º`[n p \z~@jfY|σڏ˲  ylh? cItTgh?qA 렬ޚ2+"ieJ[7-ˢ\"+oͮ責갮zs˶Y٪2)˼7k]Vr,4䰕y_">A2V_uo~ u7>6/r~؉A^05l&#wIep'e>u0ypiRұZ϶ ~}y~ڶh~Zg9\eLc?vboZȏO7CB9;iP-[m3ڵvi?m盯<0如5!VA@oz]&} WiZڲB۸~I>A?vOdV'7Cy+3˲ϲev]Fuw}@еV2N:B/|yh~Ze}!o~~e9zPl@wMShj] n0]{4;PJk@:GMK{]zG^ `4YwP-n@qB8iiiiif I/g=I:su>NG pJ'O*i(iEҵUI&i]h-7@===@@@@4o|TN G}Țh'ty<`B? Y{O2MIT>@ = N/g=I:su>l\I_ pJ'O*i(iEҵUI&i]h5lKel0(nC@ \[+@=Fn^m޹Gdi Ia>Ge/Sl C/3>\OY]r2:zNw936KEVI"oiyhavGIDAT)G0?~ơƟAM/q'9'|"'@Oxg-I҅8eYê^4==0+"yk9p Bvn,>|V|G_*z6Iaぞi iw+iLЏ;q`(R\@|g,e%_x? 'CZ,lp3-GzLa7ia~*&W3^$Go݆@.z)YIWn&{ N7)@fv=FLz@6U$GüRB}>?)P/%0A?GPXqG >: fX>ܳ~?w'p'y yɴptU~T6'zy?{y0݋;-t=!gxwg07C˿+ YK} _E'B=Hdx$4IENDB`qtemu-2.0~alpha1/help/mainwindow.png0000644000175000017500000006526010753140477017454 0ustar fboudrafboudraPNG  IHDRmZbKGD pHYs  tIME  5Y IDATxy|TΚd@TъuBWPEYZЊKqm~*.ucQu"X5]IBX !:~$3LH ~+{sΜ}9      p(<=AX3WD Az0X(xNZ" _N|q2a%A+ to;# ]PjC>{GZnJ}JgaUIm ҏ!'cB͌DaLFP@jC!fϭ=N GR.gIkӉ45ZAPRkdvPl-M 0]zA@-zCǏx~5#K`n9?e,f\"4[0,ퟒ{ZA7viZaK먩h@5^)))B!` MEeKaZfssɟNgNV\>%XS$7rɸcyB6_Tr& 5P8C|' @M C|5n:}̂:ΜgyZ Cs1Ӊ/<V0)DӞҞ砨  _ӴuӴpxN äp:IWqM,žCQm\] k`5~N\IIejtJd7+}EϼoNG'f)_pai$ c߭2 e6 xdob!Φ3繯5Ǵiw9ZtjξYǚ4<EQHHNQHNUtne:}%99Fϡ9²;f /E3zP6UaKQ)(ߕA;p&nz/ TL[`1Hyt=2HJp,UVY xm}A:Km}o'6?cK'W+m.?'8*6a~'7A(",˅iK]d?pΉC&Bnӂ}!6¤SKg)&28A9K\EYWj?fkI' Dv=N|^:-3G\7?-W$Mb`-~VN9s S80}4 ]שUj.ҼRQvZFǶ0t/LJb-O[v<֗0~4U˅ix^|鼹kgg31"F4A.\}/~.^{&gĚ!$^XS^_ex ^&Z53[MM8}ܷ[X@"&=N_:|Ṭ/}A9P.`-ʷ sh;/賷J>_=h iH'6{-i1EA%)ыiAL$))$B'H(pI}}}9@BF6w4+_qLA?! $pU?'5:-0{B2(NLBl+R@UPn2tE<A8=N!I'f{!0{=řC3䤩$Utdoe[C ~aM Jj:WlN\)I7ȿ,4- 7ΦIxM1>;վ$?.A8]z"92҉{+wB}C)@fMQ9Ú5k⬳Ίzŋ.P]{c=GR\\UW]){2"UUӧWZ 8tĈ#XTXXȆ 9s&۷o\.\.k׮e…W_}#-6A8= {TUUQ__;+P]]D~G&w xc-e МƎHP]\} HMC&Gj22Ұl|(-[`&#F ;;$E0a9Nvv6}%##m۶}vL?;eɋ a]vqqt:;{@vv6ig~?N3".ձ:OH!C؄5{ӳ8A%nb&i)^ /p92a 77p8ul6DQlBAAAߎpɋb.l6H^pP/-یIvtq8vTU4LšN8 Cư}e֭l޼N: ʋip8z4/ai x^233IHH`0H +/pԉCWCTU.f"xU^n\n6u&PSfrљt@kn!0u OFK{#uua~T~Pm PVVFyy9fs\$''SRRyrr2R Xy 躎~Z4MtX^BCF|>|>%%%Bn UU;l4hZH'dWQU]7 a C:ZXG TU% 5N&&''G~?wޯ<$5U.7Ni`d5) UJ.^g9_)m*9ŦiR^^addd*EWݎfQPPJ Mx;n(XiiX 8v<^'aUôLaBTUEup\Qw]qtQJ+TUc쐘TAižJZ:-&5 ABaz-{I$DnEV?Aid0"ޓno3СC۾ҙ%˲wy QLPA3fL\鮼Q%]QUljWHHpr;pljCIsjSQm &l  Ν;>fAzmMwӠYׄ6V([-3TgoFyNeep}jJj1CA2,BɐL;}ӽͦF&[ta漢a%#c`3/UUUBPMI%i-˱yZ:=N N[8ᰁ͡aM&Jݎiya:fqM IQX|[fҤFYIeAeN]AmN}]:a cw L ){lp8";x@r䥮Bng̘1RWWG߾}cS__ysʚA6+gCi`iDV 550 qQSR#*GMTwEtoeDײc&99z;^^#A;رZrrr"`UUUٳ4 躎n?Q9tee0`uuuڵ EFF.+iHȂR 'Ð!(ځ`ԨQ\.ʺ,\@}Kt*rhE8af hpa=q vMq|}ȑQ__OZZZ=~?l¥zdabLg(/`䥲JEi;vD5ځE'=dpH{4GT8p cǎ%33Yrټ&=11QF1rHv{㤢iii{ YYYx<4M0^T'i5Ӹl*v MnW"uMͦ4m*ۋK3IIнoMqiQ0MjEnwjkiÆ p8[l69JwE*aCشiN׋nn')) NYY6mQFz$>NHQ]%ҩܶ+ S' !@0_8&KʮTQHM6w^222+˲"0Æ <v Erq߷y^'|eY|>v{$~8 `ƍQs͟NJvGV9v[W)IM-, a`6kTTai 0M\ )ǡ)4>pErr2[lNjj*.+"\OWUUi|ȜɁz?A8=}kIKKc߾}Fgddp 'D~W  @NNN?jpKo΢K-wwv?kSh\8餓طoTWWSQQ5MIJJ 2б IDATHȋ :TСC:], SLZA8ȼ[M2:-&$p9r$[l9h AAAAAqADAAAAAqA qo~Ð!CHMMl Bޓ7?dԨQbiAo,K,- C#//BwUUUbuAY~,Y;ömۨ󑛛UW]Ebbb9v == D̍7u:OZ "HMM*tO ֭[Ν;dݺu[{W^yN8!ŋ0bĈ6  M*++1cn~CAA Bٳ3gf22rq׷N%CG<}E -j{w+V`YW_}uf_|q0;/8o}Pzj~i&B[l.Ge̙|{eҥ1QEZ 8B!=Xpݼ=vyxC<~z;B+BRRRrk|38#rן~ ܡPHZ G8 ^/YYY޽?\qmO:焄xKykfE>&4#=Q֞ Bw#رFiӦE>klٲ%j_~ɲe"Ϟ=;Co jnw޽{#{=i ^]wūy_ϠAJaϟkƾ}By!CDs4 hhB˹]vl2233|92:P_mvkrss#?3x`4M+% .dXs璕?IOO7K/e444DBbcW_D!33b4Mcܹzo#0SOvq袋x衇s=0tP #HEQ,Fe5j~)> gy&iiiQCFcǎ'Ql6.]ʩ5s۷/ocǎt´iXj^AzC&λb! )SDo[^z%ƍ#k3i$>3.]ʅ^(/ag}Ɩ-[xtB5%o9Mikh96i3~_sN?q'7vȼM7Ď; ġGġ*vb :>}_R^B$h*I4iԺ ¡AAAAAqADAAAAqA:۞s(++cÆ yqslfb=t.5!p$C]]'|2`ǃl6\.{!))`0Hee%6P(Ď;66Aa%EQABB^UUq݄an7qF vGMA8ߦfPU5". Krr2PcILL - }? R^^aXE("SSS/zgNp p4C(aْZ AiM# @(rd ‘,iiiЯ__zk6(ԲI/[.1]RSSCIHHZA8R!99~?}&*AMr!&pxw3fԂ ‘*-II iZM4-S<$xdgez-뷳̛7+-[t[>$xm7^{-,,$55UVEҘ5k'O`ݺư7/oƍBM֮=㵟53ݎx]i;D}ApHG tDM EpDV*6T^^7̋/oO?͵^K}}=,^8r '+XbJ㎋VOba)WGk] صkK.eȑݒ箤ٺ|Q"PSSmh={5kCw%;GP.@6H(0,*++QDnw8L4}~>^{5֮] 7@QQQ;)SqƱ|rjƏXf sOǼC馛g̙3kqUUU̘1ٳgsP\\_4JfϞȵя~M7ҥKcǸq۸ꪫXlY$|̙øqXbETM[oeԩ?/0ijM,;… ⋙ϟ{4Ɗ:uj^{5TUe_|9Ç{?gݺu}N3rcFt&MG4Mƍi@+WR[[ˌ3"C +V,V\u:/ocy7e|xcGo?EQׯ#Ftt: f]#9s&<^x!guwqG:~~?uuuƖ.Q"mɱa:#Fht U>}PQQPdt]Jwvi]gd01mba۶mlܸ12=,W|86m" QG~/ˆ׈nG667mi%%%QQYgϞ͢EmG<6^N皛1}{ eΜ98NxHLL$''"JJ6l5rL=Fg|m~mC%+++j9]wŎ;طo'jӹꪫ={6qPK'))nN):u*W梋.r-tώlYYY_3fDNN&MoYwygҎUXv6mZt[YfQ__?niii>SRR曙4i3n_j|glٲ7jO'TSB)z:a ش@iӛ60i9^1VQ+gWJ,ˢ= 8RW_}ŢEO넡W+ >z[Wr^~:邏N⤓N_ tO#F{QBmѣoK>뮻?~<{.̙3Gy'|k&:Hg}67onsͪ*l6uuu<1ˠi7x#~_ir r L<.4ٱcPEiӦnȒSL᭷kiMӘ;w.PaÆn:D9??n χwgq&Lmk sϵ)}GZZEEE,Xwyϟc^36 k'2MSSS۴+W38㰱 p25k+gKfϞŋ9sYl]tQlܸ1q͚5l޼bEtŊqyjժƊ82֭[۵I{au/o2qQ܎ƳiGm Mbe,jCED[Zƀi ǎ"{p Yb/RTxf]MEza3G;{x6i/2l3Ɗn ۍ<E(mlQF{-Ösg#Ƌ2:yd|IHMMi15G^}ռq_q̙Q#H#F#ꫯbFlmyDmIsd؋.(Lo6K.am[\6ǵQybowdδXtŦP2v[fggSVV pXѕ5k'xbZFj󚝍l/g"V>-{%[D}utXiT;~G6_bm(і*t:*-Y䰉S7G<[ QY^D݇Ra%!&:D݇R8T҂    8 "    8 "    8 "    8    8 "     GRa֬YC~~Ԫ Ç笳q8°`iq qĈC~~>7x#PHZ sOS#n,,bW_۫ZkR%w 0_;l.(fcz,Y”)SHKKԱ7paIqqܖЫ ,]'geި=PM ?'~`oZ|Mo Vj9|ZA88p`硫Hq4h{(BdϞ=ݻwwu]nI~p:AKVVVS5!l謬nMw֢*TUp8,_޽vmlYp ա(Jˣc9F~ $;;[):ٙgggcYSWWGuumaPQQAJJ _~ۗ}NJJ ^ߏiEYڵk9Pl7o붲K/ Ν;K/ޯ;:mΝ;eP +ܹ{RPPCQ.UDV$L [n%-- ǃi4 UUILLlY3|V\Iff&iGc6Sy+,,g':,X?ugwUUU333#Xp!GK/iӦaffر} eL›odرѦ&M믿NVV/Y~=~i6ڙ9cj#<i2n8N\~[nᩧ.,*ѣGSPP@CC+V`ҥ,s˲Ļl 9rdÇpp8qӲzm:|ng_YY_|y"_ZZJFFFܲ,x饗xW۵YKp'bYcƌqvC,;g'˲1bDNKK".Ç /_Ί+Xx1cƌ߲Fq(,,` eYn:\nơ%˴0F Ši(iaC30 0,xPUA0xh% &NȔ)S7o^GW_E67bw_$^xQF1w\VZ|YsZ_os~]sb( Nkr뭷byyy$w1-ܲ,TVVbYVcYV2ĊKӜvs~[NrssO9sf̴ZX=IYY}J~̙3'RW˗/kt:o,w+aUe2dXcm1&lذlۻw/)))mҝ5k-"77Ð!Cذa3f ??~mS s8)*nTUњ~fWQuM uB!-i:n t2d\.WT46c=ܹsq:Ό35jTqSNe̚5Drrr9s&s;v젴rrrعs's;hs]wIns~gN;7*cƌĖ̜9}{<SsYN~? ,pb+)Szj.b^/rKcn ."e˖3D?~?K.zz!FM z}?zD޻kI΄ XyhY}3Sq\v.;]EN0L4@ BF0S__63NpS`ۣ 4M=:gɅ;K[(!\jzUl]b`rT=*g]NEZן-jeAꯈ[o lC@@@B$!<sqLn9 y&L|gԿ3FZfǎzW7zMhZj$v*tJ55><`"K# !kl$`F ՊD" P($@;9\88p@v^҂>|yGr$GEW#;`y>.=.9a3vI۶m):|> Pox u 2DJ3 ;^AAӣ4ed%#3-z}f22 ˟,Tff \iȐ!>|x␺?l;T0>ͺ_*祹eySS+%]p%q+-K" 22ӔPFf%M0DS UZ'zԩ:v쨌 7\ -GucS.fMC{^N-}\~- rСC??ߏ%#+OiKn>ڶ-Ӱ-[eE` p8mlۮ5r_֬Yxb 6LNwܡɓ'H/VVV~_hڴi͛{W˖-Qee^~zGt۷y9s(hڼyyZя~Tk>zJ|Ν)m۶{19rDHD ,Ї~kFǏא!Co*;;[kaz衇TVVP(zJiG7 ={V&LH|-Z\3F'O;$/ˉ'jݺu_h9z|I]wRz}\ΝW^yOs*..O}.xL[FČƚx2exġH$}<uϭT|H7n\YFݺu/~ GGT)t>i䨦&qڎ0mڴIϗmڵkWqמ={OO:|pC{uJΝ;O~ey)S몫ҴiOhPZZZks~_4ϰaZ} aڲe6oެ' Q0رc!˲pN|:x`sȐ!;vΜ9e':R0=(/0D jͧ?OZ~^>}0 ;vL?4}tѣGu̙f[',K.\a:qJJJ;*3331OVUUH$J߿_;vw]UUUT'NPb98r)H~FA߾}|fSرCկ.']Jv믿gyM-M6Mk׮?4b޽[e7Jk0rHڵKn[:tPYY:t[nEGUUU:sLbeY:ճgOk7E"a]*0 ?5={QYY{VJbݻd͙3Wh 9\ٳLL|CVVBG9Xjy^CGIj H5$gmͧկ~&#Gjȑmj91BWf=[{ 塬FΝ;S***8A4=TTTĉZvmau/'JsNFW";v쨵ƌ>@HD׾ ~y<uI4rݵvb'?̙3$ ѣG[OZ۷ou}׮]u뭷***ҦMTSS#0jG(##C{ָqԧO={V7nTYYY%|,K:tH}vFWj5h 80qi8Nlx< MLzĉUYYr,2ј1cӐ55YW{_ m۶1rغu++g5\SW~ݺuk_wHϜ9SgϞe 6cڵC˔+WnMx*[ ʋ8|Ɂh 7@@@@@@@@  /]}~ChrrrZ޷80|qڄVvCiܹ < {~qqX_}An4"ġ"zj}v,zunO;j߁ BP0r*)3#gW߫4Goݪ]ѣ|> r@G,vhQ***" 4">U~B7|;;y #eelۑǾ:&www*Gԧw͟mUU=ҿ~*g\.I9t^iI!K R$;+4zdBFdIHn;*QIbn÷wPݻek׮l^ȡ-q IVKfkĒA9@Շxh9d Oܹ*}ڲVqDSo*#6Y!>PI3uOHtIDUU[aUVR׬X~nVu](;;[wa_<򈮽Zjĉ:ulŋua-ZH`P .uI͘1Cs4gy<UVVjŊ*))i$_|QpX&LK/zH .TVV^z%ZJxM4Ik׮}ݗrކah 0`6oެ 6ԺO?Q7x4k,=3z饗t}i5\ļǏB-YDtM7iÆ )M8رCK,QΝU\\yÇjʔ))ճgO-ZHRzz~an>|X3gԱc4|k߾}#Ix;5)åj;GӴtM=/Ǒ+ζc9޶;]Q5av*:mIr%ǯ?8)c~١9$ӧիWZW^*))Qg}VmoT~~~my<ZJ;SO)##C?jjjTPPPo%ߡCrz뭷rJzMu՛ڵk{i…:|VZH}]M8QӸU^^^xAK\j󟕓{LߵyzK/oԛon~/_ٓG}zKlNyF]wݥM6)kƌ2eJiqBSSS7xCz>i#p6+2vTzzQ9JiIdZLS2,G-di>u[;ap#O6x"붼^o~t]ŵשS4n89Aq\.uEgϞվ}g=88pQ aXz'USShfϞ#G^K8 OnӸq裏{ť#G+#F#>|TUU5kW^ӧ2dHyz8r٤m:C)C KS+մ>]wu5lذD}c˧ ,Gm/шYt]GP.>etRR!UVK5KUTY#R9D4 F,6VOT]~A=NK@ q?nfvm={u릓'Oc="޽[m0 :uJ:uUSS<;ܹ֊,նիW+//OfҺuaÆz۽STsG .s=e˖O,-[L4uTM>]n[iWO2e+[oU/:wN:>KywQeeerGEEE5lJ\z?O5?VAAA4|z<ȁ8\}ď_iɝAEg]aGRȐWH'8:WiW*TyT:"#YYe*;W ^AtlE,[sеkW=쳚5k |L?TII~hҤIڼyf̘ 4H&LHJo[GD`^T۷uw*--MOCM>]7o^V4|R=@j:$w߻'{rʕ+.]4?u…uyj#;jGW`INGkY:tB:~ K+,WZ:_iTY a5U*=uVi+bɮR,MC:CV=;wkK~xmvkZb~_׈0zj͜9nٲEZ]1VTw|$S!)")T.UIH .fbI%9WeRh%ФovW_:gE'90] "Ft߃a92 )bFwFeJsE?ńLC_>֬bc\ۻYfIl26lV:y*+~zy`09C+Իwo #VQFF4|G8оG|bFġ\R7p8m{ァe?~|ba@[yQ_w/9uA@[iqqqqqqqq88888888@@@@@@@@        qqqqqqq88888888@@@@@@@       qqqqqqqq88888888@@@@@@@@        qqqqqqqq88888888@@@@@@@@        qqqqqqq88888888@@@@@@@@        qqqqqqq8888888@pQh͚5VXXiq rrrmC<H.988|uԉ8jaѢEpe@ ^^9aba І04#'Ť6tqvF@Ku6\og y "Qލ:LIإJRu%Dbb;E\ OH@4rQ8}gyZDV;^'򷛈E5Y)v.~Iiғ.IhPU') J>tTڛjbׇݬd.uҼC;WBv8;)X,/VKrCmf T 3i۸\ґ]'Cj"PNy4`\| RH7.f#f&c:2B& mAosIFNlE>37;Zwg4#t#GIA44qHKw~WޔdŦ?Rɕ4 pi P7u7/5# 5cUr%$ysRK6)h~jЬKMwf(v;Uэ8šGSN.&aP+iTCS\\hK-=Zɮs]04w@qhh`ug$s;`I#Ta pQ7N@z%{"vfwDhAJN1HuR/bN~_X5=4_+%947R Oג Š+{"Q7 ͞Ŭ]-p"ҜW.FGLR @\ҙ:6IENDB`qtemu-2.0~alpha1/help/main.htm0000644000175000017500000001235010753140477016220 0ustar fboudrafboudra QtEmu Help

QtEmu Help


Last updated: 2006-12-17

Index

Overview

QtEmu is a graphical user interface for QEMU. It has the ability to run virtual operating systems on native systems. This way you can easily test a new operating system or try a Live CD on your system without any troubles and dangers.
Mainwindow

Create a new virtual machine - step by step

Click on the "New virtual machine" button, either in Toolbar or Main tab. A wizard opens.
Wizard
Select in the combobox the operation system you want to install. If it is not listed there, select "Other".
Wizard
There is already a name for the virtual machine proposed. If you have selected "Other", your should now enter the correct name.
Wizard
When you change the name, the path adjusts automatically itself.
Wizard
Now you can specify how much space should be allocated for the virtual disk image. Do not specify a bigger size than there is space available on the selected real hard disk. Click "Finish". The wizard closes and the new created machine opens.
Wizard
Now you are able to configure the new virtual machine.
Mainwindow
Your operating system must be installed most probably from CD ROM. To do so, open the "CD ROM"-section.
Mainwindow
Your are able to choose between a physical CD drive and a CD image.
Mainwindow
After you have choosen a CD ROM, activate "Boot from CD ROM".
Mainwindow
Now you can start with the installation. Or if you would like to start a Live-CD, you are able to do so.
Mainwindow
A new window appears after a click on "Start". That is your virtual machine. You can work inside it like you could on a real computer. To switch keyboard and mouse between virtual and real system, press ALT+CTRL.
Mainwindow
When you will quit the virtual system, do it like you would do it on a real system. If the operating system does not provide a function to quit, do so with the "Stop" button. But keep in mind: The stop button does the same as if you would unplug your power cable on a real computer.
Mainwindow
If you are sure you will kill the system, confirm it with "Yes".
Mainwindow

Toolbar

Toolbar
  • New Machine: Click here to create a new virtual machine.
  • Open: Click here to open an existing QtEmu machine (.qte).
  • Power buttons (Start, Stop, Restart): These buttons do the same as the buttons inside the machine configuration. The are provided for convenience.

Options

    Config Window
  • "MyMachines"-Path: You can change the default "MyMachines"-path, which is in the folder "MyMachies" in your private user / home folder. All new virtual machines will be saved by default into the "MyMachines" folder.
  • Tabbar position: Here you can change the position of the tabbar (default: left).
  • Language: The language is by default your system language if available. Feel free to translate QtEmu into your language. Just contact the author.

Other

  • Snapshot Mode: If you would like to test something in your virtual machine without have these changes on your next restart of your virtual system, activate "Snapshot Mode".
  • Notes: You are able to write down some note about the current virtual machine. Possible notes are for example applications which are installed.
qtemu-2.0~alpha1/help/mainwindow_new_machine_3.png0000644000175000017500000000506510753140477022230 0ustar fboudrafboudraPNG  IHDRiA}abKGD pHYs  tIME   IDATxOǿiKRD'@@"B/ _v M\&Mعs F!](([{yL*$7m=s?=e-kYZ5Y?Q.ׂU7v8vX5sr0Sk žB!&5L i^aP-HQWT {& Q#(|C9ꑑXFi)Uy Çt` Rm948;՞Xq}CwbnnRӦ eDd#gR3͸c Nen{ @Ţ*pW&' qrNEN%8ƙX,!2!x|@6E\FP@XDP@TBTB>G>ǝ;wgy5 ɚ0kDu7zrDIx7oބ$IT*8Nqyx9n߾} Jb̙3c pXUKTq8PJU|>L0REWnXkq:8;F˗D"H$(ˠqhooױ`_=9s~mmm `cc߿G&A*chooGGG> I,¼ yM6A ۠\8$~?RN< Q;Hu\|~u%)bll ǩ' D*B?o9NUh,^Ef5B! )re{{{B\.t:q5$(X[[A6!Ȳ LFϡEj0zw@FI5#NĉY*2b!AWW< <!w-Q.N1R@ |bfzi6R[$(p\7<_e1<Q!rcx-~?"8dYF6E& (N‹R A "vvv<~@ T*L&rK.}9hz>xHRtttC$I "z{{!I$|>",(EJuH1B  $IB[[r٬z<籽a9 _/Ax<HǃP(o߾ahhdYEr95(SHV\.# ɠ $ >===cT*8}Z;/rp@PQsSWWBTXJf!HR ߏd2 ׋b]UeCCC1::ZsaRn%Ni?J«W I ( N!gϞU16cDzll Ϟ=C4E"Pk<2:;;{{O~H$ΝIJ Rs.^׋ i5/ՅIpӧ|}>zS@ iI SN+]ZZBPׯ_H$Ґ?MX]]0 Q,dXJR$ LMMOS+Ic||hh`cll 3 qn)=!ΝdX Fyv:x&&&4kppQk*#rQ JsFFFcܸqPȟ. ߶׃IY4??(RkqdsPY̚T*UAlY(~$#FTՂQ]c85-GkE_ڪMy,kR>Nj1Rь@':pRm~_VkF\̚ЃQVgr:&GHufr!eivIJnp`b|#%Ym/1R:$Z (ZD HĤh8J$=(+55T$T0= Tqd*Pejӯx0df0tH"M ?ᮮ=VN7=) |hϬl uv;N7!E6 }-H]a0}Nv %瘕[ ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef CONFIG_H #define CONFIG_H #define VERSION "2.0 Alpha1" #endif qtemu-2.0~alpha1/qtemu.qrc0000644000175000017500000000466011163767267015511 0ustar fboudrafboudra images/crystal/qtemu.png images/crystal/new.png images/crystal/open.png images/crystal/start.png images/crystal/stop.png images/crystal/restart.png images/crystal/resume.png images/crystal/suspend.png images/crystal/pause.png images/crystal/close.png images/crystal/memory.png images/crystal/hdd.png images/crystal/cdrom.png images/crystal/floppy.png images/crystal/cdimage.png images/crystal/network.png images/crystal/sound.png images/crystal/other.png images/crystal/splash.svg images/crystal/alpha.svg images/crystal/camera.png images/oxygen/qtemu.png images/oxygen/new.png images/oxygen/open.png images/oxygen/start.png images/oxygen/stop.png images/oxygen/force.png images/oxygen/restart.png images/oxygen/resume.png images/oxygen/suspend.png images/oxygen/pause.png images/oxygen/close.png images/oxygen/memory.png images/oxygen/hdd.png images/oxygen/cdrom.png images/oxygen/floppy.png images/oxygen/cdimage.png images/oxygen/network.png images/oxygen/sound.png images/oxygen/other.png images/oxygen/splash.svg images/oxygen/alpha.svg images/oxygen/camera.png images/oxygen/usb.png images/oxygen/reload.png images/oxygen/fullscreen.png images/oxygen/scale.png images/oxygen/mouse.png images/oxygen/add.png images/oxygen/remove.png images/oxygen/force.png images/oxygen/share.png images/oxygen/keys.png qtemu-2.0~alpha1/controlpanel.cpp0000644000175000017500000001305511201066716017031 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ /**************************************************************************** ** C++ Implementation: controlpanel ** ** Description: ** ****************************************************************************/ #include "controlpanel.h" #include "machineconfigobject.h" #include "machinetab.h" #include "machineprocess.h" #include "settingstab.h" #include "machineview.h" #include "usbpage.h" #include "usbmodel.h" #include #include ControlPanel::ControlPanel(MachineTab *parent) : QWidget(parent) , parent(parent) { setupUi(this); config = parent->machineConfigObject; //load current drives foreach(OptDevice device, QtEmuEnvironment::getHal()->opticalList()) cdCombo->addItem(device.name, device.device); registerObjects(); makeConnections(); QPalette listPalette = usbView->palette(); QColor transparent = QColor(); transparent.setAlpha(0); listPalette.setColor(QPalette::Base, transparent); usbView->setPalette(listPalette); } ControlPanel::~ControlPanel() { } void ControlPanel::makeConnections() { //navigation connections connect(mediaButton, SIGNAL(clicked()), this, SLOT(mediaActivate())); //connect(optionButton, SIGNAL(clicked()), this, SLOT(optionActivate())); connect(displayButton, SIGNAL(clicked()), this, SLOT(displayActivate())); connect(usbButton, SIGNAL(clicked()), this, SLOT(usbActivate())); //action connections connect(cdReloadButton, SIGNAL(clicked()), parent->machineProcess, SLOT(changeCdrom())); connect(floppyReloadButton, SIGNAL(clicked()), parent->machineProcess, SLOT(changeFloppy())); connect(cdImageButton, SIGNAL(clicked()), parent->settingsTab, SLOT(setNewCdImagePath())); connect(floppyImageButton, SIGNAL(clicked()), parent->settingsTab, SLOT(setNewFloppyImagePath())); connect(fullscreenButton, SIGNAL(toggled(bool)), parent->machineView, SLOT(fullscreen(bool))); connect(parent->machineView, SIGNAL(fullscreenToggled(bool)), fullscreenButton, SLOT(setChecked(bool))); connect(screenshotButton, SIGNAL(clicked()), this, SLOT(saveScreenshot())); //state connections connect(parent->machineProcess, SIGNAL(started()), this, SLOT(running())); connect(parent->machineProcess, SIGNAL(finished()), this, SLOT(stopped())); //connections for optical drive detection connect(QtEmuEnvironment::getHal(), SIGNAL(opticalAdded(QString,QString)),this,SLOT(optAdded(QString,QString))); connect(QtEmuEnvironment::getHal(), SIGNAL(opticalRemoved(QString,QString)),this,SLOT(optRemoved(QString,QString))); } void ControlPanel::mediaActivate() { controlStack->setCurrentIndex(0); } void ControlPanel::displayActivate() { controlStack->setCurrentIndex(2); } void ControlPanel::usbActivate() { controlStack->setCurrentIndex(1); } void ControlPanel::registerObjects() { config->registerObject(cdCombo, "cdrom"); config->registerObject(floppyCombo, "floppy"); config->registerObject(mouseButton, "mouse"); config->registerObject(scaleButton, "scaleEmbeddedDisplay"); config->registerObject(addDevices, "autoAddDevices"); usbFrame->setProperty("enableDisable", true); config->registerObject(usbFrame, "usbSupport"); //connect the usb view to the model. usbView->setModel(parent->settingsTab->getUsbPage()->getModel()); } void ControlPanel::saveScreenshot() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save a Screenshot"), QString(), tr("Pictures")+" (*.ppm)"); if(!fileName.endsWith(".ppm")) fileName = fileName + ".ppm"; parent->machineProcess->write(QString("screendump " + fileName).toAscii() + '\n'); } void ControlPanel::running() { fullscreenButton->setEnabled(true); screenshotButton->setEnabled(true); } void ControlPanel::stopped() { fullscreenButton->setEnabled(false); screenshotButton->setEnabled(false); } void ControlPanel::optionChanged(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value) { if(optionName == "autoAddDevices") { usbView->setEnabled(config->getOption("autoAddDevices", true).toBool()); } } void ControlPanel::optAdded(QString devName, QString devPath) { cdCombo->addItem(devName, devPath); } void ControlPanel::optRemoved(QString devName, QString devPath) { if(cdCombo->itemData(cdCombo->currentIndex()).toString() == devPath) { parent->machineProcess->changeCdrom(); } cdCombo->removeItem(cdCombo->findData(devPath)); } qtemu-2.0~alpha1/wizard.cpp0000644000175000017500000001224110753140477015635 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** Some parts of this file have been taken from ** examples/dialogs/complexwizard of Qt 4.1 which is ** Copyright (C) 2004-2006 Trolltech ASA. All rights reserved. ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "wizard.h" #include #include #include #include #include Wizard::Wizard(QWidget *parent) : QDialog(parent) { cancelButton = new QPushButton(tr("Cancel")); backButton = new QPushButton(tr("< &Back")); nextButton = new QPushButton(tr("Next >")); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); connect(backButton, SIGNAL(clicked()), this, SLOT(backButtonClicked())); connect(nextButton, SIGNAL(clicked()), this, SLOT(nextButtonClicked())); buttonLayout = new QHBoxLayout; buttonLayout->addStretch(1); buttonLayout->addWidget(cancelButton); buttonLayout->addWidget(backButton); buttonLayout->addWidget(nextButton); headerFrame = new QFrame; headerFrame->setFrameShape(QFrame::StyledPanel); headerFrame->setFrameShadow(QFrame::Plain); headerFrame->setAutoFillBackground(true); headerFrame->setBackgroundRole(QPalette::Base); QHBoxLayout *headerLayout = new QHBoxLayout; headerLabel = new QLabel; #if QT_VERSION >= 0x040200 headerLabel->setStyleSheet("QLabel { font-weight: bold; }"); #endif headerLayout->addWidget(headerLabel); QSettings settings("QtEmu", "QtEmu"); QString iconTheme = settings.value("iconTheme", "oxygen").toString(); headerIcon = new QLabel; headerIcon->setPixmap(QPixmap(":/images/" + iconTheme + "/qtemu.png")); headerLayout->addWidget(headerIcon); headerLayout->setStretchFactor(headerLabel, 1); headerFrame->setLayout(headerLayout); mainLayout = new QVBoxLayout; mainLayout->addWidget(headerFrame); mainLayout->addLayout(buttonLayout); setLayout(mainLayout); } void Wizard::setTitle(const QString &title) { headerLabel->setText(title); } void Wizard::setFirstPage(WizardPage *page) { page->resetPage(); history.append(page); switchPage(0); } void Wizard::backButtonClicked() { WizardPage *oldPage = history.takeLast(); oldPage->resetPage(); switchPage(oldPage); } void Wizard::nextButtonClicked() { WizardPage *oldPage = history.last(); WizardPage *newPage = oldPage->nextPage(); newPage->resetPage(); history.append(newPage); switchPage(oldPage); } void Wizard::completeStateChanged() { nextButton->setDefault(true); WizardPage *currentPage = history.last(); nextButton->setEnabled(currentPage->isComplete()); if (currentPage->isLastPage()) nextButton->setText(tr("&Finish")); else nextButton->setText(tr("Next >")); } void Wizard::switchPage(WizardPage *oldPage) { if (oldPage) { oldPage->hide(); mainLayout->removeWidget(oldPage); disconnect(oldPage, SIGNAL(completeStateChanged()), this, SLOT(completeStateChanged())); } WizardPage *newPage = history.last(); mainLayout->insertWidget(1, newPage); newPage->show(); newPage->setFocus(); newPage->updateTitle(); connect(newPage, SIGNAL(completeStateChanged()), this, SLOT(completeStateChanged())); backButton->setEnabled(history.size() != 1); if (newPage->isLastPage()) { disconnect(nextButton, SIGNAL(clicked()), this, SLOT(nextButtonClicked())); connect(nextButton, SIGNAL(clicked()), this, SIGNAL(finished())); connect(nextButton, SIGNAL(clicked()), this, SLOT(accept())); } else { disconnect(nextButton, SIGNAL(clicked()), this, SIGNAL(finished())); disconnect(nextButton, SIGNAL(clicked()), this, SLOT(accept())); disconnect(nextButton, SIGNAL(clicked()), this, SLOT(nextButtonClicked())); connect(nextButton, SIGNAL(clicked()), this, SLOT(nextButtonClicked())); } completeStateChanged(); } WizardPage::WizardPage(QWidget *parent) : QWidget(parent) { hide(); } void WizardPage::updateTitle() { } void WizardPage::resetPage() { } WizardPage *WizardPage::nextPage() { return 0; } bool WizardPage::isLastPage() { return false; } bool WizardPage::isComplete() { return true; } void WizardPage::privateSlot() { } qtemu-2.0~alpha1/mainwindow.cpp0000644000175000017500000003704411201112504016474 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "mainwindow.h" #include "machinetab.h" #include "machinewizard.h" #include "helpwindow.h" #include "configwindow.h" #include "config.h" #include "machineprocess.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MainWindow::MainWindow() { QSettings settings("QtEmu", "QtEmu"); iconTheme = settings.value("iconTheme", "oxygen").toString(); setWindowTitle(tr("QtEmu")); setWindowIcon(QPixmap(":/images/" + iconTheme + "/qtemu.png")); tabWidget = new QTabWidget; tabWidget->setTabPosition(QTabWidget::West); setCentralWidget(tabWidget); createActions(); createMenus(); createToolBars(); createStatusBar(); createMainTab(); readSettings(); } void MainWindow::closeEvent(QCloseEvent *event) { int runningMachines = 0; int savingMachines = 0; for (int i = 1; i<(tabWidget->count());i++) { MachineTab *tab = static_cast(tabWidget->widget(i)); if(tab->machineProcess->state() == MachineProcess::Running) { runningMachines++; } else if(tab->machineProcess->state() == MachineProcess::Saving) { savingMachines++; } } if (savingMachines != 0) { QMessageBox::critical(this, tr("Virtual Machine Saving State!"), tr("You have virtual machines currently saving their state.
" "Quitting now would very likely damage your Virtual Machine!!"), QMessageBox::Cancel); event->ignore(); return; } if (runningMachines == 0 || QMessageBox::question(this, tr("Exit confirmation"), tr("You have virtual machines currently running. Are you sure you want to quit?
" "Quitting QtEmu will leave your virtual machines running. QtEmu will
" "automatically reconnect to your virtual machines next time you run it."), QMessageBox::Close | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Close) { writeSettings(); event->accept(); } else { event->ignore(); } } void MainWindow::createNew() { QString machine = MachineWizard::newMachine(myMachinesPath, this); if (!machine.isEmpty()) loadFile(machine); } void MainWindow::open() { QString fileName = QFileDialog::getOpenFileName(this, tr("Choose a virtual machine"), myMachinesPath, tr("QtEmu machines")+" (*.qte)"); if (!fileName.isEmpty()) loadFile(fileName); } void MainWindow::configure() { ConfigWindow *config = new ConfigWindow(myMachinesPath, tabWidget->tabPosition(), this); if (config->exec() == QDialog::Accepted) { myMachinesPath = config->myMachinePathLineEdit->text(); QTabWidget::TabPosition position; switch(config->comboTabPosition->currentIndex()) { case 0: position = QTabWidget::North; break; case 1: position = QTabWidget::South; break; case 2: position = QTabWidget::West; break; case 3: position = QTabWidget::East; break; default: position = QTabWidget::West; } tabWidget->setTabPosition(position); } } void MainWindow::start() { MachineTab *tab = qobject_cast(tabWidget->currentWidget()); QPushButton *startButton = qobject_cast(tab->startButton); startButton->click(); } void MainWindow::pause() { MachineTab *tab = qobject_cast(tabWidget->currentWidget()); QPushButton *pauseButton = qobject_cast(tab->pauseButton); pauseButton->click(); } void MainWindow::stop() { MachineTab *tab = qobject_cast(tabWidget->currentWidget()); QPushButton *stopButton = qobject_cast(tab->stopButton); stopButton->click(); } void MainWindow::restart() { //stop(); //QTimer::singleShot(500, this, SLOT(start())); MachineTab *tab = qobject_cast(tabWidget->currentWidget()); tab->restart(); } void MainWindow::about() { QMessageBox::about(this, tr("About QtEmu"), tr("

QtEmu

Version %1
" "QtEmu is a graphical user interface for " "QEMU.

Copyright © " "2006-2009 Urs Wolfer uwolfer%2fwo.ch.
" "Copyright © 2008-2009 Ben Klopfenstein benklop%2gmail.com.
" "All rights reserved.

" "The program is provided AS IS with NO WARRANTY OF ANY KIND.

" "The icons have been taken from the KDE Crystal and Oxygen themes which are LGPL licensed.") .arg(VERSION).arg("@")); } void MainWindow::help() { HelpWindow *help = new HelpWindow(this); help->show(); help->raise(); help->activateWindow(); } void MainWindow::createActions() { //file actions newAct = new QAction(QIcon(":/images/" + iconTheme + "/new.png"), tr("&New Machine"), this); newAct->setShortcut(tr("Ctrl+N")); newAct->setStatusTip(tr("Create a new machine")); connect(newAct, SIGNAL(triggered()), this, SLOT(createNew())); openAct = new QAction(QIcon(":/images/" + iconTheme + "/open.png"), tr("&Open Machine..."), this); openAct->setShortcut(tr("Ctrl+O")); openAct->setStatusTip(tr("Open an existing machine")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); confAct = new QAction(tr("Confi&gure"), this); confAct->setShortcut(tr("Ctrl+G")); confAct->setStatusTip(tr("Customize the application")); connect(confAct, SIGNAL(triggered()), this, SLOT(configure())); exitAct = new QAction(tr("E&xit"), this); exitAct->setShortcut(tr("Ctrl+Q")); exitAct->setStatusTip(tr("Exit the application")); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); //power actions startAct = new QAction(QIcon(":/images/" + iconTheme + "/start.png"), tr("&Start"), this); startAct->setShortcut(tr("Ctrl+S")); startAct->setStatusTip(tr("Start this virtual machine")); startAct->setEnabled(false); connect(startAct, SIGNAL(triggered()), this, SLOT(start())); stopAct = new QAction(QIcon(":/images/" + iconTheme + "/stop.png"), tr("S&top"), this); stopAct->setShortcut(tr("Ctrl+T")); stopAct->setStatusTip(tr("Kill this machine")); stopAct->setEnabled(false); connect(stopAct, SIGNAL(triggered()), this, SLOT(stop())); restartAct = new QAction(QIcon(":/images/" + iconTheme + "/restart.png"), tr("&Restart"), this); restartAct->setShortcut(tr("Ctrl+R")); restartAct->setStatusTip(tr("Restart this machine")); restartAct->setEnabled(false); connect(restartAct, SIGNAL(triggered()), this, SLOT(restart())); pauseAct = new QAction(QIcon(":/images/" + iconTheme + "/pause.png"), tr("&Pause"), this); pauseAct->setShortcut(tr("Ctrl+P")); pauseAct->setStatusTip(tr("Pause this machine")); pauseAct->setEnabled(false); connect(pauseAct, SIGNAL(triggered()), this, SLOT(pause())); helpAct = new QAction(tr("QtEmu &Help "), this); helpAct->setShortcut(tr("F1")); helpAct->setStatusTip(tr("Show Help")); connect(helpAct, SIGNAL(triggered()), this, SLOT(help())); aboutAct = new QAction(tr("&About QtEmu"), this); aboutAct->setStatusTip(tr("Show the About box")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); } void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); fileMenu->addSeparator(); fileMenu->addAction(confAct); fileMenu->addSeparator(); fileMenu->addAction(exitAct); menuBar()->addSeparator(); powerMenu = menuBar()->addMenu(tr("&Power")); powerMenu->addAction(startAct); powerMenu->addAction(pauseAct); powerMenu->addAction(stopAct); powerMenu->addAction(restartAct); menuBar()->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(helpAct); helpMenu->addSeparator(); helpMenu->addAction(aboutAct); } void MainWindow::createToolBars() { fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); powerToolBar = addToolBar(tr("Power")); powerToolBar->addAction(startAct); powerToolBar->addAction(pauseAct); powerToolBar->addAction(stopAct); powerToolBar->addAction(restartAct); } void MainWindow::createStatusBar() { statusBar()->showMessage(tr("Ready")); } void MainWindow::createMainTab() { mainTabWidget = new QWidget(); mainTabLabel = new QLabel(mainTabWidget); mainTabLabel->setText(tr("

QtEmu

" "QtEmu is a graphical user interface for QEMU. It has the ability " "to run operating systems virtually in a window on native systems.")); mainTabLabel->setWordWrap(true); newButton = new QPushButton(mainTabWidget); //newButton->setDefaultAction(newAct); newButton->setIconSize(QSize(32, 32)); //newButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //newButton->setAutoRaise(true); newButton->setIcon(QIcon(":/images/" + iconTheme + "/new.png")); newButton->setText(tr("Create a new virtual machine. A wizard will help you \n" "prepare for a new operating system")); connect(newButton, SIGNAL(clicked()), this, SLOT(createNew())); openButton = new QPushButton(mainTabWidget); //openButton->setDefaultAction(openAct); openButton->setIconSize(QSize(32, 32)); //openButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //openButton->setAutoRaise(true); openButton->setIcon(QIcon(":/images/" + iconTheme + "/open.png")); openButton->setText(tr("Open an existing virtual machine")); connect(openButton, SIGNAL(clicked()), this, SLOT(open())); QVBoxLayout *buttonLayout = new QVBoxLayout; buttonLayout->setSpacing(20); buttonLayout->addWidget(mainTabLabel); buttonLayout->addWidget(newButton); buttonLayout->addWidget(openButton); buttonLayout->addStretch(1); mainTabWidget->setLayout(buttonLayout); tabWidget->addTab(mainTabWidget, QIcon(":/images/" + iconTheme + "/qtemu.png"), tr("Main")); } void MainWindow::readSettings() { QSettings settings("QtEmu", "QtEmu"); QPoint pos = settings.value("pos", QPoint(0, 50)).toPoint(); QSize size = settings.value("size", QSize(350, 700)).toSize(); resize(size); move(pos); myMachinesPath = settings.value("machinesPath", QString(QDir::homePath()+'/'+tr("MyMachines"))).toString(); QTabWidget::TabPosition position; switch(settings.value("tabPosition", 2).toInt()) { case 0: position = QTabWidget::North; break; case 1: position = QTabWidget::South; break; case 2: position = QTabWidget::West; break; case 3: position = QTabWidget::East; break; default: position = QTabWidget::West; } tabWidget->setTabPosition(position); int countMachines = settings.beginReadArray("machines"); for (int i = 0; i < countMachines; ++i) { settings.setArrayIndex(i); loadFile(settings.value("path").toString()); } settings.endArray(); connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(changeMachineState(int))); // workaround: check every second if user has finished machine with close button QTimer *checkTimer = new QTimer(this); connect(checkTimer, SIGNAL(timeout()), this, SLOT(changeMachineState())); checkTimer->start(1000); tabWidget->setCurrentIndex(settings.value("activeTab", 0).toInt()); } void MainWindow::writeSettings() { QSettings settings("QtEmu", "QtEmu"); settings.setValue("pos", pos()); settings.setValue("size", size()); settings.setValue("machinesPath", myMachinesPath); settings.setValue("tabPosition", tabWidget->tabPosition()); settings.beginWriteArray("machines"); for (int i = 1; i < tabWidget->count(); ++i) //do not start with the main tab { settings.setArrayIndex(i-1); settings.setValue("path", tabWidget->tabToolTip(i)); } settings.endArray(); settings.setValue("activeTab", tabWidget->currentIndex()); } void MainWindow::loadFile(const QString &fileName) { MachineTab *machineTab = new MachineTab(tabWidget, fileName, myMachinesPath); int index = tabWidget->addTab(machineTab, QIcon(":/images/" + iconTheme + "/qtemu.png"), machineTab->machineName()); tabWidget->setCurrentIndex(index); tabWidget->setTabToolTip(index, fileName); statusBar()->showMessage(tr("Machine loaded"), 2000); } void MainWindow::changeMachineState(int value) { if (tabWidget->currentIndex() != 0) //do not check the main tab { MachineTab *tab = qobject_cast(tabWidget->currentWidget()); QPushButton *startButton = qobject_cast(tab->startButton); if (value != -1) startButton->setFocus(); QPushButton *stopButton = qobject_cast(tab->stopButton); connect(startButton, SIGNAL(clicked()), this, SLOT(changeMachineState())); connect(stopButton, SIGNAL(clicked()), this, SLOT(changeMachineState())); if (!startButton->isEnabled()&&tab->isEnabled()) { stopAct->setEnabled(true); pauseAct->setEnabled(true); startAct->setEnabled(false); restartAct->setEnabled(true); } else if (tab->isEnabled()) { stopAct->setEnabled(false); pauseAct->setEnabled(false); startAct->setEnabled(true); restartAct->setEnabled(false); } else { stopAct->setEnabled(false); pauseAct->setEnabled(false); startAct->setEnabled(false); restartAct->setEnabled(false); } } else //main tab is active { stopAct->setEnabled(false); pauseAct->setEnabled(false); startAct->setEnabled(false); restartAct->setEnabled(false); } } qtemu-2.0~alpha1/machinesplash.h0000644000175000017500000000323311202371546016613 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINESPLASH_H #define MACHINESPLASH_H #include class QLabel; class QSvgWidget; class QRectF; class QPixmap; class QString; /** @author Ben Klopfenstein */ class MachineSplash : public QWidget { Q_OBJECT public: MachineSplash(QWidget *parent = 0); void setPreview(const QString previewLocation = QString()); const QSize sizeHint(); private: void resizeEvent(QResizeEvent * event); void showEvent(QShowEvent * event); QSvgWidget *splashImage; QLabel *previewImage; QRectF previewBounds; QPixmap alpha; QString previewLoc; void doResize(); void getPreviewRect(); }; #endif qtemu-2.0~alpha1/interfacemodel.cpp0000644000175000017500000002024611203076444017313 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ /**************************************************************************** ** ** C++ Implementation: interfacemodel ** ** Description: provides a model for the model/view framework to describe the ** various options for a qemu network interface, both guest and host models ** are provided. ** ****************************************************************************/ #include #include "interfacemodel.h" #include "machineconfigobject.h" InterfaceModel::InterfaceModel(MachineConfigObject * config, QString nodeType, QObject * parent) : QAbstractTableModel(parent) , config(config) , nodeType(nodeType) { connect(config->getConfig(), SIGNAL(optionChanged(const QString&, const QString&, const QString&, const QVariant&)), this, SLOT(optionChanged(const QString&, const QString&, const QString&, const QVariant&))); } int InterfaceModel::rowCount(const QModelIndex & parent) const { if(parent.isValid()) return 0; int rows = config->getConfig()->getNumOptions(nodeType, ""); //qDebug("rows %i", rows); return rows; } int InterfaceModel::columnCount(const QModelIndex & parent) const { if(parent.isValid()) return 0; return columns.size(); } QVariant InterfaceModel::data(const QModelIndex & index, int role) const { if(!index.isValid()) return QVariant(); //maybe this could be optimized by caching the stringlists... QString nodeName = rowName(index.row()); QString optionName = colName(index.column()); if (role == Qt::DisplayRole || role == Qt::EditRole) return config->getOption(nodeType, nodeName, optionName, QVariant()); else return QVariant(); } QVariant InterfaceModel::headerData(int section, Qt::Orientation orientation, int role) const { if(orientation == Qt::Horizontal) { if (role == Qt::DisplayRole) return columns.at(section); } return QAbstractTableModel::headerData(section, orientation, role); } Qt::ItemFlags InterfaceModel::flags(const QModelIndex &index) const { if (!index.isValid()) return 0; return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } bool InterfaceModel::setData(const QModelIndex & index, const QVariant & value, int role) { if (index.isValid() && (role == Qt::EditRole || role == Qt::DisplayRole)) { QString nodeName = rowName(index.row()); QString optionName = colName(index.column()); config->getConfig()->setOption(nodeType, nodeName, optionName, value); emit dataChanged(index, index); return true; } return false; } QString InterfaceModel::rowName(int row) const { QStringList names = config->getConfig()->getAllOptionNames(nodeType, ""); if(row <= names.size()) return names.at(row); else return QString(); } QString InterfaceModel::colName(int col) const { return(columns.at(col)); } void InterfaceModel::optionChanged(const QString & nodeType, const QString & nodeName, const QString & optionName, const QVariant & value) { if(nodeType == this->nodeType) { reset(); } } GuestInterfaceModel::GuestInterfaceModel(MachineConfigObject * config, QObject * parent) : InterfaceModel(config, QString("net-guest"), parent) { columns << "name" << "mac" << "enabled"; } bool GuestInterfaceModel::insertRows(int row, int count, const QModelIndex & parent) { Q_UNUSED(parent); QString nodeName; int interfaceNumber = 0; beginInsertRows(parent, row, row + count - 1); for (int i=0; igetOption(nodeType, "", QString("guest" + QString::number(interfaceNumber)), QVariant()).isValid();interfaceNumber++); nodeName = "guest" + QString::number(interfaceNumber); //set all options config->setOption(nodeType, nodeName, "name", QString(QString("Interface ") + QString::number(interfaceNumber))); config->setOption(nodeType, nodeName, "nic", "rtl8139"); config->setOption(nodeType, nodeName, "mac", "random"); config->setOption(nodeType, nodeName, "randomize", false); config->setOption(nodeType, nodeName, "host", QString(QString("Interface ") + QString::number(interfaceNumber))); config->setOption(nodeType, nodeName, "enabled", true); } endInsertRows(); return true; } bool GuestInterfaceModel::removeRows(int row, int count, const QModelIndex & parent) { Q_UNUSED(parent); QString nodeName; beginRemoveRows(parent, row, row + count - 1); for (int i = row; i < (row + count); i++) { nodeName = config->getConfig()->getAllOptionNames(nodeType, "").at(i); config->getConfig()->clearOption(nodeType, "", nodeName); } endRemoveRows(); return true; } HostInterfaceModel::HostInterfaceModel(MachineConfigObject * config, QObject * parent) : InterfaceModel(config, QString("net-host"), parent) { columns << "name" << "type"; } bool HostInterfaceModel::insertRows(int row, int count, const QModelIndex & parent) { Q_UNUSED(parent); QString nodeName; int interfaceNumber = 0; beginInsertRows(parent, row, count); for (int i=0; igetOption(nodeType, "", QString("host" + QString::number(interfaceNumber)), QVariant()).isValid();interfaceNumber++); nodeName = "host" + QString::number(interfaceNumber); //set all options config->setOption(nodeType, nodeName, "name", QString(QString("Interface ") + QString::number(interfaceNumber))); config->setOption(nodeType, nodeName, "type", "User Mode"); config->setOption(nodeType, nodeName, "interface", "qtemu-" + config->getOption("name").toString().replace(' ', '_') + '-' + config->getOption(nodeType, nodeName, "name", "Interface_" + QString::number(interfaceNumber)).toString().replace(' ', '_')); config->setOption(nodeType, nodeName, "bridgeInterface", "qtemu-" + config->getOption("name").toString().replace(' ', '_') + "-br" + QString::number(interfaceNumber)); config->setOption(nodeType, nodeName, "hardwareInterface", "eth0"); config->setOption(nodeType, nodeName, "spanningTree", false); config->setOption(nodeType, nodeName, "ifUp", QString()); config->setOption(nodeType, nodeName, "ifDown", QString()); config->setOption(nodeType, nodeName, "hostname", "qtemu_guest"); config->setOption(nodeType, nodeName, "tftp", false); config->setOption(nodeType, nodeName, "tftpPath", QString()); config->setOption(nodeType, nodeName, "bootp", false); config->setOption(nodeType, nodeName, "bootpPath", QString()); config->setOption(nodeType, nodeName, "vlanType", "udp"); config->setOption(nodeType, nodeName, "address", "127.0.0.1"); config->setOption(nodeType, nodeName, "port", "9000"); } endInsertRows(); return true; } bool HostInterfaceModel::removeRows(int row, int count, const QModelIndex & parent) { Q_UNUSED(parent); QString nodeName; beginRemoveRows(parent, row, row + count - 1); for (int i = row; i < (row + count); i++) { nodeName = config->getConfig()->getAllOptionNames(nodeType, "").at(i); config->getConfig()->clearOption(nodeType, "", nodeName); } endRemoveRows(); return true; } qtemu-2.0~alpha1/GuestTools/0000755000175000017500000000000011217515421015730 5ustar fboudrafboudraqtemu-2.0~alpha1/GuestTools/GuestTools.pro0000644000175000017500000000121511214661046020563 0ustar fboudrafboudraPROJECT = GuestTools TEMPLATE = app # DEPENDPATH += . INCLUDEPATH += qextserialport/. QMAKE_LIBDIR += qextserialport/build QT += core \ gui HEADERS += guesttools.h \ modules/guestmodule.h SOURCES += main.cpp \ guesttools.cpp \ FORMS += guesttools.ui \ RESOURCES += resources/resources.qrc CONFIG(debug, debug|release):LIBS += -lqextserialport else:LIBS += -lqextserialport SOURCES += modules/clipboard/clipboardsync.cpp \ modules/guestmodule.cpp HEADERS += modules/clipboard/clipboardsync.h CONFIG += qt CONFIG += warn_on CONFIG += thread unix:DEFINES += _TTY_POSIX_ win32:DEFINES += _TTY_WIN_ qtemu-2.0~alpha1/GuestTools/resources/0000755000175000017500000000000011217515421017742 5ustar fboudrafboudraqtemu-2.0~alpha1/GuestTools/resources/floppy.png0000644000175000017500000000231311122021131021741 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<HIDATxWnEً7K; B/'w(Rp_#+HDH,%Hu0{iNfk{S5^YYkUFn_%{ߥl;Go} *y }܏'lĖ[Ӊ_~Hbkkh<m?}@tۥK˴k!U}W18?dJb_E(MSjZ*b*"7CNu9g* R^'y <ښm\$F=Lc-&oCݖ@M4 HNSr`U*PoA(&eYb@cH-xOQŒe'6l\lI%XL'֗MfoINlFD`b7>[̚)i GLDn/n|k\ =SC /^’L%D=;ŽfrjMh  ,j!UVg@9!׺Wz}qj4uxx(%`8IRA@FÍ|,U1DZKW_;2lvn&/#x#0LH)ECV~7fD Qc~^pZH\$Ih:TT`2RN3$FbfZ.e =P͐y:aQ҈H *ܞ('Z]ܖ$wSi\)8#kp0r#6J OG^FX&k?W^NzȃYp׮}hNOo1(zfuUBz"VBXg%Og&JH?see˭+づc՗pO !! y|_`}<៓M+GP ZV ƨ)kPebvLBwppApQklpwEO!/'$ڨV*J)K;99 dQm4qb |ȸv\ḷjIENDB`qtemu-2.0~alpha1/GuestTools/resources/scale.png0000644000175000017500000001323711122021131021526 0ustar fboudrafboudraPNG  IHDR #ꦷ pHYs7\7\Ǥ vpAg bKGD XIDATxYwTS?(EA (cÊ{C(Hj&( :6HÀRBHBi@;sYoz{>fy: !#l ?!zAuS4q!EDt@L{ʩT\)B@;<ApBv)!ܣrY*xg>ʵ^Ss6860MwY?+cs sb)! 6^l(^aO쏰3R,'nVbb|6#ĝr\q le((zWt"Buc\+cC"3B^ \i^4w&CYZ> u@u[m.M.5f,"8_gs+cpʤFՍz̡@2uWIMֻeY1T߈G${~ ^WzBLpk9bEj }cG3o'j@tdEV>:;Sɺ˕NbwF1v=5)Z@*d;&7s Ɔ[zFKW/~2cO)1P-JбyQ<56ekog?e`͹Fpc7 ~l*5ǯAeԘ|D=۸yNTc=kuȓMQ1陖+@qy%hcd߈U03lWrNޡM ĵ4- >Sf ? 0Uv@y]^{* %T) ȶ9HۿtɖylޜEhO<*ޞ=::)ʚKZvp`a%{ү6dlkM67e즒fWƻ- `aƪ҆{@Q]{}n,yK6Q/M}g3ӇL9UF0BVnoFyQ6lf~> kM;EYSDx]9*vcy*ndk]6\6 Gs cq+7:Z}a Ra  zz{`uG=pS[nuVwa:t-/aLwJгgrw_wb}oZv07km2?nh: مgi!N:22>qt;iCʍܬC|8ozCs07yH ;ؐ`v/F YLbYjl֗20] H|p0DxABc]x!dA(:CK[_ۀRЂyȯA1   ,l{o5Z /g\r [EkӕII<[la۪\)VeF*FHit NAE=`ZZ TgӮs nSrHVgxQi<>wOK} NaE^\$ik{G`G:F̆u;Z"$B,C^$LP:M` H Z36TM@G.@+Ef՞~#DLH~I8?R(fUD4݆B;{3ԃaơfjzTr<*x?0q'n ͐B糃@Śk Hܲ,ɥVfXҳp6=LIan"bel MV]* ij!"f ѓ/mA"`':6@+U꒖vdj8Qӏ`pkI&:)`48x7!r$ ͽ)@ Ruِ ґQ _mਝEѩcPnh,[ mCDht{#EO6vvcd!bLCD|D FJ,k0m/E?Oޝ =DDg"bwd7PXfd̾c ״ YyoS CEQʝHVcx#;bvʟ5G3ElTJ{(Lt@.DG.` KTX1BPŧ.}2ȋR@}K-@t(|SC'fxoS3 5 V NfG(܅A3kԌX,2y/ڭה:h9#= Gm};P=b10"YqvVXxxtq=i~'\3}|3&]}Oրo>ˮ(Yr_>s:l"w'95P!ҔRd '{W>AI$I:A)ٌP\.YO\x9P^*fBa!ҾNf:%gLGEh\~wL J0Ո4ah}ޣ +/=}+e!|Ԛ_ X$gjO͜{L*\}p)q.!zոQS[MS!YcRt]6ɊxK ۽RvtIxYByH"ihpE ݴ4yPUӛweV'}V~vIr.C~.hME{AWc}`\*N8QO5i;caƑR+郿KQt;Mpn3J2Yh5fĽǰ9R1H5/$r!=%y>y&. ?Bnsݷ8S ;V=-t5T'}a7c~ܸF衖G[FZ~ꩋfh7\}?S ]3 ;rLZC:pb܈ ڋeh+Z&vQuJ ൡ*t׊@^w!߂bt:?z=o4݇W`sЭVmo5,x3xqY˸ ghUmݒ0-Sh⩐"=,`/³l_sr}J| ۤ\O;P?*lzz#qHewy+<8i8 E򰦸To>6Z|9qgbSU|f$hO ;[~Y(1:~`׫[ ?(Mp"v tyMMbǣ %;3ಕ1'" KFfV,H7yl༪\ЄĮrљ_IK*5tj-'arJB^ 5sXS~['[:Ȣsu)3k_SSg9ߦi8.bOaw{lRHfC rgA8u8qho6]vސj_Fߌ^6=\e^pF#!MI/%8㵄vJnYB=ڻ²\=nFD+ZbG~\)|ן*i>?0U*=i#ni)K\"ڨ{*dNlg7޸Ѿ#}S hXlNś)wY7x]FG i5.T# )h 88td.N˱@C0! qR)cg770+'T*%y%%`h}b<5J@Á5P^OQxߐ/0FGgc;lt_}t}HM':)!pL8pMKj*u.`B\o7/Q}h_`xÞ4\6" 1=6z:xFhn Q"zTXtSoftwarex+//.NN,H/J6XS\IENDB`qtemu-2.0~alpha1/GuestTools/resources/reload.png0000644000175000017500000000420611122021131021701 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxŗ{Wǿy}߽w(`Dj"?4!&H4 b J4!XRbe7sg̜s;eY|ɽ}{~wNH)񿈀;m5|*o\[X\R\nKBػ7"?_5n dIg;/^^ѻNX0%Jc8<^>r=d^d;ݷ9k箽{5uM}eU>UJpqGJ'ؼn qĖnq} U j 9+6c_[`0$7:Ѕs-g&nun^яTq((1048(d s,vb^aJ2u-8Hծs%\K(Gw(\fѕB,11 l23WT!0I(vd7/OE-&mKN xK'XNʬ8PoQcC: 6:[0M] 9q <|@J22 ?Ly[ S =3b@d?n;/&t A^cwFj^N+qeFz'369005EpT9(`sdΫo9f$ h$FPlP zbӑr9}ЬjƍGP QU@҃FXr/G}8jء"hG6j$-H,nCa):D*qƢC;C"₰'@4fm( i,d>)ja2:NA M ^$5 6}Dm]?-x賔V G(6` F.0O6q,EvLyUNiW9Lnpld;n9*3+~%s{"wEng*iR~[NbD@Hj Hb< V(` hӸV)G8ԻVP #efXFB!\!!ՀZj+Ca`x$Tl_M<6)0JSCP)wilrs_7^l6PIl_mVZPՅf\$()BD,YAUbp 'RZ^ VvTiQr 1MҤ!n })@6a\\T\aBD\2I }0!ߩY>)'9 RF)Pc 둥!Q].ndnIEh.ڟ 9m .-| yL\Y ^/tl~#ƋSS#0B]3DKk`R M󯗤#ɧ790r23-)oq-: B2tAyVO,R|NQ`3 @v)I0JbE#M; &4a٘- KCŋ͈{e bFd%eM h%c}AE)N$ç{ww}:SZso6'ǂsQ@ @8 a!\N\iq f)zJr8^íOjͣ:n6}nkBřJF@:co 'qE~I9kys;8@y~Pk>XL\}?#< (P"^ BY#<"y}+fg!;j?0x9ǛߩĵFTԾ$@w~ T]+5ݱׁ 8J 8ƌ7I ` 0]p[uafXS ZۈJW/tV6H/</:T3 DxQ=&9FxOD\*J S8fs'`p +l:b4SsEB@&O.d jrWS @NhcK{ FD#wW!9TA\x{IuHRCCL;YN0e=VNf'I䀤@ʊN(X|"jUNlũ@vQ41<$(dIENDB`qtemu-2.0~alpha1/GuestTools/resources/other.png0000644000175000017500000000432011122021131021551 0ustar fboudrafboudraPNG  IHDR szz pHYs7\7\ǤbKGDBIDATxڭW PSg>]|*bΔ _](<@! cDPUPlj*-ZI48LwfEfL94I QbŠneURbp]X2>ȥ^"?p/((GQ 6 ͛|WˬXffh3Sedĉ[s75z@ |Ҕ ƲeKa;,X8fς~+[c>wN>qm:|0߷oOb񒅰nǍ? >N* zj*U+>|tܩqGșHLC"cc#$AL|7;nS`{eii df-L *M^-YT#["zTXtSoftwarex+//.NN,H/J6XS\IENDB`qtemu-2.0~alpha1/GuestTools/resources/cdrom.png0000644000175000017500000000430411122021131021536 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<AIDATxWkUW^{}΋iQ)-NRLL! " JKuBMX E4U[)):3<Ν:~{[fdR:{o9BkMϡ6Ǯ]T&ٔX|ܲTk$bI%)uruSlnOw?6Ƈ)ɮrjjXbӤd$ {)Eg|"pfU>#-hH<#)@@0j2 Xx>߸q-uɲE?M`۶mr'{+VD#T&4( T 2<|__<7߾[S Fpy_b$LSS6 IkAD@n1yFĝwu}iڋΟZ,`D UIn@ĐXiIL ABr|*>ukƸҔ% ɕ-YU &iB ŅBD7k׋gF9wvZ8wNW2$ [vHtYMDUBP  (<:vȲ{GQO0Q.gNϜ?xC&Ra%x@ԒN?R%8[h`.4r5"c"Q&WhpY"JC-р5b1šܹwKx8G~YT(,IrdMyfe0ݒFvF26lذ.T*uY+~9Kȿ%8K!ڈ($RR՛ {^$p[TkDV*;vNwvfYV}Fە ReC0IlJ: @1;^tL]Tŋkq碑_HhX<_V|cŭd:$T#14D_rGFFla<8Nsd.: &EJv)SL7@`:pDr uyGtz X6VĈmۦϭ1O`\(D2UB4@MWiM3N9ws{D4a$S$\'ͳ? "ny{wģ Π*6!nL/ϝ?iZ# q XGqb;DRqxjh/q>;6G,΅l"  ^-B Eyt(_q?٧DTr{, |EcȄS6_rw_18<z0Tp<,XTΛSlhH4IZZT\"@V5/`6K#91QoFa'Fو&=r\kDaIr\ADHj$|߼ƜԎ{~'\*8([@B.fٕ.ԸFH]йg{%k^iG oa j d2%ࢶHq=o^(0ӽzVZ7{g<>hQP@4|ϜO}k cLV1 y`Ձ?~)9a?_ czc i\(j-*û^H¶:uׯg3Ƈ~ Ϟ3agc]wwRc9DŽHbsܞoDe.zݟ]ӏ.]TFB@Sp;w/ۻ͓os;_Fpd{77l9d:57bL9\)_(Dz.^92w&\%"|oiXW7x2aoER۩IENDB`qtemu-2.0~alpha1/GuestTools/resources/sound.png0000644000175000017500000000344111122021131021563 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxklgά1v۵P+$@mZh J%P~ TE ^$Hm()$i$m%AfZ(KǎS;l{w;;*IJ)g[v9-cYq<ax//lTKOx x zN JDRl1u? v꣗ZǷөKa\OH"DV( ᅇ&lzx_㎱_/^%1>܍d2_W0/ $<^r3fSf=ɇJkQ@Ua}Ew5K;d Y!c`,$/{ȜGU`Y7\.'`4Y-% sO;9G߹W(s@T|ym<p,n7`6\!tvөmO"ưkϓ7WU X6r&|L抽 X0HۜR,\nN6L1[?FiU{pnFUWoQY]ͼ!8Dz 2dX!%%(+¯&A" $ a`T9w5dny$3-y'!Am\_5|gNÑ7Zι 0:1Jً^B>,JXbWav,%B&ŠR<0IQܴk{jC=^iD<E0Eu>b8BH%c\ I zK{kojOvM;ߊ$ִUޯ#] 0 hnjC~׆shk(nFG$ƺP>3Lrtceh55Z^~u WG`9Vu`*]aAyaZf@ב5jX&`x;y7|M_<ֶ|Ncݚ() `d|'Nc4\ cy9*@#mxr e%z' MsXdoAXOd1V; 0u 7L̯R1|jU?r#|,A|?WssS=Q:h3=_PS@uA8&$T c81,A2j()^?laKW- p+_PMMrG_?.^Y|A9aDZ5I0 !Xd'DX"XC9i]`tn_,\ͺit\E2@63GfEpY03HWSnf3I4g80HN бeߩrlF̆QAF,.)Ҥma."YUn{ zNg2ѡ',[㣻o -$Utit-o~+^EM*sIENDB`qtemu-2.0~alpha1/GuestTools/resources/resources.qrc0000644000175000017500000000070411122021131022445 0ustar fboudrafboudra camera.png cdrom.png floppy.png fullscreen.png mouse.png other.png qtemu.png reload.png scale.png sound.png usb.png qtemu-2.0~alpha1/GuestTools/resources/mouse.png0000644000175000017500000000300311122021131021555 0ustar fboudrafboudraPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE///NNN YYY>>>HHHTTTOOOOOOLLLddd444 DDD+++)))///mmm999~~~~~~???'''iiicccuuuȥ˼ϳʿԶ׾ۣ|||@@\\Ϲ555===TTTXXXcccgggoootttwww}}}66 ?}tRNS  "#%&-01239>CEFHKKWX]`abghijqw|n@IDATx]jAƻg6ɚ!1/?xl,XDd𽊻ZuM:38(cp9."(zHk%Kq nαf3/om vBMthEyMw$r*,"& IENDB`qtemu-2.0~alpha1/GuestTools/resources/camera.png0000644000175000017500000000163211122021131021663 0ustar fboudrafboudraPNG  IHDR ssBITUF pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATu7;wDQI $F!AD6hoiL0?QXYZ vfvgg~D5Lb;_ͭ彴ѨIȞ~?$ boE5RJOm.ZuB_(]*,Jq,М*?)%,$tͩ -2]֬y'^ԕXw%WteiE$-9v[.5mŖL eZQDߔҼ1K Pb֦,FQC)MZ0g΄g]aҖ R۲n6@פYwiU:J2m_@H&46R (ٖŖ`T/EZ#h M 1P* ISr%N([ݦrضQh/ȴ9ҳ3)%5ԵfhɊN5.fKdž\&F,H+A-M)Mʟ.A"VT(SK@#G=CM(j JC-ybKCJOFظLb;ءkZb aGIENDB`qtemu-2.0~alpha1/GuestTools/resources/qtemu.png0000644000175000017500000000354311122021131021571 0ustar fboudrafboudraPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATXۋeGkUϭg:3 &3Ɉh!`@%ې !/ys >̟$8QD/%mNϭ9{WCsD,(޵[Z?ybu*:Dw=e(~掻;F:cf[7gN}U("R802]֙{6r?tX7'prJ JJT J AUA4smnܜS@?|sw.H]^%DlBox}5A2] ' $q A߷Jk+aM#BPYq]rB*Nc.T&9fB lݎ9S8Rqk V yw>1S!A *1 ‡7v>{j ;K?4Yp`fR4:A pAVA6evv(xTS F7MЦ#0%|rf`5Tdp0 fNPTj$YtNWf Y]`U =PTa8`.^>`T;y_‡ .ڲ((a1 v( h ͼt/gp|2Tj (Xf]ptk^=3t9 :SpDhi* 1,3B9B1sl%DD4B*}H2K.{)9W &Kۧ@VJ{E&YسBz(N9!8A?HU^!$bCEGIJLPRTJgIDAT8c`$Դ5.UV<@WATUՖWek1hWVVUUVUVG6eD'TDz ĐBWh TTA@ 8A7HAE@VdGVE'DAi2tA@'XAQ6#`V;XAPq cn`Fh*FNm@sd@ m@g9BXš#- yӆP@ j[BH($f`lx8;:999:8:yxz3/3s KHJH p20rp I)(hhik++JKr0<m3!IENDB`qtemu-2.0~alpha1/GuestTools/guesttools.cpp0000644000175000017500000000622411215275463020657 0ustar fboudrafboudra#include "guesttools.h" #include "modules/clipboard/clipboardsync.h" //#include //#include #include #include #include #include #include GuestTools::GuestTools(QWidget *parent) : QWidget(parent) { ui.setupUi(this); blockSize = 0; initSerialPort(); createActions(); createTrayIcon(); createModules(); connect(port, SIGNAL(readyRead()), this, SLOT(ioReceived())); trayIcon->show(); } GuestTools::~GuestTools() { } void GuestTools::createTrayIcon() { trayIconMenu = new QMenu(this); trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); trayIcon = new QSystemTrayIcon(this); trayIcon->setIcon(QIcon(":/guestTray.png")); setWindowIcon(QIcon(":/guestTray.png")); trayIcon->setContextMenu(trayIconMenu); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(clickedIcon(QSystemTrayIcon::ActivationReason))); } void GuestTools::createActions() { quitAction = new QAction(tr("&Quit"), this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); } void GuestTools::clickedIcon(QSystemTrayIcon::ActivationReason reason) { if(reason == QSystemTrayIcon::DoubleClick) { if(this->isVisible()) this->hide(); else this->show(); } } void GuestTools::ioReceived() { //connect the stream QDataStream stream(port); stream.setVersion(QDataStream::Qt_4_0); //get the size of the data chunk if (blockSize == 0) { if (port->bytesAvailable() < (int)sizeof(quint16)) return; stream >> blockSize; } //don't continue until we have all the data if (port->bytesAvailable() < blockSize) return; QString usesModule; QVariant data; stream >> usesModule >> data; blockSize = 0; for(int i = 0; i < modules.size(); i++) { if(modules.at(i)->moduleName() == usesModule) { qDebug() << "received data from"<< usesModule; modules.at(i)->receiveData(data); return; } } qDebug() << "invalid module" << usesModule; } void GuestTools::createModules() { modules.append(new ClipboardSync(this)); } void GuestTools::dataSender(QString module, QVariant &data) { //so that we don't try to send more than one at a time //sender()->blockSignals(true); QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); out << (quint16)0; out << module; out << data; out.device()->seek(0); out << (quint16)(block.size() - sizeof(quint16)); port->write(block); //re-allow signals //sender()->blockSignals(false); } void GuestTools::initSerialPort() { port = new QextSerialPort("COM1", QextSerialPort::EventDriven); port->setBaudRate(BAUD19200); port->setFlowControl(FLOW_OFF); port->setParity(PAR_NONE); port->setDataBits(DATA_8); port->setStopBits(STOP_2); port->open(QIODevice::ReadWrite); if (!(port->lineStatus() & LS_DSR)) { qDebug() << "warning: QtEmu not listening"; } } qtemu-2.0~alpha1/GuestTools/qextserialport/0000755000175000017500000000000011217515417021023 5ustar fboudrafboudraqtemu-2.0~alpha1/GuestTools/qextserialport/qextserialbase.h0000644000175000017500000001526511214517420024212 0ustar fboudrafboudra#ifndef _QEXTSERIALBASE_H_ #define _QEXTSERIALBASE_H_ #include #include #include #include /*if all warning messages are turned off, flag portability warnings to be turned off as well*/ #ifdef _TTY_NOWARN_ #define _TTY_NOWARN_PORT_ #endif /*macros for warning and debug messages*/ #ifdef _TTY_NOWARN_PORT_ #define TTY_PORTABILITY_WARNING(s) #else #define TTY_PORTABILITY_WARNING(s) qWarning(s) #endif /*_TTY_NOWARN_PORT_*/ #ifdef _TTY_NOWARN_ #define TTY_WARNING(s) #else #define TTY_WARNING(s) qWarning(s) #endif /*_TTY_NOWARN_*/ /*line status constants*/ #define LS_CTS 0x01 #define LS_DSR 0x02 #define LS_DCD 0x04 #define LS_RI 0x08 #define LS_RTS 0x10 #define LS_DTR 0x20 #define LS_ST 0x40 #define LS_SR 0x80 /*error constants*/ #define E_NO_ERROR 0 #define E_INVALID_FD 1 #define E_NO_MEMORY 2 #define E_CAUGHT_NON_BLOCKED_SIGNAL 3 #define E_PORT_TIMEOUT 4 #define E_INVALID_DEVICE 5 #define E_BREAK_CONDITION 6 #define E_FRAMING_ERROR 7 #define E_IO_ERROR 8 #define E_BUFFER_OVERRUN 9 #define E_RECEIVE_OVERFLOW 10 #define E_RECEIVE_PARITY_ERROR 11 #define E_TRANSMIT_OVERFLOW 12 #define E_READ_FAILED 13 #define E_WRITE_FAILED 14 /*! * Enums for port settings. */ enum NamingConvention { WIN_NAMES, IRIX_NAMES, HPUX_NAMES, SUN_NAMES, DIGITAL_NAMES, FREEBSD_NAMES, OPENBSD_NAMES, LINUX_NAMES }; enum BaudRateType { BAUD50, //POSIX ONLY BAUD75, //POSIX ONLY BAUD110, BAUD134, //POSIX ONLY BAUD150, //POSIX ONLY BAUD200, //POSIX ONLY BAUD300, BAUD600, BAUD1200, BAUD1800, //POSIX ONLY BAUD2400, BAUD4800, BAUD9600, BAUD14400, //WINDOWS ONLY BAUD19200, BAUD38400, BAUD56000, //WINDOWS ONLY BAUD57600, BAUD76800, //POSIX ONLY BAUD115200, BAUD128000, //WINDOWS ONLY BAUD256000 //WINDOWS ONLY }; enum DataBitsType { DATA_5, DATA_6, DATA_7, DATA_8 }; enum ParityType { PAR_NONE, PAR_ODD, PAR_EVEN, PAR_MARK, //WINDOWS ONLY PAR_SPACE }; enum StopBitsType { STOP_1, STOP_1_5, //WINDOWS ONLY STOP_2 }; enum FlowType { FLOW_OFF, FLOW_HARDWARE, FLOW_XONXOFF }; /** * structure to contain port settings */ struct PortSettings { BaudRateType BaudRate; DataBitsType DataBits; ParityType Parity; StopBitsType StopBits; FlowType FlowControl; long Timeout_Millisec; }; /*! * \author Stefan Sander * \author Michal Policht * * A common base class for Win_QextSerialBase, Posix_QextSerialBase and QextSerialPort. */ class QextSerialBase : public QIODevice { Q_OBJECT public: enum QueryMode { Polling, EventDriven }; protected: QMutex* mutex; QString port; PortSettings Settings; ulong lastErr; QextSerialBase::QueryMode _queryMode; virtual qint64 readData(char * data, qint64 maxSize)=0; virtual qint64 writeData(const char * data, qint64 maxSize)=0; public: QextSerialBase(); QextSerialBase(const QString & name); virtual ~QextSerialBase(); virtual void construct(); virtual void setPortName(const QString & name); virtual QString portName() const; /**! * Get query mode. * \return query mode. */ inline QextSerialBase::QueryMode queryMode() const { return _queryMode; }; /*! * Set desired serial communication handling style. You may choose from polling * or event driven approach. This function does nothing when port is open; to * apply changes port must be reopened. * * In event driven approach read() and write() functions are acting * asynchronously. They return immediately and the operation is performed in * the background, so they doesn't freeze the calling thread. * To determine when operation is finished, QextSerialPort runs separate thread * and monitors serial port events. Whenever the event occurs, adequate signal * is emitted. * * When polling is set, read() and write() are acting synchronously. Signals are * not working in this mode and some functions may not be available. The advantage * of polling is that it generates less overhead due to lack of signals emissions * and it doesn't start separate thread to monitor events. * * Generally event driven approach is more capable and friendly, although some * applications may need as low overhead as possible and then polling comes. * * \param mode query mode. */ virtual void setQueryMode(QueryMode mode); virtual void setBaudRate(BaudRateType)=0; virtual BaudRateType baudRate() const; virtual void setDataBits(DataBitsType)=0; virtual DataBitsType dataBits() const; virtual void setParity(ParityType)=0; virtual ParityType parity() const; virtual void setStopBits(StopBitsType)=0; virtual StopBitsType stopBits() const; virtual void setFlowControl(FlowType)=0; virtual FlowType flowControl() const; virtual void setTimeout(long)=0; virtual bool open(OpenMode mode)=0; virtual bool isSequential() const; virtual void close()=0; virtual void flush()=0; virtual qint64 size() const = 0; virtual qint64 bytesAvailable() const = 0; virtual bool atEnd() const; virtual void ungetChar(char c)=0; virtual qint64 readLine(char * data, qint64 maxSize); virtual ulong lastError() const; virtual void translateError(ulong error)=0; virtual void setDtr(bool set=true)=0; virtual void setRts(bool set=true)=0; virtual ulong lineStatus()=0; signals: /** * This signal is emitted whenever port settings are updated. * \param valid \p true if settings are valid, \p false otherwise. * * @todo implement. */ // void validSettings(bool valid); /*! * This signal is emitted whenever dsr line has changed its state. You may * use this signal to check if device is connected. * \param status \p true when DSR signal is on, \p false otherwise. * * \see lineStatus(). */ void dsrChanged(bool status); }; #endif qtemu-2.0~alpha1/GuestTools/qextserialport/qextserialbase.cpp0000644000175000017500000001441411214517420024540 0ustar fboudrafboudra#include "qextserialbase.h" /*! \fn QextSerialBase::QextSerialBase() Default constructor. */ QextSerialBase::QextSerialBase() : QIODevice() { #ifdef _TTY_WIN_ setPortName("COM1"); #elif defined(_TTY_IRIX_) setPortName("/dev/ttyf1"); #elif defined(_TTY_HPUX_) setPortName("/dev/tty1p0"); #elif defined(_TTY_SUN_) setPortName("/dev/ttya"); #elif defined(_TTY_DIGITAL_) setPortName("/dev/tty01"); #elif defined(_TTY_FREEBSD_) setPortName("/dev/ttyd1"); #elif defined(_TTY_OPENBSD_) setPortName("/dev/tty00"); #else setPortName("/dev/ttyS0"); #endif construct(); } /*! \fn QextSerialBase::QextSerialBase(const QString & name) Construct a port and assign it to the device specified by the name parameter. */ QextSerialBase::QextSerialBase(const QString & name) : QIODevice() { setPortName(name); construct(); } /*! \fn QextSerialBase::~QextSerialBase() Standard destructor. */ QextSerialBase::~QextSerialBase() { delete mutex; } /*! \fn void QextSerialBase::construct() Common constructor function for setting up default port settings. (115200 Baud, 8N1, Hardware flow control where supported, otherwise no flow control, and 0 ms timeout). */ void QextSerialBase::construct() { lastErr = E_NO_ERROR; Settings.BaudRate=BAUD115200; Settings.DataBits=DATA_8; Settings.Parity=PAR_NONE; Settings.StopBits=STOP_1; Settings.FlowControl=FLOW_HARDWARE; Settings.Timeout_Millisec=500; mutex = new QMutex( QMutex::Recursive ); setOpenMode(QIODevice::NotOpen); } void QextSerialBase::setQueryMode(QueryMode mechanism) { _queryMode = mechanism; } /*! \fn void QextSerialBase::setPortName(const QString & name) Sets the name of the device associated with the object, e.g. "COM1", or "/dev/ttyS0". */ void QextSerialBase::setPortName(const QString & name) { port = name; } /*! \fn QString QextSerialBase::portName() const Returns the name set by setPortName(). */ QString QextSerialBase::portName() const { return port; } /*! \fn BaudRateType QextSerialBase::baudRate(void) const Returns the baud rate of the serial port. For a list of possible return values see the definition of the enum BaudRateType. */ BaudRateType QextSerialBase::baudRate(void) const { return Settings.BaudRate; } /*! \fn DataBitsType QextSerialBase::dataBits() const Returns the number of data bits used by the port. For a list of possible values returned by this function, see the definition of the enum DataBitsType. */ DataBitsType QextSerialBase::dataBits() const { return Settings.DataBits; } /*! \fn ParityType QextSerialBase::parity() const Returns the type of parity used by the port. For a list of possible values returned by this function, see the definition of the enum ParityType. */ ParityType QextSerialBase::parity() const { return Settings.Parity; } /*! \fn StopBitsType QextSerialBase::stopBits() const Returns the number of stop bits used by the port. For a list of possible return values, see the definition of the enum StopBitsType. */ StopBitsType QextSerialBase::stopBits() const { return Settings.StopBits; } /*! \fn FlowType QextSerialBase::flowControl() const Returns the type of flow control used by the port. For a list of possible values returned by this function, see the definition of the enum FlowType. */ FlowType QextSerialBase::flowControl() const { return Settings.FlowControl; } /*! \fn bool QextSerialBase::isSequential() const Returns true if device is sequential, otherwise returns false. Serial port is sequential device so this function always returns true. Check QIODevice::isSequential() documentation for more information. */ bool QextSerialBase::isSequential() const { return true; } /*! \fn bool QextSerialBase::atEnd() const This function will return true if the input buffer is empty (or on error), and false otherwise. Call QextSerialBase::lastError() for error information. */ bool QextSerialBase::atEnd() const { if (size()) { return true; } return false; } /*! \fn qint64 QextSerialBase::readLine(char * data, qint64 maxSize) This function will read a line of buffered input from the port, stopping when either maxSize bytes have been read, the port has no more data available, or a newline is encountered. The value returned is the length of the string that was read. */ qint64 QextSerialBase::readLine(char * data, qint64 maxSize) { qint64 numBytes = bytesAvailable(); char* pData = data; if (maxSize < 2) //maxSize must be larger than 1 return -1; /*read a byte at a time for MIN(bytesAvail, maxSize - 1) iterations, or until a newline*/ while (pData<(data+numBytes) && --maxSize) { readData(pData, 1); if (*pData++ == '\n') { break; } } *pData='\0'; /*return size of data read*/ return (pData-data); } /*! \fn ulong QextSerialBase::lastError() const Returns the code for the last error encountered by the port, or E_NO_ERROR if the last port operation was successful. Possible error codes are: \verbatim Error Explanation --------------------------- ------------------------------------------------------------- E_NO_ERROR No Error has occured E_INVALID_FD Invalid file descriptor (port was not opened correctly) E_NO_MEMORY Unable to allocate memory tables (POSIX) E_CAUGHT_NON_BLOCKED_SIGNAL Caught a non-blocked signal (POSIX) E_PORT_TIMEOUT Operation timed out (POSIX) E_INVALID_DEVICE The file opened by the port is not a character device (POSIX) E_BREAK_CONDITION The port detected a break condition E_FRAMING_ERROR The port detected a framing error (usually caused by incorrect baud rate settings) E_IO_ERROR There was an I/O error while communicating with the port E_BUFFER_OVERRUN Character buffer overrun E_RECEIVE_OVERFLOW Receive buffer overflow E_RECEIVE_PARITY_ERROR The port detected a parity error in the received data E_TRANSMIT_OVERFLOW Transmit buffer overflow E_READ_FAILED General read operation failure E_WRITE_FAILED General write operation failure \endverbatim */ ulong QextSerialBase::lastError() const { return lastErr; } qtemu-2.0~alpha1/GuestTools/qextserialport/qextserialenumerator.h0000644000175000017500000001211411214661046025453 0ustar fboudrafboudra/*! * \file qextserialenumerator.h * \author Michal Policht * \see QextSerialEnumerator */ #ifndef _QEXTSERIALENUMERATOR_H_ #define _QEXTSERIALENUMERATOR_H_ #include #include #include #ifdef _TTY_WIN_ #include #include #include #endif /*_TTY_WIN_*/ #ifdef Q_OS_MAC #include #endif /*! * Structure containing port information. */ struct QextPortInfo { QString portName; ///< Port name. QString physName; ///< Physical name. QString friendName; ///< Friendly name. QString enumName; ///< Enumerator name. int vendorID; ///< Vendor ID. int productID; ///< Product ID }; #ifdef _TTY_WIN_ #include class QextSerialEnumerator; class QextSerialRegistrationWidget : public QWidget { Q_OBJECT public: QextSerialRegistrationWidget( QextSerialEnumerator* qese ) { this->qese = qese; } ~QextSerialRegistrationWidget( ) { } protected: QextSerialEnumerator* qese; bool winEvent( MSG* message, long* result ); }; #endif // _TTY_WIN_ /*! * Serial port enumerator. This class provides list of ports available in the system. * * Windows implementation is based on Zach Gorman's work from * The Code Project (http://www.codeproject.com/system/setupdi.asp). * * OS X implementation, see * http://developer.apple.com/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_Finding_Devices/chapter_4_section_2.html */ class QextSerialEnumerator : public QObject { Q_OBJECT public: QextSerialEnumerator( ); ~QextSerialEnumerator( ); #ifdef _TTY_WIN_ LRESULT onDeviceChangeWin( WPARAM wParam, LPARAM lParam ); private: /*! * Get value of specified property from the registry. * \param key handle to an open key. * \param property property name. * \return property value. */ static QString getRegKeyValue(HKEY key, LPCTSTR property); /*! * Get specific property from registry. * \param devInfo pointer to the device information set that contains the interface * and its underlying device. Returned by SetupDiGetClassDevs() function. * \param devData pointer to an SP_DEVINFO_DATA structure that defines the device instance. * this is returned by SetupDiGetDeviceInterfaceDetail() function. * \param property registry property. One of defined SPDRP_* constants. * \return property string. */ static QString getDeviceProperty(HDEVINFO devInfo, PSP_DEVINFO_DATA devData, DWORD property); /*! * Search for serial ports using setupapi. * \param infoList list with result. */ static void setupAPIScan(QList & infoList); void setUpNotificationWin( ); static bool getDeviceDetailsWin( QextPortInfo* portInfo, HDEVINFO devInfo, PSP_DEVINFO_DATA devData, WPARAM wParam = DBT_DEVICEARRIVAL ); static void enumerateDevicesWin( HDEVINFO devInfo, GUID* guidDev, QList* infoList ); QextSerialRegistrationWidget* notificationWidget; HDEVNOTIFY notificationHandle; #endif /*_TTY_WIN_*/ #ifdef _TTY_POSIX_ #ifdef Q_OS_MAC private: /*! * Search for serial ports using IOKit. * \param infoList list with result. */ static void scanPortsOSX(QList & infoList); static void iterateServicesOSX(io_object_t service, QList & infoList); static bool getServiceDetailsOSX( io_object_t service, QextPortInfo* portInfo ); void setUpNotificationOSX( ); void onDeviceDiscoveredOSX( io_object_t service ); void onDeviceTerminatedOSX( io_object_t service ); friend void deviceDiscoveredCallbackOSX( void *ctxt, io_iterator_t serialPortIterator ); friend void deviceTerminatedCallbackOSX( void *ctxt, io_iterator_t serialPortIterator ); IONotificationPortRef notificationPortRef; #else // Q_OS_MAC /*! * Search for serial ports on unix. * \param infoList list with result. */ // static void scanPortsNix(QList & infoList); #endif // Q_OS_MAC #endif /* _TTY_POSIX_ */ public: /*! * Get list of ports. * \return list of ports currently available in the system. */ static QList getPorts(); void setUpNotifications( ); signals: void deviceDiscovered( const QextPortInfo & info ); void deviceRemoved( const QextPortInfo & info ); }; #endif /*_QEXTSERIALENUMERATOR_H_*/ qtemu-2.0~alpha1/GuestTools/qextserialport/qextserialport.cpp0000644000175000017500000000614411214517420024613 0ustar fboudrafboudra /*! \class QextSerialPort \author Stefan Sander \author Michal Policht A cross-platform serial port class. This class encapsulates a serial port on both POSIX and Windows systems. The user will be notified of errors and possible portability conflicts at run-time by default - this behavior can be turned off by defining _TTY_NOWARN_ (to turn off all warnings) or _TTY_NOWARN_PORT_ (to turn off portability warnings) in the project. You may choose from polling or event driven API. For details check setQueryMode() documentation. \note On Windows NT/2000/XP this class uses Win32 serial port functions by default. The user may select POSIX behavior under NT, 2000, or XP ONLY by defining _TTY_POSIX_ in the project. I can make no guarantees as to the quality of POSIX support under NT/2000 however. */ #include #include "qextserialport.h" /*! Default constructor. Note that the naming convention used by a QextSerialPort constructed with this constructor will be determined by #defined constants, or lack thereof - the default behavior is the same as _TTY_LINUX_. Possible naming conventions and their associated constants are: \verbatim Constant Used By Naming Convention ---------- ------------- ------------------------ _TTY_WIN_ Windows COM1, COM2 _TTY_IRIX_ SGI/IRIX /dev/ttyf1, /dev/ttyf2 _TTY_HPUX_ HP-UX /dev/tty1p0, /dev/tty2p0 _TTY_SUN_ SunOS/Solaris /dev/ttya, /dev/ttyb _TTY_DIGITAL_ Digital UNIX /dev/tty01, /dev/tty02 _TTY_FREEBSD_ FreeBSD /dev/ttyd0, /dev/ttyd1 _TTY_LINUX_ Linux /dev/ttyS0, /dev/ttyS1 Linux /dev/ttyS0, /dev/ttyS1 \endverbatim The object will be associated with the first port in the system, e.g. COM1 on Windows systems. See the other constructors if you need to use a port other than the first. */ QextSerialPort::QextSerialPort(QueryMode mode) : QextBaseType(mode) {} /*! Constructs a serial port attached to the port specified by name. name is the name of the device, which is windowsystem-specific, e.g."COM1" or "/dev/ttyS0". \see setQueryMode(). */ QextSerialPort::QextSerialPort(const QString & name, QueryMode mode) : QextBaseType(name, mode) { } /*! Constructs a port with default name and settings specified by the settings parameter. \see setQueryMode(). */ QextSerialPort::QextSerialPort(PortSettings const& settings, QueryMode mode) : QextBaseType(settings, mode) {} /*! Constructs a port with the name and settings specified. \see setQueryMode(). */ QextSerialPort::QextSerialPort(const QString & name, PortSettings const& settings, QueryMode mode) : QextBaseType(name, settings, mode) {} /*! Copy constructor. \deprecated */ QextSerialPort::QextSerialPort(const QextSerialPort& s) : QextBaseType(s) {} /*! \fn QextSerialPort& QextSerialPort::operator=(const QextSerialPort& s) Overrides the = operator. \deprecated */ QextSerialPort& QextSerialPort::operator=(const QextSerialPort& s) { return (QextSerialPort&)QextBaseType::operator=(s); } /*! \fn QextSerialPort::~QextSerialPort() Standard destructor. */ QextSerialPort::~QextSerialPort() {} qtemu-2.0~alpha1/GuestTools/qextserialport/qextserialport.pro0000644000175000017500000000264611214517420024634 0ustar fboudrafboudraPROJECT = qextserialport TEMPLATE = lib CONFIG += debug_and_release CONFIG += qt CONFIG += warn_on CONFIG += thread CONFIG += dll #CONFIG += staticlib !win32:QT -= gui OBJECTS_DIR = build/obj MOC_DIR = build/moc DEPENDDIR = . INCLUDEDIR = . HEADERS = qextserialbase.h \ qextserialport.h \ qextserialenumerator.h SOURCES = qextserialbase.cpp \ qextserialport.cpp \ qextserialenumerator.cpp unix:HEADERS += posix_qextserialport.h unix:SOURCES += posix_qextserialport.cpp unix:DEFINES += _TTY_POSIX_ win32:HEADERS += win_qextserialport.h win32:SOURCES += win_qextserialport.cpp win32:DEFINES += _TTY_WIN_ win32:DEFINES += WINVER=0x0501 # needed for mingw to pull in appropriate dbt business win32:LIBS += -lsetupapi DESTDIR = build #DESTDIR = examples/enumerator/debug #DESTDIR = examples/qespta/debug #DESTDIR = examples/event/debug CONFIG(debug, debug|release) { TARGET = qextserialportd } else { TARGET = qextserialport } unix:VERSION = 1.2.0 qtemu-2.0~alpha1/GuestTools/qextserialport/posix_qextserialport.cpp0000644000175000017500000011072111214517420026032 0ustar fboudrafboudra /*! \class Posix_QextSerialPort \version 1.0.0 \author Stefan Sander \author Michal Policht A cross-platform serial port class. This class encapsulates the POSIX portion of QextSerialPort. The user will be notified of errors and possible portability conflicts at run-time by default - this behavior can be turned off by defining _TTY_NOWARN_ (to turn off all warnings) or _TTY_NOWARN_PORT_ (to turn off portability warnings) in the project. Note that _TTY_NOWARN_ will also turn off portability warnings. */ #include #include #include "posix_qextserialport.h" #include #include /*! \fn Posix_QextSerialPort::Posix_QextSerialPort() Default constructor. Note that the name of the device used by a QextSerialPort constructed with this constructor will be determined by #defined constants, or lack thereof - the default behavior is the same as _TTY_LINUX_. Possible naming conventions and their associated constants are: \verbatim Constant Used By Naming Convention ---------- ------------- ------------------------ _TTY_WIN_ Windows COM1, COM2 _TTY_IRIX_ SGI/IRIX /dev/ttyf1, /dev/ttyf2 _TTY_HPUX_ HP-UX /dev/tty1p0, /dev/tty2p0 _TTY_SUN_ SunOS/Solaris /dev/ttya, /dev/ttyb _TTY_DIGITAL_ Digital UNIX /dev/tty01, /dev/tty02 _TTY_FREEBSD_ FreeBSD /dev/ttyd0, /dev/ttyd1 _TTY_OPENBSD_ OpenBSD /dev/tty00, /dev/tty01 _TTY_LINUX_ Linux /dev/ttyS0, /dev/ttyS1 Linux /dev/ttyS0, /dev/ttyS1 \endverbatim This constructor assigns the device name to the name of the first port on the specified system. See the other constructors if you need to open a different port. */ Posix_QextSerialPort::Posix_QextSerialPort(QextSerialBase::QueryMode mode) : QextSerialBase() { setQueryMode(mode); init(); } /*! \fn Posix_QextSerialPort::Posix_QextSerialPort(const Posix_QextSerialPort&) Copy constructor. */ Posix_QextSerialPort::Posix_QextSerialPort(const Posix_QextSerialPort& s) : QextSerialBase(s.port) { setOpenMode(s.openMode()); port = s.port; Settings.BaudRate=s.Settings.BaudRate; Settings.DataBits=s.Settings.DataBits; Settings.Parity=s.Settings.Parity; Settings.StopBits=s.Settings.StopBits; Settings.FlowControl=s.Settings.FlowControl; lastErr=s.lastErr; fd = s.fd; memcpy(&Posix_Timeout, &s.Posix_Timeout, sizeof(struct timeval)); memcpy(&Posix_Copy_Timeout, &s.Posix_Copy_Timeout, sizeof(struct timeval)); memcpy(&Posix_CommConfig, &s.Posix_CommConfig, sizeof(struct termios)); } /*! \fn Posix_QextSerialPort::Posix_QextSerialPort(const QString & name) Constructs a serial port attached to the port specified by name. name is the name of the device, which is windowsystem-specific, e.g."COM1" or "/dev/ttyS0". */ Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode) : QextSerialBase(name) { setQueryMode(mode); init(); } /*! \fn Posix_QextSerialPort::Posix_QextSerialPort(const PortSettings& settings) Constructs a port with default name and specified settings. */ Posix_QextSerialPort::Posix_QextSerialPort(const PortSettings& settings, QextSerialBase::QueryMode mode) : QextSerialBase() { setBaudRate(settings.BaudRate); setDataBits(settings.DataBits); setParity(settings.Parity); setStopBits(settings.StopBits); setFlowControl(settings.FlowControl); setTimeout(settings.Timeout_Millisec); setQueryMode(mode); init(); } /*! \fn Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings& settings) Constructs a port with specified name and settings. */ Posix_QextSerialPort::Posix_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode) : QextSerialBase(name) { setBaudRate(settings.BaudRate); setDataBits(settings.DataBits); setParity(settings.Parity); setStopBits(settings.StopBits); setFlowControl(settings.FlowControl); setTimeout(settings.Timeout_Millisec); setQueryMode(mode); init(); } /*! \fn Posix_QextSerialPort& Posix_QextSerialPort::operator=(const Posix_QextSerialPort& s) Override the = operator. */ Posix_QextSerialPort& Posix_QextSerialPort::operator=(const Posix_QextSerialPort& s) { setOpenMode(s.openMode()); port = s.port; Settings.BaudRate=s.Settings.BaudRate; Settings.DataBits=s.Settings.DataBits; Settings.Parity=s.Settings.Parity; Settings.StopBits=s.Settings.StopBits; Settings.FlowControl=s.Settings.FlowControl; lastErr=s.lastErr; fd = s.fd; memcpy(& Posix_Timeout, &(s.Posix_Timeout), sizeof(struct timeval)); memcpy(& Posix_Copy_Timeout, &(s.Posix_Copy_Timeout), sizeof(struct timeval)); memcpy(& Posix_CommConfig, &(s.Posix_CommConfig), sizeof(struct termios)); return *this; } void Posix_QextSerialPort::init() { fd = 0; readNotifier = 0; if (queryMode() == QextSerialBase::EventDriven) qWarning("POSIX doesn't have event driven mechanism for writes implemented yet - reads are OK."); } /*! \fn Posix_QextSerialPort::~Posix_QextSerialPort() Standard destructor. */ Posix_QextSerialPort::~Posix_QextSerialPort() { if (isOpen()) { close(); } } /*! \fn void Posix_QextSerialPort::setBaudRate(BaudRateType baudRate) Sets the baud rate of the serial port. Note that not all rates are applicable on all platforms. The following table shows translations of the various baud rate constants on Windows(including NT/2000) and POSIX platforms. Speeds marked with an * are speeds that are usable on both Windows and POSIX. \note BAUD76800 may not be supported on all POSIX systems. SGI/IRIX systems do not support BAUD1800. \verbatim RATE Windows Speed POSIX Speed ----------- ------------- ----------- BAUD50 110 50 BAUD75 110 75 *BAUD110 110 110 BAUD134 110 134.5 BAUD150 110 150 BAUD200 110 200 *BAUD300 300 300 *BAUD600 600 600 *BAUD1200 1200 1200 BAUD1800 1200 1800 *BAUD2400 2400 2400 *BAUD4800 4800 4800 *BAUD9600 9600 9600 BAUD14400 14400 9600 *BAUD19200 19200 19200 *BAUD38400 38400 38400 BAUD56000 56000 38400 *BAUD57600 57600 57600 BAUD76800 57600 76800 *BAUD115200 115200 115200 BAUD128000 128000 115200 BAUD256000 256000 115200 \endverbatim */ void Posix_QextSerialPort::setBaudRate(BaudRateType baudRate) { QMutexLocker lock(mutex); if (Settings.BaudRate!=baudRate) { switch (baudRate) { case BAUD14400: Settings.BaudRate=BAUD9600; break; case BAUD56000: Settings.BaudRate=BAUD38400; break; case BAUD76800: #ifndef B76800 Settings.BaudRate=BAUD57600; #else Settings.BaudRate=baudRate; #endif break; case BAUD128000: case BAUD256000: Settings.BaudRate=BAUD115200; break; default: Settings.BaudRate=baudRate; break; } } if (isOpen()) { switch (baudRate) { /*50 baud*/ case BAUD50: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 50 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B50; #else cfsetispeed(&Posix_CommConfig, B50); cfsetospeed(&Posix_CommConfig, B50); #endif break; /*75 baud*/ case BAUD75: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 75 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B75; #else cfsetispeed(&Posix_CommConfig, B75); cfsetospeed(&Posix_CommConfig, B75); #endif break; /*110 baud*/ case BAUD110: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B110; #else cfsetispeed(&Posix_CommConfig, B110); cfsetospeed(&Posix_CommConfig, B110); #endif break; /*134.5 baud*/ case BAUD134: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 134.5 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B134; #else cfsetispeed(&Posix_CommConfig, B134); cfsetospeed(&Posix_CommConfig, B134); #endif break; /*150 baud*/ case BAUD150: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 150 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B150; #else cfsetispeed(&Posix_CommConfig, B150); cfsetospeed(&Posix_CommConfig, B150); #endif break; /*200 baud*/ case BAUD200: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows does not support 200 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B200; #else cfsetispeed(&Posix_CommConfig, B200); cfsetospeed(&Posix_CommConfig, B200); #endif break; /*300 baud*/ case BAUD300: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B300; #else cfsetispeed(&Posix_CommConfig, B300); cfsetospeed(&Posix_CommConfig, B300); #endif break; /*600 baud*/ case BAUD600: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B600; #else cfsetispeed(&Posix_CommConfig, B600); cfsetospeed(&Posix_CommConfig, B600); #endif break; /*1200 baud*/ case BAUD1200: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B1200; #else cfsetispeed(&Posix_CommConfig, B1200); cfsetospeed(&Posix_CommConfig, B1200); #endif break; /*1800 baud*/ case BAUD1800: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and IRIX do not support 1800 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B1800; #else cfsetispeed(&Posix_CommConfig, B1800); cfsetospeed(&Posix_CommConfig, B1800); #endif break; /*2400 baud*/ case BAUD2400: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B2400; #else cfsetispeed(&Posix_CommConfig, B2400); cfsetospeed(&Posix_CommConfig, B2400); #endif break; /*4800 baud*/ case BAUD4800: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B4800; #else cfsetispeed(&Posix_CommConfig, B4800); cfsetospeed(&Posix_CommConfig, B4800); #endif break; /*9600 baud*/ case BAUD9600: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B9600; #else cfsetispeed(&Posix_CommConfig, B9600); cfsetospeed(&Posix_CommConfig, B9600); #endif break; /*14400 baud*/ case BAUD14400: TTY_WARNING("Posix_QextSerialPort: POSIX does not support 14400 baud operation. Switching to 9600 baud."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B9600; #else cfsetispeed(&Posix_CommConfig, B9600); cfsetospeed(&Posix_CommConfig, B9600); #endif break; /*19200 baud*/ case BAUD19200: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B19200; #else cfsetispeed(&Posix_CommConfig, B19200); cfsetospeed(&Posix_CommConfig, B19200); #endif break; /*38400 baud*/ case BAUD38400: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B38400; #else cfsetispeed(&Posix_CommConfig, B38400); cfsetospeed(&Posix_CommConfig, B38400); #endif break; /*56000 baud*/ case BAUD56000: TTY_WARNING("Posix_QextSerialPort: POSIX does not support 56000 baud operation. Switching to 38400 baud."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B38400; #else cfsetispeed(&Posix_CommConfig, B38400); cfsetospeed(&Posix_CommConfig, B38400); #endif break; /*57600 baud*/ case BAUD57600: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B57600; #else cfsetispeed(&Posix_CommConfig, B57600); cfsetospeed(&Posix_CommConfig, B57600); #endif break; /*76800 baud*/ case BAUD76800: TTY_PORTABILITY_WARNING("Posix_QextSerialPort Portability Warning: Windows and some POSIX systems do not support 76800 baud operation."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); #ifdef B76800 Posix_CommConfig.c_cflag|=B76800; #else TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support. Switching to 57600 baud."); Posix_CommConfig.c_cflag|=B57600; #endif //B76800 #else //CBAUD #ifdef B76800 cfsetispeed(&Posix_CommConfig, B76800); cfsetospeed(&Posix_CommConfig, B76800); #else TTY_WARNING("Posix_QextSerialPort: Posix_QextSerialPort was compiled without 76800 baud support. Switching to 57600 baud."); cfsetispeed(&Posix_CommConfig, B57600); cfsetospeed(&Posix_CommConfig, B57600); #endif //B76800 #endif //CBAUD break; /*115200 baud*/ case BAUD115200: #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B115200; #else cfsetispeed(&Posix_CommConfig, B115200); cfsetospeed(&Posix_CommConfig, B115200); #endif break; /*128000 baud*/ case BAUD128000: TTY_WARNING("Posix_QextSerialPort: POSIX does not support 128000 baud operation. Switching to 115200 baud."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B115200; #else cfsetispeed(&Posix_CommConfig, B115200); cfsetospeed(&Posix_CommConfig, B115200); #endif break; /*256000 baud*/ case BAUD256000: TTY_WARNING("Posix_QextSerialPort: POSIX does not support 256000 baud operation. Switching to 115200 baud."); #ifdef CBAUD Posix_CommConfig.c_cflag&=(~CBAUD); Posix_CommConfig.c_cflag|=B115200; #else cfsetispeed(&Posix_CommConfig, B115200); cfsetospeed(&Posix_CommConfig, B115200); #endif break; } tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } } /*! \fn void Posix_QextSerialPort::setDataBits(DataBitsType dataBits) Sets the number of data bits used by the serial port. Possible values of dataBits are: \verbatim DATA_5 5 data bits DATA_6 6 data bits DATA_7 7 data bits DATA_8 8 data bits \endverbatim \note This function is subject to the following restrictions: \par 5 data bits cannot be used with 2 stop bits. \par 8 data bits cannot be used with space parity on POSIX systems. */ void Posix_QextSerialPort::setDataBits(DataBitsType dataBits) { QMutexLocker lock(mutex); if (Settings.DataBits!=dataBits) { if ((Settings.StopBits==STOP_2 && dataBits==DATA_5) || (Settings.StopBits==STOP_1_5 && dataBits!=DATA_5) || (Settings.Parity==PAR_SPACE && dataBits==DATA_8)) { } else { Settings.DataBits=dataBits; } } if (isOpen()) { switch(dataBits) { /*5 data bits*/ case DATA_5: if (Settings.StopBits==STOP_2) { TTY_WARNING("Posix_QextSerialPort: 5 Data bits cannot be used with 2 stop bits."); } else { Settings.DataBits=dataBits; Posix_CommConfig.c_cflag&=(~CSIZE); Posix_CommConfig.c_cflag|=CS5; tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } break; /*6 data bits*/ case DATA_6: if (Settings.StopBits==STOP_1_5) { TTY_WARNING("Posix_QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits."); } else { Settings.DataBits=dataBits; Posix_CommConfig.c_cflag&=(~CSIZE); Posix_CommConfig.c_cflag|=CS6; tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } break; /*7 data bits*/ case DATA_7: if (Settings.StopBits==STOP_1_5) { TTY_WARNING("Posix_QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits."); } else { Settings.DataBits=dataBits; Posix_CommConfig.c_cflag&=(~CSIZE); Posix_CommConfig.c_cflag|=CS7; tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } break; /*8 data bits*/ case DATA_8: if (Settings.StopBits==STOP_1_5) { TTY_WARNING("Posix_QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits."); } else { Settings.DataBits=dataBits; Posix_CommConfig.c_cflag&=(~CSIZE); Posix_CommConfig.c_cflag|=CS8; tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } break; } } } /*! \fn void Posix_QextSerialPort::setParity(ParityType parity) Sets the parity associated with the serial port. The possible values of parity are: \verbatim PAR_SPACE Space Parity PAR_MARK Mark Parity PAR_NONE No Parity PAR_EVEN Even Parity PAR_ODD Odd Parity \endverbatim \note This function is subject to the following limitations: \par POSIX systems do not support mark parity. \par POSIX systems support space parity only if tricked into doing so, and only with fewer than 8 data bits. Use space parity very carefully with POSIX systems. */ void Posix_QextSerialPort::setParity(ParityType parity) { QMutexLocker lock(mutex); if (Settings.Parity!=parity) { if (parity==PAR_MARK || (parity==PAR_SPACE && Settings.DataBits==DATA_8)) { } else { Settings.Parity=parity; } } if (isOpen()) { switch (parity) { /*space parity*/ case PAR_SPACE: if (Settings.DataBits==DATA_8) { TTY_PORTABILITY_WARNING("Posix_QextSerialPort: Space parity is only supported in POSIX with 7 or fewer data bits"); } else { /*space parity not directly supported - add an extra data bit to simulate it*/ Posix_CommConfig.c_cflag&=~(PARENB|CSIZE); switch(Settings.DataBits) { case DATA_5: Settings.DataBits=DATA_6; Posix_CommConfig.c_cflag|=CS6; break; case DATA_6: Settings.DataBits=DATA_7; Posix_CommConfig.c_cflag|=CS7; break; case DATA_7: Settings.DataBits=DATA_8; Posix_CommConfig.c_cflag|=CS8; break; case DATA_8: break; } tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } break; /*mark parity - WINDOWS ONLY*/ case PAR_MARK: TTY_WARNING("Posix_QextSerialPort: Mark parity is not supported by POSIX."); break; /*no parity*/ case PAR_NONE: Posix_CommConfig.c_cflag&=(~PARENB); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; /*even parity*/ case PAR_EVEN: Posix_CommConfig.c_cflag&=(~PARODD); Posix_CommConfig.c_cflag|=PARENB; tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; /*odd parity*/ case PAR_ODD: Posix_CommConfig.c_cflag|=(PARENB|PARODD); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; } } } /*! \fn void Posix_QextSerialPort::setStopBits(StopBitsType stopBits) Sets the number of stop bits used by the serial port. Possible values of stopBits are: \verbatim STOP_1 1 stop bit STOP_1_5 1.5 stop bits STOP_2 2 stop bits \endverbatim \note This function is subject to the following restrictions: \par 2 stop bits cannot be used with 5 data bits. \par POSIX does not support 1.5 stop bits. */ void Posix_QextSerialPort::setStopBits(StopBitsType stopBits) { QMutexLocker lock(mutex); if (Settings.StopBits!=stopBits) { if ((Settings.DataBits==DATA_5 && stopBits==STOP_2) || stopBits==STOP_1_5) {} else { Settings.StopBits=stopBits; } } if (isOpen()) { switch (stopBits) { /*one stop bit*/ case STOP_1: Settings.StopBits=stopBits; Posix_CommConfig.c_cflag&=(~CSTOPB); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; /*1.5 stop bits*/ case STOP_1_5: TTY_WARNING("Posix_QextSerialPort: 1.5 stop bit operation is not supported by POSIX."); break; /*two stop bits*/ case STOP_2: if (Settings.DataBits==DATA_5) { TTY_WARNING("Posix_QextSerialPort: 2 stop bits cannot be used with 5 data bits"); } else { Settings.StopBits=stopBits; Posix_CommConfig.c_cflag|=CSTOPB; tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); } break; } } } /*! \fn void Posix_QextSerialPort::setFlowControl(FlowType flow) Sets the flow control used by the port. Possible values of flow are: \verbatim FLOW_OFF No flow control FLOW_HARDWARE Hardware (RTS/CTS) flow control FLOW_XONXOFF Software (XON/XOFF) flow control \endverbatim \note FLOW_HARDWARE may not be supported on all versions of UNIX. In cases where it is unsupported, FLOW_HARDWARE is the same as FLOW_OFF. */ void Posix_QextSerialPort::setFlowControl(FlowType flow) { QMutexLocker lock(mutex); if (Settings.FlowControl!=flow) { Settings.FlowControl=flow; } if (isOpen()) { switch(flow) { /*no flow control*/ case FLOW_OFF: Posix_CommConfig.c_cflag&=(~CRTSCTS); Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY)); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; /*software (XON/XOFF) flow control*/ case FLOW_XONXOFF: Posix_CommConfig.c_cflag&=(~CRTSCTS); Posix_CommConfig.c_iflag|=(IXON|IXOFF|IXANY); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; case FLOW_HARDWARE: Posix_CommConfig.c_cflag|=CRTSCTS; Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY)); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); break; } } } /*! \fn void Posix_QextSerialPort::setTimeout(ulong sec); Sets the read and write timeouts for the port to millisec milliseconds. Note that this is a per-character timeout, i.e. the port will wait this long for each individual character, not for the whole read operation. This timeout also applies to the bytesWaiting() function. \note POSIX does not support millisecond-level control for I/O timeout values. Any timeout set using this function will be set to the next lowest tenth of a second for the purposes of detecting read or write timeouts. For example a timeout of 550 milliseconds will be seen by the class as a timeout of 500 milliseconds for the purposes of reading and writing the port. However millisecond-level control is allowed by the select() system call, so for example a 550-millisecond timeout will be seen as 550 milliseconds on POSIX systems for the purpose of detecting available bytes in the read buffer. */ void Posix_QextSerialPort::setTimeout(long millisec) { QMutexLocker lock(mutex); Settings.Timeout_Millisec = millisec; Posix_Copy_Timeout.tv_sec = millisec / 1000; Posix_Copy_Timeout.tv_usec = millisec % 1000; if (isOpen()) { if (millisec == -1) fcntl(fd, F_SETFL, O_NDELAY); else //O_SYNC should enable blocking ::write() //however this seems not working on Linux 2.6.21 (works on OpenBSD 4.2) fcntl(fd, F_SETFL, O_SYNC); tcgetattr(fd, & Posix_CommConfig); Posix_CommConfig.c_cc[VTIME] = millisec/100; tcsetattr(fd, TCSAFLUSH, & Posix_CommConfig); } } /*! \fn bool Posix_QextSerialPort::open(OpenMode mode) Opens the serial port associated to this class. This function has no effect if the port associated with the class is already open. The port is also configured to the current settings, as stored in the Settings structure. */ bool Posix_QextSerialPort::open(OpenMode mode) { QMutexLocker lock(mutex); if (mode == QIODevice::NotOpen) return isOpen(); if (!isOpen()) { qDebug() << "trying to open file" << port.toAscii(); //note: linux 2.6.21 seems to ignore O_NDELAY flag if ((fd = ::open(port.toAscii() ,O_RDWR | O_NOCTTY | O_NDELAY)) != -1) { qDebug("file opened succesfully"); setOpenMode(mode); // Flag the port as opened tcgetattr(fd, &old_termios); // Save the old termios Posix_CommConfig = old_termios; // Make a working copy cfmakeraw(&Posix_CommConfig); // Enable raw access /*set up other port settings*/ Posix_CommConfig.c_cflag|=CREAD|CLOCAL; Posix_CommConfig.c_lflag&=(~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|ISIG)); Posix_CommConfig.c_iflag&=(~(INPCK|IGNPAR|PARMRK|ISTRIP|ICRNL|IXANY)); Posix_CommConfig.c_oflag&=(~OPOST); Posix_CommConfig.c_cc[VMIN]= 0; #ifdef _POSIX_VDISABLE // Is a disable character available on this system? // Some systems allow for per-device disable-characters, so get the // proper value for the configured device const long vdisable = fpathconf(fd, _PC_VDISABLE); Posix_CommConfig.c_cc[VINTR] = vdisable; Posix_CommConfig.c_cc[VQUIT] = vdisable; Posix_CommConfig.c_cc[VSTART] = vdisable; Posix_CommConfig.c_cc[VSTOP] = vdisable; Posix_CommConfig.c_cc[VSUSP] = vdisable; #endif //_POSIX_VDISABLE setBaudRate(Settings.BaudRate); setDataBits(Settings.DataBits); setParity(Settings.Parity); setStopBits(Settings.StopBits); setFlowControl(Settings.FlowControl); setTimeout(Settings.Timeout_Millisec); tcsetattr(fd, TCSAFLUSH, &Posix_CommConfig); if (queryMode() == QextSerialBase::EventDriven) { readNotifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); connect(readNotifier, SIGNAL(activated(int)), this, SIGNAL(readyRead())); } } else { qDebug() << "could not open file:" << strerror(errno); } } return isOpen(); } /*! \fn void Posix_QextSerialPort::close() Closes a serial port. This function has no effect if the serial port associated with the class is not currently open. */ void Posix_QextSerialPort::close() { QMutexLocker lock(mutex); if( isOpen() ) { // Force a flush and then restore the original termios flush(); // Using both TCSAFLUSH and TCSANOW here discards any pending input tcsetattr(fd, TCSAFLUSH | TCSANOW, &old_termios); // Restore termios // Be a good QIODevice and call QIODevice::close() before POSIX close() // so the aboutToClose() signal is emitted at the proper time QIODevice::close(); // Flag the device as closed // QIODevice::close() doesn't actually close the port, so do that here ::close(fd); if(readNotifier) { delete readNotifier; readNotifier = 0; } } } /*! \fn void Posix_QextSerialPort::flush() Flushes all pending I/O to the serial port. This function has no effect if the serial port associated with the class is not currently open. */ void Posix_QextSerialPort::flush() { QMutexLocker lock(mutex); if (isOpen()) tcflush(fd, TCIOFLUSH); } /*! \fn qint64 Posix_QextSerialPort::size() const This function will return the number of bytes waiting in the receive queue of the serial port. It is included primarily to provide a complete QIODevice interface, and will not record errors in the lastErr member (because it is const). This function is also not thread-safe - in multithreading situations, use Posix_QextSerialPort::bytesWaiting() instead. */ qint64 Posix_QextSerialPort::size() const { int numBytes; if (ioctl(fd, FIONREAD, &numBytes)<0) { numBytes = 0; } return (qint64)numBytes; } /*! \fn qint64 Posix_QextSerialPort::bytesAvailable() Returns the number of bytes waiting in the port's receive queue. This function will return 0 if the port is not currently open, or -1 on error. */ qint64 Posix_QextSerialPort::bytesAvailable() const { QMutexLocker lock(mutex); if (isOpen()) { int bytesQueued; if (ioctl(fd, FIONREAD, &bytesQueued) == -1) { return (qint64)-1; } return bytesQueued + QIODevice::bytesAvailable(); } return 0; } /*! \fn void Posix_QextSerialPort::ungetChar(char) This function is included to implement the full QIODevice interface, and currently has no purpose within this class. This function is meaningless on an unbuffered device and currently only prints a warning message to that effect. */ void Posix_QextSerialPort::ungetChar(char) { /*meaningless on unbuffered sequential device - return error and print a warning*/ TTY_WARNING("Posix_QextSerialPort: ungetChar() called on an unbuffered sequential device - operation is meaningless"); } /*! \fn void Posix_QextSerialPort::translateError(ulong error) Translates a system-specific error code to a QextSerialPort error code. Used internally. */ void Posix_QextSerialPort::translateError(ulong error) { switch (error) { case EBADF: case ENOTTY: lastErr=E_INVALID_FD; break; case EINTR: lastErr=E_CAUGHT_NON_BLOCKED_SIGNAL; break; case ENOMEM: lastErr=E_NO_MEMORY; break; } } /*! \fn void Posix_QextSerialPort::setDtr(bool set) Sets DTR line to the requested state (high by default). This function will have no effect if the port associated with the class is not currently open. */ void Posix_QextSerialPort::setDtr(bool set) { QMutexLocker lock(mutex); if (isOpen()) { int status; ioctl(fd, TIOCMGET, &status); if (set) { status|=TIOCM_DTR; } else { status&=~TIOCM_DTR; } ioctl(fd, TIOCMSET, &status); } } /*! \fn void Posix_QextSerialPort::setRts(bool set) Sets RTS line to the requested state (high by default). This function will have no effect if the port associated with the class is not currently open. */ void Posix_QextSerialPort::setRts(bool set) { QMutexLocker lock(mutex); if (isOpen()) { int status; ioctl(fd, TIOCMGET, &status); if (set) { status|=TIOCM_RTS; } else { status&=~TIOCM_RTS; } ioctl(fd, TIOCMSET, &status); } } /*! \fn unsigned long Posix_QextSerialPort::lineStatus() returns the line status as stored by the port function. This function will retrieve the states of the following lines: DCD, CTS, DSR, and RI. On POSIX systems, the following additional lines can be monitored: DTR, RTS, Secondary TXD, and Secondary RXD. The value returned is an unsigned long with specific bits indicating which lines are high. The following constants should be used to examine the states of individual lines: \verbatim Mask Line ------ ---- LS_CTS CTS LS_DSR DSR LS_DCD DCD LS_RI RI LS_RTS RTS (POSIX only) LS_DTR DTR (POSIX only) LS_ST Secondary TXD (POSIX only) LS_SR Secondary RXD (POSIX only) \endverbatim This function will return 0 if the port associated with the class is not currently open. */ unsigned long Posix_QextSerialPort::lineStatus() { unsigned long Status=0, Temp=0; QMutexLocker lock(mutex); if (isOpen()) { ioctl(fd, TIOCMGET, &Temp); if (Temp&TIOCM_CTS) { Status|=LS_CTS; } if (Temp&TIOCM_DSR) { Status|=LS_DSR; } if (Temp&TIOCM_RI) { Status|=LS_RI; } if (Temp&TIOCM_CD) { Status|=LS_DCD; } if (Temp&TIOCM_DTR) { Status|=LS_DTR; } if (Temp&TIOCM_RTS) { Status|=LS_RTS; } if (Temp&TIOCM_ST) { Status|=LS_ST; } if (Temp&TIOCM_SR) { Status|=LS_SR; } } return Status; } /*! \fn qint64 Posix_QextSerialPort::readData(char * data, qint64 maxSize) Reads a block of data from the serial port. This function will read at most maxSize bytes from the serial port and place them in the buffer pointed to by data. Return value is the number of bytes actually read, or -1 on error. \warning before calling this function ensure that serial port associated with this class is currently open (use isOpen() function to check if port is open). */ qint64 Posix_QextSerialPort::readData(char * data, qint64 maxSize) { QMutexLocker lock(mutex); int retVal = 0; retVal = ::read(fd, data, maxSize); if (retVal == -1) lastErr = E_READ_FAILED; return retVal; } /*! \fn qint64 Posix_QextSerialPort::writeData(const char * data, qint64 maxSize) Writes a block of data to the serial port. This function will write maxSize bytes from the buffer pointed to by data to the serial port. Return value is the number of bytes actually written, or -1 on error. \warning before calling this function ensure that serial port associated with this class is currently open (use isOpen() function to check if port is open). */ qint64 Posix_QextSerialPort::writeData(const char * data, qint64 maxSize) { QMutexLocker lock(mutex); int retVal = 0; retVal = ::write(fd, data, maxSize); if (retVal == -1) lastErr = E_WRITE_FAILED; return (qint64)retVal; } qtemu-2.0~alpha1/GuestTools/qextserialport/posix_qextserialport.h0000644000175000017500000000374511214517420025506 0ustar fboudrafboudra#ifndef _POSIX_QEXTSERIALPORT_H_ #define _POSIX_QEXTSERIALPORT_H_ #include #include #include #include #include #include #include #include #include "qextserialbase.h" class Posix_QextSerialPort:public QextSerialBase { private: /*! * This method is a part of constructor. */ void init(); protected: int fd; QSocketNotifier *readNotifier; struct termios Posix_CommConfig; struct termios old_termios; struct timeval Posix_Timeout; struct timeval Posix_Copy_Timeout; virtual qint64 readData(char * data, qint64 maxSize); virtual qint64 writeData(const char * data, qint64 maxSize); public: Posix_QextSerialPort(QextSerialBase::QueryMode mode); Posix_QextSerialPort(const Posix_QextSerialPort& s); Posix_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode); Posix_QextSerialPort(const PortSettings& settings, QextSerialBase::QueryMode mode); Posix_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode); Posix_QextSerialPort& operator=(const Posix_QextSerialPort& s); virtual ~Posix_QextSerialPort(); virtual void setBaudRate(BaudRateType); virtual void setDataBits(DataBitsType); virtual void setParity(ParityType); virtual void setStopBits(StopBitsType); virtual void setFlowControl(FlowType); virtual void setTimeout(long); virtual bool open(OpenMode mode); virtual void close(); virtual void flush(); virtual qint64 size() const; virtual qint64 bytesAvailable() const; virtual void ungetChar(char c); virtual void translateError(ulong error); virtual void setDtr(bool set=true); virtual void setRts(bool set=true); virtual ulong lineStatus(); }; #endif qtemu-2.0~alpha1/GuestTools/qextserialport/qextserialenumerator.cpp0000644000175000017500000005265111214517420026014 0ustar fboudrafboudra/** * @file qextserialenumerator.cpp * @author Michał Policht * @see QextSerialEnumerator */ #include "qextserialenumerator.h" #include #include QextSerialEnumerator::QextSerialEnumerator( ) { if( !QMetaType::isRegistered( QMetaType::type("QextPortInfo") ) ) qRegisterMetaType("QextPortInfo"); #ifdef _TTY_WIN_ notificationHandle = 0; notificationWidget = 0; #endif // _TTY_WIN_ } QextSerialEnumerator::~QextSerialEnumerator( ) { #ifdef Q_OS_MAC IONotificationPortDestroy( notificationPortRef ); #elif (defined _TTY_WIN_) if( notificationHandle ) UnregisterDeviceNotification( notificationHandle ); if( notificationWidget ) delete notificationWidget; #endif } #ifdef _TTY_WIN_ #include #include //this is serial port GUID #ifndef GUID_CLASS_COMPORT DEFINE_GUID(GUID_CLASS_COMPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73); #endif /* Gordon Schumacher's macros for TCHAR -> QString conversions and vice versa */ #ifdef UNICODE #define QStringToTCHAR(x) (wchar_t*) x.utf16() #define PQStringToTCHAR(x) (wchar_t*) x->utf16() #define TCHARToQString(x) QString::fromUtf16((ushort*)(x)) #define TCHARToQStringN(x,y) QString::fromUtf16((ushort*)(x),(y)) #else #define QStringToTCHAR(x) x.local8Bit().constData() #define PQStringToTCHAR(x) x->local8Bit().constData() #define TCHARToQString(x) QString::fromLocal8Bit((x)) #define TCHARToQStringN(x,y) QString::fromLocal8Bit((x),(y)) #endif /*UNICODE*/ //static QString QextSerialEnumerator::getRegKeyValue(HKEY key, LPCTSTR property) { DWORD size = 0; RegQueryValueEx(key, property, NULL, NULL, NULL, & size); BYTE * buff = new BYTE[size]; QString result; if (RegQueryValueEx(key, property, NULL, NULL, buff, & size) == ERROR_SUCCESS) result = TCHARToQStringN(buff, size); else qWarning("QextSerialEnumerator::getRegKeyValue: can not obtain value from registry"); delete [] buff; RegCloseKey(key); return result; } //static QString QextSerialEnumerator::getDeviceProperty(HDEVINFO devInfo, PSP_DEVINFO_DATA devData, DWORD property) { DWORD buffSize = 0; SetupDiGetDeviceRegistryProperty(devInfo, devData, property, NULL, NULL, 0, & buffSize); BYTE * buff = new BYTE[buffSize]; if (!SetupDiGetDeviceRegistryProperty(devInfo, devData, property, NULL, buff, buffSize, NULL)) qCritical("Can not obtain property: %ld from registry", property); QString result = TCHARToQString(buff); delete [] buff; return result; } //static void QextSerialEnumerator::setupAPIScan(QList & infoList) { HDEVINFO devInfo = INVALID_HANDLE_VALUE; GUID * guidDev = (GUID *) & GUID_CLASS_COMPORT; devInfo = SetupDiGetClassDevs(guidDev, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if(devInfo == INVALID_HANDLE_VALUE) { qCritical() << "SetupDiGetClassDevs failed:" << GetLastError(); return; } enumerateDevicesWin( devInfo, guidDev, &infoList ); } void QextSerialEnumerator::enumerateDevicesWin( HDEVINFO devInfo, GUID* guidDev, QList* infoList ) { //enumerate the devices bool ok = true; SP_DEVICE_INTERFACE_DATA ifcData; ifcData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); PSP_DEVICE_INTERFACE_DETAIL_DATA detData = NULL; DWORD detDataPredictedLength; for (DWORD i = 0; ok; i++) { ok = SetupDiEnumDeviceInterfaces(devInfo, NULL, guidDev, i, &ifcData); if (ok) { SP_DEVINFO_DATA devData = {sizeof(SP_DEVINFO_DATA)}; //check for required detData size SetupDiGetDeviceInterfaceDetail(devInfo, & ifcData, NULL, 0, &detDataPredictedLength, & devData); detData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(detDataPredictedLength); detData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //check the details if (SetupDiGetDeviceInterfaceDetail(devInfo, &ifcData, detData, detDataPredictedLength, NULL, & devData)) { // Got a device. Get the details. QextPortInfo info; getDeviceDetailsWin( &info, devInfo, &devData ); infoList->append(info); } else qCritical() << "SetupDiGetDeviceInterfaceDetail failed:" << GetLastError(); delete detData; } else if (GetLastError() != ERROR_NO_MORE_ITEMS) { qCritical() << "SetupDiEnumDeviceInterfaces failed:" << GetLastError(); return; } } SetupDiDestroyDeviceInfoList(devInfo); } bool QextSerialRegistrationWidget::winEvent( MSG* message, long* result ) { if ( message->message == WM_DEVICECHANGE ) { qese->onDeviceChangeWin( message->wParam, message->lParam ); *result = 1; return true; } return false; } void QextSerialEnumerator::setUpNotificationWin( ) { if(notificationWidget) return; notificationWidget = new QextSerialRegistrationWidget(this); DEV_BROADCAST_DEVICEINTERFACE dbh; ZeroMemory(&dbh, sizeof(dbh)); dbh.dbcc_size = sizeof(dbh); dbh.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; CopyMemory(&dbh.dbcc_classguid, &GUID_CLASS_COMPORT, sizeof(GUID)); notificationHandle = RegisterDeviceNotification( notificationWidget->winId( ), &dbh, DEVICE_NOTIFY_WINDOW_HANDLE ); if(!notificationHandle) qWarning() << "RegisterDeviceNotification failed:" << GetLastError(); } LRESULT QextSerialEnumerator::onDeviceChangeWin( WPARAM wParam, LPARAM lParam ) { if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam ) { PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam; if( pHdr->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE ) { PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr; QString devId = TCHARToQString(pDevInf->dbcc_name); // devId: \\?\USB#Vid_04e8&Pid_503b#0002F9A9828E0F06#{a5dcbf10-6530-11d2-901f-00c04fb951ed} devId.remove("\\\\?\\"); // USB#Vid_04e8&Pid_503b#0002F9A9828E0F06#{a5dcbf10-6530-11d2-901f-00c04fb951ed} devId.remove(QRegExp("#\\{(.+)\\}")); // USB#Vid_04e8&Pid_503b#0002F9A9828E0F06 devId.replace("#", "\\"); // USB\Vid_04e8&Pid_503b\0002F9A9828E0F06 devId = devId.toUpper(); //qDebug() << "devname:" << devId; DWORD dwFlag = DBT_DEVICEARRIVAL == wParam ? (DIGCF_ALLCLASSES | DIGCF_PRESENT) : DIGCF_ALLCLASSES; HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_CLASS_COMPORT,NULL,NULL,dwFlag); SP_DEVINFO_DATA spDevInfoData; spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for(int i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++) { DWORD nSize=0 ; TCHAR buf[MAX_PATH]; if ( !SetupDiGetDeviceInstanceId(hDevInfo, &spDevInfoData, buf, sizeof(buf), &nSize) ) qDebug() << "SetupDiGetDeviceInstanceId():" << GetLastError(); if( devId == TCHARToQString(buf) ) // we found a match { QextPortInfo info; getDeviceDetailsWin( &info, hDevInfo, &spDevInfoData, wParam ); if( wParam == DBT_DEVICEARRIVAL ) emit deviceDiscovered(info); else if( wParam == DBT_DEVICEREMOVECOMPLETE ) emit deviceRemoved(info); break; } } SetupDiDestroyDeviceInfoList(hDevInfo); } } return 0; } bool QextSerialEnumerator::getDeviceDetailsWin( QextPortInfo* portInfo, HDEVINFO devInfo, PSP_DEVINFO_DATA devData, WPARAM wParam ) { portInfo->friendName = getDeviceProperty(devInfo, devData, SPDRP_FRIENDLYNAME); if( wParam == DBT_DEVICEARRIVAL) portInfo->physName = getDeviceProperty(devInfo, devData, SPDRP_PHYSICAL_DEVICE_OBJECT_NAME); portInfo->enumName = getDeviceProperty(devInfo, devData, SPDRP_ENUMERATOR_NAME); QString hardwareIDs = getDeviceProperty(devInfo, devData, SPDRP_HARDWAREID); HKEY devKey = SetupDiOpenDevRegKey(devInfo, devData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ); portInfo->portName = getRegKeyValue(devKey, TEXT("PortName")); QRegExp rx("COM(\\d+)"); if(portInfo->portName.contains(rx)) { int portnum = rx.cap(1).toInt(); if(portnum > 9) portInfo->portName.prepend("\\\\.\\"); // COM ports greater than 9 need \\.\ prepended } QRegExp idRx("VID_(\\w+)&PID_(\\w+)&"); if( hardwareIDs.toUpper().contains(idRx) ) { bool dummy; portInfo->vendorID = idRx.cap(1).toInt(&dummy, 16); portInfo->productID = idRx.cap(2).toInt(&dummy, 16); //qDebug() << "got vid:" << vid << "pid:" << pid; } return true; } #endif /*_TTY_WIN_*/ #ifdef _TTY_POSIX_ #ifdef Q_OS_MAC #include #include #include // static void QextSerialEnumerator::scanPortsOSX(QList & infoList) { io_iterator_t serialPortIterator = 0; kern_return_t kernResult = KERN_FAILURE; CFMutableDictionaryRef matchingDictionary; // first try to get any serialbsd devices, then try any USBCDC devices if( !(matchingDictionary = IOServiceMatching(kIOSerialBSDServiceValue) ) ) { qWarning("IOServiceMatching returned a NULL dictionary."); return; } CFDictionaryAddValue(matchingDictionary, CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDAllTypes)); // then create the iterator with all the matching devices if( IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &serialPortIterator) != KERN_SUCCESS ) { qCritical() << "IOServiceGetMatchingServices failed, returned" << kernResult; return; } iterateServicesOSX(serialPortIterator, infoList); IOObjectRelease(serialPortIterator); serialPortIterator = 0; if( !(matchingDictionary = IOServiceNameMatching("AppleUSBCDC")) ) { qWarning("IOServiceNameMatching returned a NULL dictionary."); return; } if( IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &serialPortIterator) != KERN_SUCCESS ) { qCritical() << "IOServiceGetMatchingServices failed, returned" << kernResult; return; } iterateServicesOSX(serialPortIterator, infoList); IOObjectRelease(serialPortIterator); } void QextSerialEnumerator::iterateServicesOSX(io_object_t service, QList & infoList) { // Iterate through all modems found. io_object_t usbService; while( ( usbService = IOIteratorNext(service) ) ) { QextPortInfo info; info.vendorID = 0; info.productID = 0; getServiceDetailsOSX( usbService, &info ); infoList.append(info); } } bool QextSerialEnumerator::getServiceDetailsOSX( io_object_t service, QextPortInfo* portInfo ) { bool retval = true; CFTypeRef bsdPathAsCFString = NULL; CFTypeRef productNameAsCFString = NULL; CFTypeRef vendorIdAsCFNumber = NULL; CFTypeRef productIdAsCFNumber = NULL; // check the name of the modem's callout device bsdPathAsCFString = IORegistryEntryCreateCFProperty(service, CFSTR(kIOCalloutDeviceKey), kCFAllocatorDefault, 0); // wander up the hierarchy until we find the level that can give us the // vendor/product IDs and the product name, if available io_registry_entry_t parent; kern_return_t kernResult = IORegistryEntryGetParentEntry(service, kIOServicePlane, &parent); while( kernResult == KERN_SUCCESS && !vendorIdAsCFNumber && !productIdAsCFNumber ) { if(!productNameAsCFString) productNameAsCFString = IORegistryEntrySearchCFProperty(parent, kIOServicePlane, CFSTR("Product Name"), kCFAllocatorDefault, 0); vendorIdAsCFNumber = IORegistryEntrySearchCFProperty(parent, kIOServicePlane, CFSTR(kUSBVendorID), kCFAllocatorDefault, 0); productIdAsCFNumber = IORegistryEntrySearchCFProperty(parent, kIOServicePlane, CFSTR(kUSBProductID), kCFAllocatorDefault, 0); io_registry_entry_t oldparent = parent; kernResult = IORegistryEntryGetParentEntry(parent, kIOServicePlane, &parent); IOObjectRelease(oldparent); } io_string_t ioPathName; IORegistryEntryGetPath( service, kIOServicePlane, ioPathName ); portInfo->physName = ioPathName; if( bsdPathAsCFString ) { char path[MAXPATHLEN]; if( CFStringGetCString((CFStringRef)bsdPathAsCFString, path, PATH_MAX, kCFStringEncodingUTF8) ) portInfo->portName = path; CFRelease(bsdPathAsCFString); } if(productNameAsCFString) { char productName[MAXPATHLEN]; if( CFStringGetCString((CFStringRef)productNameAsCFString, productName, PATH_MAX, kCFStringEncodingUTF8) ) portInfo->friendName = productName; CFRelease(productNameAsCFString); } if(vendorIdAsCFNumber) { SInt32 vID; if(CFNumberGetValue((CFNumberRef)vendorIdAsCFNumber, kCFNumberSInt32Type, &vID)) portInfo->vendorID = vID; CFRelease(vendorIdAsCFNumber); } if(productIdAsCFNumber) { SInt32 pID; if(CFNumberGetValue((CFNumberRef)productIdAsCFNumber, kCFNumberSInt32Type, &pID)) portInfo->productID = pID; CFRelease(productIdAsCFNumber); } IOObjectRelease(service); return retval; } // IOKit callbacks registered via setupNotifications() void deviceDiscoveredCallbackOSX( void *ctxt, io_iterator_t serialPortIterator ); void deviceTerminatedCallbackOSX( void *ctxt, io_iterator_t serialPortIterator ); void deviceDiscoveredCallbackOSX( void *ctxt, io_iterator_t serialPortIterator ) { QextSerialEnumerator* qese = (QextSerialEnumerator*)ctxt; io_object_t serialService; while ((serialService = IOIteratorNext(serialPortIterator))) qese->onDeviceDiscoveredOSX(serialService); } void deviceTerminatedCallbackOSX( void *ctxt, io_iterator_t serialPortIterator ) { QextSerialEnumerator* qese = (QextSerialEnumerator*)ctxt; io_object_t serialService; while ((serialService = IOIteratorNext(serialPortIterator))) qese->onDeviceTerminatedOSX(serialService); } /* A device has been discovered via IOKit. Create a QextPortInfo if possible, and emit the signal indicating that we've found it. */ void QextSerialEnumerator::onDeviceDiscoveredOSX( io_object_t service ) { QextPortInfo info; info.vendorID = 0; info.productID = 0; if( getServiceDetailsOSX( service, &info ) ) emit deviceDiscovered( info ); } /* Notification via IOKit that a device has been removed. Create a QextPortInfo if possible, and emit the signal indicating that it's gone. */ void QextSerialEnumerator::onDeviceTerminatedOSX( io_object_t service ) { QextPortInfo info; info.vendorID = 0; info.productID = 0; if( getServiceDetailsOSX( service, &info ) ) emit deviceRemoved( info ); } /* Create matching dictionaries for the devices we want to get notifications for, and add them to the current run loop. Invoke the callbacks that will be responding to these notifications once to arm them, and discover any devices that are currently connected at the time notifications are setup. */ void QextSerialEnumerator::setUpNotificationOSX( ) { kern_return_t kernResult; mach_port_t masterPort; CFRunLoopSourceRef notificationRunLoopSource; CFMutableDictionaryRef classesToMatch; CFMutableDictionaryRef cdcClassesToMatch; io_iterator_t portIterator; kernResult = IOMasterPort(MACH_PORT_NULL, &masterPort); if (KERN_SUCCESS != kernResult) { qDebug() << "IOMasterPort returned:" << kernResult; return; } classesToMatch = IOServiceMatching(kIOSerialBSDServiceValue); if (classesToMatch == NULL) qDebug("IOServiceMatching returned a NULL dictionary."); else CFDictionarySetValue(classesToMatch, CFSTR(kIOSerialBSDTypeKey), CFSTR(kIOSerialBSDAllTypes)); if( !(cdcClassesToMatch = IOServiceNameMatching("AppleUSBCDC") ) ) { qWarning("couldn't create cdc matching dict"); return; } // Retain an additional reference since each call to IOServiceAddMatchingNotification consumes one. classesToMatch = (CFMutableDictionaryRef) CFRetain(classesToMatch); cdcClassesToMatch = (CFMutableDictionaryRef) CFRetain(cdcClassesToMatch); notificationPortRef = IONotificationPortCreate(masterPort); if(notificationPortRef == NULL) { qDebug("IONotificationPortCreate return a NULL IONotificationPortRef."); return; } notificationRunLoopSource = IONotificationPortGetRunLoopSource(notificationPortRef); if (notificationRunLoopSource == NULL) { qDebug("IONotificationPortGetRunLoopSource returned NULL CFRunLoopSourceRef."); return; } CFRunLoopAddSource(CFRunLoopGetCurrent(), notificationRunLoopSource, kCFRunLoopDefaultMode); kernResult = IOServiceAddMatchingNotification(notificationPortRef, kIOMatchedNotification, classesToMatch, deviceDiscoveredCallbackOSX, this, &portIterator); if (kernResult != KERN_SUCCESS) { qDebug() << "IOServiceAddMatchingNotification return:" << kernResult; return; } // arm the callback, and grab any devices that are already connected deviceDiscoveredCallbackOSX( this, portIterator ); kernResult = IOServiceAddMatchingNotification(notificationPortRef, kIOMatchedNotification, cdcClassesToMatch, deviceDiscoveredCallbackOSX, this, &portIterator); if (kernResult != KERN_SUCCESS) { qDebug() << "IOServiceAddMatchingNotification return:" << kernResult; return; } // arm the callback, and grab any devices that are already connected deviceDiscoveredCallbackOSX( this, portIterator ); kernResult = IOServiceAddMatchingNotification(notificationPortRef, kIOTerminatedNotification, classesToMatch, deviceTerminatedCallbackOSX, this, &portIterator); if (kernResult != KERN_SUCCESS) { qDebug() << "IOServiceAddMatchingNotification return:" << kernResult; return; } // arm the callback, and clear any devices that are terminated deviceTerminatedCallbackOSX( this, portIterator ); kernResult = IOServiceAddMatchingNotification(notificationPortRef, kIOTerminatedNotification, cdcClassesToMatch, deviceTerminatedCallbackOSX, this, &portIterator); if (kernResult != KERN_SUCCESS) { qDebug() << "IOServiceAddMatchingNotification return:" << kernResult; return; } // arm the callback, and clear any devices that are terminated deviceTerminatedCallbackOSX( this, portIterator ); } #endif // Q_OS_MAC #endif // _TTY_POSIX_ //static QList QextSerialEnumerator::getPorts() { QList ports; #ifdef _TTY_WIN_ OSVERSIONINFO vi; vi.dwOSVersionInfoSize = sizeof(vi); if (!::GetVersionEx(&vi)) { qCritical("Could not get OS version."); return ports; } // Handle windows 9x and NT4 specially if (vi.dwMajorVersion < 5) { qCritical("Enumeration for this version of Windows is not implemented yet"); /*if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT) EnumPortsWNt4(ports); else EnumPortsW9x(ports);*/ } else //w2k or later setupAPIScan(ports); #endif /*_TTY_WIN_*/ #ifdef _TTY_POSIX_ #ifdef Q_OS_MAC scanPortsOSX(ports); #else qCritical("Enumeration for POSIX systems is not implemented yet."); #endif /* Q_OS_MAC */ #endif /*_TTY_POSIX_*/ return ports; } void QextSerialEnumerator::setUpNotifications( ) { #ifdef _TTY_WIN_ setUpNotificationWin( ); #endif #ifdef _TTY_POSIX_ #ifdef Q_OS_MAC (void)win; setUpNotificationOSX( ); #else qCritical("Notifications for *Nix/FreeBSD are not implemented yet"); #endif // Q_OS_MAC #endif // _TTY_POSIX_ } qtemu-2.0~alpha1/GuestTools/qextserialport/qextserialport.h0000644000175000017500000000163111214517420024254 0ustar fboudrafboudra #ifndef _QEXTSERIALPORT_H_ #define _QEXTSERIALPORT_H_ /*POSIX CODE*/ #ifdef _TTY_POSIX_ #include "posix_qextserialport.h" #define QextBaseType Posix_QextSerialPort /*MS WINDOWS CODE*/ #else #include "win_qextserialport.h" #define QextBaseType Win_QextSerialPort #endif class QextSerialPort: public QextBaseType { Q_OBJECT public: typedef QextSerialBase::QueryMode QueryMode; QextSerialPort(QueryMode mode = QextSerialPort::EventDriven); QextSerialPort(const QString & name, QueryMode mode = QextSerialPort::EventDriven); QextSerialPort(PortSettings const& s, QueryMode mode = QextSerialPort::EventDriven); QextSerialPort(const QString & name, PortSettings const& s, QueryMode mode = QextSerialPort::EventDriven); QextSerialPort(const QextSerialPort& s); QextSerialPort& operator=(const QextSerialPort&); virtual ~QextSerialPort(); }; #endif qtemu-2.0~alpha1/GuestTools/qextserialport/win_qextserialport.cpp0000644000175000017500000010636511214517420025476 0ustar fboudrafboudra//#include //#include //#include //#include #include #include #include #include "win_qextserialport.h" /*! \fn Win_QextSerialPort::Win_QextSerialPort() Default constructor. Note that the name of the device used by a Win_QextSerialPort constructed with this constructor will be determined by #defined constants, or lack thereof - the default behavior is the same as _TTY_LINUX_. Possible naming conventions and their associated constants are: \verbatim Constant Used By Naming Convention ---------- ------------- ------------------------ _TTY_WIN_ Windows COM1, COM2 _TTY_IRIX_ SGI/IRIX /dev/ttyf1, /dev/ttyf2 _TTY_HPUX_ HP-UX /dev/tty1p0, /dev/tty2p0 _TTY_SUN_ SunOS/Solaris /dev/ttya, /dev/ttyb _TTY_DIGITAL_ Digital UNIX /dev/tty01, /dev/tty02 _TTY_FREEBSD_ FreeBSD /dev/ttyd0, /dev/ttyd1 _TTY_LINUX_ Linux /dev/ttyS0, /dev/ttyS1 Linux /dev/ttyS0, /dev/ttyS1 \endverbatim This constructor associates the object with the first port on the system, e.g. COM1 for Windows platforms. See the other constructor if you need a port other than the first. */ Win_QextSerialPort::Win_QextSerialPort(QextSerialBase::QueryMode mode): QextSerialBase() { Win_Handle=INVALID_HANDLE_VALUE; setQueryMode(mode); init(); } /*!Win_QextSerialPort::Win_QextSerialPort(const Win_QextSerialPort&) Copy constructor. */ Win_QextSerialPort::Win_QextSerialPort(const Win_QextSerialPort& s): QextSerialBase(s.port) { Win_Handle=INVALID_HANDLE_VALUE; _queryMode = s._queryMode; _bytesToWrite = s._bytesToWrite; bytesToWriteLock = new QReadWriteLock; overlapThread = new Win_QextSerialThread(this); memcpy(& overlap, & s.overlap, sizeof(OVERLAPPED)); setOpenMode(s.openMode()); lastErr=s.lastErr; port = s.port; Settings.FlowControl=s.Settings.FlowControl; Settings.Parity=s.Settings.Parity; Settings.DataBits=s.Settings.DataBits; Settings.StopBits=s.Settings.StopBits; Settings.BaudRate=s.Settings.BaudRate; Win_Handle=s.Win_Handle; memcpy(&Win_CommConfig, &s.Win_CommConfig, sizeof(COMMCONFIG)); memcpy(&Win_CommTimeouts, &s.Win_CommTimeouts, sizeof(COMMTIMEOUTS)); if (s.overlapThread->isRunning()) overlapThread->start(); } /*! \fn Win_QextSerialPort::Win_QextSerialPort(const QString & name) Constructs a serial port attached to the port specified by devName. devName is the name of the device, which is windowsystem-specific, e.g."COM2" or "/dev/ttyS0". */ Win_QextSerialPort::Win_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode): QextSerialBase(name) { Win_Handle=INVALID_HANDLE_VALUE; setQueryMode(mode); init(); } /*! \fn Win_QextSerialPort::Win_QextSerialPort(const PortSettings& settings) Constructs a port with default name and specified settings. */ Win_QextSerialPort::Win_QextSerialPort(const PortSettings& settings, QextSerialBase::QueryMode mode): QextSerialBase() { Win_Handle=INVALID_HANDLE_VALUE; setBaudRate(settings.BaudRate); setDataBits(settings.DataBits); setStopBits(settings.StopBits); setParity(settings.Parity); setFlowControl(settings.FlowControl); setTimeout(settings.Timeout_Millisec); setQueryMode(mode); init(); } /*! \fn Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings) Constructs a port with specified name and settings. */ Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode): QextSerialBase(name) { Win_Handle=INVALID_HANDLE_VALUE; setPortName(name); setBaudRate(settings.BaudRate); setDataBits(settings.DataBits); setStopBits(settings.StopBits); setParity(settings.Parity); setFlowControl(settings.FlowControl); setTimeout(settings.Timeout_Millisec); setQueryMode(mode); init(); } void Win_QextSerialPort::init() { _bytesToWrite = 0; overlap.Internal = 0; overlap.InternalHigh = 0; overlap.Offset = 0; overlap.OffsetHigh = 0; overlap.hEvent = CreateEvent(NULL, true, false, NULL); overlapThread = new Win_QextSerialThread(this); bytesToWriteLock = new QReadWriteLock; } /*! \fn Win_QextSerialPort::~Win_QextSerialPort() Standard destructor. */ Win_QextSerialPort::~Win_QextSerialPort() { if (isOpen()) { close(); } CloseHandle(overlap.hEvent); delete overlapThread; delete bytesToWriteLock; } /*! \fn Win_QextSerialPort& Win_QextSerialPort::operator=(const Win_QextSerialPort& s) overrides the = operator */ Win_QextSerialPort& Win_QextSerialPort::operator=(const Win_QextSerialPort& s) { setOpenMode(s.openMode()); _queryMode = s._queryMode; _bytesToWrite = s._bytesToWrite; bytesToWriteLock = new QReadWriteLock; overlapThread = new Win_QextSerialThread(this); memcpy(& overlap, & s.overlap, sizeof(OVERLAPPED)); lastErr=s.lastErr; port = s.port; Settings.FlowControl=s.Settings.FlowControl; Settings.Parity=s.Settings.Parity; Settings.DataBits=s.Settings.DataBits; Settings.StopBits=s.Settings.StopBits; Settings.BaudRate=s.Settings.BaudRate; Win_Handle=s.Win_Handle; memcpy(&Win_CommConfig, &s.Win_CommConfig, sizeof(COMMCONFIG)); memcpy(&Win_CommTimeouts, &s.Win_CommTimeouts, sizeof(COMMTIMEOUTS)); if (s.overlapThread->isRunning()) overlapThread->start(); return *this; } /*! \fn bool Win_QextSerialPort::open(OpenMode mode) Opens a serial port. Note that this function does not specify which device to open. If you need to open a device by name, see Win_QextSerialPort::open(const char*). This function has no effect if the port associated with the class is already open. The port is also configured to the current settings, as stored in the Settings structure. */ bool Win_QextSerialPort::open(OpenMode mode) { unsigned long confSize = sizeof(COMMCONFIG); Win_CommConfig.dwSize = confSize; DWORD dwFlagsAndAttributes = 0; if (queryMode() == QextSerialBase::EventDriven) dwFlagsAndAttributes += FILE_FLAG_OVERLAPPED; QMutexLocker lock(mutex); if (mode == QIODevice::NotOpen) return isOpen(); if (!isOpen()) { /*open the port*/ Win_Handle=CreateFileA(port.toAscii(), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, dwFlagsAndAttributes, NULL); if (Win_Handle!=INVALID_HANDLE_VALUE) { QIODevice::open(mode); /*configure port settings*/ GetCommConfig(Win_Handle, &Win_CommConfig, &confSize); GetCommState(Win_Handle, &(Win_CommConfig.dcb)); /*set up parameters*/ Win_CommConfig.dcb.fBinary=TRUE; Win_CommConfig.dcb.fInX=FALSE; Win_CommConfig.dcb.fOutX=FALSE; Win_CommConfig.dcb.fAbortOnError=FALSE; Win_CommConfig.dcb.fNull=FALSE; setBaudRate(Settings.BaudRate); setDataBits(Settings.DataBits); setStopBits(Settings.StopBits); setParity(Settings.Parity); setFlowControl(Settings.FlowControl); setTimeout(Settings.Timeout_Millisec); SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); //init event driven approach if (queryMode() == QextSerialBase::EventDriven) { Win_CommTimeouts.ReadIntervalTimeout = MAXDWORD; Win_CommTimeouts.ReadTotalTimeoutMultiplier = 0; Win_CommTimeouts.ReadTotalTimeoutConstant = 0; Win_CommTimeouts.WriteTotalTimeoutMultiplier = 0; Win_CommTimeouts.WriteTotalTimeoutConstant = 0; SetCommTimeouts(Win_Handle, &Win_CommTimeouts); if (!SetCommMask( Win_Handle, EV_TXEMPTY | EV_RXCHAR | EV_DSR)) { qWarning("failed to set Comm Mask. Error code: %ld", GetLastError()); return false; } overlapThread->start(); } } } else { return false; } return isOpen(); } /*! \fn void Win_QextSerialPort::close() Closes a serial port. This function has no effect if the serial port associated with the class is not currently open. */ void Win_QextSerialPort::close() { QMutexLocker lock(mutex); if (isOpen()) { flush(); if (overlapThread->isRunning()) { overlapThread->stop(); if (QThread::currentThread() != overlapThread) overlapThread->wait(); } if (CloseHandle(Win_Handle)) Win_Handle = INVALID_HANDLE_VALUE; _bytesToWrite = 0; QIODevice::close(); if(!overlappedWrites.isEmpty()) { foreach(OVERLAPPED* o, overlappedWrites) { CancelIo(o->hEvent); CloseHandle(o->hEvent); } qDeleteAll(overlappedWrites); overlappedWrites.clear(); } } } /*! \fn void Win_QextSerialPort::flush() Flushes all pending I/O to the serial port. This function has no effect if the serial port associated with the class is not currently open. */ void Win_QextSerialPort::flush() { QMutexLocker lock(mutex); if (isOpen()) { FlushFileBuffers(Win_Handle); } } /*! \fn qint64 Win_QextSerialPort::size() const This function will return the number of bytes waiting in the receive queue of the serial port. It is included primarily to provide a complete QIODevice interface, and will not record errors in the lastErr member (because it is const). This function is also not thread-safe - in multithreading situations, use Win_QextSerialPort::bytesAvailable() instead. */ qint64 Win_QextSerialPort::size() const { int availBytes; COMSTAT Win_ComStat; DWORD Win_ErrorMask=0; ClearCommError(Win_Handle, &Win_ErrorMask, &Win_ComStat); availBytes = Win_ComStat.cbInQue; return (qint64)availBytes; } /*! \fn qint64 Win_QextSerialPort::bytesAvailable() Returns the number of bytes waiting in the port's receive queue. This function will return 0 if the port is not currently open, or -1 on error. */ qint64 Win_QextSerialPort::bytesAvailable() const { QMutexLocker lock(mutex); if (isOpen()) { DWORD Errors; COMSTAT Status; if (ClearCommError(Win_Handle, &Errors, &Status)) { return Status.cbInQue + QIODevice::bytesAvailable(); } return (qint64)-1; } return 0; } /*! \fn void Win_QextSerialPort::translateError(ulong error) Translates a system-specific error code to a QextSerialPort error code. Used internally. */ void Win_QextSerialPort::translateError(ulong error) { if (error&CE_BREAK) { lastErr=E_BREAK_CONDITION; } else if (error&CE_FRAME) { lastErr=E_FRAMING_ERROR; } else if (error&CE_IOE) { lastErr=E_IO_ERROR; } else if (error&CE_MODE) { lastErr=E_INVALID_FD; } else if (error&CE_OVERRUN) { lastErr=E_BUFFER_OVERRUN; } else if (error&CE_RXPARITY) { lastErr=E_RECEIVE_PARITY_ERROR; } else if (error&CE_RXOVER) { lastErr=E_RECEIVE_OVERFLOW; } else if (error&CE_TXFULL) { lastErr=E_TRANSMIT_OVERFLOW; } } /*! \fn qint64 Win_QextSerialPort::readData(char *data, qint64 maxSize) Reads a block of data from the serial port. This function will read at most maxlen bytes from the serial port and place them in the buffer pointed to by data. Return value is the number of bytes actually read, or -1 on error. \warning before calling this function ensure that serial port associated with this class is currently open (use isOpen() function to check if port is open). */ qint64 Win_QextSerialPort::readData(char *data, qint64 maxSize) { DWORD retVal; QMutexLocker lock(mutex); retVal = 0; if (queryMode() == QextSerialBase::EventDriven) { OVERLAPPED overlapRead; overlapRead.Internal = 0; overlapRead.InternalHigh = 0; overlapRead.Offset = 0; overlapRead.OffsetHigh = 0; overlapRead.hEvent = CreateEvent(NULL, true, false, NULL); if (!ReadFile(Win_Handle, (void*)data, (DWORD)maxSize, & retVal, & overlapRead)) { if (GetLastError() == ERROR_IO_PENDING) GetOverlappedResult(Win_Handle, & overlapRead, & retVal, true); else { lastErr = E_READ_FAILED; retVal = (DWORD)-1; } } CloseHandle(overlapRead.hEvent); } else if (!ReadFile(Win_Handle, (void*)data, (DWORD)maxSize, & retVal, NULL)) { lastErr = E_READ_FAILED; retVal = (DWORD)-1; } return (qint64)retVal; } /*! \fn qint64 Win_QextSerialPort::writeData(const char *data, qint64 maxSize) Writes a block of data to the serial port. This function will write len bytes from the buffer pointed to by data to the serial port. Return value is the number of bytes actually written, or -1 on error. \warning before calling this function ensure that serial port associated with this class is currently open (use isOpen() function to check if port is open). */ qint64 Win_QextSerialPort::writeData(const char *data, qint64 maxSize) { DWORD retVal; QMutexLocker lock( mutex ); retVal = 0; if (queryMode() == QextSerialBase::EventDriven) { OVERLAPPED *newOverlapWrite = new OVERLAPPED; ZeroMemory(newOverlapWrite, sizeof(OVERLAPPED)); newOverlapWrite->hEvent = CreateEvent(NULL, true, false, NULL); bool success = WriteFile(Win_Handle, (void*)data, (DWORD)maxSize, & retVal, newOverlapWrite); if(success) { CloseHandle(newOverlapWrite->hEvent); delete newOverlapWrite; } else if (!success && (GetLastError() == ERROR_IO_PENDING)) { // writing asynchronously...not an error // keep track of the OVERLAPPED structure so we can delete it when the write is complete QWriteLocker writelocker(bytesToWriteLock); _bytesToWrite += maxSize; overlappedWrites.append(newOverlapWrite); } else { qDebug() << "serialport write error:" << GetLastError(); lastErr = E_WRITE_FAILED; retVal = (DWORD)-1; if(!CancelIo(newOverlapWrite->hEvent)) qDebug() << "serialport: couldn't cancel IO"; CloseHandle(newOverlapWrite->hEvent); delete newOverlapWrite; } } else if (!WriteFile(Win_Handle, (void*)data, (DWORD)maxSize, & retVal, NULL)) { lastErr = E_WRITE_FAILED; retVal = (DWORD)-1; } return (qint64)retVal; } /*! \fn void Win_QextSerialPort::ungetChar(char c) This function is included to implement the full QIODevice interface, and currently has no purpose within this class. This function is meaningless on an unbuffered device and currently only prints a warning message to that effect. */ void Win_QextSerialPort::ungetChar(char c) { /*meaningless on unbuffered sequential device - return error and print a warning*/ TTY_WARNING("Win_QextSerialPort: ungetChar() called on an unbuffered sequential device - operation is meaningless"); } /*! \fn void Win_QextSerialPort::setFlowControl(FlowType flow) Sets the flow control used by the port. Possible values of flow are: \verbatim FLOW_OFF No flow control FLOW_HARDWARE Hardware (RTS/CTS) flow control FLOW_XONXOFF Software (XON/XOFF) flow control \endverbatim */ void Win_QextSerialPort::setFlowControl(FlowType flow) { QMutexLocker lock(mutex); if (Settings.FlowControl!=flow) { Settings.FlowControl=flow; } if (isOpen()) { switch(flow) { /*no flow control*/ case FLOW_OFF: Win_CommConfig.dcb.fOutxCtsFlow=FALSE; Win_CommConfig.dcb.fRtsControl=RTS_CONTROL_DISABLE; Win_CommConfig.dcb.fInX=FALSE; Win_CommConfig.dcb.fOutX=FALSE; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); break; /*software (XON/XOFF) flow control*/ case FLOW_XONXOFF: Win_CommConfig.dcb.fOutxCtsFlow=FALSE; Win_CommConfig.dcb.fRtsControl=RTS_CONTROL_DISABLE; Win_CommConfig.dcb.fInX=TRUE; Win_CommConfig.dcb.fOutX=TRUE; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); break; case FLOW_HARDWARE: Win_CommConfig.dcb.fOutxCtsFlow=TRUE; Win_CommConfig.dcb.fRtsControl=RTS_CONTROL_HANDSHAKE; Win_CommConfig.dcb.fInX=FALSE; Win_CommConfig.dcb.fOutX=FALSE; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); break; } } } /*! \fn void Win_QextSerialPort::setParity(ParityType parity) Sets the parity associated with the serial port. The possible values of parity are: \verbatim PAR_SPACE Space Parity PAR_MARK Mark Parity PAR_NONE No Parity PAR_EVEN Even Parity PAR_ODD Odd Parity \endverbatim */ void Win_QextSerialPort::setParity(ParityType parity) { QMutexLocker lock(mutex); if (Settings.Parity!=parity) { Settings.Parity=parity; } if (isOpen()) { Win_CommConfig.dcb.Parity=(unsigned char)parity; switch (parity) { /*space parity*/ case PAR_SPACE: if (Settings.DataBits==DATA_8) { TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: Space parity with 8 data bits is not supported by POSIX systems."); } Win_CommConfig.dcb.fParity=TRUE; break; /*mark parity - WINDOWS ONLY*/ case PAR_MARK: TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: Mark parity is not supported by POSIX systems"); Win_CommConfig.dcb.fParity=TRUE; break; /*no parity*/ case PAR_NONE: Win_CommConfig.dcb.fParity=FALSE; break; /*even parity*/ case PAR_EVEN: Win_CommConfig.dcb.fParity=TRUE; break; /*odd parity*/ case PAR_ODD: Win_CommConfig.dcb.fParity=TRUE; break; } SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } } /*! \fn void Win_QextSerialPort::setDataBits(DataBitsType dataBits) Sets the number of data bits used by the serial port. Possible values of dataBits are: \verbatim DATA_5 5 data bits DATA_6 6 data bits DATA_7 7 data bits DATA_8 8 data bits \endverbatim \note This function is subject to the following restrictions: \par 5 data bits cannot be used with 2 stop bits. \par 1.5 stop bits can only be used with 5 data bits. \par 8 data bits cannot be used with space parity on POSIX systems. */ void Win_QextSerialPort::setDataBits(DataBitsType dataBits) { QMutexLocker lock(mutex); if (Settings.DataBits!=dataBits) { if ((Settings.StopBits==STOP_2 && dataBits==DATA_5) || (Settings.StopBits==STOP_1_5 && dataBits!=DATA_5)) { } else { Settings.DataBits=dataBits; } } if (isOpen()) { switch(dataBits) { /*5 data bits*/ case DATA_5: if (Settings.StopBits==STOP_2) { TTY_WARNING("Win_QextSerialPort: 5 Data bits cannot be used with 2 stop bits."); } else { Win_CommConfig.dcb.ByteSize=5; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } break; /*6 data bits*/ case DATA_6: if (Settings.StopBits==STOP_1_5) { TTY_WARNING("Win_QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits."); } else { Win_CommConfig.dcb.ByteSize=6; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } break; /*7 data bits*/ case DATA_7: if (Settings.StopBits==STOP_1_5) { TTY_WARNING("Win_QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits."); } else { Win_CommConfig.dcb.ByteSize=7; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } break; /*8 data bits*/ case DATA_8: if (Settings.StopBits==STOP_1_5) { TTY_WARNING("Win_QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits."); } else { Win_CommConfig.dcb.ByteSize=8; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } break; } } } /*! \fn void Win_QextSerialPort::setStopBits(StopBitsType stopBits) Sets the number of stop bits used by the serial port. Possible values of stopBits are: \verbatim STOP_1 1 stop bit STOP_1_5 1.5 stop bits STOP_2 2 stop bits \endverbatim \note This function is subject to the following restrictions: \par 2 stop bits cannot be used with 5 data bits. \par 1.5 stop bits cannot be used with 6 or more data bits. \par POSIX does not support 1.5 stop bits. */ void Win_QextSerialPort::setStopBits(StopBitsType stopBits) { QMutexLocker lock(mutex); if (Settings.StopBits!=stopBits) { if ((Settings.DataBits==DATA_5 && stopBits==STOP_2) || (stopBits==STOP_1_5 && Settings.DataBits!=DATA_5)) { } else { Settings.StopBits=stopBits; } } if (isOpen()) { switch (stopBits) { /*one stop bit*/ case STOP_1: Win_CommConfig.dcb.StopBits=ONESTOPBIT; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); break; /*1.5 stop bits*/ case STOP_1_5: TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: 1.5 stop bit operation is not supported by POSIX."); if (Settings.DataBits!=DATA_5) { TTY_WARNING("Win_QextSerialPort: 1.5 stop bits can only be used with 5 data bits"); } else { Win_CommConfig.dcb.StopBits=ONE5STOPBITS; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } break; /*two stop bits*/ case STOP_2: if (Settings.DataBits==DATA_5) { TTY_WARNING("Win_QextSerialPort: 2 stop bits cannot be used with 5 data bits"); } else { Win_CommConfig.dcb.StopBits=TWOSTOPBITS; SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } break; } } } /*! \fn void Win_QextSerialPort::setBaudRate(BaudRateType baudRate) Sets the baud rate of the serial port. Note that not all rates are applicable on all platforms. The following table shows translations of the various baud rate constants on Windows(including NT/2000) and POSIX platforms. Speeds marked with an * are speeds that are usable on both Windows and POSIX. \verbatim RATE Windows Speed POSIX Speed ----------- ------------- ----------- BAUD50 110 50 BAUD75 110 75 *BAUD110 110 110 BAUD134 110 134.5 BAUD150 110 150 BAUD200 110 200 *BAUD300 300 300 *BAUD600 600 600 *BAUD1200 1200 1200 BAUD1800 1200 1800 *BAUD2400 2400 2400 *BAUD4800 4800 4800 *BAUD9600 9600 9600 BAUD14400 14400 9600 *BAUD19200 19200 19200 *BAUD38400 38400 38400 BAUD56000 56000 38400 *BAUD57600 57600 57600 BAUD76800 57600 76800 *BAUD115200 115200 115200 BAUD128000 128000 115200 BAUD256000 256000 115200 \endverbatim */ void Win_QextSerialPort::setBaudRate(BaudRateType baudRate) { QMutexLocker lock(mutex); if (Settings.BaudRate!=baudRate) { switch (baudRate) { case BAUD50: case BAUD75: case BAUD134: case BAUD150: case BAUD200: Settings.BaudRate=BAUD110; break; case BAUD1800: Settings.BaudRate=BAUD1200; break; case BAUD76800: Settings.BaudRate=BAUD57600; break; default: Settings.BaudRate=baudRate; break; } } if (isOpen()) { switch (baudRate) { /*50 baud*/ case BAUD50: TTY_WARNING("Win_QextSerialPort: Windows does not support 50 baud operation. Switching to 110 baud."); Win_CommConfig.dcb.BaudRate=CBR_110; break; /*75 baud*/ case BAUD75: TTY_WARNING("Win_QextSerialPort: Windows does not support 75 baud operation. Switching to 110 baud."); Win_CommConfig.dcb.BaudRate=CBR_110; break; /*110 baud*/ case BAUD110: Win_CommConfig.dcb.BaudRate=CBR_110; break; /*134.5 baud*/ case BAUD134: TTY_WARNING("Win_QextSerialPort: Windows does not support 134.5 baud operation. Switching to 110 baud."); Win_CommConfig.dcb.BaudRate=CBR_110; break; /*150 baud*/ case BAUD150: TTY_WARNING("Win_QextSerialPort: Windows does not support 150 baud operation. Switching to 110 baud."); Win_CommConfig.dcb.BaudRate=CBR_110; break; /*200 baud*/ case BAUD200: TTY_WARNING("Win_QextSerialPort: Windows does not support 200 baud operation. Switching to 110 baud."); Win_CommConfig.dcb.BaudRate=CBR_110; break; /*300 baud*/ case BAUD300: Win_CommConfig.dcb.BaudRate=CBR_300; break; /*600 baud*/ case BAUD600: Win_CommConfig.dcb.BaudRate=CBR_600; break; /*1200 baud*/ case BAUD1200: Win_CommConfig.dcb.BaudRate=CBR_1200; break; /*1800 baud*/ case BAUD1800: TTY_WARNING("Win_QextSerialPort: Windows does not support 1800 baud operation. Switching to 1200 baud."); Win_CommConfig.dcb.BaudRate=CBR_1200; break; /*2400 baud*/ case BAUD2400: Win_CommConfig.dcb.BaudRate=CBR_2400; break; /*4800 baud*/ case BAUD4800: Win_CommConfig.dcb.BaudRate=CBR_4800; break; /*9600 baud*/ case BAUD9600: Win_CommConfig.dcb.BaudRate=CBR_9600; break; /*14400 baud*/ case BAUD14400: TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 14400 baud operation."); Win_CommConfig.dcb.BaudRate=CBR_14400; break; /*19200 baud*/ case BAUD19200: Win_CommConfig.dcb.BaudRate=CBR_19200; break; /*38400 baud*/ case BAUD38400: Win_CommConfig.dcb.BaudRate=CBR_38400; break; /*56000 baud*/ case BAUD56000: TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 56000 baud operation."); Win_CommConfig.dcb.BaudRate=CBR_56000; break; /*57600 baud*/ case BAUD57600: Win_CommConfig.dcb.BaudRate=CBR_57600; break; /*76800 baud*/ case BAUD76800: TTY_WARNING("Win_QextSerialPort: Windows does not support 76800 baud operation. Switching to 57600 baud."); Win_CommConfig.dcb.BaudRate=CBR_57600; break; /*115200 baud*/ case BAUD115200: Win_CommConfig.dcb.BaudRate=CBR_115200; break; /*128000 baud*/ case BAUD128000: TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 128000 baud operation."); Win_CommConfig.dcb.BaudRate=CBR_128000; break; /*256000 baud*/ case BAUD256000: TTY_PORTABILITY_WARNING("Win_QextSerialPort Portability Warning: POSIX does not support 256000 baud operation."); Win_CommConfig.dcb.BaudRate=CBR_256000; break; } SetCommConfig(Win_Handle, &Win_CommConfig, sizeof(COMMCONFIG)); } } /*! \fn void Win_QextSerialPort::setDtr(bool set) Sets DTR line to the requested state (high by default). This function will have no effect if the port associated with the class is not currently open. */ void Win_QextSerialPort::setDtr(bool set) { QMutexLocker lock(mutex); if (isOpen()) { if (set) { EscapeCommFunction(Win_Handle, SETDTR); } else { EscapeCommFunction(Win_Handle, CLRDTR); } } } /*! \fn void Win_QextSerialPort::setRts(bool set) Sets RTS line to the requested state (high by default). This function will have no effect if the port associated with the class is not currently open. */ void Win_QextSerialPort::setRts(bool set) { QMutexLocker lock(mutex); if (isOpen()) { if (set) { EscapeCommFunction(Win_Handle, SETRTS); } else { EscapeCommFunction(Win_Handle, CLRRTS); } } } /*! \fn ulong Win_QextSerialPort::lineStatus(void) returns the line status as stored by the port function. This function will retrieve the states of the following lines: DCD, CTS, DSR, and RI. On POSIX systems, the following additional lines can be monitored: DTR, RTS, Secondary TXD, and Secondary RXD. The value returned is an unsigned long with specific bits indicating which lines are high. The following constants should be used to examine the states of individual lines: \verbatim Mask Line ------ ---- LS_CTS CTS LS_DSR DSR LS_DCD DCD LS_RI RI \endverbatim This function will return 0 if the port associated with the class is not currently open. */ ulong Win_QextSerialPort::lineStatus(void) { unsigned long Status=0, Temp=0; QMutexLocker lock(mutex); if (isOpen()) { GetCommModemStatus(Win_Handle, &Temp); if (Temp&MS_CTS_ON) { Status|=LS_CTS; } if (Temp&MS_DSR_ON) { Status|=LS_DSR; } if (Temp&MS_RING_ON) { Status|=LS_RI; } if (Temp&MS_RLSD_ON) { Status|=LS_DCD; } } return Status; } bool Win_QextSerialPort::waitForReadyRead(int msecs) { //@todo implement return false; } qint64 Win_QextSerialPort::bytesToWrite() const { return _bytesToWrite; } void Win_QextSerialPort::monitorCommEvent() { DWORD eventMask = 0; ResetEvent(overlap.hEvent); if (!WaitCommEvent(Win_Handle, & eventMask, & overlap)) if (GetLastError() != ERROR_IO_PENDING) qCritical("WaitCommEvent error %ld\n", GetLastError()); if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 ) { //overlap event occured DWORD undefined; if (!GetOverlappedResult(Win_Handle, & overlap, & undefined, false)) { qWarning("CommEvent overlapped error %ld", GetLastError()); return; } if (eventMask & EV_RXCHAR) { if (sender() != this) emit readyRead(); } if (eventMask & EV_TXEMPTY) { /* A write completed. Run through the list of OVERLAPPED writes, and if they completed successfully, take them off the list and delete them. Otherwise, leave them on there so they can finish. */ qint64 totalBytesWritten = 0; QWriteLocker writelocker(bytesToWriteLock); QList overlapsToDelete; foreach(OVERLAPPED* o, overlappedWrites) { DWORD numBytes = 0; if (GetOverlappedResult(Win_Handle, o, & numBytes, false)) { overlapsToDelete.append(o); totalBytesWritten += numBytes; } else if( GetLastError() != ERROR_IO_INCOMPLETE ) { overlapsToDelete.append(o); qWarning() << "CommEvent overlapped write error:" << GetLastError(); } } if (sender() != this && totalBytesWritten > 0) { emit bytesWritten(totalBytesWritten); _bytesToWrite = 0; } foreach(OVERLAPPED* o, overlapsToDelete) { OVERLAPPED *toDelete = overlappedWrites.takeAt(overlappedWrites.indexOf(o)); CloseHandle(toDelete->hEvent); delete toDelete; } } if (eventMask & EV_DSR) { if (lineStatus() & LS_DSR) emit dsrChanged(true); else emit dsrChanged(false); } } } void Win_QextSerialPort::terminateCommWait() { SetCommMask(Win_Handle, 0); } /*! \fn void Win_QextSerialPort::setTimeout(ulong millisec); Sets the read and write timeouts for the port to millisec milliseconds. Setting 0 indicates that timeouts are not used for read nor write operations; however read() and write() functions will still block. Set -1 to provide non-blocking behaviour (read() and write() will return immediately). \note this function does nothing in event driven mode. */ void Win_QextSerialPort::setTimeout(long millisec) { QMutexLocker lock(mutex); Settings.Timeout_Millisec = millisec; if (millisec == -1) { Win_CommTimeouts.ReadIntervalTimeout = MAXDWORD; Win_CommTimeouts.ReadTotalTimeoutConstant = 0; } else { Win_CommTimeouts.ReadIntervalTimeout = millisec; Win_CommTimeouts.ReadTotalTimeoutConstant = millisec; } Win_CommTimeouts.ReadTotalTimeoutMultiplier = 0; Win_CommTimeouts.WriteTotalTimeoutMultiplier = millisec; Win_CommTimeouts.WriteTotalTimeoutConstant = 0; if (queryMode() != QextSerialBase::EventDriven) SetCommTimeouts(Win_Handle, &Win_CommTimeouts); } Win_QextSerialThread::Win_QextSerialThread(Win_QextSerialPort * qesp): QThread() { this->qesp = qesp; terminate = false; } void Win_QextSerialThread::stop() { terminate = true; qesp->terminateCommWait(); } void Win_QextSerialThread::run() { while (!terminate) qesp->monitorCommEvent(); terminate = false; } qtemu-2.0~alpha1/GuestTools/qextserialport/win_qextserialport.h0000644000175000017500000001077611214517420025143 0ustar fboudrafboudra#ifndef _WIN_QEXTSERIALPORT_H_ #define _WIN_QEXTSERIALPORT_H_ #include "qextserialbase.h" #include #include /*if all warning messages are turned off, flag portability warnings to be turned off as well*/ #ifdef _TTY_NOWARN_ #define _TTY_NOWARN_PORT_ #endif class QReadWriteLock; class Win_QextSerialThread; /*! \author Stefan Sander \author Michal Policht A cross-platform serial port class. This class encapsulates the Windows portion of QextSerialPort. The user will be notified of errors and possible portability conflicts at run-time by default - this behavior can be turned off by defining _TTY_NOWARN_ (to turn off all warnings) or _TTY_NOWARN_PORT_ (to turn off portability warnings) in the project. Note that defining _TTY_NOWARN_ also defines _TTY_NOWARN_PORT_. \note On Windows NT/2000/XP this class uses Win32 serial port functions by default. The user may select POSIX behavior under NT, 2000, or XP ONLY by defining _TTY_POSIX_ in the project. I can make no guarantees as to the quality of POSIX support under NT/2000 however. \todo remove copy constructor and assign operator. */ class Win_QextSerialPort: public QextSerialBase { Q_OBJECT friend class Win_QextSerialThread; private: /*! * This method is a part of constructor. */ void init(); protected: HANDLE Win_Handle; HANDLE threadStartEvent; HANDLE threadTerminateEvent; OVERLAPPED overlap; QList overlappedWrites; COMMCONFIG Win_CommConfig; COMMTIMEOUTS Win_CommTimeouts; QReadWriteLock * bytesToWriteLock; ///< @todo maybe move to QextSerialBase. qint64 _bytesToWrite; ///< @todo maybe move to QextSerialBase (and implement in POSIX). Win_QextSerialThread * overlapThread; ///< @todo maybe move to QextSerialBase (and implement in POSIX). void monitorCommEvent(); void terminateCommWait(); virtual qint64 readData(char *data, qint64 maxSize); virtual qint64 writeData(const char *data, qint64 maxSize); public: Win_QextSerialPort(QextSerialBase::QueryMode mode); Win_QextSerialPort(Win_QextSerialPort const& s); Win_QextSerialPort(const QString & name, QextSerialBase::QueryMode mode); Win_QextSerialPort(const PortSettings& settings, QextSerialBase::QueryMode mode); Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode); Win_QextSerialPort& operator=(const Win_QextSerialPort& s); virtual ~Win_QextSerialPort(); virtual bool open(OpenMode mode); virtual void close(); virtual void flush(); virtual qint64 size() const; virtual void ungetChar(char c); virtual void setFlowControl(FlowType); virtual void setParity(ParityType); virtual void setDataBits(DataBitsType); virtual void setStopBits(StopBitsType); virtual void setBaudRate(BaudRateType); virtual void setDtr(bool set=true); virtual void setRts(bool set=true); virtual ulong lineStatus(void); virtual qint64 bytesAvailable() const; virtual void translateError(ulong); virtual void setTimeout(long); /*! * Return number of bytes waiting in the buffer. Currently this shows number * of bytes queued within write() and before the TX_EMPTY event occured. TX_EMPTY * event is created whenever last character in the system buffer was sent. * * \return number of bytes queued within write(), before the first TX_EMPTY * event occur. * * \warning this function may not give you expected results since TX_EMPTY may occur * while writing data to the buffer. Eventually some TX_EMPTY events may not be * catched. * * \note this function always returns 0 in polling mode. * * \see flush(). */ virtual qint64 bytesToWrite() const; virtual bool waitForReadyRead(int msecs); ///< @todo implement. }; /*! * This thread monitors communication events. */ class Win_QextSerialThread: public QThread { Win_QextSerialPort * qesp; bool terminate; public: /*! * Constructor. * * \param qesp valid serial port object. */ Win_QextSerialThread(Win_QextSerialPort * qesp); /*! * Stop the thread. */ void stop(); protected: //overriden virtual void run(); }; #endif qtemu-2.0~alpha1/GuestTools/main.cpp0000644000175000017500000000111411214661046017357 0ustar fboudrafboudra #include #include #include #include "guesttools.h" int main(int argc, char *argv[]) { Q_INIT_RESOURCE(resources); QApplication a(argc, argv); if (!QSystemTrayIcon::isSystemTrayAvailable()) { QMessageBox::critical(0, QObject::tr("Systray"), QObject::tr("I couldn't detect any system tray " "on this system.")); return 1; } QApplication::setQuitOnLastWindowClosed(false); GuestTools w; return a.exec(); } qtemu-2.0~alpha1/GuestTools/modules/0000755000175000017500000000000011217515417017405 5ustar fboudrafboudraqtemu-2.0~alpha1/GuestTools/modules/guestmodule.h0000644000175000017500000000112611214661046022110 0ustar fboudrafboudra/* * guestmodule.h * * Created on: Dec 14, 2008 * Author: Ben Klopfenstein */ #ifndef GUESTMODULE_H_ #define GUESTMODULE_H_ #include #include #include class GuestModule: public QObject { Q_OBJECT public: GuestModule(QObject *parent = 0); virtual ~GuestModule(); virtual void receiveData(QVariant data); QString moduleName(); protected: void send(QVariant &data); void setModuleName(QString name); private: QString module; signals: void sendData(QString module, QVariant &data); }; #endif /* GUESTMODULE_H_ */ qtemu-2.0~alpha1/GuestTools/modules/clipboard/0000755000175000017500000000000011217515417021344 5ustar fboudrafboudraqtemu-2.0~alpha1/GuestTools/modules/clipboard/clipboardpoll.cpp0000644000175000017500000002706411126604061024700 0ustar fboudrafboudra// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8; -*- /* This file is part of the KDE project Copyright (C) 2003 by Lubos Lunak 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 2 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; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include "clipboardpoll.h" #include #include #include #include #include #include #ifdef HAVE_XFIXES #include #endif #include "klipper.h" //#define NOISY_KLIPPER_ /* The polling magic: There's no way with X11 how to find out if the selection has changed (unless its ownership is taken away from the current client). In the future, there will be hopefully such notification, which will make this whole file more or less obsolete. But for now, Klipper has to poll. In order to avoid transferring all the data on every time pulse, this file implements two optimizations: The first one is checking whether the selection owner is Qt application (using the _QT_SELECTION/CLIPBOARD_SENTINEL atoms on the root window of screen 0), and if yes, Klipper can rely on QClipboard's signals. If the owner is not Qt app, and the ownership has changed, it means the selection has changed as well. Otherwise, first only the timestamp of the last selection change is requested using the TIMESTAMP selection target, and if it's the same, it's assumed the contents haven't changed. Note that some applications (like XEmacs) does not provide this information, so Klipper has to assume that the clipboard might have changed in this case --- this is what is meant by REFUSED below. Update: Now there's also support for XFixes, so in case XFixes support is detected, only XFixes is used for detecting changes, everything else is ignored, even Qt's clipboard signals. */ ClipboardPoll::ClipboardPoll() : m_xfixes_event_base( -1 ) { hide(); const char* names[ 6 ] = { "_QT_SELECTION_SENTINEL", "_QT_CLIPBOARD_SENTINEL", "CLIPBOARD", "TIMESTAMP", "KLIPPER_SELECTION_TIMESTAMP", "KLIPPER_CLIPBOARD_TIMESTAMP" }; Atom atoms[ 6 ]; XInternAtoms( QX11Info::display(), const_cast< char** >( names ), 6, False, atoms ); m_selection.sentinel_atom = atoms[ 0 ]; m_clipboard.sentinel_atom = atoms[ 1 ]; m_xa_clipboard = atoms[ 2 ]; m_xa_timestamp = atoms[ 3 ]; m_selection.timestamp_atom = atoms[ 4 ]; m_clipboard.timestamp_atom = atoms[ 5 ]; bool use_polling = true; kapp->installX11EventFilter( this ); m_timer.setSingleShot( false ); #ifdef HAVE_XFIXES int dummy; if( XFixesQueryExtension( QX11Info::display(), &m_xfixes_event_base, &dummy )) { XFixesSelectSelectionInput( QX11Info::display(), QX11Info::appRootWindow( 0 ), XA_PRIMARY, XFixesSetSelectionOwnerNotifyMask | XFixesSelectionWindowDestroyNotifyMask | XFixesSelectionClientCloseNotifyMask ); XFixesSelectSelectionInput( QX11Info::display(), QX11Info::appRootWindow( 0 ), m_xa_clipboard, XFixesSetSelectionOwnerNotifyMask | XFixesSelectionWindowDestroyNotifyMask | XFixesSelectionClientCloseNotifyMask ); use_polling = false; #ifdef NOISY_KLIPPER_ kDebug() << "Using XFIXES"; #endif } #endif if( use_polling ) { #ifdef NOISY_KLIPPER_ kDebug() << "Using polling"; #endif initPolling(); } } void ClipboardPoll::initPolling() { connect( kapp->clipboard(), SIGNAL( selectionChanged() ), SLOT(qtSelectionChanged())); connect( kapp->clipboard(), SIGNAL( dataChanged() ), SLOT( qtClipboardChanged() )); connect( &m_timer, SIGNAL( timeout()), SLOT( timeout())); m_timer.start( 1000 ); m_selection.atom = XA_PRIMARY; m_clipboard.atom = m_xa_clipboard; m_selection.last_change = m_clipboard.last_change = QX11Info::appTime(); // don't trigger right after startup m_selection.last_owner = XGetSelectionOwner( QX11Info::display(), XA_PRIMARY ); #ifdef NOISY_KLIPPER_ kDebug() << "(1) Setting last_owner for =" << "selection" << ":" << m_selection.last_owner; #endif m_clipboard.last_owner = XGetSelectionOwner( QX11Info::display(), m_xa_clipboard ); #ifdef NOISY_KLIPPER_ kDebug() << "(2) Setting last_owner for =" << "clipboard" << ":" << m_clipboard.last_owner; #endif m_selection.waiting_for_timestamp = false; m_clipboard.waiting_for_timestamp = false; updateQtOwnership( m_selection ); updateQtOwnership( m_clipboard ); } void ClipboardPoll::qtSelectionChanged() { emit clipboardChanged( true ); } void ClipboardPoll::qtClipboardChanged() { emit clipboardChanged( false ); } bool ClipboardPoll::x11Event( XEvent* e ) { // note that this is also installed as app-wide filter #ifdef HAVE_XFIXES if( m_xfixes_event_base != -1 && e->type == m_xfixes_event_base + XFixesSelectionNotify ) { XFixesSelectionNotifyEvent* ev = reinterpret_cast< XFixesSelectionNotifyEvent* >( e ); if( ev->selection == XA_PRIMARY && !kapp->clipboard()->ownsSelection()) { #ifdef NOISY_KLIPPER_ kDebug() << "SELECTION CHANGED (XFIXES)"; #endif QX11Info::setAppTime( ev->timestamp ); emit clipboardChanged( true ); } else if( ev->selection == m_xa_clipboard && !kapp->clipboard()->ownsClipboard()) { #ifdef NOISY_KLIPPER_ kDebug() << "CLIPBOARD CHANGED (XFIXES)"; #endif QX11Info::setAppTime( ev->timestamp ); emit clipboardChanged( false ); } } #endif if( e->type == SelectionNotify && e->xselection.requestor == winId()) { if( changedTimestamp( m_selection, *e ) ) { #ifdef NOISY_KLIPPER_ kDebug() << "SELECTION CHANGED (GOT TIMESTAMP)"; #endif emit clipboardChanged( true ); } if ( changedTimestamp( m_clipboard, *e ) ) { #ifdef NOISY_KLIPPER_ kDebug() << "CLIPBOARD CHANGED (GOT TIMESTAMP)"; #endif emit clipboardChanged( false ); } return true; // filter out } return false; } void ClipboardPoll::updateQtOwnership( SelectionData& data ) { Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* prop = NULL; if( XGetWindowProperty( QX11Info::display(), QX11Info::appRootWindow( 0 ), data.sentinel_atom, 0, 2, False, XA_WINDOW, &type, &format, &nitems, &after, &prop ) != Success || type != XA_WINDOW || format != 32 || nitems != 2 || prop == NULL ) { #ifdef REALLY_NOISY_KLIPPER_ kDebug() << "UPDATEQT BAD PROPERTY"; #endif data.owner_is_qt = false; if( prop != NULL ) XFree( prop ); return; } Window owner = reinterpret_cast< long* >( prop )[ 0 ]; // [0] is new owner, [1] is previous XFree( prop ); Window current_owner = XGetSelectionOwner( QX11Info::display(), data.atom ); data.owner_is_qt = ( owner == current_owner ); #ifdef REALLY_NOISY_KLIPPER_ kDebug() << "owner=" << owner << "; current_owner=" << current_owner; kDebug() << "UPDATEQT:" << ( &data == &m_selection ? "selection" : "clipboard" ) << ":" << data.owner_is_qt; #endif } void ClipboardPoll::timeout() { Klipper::updateTimestamp(); if( !kapp->clipboard()->ownsSelection() && checkTimestamp( m_selection ) ) { #ifdef NOISY_KLIPPER_ kDebug() << "SELECTION CHANGED"; #endif emit clipboardChanged( true ); } if( !kapp->clipboard()->ownsClipboard() && checkTimestamp( m_clipboard ) ) { #ifdef NOISY_KLIPPER_ kDebug() << "CLIPBOARD CHANGED"; #endif emit clipboardChanged( false ); } } bool ClipboardPoll::checkTimestamp( SelectionData& data ) { Window current_owner = XGetSelectionOwner( QX11Info::display(), data.atom ); bool signal = false; updateQtOwnership( data ); if( data.owner_is_qt ) { data.last_change = CurrentTime; #ifdef REALLY_NOISY_KLIPPER_ kDebug() << "(3) Setting last_owner for =" << ( &data==&m_selection ?"selection":"clipboard" ) << ":" << current_owner; #endif data.last_owner = current_owner; data.waiting_for_timestamp = false; return false; } if( current_owner != data.last_owner ) { signal = true; // owner has changed data.last_owner = current_owner; #ifdef REALLY_NOISY_KLIPPER_ kDebug() << "(4) Setting last_owner for =" << ( &data==&m_selection ?"selection":"clipboard" ) << ":" << current_owner; #endif data.waiting_for_timestamp = false; data.last_change = CurrentTime; #ifdef REALLY_NOISY_KLIPPER_ kDebug() << "OWNER CHANGE:" << ( data.atom == XA_PRIMARY ) << ":" << current_owner; #endif return true; } if( current_owner == None ) { return false; // None also last_owner... } if( data.waiting_for_timestamp ) { // We're already waiting for the timestamp of the last check return false; } XDeleteProperty( QX11Info::display(), winId(), data.timestamp_atom ); XConvertSelection( QX11Info::display(), data.atom, m_xa_timestamp, data.timestamp_atom, winId(), QX11Info::appTime() ); data.waiting_for_timestamp = true; data.waiting_x_time = QX11Info::appTime(); #ifdef REALLY_NOISY_KLIPPER_ kDebug() << "WAITING TIMESTAMP:" << ( data.atom == XA_PRIMARY ); #endif return false; } bool ClipboardPoll::changedTimestamp( SelectionData& data, const XEvent& ev ) { if( ev.xselection.requestor != winId() || ev.xselection.selection != data.atom || ev.xselection.time != data.waiting_x_time ) { return false; } data.waiting_for_timestamp = false; if( ev.xselection.property == None ) { #ifdef NOISY_KLIPPER_ kDebug() << "REFUSED:" << ( data.atom == XA_PRIMARY ); #endif return true; } Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* prop = NULL; if( XGetWindowProperty( QX11Info::display(), winId(), ev.xselection.property, 0, 1, False, AnyPropertyType, &type, &format, &nitems, &after, &prop ) != Success || format != 32 || nitems != 1 || prop == NULL ) { #ifdef NOISY_KLIPPER_ kDebug() << "BAD PROPERTY:" << ( data.atom == XA_PRIMARY ); #endif if( prop != NULL ) XFree( prop ); return true; } Time timestamp = reinterpret_cast< long* >( prop )[ 0 ]; XFree( prop ); #ifdef NOISY_KLIPPER_ kDebug() << "GOT TIMESTAMP:" << ( data.atom == XA_PRIMARY ); kDebug() << "timestamp=" << timestamp << "; CurrentTime=" << CurrentTime << "; last_change=" << data.last_change << endl; #endif if( timestamp != data.last_change || timestamp == CurrentTime ) { #ifdef NOISY_KLIPPER_ kDebug() << "TIMESTAMP CHANGE:" << ( data.atom == XA_PRIMARY ); #endif data.last_change = timestamp; return true; } return false; // ok, same timestamp } #include "clipboardpoll.moc" qtemu-2.0~alpha1/GuestTools/modules/clipboard/host.pri0000644000175000017500000000016211126605407023032 0ustar fboudrafboudraSOURCES += GuestTools/modules/clipboard/clipboardsync.cpp HEADERS += GuestTools/modules/clipboard/clipboardsync.h qtemu-2.0~alpha1/GuestTools/modules/clipboard/clipboardpoll.h0000644000175000017500000000410211126604061024331 0ustar fboudrafboudra// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8; -*- /* This file is part of the KDE project Copyright (C) 2003 by Lubos Lunak 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 2 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; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _CLIPBOARDPOLL_H_ #define _CLIPBOARDPOLL_H_ #include #include #include #include class ClipboardPoll : public QWidget { Q_OBJECT public: ClipboardPoll(); Q_SIGNALS: void clipboardChanged( bool selectionMode ); protected: virtual bool x11Event( XEvent* ); private Q_SLOTS: void timeout(); void qtSelectionChanged(); void qtClipboardChanged(); private: struct SelectionData { Atom atom; Atom sentinel_atom; Atom timestamp_atom; Window last_owner; bool owner_is_qt; Time last_change; bool waiting_for_timestamp; Time waiting_x_time; }; void updateQtOwnership( SelectionData& data ); bool checkTimestamp( SelectionData& data ); bool changedTimestamp( SelectionData& data, const XEvent& e ); void initPolling(); QTimer m_timer; SelectionData m_selection; SelectionData m_clipboard; Atom m_xa_clipboard; Atom m_xa_timestamp; int m_xfixes_event_base; }; #endif qtemu-2.0~alpha1/GuestTools/modules/clipboard/clipboardsync.cpp0000644000175000017500000000320511214661046024701 0ustar fboudrafboudra#include "clipboardsync.h" #include #include #include #include #include ClipboardSync::ClipboardSync(QObject *parent) : GuestModule(parent) { previous = QVariant(); setModuleName("clipboard"); clipboard = QApplication::clipboard(); clipboard->clear(QClipboard::Clipboard); clipboard->clear(QClipboard::Selection); connect(clipboard, SIGNAL(changed(QClipboard::Mode)), this, SLOT(dataChanged(QClipboard::Mode))); qDebug() << "clipboard initialized"; } ClipboardSync::~ClipboardSync() { } void ClipboardSync::receiveData(QVariant data) { qDebug() << "received clipboard data"; QVariant::Type type = data.type(); if(type == QVariant::Image) { QImage image = data.value(); clipboard->setImage(image, QClipboard::Clipboard); clipboard->setImage(image, QClipboard::Selection); previous = data; } else if(type == QVariant::String) { QString text = data.value(); clipboard->setText(text, QClipboard::Clipboard); clipboard->setText(text, QClipboard::Selection); previous = data; } else qDebug() << "unknown data format!"; } void ClipboardSync::dataChanged(QClipboard::Mode mode) { if(!clipboard->image(mode).isNull()) { if(previous == QVariant(clipboard->image(mode))) return; previous = QVariant(clipboard->image(mode)); send(previous); } else if(!clipboard->text(mode).isNull()) { if(previous == QVariant(clipboard->text(mode))) return; previous = QVariant(clipboard->text(mode)); qDebug() << previous; send(previous); } } qtemu-2.0~alpha1/GuestTools/modules/clipboard/guest.pri0000644000175000017500000000013311126605407023202 0ustar fboudrafboudraSOURCES += modules/clipboard/clipboardsync.cpp HEADERS += modules/clipboard/clipboardsync.hqtemu-2.0~alpha1/GuestTools/modules/clipboard/clipboardsync.h0000644000175000017500000000074511214661046024354 0ustar fboudrafboudra#ifndef CLIPBOARDSYNC_H #define CLIPBOARDSYNC_H #include "../guestmodule.h" #include #include #include class QDataStream; class ClipboardSync : public GuestModule { Q_OBJECT public: ClipboardSync(QObject *parent = 0); ~ClipboardSync(); virtual void receiveData(QVariant data); private: QClipboard *clipboard; QVariant previous; public slots: void dataChanged(QClipboard::Mode mode); }; #endif // CLIPBOARDSYNC_H qtemu-2.0~alpha1/GuestTools/modules/host.pri0000644000175000017500000000021211126604061021062 0ustar fboudrafboudraSOURCES += GuestTools/modules/guestmodule.cpp HEADERS += GuestTools/modules/guestmodule.h include (GuestTools/modules/clipboard/host.pri)qtemu-2.0~alpha1/GuestTools/modules/guestmodule.cpp0000644000175000017500000000110411214661046022437 0ustar fboudrafboudra/* * guestmodule.cpp * * Created on: Dec 14, 2008 * Author: Ben */ #include "guestmodule.h" #include GuestModule::GuestModule(QObject *parent) : QObject(parent) { connect(this, SIGNAL(sendData(QString, QVariant&)), parent, SLOT(dataSender(QString, QVariant&))); } GuestModule::~GuestModule() { } QString GuestModule::moduleName() { return module; } void GuestModule::setModuleName(QString name) { module = name; } void GuestModule::receiveData(QVariant data) { } void GuestModule::send(QVariant &data) { emit sendData(module, data); } qtemu-2.0~alpha1/GuestTools/modules/guest.pri0000644000175000017500000000014211214661046021242 0ustar fboudrafboudrainclude (modules/clipboard/guest.pri) OTHER_FILES += clipboard/host.pri \ clipboard/guest.pri qtemu-2.0~alpha1/GuestTools/guesttools.h0000644000175000017500000000163411214661046020317 0ustar fboudrafboudra#ifndef GUESTTOOLS_H #define GUESTTOOLS_H #include #include #include #include #include "modules/guestmodule.h" #include "ui_guesttools.h" #include class QAction; class QMenu; //class QextSerialPort; //class QDataStream; class GuestTools : public QWidget { Q_OBJECT public: GuestTools(QWidget *parent = 0); ~GuestTools(); private: Ui::GuestToolsClass ui; void createTrayIcon(); void createActions(); void createModules(); void initSerialPort(); QAction *quitAction; QSystemTrayIcon *trayIcon; QMenu *trayIconMenu; QextSerialPort *port; quint16 blockSize; QList modules; public slots: void dataSender(QString module, QVariant &data); private slots: void clickedIcon(QSystemTrayIcon::ActivationReason reason); void ioReceived(); }; #endif // GUESTTOOLS_H qtemu-2.0~alpha1/GuestTools/guesttools.ui0000644000175000017500000002666611122021131020500 0ustar fboudrafboudra GuestToolsClass 0 0 400 300 GuestTools 0 Controls 0 0 Fullscreen :/fullscreen.png:/fullscreen.png 32 32 Qt::ToolButtonTextUnderIcon 0 0 Screen Shot :/screenshot.png:/screenshot.png 32 32 Qt::ToolButtonTextUnderIcon 0 0 Scale :/scale.png:/scale.png 32 32 Qt::ToolButtonTextUnderIcon 0 0 Smooth Mouse :/mouse.png:/mouse.png 32 32 Qt::ToolButtonTextUnderIcon Qt::Vertical 20 40 USB Devices <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Click a deselected device</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">to select it and add it to</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">this guest.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Click a device is is already</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">selected to deselect it</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">and remove it from the </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">guest.</p></body></html> Qt::Horizontal 40 20 USB Tablet Device Removable Media Reload :/reload.png:/reload.png Qt::ToolButtonTextBesideIcon ... :/cdrom.png:/cdrom.png Reload :/reload.png:/reload.png Qt::ToolButtonTextBesideIcon ... :/floppy.png:/floppy.png Qt::Vertical 20 40 About QDialogButtonBox::Cancel|QDialogButtonBox::Ok qtemu-2.0~alpha1/machinewizard.h0000644000175000017500000000424110772016327016625 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINEWIZARD_H #define MACHINEWIZARD_H #include class QComboBox; class QLineEdit; class QDoubleSpinBox; class QCheckBox; class MachineWizard : public QWizard { Q_OBJECT public: explicit MachineWizard(const QString &myMachinesPath, QWidget *parent = 0); static QString newMachine(const QString &myMachinesPathParent, QWidget *parent); void accept(); QString myMachinesPath; }; class ChooseSystemPage : public QWizardPage { Q_OBJECT public: ChooseSystemPage(MachineWizard *wizard); bool isComplete() const; private: QComboBox *comboSystem; }; class LocationPage : public QWizardPage { Q_OBJECT public: LocationPage(MachineWizard *wizard); void initializePage(); bool isComplete() const; QLineEdit *pathLineEdit; QLineEdit *nameLineEdit; private slots: void updatePath(); void setNewPath(); }; class ImagePage : public QWizardPage { Q_OBJECT public: ImagePage(MachineWizard *wizard); void cleanupPage(); bool isComplete() const; private: QDoubleSpinBox *sizeSpinBox; QCheckBox *encryptionCheckBox; private slots: //void enableEncryption(int choice); }; #endif qtemu-2.0~alpha1/misc/0000755000175000017500000000000011217515403014553 5ustar fboudrafboudraqtemu-2.0~alpha1/misc/qtemu.desktop0000644000175000017500000000030511046324353017301 0ustar fboudrafboudra[Desktop Entry] Name=QtEmu GenericName=Virtual machine manager Exec=qtemu Icon=qtemu Type=Application Terminal=false Comment=Frontend to QEMU virtual machine monitor Categories=Qt;System;Emulator; qtemu-2.0~alpha1/misc/setup_win32/0000755000175000017500000000000011217515403016735 5ustar fboudrafboudraqtemu-2.0~alpha1/misc/setup_win32/qtemu.exe.manifest0000644000175000017500000000103710753140477022412 0ustar fboudrafboudra WindowsExecutable qtemu-2.0~alpha1/misc/setup_win32/uninstall.ico0000644000175000017500000000427610753140477021464 0ustar fboudrafboudra @( @ """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www CCC 껻X1CC X10C X10C 10C 0C  C 꼼 C ꒒ C XX C XXRssC XXRsxC XRRsẺC RsxẺC  xẺCC    zz1111MMM ^zz1111MM ^^zz1111M ^^zz1111 ^^^zz111 z^^^zz11 zz^^^zz1 zzz^^zz   p ??`?`???qtemu-2.0~alpha1/misc/setup_win32/header.xcf0000644000175000017500000007613010753140477020707 0ustar fboudrafboudragimp xcf file9BB $gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) B{-0+ Pasted Layer     <0+P0+` .gxxwxj.{ v ڶ))(&&%/۶Kz暘ݸ>ȲZߺoⴳֺs"=CIOUZ`ejnqqmid_YTNHB=0ػt,=BIOU[afjnpomie`ZTNGA;5߼u+2:@FLRW\`dfhhfc_[UPKD>83&DZִw0/7=BGMRVZ]`a`_\YUQLFA;50&ӽy*+39>CHLPSVXYYXUSOKGB<72,!Ӽ{"#/49>BFJMOQQPOLIEA<83-)ռ|)048<@CFHIJJIGEB?;73.*~&/269<951.) +03589:;;:9752/+"   (-02344320.)" ޏ"  #&))(&# %"$&'(('&$! İѹ*"&)+./010/-+)&" žǾչ/ $),035788752/,($ٸ2 %*/36:<>?@?><963/*%  ׸6%+059=ACFGGEC@=940*$Ը:!*/5:?CGJMNNMJGC?:4/)#ѸA)17=BGLPTWXYXVTPLGB<71+&η边̷|ԟɷAͬصƷBøϷwoґķ "!! %:D." 4Ӈs΃(iŽIʨ¿W=ݼÿ*@$eÿ2 ޷\'ÿOμq2Ě0Qn{aA  a L #%  %$ $0 .gxxwxj.{ v ڶ))(&&%/۶Kz暘ݸ>ȲZߺo弼ֺsLVyzjBػtPm~|vQ߼u_s{ys`DZִwepw}|vpaӽy^lsy}xrl[Ӽ{Sboty}xsmiMռ|MKhoty}|xsni[;~N;Meorvz}|yvqmhYB6O;<7P<@DIS_gmprsttsrpmiaUH?==7R@GKORVZ_cfhhihfb^XSNJFB>7WFMRVZ^acegghgfec`]ZVRMHC9İѹ]MSX]aehkmopqpomkhea]XSNI=žǾչcSY_dhlpsuwxxwusolhc^YTNBٸgX_ejoswz}}zwsnjd_YSG׸k]djpuz~}ytpjd^XLԸnaiov{zuoib\PѸthpv||vpicXη¿̷|ԟɷAͯصƷBø϶ґķ "!! %:D." 4ғ΃(iŽIɨ¿W=ݼÿ*@$eÿ2 ޷\'ÿOμq2Ě0Qn{aA  a L #%  %$ $0 .gxxwxj.{ v ڶ))(&&%/۶Kz暘ݸ>ȲZߺoֺsҞȽػtԨ̷߼uձʿDZִw׵ӽyرżӼ{ڪ݀ôռ|ۧĻ~ݨúީϡſߪþବÀ⯯İѹ䳳žǾչ嶶̀ٸ湺׸廽Ը徿ÿѸĿη̷|ԟɷAͬصƷBøϷwoґķ "!! %:D." 4Ӈs΃(iŽIʨ¿W=ݼÿ*@$eÿ2 ޷\'ÿOμq2Ě0Qn{aA  a L #%  %$ $0 #x / ' d  z  , |+ |*)|)|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|F)| i |Gw 򿚈 |M ρ19 |OB |% |E |" |XΚ } P ۰{T w*aҼ{U* o b :UmxfQ9! \ q3 $''$  %& &$9 New Layer     9{{!9Do@YZ[]]_`abdefghjjkmnpprstvwxxz{|}YZ[\^_`abdefghjkklnoqrstuvxyz{|}~Y[[\]_`abcefghikkmnpqqstuvxyz{|}XZ[]^_`acceeghjklmnoqqstuvxxz{|~~YZ[]]^`abdefghjklmnppqstuwxyy{}}YZ\\^_`accdfghikkmnpprstuwxyz{|}YZ[]^_`abddfghiklmnoqqssuvxxz{}}XZ[\^^`acddfghjjlmnpprstuvwyz{|~YZ[\^_`acdefghijlmnopqstuwxyz{|~YZ[]^_`abddfgijjlmnpqrrtuvwyy{|~XZ[]^^`abcefgiijlmnopqstuwxxz{}~~YZ[\]_`accdfghiklmnoqrrtvvxyz{|}~XZ[]^_`abcdfghjkkmnpprrtuvxyz{|~YZ\\]_`abddfgiijkmnpprstuvwyz{|}YZ[\^_`abdefghjklmnoqrstvvxyz{|~YZ[\]_`abdefghjklmnoqrstuvxxz{|~YZ[\^_`abddfghiklmnpqrstuvwyz{|~~YZ\\^^`abdefghjklmnoqqrtuvxyz{|~YZ[\]^`abdeeghiklmnoprstuvxyz{|}YZ[\]^`abddfghjjllnpqqstuwxyz{|}YZ[\]_`accefghikkmnoqrstvvxxz{}}YZ[]^_`abdeeghikkmnpqqrtvvwyz{|}YZ[]^_`abcdfghjklmnppqrtuwxxz{|}XZ[\]^`acceeghijkmnpqqstuvwyz{|~YZ\]]^`acddfhhiklmnppqstuvwxz{|}~XZ[\^_`abcdfghiklmooprstuvxxz{|}YZ[]^_`abcefhiijlmnpqrrtuvxyy{}}~YZ[\^_`acdefghikkmnoprstuvwxz{|}YZ[\^_`abcdfgijklmopqrstvvwyz{|~~YZ[\]_`abdefgijjkmnoqrstvvwyz{|}YZ[]^_`abddfghiklmnoqrstuvxyz{}}YZ[\^_`abcdeghijlmnoprstuvxyz{|}YZ\\^_`abceeghjjklnpprstuvxyy{|}YZ[\]^`abdefgiijkmnoprstvwwyz{|~YZ\\]_`acdeeghijlmnoprstuvwyy{|}~XZ[\]_`abcdfgijjlmnoqqstvvwyz{|}~YZ[\^_`abceeghjjlmnopqstuvwxz{|}YZ[]^__acdefghjjlmnoqqrtuvxyz{|~YZ[\^_`abcefghjjkmnoqqstuvwyy{}~YZ[\]^`abddeghjjlmnoprstvvwyy{|}~YZ[\^_`acddfghijlmnoprstuvwxz{|}YZ[\^_`bcdefghijlmnoprrtuvwyz{|}~YZ[]^_`abdeegiijlmnoqqstuvxyy{|}YZ[\^__bbceeghikkmnpprstuwxyz{|}YZ\\^_`abdeeghiklmoppqstuwwyy||~YZ\]^_`abcefghjkkmnoqrstuvwxz{|~XZ\\]_`acdefghiklmnopqstvwwxz{}~~YZ[\]^`abdefghjklmnpqqrtuvwxy{}}YZ\]]^`accefgijklmnoqqstvvwyz{|}YZ[\]_`bbdefgijklmoopqstuwwyz{}}YZ[\^_`bbddfghijlmnopqstuwxyy{|~~YZ\\]__abdefgiijlmnoprstuvwyz{|}~YZ[\^_`abcefghjkkmnpprrtuvwyz{|}~XZ\\^_`bccefghikkmnoprstuwxyz{}~Y[[]^_`abdefghijlmnppqstuwwxz{|~~YZ[\]_`accefghijlmooqqstvwwyz{|}~YZ[\^^`acddfghjkkmnoqqstuvxxz{|~@YZ[]]_`abceeghjklmnopqstuwxyy{|}~YZ\\]_`abcefghiklmnpprssuvwyz{|}~YZ[\^_`abcefghiklmnopqrtuvwxz{|~YZ[\^_`abcdfghijlmnoprstvwxyz{|~~YZ[]^_`bbdeeghijlmnoqrstuvxxz{|}~YZ\\]_`abcefghikklnoprstuvxxz{|~~YZ[]^_`abcefghjklmnoqrstuwwxy{}~XZ[]]_`abcefgiijkmnoqrstvvwyz{|}YZ[\^^_abceegijkkmnpqrstuvwxy{|~Y[\]^_`bbcdfghijlmnopqstuvxyz{|~~YZ[\]^_abcefghijlmnpprstuvwyz{|}~YZ[]]_`abdefghijlmnpqrrtuvwxy{|}YZ[\]^`abcdfgiiklmnpqrstuwxyz{|}YZ\]]^`abcefghiklmnpprstuwxyz{|}YZ\\^^`bbddfghijkmnppqstuvwyz{|~YZ[\^_`abdeegiiklmnpqqstuvxyz{|}YZ[]^_`abdefghjklmoppqstuvwyz{|}~YZ[]]_`abcdeghijlmnoprstuvwxz{|}YZ[\^_`accefghiklmnopqstuvxyz{|}YZ[\^_`abcdfghjkkmnopqstuvwyz{|}~YZ\\]_`abcefghjjlmoopqrtuvwyz{|}YZ\\^_`abddfghiklmnoprstuwxyz{|~~YZ[\^_`abcdfghijlmnpprstuwxxz{|}~YZ\\^_`accefghijlmnppqstuwwyz{|}~YZ[\]__acdefghjjllnpprstuvwyz{|~~YZ[\]^`abcefgijjlmnopqstuvwyz{}~YZ[\^_`abdefgiiklmnpqqstuvxyz{|}~YZ\\^^`abddeghiklmnpqrstuvwxy{|~YZ[\]^`abdefghjkkmnoqrstvvxxz{}~YZ[]^_`abdefgiikkmnpqrstuvxxz{|}~YZ[]^_`abddfghijkmnpprstuvwxz{}}YZ[]^^`abdefghikkmnppqstuvxyz{|~YZ\\^_`acdefghijkmnoqrstuwxyz{}~YZ[]^_`abdefghiklmnopqstuvxxy{}~YZ\]^_`abcdfghijlmnpprstuwwxy{}}~YZ[\]_`acceeghiklmnoqrrtuvxxz{}}~YZ[]^_`acddfghjklmnpprstvvxyz{|}YZ[]]_`bcddfghiklmnpqrstuwwxz||~YZ[]^^`abdefghjkkmooprstuwxyz{|}YZ[]^_`abdefgiikllnoprstuvwyz{|}~YZ[\^_`accefghjklmnoqrstuwxyz{|}YZ[]^_`bccefgiikllnpprrtuvwxz{|~~YZ[]^_`abddfghjkklnoqrstuvwyz{|~XZ[]]^`bcceeghikkmnoqqstuwxyz{}}~XZ[]]_`accdfgiiklmnoprrtvwwyz{}}~YZ[\]_`abceeghjjlmnopqstuvwyz{|}~XZ[]^_`abdefghikkmnpqqstvvxyz{}~YZ[\^_`abcefgijklmnppqstuvwxy{|}YZ[\]__accefghijlmnoprstuwxyz{|}YZ[\^^`abdefghiklmnpqqstuvwyz{}}YZ[\^_`abddfghjklmnoqrstuvwxz{|~~YZ\]^^`accefghijlmoppqrtuwxyz||~YZ[\^_`abddfgiijlmnpprstuvwyz||}YZ[]^_`bbcefghiklmnoqrstvvxxz{}}YZ[\^_`abcefghjjlmnoprstuwwxz{}~YZ[\^^_acdeeghjjlmnoqqstuvwyz{|~~YZ[]]_`abcefghjjkmnoprssuvwyz{|}@YZ\\]_`abdefghijlmnoqrstuvxxz{|~YZ\]]_`abcdfghijlmnoprstuvwyz{|~YZ\\^_`bbcefgiijlmnoprstvvxyz{|~X[[\^_`abceegiijlmnoqqstuwwxz{|}~YZ[\]_`accefghjklmnoqrstuwwyz{|~YZ[]^_`accdfghjjlmnoprstuwxyz{|~~YZ[\^__acceeghikkmnoqqstvwxyy{}~Y[[\^^`accefhijjllopprstuwxyz{}}~YZ\\^_`abddfghijlmnoqrstuvxyz{|~XZ\\]_`bbcefgijjlmnoqrstvvwyz{|}YZ[\^_`abdeeghiklmnoprstuwwxz{|~YZ\\]_`abcdfghikllooqqstuwwxz||}YZ[]^_`abdefghjklmooprstvvxxy{|~~YZ[\]_`abddfghjjlmnpprstuwxyz{}}YZ[]^_`abddeghijkmnopqstuwwyz{}}~Y[\\^_`abddfghiklmnoprstvwxxz{|}~YZ[\^_`abddfghiklmnoqqstuwxyz{|~YZ[\]_`abdefgijjkmnopqstuwwxz{|~YZ[\]_`abcefghjjlmnoqrstuvxyy{}~~YZ[\^_`abdefghjkkmnoqqrtuvwyz|}~YZ[\^_`abcdfghjkllnopqstuvxxz{|~~YZ[]]^`bccdeghikllnoqrstuvwyz{|}YZ[\^_`acddfghjjlmnoqrstuvxyy{|}~YZ[]]_`abdefghjkllnoprrtuwwyz{|}Y[[]^_`acceegiijlmnoprrtuvxxz{}~XZ[\^__abcefghjklmoopqstuvwyz{|}~YZ\\]_`acdefghiklmnoprstuwwxz{|~YZ[]^_`accefghiklmnpqrstuvwyz{|}~YZ[]]_`abcdfghijlmnoprstuvwyz{|}~YZ[]]_`acceeghiklmnoqrstuvwxz{|~YZ\\]_`bbddfghjklmnoqqstuvxyz{|}YZ[\]__abdefghjklmnopqstuwxyz{}}~YZ\]]_`abcdfghijkmnopqstuvwxz{|}YZ[\^_`accdegiijlmnoqrrtuwwxz{|~~YZ\\^_`bbddfghiklmnopqstvwxyz{}~~YZ[]^_`abcefghijlmnoprstuwxxz{|}YZ\\]_`abddfghijlmnoprstuwxxz{|}~YZ[\]^_abddfghiklmnpqrstuwxyz{|~YZ[]]_`abddfghikkmnpqqrtvvxyz{}~YZ[]^_`bcddfghikkmnoqrstuwxyz{}}~YZ[\^_`accdfghijkmnopqstuwwxy{|}YZ[]^_`accefghiklmnoqqstuwwyy{|}~YZ[\^_`abcdeghijlmnpqrstuvxyy{|~~YZ\\^_`accefghikkmnpqqstvvwxz{}~~YZ[\]^`bccefghijlmnoqrstuvwxz{|~YZ[\]_`abddfghjjlmnpqqrtuwxyz{|~~YZ[]^_`acceeghiklmnoprstuvwyz{}}YZ\\^_`abcdfghijkmnpqrstuwwxz{|}~YZ[]^^`abdefghiklmnoprstuvxyz{|}~YZ[\^_`bbdefghikkmnpprstuvxyz{}}~YZ[]^_`abcefghikklnoqqstvvwxz{|}YZ[\^_`abddfghjjlmnppqstuwxxy{|~~YZ[\^_`abdefghjklmnoprrtuvwxz{|}YZ[\]_`accefgiiklmnoprstuwxyz{|~YZ[\]__bbcdeghikllnoprstuvwyy{}~~YZ[]]_`acdefghikkmnoqqrtuvxyz||~~YZ\\^^`acceeghijlmnpqqstuwwxz{|}@>臘拉拉臘復便臘拉臘拉拉拉拉臘拉臘便臘臘臘便復便便便拉復拉復@復臘拉拉復拉便臘拉拉臘復臘便臘臘拉拉臘便臘臘便臘拉便拉臘復復@便便拉拉拉復臘臘臘拉便便拉便臘拉拉拉臘拉拉臘復臘臘拉拉拉拉復臘便拉拉@K%9 Neue Ebene      {9{|@|L9|| |0@@@@@@@@K%qtemu-2.0~alpha1/misc/setup_win32/qtemu.nsi0000644000175000017500000001653010753140477020621 0ustar fboudrafboudra;/**************************************************************************** ;** ;** Copyright (C) 2006-2007 Urs Wolfer ;** ;** This file is part of QtEmu. ;** ;** 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 2 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 Library General Public License ;** along with this library; see the file COPYING.LIB. If not, write to ;** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;** Boston, MA 02110-1301, USA. ;** ;****************************************************************************/ ;-------------------------------- ;Include Modern UI !include "MUI.nsh" ;-------------------------------- ;General ;Name and file Name "QtEmu" OutFile "qtemu-1.0.5.exe" !define MUI_ICON "qtemu.ico" !define MUI_UNICON "uninstall.ico" ;Default installation folder InstallDir "$PROGRAMFILES\QtEmu" ;Get installation folder from registry if available InstallDirRegKey HKCU "Software\QtEmu" "" ; use lzma compression SetCompressor /SOLID lzma ; adds xp style support XPStyle on ;-------------------------------- ;Interface Settings !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "header.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp" !define MUI_ABORTWARNING ;-------------------------------- ;Language Selection Dialog Settings ;Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "Software\QtEmu" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ;-------------------------------- ;Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE $(MUILicense) !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES ;!define MUI_FINISHPAGE_LINK "Visit the QtEmu site for the latest news, FAQs and support." ;!define MUI_FINISHPAGE_LINK_LOCATION "http://qtemu.sf.net/" !define MUI_FINISHPAGE_RUN "$INSTDIR\qtemu.exe" !define MUI_FINISHPAGE_NOREBOOTSUPPORT !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" # first language is the default language !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "PortugueseBR" ;-------------------------------- ;License Language String LicenseLangString MUILicense ${LANG_ENGLISH} "gpl.txt" LicenseLangString MUILicense ${LANG_GERMAN} "gpl.txt" LicenseLangString MUILicense ${LANG_TURKISH} "gpl.txt" LicenseLangString MUILicense ${LANG_RUSSIAN} "gpl.txt" LicenseLangString MUILicense ${LANG_CZECH} "gpl.txt" LicenseLangString MUILicense ${LANG_SPANISH} "gpl.txt" LicenseLangString MUILicense ${LANG_FRENCH} "gpl.txt" LicenseLangString MUILicense ${LANG_ITALIAN} "gpl.txt" LicenseLangString MUILicense ${LANG_POLISH} "gpl.txt" LicenseLangString MUILicense ${LANG_PORTUGUESEBR} "gpl.txt" ;-------------------------------- ;Reserve Files ;These files should be inserted before other files in the data block ;Keep these lines before any File command ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) !insertmacro MUI_RESERVEFILE_LANGDLL ;-------------------------------- ;Installer Sections Section "QtEmu" SecQtEmu ;user cannot deactivate it SectionIn RO SetOutPath "$INSTDIR" File ..\qtemu.exe File qtemu.exe.manifest File qtemu.ico ;Create uninstaller WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\QtEmu" DisplayName "QtEmu" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\QtEmu" UninstallString '"$INSTDIR\Uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\QtEmu" DisplayIcon $INSTDIR\qtemu.ico WriteUninstaller "$INSTDIR\Uninstall.exe" ;create desktop shortcut CreateShortCut "$DESKTOP\QtEmu.lnk" "$INSTDIR\qtemu.exe" "" ;create start-menu items CreateDirectory "$SMPROGRAMS\QtEmu" CreateShortCut "$SMPROGRAMS\QtEmu\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 CreateShortCut "$SMPROGRAMS\QtEmu\QtEmu.lnk" "$INSTDIR\qtemu.exe" "" "$INSTDIR\qtemu.exe" 0 SectionEnd Section "Qemu" SecQemu SetOutPath "$INSTDIR\qemu" File ..\qemu\bios.bin File ..\qemu\fmod.dll File ..\qemu\libusb0.dll File ..\qemu\linux_boot.bin File ..\qemu\pxe-ne2k_pci.bin File ..\qemu\pxe-pcnet.bin File ..\qemu\pxe-rtl8139.bin File ..\qemu\qemu.exe File ..\qemu\qemu-img.exe File ..\qemu\qemu-system-x86_64.exe File ..\qemu\README-en.txt File ..\qemu\SDL.dll File ..\qemu\vgabios.bin File ..\qemu\vgabios-cirrus.bin File /r ..\qemu\keymaps File /r ..\qemu\License ;Store installation folder WriteRegStr HKCU "Software\QtEmu" "" $INSTDIR SectionEnd Section "Translations" SecTranslations SetOutPath "$INSTDIR" File /r ..\translations SectionEnd Section "Help" SecHelp SetOutPath "$INSTDIR" File /r ..\help SectionEnd SubSection "Libraries" SecLibs Section "Qt Library" SecQtLibs SetOutPath "$INSTDIR" File ..\QtCore4.dll File ..\QtGui4.dll File ..\QtXml4.dll SectionEnd Section "MinGW Library" SecMingwLibs SetOutPath "$INSTDIR" File ..\mingwm10.dll SectionEnd SubSectionEnd ;-------------------------------- ;Installer Functions Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd ;-------------------------------- ;Descriptions ;USE A LANGUAGE STRING IF YOU WANT YOUR DESCRIPTIONS TO BE LANGAUGE SPECIFIC ;Assign descriptions to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecQtEmu} "QtEmu" !insertmacro MUI_DESCRIPTION_TEXT ${SecQemu} "Qemu executable and files (recommended)." !insertmacro MUI_DESCRIPTION_TEXT ${SecTranslations} "QtEmu Translations." !insertmacro MUI_DESCRIPTION_TEXT ${SecHelp} "QtEmu User Documentation." !insertmacro MUI_DESCRIPTION_TEXT ${SecLibs} "Required libraries (recommended)." !insertmacro MUI_DESCRIPTION_TEXT ${SecQtLibs} "Not required, if you have Qt 4.3 installed on your system." !insertmacro MUI_DESCRIPTION_TEXT ${SecMingwLibs} "Not required, if you have MinGW installed on your system." !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Uninstaller Section Section "Uninstall" RMDir /r "$INSTDIR" DeleteRegKey /ifempty HKCU "Software\QtEmu" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\QtEmu" Delete "$DESKTOP\QtEmu.lnk" RMDir /r "$SMPROGRAMS\QtEmu" SectionEnd ;-------------------------------- ;Uninstaller Functions Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd qtemu-2.0~alpha1/misc/setup_win32/gpl.txt0000644000175000017500000004310310753140477020272 0ustar fboudrafboudra GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. qtemu-2.0~alpha1/misc/setup_win32/header.bmp0000644000175000017500000006233210753140477020704 0ustar fboudrafboudraBMd6(9d  Ŭ~~~}}}ﮮե}}}sssvvv󺺺wwwνrrrġ޹{{{}}}ÿⴴԁÿ㳳ݼÿ྾ţʨ¿𼼼~~~sssӇss΃ļϷwwooґĺͬصƺԟɺξ̹κмѽҾӿӾѼϺ̸ʶdzű¯ۿټ׹ǿ̺tAh)p1v7|=ӂBֈGٍLܑPޕTWXYXVޕTܑPٍLֈGӂB|р?Ҁ@р?>}7Μ༼ʪP <@DI S_ g(m-p0r2s3t4t4s3r2p0m.i)a"UH ?==7ϝ潽ɩO;<F ]j+p0s3v5x8z9{:|;{;{:y9w7u5r2o/k+a"O><7ϝ쾾ȨN;Me&o/r2v6z9}<р?ҁAӃBԃBԃBӃAҁ@>|ԃBևF؋JڎMܑOݒQݓQݓQܒPېOڎL؊IՇEӂA}ԄC׉HڎLܒPߕSVXYYXUޕSܑOٍKֈGӃB}y8s3`&קDZ´ǿPm,~=ԄB؋IܒOU[afjnpomie`ZߖTܐN؉GӂA|;v5Qգ߿žL"Vy=́CЇIԍOؓUܙZߟ`ejnqqmidߞ_ۘYגTӌNІHBz=j0BҦؾ˼̼÷ĸŹƺƻǼȼɽʾʾʾɾȽȼǻƺŹĸø·νɹֽ߽߳Ȳ輼Ḹݻ۸۹㾾ڹ幹䘘ⷷqtemu-2.0~alpha1/misc/setup_win32/qtemu.ico0000644000175000017500000000427610753140477020606 0ustar fboudrafboudra ( @y8eee<nÛĨX ޕRyyyΫݠm˃RLj+ՆD_ѷՒ`yֶΪqqqǶ޺b"q1ЋYSgڽkkkڍKFY?Š{OٚgsӯүӰΪd*@X׵ٸ]dv5ۑN͆V˨n.}<׉H\QӃBjعHh.f&ԳZ?TUוbwִH ҍ[ѭЬ=A PTNk,ݒPW¦ۜhٻߢnЬͩ_ s3w6޼άI UYY`!d%g(z:}=ҁ@ԅCֈFڎM[alf۾Ri)q/؋I_ַ>Wo/rrru4y8Ҁ?ٌIߖTe'ep!!pe!Ip@I888ވ2I#ah8#۲G!p#kb8Ҏ?ݲIp@bbbbhۥ Cp뺈Ip1OV!paݲk뺧Ipp%W@d[YFZ9lJ|+nKo:}!hC!!(^=""=< -;p!?akGT,33̵UTx*,mmf,*#kʮ*c,\\,cjtybbhLjU*vv*UjG@CQ4.U˚*R4z͈م޶Mzv榤c*ѓ!#Qc\6m,RhbۆbAC_ߦ]]]3m{DEpkkkhv\6 5~m,PS>>_fiXϜguGGA7f]/qXi )ɽkkhO w$s0r ǟwH& !>`ȄahB@hGن޸hhhhhhN!!!!!!!!pp`qtemu-2.0~alpha1/misc/setup_win32/welcome.xcf0000644000175000017500000010764610753140477021121 0ustar fboudrafboudragimp xcf file:BB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  ~.QtEmu     6gimp-text-layer(text "QtEmu") (font "Verdana") (font-size 37.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgba 0.564706 0.564706 0.564706 1.000000)) (justify left) (line-spacing 2.000000) (box-mode dynamic) (box-unit pixels) {~. ~.8   aӭd1R P i<=i ::    l l  H K  : 9  v u  W Y  ) *           ' )  U W  x }  ; 1  E H p b  % =1 j<=Z~qbT ]0 =g zܳ|&9f98C43i5h6Ób $ $ $;;Gޮ=[h H:oX%W&:bb)K)L!!   MIJ!N\dl ?p Pasted Layer     0 ~p p *Rlxww/kwne^cba3axe^cdmxhbs/ag`7aZ/ ch. d. e. e;f fZJ=>ACEHJMOQTVXZ\_acfhikmnprsstssrqpomkigeca_]ZXVSi] :;;=@BDGIKNPSUWY[]`bdfhiklmoppqqppomlkigfdb`^\YWURj^-88:=?ACFHJMOQTVXZ\^`bdfghjklmnnmlkjigfdb`^\ZXUSQk_657:<>@BEGIKNPRTVXZ\^`bcefghijjihfecb`^\\XVTRPl_5368;=?ACFHJMOQSUWYZ\^`acdefgghhgfedca`^\\YVUSQOl_3259;<>@BDFIKMOQSUWYZ\]_`abcdeededbb_]\ZYVUSQOMm`#!11348;=?ACEGIKOOQSUVXZ[]^_`aabb`^^]\[ZXVUSQONLnb#002479;>@BCEGIKOOQSTVWYZ\^]^__a``a_^^]\[ZYWVTSQONLJpd0/1358:<>@BDFHIKMOQRSUVWYZZ]\^]]\[ZYXWVUSRQOMLJHqf..02468;>>@BDFHIKMNPQRTUVWXXYYZZYXWVUTSQPOMKJHFrh-,.02477;=?ABDFGIJLNOPQRSTUVVXWWVUTTSRPONLKIHDDsj&--/13579;=?@BDEGHJKLNOPQQRSSTTSRQPONMKJIGGCBtk*,-/13579;=>@BCEFHIJKLMNOPPQQPONMLKJIHFECA@ul$+-./13579;<>@ABDEFHIJKLLMONNONOMLLKJIHGEDBA?>um(,,.013568:<=?@ACDEFGHIJJKKLLKJIIHGFEDBA@>=<vo(,,./134689;<=?@ACDDEFGIHIIHGFDCBA@?><;9wp*,-//124578:;<>?@ABCCDDEFFEDCBA@?>=;:97xq',--/0235679:;<>??@AABBCCBCA@?>>=;:9865ys .-..01345689:;<==>??@@?>==<;:986543zt*--/023456789:;=<==>=<;:987654320{u -.-//01235667899::;;:9:876654322/.}v*0//012345566778876543210/.++}w  )/00/0124344554342110/..-.~y '.00//001224210/.-.,&z %)-0/0/00//0.//.//,)#z  #&)+*,--,++)&%$ }  !"!""!#""!" !!  !  !"#$$%%&&(''(&&%$"! # !"#$%%&''(())('&%&#"! % !"#$%&'())*++,+*))('&%$#" '!"#%&'()*++,-..//1/.--,++*)('&$#! ) !#$&'()*,,-./00122101/.-,,*)(''$"+""$%'()*,-./012434455432210/.-,+)(&$-!#$&')*,-./1234556778876543320/.-,*)'. !#%&(*+-.01234667899::;;:987654321/.-++/ ##%')*,./12356789:;=<==>=<=;:98764320/-,1 ##%')+,.0134678:;<=>>??@@?>==<;98764310.2!#%')+-.024578:;<>??@ACBCCDDCBCA@?>=<;9875420xww/kwne^cba3axe^cdmxhbs/ag`7aZ/ ch. d. e. e;ffibZ\ZXjppssvwxyy|}~~돍~}|fjK:<9Xv}~빸glI54Qv뻺hnJ4Dn~}붵iqH5]zz|~볲jrHDnxx{}kqDRvvyz}lqM_usvy{~묪lrTbssuxz}念mrXcqqtvy{~즣ntXcppruwz|~飢pvR\poqsux|}qxKVomprtvx{}rzHQnmnprtwy{~s|IDelmoqsuwy|~엕t~L5Wklmoqsuwz{}u~M4Eclkmoqsuwy{}~u߁N69Phkmnoqsuwy{|~~|vN7;=Rhllnoqsuvxz|}~~}|zwN7<:?@AAGL\knmoopqrstuvvwwxxyxwvuutsrqponlk}Q6==<=@ACDFEFIP[hoonnopqrsstvuuvuvtssrqqponnlml~Q6=>?@BDGGHJLLNPU^hnnoopqrsrsqppononnmf[RP6>?ACDFHJKMNPQRRSTW^egkpopoppoopoononokg`]SPONQ7@BCEGIKLNOQRSTVWXXY[[\]_dghikjllkihgfa_[XWVVUURRR9BDFHJLMOPRSTVWXZ[\]^]`a`aabaa`a`_\]]\[ZXWVVT;DFHKLNPQSTVWYZ[[^_`abccdeefedccb`^^]\[ZXWX?FHKMOPRTUWYZ[]^`abcdegfgghhiihgfgedcb`_^\[ZX@IKMOQSTVXY[]^`abdefghhijjkkllkjihhgfecbb_]\\BLMOQSUWXZ\^`abdefghijklmmnpoopponmlkjihgfecb`_]ENPRSUWY[]_`bcefhijklmnoppqrrsrqponmlkjihfeca`GPRTVXY[]aacdfgijlmnopqrsttuuvuutsrrqponmkjiged`IRTVXZ\]`bceghjjmnoprstuvvwyxxwvuttsrponmkjhfcLTVXZ\^`bdfgiknnqqrtuvwxyyzz{{zyxwutsrqonlkicLVXZ\^acdfhjlmoqrsuvxyz{||}}~~}}|{{zzwvusrpomkfOWZ\^aceghjlnpqstvxyz||}~~}|{zywvusqongQY[^`cegikmnprtuwyz|}~~}{zxwutrpxww/kwne^cba3axe^cdmxhbs/ag`7aZ/ ch. d. e. e;ffՃf؎gڎhّiۑjڒkܓlݕlܖmܗnޗpݙqߛrst៧uᠨu⣩vᥩw㤩秨x㥪 y䩪맩z䪩{婫 }嬪 }歪ꪫ~歬 簫谫豬򽼽貮󿾾鴯귰 븲 빳컵뼶뾷뿹뿹  / %Divx3xZ6/8#: ;=;<<<==========================================~sok klprjm_y~\^PjaɕeQ}]#W8qr&}Jl'Ujq[[\lYhڒZgX}YjԅZjɘ [d̝\ kc]ԣЛ\ a`T̥ꚕ}qe]^_`m]ywzuZNv]جi]Њp_ ֑_m` _ 塌 묋` `ネaĉ aPONMMLKHGFFC==?@ljaIGEC?=;9632.NJbSQNLJFEA@<;;3ljcQOMJHFCA><9890NJdPNLJGDB@>;9656"NJdOMKHFCA?=:86325Ȓ֜eNLJGDB@><975303|iwqqoppoqxfMKHFCA?=;8642/.+ʋ afKIGDB@><975310-2ɓtfJHECA?=;86420-*0˒gHFCA?=;97531.,).˒gFDB@><:8642/-*)-˔ hDB@><:86420.+))#˔iB@>=;97531/,*(*͖i@>=;97531/-+)(( ͖j><;97541/-+)'(͖j<:975400.,))($Ηj:875510.,*((&Ж͸l86531/.,*('&ϒļl6431/-,*((&ϛl420/-,*)(%Ο l10.-+)*)ϝm/-,**&ϟm,+*+* Ϡn,+)  Ѣn&ϡo ѣp Фq Чr Ӧr ӟļr Ԥľѡr ֝~}zyypXOQQKٳs ԥ𻳷ܼt! Ԩt#!  Ӭu%#"  ԯu'&$"! Ԯv*(&$"! ԯv,+(&%#!Աw/-+''%#!ְx~sok klprjm_y~\^PjaɕeQ}]#W8qr&}Jl'Ujq[[\lYhڒZgX}YjԅZjɘ [d̝\ kc]ԣЛ\ a`T̥ꚕ}qe]^_`m]ywzuZNv]جi]Њp_ ֑_m` _ 塌 묋` `ネaĶĉ a{yxwvtsrponi\Z\]Blja됏~|xwsW<<>NJb╓~{{tO9:ljcᓑ|zwyqB:NJd뒐~|ywuv`;NJd둏}{xvtstEȒ֜e␍|zwusptX|iwqqoppoqxf⎌~{yvtronkʋ af㍊|zxusqnkrɓtf㋉}{yvtrqmjp˒g≇~|zwusqnkio˒g⇅}zxvtroljil˔ h⅃}{ywurpnkihb˔i}{ywuspnljgiW͖i}{zwwuqomjhghH͖j}{zxvtqomkihgZ;͖j}{yxvtqomkiggcE;Ηj{ywutqomligfeR<<Ж͸lxwusqomljhheT>:<ϒļlvusqomkjhheT>:<=ϛltrpnmkigidQ>:<==Ο lqpnljiih^J=:<==ϝmomkjikeTB;;<==ϟmlkjli[J>:<==ϠnlkhZJA;;<==ѢnfZKDA?@=<==ϡoLIGFEDB@?<==ѣpMKIIHFDCA?><==ФqPOMLJHGECB@=<==ЧrSQPNMKIGFDB@=<==ӦrVTSQOMLJHFDBA?<=ӟļrXWUTRPNLJHGECA?<Ԥľѡr[YXVTSPNMKIGECA?֝~}zyypXOQQKٳs]\ZXWUSQOMKIGECAԥ𻳷ܼt`^\[YWUTQOMKIGEBԨtba_][YXVTQOMKIFDӬueca_^\ZXVTQOMJHFԯugecb`^\ZXVTQOLJH Ԯvjhfdb`^\ZXUSPNLJ ԯvljhfdb`^\ZWUSPNK#Աwnmkhfdb`^[YWTROM&ְx~sok klprjm_y~\^PjaɕeQ}]#W8qr&}Jl'Ujq[[\lYhڒZgX}YjԅZjɘ [d̝\ kc]ԣЛ\ a`T̥ꚕ}qe]^_`m]ywzuZNv]جi]Њp_ ֑_m` _ 塌 묋` `ネaĉ aljaκNJb˵ljcȭNJd˿NJdˮȒ֜eɸ|iwqqoppoqxfĕʋ afȖɓtfȚ˒gǛ˒g˔ h˔iú͖i°͖jû͖jΗjЖ͸lϒļlϛlΟ lĽϝm·ϟmüϠnĺѢnºϡoѣpФq󵴳ЧrԗӦrĸӟļrĹԤľѡrĻ֝~}zyypXOQQKٳs༻ԥ𻳷ܼtܾԨtܿӬuԯuԮvԯvԱwְx@Za a]I(NϳmV%  "']  ](;  )[3 )qH )}V)  )^. )a1 )b2 )b2 )b2x xy)b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b23 #%')+-/124689;<>?@ABCDDEFFGFFEEDDCBA@?=<:976426 #%')+-/13578:<=?@BCDEFGGHHIIHGFEEDCA@>=;98647 "$')+-/13579;<>@ACDEFHIIJLKKLLKLJIHGFEDBA?><:868!$&(*,.13579;=>@BCEFHIJKLMMNNONMLKJIGFECB@><:89#%'*,.02379;=?ABDFGIJLMNOOPQQRPOONMKJIGEDBA@<::$')+-02479;=?ACDFHJKMNOPQRSUTTSRQPONLKIHFDCA><;&(*-/1469;=?ACEFHJLNOPRSTUVVWWVUTSQPOMLJHFECA>{ !$(*+./134687::;::8765431/,+)&$! 1Ἰ|1{CHqXu=Schg g_^wq}ą]3=aβyW,FIi郾KUQ o,g[ϤҎ{_oɫРa ӫŭr ᴪ Ф ԥ̟ ~ָ߽ v˱ Jy  v8s| Lr'Lop$"`mOoqIesyóH`kv"J_hr{|sg`8LYbkrx}~ysla[M8&6CP\ZYU]`cfgc`]Y\^\PB5'+   hS[]_begikmoqruwxz{}~톅~|{yxvtrjU]_bdfhkmoqsuwy{|~퉈||zxvukV_acfhjloqsvxy{}Ȋ|zywlX`cehjlnqsvxz|}ő}{ynZbegilnpruwz|~Ǒ}{p[cfikmortwy{~ǔ}p\ehjloqtvy{}ƗߔYAILNRTX\^acfhkoqsux{}~凅~|yxusqnlh3|1{CHqXu=Schg g_^wq}ą]3=aβyW,FIi郾KUQ o,g[ϤҎ{_oɫРa ӫŭr ᴪ Ф ԥ̟ ~ָ߽ v˱ Jy  v8s| Lr'Lop$"`mOoqIesyóH`kv"J_hr{|sg`8LYbkrx}~ysla[M8&6CP\ZYU]`cfgc`]Y\^\PB5'+   꿺܋㺶3|1{CHqXu=Schg g_^wq}ą]3=aβyW,FIi郾KUQ o,g[ϤҎ{_oɫРa ӫŭr ᴪ Ф ԥ̟ ~ָ߽ v˱ Jy  v8s| Lr'Lop$"`mOoqIesyóH`kv"J_hr{|sg`8LYbkrx}~ysla[M8&6CP\ZYU]`cfgc`]Y\^\PB5'+   ==========<<<F;:39V7 !N!)Jt (A[ny 1BPY`deefu  %,145567P# -u&H( n)*b+2,o-- - - R,  , 0+U* P()L&*Hm$%?[x  1H]r!2FYix Ź .=L[hs|ý}".;GR]gpvz{wph^T &/8AJPW^dhlnpqsstsqpnlhd^XRJB:0' %)/47;=?ADEEDB@=;84/*%   "1/-+'&$" ղx31/-+(&$" ղy431/-+(&$"մy6431.,*(%#!յz86420.,*'%# ׵z:86420-+)&$!׷z<:8531/,*(%# ׷z ׹{ո}Ĵ׸}ÿݳڨ~¾ީˠ~ڨ̡}j^^evƿ~򲕡s}܋htqr}žϋzquuļה|{͂~}zû䷋nl|ϥx|iúĶV7=`|̷zЇe¸V]agg`v㇌wAO}zӯ{zxh p}xtڗuww|me9;3сzdefhjt|gc`_]jjJD2 ôdrѼydgڼ[NGљ}[lz~t\bΞfUĞXVZZWQn[UҹfQZ$ 7ϨKwhp blFmք/iގVrђ`)}ݳ|g2ֺpZ#јԉǮqkGѥzrlMѨėoxj`E󡗓۴DH#P ujl)&gmngffcaQ qomkhfdb_][XVTQO'ղxsqomkhfca_]ZXUSP)ղyusqoljgeca^\YWTR,մywusqnljgeb`^[XVT-յzywtrpnkifdb_]ZWU.׵z{xvtrqmkhfc`^[YV1׷z}zxvsqmljgdb_]ZW2׷zdb`\ZXTPNLHDB>;7׹{ո}׸}ÿݳڨ~¾ީˠ~ڨ̡}j^^evƿ~򲕡s}܋htqr}žΈzquuļ֓{͂~}zû䷊ˈ|ϥx|iúĶŌ~|̷zЇe¸V]agg`v㇈yzӯ{zxh p|~}uwtڗuww|me9;3сycdfhjt|gc`_]jjJD2 ôdrѼydgڼ[NGљ}[lz~t\bΞfUĞXVZZWQn[UҹfQZ$ 7ϨKwhp blFmք/iގVrђ`)}ݳ|g2ֺpZ#јԉǮqkGѥzrlMѨėoxj`E󡗓۴DH#P ujl)&gmngffcaQ ղxղyմyյz׵z׷z׷z׹{ո}׸}ÿݳڨ~¾ީˠ~ڨ̡}j^^evƿ~򲕡s}܋htqr}žϋzquuļה|{͂~}zû䷋nl|ϥx|iúĶV7=`|̷zЇe¸V]agg`v㇌wAO}zӯ{zxh p}xtڗuww|me9;3сzdefhjt|gc`_]jjJD2 ôdrѼydgڼ[NGљ}[lz~t\bΞfUĞXVZZWQn[UҹfQZ$ 7ϨKwhp blFmք/iގVrђ`)}ݳ|g2ֺpZ#јԉǮqkGѥzrlMѨėoxj`E󡗓۴DH#P ujl)&gmngffcaQ 9b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b28b2 *b2)b2)b2ؼ}ifee)b2ῒ\;7667)b2쾃=)b2^)b2ۅ()b2-)b2%)b2 g)b2 )b2 )b2 )b2 )b2 )b2Ӟ)b2᪎)b2ޯ)b2ϥm)b2ܺmO)b2ڼ|gJ.~(Ԇa1ͷpZ@'A'_/q^H2 %٘Z+ wjYG4" -"ҧwO# ti\M=.  4Ÿe=G;/# :\{쒏~iI&  7PblpqqpngYC( &3;@AA@=7,  @8: Background     f:: ".:FR^jv            (((R)N'qtemu-2.0~alpha1/misc/setup_win32/welcome.bmp0000644000175000017500000045565610753140477021126 0ustar fboudrafboudraBM[6(:x[  ƨғѐėȐҳʪӭ򹹹䙙ڔё—Ȑԣߐݮ䑑ߛΐ吐ːِ퐐񐐐񐐐ސސ퐐ؐ̐晙Ɛ搐򮮮ސ൵װА摑ё˜۔󼼼յĿǾȯĸ|||yyyuuuuuuvvvwwwwwwvvvvvvttttttrrrrrrrrrsssuuuxxx|||ţ~~~xxxvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutttrrrssswww³zzz~~~}}}|||}}}yyywwwqqqppprrrvvv|||Ӳqqqooo}}}͹~~~~~~zzzqqqnnnqqqvvv~~~幹sssrrrη~~~{{{rrrmmmpppvvvǠooo}}}zzzqqqmmmttt秧۴zzzzzzշ}}}ó}}}||||||qqqmmmuuuԛėyyyֵ{{{Ǯyyyyyynnnppp|||ŝ򦦦yyyߺxxxֺxxxyyyqqqmmmzzzԓyyyÏvvvݳ{{{rrrooo}}}yyyݓѓssspppqqqyyyޏsssoooyyyډֆmmmyyyoooyyy{{{yyy˱͈yyyǺָ߽yyy襥ԥ̟񓓓yyyɞᴴФߺyyyӫŭꢢyyyɫРˑҹyyyԏϤҎΦ̆XXXVVVZZZZZZWWWQQQnnnyyy߱矟スڼ쾾}}}[[[lllzzz~~~ttt\\\bbbyyyȽ|||郃|||wwwȱôdddrrrѼyyydddgggyyyνzzzwwwβyyy```WWWoooᦦzyzdcdedefffhhhjjjttt鷷|||gggccc```___]]]jjjyyy׾{{{yyyxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww}}}Ćwwweeennntttwwwwwwwwwwwwwwwwwwwwwwwwwwwwww|~}}u}xwxtttڗuuuwwwwww|||mmmeeeyyyֶzzz㇇wwAAOO}y}zzzӯ{{{zzzxxxhhhyyy޺ĶVV77==``~|||̷zzzЇeee¸yyy䷷nn˒ll|||ϥxxx|||iiiúyyyٝה||{{{͂~~~}}}zzzûyyy𱱱ϋzzz𡡡qqquuuuuuļyyyۙ򲲲sss}}}܋hhhtttqqqrrr}}}žyyyڨ̡}}}jjj^^^^^^eeevvvƿ󉉉yyy¾ީˠ󉉉yyyÿݳڨ񉉉yyy˼˸̸κλλϼϼϼммӾҾӾӿӿӿӿӾҿҿѼнлλͺ̹̹˶ʶɵǴƳŲIJñ®ٿؾؽ׼պָֹԹҳٹ׸񈈈yyyոyyyܺ{YAILNRTX \^acfhkoq!s$u(x*{+}.~/؁1ق3ڃ4܅6݇8݈7މ:މ:ފ:ފ;ފ:މ:މ:݈8݈7ۇ6܅5ڃ4ق3؁1~/|,y+x)u&s$q!n lhdb`\Z X TPNLHDB>;7׹yyyp;\e&h(j*l-o/q1t4v6y9{;}=?ӂAԄCՆEֈF؊HٌJڎLۏNܑOݒPޔRޕSߖTUVVWWWWWWVVUߖTޕSݓQݒPܐOۏMڍLًJ׊HֈFՆEԄCӂA>}}<{:x8v6t4r2q0m-k+h)f&c$`!^[YV1׷yyyn9Zb#e%g'i*l,n.p0r2u3w7z9|;~=р?ӂAԃBՅDևF׈G؊IًJڍLڎMۏNܐOܑOܒPݒQݓQݓQݓQݓQݓQݓQݒRݒPܑOܐOۏNڎMڍKٍJ؊I׊GևEՅDԃBӁAҀ@}<{:y8w6t4r2p0n.k,i*f'd%b#_ ]ZWU.׵셅yyyl8X`!c$e&h(j*l,n.q1s3v5x7z9|;}=>ҁ@ӃBԅCՆEֈF׉H؊IٌJٍKڎLڎMۏMۑNېNېNݐOݐOېNېNۑNۏMڎMڏLَKٍJ؊I׉GևFՆEԄCӃBҁ@>}<{:y8w6u4s3q1n.l,j*g(e%b#`!^[XVT-յ녅yyyk7V_ a"c$f'h)j+l-o/q1s3v5x7y9{;}<>Ҁ@ӂAԄCՅDՇEֈF׉H؊I؋IٌJٌLٍKڍKڍLڎLڎLڍLڍLٍKٌL،J؊I׈H׈GևFՆEՅDԃBӂAҀ?р>||=|;z9x8v6u4s3q1o/m-k+h(f&c$a"_ ]ZXUSP)ղꄄyyy翟h3S[]_ b#e%g'i)k+m-o/q1r2u4w6x8z9{;}<~>Ҁ?ҁ@ӂAӃBԄCՅDՅDՈEևFևFֈFֈFֈGֈFևFևEՆEՅDՅDԄCԃBӂAҁ@?~=|<{:y9x7v6t4r2q1o/m-k+h'f&d$b"_ ][XVTQO'ղ郃yyy翟g2QY[^`!c#e%g'i)k+m-n.p0r2t4u5w7y8z:|;}<~>?Ҁ?ҁ@ӂAӂCԃBԄCԄCԅDԄDԄDԄCԄCԅCԃBӂCӂAҁ@Ҁ?>~=}<{;z9x8w7u5t4r2p0n/m-k+h'f'd%b#`!^[YWTROM&ְ烃yyy鿠f1O WZ\^a#c#e%g'h)j+l,n.p0q1s3t4v6x7y8z:|;|<}=~>>Ҁ?Ҁ?Ҁ@ҁ@ҁ@ԁ@ԁ@ҁ@ҁ@Ҁ@Ҁ?Ҁ?>~=}=|<{;z9y8w7v6u4s3q1o0n.l,j+h(f&d%b#`!^\ZWUSPNK#Ա炂yyy鿞c/L VXZ\^a#c#d%f'h)j*l,m.o/q1r2s3u5v6x7y8z9{:|;|=}<}==~=~=~>~>~=~==}=}<|={;{:z9z8w7v6u4s3r2p0o/m-k,j*h(f&d$b"`!^\ZXUSPNLJ ԯ灁yyy龝c.L TVXZ\^`!b#d%f&g(i*k+n-n.q0q1r2t3u4v6w6x7y8y9z9z:{:{;{;{;{;{;{;{:z:z9y9y8x7w6u5t4s3r2q1o/n.l-k+i+g'e&c$b"`!^\ZXVTQOLJ H Ԯ偁yyy鼞`-IRTVXZ\]`!b#c$e&g'h)j*j,m-n.o/p1r2s3t4u5v5v6w7y7x8x8x8x8x8x8x8x7w7w6v6u5t4t3s3r2p0o/n.m-k,j*h)f'e%c#a"_ ^\ZXVTQOMJ H F ԯ倀yyy軛`+GPRTVXY[]a"a"c$d%f'g(i)j*l,m-n.o/p0q1r2s4t3t4u4u5u5u5v5u5u5u5u5t4t4s3r2r2q1p0o/n.m-k,j+i)g(e&d$b#a!_ ][YXVTQOMK I F DӬ䀀yyy繙])ENPRSUWY[]_ `!b#c$e&f'h(i)j*k,l,m-n.o/p0p0q1r2r2r2r2s2s2r2r2r2q2q1p0p1o/n.m-l,k,j*i)h(f'e'c$a"`!^\[YWUTQOMK I G EBԨyyy渗\'BLMOQSUWXZ\^`!a"b#d%e&f'g(h)i*j+k+l,m-m.n.p/o/o/p1p1p1p1o/o/n/n.m-m-l,k+j+i*h)g(f'e&c$b#`!_ ]\ZXWUSQOMK I G ECAԥĻܼyyy緔X%@I K MOQSTVXY[]^`!a"b#d$e%f&g'h(h)i)j*j+k+k+l,l,l,l,l,l,l,l,k+k+j+j*i)h)h(g'f&e%c$b#b"_ ]\[YXVTSPNMK I G ECA?֝~~~}}}zzzyyyyyypppXXXOOOQQQQQQKKKٳyyy崔X#?F H K MOPRTUWYZ[]^`!a"b#c$d%e%g&f'g'g(h(h)i)i)i)i)i)i)i)i)h)h(g(g'f'g&e%d&c#b"`!_ ^\[ZXWUTRPNLJ H G ECA?<Ԥľѡ~~~yyy沑T!;DF H K LNPQSTVWYZ[[^_ `!a"b#c$c$d%e%e&e&f&f(f'f'f'f'f(f&e&e&e%d%c$c$b"`!^ ^]\[ZXWVTSQOMLJ H F DBA?<=ӟļ~~~yyy屏}R9BDFH J LMOPRSTVWXZ[\]^] `!a"`!a"a"b!a#a"a"`"`!`!`"a"a `!`!_ _ _ \]]\[ZXWVVSQPNMK I G FDB@=<==Ӧ~~~yyy㰎zQ7@BCEG I K LNOQRSTVWXXY[[[\]_ d#g&h)i+k*j,l-l-l-l,k+i+h)g&f%a$_ [XWVVUURRPOMLJ H G ECB@=<===Ч~~~yyy䰍zP6>?ACDF H J KMNPQRRRSTW^e%g)k-p0o/p0o/p0p0o/o/o/o/o/o/o0p0o.o/n/o.n/o/k,g)`#]SPONMKI I H FDCA?><====Ф}}}yyy~~~⭋yQ6=>?@BDGG H J LLLNPU^h'n.n0o0o/o/p0p0q1q2r2r2s4s4s4s4s4s2r2r2s1q1p0p0o/n/o.n.n-n.m,f&[RL I G FEDB@?<======ѣ|||yyy}}}㭊wQ6==<=@ACDF E FI P[h)o/o0n0n0o/p0q1r2s4s3t4v4u5u5u5v5v5v5v5v5u5u5v4t4s3s4r2q1q1p0o/n.n.l.m-l.f&ZKDA?@=<=======ϡ{{{yyy}}}ᬉvO6===<>?@AAGL\k*n0m/o/o/p0q1r2s3t4u5v5v6w6w7x7x8x8y8y8y8y8x8x8x7w7w6v6u5u5t4s3r2q1p0o/n.l+k+l,k+h)ZJ A;;<=======Ѣzzzyyy{{{⩉uP6=====<;=J ^l-n.m-m/o/p0p1s2t3u5v6w6x7x8y9z9z:{:{;{;|;|;|;{;{;{:{:z:z9y:x8y7w6v6u5t4s3r2q2o/n.l,k+j*l+i*[J >:<======ϠzzzyyyzzzઆtN7===<;:ARk*n-m-m-o/p0r2s3t4w5w6x7y8z9|:{;|=}<}==~=~=~>~>>~>~>~=~=}<}<|;{;z:y9x8x7v6u5t4s3r2p0o/m-k,j*i*k*e&TB;;<====ϟyyyyyyyyyᩅsO7==<;<H _m.m-l.n.p0q1s3t4u5w6x8y9z:{;|<}=~=>р?Ҁ?Ҁ@ҁ@ҁ@ԁ@Ӂ@Ӂ@ԁ@ҁ@ҁ@҂@Ҁ?Ҁ?>~=}=~<};z:y9x8w6u5t4s3q1p0n.l-j+i)i*h)^J=:<===ϝyyyyyyxxxߥqO7=<:<Qh'l,l-m-o/p0r2s3u5v6x7y9{:|;}<~>?Ҁ?ҁ@ӂAӂAӃBԃBԄCԄCԄCԄCԄCԄCԄCԄCԃBԃBӂCӂAҁ@Ҁ?>~>}=|;{:y9x8w6u5t4r2p0n/m-k,i*g)i(d%Q>:<==ΟxxxyyywwwऄpN7<:<Rh*m,m-m/o/q1s2t4v5w7y8{:|;}<>Ҁ?ҁ@ӂAӃBԄCԄCՅDՆDՆEևFֈFֈFֈFֈFֈFևFևEֆEՆEՅDԅDԄCӃBӂAҁ@Ҁ?>}=|;{:y9x7v6u4s3q1o/m-k,j*h(h(e&T>:<=ϛxxxyyyvvvޥoN7;=Rh(l,l,n.o/q1s3u4v6x8z9|;}<~=Ҁ?ҁ@ӂAԄCԅDՅDֆEևFֈG׉I׋H؊I؊I؋I؋I؋I؋I؊I؊H׉H׉G׈GևFևFՆDԅCԄBӂAҁ@Ҁ?~>}<|;z9x8w6u5s3q1o/m.l,j*h(h'e&T>:<ϒļxxxyyyuuuߣmN69Ph(k,m,n.o0q1s3u5w6y8{:|<~=р?ҁ@ӂAԄCՅDՆEևF׈G׋H،I؋JٌJٌKٍKڍLڎLڎLڎLڎLڍLٍKٌKٌJ؋I؊I׉H׈GֈFՆEՅDԄBӂAҁ@>~=|<{:y8w7u5t5q1o0m.l,i*g(f(e&R<<Ж͸xxxyyyuuuݠ~lM4Ec$l+k-m.o/q1s3u5w7y9{;}<>Ҁ@ӂAԃBՅDՆEֈF׉H؊IًJٌKڍLڎLۏMۏOۑNېNݐNܐOܐOݐOېNېNۏOڏMڎLڍLٌKًJ؊I׉HֈGՆEՅDԃBӂAҀ?~>}<{:y9x7v5t4q0o0m.k,i)g)g(c$E;Η衡vvvyyytttޟ~kL5Wk*l,m-o/q1s3u5w7z9{;}=>ҁ@ӂBԄCՆEևF׉H؊IٌJڍKڎLۏMېNܑOܒPݒPݒQݓQݓQݓQݓQݓQݓQݓQݒPܒPܑOܐNۏMڎLٍKٌJ؊I׉H։FՆEԄCӂAҁ@>}<{;z9x7v5t4q1o/m-k+i)h'g(Z;͖ﮮvvvyyysssݝ|jIDe&l-m-o/q1s3u5w7y9|;~=?ҁ@ԃBՅDևE׈G؊HًJٍKڎLۏNܑOܒPݓQޓQޔRޕSߕSߖTߖTߖTߖTߖTߖTߗSޕSޔRޔRݓQݒPܑOېNێMڍKًJ؊I׈GֈGՄCԃBӁ@>}={;z9w7w5u3q1o/m-j+h)g(h(H ͖򱱱vvvyyyrrr۞zhHQn-m,n.p0r2t4w7y7{;~=?ԁAԃBՅDևF׉G؊IٌJڎLۏNܑOܒPݓQޔRߕSߖTUVVXWWWWVVVUߖTߖTޕSޓRݒPܑOۏNڎLٌK؋I׉HօDՅDԃBӁ@>}={;y9w7u5s3p1n/l,j*g(i*W͖uuuyyyqqqܛxfKVo.m.p0r2t4v6x8{;}>>ҁ@ԃBՅDևF׉H؋IٌKڎMېNܒPݓQޕRߖTUVWXXYYZZZZYYYXWVUߖTޕSݓQݒPܐOۏMڍKًJ׉HևFՅDԃBӁ@>}<{:y8w6u4r2p0n.k+i)h)b#˔uuuyyypppܙvdR\p0o/q1s3u5x8|:}<>ҁ@ӃBՅDևF׉H؋IٍKۏMܑOݒQޔRޖSUVWYZZ]\^]]]]\\[ZYXWVUߖSޔRݓQܑOۏMڍLًJ׋HևFՅDԃBҁ@>}Ҁ@ӃBԅCևE׉G؋IڍKۏOܑOݓQޕSߖTVWYZ\^]^__a``a_^^]\[ZYWVߖTޕSݓQܑOۏNڍLًJ׉HևFՄCӂAҀ?~=|;z9w7u5s3q1n.k,i)o.˒tttyyymmmۗr`X#c!q1q1t3v4y8{;~=Ҁ?ӂAԄCՆE׈G؊IٌKۏOܑOݓQޕSߗUVXZ[]^_`aabbbbbbb`^^]\[ZXVߗUޕSݓQܑOۏNڍL؋J׉HֆEԄCӂAҀ?}={;y8v6t4r2q0m-j*p0˒tttyyylllږr_Tbs3s2u5x9z;}<>ҁ@ԃBՆDֈF؊IٌKۏMܑOݓQޕSߗUWYZ\]_`abcdeeeeeededbb_]\ZYVUޕSݓQܑOۏMٍK؊I׈GՆDԃBҁ@>|ҁ@ԃBՆE׈G؋IٍKېNܒPޔRߖTVXZ\^`bcefghijjjjjjiihfecb`^\\XVߖTޔRݒPېNڍLًJ׉GՆDԃBӁ@>||;y9w6u5v6`";NJ襤qqqyyyhhh֑n\J4Dn-~>}=>ӂAԄCևE׉HٌJڐMܑOݓQߖTVXZ\_acfhikmnprsstssrqpomkigeca_]ZXVߖSݓQܑOێMٌJ׉HևFԄCӂA>|NJoooyyyfffʃiZbJZ<\?Z=X;jDpGpHsIsKvLwMxNyOyR|Q}S~T~UVWZ[\\^__abcdddcddcab__^\\[ZWXU~U}T|S{PyOxNwMvMtLsKrHpGoFnFiC\=Z=\?]@Bljnnnyyyfff㾶ɿȽǼƻŻŻźĺĺĺúùùù¹¹¸¸¸¹÷øøĸĸĹŹŹźĻŽƾƾƾƴĉnnnyyyoooᄒnnnyyymmmyyy塡묬mmmyyypppmmm```lllyyy֑lllyyyꊊЊppp䠠lllyyy㡡xxxجiiijjjyyyƊnnnmmmyyywwwzzzuuuZZZNNNvvv񳳳jjjyyyԿxxx̥}}}qqqeee]]]^^^___```mmmjjjyyyԣЛiiiyyy̝iiiyyyɘiiiyyyԅhhhzzzXXX}}}ggg|||ڒhhhqqq[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\llliiinnnˀ~~~񢢢ddd͂ɕuuuҚqtemu-2.0~alpha1/guesttoolslistener.h0000644000175000017500000000301111214661046017744 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef GUESTTOOLSLISTENER_H #define GUESTTOOLSLISTENER_H #include #include class QLocalSocket; class GuestModule; class GuestToolsListener : public QObject { Q_OBJECT public: GuestToolsListener(QString location, QObject *parent); private: QLocalSocket *toolSocket; QList modules; quint16 blockSize; void addModules(); public slots: void dataSender(QString module, QVariant &data); private slots: void setupConnection(); void receiveData(); }; #endif qtemu-2.0~alpha1/main.cpp0000644000175000017500000000401610753632241015255 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "mainwindow.h" #include #include #include #include #include int main(int argc, char *argv[]) { Q_INIT_RESOURCE(qtemu); QApplication app(argc, argv); //load translation QSettings settings("QtEmu", "QtEmu"); QString locale = settings.value("language", QString(QLocale::system().name())).toString(); QTranslator translator; QString path; //check for case when qtemu executable is in same dir (linux / win) path = QCoreApplication::applicationDirPath() + "/translations/qtemu_" + locale + ".qm"; if (QFile::exists(path)) translator.load(path); else { //check for case when qtemu executable is in bin/ (installed on linux) path = QCoreApplication::applicationDirPath() + "/../share/qtemu/translations/qtemu_" + locale + ".qm"; if (QFile::exists(path)) translator.load(path); } app.installTranslator(&translator); MainWindow mainWin; mainWin.show(); return app.exec(); } qtemu-2.0~alpha1/machineconfig.cpp0000644000175000017500000001603611202622546017125 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machineconfig.h" #include #include #include #include #include #include #include #include MachineConfig::MachineConfig(QObject *parent, const QString &config) : QObject(parent) { if(!config.isEmpty()) loadConfig(config); } MachineConfig::~MachineConfig() { saveConfig(configFile->fileName()); configFile->deleteLater(); } bool MachineConfig::loadConfig(const QString &fileName) { configFile = new QFile(fileName); if (!configFile->open(QFile::ReadOnly | QFile::Text)) { qDebug("Cannot read file" + fileName.toAscii() + ", " + configFile->errorString().toAscii()); domDocument.appendChild(domDocument.createElement("qtemu")); root = domDocument.documentElement(); return false; } QString errorStr; int errorLine; int errorColumn; if (!domDocument.setContent(configFile, true, &errorStr, &errorLine, &errorColumn)) { qDebug("Parse error at line %1, column %2:\n" + errorStr.toAscii(), errorLine, errorColumn); return false; } root = domDocument.documentElement(); if (root.tagName() != "qtemu") { qDebug("The file is not a QtEmu file."); return false; } else if (root.hasAttribute("version") && root.attribute("version") != "1.0") { qDebug("The file is not a QtEmu version 1.0 file."); return false; } return true; } bool MachineConfig::saveConfig(const QString &fileName) const { QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { qDebug("Cannot write file " + fileName.toAscii() +":\n" + file.errorString().toAscii()); return false; } QTextStream out(&file); domDocument.save(out, 4); return true; } void MachineConfig::setOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value) { //save the value to the config QDomElement child = root.firstChildElement(nodeType); QDomElement subChild; if(child.isNull()) { //make a new node child = domDocument.createElement(nodeType); root.appendChild(child); subChild = child; } else { //existing node subChild = child; } //find the sub child (nodeName) if(!nodeName.isEmpty()) { subChild = child.firstChildElement(nodeName); if(subChild.isNull()) { subChild = domDocument.createElement(nodeName); child.appendChild(subChild); } } QDomElement oldElement = subChild.firstChildElement(optionName); if (oldElement.isNull()) { oldElement = domDocument.createElement(optionName); subChild.appendChild(oldElement); } QDomElement newElement = domDocument.createElement(optionName); QDomText newText = domDocument.createTextNode(value.toString()); newElement.appendChild(newText); subChild.replaceChild(newElement, oldElement); //save the document saveConfig(configFile->fileName()); emit optionChanged(nodeType, nodeName, optionName, value); } QVariant MachineConfig::getOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant defaultValue) { //return the value of node named nodeType's child with property name=nodeName's child named optionName QDomElement typeElement; QDomElement nameElement; QDomElement optionElement; QVariant optionValue = defaultValue; typeElement = root.firstChildElement(nodeType); nameElement = typeElement; if(!nodeName.isEmpty()) { nameElement = typeElement.firstChildElement(nodeName); } optionElement = nameElement.firstChildElement(optionName); if(optionElement.isNull()) { //the option did not exist: set default value! setOption(nodeType, nodeName, optionName, defaultValue); optionValue = defaultValue; } else optionValue = QVariant(optionElement.text()); return optionValue; } QStringList MachineConfig::getAllOptionNames(const QString &nodeType, const QString &nodeName) const { QDomElement typeElement; QDomElement nameElement; QDomElement optionElement; QStringList optionNameList; if(nodeName.isEmpty()) { nameElement = root.firstChildElement(nodeType); } else { typeElement = root.firstChildElement(nodeType); if(nodeName == "*") nameElement = typeElement.firstChildElement(); else nameElement = typeElement.firstChildElement(nodeName); } optionElement = nameElement.firstChildElement(); while(!optionElement.isNull()) { optionNameList.append(optionElement.nodeName()); optionElement = optionElement.nextSiblingElement(); } return optionNameList; } void MachineConfig::clearOption(const QString & nodeType, const QString & nodeName, const QString & optionName) { QDomElement typeElement; QDomElement nameElement; QDomElement optionElement; typeElement = root.firstChildElement(nodeType); nameElement = typeElement; if(!nodeName.isEmpty()) { nameElement = typeElement.firstChildElement(nodeName); } optionElement = nameElement.firstChildElement(optionName); if(optionElement.isNull()) { //the option did not exist: no need to clear! return; } else nameElement.removeChild(optionElement); saveConfig(configFile->fileName()); //TODO: need to emit this change and deal with it. } int MachineConfig::getNumOptions(const QString & nodeType, const QString & nodeName) const { QDomElement typeElement; QDomElement nameElement; if(nodeName.isEmpty()) { nameElement = root.firstChildElement(nodeType); } else { typeElement = root.firstChildElement(nodeType); if(nodeName == "*") nameElement = typeElement.firstChildElement(); else nameElement = typeElement.firstChildElement(nodeName); } return nameElement.childNodes().size(); } qtemu-2.0~alpha1/usbpage.cpp0000644000175000017500000000327411160177564015771 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "usbpage.h" #include "machineconfigobject.h" #include "usbmodel.h" #include "settingstab.h" UsbPage::UsbPage(MachineConfigObject *config, QWidget *parent) : QWidget(parent) , config(config) { setupUi(this); model = new UsbModel(config, this); registerWidgets(); } UsbPage::~UsbPage() { } void UsbPage::registerWidgets() { config->registerObject(mouseCheck, "mouse", QVariant(true)); config->registerObject(usbCheck, "usbSupport", QVariant(true)); config->registerObject(addCheck, "autoAddDevices", QVariant(false)); config->registerObject(model, "autoAddDevices", QVariant(false)); usbView->setModel(model); } UsbModel* UsbPage::getModel() { return model; } qtemu-2.0~alpha1/machinetab.h0000644000175000017500000000621511214661046016072 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINETAB_H #define MACHINETAB_H #include #include #include #include #include "machineconfigobject.h" #include "machineconfig.h" class QPushButton; class QLineEdit; class QCheckBox; class QSlider; class QSpinBox; class QTabWidget; class QTextEdit; class QFrame; class QPushButton; class QMenu; class MachineProcess; class MachineView; class QVBoxLayout; class QGridLayout; class QScrollArea; class QToolButton; class SettingsTab; class ControlPanel; class GuestToolsListener; class MachineTab : public QWidget { Q_OBJECT public: MachineTab(QTabWidget *parent, const QString &fileName, const QString &myMachinesPathParent); QString machineName(); QPushButton *startButton; QPushButton *stopButton; QPushButton *suspendButton; QPushButton *resumeButton; QPushButton *pauseButton; MachineConfigObject *machineConfigObject; SettingsTab *settingsTab; MachineProcess *machineProcess; MachineView *machineView; public slots: void restart(); private: void makeConnections(); MachineConfig *machineConfig; QCheckBox *snapshotCheckBox; QLineEdit *machineNameEdit; QLineEdit *consoleCommand; QTextEdit *console; QString xmlFileName; QTabWidget *parentTabWidget; QTextEdit *notesTextEdit; QPushButton *cdromReloadButton; QPushButton *floppyReloadButton; QString myMachinesPath; QStringList shownErrors; QFrame *consoleFrame; QGridLayout *viewLayout; QScrollArea *machineScroll; ControlPanel *controlPanel; void cleanupView(); GuestToolsListener *guestToolsListener; private slots: void start(); void forceStop(); void suspending(); void suspended(); void resuming(); void resumed(); void finished(); void started(); void booting(); void error(const QString& errorMsg); bool read(); void nameChanged(const QString &name); void closeMachine(); void snapshot(const int state); void runCommand(); void clearRestart(); void takeScreenshot(); }; #endif qtemu-2.0~alpha1/COPYING0000644000175000017500000004311010753140477014663 0ustar fboudrafboudra GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. qtemu-2.0~alpha1/TODO0000644000175000017500000001241411214661046014314 0ustar fboudrafboudra----------------------- The QtEmu TODO List: ----------------------- ------------------ Version 2.0: ------------------ ----------------------- Missing or Broken Features: ----------------------- Missing or broken features need to be completed or disabled. * Add the progress bar for long operations like suspend/resume and saving a snapshot to the image file. --- finishing touches --- * Add tooltips to many UI components (machinetab.cpp is the only file left that needs updating) * Make sure shortcuts don't overlap and everything has an appropriate shortcut * Finish new help files * Update old help file -- currently in progress --- wishes --- * size of ram selection should be added to the wizard. * a system tray icon ----------------- Known Bugs: ----------------- Known bugs must be fixed before the next release. ------------------ Known issues: ------------------ Known issues may be resolved for a later release. * does not switch between icon sets properly - this can be fixed using the resource system to switch between icons, instead of the current method * should use actions for everything - should make the interface work better * menu item for force poweroff * fullscreen toolbar * allow sending special keys (keys intercepted by X, the operating system, or qtemu) - maybe not yet, can be done through the console if needed. * the preview screenshot may not be handled correctly when it is a different aspect ratio than the preview window. it should display in the correct aspect ratio, centered in the preview window, rather than stretched. (is this a big deal to anyone?) ------------------ Additional features: ------------------ These are planned future features for QtEmu. ------------------- Version 2.1 +: ------------------- * working network configuration. --this will be handled by adding a few shell scripts or possibly apps, then autogenerating a shell script for ifup/ifdown that calls these smaller scripts. > a script to create a tap device > a script to delete a tap device > a script to create a bridge device > a script to delete a bridge device > a script to add a given ethernet interface to a given bridge, saving the ethernet interface's old settings > a script to remove a given ethernet interface from a bridge, restoring the ethernet interface's old settings > a script to suspend NetworkManager > a script to resume NetworkManager IF these are scripts, they need to be set up in the sudoers file, because scripts can't be set up suid. * detect the running sound system (in order of perference: pulse audio, esd, ALSA, OSS) and set the sound interface type automatically. * information about the virtual machnine in a box below the screen preview (Image size / size on disk, memory, processor usage info for running machines, etc.). * the preview image should show the last connected machine state if a machine is disconnected, or the current state for suspended machines. when a machine is off (not suspended) show the usual preview. * passive notification for noncritical errors (maybe in the currently unused status bar area?) * when qemu supports it, on the fly switching between GUI modes (perhaps using SDL for a faster fullscreen mode) * multiple hard drives / optical disks. * removal and insertion of optical disks and hard drives on the fly. * inclusion of tools to make the guest os integrate with the host better. -copy/paste (WORKING) -resolution changing -console inside host -usb device selection -the ability to change most options that take affect on-the-fly -possibly include some of them in a control panel app instead of the systray icon? * Allow selecting audio hardware * A System Summary page in the settings tab. * Allow selecting already existing disk images from the wizard ------------------- Long Term (3.0?) ------------------- * a standalone backend with no GUI dependancy. this will run virtual machines on multiple servers with the ability to migrate VMs from one server to another. a QtEmu client can connect to the server to administer and view virtual machines. * a permissions structure for this backend so only certain authenticated clients can perform certain tasks. multiple levels of permission per machnine. * assisted OS installation? a system that allows QtEmu to help you install an OS. maybe automatic installation by filling out a form with desired settings and QtEmu fills in the values during installation for popular operating systems. ------------------- Very Long Term (11.25+) ------------------- * Run virtual machines truly virtually - without any hardware at all. Eliminate the Host by manipulating molecules in the surrounding environment to simulate a machine through natural processes. * increase the speed of virtual machines so they actually run FASTER than the host machine. Then move the host processes to run inside the virtual machine we just created. By doing this operation multiple times, any host can virtualize an unlimited number of machines at an ever increasing speed. * virtualize the user of the guest as well. By doing this, we can determine what actions the user will make as well as how the guest will respond before either action has occured. In this way we can make the response time of the guests not just near zero, but actually negative. qtemu-2.0~alpha1/netconfig.h0000644000175000017500000000545411203100046015741 0ustar fboudrafboudra /**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef NETCONFIG_H #define NETCONFIG_H // #include #include #include #include class MachineConfigObject; class GuestInterface; class HostInterface; class HostActionItem; class NetConfig : public QObject { Q_OBJECT public: explicit NetConfig(QObject *parent = 0, MachineConfigObject *config = 0); MachineConfigObject *config; QStringList getOptionString(); private: void buildIfs(); QList *guestIfs; QList *hostIfs; QStringList hostIfNames; QList *startActions; QList *stopActions; }; class NetInterface : public QObject { Q_OBJECT public: explicit NetInterface(NetConfig *parent = 0, QString nodeType = QString(), QString nodeName = QString()); int getVlan(); void setVlan(int number); virtual QStringList parseOpts(); int vlan; private: protected: MachineConfigObject *config; QString nodeType; QString nodeName; QString type; }; class GuestInterface : public NetInterface { Q_OBJECT public: explicit GuestInterface(NetConfig *parent = 0, QString nodeName = QString()); virtual QStringList parseOpts(); }; class HostInterface : public NetInterface { Q_OBJECT public: explicit HostInterface(NetConfig *parent = 0, QString nodeName = QString()); virtual QStringList parseOpts(); }; class HostActionItem : public QObject { enum HostAction { Add, RemoveIfUnused, Remove }; enum HostItem { Bridge, Tap, Connection, Route}; Q_OBJECT public: HostActionItem(NetConfig *parent, HostAction action, HostItem item, QString interface, QString interfaceTo = QString()); bool performAction(); private: HostAction action; HostItem item; QString interface; QString toInterface; }; #endif qtemu-2.0~alpha1/machineconfig.h0000644000175000017500000000471611202622546016574 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef MACHINECONFIG_H #define MACHINECONFIG_H #include #include #include class QFile; class QDomDocument; class QStringList; /** @author Ben Klopfenstein */ class MachineConfig : public QObject { Q_OBJECT public: explicit MachineConfig(QObject *parent = 0, const QString &store = QString()); ~MachineConfig(); bool loadConfig(const QString &fileName); bool saveConfig(const QString &fileName) const; bool convertConfig(const QString &fileName) const; //if nodeType and nodeName are not specified, they are assumed to be "machine" and "" QVariant getOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant defaultValue = QVariant()); QStringList getAllOptionNames(const QString &nodeType, const QString &nodeName) const; int getNumOptions(const QString &nodeType, const QString &nodeName) const; public slots: //if nodeType and nodeName are not specified, they are assumed to be "machine" and "" void setOption(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value); void clearOption(const QString &nodeType, const QString &nodeName, const QString &optionName); signals: void optionChanged(const QString &nodeType, const QString &nodeName, const QString &optionName, const QVariant &value); private: QFile *configFile; QDomDocument domDocument; QDomElement root; }; #endif qtemu-2.0~alpha1/machinescrollarea.cpp0000644000175000017500000000525011153572010017776 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machinescrollarea.h" #include "vnc/vncview.h" #include #include // MachineScrollArea::MachineScrollArea(QWidget* parent) : QScrollArea(parent) , splashShown(false) { setAlignment(Qt::AlignCenter); setFrameShape(QFrame::NoFrame); } void MachineScrollArea::resizeEvent(QResizeEvent * event) { #ifdef DEVELOPER qDebug("resized..."); #endif resizeView(event->size().width(), event->size().height()); emit resized(event->size().width(), event->size().height()); QScrollArea::resizeEvent(event); } void MachineScrollArea::resizeView(int widgetWidth, int widgetHeight) { if(splashShown) { float aspectRatio = (1.0 * widget()->sizeHint().width()/ widget()->sizeHint().height()); int newWidth = (int)(widgetHeight*aspectRatio); int newHeight = (int)(widgetWidth*(1/aspectRatio)); if(newWidth <= widgetWidth && newHeight > widgetHeight) widget()->setFixedSize(newWidth, widgetHeight); else widget()->setFixedSize(widgetWidth, newHeight); return; } widget()->blockSignals(true); if(!property("scaleEmbeddedDisplay").toBool()) { #ifdef DEVELOPER qDebug("no scaling"); #endif static_cast(widget())->enableScaling(false); } else { #ifdef DEVELOPER qDebug("scaling"); #endif static_cast(widget())->enableScaling(true); static_cast(widget())->scaleResize(widgetWidth,widgetHeight); } widget()->blockSignals(false); } bool MachineScrollArea::isSplashShown() { return splashShown; } void MachineScrollArea::setSplashShown(bool value) { splashShown = value; } // qtemu-2.0~alpha1/usbconfig.h0000644000175000017500000000270211162710664015756 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef USBCONFIG_H #define USBCONFIG_H #include class MachineConfigObject; class MachineProcess; class UsbConfig : public QObject { Q_OBJECT public: UsbConfig(MachineProcess * parent, MachineConfigObject * config); QStringList getOptionString(); private: MachineConfigObject * config; MachineProcess * parent; public slots: void vmAddDevice(QString id); void vmRemoveDevice(QString id); }; #endif // USBCONFIG_H qtemu-2.0~alpha1/CHANGELOG0000644000175000017500000001074011214661046015036 0ustar fboudrafboudraVersion 1.8.0 ============= Features: * Suspend support * Resume support :) * Enable virtualization with a checkbox (kqemu) * Add support for kvm virtualization with that same checkbox * Add machine name to the window title if your qemu is 0.9.1 or better, or if you use kvm 60 or higher. * pause/unpause support (if you need to get all your processor power back for a few minutes but don't want to turn off your virtual machine, pause is great!) * Add support for qcow image format and image conversion (needed for suspend/resume) * Add powerdown stop button option (powers down the machine gracefully) * Add CDROM and Floppy image change support. just press the button and the virtual disc will change to whatever you put in the box! * Add the ability to commit changes to a machine started up in snapshot mode by simply unchecking the snapshot box! * New network subsystem for bridging support (and other advanced networking features eventually!) see the readme for setting this up! * Full machine console in the GUI... (for advanced functionality) * Embedded VNC viewer * Machine Preview * added option for OSS, ESD, or ALSA sound support * restart button now works correctly (powers off the machine gracefully) * screenshot button * more flexible configuration * Use kvm-img instead of qemu-img if qemu-img cannot be found * added a guest tools package - supports synchronizing guest/host clipboards All these new features listed above thanks to Ben Klopfenstein . * Install desktop file on Linux (e.g. to start QtEmu from startmenus) * Respect FHS for installation on Linux * Use QWizard for machine creation wizard for better look and feel Fixes: * Fixed english translations of some strings * Only enable options that work with your qemu version * CDROM drive selection will select files now (/dev/cdrom is a file) All these fixes listed above thanks to Ben Klopfenstein . * Code optimization (Mosty detected by KDE Krazy check). Version 1.0.5 ============= Features: * Option for custom network settings. Patch by Dawit Alemayehu . Thanks! * Possibility to set additional options which are not covered by QtEmu (e.g. "--kernel-kqemu"). Patch by Dawit Alemayehu . Thanks! * Sound configuration. * Poslish translation by Milosz Galazka and Grzegorz Gibas . Thanks! * Brazilian Portuguese translation by Jackson Miliszewski . Thanks! Fixes: * Code optimization (Mosty detected by KDE Krazy check). * Initialize all variables in machineprocess.*. Patch by Dawit Alemayehu . Thanks! Version 1.0.4 ============= Features: * Manifest file added in order to see everywhere Win styles (e.g. file dialogs) (patch by Cristian Adam) * French translation by Fathi Boudra . Thanks! * Italian translation by Gianluca Cecchi . Thanks! * Add confirmation before closing a machine. Also inform the user that he can open the machine again. * Add information about possible performance loose with seamless mouse mode. * Add support for icon themes. * Add KDE Oxygen icon theme. QtEmu fits now better in a KDE4 desktop. Please see images/oxygen/COPYING for license information. Fixes: * Allow compilation with Qt 4.1 again. Patch by Mandrake. Version 1.0.3 ============= Features: * Floppy Disk support * Czech translation by excamo . Thanks! * Spanish translation by Manolo Valdes . Thanks! Fixes: * Remove Qt 4.1 support code, it does not compile there anyways. Add a configure check (in cmake) for Qt 4.2 (patch by Gwenole Beauchesne / Laurent Montel). * Fix compilation on other systems than Linux and Windows (e.g. BSDs) Version 1.0.2 ============= Features: * Possibility to change the QEMU start command (e.g. for 64 bit executable "qemu-system-x86_64") * Possibility to execute before start or after exit of QEMU shell commands (only experimental!) * Turkish translation by Necmettin Begiter and Ugur Cetin . Thanks! * Russian translation by Vasily Cheremisinov . Thanks! Fixes: * Save state of network option * Respect snapshot setting after start of QtEmu Version 1.0.1 ============= Features: * Support for VMWare hard disk images (*.vmdk) * Support for QEMU *.qcow hard disk images Fixes: * Focus problem on machine tabs qtemu-2.0~alpha1/usbpage.ui0000644000175000017500000000757411163767267015643 0ustar fboudrafboudra UsbPage 0 0 459 423 UsbPage USB Support Enable support for USB devices, either virtual or shared with the Host Enable USB support Toggle smooth mouse transitions between the host and the guest. requires guest USB support. Seamless USB Mouse Qt::Horizontal QFrame::StyledPanel QFrame::Raised USB Devices Qt::AlignCenter Check USB devices to add them to the virtual machine. true Automatically add new devices Qt::Vertical 20 40 usbCheck toggled(bool) mouseCheck setEnabled(bool) 52 53 284 59 usbCheck toggled(bool) frame setEnabled(bool) 85 47 90 75 qtemu-2.0~alpha1/guesttoolslistener.cpp0000644000175000017500000000622211215275463020313 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "guesttoolslistener.h" #include "GuestTools/modules/clipboard/clipboardsync.h" #include #include #include // GuestToolsListener::GuestToolsListener( QString location, QObject *parent ) : QObject(parent) { blockSize = 0; toolSocket = new QLocalSocket(this); //connect(toolSocket, SIGNAL(connected()), this, SLOT(setupConnection())); //server = new QLocalServer(this); toolSocket->connectToServer(location, QIODevice::ReadWrite); qDebug() << "connecting to" << location; setupConnection(); } void GuestToolsListener::setupConnection() { qDebug() << "setting up guest tools"; addModules(); connect(toolSocket, SIGNAL(readyRead()), this, SLOT(receiveData())); } void GuestToolsListener::receiveData() { //connect the stream QDataStream stream(toolSocket); stream.setVersion(QDataStream::Qt_4_0); //get the size of the data chunk if (blockSize == 0) { if (toolSocket->bytesAvailable() < (int)sizeof(quint16)) return; stream >> blockSize; } //don't continue until we have all the data if (toolSocket->bytesAvailable() < blockSize) return; QString usesModule; QVariant data; stream >> usesModule >> data; blockSize = 0; for(int i = 0; i < modules.size(); i++) { if(modules.at(i)->moduleName() == usesModule) { qDebug() << "received data from"<< usesModule; modules.at(i)->receiveData(data); return; } } qDebug() << "invalid module" << usesModule; } void GuestToolsListener::addModules() { modules.append(new ClipboardSync(this)); } void GuestToolsListener::dataSender(QString module, QVariant &data) { //so that we don't try to send more than one at a time //sender()->blockSignals(true); QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); out << (quint16)0; out << module; out << data; out.device()->seek(0); out << (quint16)(block.size() - sizeof(quint16)); toolSocket->write(block); //re-allow signals //sender()->blockSignals(false); } // qtemu-2.0~alpha1/networkpage.cpp0000644000175000017500000002015011200720440016637 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "networkpage.h" #include "machineconfigobject.h" #include "interfacemodel.h" /**************************************************************************** ** C++ Implementation: networkpage ** ** Description: ** ****************************************************************************/ NetworkPage::NetworkPage(MachineConfigObject *config, QWidget *parent) : QWidget(parent) , config(config) , changingSelection(false) { setupUi(this); setupModels(); makeConnections(); registerObjects(); } NetworkPage::~NetworkPage() { } void NetworkPage::changeNetPage(bool state) { networkStack->setCurrentIndex((int)state); } void NetworkPage::makeConnections() { connect(advancedButton, SIGNAL(toggled(bool)), this, SLOT(changeNetPage(bool))); //guest connect(addGuest, SIGNAL(clicked()), this, SLOT(addGuestInterface())); connect(delGuest, SIGNAL(clicked()), this, SLOT(delGuestInterface())); connect(guestView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(guestSelectionChanged(const QItemSelection &, const QItemSelection &))); //host connect(addHost, SIGNAL(clicked()), this, SLOT(addHostInterface())); connect(delHost, SIGNAL(clicked()), this, SLOT(delHostInterface())); connect(hostView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(hostSelectionChanged(const QItemSelection &, const QItemSelection &))); } void NetworkPage::setupModels() { guestModel = new GuestInterfaceModel(config, this); guestView->setModel(guestModel); hostModel = new HostInterfaceModel(config, this); hostView->setModel(hostModel); hostInterface->setModel(hostModel); } void NetworkPage::registerObjects() { config->registerObject(networkCheck, "network", QVariant(true)); config->registerObject(networkEdit, "networkCustomOptions"); config->registerObject(advancedButton, "netAdvanced", QVariant(false)); config->registerObject(easyModeBox, "net-host", "host0", "type"); config->registerObject(easyMacEdit, "net-guest", "guest0", "mac"); config->registerObject(accelCheck, "net-guest", "guest0", "nic"); } void NetworkPage::addGuestInterface() { guestModel->insertRows(guestModel->rowCount(), 1); } void NetworkPage::delGuestInterface() { if(guestView->selectionModel()->selectedIndexes().size() !=0) { guestModel->removeRows(guestView->selectionModel()->selectedIndexes().first().row(), guestView->selectionModel()->selectedRows(0).size()); } } void NetworkPage::addHostInterface() { hostModel->insertRows(hostModel->rowCount(), 1); hostTypeBox->setCurrentIndex(0); } void NetworkPage::delHostInterface() { if(hostView->selectionModel()->selectedIndexes().size() !=0) hostModel->removeRows(hostView->selectionModel()->selectedIndexes().first().row(), hostView->selectionModel()->selectedRows(0).size()); } void NetworkPage::guestSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected) { if (changingSelection) return; changingSelection=true; //change host selection to none hostView->selectionModel()->clearSelection(); //disconnect other interfaces config->unregisterObject(nicModelCombo); config->unregisterObject(macEdit); config->unregisterObject(randomCheck); config->unregisterObject(hostInterface); if(guestView->selectionModel()->selectedIndexes().size() == 0) { propertyStack->setCurrentIndex(6); changingSelection=false; return; } QString rowName = guestModel->rowName(selected.first().indexes().first().row()); //show guest properties propertyStack->setCurrentIndex(5); //populate guest properties config->registerObject(nicModelCombo, "net-guest", rowName, "nic"); config->registerObject(macEdit, "net-guest", rowName, "mac"); config->registerObject(randomCheck, "net-guest", rowName, "randomize"); config->registerObject(hostInterface, "net-guest", rowName, "host"); changingSelection=false; } void NetworkPage::hostSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected) { if(changingSelection) return; changingSelection=true; //change guest selection to none guestView->selectionModel()->clearSelection(); //disconnect other interfaces config->unregisterObject(interfaceEdit); config->unregisterObject(interfaceEdit_2); config->unregisterObject(interfaceEdit_3); config->unregisterObject(bridgeEdit); config->unregisterObject(hardwareEdit); config->unregisterObject(hardwareEdit_2); config->unregisterObject(spanningCheck); config->unregisterObject(upScriptEdit); config->unregisterObject(downScriptEdit); config->unregisterObject(hostnameEdit); config->unregisterObject(tftpCheck); config->unregisterObject(tftpEdit); config->unregisterObject(bootpCheck); config->unregisterObject(bootpEdit); config->unregisterObject(udpButton); config->unregisterObject(tcpButton); config->unregisterObject(addressCombo); config->unregisterObject(portSpin); config->unregisterObject(hostTypeBox); if(hostModel->rowCount(QModelIndex()) == 0 || hostView->selectionModel()->selectedIndexes().size() == 0) { propertyStack->setCurrentIndex(6); changingSelection=false; return; } QString rowName = hostModel->rowName(selected.first().indexes().first().row()); config->registerObject(hostTypeBox, "net-host", rowName, "type", "User Mode"); propertyStack->setCurrentIndex(hostTypeBox->currentIndex()); config->registerObject(interfaceEdit, "net-host", rowName, "interface"); config->registerObject(interfaceEdit_2, "net-host", rowName, "interface"); config->registerObject(interfaceEdit_3, "net-host", rowName, "interface"); config->registerObject(bridgeEdit, "net-host", rowName, "bridgeInterface"); config->registerObject(hardwareEdit, "net-host", rowName, "hardwareInterface"); config->registerObject(hardwareEdit_2, "net-host", rowName, "hardwareInterface"); config->registerObject(spanningCheck, "net-host", rowName, "spanningTree"); config->registerObject(upScriptEdit, "net-host", rowName, "ifUp"); config->registerObject(downScriptEdit, "net-host", rowName, "ifDown"); config->registerObject(hostnameEdit, "net-host", rowName, "hostname"); config->registerObject(tftpCheck, "net-host", rowName, "tftp"); config->registerObject(tftpEdit, "net-host", rowName, "tftpPath"); config->registerObject(bootpCheck, "net-host", rowName, "bootp"); config->registerObject(bootpEdit, "net-host", rowName, "bootpPath"); config->registerObject(udpButton, "net-host", rowName, "vlanType"); config->registerObject(tcpButton, "net-host", rowName, "vlanType"); config->registerObject(addressCombo, "net-host", rowName, "address"); config->registerObject(portSpin, "net-host", rowName, "port"); changingSelection=false; } void NetworkPage::loadHostEthIfs() { //we will load ethernet interfaces from HAL and insert them. hardwareEdit->addItem("eth0"); hardwareEdit_2->addItem("eth0"); } qtemu-2.0~alpha1/usbmodel.cpp0000644000175000017500000001412011203076444016136 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "usbmodel.h" #include "machineconfigobject.h" #include "halobject.h" #include "qtemuenvironment.h" #include #include UsbModel::UsbModel(MachineConfigObject * config, QObject * parent) :QStandardItemModel(parent) ,config(config) { hal = QtEmuEnvironment::getHal(); getUsbDevices(); loadConfig(); connect(this, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(getChange(QStandardItem*))); connect(hal, SIGNAL(usbAdded(QString,UsbDevice)), this, SLOT(deviceAdded(QString,UsbDevice))); connect(hal, SIGNAL(usbRemoved(QString,UsbDevice)), this, SLOT(deviceRemoved(QString,UsbDevice))); } void UsbModel::getUsbDevices() { QList deviceList = hal->usbList(); if (!deviceList.isEmpty()) { clear(); for(int i = 0; i < deviceList.size(); i++) { addItem(deviceList.at(i).vendor + " - " + deviceList.at(i).product, deviceList.at(i).id); } } } void UsbModel::addItem(const QString deviceName, QString id) { #ifdef DEVELOPER qDebug(QString(deviceName + ' ' + id).toAscii()); #endif QList items; items.append(new QStandardItem(deviceName)); id.remove("/org/freedesktop/Hal/devices/usb_device_"); items.append(new QStandardItem(id)); items.at(0)->setCheckable(true); appendRow(items); //appendRow(QStandardItem(deviceName).setData(id)); } void UsbModel::loadConfig() { QStringList names = config->getConfig()->getAllOptionNames("usb", ""); for(int i=0;igetOption("usb", names.at(i),"id",QString()).toString()); } } void UsbModel::checkDevice(QString deviceName) { for(int i = 0; i < rowCount(QModelIndex()); i++) { if(item(i,1)->text() == deviceName) { item(i,0)->setCheckState(Qt::Checked); break; } } } void UsbModel::getChange(QStandardItem * thisItem) { QStringList names = config->getConfig()->getAllOptionNames("usb", ""); QString nextFreeName; QString address; //find the next free name for a usb host device for(int i = 0; i < names.size() + 1;i++) { if(!names.contains("host" + QString::number(i))) { nextFreeName = "host" + QString::number(i); } } for(int i = 0; i < rowCount(QModelIndex()); i++) { if(item(i,0)->text() == thisItem->text()) { if(thisItem->checkState() == Qt::Checked) { address = hal->usbList().at(i).address; bool checkExists = false; for(int j = 0; j< names.size(); j++) { if(config->getOption("usb", names.at(j), "id", QString()) == item(i,1)->text()) { config->setOption("usb", names.at(j), "address", address); emit(vmDeviceAdded(address)); checkExists = true; break; } } if(!checkExists) { config->setOption("usb", nextFreeName, "id", item(i,1)->text()); config->setOption("usb", nextFreeName, "address", address); emit(vmDeviceAdded(address)); } } else { for(int j = 0; j < names.size(); j++) { if(config->getOption("usb", names.at(j), "id", QString()) == item(i,1)->text()) { emit(vmDeviceRemoved(config->getOption("usb", names.at(j), "address", "0.0").toString())); config->getConfig()->clearOption("usb", names.at(j), "id"); config->getConfig()->clearOption("usb", names.at(j), "address"); config->getConfig()->clearOption("usb","",names.at(j)); } } } break; } } } void UsbModel::deviceAdded(QString name, UsbDevice device) { #ifdef DEVELOPER qDebug(QString("device added " + device.vendor + '-' + device.product + device.id).toAscii()); #endif QString id = device.id; addItem(device.vendor + " - " + device.product, id.remove("/org/freedesktop/Hal/devices/usb_device_")); loadConfig(); if(property("autoAddDevices").toBool()) { for(int i=0;irowCount(QModelIndex());i++) { if((QString("/org/freedesktop/Hal/devices/usb_device_") + QString(item(i,1)->text())) == name) { item(i,0)->setCheckState(Qt::Checked); } } } } void UsbModel::deviceRemoved(QString name, UsbDevice device) { for(int i=0;irowCount(QModelIndex());i++) { if((QString("/org/freedesktop/Hal/devices/usb_device_") + QString(item(i,1)->text())) == name) { #ifdef DEVELOPER qDebug("device removed " + name.toAscii()); #endif this->removeRow(i); //getUsbDevices(); loadConfig(); break; } } } qtemu-2.0~alpha1/machinesplash.cpp0000644000175000017500000000572711202371546017160 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machinesplash.h" #include #include #include #include #include #include #include #include #include #include #include MachineSplash::MachineSplash(QWidget *parent) : QWidget(parent) { //set up splash background from splash.svg QSettings settings("QtEmu", "QtEmu"); splashImage = new QSvgWidget(":/images/" + settings.value("iconTheme", "oxygen").toString() + "/splash.svg", this); getPreviewRect(); previewImage = new QLabel(this); alpha = QPixmap(":/images/" + settings.value("iconTheme", "oxygen").toString() + "/alpha.svg"); previewImage->setScaledContents(true); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(splashImage); setLayout(layout); doResize(); } void MachineSplash::setPreview(const QString previewLocation) { if(!previewLocation.isEmpty()) previewLoc = previewLocation; QPixmap preview = QPixmap(previewLoc); preview.setAlphaChannel(alpha.scaled(preview.width(),preview.height())); previewImage->setPixmap(preview); doResize(); } void MachineSplash::doResize() { getPreviewRect(); previewImage->setGeometry(previewBounds.toRect()); } void MachineSplash::resizeEvent(QResizeEvent * event) { doResize(); QWidget::resizeEvent(event); } void MachineSplash::showEvent(QShowEvent * event) { doResize(); QWidget::showEvent(event); } void MachineSplash::getPreviewRect() { QRectF fullsizeBounds = splashImage->renderer()->boundsOnElement("QtEmu_Preview_Screen"); float scaleFactor = splashImage->width() / splashImage->renderer()->viewBoxF().width(); previewBounds = QRectF( fullsizeBounds.left()*scaleFactor, fullsizeBounds.top()*scaleFactor, fullsizeBounds.width()*scaleFactor, fullsizeBounds.height()*scaleFactor ); } const QSize MachineSplash::sizeHint() { return splashImage->size(); } qtemu-2.0~alpha1/settingstab.h0000644000175000017500000000433011165342562016326 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef SETTINGSTAB_H #define SETTINGSTAB_H #include "ui_settingstab.h" #include "machineprocess.h" #include "machinetab.h" #include class MachineConfigObject; class NetworkPage; class UsbPage; /** @author Ben Klopfenstein */ class SettingsTab : public QFrame, public Ui::SettingsTab { Q_OBJECT public: explicit SettingsTab(MachineConfigObject *config, MachineTab *parent = 0); ~SettingsTab(); UsbPage *getUsbPage(); public slots: void setNewCdImagePath(); void setNewFloppyImagePath(); void setVirtSize(qint64 size); void setPhySize(qint64 size); private: MachineConfigObject *config; MachineTab *parent; QString myMachinesPath; NetworkPage *netPage; UsbPage *usbPageWidget; void registerWidgets(); void setupHelp(); void setupConnections(); void getSettings(); void getDrives(); void disableUnsupportedOptions(); private slots: void changeHelpTopic(); //file select dialogs void setNewHddPath(); //warning dialogs void confirmUpgrade(); void optAdded(const QString devName, const QString devPath); void optRemoved(const QString devName, const QString devPath); signals: void upgradeHdd(); }; #endif qtemu-2.0~alpha1/machinetab.cpp0000644000175000017500000004504011214661046016424 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2006-2008 Urs Wolfer ** Copyright (C) 2008 Ben Klopfenstein ** ** This file is part of QtEmu. ** ** 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 2 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 Library General Public License ** along with this library; see the file COPYING.LIB. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include "machinetab.h" #include "machineprocess.h" #include "config.h" #include "machineview.h" #include "settingstab.h" #include "harddiskmanager.h" #include "controlpanel.h" #include "guesttoolslistener.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MachineTab::MachineTab(QTabWidget *parent, const QString &fileName, const QString &myMachinesPathParent) : QWidget(parent) { parentTabWidget = parent; xmlFileName = fileName; myMachinesPath = myMachinesPathParent; QSettings settings("QtEmu", "QtEmu"); QString iconTheme = settings.value("iconTheme", "oxygen").toString(); machineConfig = new MachineConfig(this, fileName); machineConfigObject = new MachineConfigObject(this, machineConfig); machineView = new MachineView(machineConfigObject, this); machineProcess = new MachineProcess(this); machineConfigObject->setOption("vncPort", 1000 + parentTabWidget->currentIndex() + 1); settingsTab = new SettingsTab(machineConfigObject, this); machineNameEdit = new QLineEdit(this); guestToolsListener = new GuestToolsListener(machineConfigObject->getOption("hdd",QString()).toString().replace(QRegExp("[.][^.]+$"), ".tools"), this); #ifndef Q_OS_WIN32 const QString flatStyle = QString("TYPE { border: 2px solid transparent;" "background-color: transparent; }" "TYPE:hover { background-color: white;" "border: 2px inset %1; border-radius: 3px;}" "TYPE:focus { background-color: white;" "border: 2px inset %2; border-radius: 3px;}") .arg(machineNameEdit->palette().color(QPalette::Mid).name()) .arg(machineNameEdit->palette().color(QPalette::Highlight).name()); #elif defined(Q_OS_WIN32) const QString flatStyle = QString("TYPE { border: 1px solid transparent;" "background-color: transparent; }" "TYPE:hover, TYPE:focus { background-color: white;" "border: 1px solid %1;}") .arg(machineNameEdit->palette().color(QPalette::Highlight).name()); #endif #if QT_VERSION >= 0x040200 machineNameEdit->setStyleSheet(QString(flatStyle).replace("TYPE", "QLineEdit") +"QLineEdit { font: bold 16px; }"); #endif QPushButton *closeButton = new QPushButton(QIcon(":/images/" + iconTheme + "/close.png"), QString(), this); closeButton->setFlat(true); closeButton->setToolTip(tr("Close this machine")); connect(closeButton, SIGNAL(clicked(bool)), this, SLOT(closeMachine())); QHBoxLayout *closeButtonLayout = new QHBoxLayout; closeButtonLayout->addWidget(machineNameEdit); closeButtonLayout->addWidget(closeButton); startButton = new QPushButton(QIcon(":/images/" + iconTheme + "/start.png"), tr("&Start"), this); startButton->setWhatsThis(tr("Start this virtual machine")); startButton->setIconSize(QSize(22, 22)); connect(startButton, SIGNAL(clicked(bool)), this, SLOT(start())); QMenu *stopMenu = new QMenu(); QAction *stopAction = stopMenu->addAction(QIcon(":/images/" + iconTheme + "/stop.png"), tr("&Shutdown")); QAction *forceAction = stopMenu->addAction(QIcon(":/images/" + iconTheme + "/force.png"), tr("&Force Poweroff")); stopAction->setWhatsThis(tr("Tell this virtual machine to shut down")); forceAction->setWhatsThis(tr("Force this virtual machine to stop immediately")); stopButton = new QPushButton(this); stopButton->setToolTip(tr("Hold down this button for additional options")); stopButton->setMenu(stopMenu); // stopButton->setDefaultAction(stopAction); stopButton->setIcon(QIcon(":/images/" + iconTheme + "/stop.png")); // stopButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); stopButton->setIconSize(QSize(22, 22)); stopButton->setSizePolicy(startButton->sizePolicy()); stopButton->setText(tr("&Stop")); stopButton->setEnabled(false); connect(stopAction, SIGNAL(triggered(bool)), machineProcess, SLOT(stop())); connect(forceAction, SIGNAL(triggered(bool)), this, SLOT(forceStop())); QHBoxLayout *powerButtonsLayout = new QHBoxLayout; powerButtonsLayout->addWidget(startButton); powerButtonsLayout->addWidget(stopButton); suspendButton = new QPushButton(QIcon(":/images/" + iconTheme + "/suspend.png"), tr("&Suspend"), this); suspendButton->setWhatsThis(tr("Suspend this virtual machine")); suspendButton->setIconSize(QSize(22, 22)); connect(suspendButton, SIGNAL(clicked(bool)), machineProcess, SLOT(suspend())); suspendButton->setHidden(true); suspendButton->setEnabled(false); resumeButton = new QPushButton(QIcon(":/images/" + iconTheme + "/resume.png"), tr("&Resume"), this); resumeButton->setWhatsThis(tr("Resume this virtual machine")); resumeButton->setIconSize(QSize(22, 22)); connect(resumeButton, SIGNAL(clicked(bool)), machineProcess, SLOT(resume())); resumeButton->setEnabled(false); pauseButton = new QPushButton(QIcon(":/images/" + iconTheme + "/pause.png"), tr("&Pause"), this); pauseButton->setWhatsThis(tr("Pause/Unpause this virtual machine")); pauseButton->setCheckable(true); pauseButton->setIconSize(QSize(22, 22)); pauseButton->setEnabled(false); connect(pauseButton, SIGNAL(clicked(bool)), machineProcess, SLOT(togglePause())); QHBoxLayout *controlButtonsLayout = new QHBoxLayout; controlButtonsLayout->addWidget(suspendButton); controlButtonsLayout->addWidget(resumeButton); controlButtonsLayout->addWidget(pauseButton); snapshotCheckBox = new QCheckBox(tr("Snapshot mode"), this); connect(snapshotCheckBox, SIGNAL(stateChanged(int)), this, SLOT(snapshot(int))); QToolButton *screenshotButton = new QToolButton(this); screenshotButton->setAutoRaise(false); screenshotButton->setIcon(QIcon(":/images/" + iconTheme + "/camera.png")); screenshotButton->setIconSize(QSize(22, 22)); screenshotButton->setToolTip(tr("Set preview screenshot")); QHBoxLayout *snapshotLayout = new QHBoxLayout; snapshotLayout->addWidget(snapshotCheckBox); snapshotLayout->addWidget(screenshotButton); connect(screenshotButton, SIGNAL(clicked()), this, SLOT(takeScreenshot())); QLabel *notesLabel = new QLabel(tr("Notes"), this); notesTextEdit = new QTextEdit(this); notesTextEdit->setFixedHeight(60); #if QT_VERSION >= 0x040200 notesTextEdit->setStyleSheet(QString(flatStyle).replace("TYPE", "QTextEdit")); #endif QLabel *controlLabel = new QLabel(tr("Control Panel"), this); controlPanel = new ControlPanel(this); QVBoxLayout *buttonsLayout = new QVBoxLayout(); buttonsLayout->addLayout(closeButtonLayout); buttonsLayout->addLayout(powerButtonsLayout); buttonsLayout->addLayout(controlButtonsLayout); buttonsLayout->addLayout(snapshotLayout); buttonsLayout->addWidget(notesLabel); buttonsLayout->addWidget(notesTextEdit); buttonsLayout->addStretch(10); buttonsLayout->addWidget(controlLabel); buttonsLayout->addWidget(controlPanel); //set up the layout for the tab panel QGridLayout *mainLayout = new QGridLayout(this); mainLayout->addLayout(buttonsLayout, 0, 0); QTabWidget *viewTabs = new QTabWidget(this); mainLayout->addWidget(viewTabs, 0, 1); mainLayout->setColumnStretch(1, 10); viewTabs->addTab(machineView, tr("Display")); machineConfigObject->registerObject(machineView); viewTabs->addTab(settingsTab, tr("Settings")); //console area consoleFrame = new QFrame(this); viewTabs->addTab(consoleFrame, tr("Console")); console = new QTextEdit(this); console->setReadOnly(true); connect(machineProcess, SIGNAL(cleanConsole(QString)), console, SLOT(append(QString))); consoleCommand = new QLineEdit(this); //console->setFocusProxy(consoleCommand); QPushButton *consoleCommandButton = new QPushButton(tr("Enter Command"), this); connect(consoleCommand, SIGNAL(returnPressed()), consoleCommandButton, SLOT(click())); connect(consoleCommandButton, SIGNAL(clicked()), this, SLOT(runCommand())); QVBoxLayout *consoleLayout = new QVBoxLayout(); QHBoxLayout *consoleCommandLayout = new QHBoxLayout(); consoleLayout->addWidget(console); consoleCommandLayout->addWidget(consoleCommand); consoleCommandLayout->addWidget(consoleCommandButton); consoleLayout->addLayout(consoleCommandLayout); consoleFrame->setLayout(consoleLayout); setLayout(mainLayout); consoleFrame->setAutoFillBackground (true); settingsTab->setAutoFillBackground (true); //end console area read(); //read first the name, otherwise the name of the main tab changes makeConnections(); machineProcess->getHdManager()->testImage(); machineProcess->checkIfRunning(); } bool MachineTab::read() { //init and register values machineConfigObject->registerObject(machineNameEdit, "name"); machineConfigObject->registerObject(snapshotCheckBox, "snapshot", QVariant(false)); #ifdef DEVELOPER machineConfigObject->setOption("snapshot", true); #endif machineConfigObject->registerObject(notesTextEdit, "notes"); return true; } void MachineTab::nameChanged(const QString &name) { parentTabWidget->setTabText(parentTabWidget->currentIndex(), name); } QString MachineTab::machineName() { return machineNameEdit->text(); } void MachineTab::closeMachine() { if (QMessageBox::question(this, tr("Close confirmation"), tr("Are you sure you want to close this machine?
" "You can open it again with the corresponding .qte file in your \"MyMachines\" folder."), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::No) == QMessageBox::Yes) parentTabWidget->removeTab(parentTabWidget->currentIndex()); } void MachineTab::start() { console->clear(); machineProcess->start(); } void MachineTab::suspending() { //startButton->setEnabled(false); //stopButton->setEnabled(false); //suspendButton->setEnabled(false); //pauseButton->setEnabled(false); setEnabled(false); //TODO: start a progress bar } void MachineTab::suspended() { machineProcess->forceStop(); //resumeButton->setHidden(false); machineProcess->getHdManager()->testImage(); suspendButton->setHidden(true); setEnabled(true); //stop the progress bar } void MachineTab::resuming() { //startButton->setEnabled(false); //stopButton->setEnabled(false); setEnabled(false); } void MachineTab::resumed() { setEnabled(true); startButton->setEnabled(false); stopButton->setEnabled(true); suspendButton->setHidden(false); resumeButton->setHidden(true); //this is kinda sucky, i think it's a qemu bug. QMessageBox::information(this, tr("Resume"), tr("Your machine is being resumed. USB devices will not function properly on Windows. You must reload
the USB driver to use your usb devices including the seamless mouse.
In addition the advanced VGA adapter will not refresh initially on any OS.")); } void MachineTab::forceStop() { QMessageBox msgBox; msgBox.setText(tr("This will force the current machine to power down. Are you sure?
" "You should only do this if the machine is unresponsive or does not support ACPI. Doing this may cause damage to the disk image.")); msgBox.setStandardButtons(QMessageBox::Cancel); QPushButton *forceShutdownButton = msgBox.addButton(tr("Force Power Off"), QMessageBox::DestructiveRole); msgBox.setDefaultButton(QMessageBox::Cancel); msgBox.setIcon(QMessageBox::Warning); msgBox.exec(); if (msgBox.clickedButton()==forceShutdownButton) machineProcess->forceStop(); } void MachineTab::finished() { stopButton->setEnabled(false); startButton->setEnabled(true); pauseButton->setEnabled(false); resumeButton->setHidden(false); suspendButton->setHidden(true); snapshotCheckBox->setText(tr("Snapshot mode")); cleanupView(); machineProcess->getHdManager()->testImage(); shownErrors.clear(); } void MachineTab::started() { } void MachineTab::error(const QString & errorMsg) { if (errorMsg.contains("(VMDK)")) { //for some reason qemu throws an error message when using a VMDK image. oh well... it isn't a REAL error, so ignore it. return; } else if (errorMsg.contains("bind()")) { if( QMessageBox::critical(this, tr("QtEmu machine already running!"), tr("There is already a virtual machine running on the specified
" "VNC port or file. This may mean a previous QtEmu session crashed;
" "if this is the case you can try to connect to the virtual machine
" "to rescue your data and shut it down safely.

" "Try to connect to this machine?"),QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { QTimer::singleShot(500, machineView, SLOT(initView())); } return; } else if ((!shownErrors.contains("audio"))&&(errorMsg.contains("audio:"))) { shownErrors << "audio"; QMessageBox::critical(this, tr("QtEmu Sound Error"), tr("QtEmu is having trouble accessing your sound system. Make sure
" "you have your host sound system selected correctly in the Sound
" "section of the settings tab. Also make sure your version of
" "qemu/KVM has support for the sound system you selected.") ,QMessageBox::Ok); return; } QMessageBox::critical(this, tr("QtEmu Error"), tr("An error has occurred. This may have been caused by
" "an incorrect setting. The error is:
") + errorMsg,QMessageBox::Ok); } void MachineTab::snapshot(const int state) { if(state == Qt::Unchecked) { snapshotCheckBox->setText(tr("Snapshot mode")); } } void MachineTab::runCommand() { machineProcess->write(consoleCommand->text().toAscii() + '\n'); consoleCommand->clear(); } void MachineTab::restart() { connect(machineProcess, SIGNAL(finished(int)) , this, SLOT(clearRestart())); machineProcess->stop(); } void MachineTab::clearRestart() { disconnect(machineProcess, SIGNAL(finished(int)) , this, SLOT(clearRestart())); startButton->click(); } void MachineTab::booting() { if(machineConfigObject->getOption("embeddedDisplay",QVariant(false)).toBool()) machineView->initView(); if(snapshotCheckBox->isChecked()) { snapshotCheckBox->setText(snapshotCheckBox->text() + '\n' + tr("(uncheck to commit changes)")); } pauseButton->setEnabled(true); suspendButton->setHidden(false); resumeButton->setHidden(true); startButton->setEnabled(false); stopButton->setEnabled(true); delete(guestToolsListener); guestToolsListener = new GuestToolsListener(machineConfigObject->getOption("hdd",QString()).toString().replace(QRegExp("[.][^.]+$"), ".tools"), this); } void MachineTab::cleanupView() { machineView->showSplash(true); } void MachineTab::takeScreenshot() { QString fileName = machineConfigObject->getOption("hdd",QString()).toString().replace(QRegExp("[.][^.]+$"), ".ppm"); machineProcess->write(QString("screendump " + fileName).toAscii() + '\n'); machineConfigObject->setOption("preview", fileName); } void MachineTab::makeConnections() { connect(machineNameEdit, SIGNAL(textChanged(const QString&)), this, SLOT(nameChanged(QString))); //hard disk manager related connections HardDiskManager *hdManager = machineProcess->getHdManager(); connect(settingsTab, SIGNAL(upgradeHdd()), hdManager, SLOT(upgradeImage())); connect(hdManager, SIGNAL(imageUpgradable(bool)), settingsTab->upgradeFrame, SLOT(setEnabled(bool))); connect(hdManager, SIGNAL(processingImage(bool)), this, SLOT(setDisabled(bool))); connect(hdManager, SIGNAL(error(const QString&)), this, SLOT(error(const QString&))); connect(hdManager, SIGNAL(imageFormat(QString)), settingsTab->formatLabel, SLOT(setText(QString))); connect(hdManager, SIGNAL(imageSize(qint64)), settingsTab, SLOT(setVirtSize(qint64))); connect(hdManager, SIGNAL(phySize(qint64)), settingsTab, SLOT(setPhySize(qint64))); connect(hdManager, SIGNAL(supportsSuspending(bool)), suspendButton, SLOT(setEnabled(bool))); connect(hdManager, SIGNAL(supportsResuming(bool)), resumeButton, SLOT(setEnabled(bool))); } qtemu-2.0~alpha1/floatingtoolbar.h0000644000175000017500000000441211067374203017164 0ustar fboudrafboudra/**************************************************************************** ** ** Copyright (C) 2007-2008 Urs Wolfer ** Parts of this file have been take from okular: ** Copyright (C) 2004-2005 Enrico Ros ** ** This file is part of KDE. ** ** 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 2 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; see the file COPYING. If not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ** Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef FLOATINGTOOLBAR_H #define FLOATINGTOOLBAR_H #include /** * @short A toolbar widget that slides in from a side. * * This is a shaped widget that slides in from a side of the 'anchor widget' * it's attached to. It can be dragged and docked on {left,top,right,bottom} * sides and contains actions. */ class FloatingToolBar : public QToolBar { Q_OBJECT public: FloatingToolBar(QWidget *parent, QWidget *anchorWidget); ~FloatingToolBar(); Q_ENUMS(Side) enum Side { Left = 0, Top = 1, Right = 2, Bottom = 3 }; void addAction(QAction *action); void setSide(Side side); Q_SIGNALS: void orientationChanged(int side); public Q_SLOTS: void setSticky(bool sticky); void showAndAnimate(); void hideAndDestroy(); protected: bool eventFilter(QObject *o, QEvent *e); void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void enterEvent(QEvent *e); void leaveEvent(QEvent *e); void mouseReleaseEvent(QMouseEvent *e); void wheelEvent(QWheelEvent *e); private: class FloatingToolBarPrivate *d; private Q_SLOTS: void animate(); void hide(); }; #endif