Git commit ce715f9e501ab01984e08e39192176d188b74036 by Dimitrios T. Tanis. Committed on 29/10/2012 at 00:31. Pushed by tanis into branch 'kexi-wip-tanis'.
Show message when no database server drivers are found, when trying to create/open/import project. When trying to create/open/import a project that requires a database server driver, if none is found display a message informing about it and giving general instructions what to do. GUI: New warning messages added. M +36 -15 kexi/main/startup/KexiNewProjectAssistant.cpp M +2 -0 kexi/main/startup/KexiNewProjectAssistant.h M +53 -21 kexi/main/startup/KexiOpenProjectAssistant.cpp M +2 -0 kexi/main/startup/KexiOpenProjectAssistant.h M +37 -19 kexi/widget/KexiConnectionSelectorWidget.cpp M +2 -0 kexi/widget/KexiConnectionSelectorWidget.h http://commits.kde.org/calligra/ce715f9e501ab01984e08e39192176d188b74036 diff --git a/kexi/main/startup/KexiNewProjectAssistant.cpp b/kexi/main/startup/KexiNewProjectAssistant.cpp index 75efbc1..fc7d8d6 100644 --- a/kexi/main/startup/KexiNewProjectAssistant.cpp +++ b/kexi/main/startup/KexiNewProjectAssistant.cpp @@ -321,21 +321,42 @@ KexiProjectConnectionSelectionPage::KexiProjectConnectionSelectionPage(QWidget* { setBackButtonVisible(true); setNextButtonVisible(true); - - QVBoxLayout *lyr = new QVBoxLayout; - connSelector = new KexiConnectionSelectorWidget( - Kexi::connset(), - "kfiledialog:///OpenExistingOrCreateNewProject", - KAbstractFileWidget::Saving); - lyr->addWidget(connSelector); - connSelector->showAdvancedConn(); - connect(connSelector, SIGNAL(connectionItemExecuted(ConnectionDataLVItem*)), - this, SLOT(next())); - connSelector->layout()->setContentsMargins(0, 0, 0, 0); - connSelector->hideHelpers(); - connSelector->hideDescription(); - setContents(lyr); - setFocusWidget(connSelector->connectionsList()); + if (!((Kexi::driverManager().driverNames().length() > 1) && Kexi::driverManager().driverNames().contains("sqlite3"))) { + setDescription(QString()); + setNextButtonVisible(false); + + KexiContextMessage msg( + i18nc("Warning", "No database server drivers found.\n" + "In order to connect to a database server please check that you have at least one database driver installed.\n" + "\n" + "Search and install packages named like \"calligra-kexi-xxxx-driver\".\n" + "Please note that your package names could vary slightly according to the distribution you use." + )); + m_errorMessagePopup = new KexiContextMessageWidget(this, 0, 0, msg); + m_errorMessagePopup->setMessageType(KMessageWidget::Warning); + m_errorMessagePopup->setCalloutPointerDirection(KMessageWidget::NoPointer); + m_errorMessagePopup->setWordWrap(true); + m_errorMessagePopup->setClickClosesMessage(false); + // m_errorMessagePopup->resizeToContents(); + m_errorMessagePopup->KexiContextMessageWidget::setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + setContents(m_errorMessagePopup); + m_errorMessagePopup->animatedShow(); + } else { + QVBoxLayout *lyr = new QVBoxLayout; + connSelector = new KexiConnectionSelectorWidget( + Kexi::connset(), + "kfiledialog:///OpenExistingOrCreateNewProject", + KAbstractFileWidget::Saving); + lyr->addWidget(connSelector); + connSelector->showAdvancedConn(); + connect(connSelector, SIGNAL(connectionItemExecuted(ConnectionDataLVItem*)), + this, SLOT(next())); + connSelector->layout()->setContentsMargins(0, 0, 0, 0); + connSelector->hideHelpers(); + connSelector->hideDescription(); + setContents(lyr); + setFocusWidget(connSelector->connectionsList()); + } } KexiProjectConnectionSelectionPage::~KexiProjectConnectionSelectionPage() diff --git a/kexi/main/startup/KexiNewProjectAssistant.h b/kexi/main/startup/KexiNewProjectAssistant.h index af89ef2..d2de00e 100644 --- a/kexi/main/startup/KexiNewProjectAssistant.h +++ b/kexi/main/startup/KexiNewProjectAssistant.h @@ -108,6 +108,8 @@ public: virtual ~KexiProjectConnectionSelectionPage(); KexiConnectionSelectorWidget* connSelector; +private: + QPointer<KexiContextMessageWidget> m_errorMessagePopup; }; class KexiServerDBNamePage; diff --git a/kexi/main/startup/KexiOpenProjectAssistant.cpp b/kexi/main/startup/KexiOpenProjectAssistant.cpp index 6af1e01..55ee41a 100644 --- a/kexi/main/startup/KexiOpenProjectAssistant.cpp +++ b/kexi/main/startup/KexiOpenProjectAssistant.cpp @@ -70,6 +70,7 @@ KexiMainOpenProjectPage::KexiMainOpenProjectPage(QWidget* parent) setFocusWidget(tabWidget); setContents(tabWidget); + connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); // delayed opening: QTimer::singleShot(500, this, SLOT(init())); } @@ -82,27 +83,58 @@ void KexiMainOpenProjectPage::init() fileSelectorLayout->addWidget(fileSelector); fileSelector->show(); - // server-based: - QVBoxLayout* connSelectorLayout = new QVBoxLayout(m_connSelectorWidget); - connSelectorLayout->setContentsMargins(0, KDialog::marginHint() * 2, 0, 0); - QLabel* connSelectorLabel = new QLabel( - i18n("Select database server's connection with project you wish to open. " - "<p>Here you may also add, edit or remove connections " - "from the list.")); - connSelectorLayout->addWidget(connSelectorLabel); - connSelectorLayout->addSpacing(KDialog::marginHint()); - connSelector = new KexiConnectionSelectorWidget( - Kexi::connset(), - "kfiledialog:///OpenExistingOrCreateNewProject", - KAbstractFileWidget::Opening); - connSelectorLayout->addWidget(connSelector); - - connSelector->showAdvancedConn(); - connSelector->layout()->setContentsMargins(0, 0, 0, 0); - connSelector->hideHelpers(); - connSelector->hideDescription(); - connect(connSelector, SIGNAL(connectionItemExecuted(ConnectionDataLVItem*)), - this, SLOT(next())); +} + +void KexiMainOpenProjectPage::tabChanged(int index) +{ + if (index == 1){ + if (!((Kexi::driverManager().driverNames().length() > 1) && Kexi::driverManager().driverNames().contains("sqlite3"))) { + setNextButtonVisible(false); + setDescription(QString()); + + KexiContextMessage msg( + i18nc("Warning", "No database server drivers found.\n" + "In order to connect to a database server please check that you have at least one database driver installed.\n" + "\n" + "Search and install packages named like \"calligra-kexi-xxxx-driver\".\n" + "Please note that your package names could vary slightly according to the distribution you use." + )); + m_errorMessagePopup = new KexiContextMessageWidget(m_connSelectorWidget, 0, 0, msg); + m_errorMessagePopup->setMessageType(KMessageWidget::Warning); + m_errorMessagePopup->setCalloutPointerDirection(KMessageWidget::NoPointer); + m_errorMessagePopup->setWordWrap(true); + m_errorMessagePopup->setClickClosesMessage(false); + m_errorMessagePopup->KexiContextMessageWidget::setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + setContents(m_errorMessagePopup); + m_errorMessagePopup->animatedShow(); + } else { + // server-based: + QVBoxLayout* connSelectorLayout = new QVBoxLayout(m_connSelectorWidget); + connSelectorLayout->setContentsMargins(0, KDialog::marginHint() * 2, 0, 0); + QLabel* connSelectorLabel = new QLabel( + i18n("Select database server's connection with project you wish to open. " + "<p>Here you may also add, edit or remove connections " + "from the list.")); + connSelectorLayout->addWidget(connSelectorLabel); + connSelectorLayout->addSpacing(KDialog::marginHint()); + connSelector = new KexiConnectionSelectorWidget( + Kexi::connset(), + "kfiledialog:///OpenExistingOrCreateNewProject", + KAbstractFileWidget::Opening); + connSelectorLayout->addWidget(connSelector); + + connSelector->showAdvancedConn(); + connSelector->layout()->setContentsMargins(0, 0, 0, 0); + connSelector->hideHelpers(); + connSelector->hideDescription(); + connect(connSelector, SIGNAL(connectionItemExecuted(ConnectionDataLVItem*)), + this, SLOT(next())); + } + } else { + if (m_errorMessagePopup) { + m_errorMessagePopup->close(); + } + } } KexiMainOpenProjectPage::~KexiMainOpenProjectPage() diff --git a/kexi/main/startup/KexiOpenProjectAssistant.h b/kexi/main/startup/KexiOpenProjectAssistant.h index 595b0bb..99fdb73 100644 --- a/kexi/main/startup/KexiOpenProjectAssistant.h +++ b/kexi/main/startup/KexiOpenProjectAssistant.h @@ -48,9 +48,11 @@ public: KexiConnectionSelectorWidget* connSelector; private slots: void init(); + void tabChanged(int index); private: QWidget* m_fileSelectorWidget; QWidget* m_connSelectorWidget; + QPointer<KexiContextMessageWidget> m_errorMessagePopup; }; //! A page for selecting existing server database project diff --git a/kexi/widget/KexiConnectionSelectorWidget.cpp b/kexi/widget/KexiConnectionSelectorWidget.cpp index fd5c414..b91c24f 100644 --- a/kexi/widget/KexiConnectionSelectorWidget.cpp +++ b/kexi/widget/KexiConnectionSelectorWidget.cpp @@ -204,25 +204,43 @@ void KexiConnectionSelectorWidget::slotPrjTypeSelected(int id) if (id == 1) {//file-based prj type showSimpleConn(); } else if (id == 2) {//server-based prj type - if (!d->conn_sel_shown) { - d->conn_sel_shown = true; - - //show connections (on demand): - foreach(KexiDB::ConnectionData* connData, d->conn_set->list()) { - addConnectionData(connData); - // else { - //this error should be more verbose: - // kWarning() << "no driver found for '" << it.current()->driverName << "'!"; - // } - } - if (d->remote->list->topLevelItemCount() > 0) { - d->remote->list->topLevelItem(0)->setSelected(true); - } - d->remote->descGroupBox->layout()->setMargin(2); - d->remote->list->setFocus(); - slotConnectionSelectionChanged(); - } - d->stack->setCurrentWidget(d->remote); + if (!((Kexi::driverManager().driverNames().length() > 1) && Kexi::driverManager().driverNames().contains("sqlite3"))) { + KexiContextMessage msg( + i18nc("Warning", "No database server drivers found.\n" + "In order to connect to a database server please check that you have at least one database driver installed.\n" + "\n" + "Search and install packages named like \"calligra-kexi-xxxx-driver\".\n" + "Please note that your package names could vary slightly according to the distribution you use." + )); + m_errorMessagePopup = new KexiContextMessageWidget(d->stack, 0, 0, msg); + m_errorMessagePopup->setMessageType(KMessageWidget::Warning); + m_errorMessagePopup->setCalloutPointerDirection(KMessageWidget::NoPointer); + m_errorMessagePopup->setWordWrap(true); + m_errorMessagePopup->setClickClosesMessage(false); + m_errorMessagePopup->KexiContextMessageWidget::setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + d->stack->addWidget(m_errorMessagePopup); + d->stack->setCurrentWidget(m_errorMessagePopup); + m_errorMessagePopup->animatedShow(); + } else { + if (!d->conn_sel_shown) { + d->conn_sel_shown = true; + //show connections (on demand): + foreach(KexiDB::ConnectionData* connData, d->conn_set->list()) { + addConnectionData(connData); + // else { + //this error should be more verbose: + // kWarning() << "no driver found for '" << it.current()->driverName << "'!"; + // } + } + if (d->remote->list->topLevelItemCount() > 0) { + d->remote->list->topLevelItem(0)->setSelected(true); + } + d->remote->descGroupBox->layout()->setMargin(2); + d->remote->list->setFocus(); + slotConnectionSelectionChanged(); + } + d->stack->setCurrentWidget(d->remote); + } } } diff --git a/kexi/widget/KexiConnectionSelectorWidget.h b/kexi/widget/KexiConnectionSelectorWidget.h index 43bd7cc..ed65628 100644 --- a/kexi/widget/KexiConnectionSelectorWidget.h +++ b/kexi/widget/KexiConnectionSelectorWidget.h @@ -22,6 +22,7 @@ #include <kexidbconnectionset.h> #include <db/driver.h> +#include <kexiutils/KexiContextMessage.h> #include <KDialog> #include <kabstractfilewidget.h> @@ -144,6 +145,7 @@ protected slots: private: ConnectionDataLVItem* addConnectionData(KexiDB::ConnectionData* data); ConnectionDataLVItem* selectedConnectionDataItem() const; + QPointer<KexiContextMessageWidget> m_errorMessagePopup; class Private; Private * const d;
