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;

Reply via email to