diff options
-rw-r--r-- | src/libs/installer/component.cpp | 6 | ||||
-rw-r--r-- | src/libs/installer/component_p.h | 6 | ||||
-rw-r--r-- | src/libs/installer/constants.h | 2 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 12 | ||||
-rw-r--r-- | src/s40/componentviewpage.cpp | 327 | ||||
-rw-r--r-- | src/s40/componentviewpage.h | 44 | ||||
-rw-r--r-- | src/s40/installerbasecommons.cpp | 1 |
7 files changed, 146 insertions, 252 deletions
diff --git a/src/libs/installer/component.cpp b/src/libs/installer/component.cpp index 963dd55c6..4aa3c3400 100644 --- a/src/libs/installer/component.cpp +++ b/src/libs/installer/component.cpp @@ -113,7 +113,7 @@ void Component::loadDataFromPackage(const LocalPackage &package) setValue(QLatin1String("LastUpdateDate"), package.lastUpdateDate.toString()); setValue(QLatin1String("InstallDate"), package.installDate.toString()); setValue(scUncompressedSize, QString::number(package.uncompressedSize)); - + setValue(scPackageStatus, QLatin1String("Installed")); QString dependstr; foreach (const QString &val, package.dependencies) dependstr += val + QLatin1String(","); @@ -150,7 +150,7 @@ void Component::loadDataFromPackage(const Package &package) setValue(scDownloadableArchives, package.data(scDownloadableArchives).toString()); setValue(scVirtual, package.data(scVirtual).toString()); setValue(scSortingPriority, package.data(scSortingPriority).toString()); - + setValue(scPackageStatus, QLatin1String("Installed")); setValue(scEssential, package.data(scEssential).toString()); setValue(scUpdateText, package.data(scUpdateText).toString()); setValue(scNewComponent, package.data(scNewComponent).toString()); @@ -1198,6 +1198,8 @@ void Component::updateModelData(const QString &key, const QString &data) quint64 size = value(scUncompressedSizeSum).toLongLong(); setData(humanReadableSize(size), UncompressedSize); } + if (key == scPackageStatus) + setData(data, PackageStatus); const QString &updateInfo = value(scUpdateText); if (!d->m_core->isUpdater() || updateInfo.isEmpty()) { diff --git a/src/libs/installer/component_p.h b/src/libs/installer/component_p.h index 0c58288f9..8d2ab8e2a 100644 --- a/src/libs/installer/component_p.h +++ b/src/libs/installer/component_p.h @@ -101,14 +101,16 @@ public: enum Roles { LocalDisplayVersion = Qt::UserRole + 1, RemoteDisplayVersion = LocalDisplayVersion + 1, - UncompressedSize = RemoteDisplayVersion + 1 + UncompressedSize = RemoteDisplayVersion + 1, + PackageStatus = UncompressedSize + 1 }; enum Column { NameColumn = 0, InstalledVersionColumn, NewVersionColumn, - UncompressedSizeColumn + UncompressedSizeColumn, + ComponentStatus }; explicit ComponentModelHelper(); diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h index ea512ed76..6a5037ff4 100644 --- a/src/libs/installer/constants.h +++ b/src/libs/installer/constants.h @@ -76,7 +76,7 @@ static const QLatin1String scRemoveTargetDir("RemoveTargetDir"); static const QLatin1String scRunProgramDescription("RunProgramDescription"); static const QLatin1String scTargetConfigurationFile("TargetConfigurationFile"); static const QLatin1String scAllowNonAsciiCharacters("AllowNonAsciiCharacters"); - +static const QLatin1String scPackageStatus("PackageStatus"); } #endif // CONSTANTS_H diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 2dda4205f..c0879f7eb 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -1917,8 +1917,11 @@ void PackageManagerCore::updateDisplayVersions(const QString &displayKey) const QString displayVersionRemote = findDisplayVersion(key, components, scRemoteVersion, visited); if (displayVersionRemote.isEmpty()) components.value(key)->setValue(displayKey, tr("invalid")); - else - components.value(key)->setValue(displayKey, displayVersionRemote); + else { + components.value(key)->setValue(displayKey, displayVersionRemote); + if (displayVersionRemote > findDisplayVersion(key, components, scVersion, visited ) ) + components.value(key)->setValue(scPackageStatus, tr("Updates available")); + } } } @@ -1942,8 +1945,7 @@ QString PackageManagerCore::findDisplayVersion(const QString &componentName, ComponentModel *PackageManagerCore::componentModel(PackageManagerCore *core, const QString &objectName) const { - ComponentModel *model = new ComponentModel(4, core); - + ComponentModel *model = new ComponentModel(5, core); model->setObjectName(objectName); model->setHeaderData(ComponentModelHelper::NameColumn, Qt::Horizontal, ComponentModel::tr("Component Name")); @@ -1953,6 +1955,8 @@ ComponentModel *PackageManagerCore::componentModel(PackageManagerCore *core, con ComponentModel::tr("New Version")); model->setHeaderData(ComponentModelHelper::UncompressedSizeColumn, Qt::Horizontal, ComponentModel::tr("Size")); + model->setHeaderData(ComponentModelHelper::ComponentStatus, Qt::Horizontal, + ComponentModel::tr("Status")); connect(this, SIGNAL(setRootComponents(QList<QInstaller::Component*>)), model, SLOT(setRootComponents(QList<QInstaller::Component*>))); connect(model, SIGNAL(defaultCheckStateChanged(bool)), this, SLOT(componentsToInstallNeedsRecalculation())); diff --git a/src/s40/componentviewpage.cpp b/src/s40/componentviewpage.cpp index 74dc576b6..cb6e2fb78 100644 --- a/src/s40/componentviewpage.cpp +++ b/src/s40/componentviewpage.cpp @@ -49,6 +49,7 @@ #include <QtGui/QRadioButton> #include <QtGui/QStackedWidget> #include <QtGui/QVBoxLayout> +#include <QCheckBox> using namespace QInstaller; @@ -64,66 +65,76 @@ ComponentViewPage::ComponentViewPage(QInstaller::PackageManagerCore *core) , m_updaterModel(m_core->updaterComponentModel()) , m_currentModel(m_allModel) { - setPixmap(QWizard::LogoPixmap, logoPixmap()); setPixmap(QWizard::WatermarkPixmap, QPixmap()); setObjectName(QLatin1String("ComponentViewPage")); setTitle(titleForPage(QLatin1String("ComponentViewPage"), tr("Select Components"))); + m_core->setPackageManager(); + setFixedSize(970, 860); + //resize(970, 860); + QVBoxLayout *vMainLayout = new QVBoxLayout; + QHBoxLayout *hMainLayout = new QHBoxLayout; + QHBoxLayout *hLayoutLeft = new QHBoxLayout; + QHBoxLayout *hLayoutRight= new QHBoxLayout; + //creating check box and buttons for sdk manager - m_treeView->setObjectName(QLatin1String("ComponentsTreeView")); + showLabel = new QLabel(QLatin1String("Show:")); + hLayoutLeft->addWidget(showLabel); - connect(m_allModel, SIGNAL(defaultCheckStateChanged(bool)), this, SLOT(setModified(bool))); - connect(m_updaterModel, SIGNAL(defaultCheckStateChanged(bool)), this, SLOT(setModified(bool))); + showInstalled = new QCheckBox(QLatin1String("Installed")); + showInstalled->setChecked(true); + hLayoutLeft->addWidget(showInstalled); - m_descriptionLabel = new QLabel(this); - m_descriptionLabel->setWordWrap(true); - m_descriptionLabel->setObjectName(QLatin1String("ComponentDescriptionLabel")); + showUpdates = new QCheckBox(QLatin1String("Updates/New")); + hLayoutLeft->addWidget(showUpdates); - m_sizeLabel = new QLabel(this); - m_sizeLabel->setWordWrap(true); - m_sizeLabel->setObjectName(QLatin1String("ComponentSizeLabel")); - m_checkDefault = new QPushButton; - connect(m_checkDefault, SIGNAL(clicked()), this, SLOT(selectDefault())); - connect(m_allModel, SIGNAL(defaultCheckStateChanged(bool)), m_checkDefault, SLOT(setEnabled(bool))); - const QVariantHash hash = elementsForPage(QLatin1String("ComponentViewPage")); - if (m_core->isInstaller()) { - m_checkDefault->setObjectName(QLatin1String("SelectDefaultComponentsButton")); - m_checkDefault->setShortcut(QKeySequence(ComponentViewPage::tr("Alt+A", "select default components"))); - m_checkDefault->setText(hash.value(QLatin1String("SelectDefaultComponentsButton"), ComponentViewPage::tr("Def&ault")) - .toString()); - } else { - m_checkDefault->setEnabled(false); - m_checkDefault->setObjectName(QLatin1String("ResetComponentsButton")); - m_checkDefault->setShortcut(QKeySequence(ComponentViewPage::tr("Alt+R", "reset to already installed components"))); - m_checkDefault->setText(hash.value(QLatin1String("ResetComponentsButton"), ComponentViewPage::tr("&Reset")).toString()); - } + hMainLayout->addLayout(hLayoutLeft); + hMainLayout->setAlignment(hLayoutLeft, Qt::AlignLeft); - m_checkAll = new QPushButton; - connect(m_checkAll, SIGNAL(clicked()), this, SLOT(selectAll())); - m_checkAll->setObjectName(QLatin1String("SelectAllComponentsButton")); - m_checkAll->setShortcut(QKeySequence(ComponentViewPage::tr("Alt+S", "select all components"))); - m_checkAll->setText(hash.value(QLatin1String("SelectAllComponentsButton"), ComponentViewPage::tr("&Select All")).toString()); + hMainLayout->setAlignment(hLayoutRight, Qt::AlignRight); - m_uncheckAll = new QPushButton; - connect(m_uncheckAll, SIGNAL(clicked()), this, SLOT(deselectAll())); - m_uncheckAll->setObjectName(QLatin1String("DeselectAllComponentsButton")); - m_uncheckAll->setShortcut(QKeySequence(ComponentViewPage::tr("Alt+D", "deselect all components"))); - m_uncheckAll->setText(hash.value(QLatin1String("DeselectAllComponentsButton"), ComponentViewPage::tr("&Deselect All")) - .toString()); + m_treeView->setObjectName(QLatin1String("ComponentsTreeView")); + m_treeView->setModel(m_allModel); + m_treeView->resizeColumnToContents ( 0 ); + m_treeView->setExpanded(m_allModel->index(0,0), true); m_progressBar = new QProgressBar(this); m_progressBar->setRange(0, 0); + vMainLayout->addWidget(m_treeView); + + vMainLayout->addLayout(hMainLayout); + vMainLayout->addSpacing(5); + + QFrame* line = new QFrame; + line->setObjectName(QString::fromUtf8("line")); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + + vMainLayout->addWidget(line); + vMainLayout->addWidget(m_progressBar); + + progressStatusLabel = new QLabel (QLatin1String("Status:")); + vMainLayout->addWidget(progressStatusLabel); + setLayout(vMainLayout); + //setWindowTitle(QLatin1String("SDK Manager")); + - m_errorLabel = new QLabel(this); - m_errorLabel->setWordWrap(true); + //signal and slots + connect(showInstalled, SIGNAL(stateChanged(int)), + this, SLOT(showInstalledComponents())); + connect(showUpdates, SIGNAL(stateChanged(int)), + this, SLOT(showUpdateNewComponents())); + + fetchComponentsData(); + + setButtonText(QWizard::NextButton, tr("Install")); - gui()->showSettingsButton(true); connect(core, SIGNAL(metaJobInfoMessage(QString)), this, SLOT(setMessage(QString))); - connect(core, SIGNAL(coreNetworkSettingsChanged()), this, SLOT(onCoreNetworkSettingsChanged())); + //connect(core, SIGNAL(coreNetworkSettingsChanged()), this, SLOT(onCoreNetworkSettingsChanged())); } void ComponentViewPage::currentChanged(const QModelIndex ¤t) @@ -152,36 +163,8 @@ ComponentViewPage::~ComponentViewPage() { } - -// TODO: all *select* function ignore the fact that components can be selected inside the tree view as -// well, which will result in e.g. a disabled button state as long as "ALL" components not -// unchecked again. -void ComponentViewPage::selectAll() -{ - m_currentModel->selectAll(); - - m_checkAll->setEnabled(false); - m_uncheckAll->setEnabled(true); -} - -void ComponentViewPage::deselectAll() -{ - m_currentModel->deselectAll(); - - m_checkAll->setEnabled(true); - m_uncheckAll->setEnabled(false); -} - -void ComponentViewPage::selectDefault() -{ - m_currentModel->selectDefault(); - - m_checkAll->setEnabled(true); - m_uncheckAll->setEnabled(true); -} - -/*! - Selects the component with /a id in the component tree. +/* + Selects the component with /a id in the component tree. */ void ComponentViewPage::selectComponent(const QString &id) { @@ -190,8 +173,8 @@ void ComponentViewPage::selectComponent(const QString &id) m_currentModel->setData(idx, Qt::Checked, Qt::CheckStateRole); } -/*! - Deselects the component with /a id in the component tree. +/* + Deselects the component with /a id in the component tree. */ void ComponentViewPage::deselectComponent(const QString &id) { @@ -203,7 +186,6 @@ void ComponentViewPage::deselectComponent(const QString &id) void ComponentViewPage::updateTreeView() { - m_checkDefault->setVisible(m_core->isInstaller() || m_core->isPackageManager()); if (m_treeView->selectionModel()) { disconnect(m_treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(currentChanged(QModelIndex))); @@ -240,168 +222,91 @@ void ComponentViewPage::updateTreeView() } -bool ComponentViewPage::validatePage() -{ - PackageManagerCore *core = packageManagerCore(); - - setComplete(false); - gui()->setSettingsButtonEnabled(false); - - const bool maintanence = core->isUpdater() || core->isPackageManager(); - if (maintanence) { - showAll(); - } else { - showMetaInfoUdate(); - } - - // fetch updater packages - if (core->isUpdater()) { - if (!m_updatesFetched) { - m_updatesFetched = core->fetchRemotePackagesTree(); - if (!m_updatesFetched) - setErrorMessage(core->error()); - } - - callControlScript(QLatin1String("UpdaterSelectedCallback")); - - if (m_updatesFetched) { - if (core->updaterComponents().count() <= 0) - setErrorMessage(QLatin1String("<b>") + tr("No updates available.") + QLatin1String("</b>")); - else - setComplete(true); - } - } - - // fetch common packages - if (core->isInstaller() || core->isPackageManager()) { - bool localPackagesTreeFetched = false; - if (!m_allPackagesFetched) { - // first try to fetch the server side packages tree - m_allPackagesFetched = core->fetchRemotePackagesTree(); - if (!m_allPackagesFetched) { - QString error = core->error(); - if (core->isPackageManager()) { - // if that fails and we're in maintenance mode, try to fetch local installed tree - localPackagesTreeFetched = core->fetchLocalPackagesTree(); - if (localPackagesTreeFetched) { - // if that succeeded, adjust error message - error = QLatin1String("<font color=\"red\">") + error + tr(" Only local package " - "management available.") + QLatin1String("</font>"); - } - } - setErrorMessage(error); - } - } - - callControlScript(QLatin1String("PackageManagerSelectedCallback")); - - if (m_allPackagesFetched | localPackagesTreeFetched) - setComplete(true); - } - if (maintanence) { - showMaintenanceTools(); - } else { - hideAll(); - } - gui()->setSettingsButtonEnabled(true); - return isComplete(); -} - -void ComponentViewPage::showAll() +void ComponentViewPage::setMessage(const QString &msg) { - showWidgets(true); + m_label->setText(msg); } -void ComponentViewPage::hideAll() +void ComponentViewPage::setErrorMessage(const QString &error) { - showWidgets(false); +// QPalette palette; +// const PackageManagerCore::Status s = packageManagerCore()->status(); +// if (s == PackageManagerCore::Failure || s == PackageManagerCore::Failure) { +// palette.setColor(QPalette::WindowText, Qt::red); +// } else { +// palette.setColor(QPalette::WindowText, palette.color(QPalette::WindowText)); +// } + +// m_errorLabel->setText(error); +// m_errorLabel->setPalette(palette); } -void ComponentViewPage::showMetaInfoUdate() -{ - showWidgets(false); - m_label->setVisible(true); - m_progressBar->setVisible(true); -} -void ComponentViewPage::showMaintenanceTools() -{ - showWidgets(true); - m_label->setVisible(false); - m_progressBar->setVisible(false); -} +//void ComponentViewPage::onCoreNetworkSettingsChanged() +//{ +// // force a repaint of the ui as after the settings dialog has been closed and the wizard has been +// // restarted, the "Next" button looks still disabled. TODO: figure out why this happens at all! +// gui()->repaint(); -// -- public slots +// m_updatesFetched = false; +// m_allPackagesFetched = false; +//} -void ComponentViewPage::setMessage(const QString &msg) -{ - m_label->setText(msg); +void ComponentViewPage::showInstalledComponents() +{//required later } -void ComponentViewPage::setErrorMessage(const QString &error) +void ComponentViewPage::showUpdateNewComponents() { - QPalette palette; - const PackageManagerCore::Status s = packageManagerCore()->status(); - if (s == PackageManagerCore::Failure || s == PackageManagerCore::Failure) { - palette.setColor(QPalette::WindowText, Qt::red); - } else { - palette.setColor(QPalette::WindowText, palette.color(QPalette::WindowText)); + if (showUpdates->checkState()){ + setButtonText(QWizard::NextButton, tr("Update")); + m_core->setUpdater(); + fetchUpdateComponent(); + } + else{ + setButtonText(QWizard::NextButton, tr("Install")); + m_core->setPackageManager(); + m_allPackagesFetched = false; + fetchComponentsData(); } - - m_errorLabel->setText(error); - m_errorLabel->setPalette(palette); -} - -void ComponentViewPage::callControlScript(const QString &callback) -{ - // Initialize the gui. Needs to be done after check repositories as only then the ui can handle - // hide of pages depending on the components. - gui()->init(); - gui()->callControlScriptMethod(callback); } -void ComponentViewPage::onCoreNetworkSettingsChanged() +void ComponentViewPage::fetchComponentsData() { - // force a repaint of the ui as after the settings dialog has been closed and the wizard has been - // restarted, the "Next" button looks still disabled. TODO: figure out why this happens at all! - gui()->repaint(); - m_updatesFetched = false; - m_allPackagesFetched = false; + // fetch common packages + bool localPackagesTreeFetched = false; + if (!m_allPackagesFetched) { + // first try to fetch the server side packages tree + m_allPackagesFetched = m_core->fetchRemotePackagesTree(); + if (!m_allPackagesFetched) { + QString error = m_core->error(); + if (m_core->isPackageManager()) { + // if that fails and we're in maintenance mode, try to fetch local installed tree + localPackagesTreeFetched = m_core->fetchLocalPackagesTree(); + if (localPackagesTreeFetched) { + // if that succeeded, adjust error message + error = QLatin1String("<font color=\"red\">") + error + tr(" Only local package " + "management available.") + QLatin1String("</font>"); + } + } + setErrorMessage(error); + } + } } -// -- private -void ComponentViewPage::entering() +void ComponentViewPage::fetchUpdateComponent() { - setComplete(true); - showWidgets(false); - setMessage(QString()); - setErrorMessage(QString()); - setButtonText(QWizard::CancelButton, tr("Quit")); - - PackageManagerCore *core = packageManagerCore(); - if (core->isUninstaller() ||core->isUpdater() || core->isPackageManager()) { - showMaintenanceTools(); + if (m_core->isUpdater()) { + if (!m_updatesFetched) { + m_updatesFetched = m_core->fetchRemotePackagesTree(); + if (!m_updatesFetched) + setErrorMessage(m_core->error()); + } } -} -void ComponentViewPage::setModified(bool modified) -{ - setComplete(modified); } -void ComponentViewPage::leaving() -{ - // TODO: force repaint on next page, keeps unpainted after fetch - QTimer::singleShot(100, gui()->page(nextId()), SLOT(repaint())); - setButtonText(QWizard::CancelButton, gui()->defaultButtonText(QWizard::CancelButton)); -} - -void ComponentViewPage::showWidgets(bool show) -{ - m_label->setVisible(show); - m_progressBar->setVisible(show); -} diff --git a/src/s40/componentviewpage.h b/src/s40/componentviewpage.h index 5d4db7553..2769810f9 100644 --- a/src/s40/componentviewpage.h +++ b/src/s40/componentviewpage.h @@ -55,47 +55,25 @@ public: explicit ComponentViewPage(QInstaller::PackageManagerCore *core); ~ComponentViewPage(); - bool validatePage(); - - void showAll(); - void hideAll(); - void showMetaInfoUdate(); - void showMaintenanceTools(); void updateTreeView(); public slots: - void onCoreNetworkSettingsChanged(); + // void onCoreNetworkSettingsChanged(); void setMessage(const QString &msg); void setErrorMessage(const QString &error); public slots: void currentChanged(const QModelIndex ¤t); - - void selectAll(); - void deselectAll(); - void selectDefault(); void selectComponent(const QString &id); void deselectComponent(const QString &id); -signals: - void packageManagerCoreTypeChanged(); - - - bool isComplete() const; - - -protected: - void entering(); - -private Q_SLOTS: - void setModified(bool modified); + void showInstalledComponents(); + void showUpdateNewComponents(); private: - void leaving(); - - void showWidgets(bool show); - void callControlScript(const QString &callback); + void fetchComponentsData(); + void fetchUpdateComponent(); private: bool m_updatesFetched; @@ -103,9 +81,16 @@ private: bool m_allPackagesFetched; QLabel *m_label; - QLabel *m_errorLabel; QProgressBar *m_progressBar; + QPushButton* installButton; + QPushButton* cancelButton; + QLabel* showLabel; + QLabel* progressStatusLabel; + QLabel* progressLabel; + QCheckBox* showInstalled; + QCheckBox* showUpdates; + PackageManagerCore *m_core; QTreeView *m_treeView; @@ -114,9 +99,6 @@ private: ComponentModel *m_currentModel; QLabel *m_sizeLabel; QLabel *m_descriptionLabel; - QPushButton *m_checkAll; - QPushButton *m_uncheckAll; - QPushButton *m_checkDefault; }; } //namespace QInstaller diff --git a/src/s40/installerbasecommons.cpp b/src/s40/installerbasecommons.cpp index 3440fd1ca..debc71656 100644 --- a/src/s40/installerbasecommons.cpp +++ b/src/s40/installerbasecommons.cpp @@ -501,7 +501,6 @@ MaintenanceGui::MaintenanceGui(PackageManagerCore *core) : PackageManagerGui(core, 0) { setPage(PackageManagerCore::Introduction + 1, new ComponentViewPage(core)); - setPage(PackageManagerCore::ComponentSelection, new ComponentSelectionPage(core)); setPage(PackageManagerCore::LicenseCheck, new LicenseAgreementPage(core)); setPage(PackageManagerCore::ReadyForInstallation, new ReadyForInstallationPage(core)); setPage(PackageManagerCore::PerformInstallation, new PerformInstallationPage(core)); |