From: <ibr...@us...> - 2013-08-22 07:37:01
|
Revision: 4777 http://sourceforge.net/p/tora/code/4777 Author: ibre5041 Date: 2013-08-22 07:36:58 +0000 (Thu, 22 Aug 2013) Log Message: ----------- Show busy cursor while waiting for query cancel Modified Paths: -------------- trunk/tora/src/core/toeventquery.cpp trunk/tora/src/core/tomain.cpp trunk/tora/src/core/tomain.h trunk/tora/src/core/utils.cpp trunk/tora/src/core/utils.h Modified: trunk/tora/src/core/toeventquery.cpp =================================================================== --- trunk/tora/src/core/toeventquery.cpp 2013-08-21 12:58:11 UTC (rev 4776) +++ trunk/tora/src/core/toeventquery.cpp 2013-08-22 07:36:58 UTC (rev 4777) @@ -228,6 +228,7 @@ if(Thread && Thread->isRunning()) { + Utils::toBusy busy; TLOG(7, toDecorator, __HERE__) << "toEventQuery stop Thread is running" << std::endl; CancelCondition->Mutex.lock(); emit stopRequested(); Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-08-21 12:58:11 UTC (rev 4776) +++ trunk/tora/src/core/tomain.cpp 2013-08-22 07:36:58 UTC (rev 4777) @@ -1174,18 +1174,6 @@ toConnectionRegistrySing::Instance().changeConnection(description); } -void toMain::showBusy() -{ - qApp->setOverrideCursor(Qt::WaitCursor); -} - - -void toMain::removeBusy() -{ - qApp->restoreOverrideCursor(); -} - - void toMain::editOpenFile(const QString &file) { toWorksheet *sheet = 0; Modified: trunk/tora/src/core/tomain.h =================================================================== --- trunk/tora/src/core/tomain.h 2013-08-21 12:58:11 UTC (rev 4776) +++ trunk/tora/src/core/tomain.h 2013-08-22 07:36:58 UTC (rev 4777) @@ -201,22 +201,6 @@ void changeConnection(QString description); - /** - * Show a busy cursor or other indicators. Must be called from the - * main thread. - * - * class toBusy calls this method. - */ - void showBusy(void); - - /** - * Remove busy cursor or other indicators. Must be called from the - * main thread. - * - * class toBusy calls this method. - */ - void removeBusy(void); - /** Open a file in sql worksheet */ void editOpenFile(const QString &file); Modified: trunk/tora/src/core/utils.cpp =================================================================== --- trunk/tora/src/core/utils.cpp 2013-08-21 12:58:11 UTC (rev 4776) +++ trunk/tora/src/core/utils.cpp 2013-08-22 07:36:58 UTC (rev 4777) @@ -794,23 +794,20 @@ return ret; } -toBusy::toBusy(bool busy) +toBusy::toBusy() { - Busy = busy; - if (busy) - QMetaObject::invokeMethod(toMainWindow::lookup(), - "showBusy", - Qt::QueuedConnection); + if (m_busyCount.fetchAndAddAcquire(1) == 0) + qApp->setOverrideCursor(Qt::WaitCursor); } toBusy::~toBusy() { - if (Busy) - QMetaObject::invokeMethod(toMainWindow::lookup(), - "removeBusy", - Qt::QueuedConnection); + if (m_busyCount.deref() == false) + qApp->restoreOverrideCursor(); } +QAtomicInt toBusy::m_busyCount(0); + QToolBar *toAllocBar(QWidget *parent, const QString &str) { QString db; Modified: trunk/tora/src/core/utils.h =================================================================== --- trunk/tora/src/core/utils.h 2013-08-21 12:58:11 UTC (rev 4776) +++ trunk/tora/src/core/utils.h 2013-08-22 07:36:58 UTC (rev 4777) @@ -44,12 +44,13 @@ #include "core/tora_export.h" +#include <QtCore/QAtomicInt> #include <QtCore/QString> #include <QtCore/QThread> -#include <QtGui/QMainWindow> #include <QtCore/QFile> #include <QtCore/QFileInfo> #include <QtGui/QMessageBox> +#include <QtGui/QMainWindow> #ifdef Q_OS_WIN32 #define NOMINMAX @@ -283,18 +284,18 @@ /** Whenever this class is instantiated the window will display a busy cursor. You * can instantiate this function as many times as you want, only when all of them are -* destructed the curser will revert back to normal. +* destructed the cursor will revert back to normal. * If you want to control if busy cursor is actually shown for a particular case, you * can use a boolean parameter in constructor. For example debugger is setting this as * false in order for cursor NOT to be busy until program unit being debugged finishes. */ class toBusy { -private: - bool Busy; public: - toBusy(bool busy = true); + toBusy(); ~toBusy(); +private: + static QAtomicInt m_busyCount; }; /** Display a message in the statusbar of the main window. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-22 16:12:53
|
Revision: 4780 http://sourceforge.net/p/tora/code/4780 Author: ibre5041 Date: 2013-08-22 16:12:45 +0000 (Thu, 22 Aug 2013) Log Message: ----------- Windows list menu fields Modified Paths: -------------- trunk/tora/src/core/tomain.cpp trunk/tora/src/core/totool.cpp trunk/tora/src/core/totool.h Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-08-22 15:36:48 UTC (rev 4779) +++ trunk/tora/src/core/tomain.cpp 2013-08-22 16:12:45 UTC (rev 4780) @@ -625,14 +625,14 @@ //windowsMenu->addSeparator(); //windowsMenu->addSeparator(); - //QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); - // int index = 0; - // Q_FOREACH(toToolWidget *tool, tools) - // { - // QAction *action = new QAction(tool->windowTitle(), tool); - // windowsMenu->addAction(action); - // action->setCheckable(true); - // } + QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); + int index = 0; + Q_FOREACH(toToolWidget *tool, tools) + { + QAction *action = tool->activationAction(); + windowsMenu->addAction(action); + action->setCheckable(true); + } // QList<QMdiSubWindow *> list = workspace()->subWindowList(); @@ -676,6 +676,7 @@ // if (widget) // widget->close(); } else { + QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); //QMdiSubWindow *w = dynamic_cast<QMdiSubWindow *>(action->parentWidget()); //if(w) { Modified: trunk/tora/src/core/totool.cpp =================================================================== --- trunk/tora/src/core/totool.cpp 2013-08-22 15:36:48 UTC (rev 4779) +++ trunk/tora/src/core/totool.cpp 2013-08-22 16:12:45 UTC (rev 4780) @@ -57,6 +57,7 @@ #include <QtGui/QToolBar> #include <QtGui/QMenu> #include <QtGui/QBoxLayout> +#include <QtGui/QAction> // A little magic to get lrefresh to work and get a check on qApp #undef QT_TRANSLATE_NOOP @@ -111,7 +112,8 @@ : QWidget(parent), toHelpContext(ctx), toConnectionWidget(conn, this), - Tool(tool) + Tool(tool), + Action(NULL) { if (name) { @@ -195,6 +197,15 @@ return Timer; } +QAction *toToolWidget::activationAction() +{ + if (Action == NULL) + { + Action = new QAction(windowIcon(), windowTitle(), this); + } + return Action; +} + #ifdef TORA3_SESSION void toToolWidget::exportData(std::map<QString, QString> &data, const QString &prefix) { @@ -259,6 +270,7 @@ if(this->windowTitle() != title) { this->setWindowTitle(title); + activationAction()->setText(title); emit toolCaptionChanged(); } } Modified: trunk/tora/src/core/totool.h =================================================================== --- trunk/tora/src/core/totool.h 2013-08-22 15:36:48 UTC (rev 4779) +++ trunk/tora/src/core/totool.h 2013-08-22 16:12:45 UTC (rev 4780) @@ -53,6 +53,7 @@ class QAction; class QFocusEvent; class QPaintEvent; +class QAction; class toConnection; class toTimer; @@ -376,6 +377,8 @@ */ toTimer *timer(void); + QAction *activationAction(); + #ifdef TORA3_GRAPH /** Export data to a map. * @param data A map that can be used to recreate the data of a chart. @@ -413,6 +416,7 @@ private: toTimer *Timer; toTool &Tool; + QAction *Action; }; /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-22 18:57:42
|
Revision: 4781 http://sourceforge.net/p/tora/code/4781 Author: ibre5041 Date: 2013-08-22 18:57:34 +0000 (Thu, 22 Aug 2013) Log Message: ----------- tool windows switching Modified Paths: -------------- trunk/tora/src/core/tomain.cpp trunk/tora/src/core/totool.cpp trunk/tora/src/core/totool.h trunk/tora/src/core/toworkspace.cpp trunk/tora/src/core/toworkspace.h Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-08-22 16:12:45 UTC (rev 4780) +++ trunk/tora/src/core/tomain.cpp 2013-08-22 18:57:34 UTC (rev 4781) @@ -135,10 +135,6 @@ } connect(&Poll, SIGNAL(timeout()), this, SLOT(checkCaching())); - // connect(toMainWidget()->workspace(), - // SIGNAL(subWindowActivated(QMdiSubWindow *)), - // this, - // SLOT(windowActivated(QMdiSubWindow *))); // Connect this "main" window to global events dispatcher connect(&toGlobalEventSingle::Instance(), SIGNAL(s_addRecentFile(QString const&)), @@ -626,35 +622,19 @@ //windowsMenu->addSeparator(); QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); - int index = 0; - Q_FOREACH(toToolWidget *tool, tools) - { - QAction *action = tool->activationAction(); - windowsMenu->addAction(action); - action->setCheckable(true); - } - - // QList<QMdiSubWindow *> list = workspace()->subWindowList(); - - // for (QList<QMdiSubWindow *>::iterator it = list.begin(); it != list.end(); it++, index++) - // { - // if (!(*it)->isHidden()) - // { - // QString caption = (*it)->windowTitle().trimmed(); - - // if (index < 9) - // caption = "&" + QString::number(index + 1) + " " + caption; - - // QAction *action = new QAction(caption, (*it)); - // if (index < 9) - // action->setShortcut(Qt::CTRL + Qt::Key_1 + index); - - // windowsMenu->addAction(action); - // action->setCheckable(true); - // if ((*it) == LastActiveWindow) - // action->setChecked(true); - // } - // } + toToolWidget *currentTool = toWorkSpaceSingle::Instance().currentTool(); + int index = 0; + Q_FOREACH(toToolWidget *tool, tools) + { + QAction *action = tool->activationAction(); + windowsMenu->addAction(action); + action->setChecked(tool == currentTool); + // if (index < 9) + // caption = "&" + QString::number(index + 1) + " " + caption; + // QAction *action = new QAction(caption, (*it)); + // if (index < 9) + // action->setShortcut(Qt::CTRL + Qt::Key_1 + index); + } } @@ -672,22 +652,13 @@ // // !workspace()->subWindowList().at(0)->close()) // // return; } else if (action == windowCloseAct) { -// QWidget *widget = LastActiveWindow; + toToolWidget *currentTool = toWorkSpaceSingle::Instance().currentTool(); // if (widget) // widget->close(); } else { - QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); - //QMdiSubWindow *w = dynamic_cast<QMdiSubWindow *>(action->parentWidget()); - //if(w) - { - // workspace()->setActiveSubWindow(w); - // w->raise(); - // if(w->widget()) - // w->widget()->setFocus(); - // // piece of shit mdi doesn't always send window activated - // // signal - // windowActivated(w); - } + toToolWidget *requestedTool = dynamic_cast<toToolWidget*>(action->parent()); + Q_ASSERT_X(requestedTool, qPrintable(__QHERE__), "QAction - invalid parent"); + toWorkSpaceSingle::Instance().setCurrentTool(requestedTool); } } Modified: trunk/tora/src/core/totool.cpp =================================================================== --- trunk/tora/src/core/totool.cpp 2013-08-22 16:12:45 UTC (rev 4780) +++ trunk/tora/src/core/totool.cpp 2013-08-22 18:57:34 UTC (rev 4781) @@ -201,7 +201,8 @@ { if (Action == NULL) { - Action = new QAction(windowIcon(), windowTitle(), this); + Action = new QAction(QIcon(Tool.pictureXPM()), windowTitle(), this); + Action->setCheckable(true); } return Action; } Modified: trunk/tora/src/core/totool.h =================================================================== --- trunk/tora/src/core/totool.h 2013-08-22 16:12:45 UTC (rev 4780) +++ trunk/tora/src/core/totool.h 2013-08-22 18:57:34 UTC (rev 4781) @@ -107,6 +107,7 @@ Q_OBJECT; friend class toWorkSpace; friend class toToolsRegistry; + friend class toToolWidget; public: /** * Get the name. Modified: trunk/tora/src/core/toworkspace.cpp =================================================================== --- trunk/tora/src/core/toworkspace.cpp 2013-08-22 16:12:45 UTC (rev 4780) +++ trunk/tora/src/core/toworkspace.cpp 2013-08-22 18:57:34 UTC (rev 4781) @@ -202,7 +202,8 @@ //m_tabBar->setTabIcon(index, tool->windowIcon()); } -QList<toToolWidget*> toWorkSpace::toolWindowList() { +QList<toToolWidget*> toWorkSpace::toolWindowList() const +{ QList<toToolWidget*> retval; for(int idx = 0; idx < m_tabBar->count(); idx++) { @@ -212,3 +213,42 @@ } return retval; } + +toToolWidget* toWorkSpace::currentTool() const +{ + int idx = m_tabBar->currentIndex(); + if (idx == -1) + return NULL; + toToolWidget *w = dynamic_cast<toToolWidget*>(m_tabBar->tabData(idx).value<QWidget*>()); + return w; +} + +void toWorkSpace::setCurrentTool(toToolWidget* tool) +{ + Q_ASSERT_X(tool != NULL, qPrintable(__QHERE__), "Tool widget == NULL"); + int idx = -1; + for(int i = 0; i < m_tabBar->count(); i++) + { + toToolWidget *w = dynamic_cast<toToolWidget*>(m_tabBar->tabData(i).value<QWidget*>()); + if(tool == w) + { + idx = i; + } + } + if (idx == -1) + return; + + ToolIndex i = m_toolsRegistry.value(tool); + if(i.TabBarIndex != idx) // Some tool was closed and numerical indexes were shifted + { + i.TabBarIndex = idx; + i.WidgetIndex = m_stackedWidget->indexOf(tool); + m_toolsRegistry.insert(tool, i); + } + + m_lastWidget = tool; + int WidgetIndex = m_toolsRegistry.value(tool).WidgetIndex; + m_stackedWidget->setCurrentWidget(m_lastWidget); + m_tabBar->setCurrentIndex(idx); + emit activeToolChaged(tool); // => toTool::slotWindowActivated +} Modified: trunk/tora/src/core/toworkspace.h =================================================================== --- trunk/tora/src/core/toworkspace.h 2013-08-22 16:12:45 UTC (rev 4780) +++ trunk/tora/src/core/toworkspace.h 2013-08-22 18:57:34 UTC (rev 4781) @@ -72,7 +72,12 @@ void addToolWidget(toToolWidget*); - QList<toToolWidget*> toolWindowList(); + QList<toToolWidget*> toolWindowList() const; + + toToolWidget* currentTool() const; + + void setCurrentTool(toToolWidget*); + signals: void activeToolChaged(toToolWidget*); private slots: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-22 20:50:36
|
Revision: 4782 http://sourceforge.net/p/tora/code/4782 Author: ibre5041 Date: 2013-08-22 20:50:31 +0000 (Thu, 22 Aug 2013) Log Message: ----------- Modified Paths: -------------- trunk/tora/src/core/tomain.cpp trunk/tora/src/core/toworkspace.cpp trunk/tora/src/core/toworkspace.h Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-08-22 18:57:34 UTC (rev 4781) +++ trunk/tora/src/core/tomain.cpp 2013-08-22 20:50:31 UTC (rev 4782) @@ -612,16 +612,14 @@ // i'm lazy and this beats the hell out of tracking all the // windowsMenu actions and adding/removing each. windowsMenu->clear(); - //QList<QString> list = toWorkSpaceSingle::Instance().toolWindowList(); - //windowCloseAct->setDisabled(list.empty()); - //windowCloseAllAct->setDisabled(list.empty()); + QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); + windowCloseAct->setDisabled(tools.empty()); + windowCloseAllAct->setDisabled(tools.empty()); - //windowsMenu->addAction(windowCloseAct); - //windowsMenu->addAction(windowCloseAllAct); - //windowsMenu->addSeparator(); - //windowsMenu->addSeparator(); + windowsMenu->addAction(windowCloseAct); + windowsMenu->addAction(windowCloseAllAct); + windowsMenu->addSeparator(); - QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); toToolWidget *currentTool = toWorkSpaceSingle::Instance().currentTool(); int index = 0; Q_FOREACH(toToolWidget *tool, tools) @@ -629,11 +627,12 @@ QAction *action = tool->activationAction(); windowsMenu->addAction(action); action->setChecked(tool == currentTool); - // if (index < 9) - // caption = "&" + QString::number(index + 1) + " " + caption; - // QAction *action = new QAction(caption, (*it)); - // if (index < 9) - // action->setShortcut(Qt::CTRL + Qt::Key_1 + index); + if (index < 9) + { + action->setText( QString("&") + QString::number(index + 1) + QString(" ") + tool->windowTitle()); + //caption = "&" + QString::number(index + 1) + " " + caption; + action->setShortcut(Qt::CTRL + Qt::Key_1 + index++); + } } } @@ -646,15 +645,10 @@ if (action == windowCloseAllAct) { -// // while (workspace()->subWindowList().count() > 0 && -// // workspace()->subWindowList().at(0)) -// // if (workspace()->subWindowList().at(0) && -// // !workspace()->subWindowList().at(0)->close()) -// // return; + toWorkSpaceSingle::Instance().closeAllToolWidgets(); } else if (action == windowCloseAct) { toToolWidget *currentTool = toWorkSpaceSingle::Instance().currentTool(); -// if (widget) -// widget->close(); + toWorkSpaceSingle::Instance().closeToolWidget(currentTool); } else { toToolWidget *requestedTool = dynamic_cast<toToolWidget*>(action->parent()); Q_ASSERT_X(requestedTool, qPrintable(__QHERE__), "QAction - invalid parent"); Modified: trunk/tora/src/core/toworkspace.cpp =================================================================== --- trunk/tora/src/core/toworkspace.cpp 2013-08-22 18:57:34 UTC (rev 4781) +++ trunk/tora/src/core/toworkspace.cpp 2013-08-22 20:50:31 UTC (rev 4782) @@ -233,6 +233,7 @@ if(tool == w) { idx = i; + break; } } if (idx == -1) @@ -252,3 +253,34 @@ m_tabBar->setCurrentIndex(idx); emit activeToolChaged(tool); // => toTool::slotWindowActivated } + +void toWorkSpace::closeToolWidget(toToolWidget* tool) +{ + Q_ASSERT_X(tool != NULL, qPrintable(__QHERE__), "Tool widget == NULL"); + int idx = -1; + for(int i = 0; i < m_tabBar->count(); i++) + { + toToolWidget *w = dynamic_cast<toToolWidget*>(m_tabBar->tabData(i).value<QWidget*>()); + if(tool == w) + { + idx = i; + break; + } + } + if (idx == -1) + return; + ToolIndex i = m_toolsRegistry.value(tool); + m_tabBar->setCurrentIndex(idx); // show tab before showing Save dialog + if(tool->close()) + { + m_stackedWidget->removeWidget(tool); + m_tabBar->removeTab(idx); + delete tool; + m_label->setText(QString("*%1").arg(idx)); + m_lastWidget = NULL; + } +} + +void toWorkSpace::closeAllToolWidgets() +{ +} Modified: trunk/tora/src/core/toworkspace.h =================================================================== --- trunk/tora/src/core/toworkspace.h 2013-08-22 18:57:34 UTC (rev 4781) +++ trunk/tora/src/core/toworkspace.h 2013-08-22 20:50:31 UTC (rev 4782) @@ -72,6 +72,10 @@ void addToolWidget(toToolWidget*); + void closeToolWidget(toToolWidget*); + + void closeAllToolWidgets(); + QList<toToolWidget*> toolWindowList() const; toToolWidget* currentTool() const; @@ -85,6 +89,7 @@ void slotTabMoved(int from, int to); void slotTabCloseRequested(int); void slotToolCaptionChanged(QWidget*); + private: QTabBar *m_tabBar; QLabel *m_label; // TODO DEBUG ONLY This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-23 10:59:45
|
Revision: 4783 http://sourceforge.net/p/tora/code/4783 Author: ibre5041 Date: 2013-08-23 10:59:38 +0000 (Fri, 23 Aug 2013) Log Message: ----------- Main window application close fixes. Modified Paths: -------------- trunk/tora/src/core/toconnectionregistry.cpp trunk/tora/src/core/toconnectionregistry.h trunk/tora/src/core/tomain.cpp trunk/tora/src/core/toworkspace.cpp trunk/tora/src/core/toworkspace.h trunk/tora/src/core/utils.cpp trunk/tora/src/core/utils.h Modified: trunk/tora/src/core/toconnectionregistry.cpp =================================================================== --- trunk/tora/src/core/toconnectionregistry.cpp 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/toconnectionregistry.cpp 2013-08-23 10:59:38 UTC (rev 4783) @@ -45,6 +45,12 @@ #include <QtGui/QAction> +toConnectionRegistry::~toConnectionRegistry() +{ + Utils::toBusy::m_enabled = false; + int size = m_ConnectionsList.size(); +} + bool toConnectionRegistry::isEmpty() const { return m_ConnectionsList.empty(); @@ -57,8 +63,10 @@ void toConnectionRegistry::changeConnection(QString description) { - if( m_ConnectionsMap.contains(description)) + if (description.isEmpty()) // All connections were closed m_currentConnectionDescription = description; + else if( m_ConnectionsMap.contains(description)) + m_currentConnectionDescription = description; else throw QString("Unregistered connection(change): %1").arg(description); } @@ -96,13 +104,14 @@ if(descriptions.size() != 1 || !m_ConnectionsList.contains(conn)) { conn->setParent(this); - delete conn; throw QString("Unregistered connection: %1").arg(description); } + delete conn; int pos = m_ConnectionsList.indexOf(conn); beginRemoveRows(QModelIndex(), pos, pos); - m_ConnectionsMap.remove(descriptions.at(0)); + int mRemoved = m_ConnectionsMap.remove(descriptions.at(0)); + //int lRemoved = m_ConnectionsList.removeAt(pos); endRemoveRows(); } Modified: trunk/tora/src/core/toconnectionregistry.h =================================================================== --- trunk/tora/src/core/toconnectionregistry.h 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/toconnectionregistry.h 2013-08-23 10:59:38 UTC (rev 4783) @@ -56,6 +56,7 @@ Q_OBJECT; public: toConnectionRegistry() {}; + ~toConnectionRegistry(); bool isEmpty() const; Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/tomain.cpp 2013-08-23 10:59:38 UTC (rev 4783) @@ -1029,6 +1029,13 @@ void toMain::closeEvent(QCloseEvent *event) { + toWorkSpaceSingle::Instance().closeAllToolWidgets(); + if ( toWorkSpaceSingle::Instance().currentTool() != NULL) // at least one tool window refused to be closed + { + event->ignore(); // stop widget refused + return; + } + while (!Connections.isEmpty()) { if (!delCurrentConnection()) @@ -1038,12 +1045,6 @@ } } - // Workspace->closeAllSubWindows(); - // if (Workspace->currentSubWindow() != 0) - // { - // event->ignore(); // stop widget refused - // return; - // } #ifdef TORA3_SESSION std::map<QString, QString> session; exportData(session, "TOra"); Modified: trunk/tora/src/core/toworkspace.cpp =================================================================== --- trunk/tora/src/core/toworkspace.cpp 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/toworkspace.cpp 2013-08-23 10:59:38 UTC (rev 4783) @@ -254,7 +254,7 @@ emit activeToolChaged(tool); // => toTool::slotWindowActivated } -void toWorkSpace::closeToolWidget(toToolWidget* tool) +bool toWorkSpace::closeToolWidget(toToolWidget* tool) { Q_ASSERT_X(tool != NULL, qPrintable(__QHERE__), "Tool widget == NULL"); int idx = -1; @@ -267,8 +267,8 @@ break; } } - if (idx == -1) - return; + Q_ASSERT_X(idx != -1, qPrintable(__QHERE__), "Unknown Tool widget to close"); + ToolIndex i = m_toolsRegistry.value(tool); m_tabBar->setCurrentIndex(idx); // show tab before showing Save dialog if(tool->close()) @@ -278,9 +278,19 @@ delete tool; m_label->setText(QString("*%1").arg(idx)); m_lastWidget = NULL; + return true; } + return false; } void toWorkSpace::closeAllToolWidgets() { + // 1st close the current tool window + toToolWidget *tool; + while ((tool = currentTool()) != NULL) + { + if (closeToolWidget(tool)) + continue; + break; + } } Modified: trunk/tora/src/core/toworkspace.h =================================================================== --- trunk/tora/src/core/toworkspace.h 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/toworkspace.h 2013-08-23 10:59:38 UTC (rev 4783) @@ -72,7 +72,7 @@ void addToolWidget(toToolWidget*); - void closeToolWidget(toToolWidget*); + bool closeToolWidget(toToolWidget*); void closeAllToolWidgets(); Modified: trunk/tora/src/core/utils.cpp =================================================================== --- trunk/tora/src/core/utils.cpp 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/utils.cpp 2013-08-23 10:59:38 UTC (rev 4783) @@ -796,7 +796,7 @@ toBusy::toBusy() { - if (m_busyCount.fetchAndAddAcquire(1) == 0) + if (m_busyCount.fetchAndAddAcquire(1) == 0 && m_enabled) qApp->setOverrideCursor(Qt::WaitCursor); } @@ -806,6 +806,7 @@ qApp->restoreOverrideCursor(); } +bool toBusy::m_enabled(true); QAtomicInt toBusy::m_busyCount(0); QToolBar *toAllocBar(QWidget *parent, const QString &str) Modified: trunk/tora/src/core/utils.h =================================================================== --- trunk/tora/src/core/utils.h 2013-08-22 20:50:31 UTC (rev 4782) +++ trunk/tora/src/core/utils.h 2013-08-23 10:59:38 UTC (rev 4783) @@ -291,9 +291,12 @@ */ class toBusy { + friend class toConnectionRegistry; public: toBusy(); ~toBusy(); +protected: + static bool m_enabled; // disabled when main application window is already closed private: static QAtomicInt m_busyCount; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-27 17:39:23
|
Revision: 4797 http://sourceforge.net/p/tora/code/4797 Author: ibre5041 Date: 2013-08-27 17:39:18 +0000 (Tue, 27 Aug 2013) Log Message: ----------- - Tab switching fixed (update QAction shortcuts when tool was removed or moved) Modified Paths: -------------- trunk/tora/src/core/toglobalevent.cpp trunk/tora/src/core/toglobalevent.h trunk/tora/src/core/tomain.cpp trunk/tora/src/core/toworkspace.cpp Modified: trunk/tora/src/core/toglobalevent.cpp =================================================================== --- trunk/tora/src/core/toglobalevent.cpp 2013-08-27 17:27:35 UTC (rev 4796) +++ trunk/tora/src/core/toglobalevent.cpp 2013-08-27 17:39:18 UTC (rev 4797) @@ -78,6 +78,11 @@ emit s_toolWidgetRemoved(tool); } +void toGlobalEvent::toolWidgetsReordered() +{ + emit s_toolWidgetsReordered(); +} + void toGlobalEvent::setCoordinates(int x, int y) { emit s_setCoordinates(x, y); Modified: trunk/tora/src/core/toglobalevent.h =================================================================== --- trunk/tora/src/core/toglobalevent.h 2013-08-27 17:27:35 UTC (rev 4796) +++ trunk/tora/src/core/toglobalevent.h 2013-08-27 17:39:18 UTC (rev 4797) @@ -92,10 +92,12 @@ void toolWidgetAdded(toToolWidget *tool); /** Called by @ref toToolWidget when a new tool is about to be destroyed. - * @param tool The tool widget created. + * @param tool The tool widget. */ void toolWidgetRemoved(toToolWidget *tool); + void toolWidgetsReordered(); + /** * Set coordinates in the statusbar. * @@ -139,6 +141,7 @@ void s_addCustomMenu(QMenu *menu); void s_toolWidgetAdded(toToolWidget *tool); void s_toolWidgetRemoved(toToolWidget *tool); + void s_toolWidgetsReordered(); void s_setCoordinates(int x, int y); void s_createDefaultTool(void); void s_showMessage(QString str, bool save, bool log); Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-08-27 17:27:35 UTC (rev 4796) +++ trunk/tora/src/core/tomain.cpp 2013-08-27 17:39:18 UTC (rev 4797) @@ -388,6 +388,8 @@ this, SLOT(updateWindowsMenu())); connect(&toGlobalEventSingle::Instance(), SIGNAL(s_toolWidgetRemoved(toToolWidget*)), this, SLOT(updateWindowsMenu())); + connect(&toGlobalEventSingle::Instance(), SIGNAL(s_toolWidgetsReordered()), + this, SLOT(updateWindowsMenu())); connect(windowsMenu, SIGNAL(triggered(QAction *)), Modified: trunk/tora/src/core/toworkspace.cpp =================================================================== --- trunk/tora/src/core/toworkspace.cpp 2013-08-27 17:27:35 UTC (rev 4796) +++ trunk/tora/src/core/toworkspace.cpp 2013-08-27 17:39:18 UTC (rev 4797) @@ -174,6 +174,7 @@ i.WidgetIndex = m_stackedWidget->indexOf(w); m_toolsRegistry.insert(w, i); } + toGlobalEventSingle::Instance().toolWidgetsReordered(); } void toWorkSpace::slotTabCloseRequested(int idx) @@ -193,6 +194,7 @@ delete w; m_label->setText(QString("*%1->%2").arg(idx).arg(m_tabBar->currentIndex())); + toGlobalEventSingle::Instance().toolWidgetRemoved(w); } } @@ -289,6 +291,8 @@ m_label->setText(QString("*%1").arg(idx)); m_lastWidget = NULL; + toGlobalEventSingle::Instance().toolWidgetRemoved(tool); + return true; } return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-27 17:58:25
|
Revision: 4798 http://sourceforge.net/p/tora/code/4798 Author: ibre5041 Date: 2013-08-27 17:58:20 +0000 (Tue, 27 Aug 2013) Log Message: ----------- toResultStats - query session SID only when needed. Performance improvement - it's still unpredictable anyway Modified Paths: -------------- trunk/tora/src/core/toresultstats.cpp trunk/tora/src/core/toresultstats.h Modified: trunk/tora/src/core/toresultstats.cpp =================================================================== --- trunk/tora/src/core/toresultstats.cpp 2013-08-27 17:39:18 UTC (rev 4797) +++ trunk/tora/src/core/toresultstats.cpp 2013-08-27 17:58:20 UTC (rev 4798) @@ -84,7 +84,7 @@ if (!handled()) return ; - SessionID = ses; + m_sessionID = ses; setSQLName(QString::fromLatin1("toResultStats")); System = false; setup(); @@ -95,21 +95,11 @@ , const char *name) : toResultView(false, false, parent, name) , OnlyChanged(onlyChanged) + , m_sessionID(-2) { if (!handled()) return ; - try - { - toConnectionSubLoan conn(connection()); - toQuery query(conn, SQLSession, toQueryParams()); - SessionID = query.readValue().toInt(); - } - catch (...) - { - TLOG(1, toDecorator, __HERE__) << " Ignored exception." << std::endl; - SessionID = -1; - } System = false; setup(); @@ -157,7 +147,7 @@ toConnectionSubLoan conn(connection()); toQueryParams args; if (!System) - args << SessionID; + args << sid(); toQuery query(conn, System ? SQLSystemStatistics : SQLStatistics, args); while (!query.eof()) { @@ -192,11 +182,11 @@ if (System) throw tr("Can't change session on system statistics"); - if (SessionID != ses) + if (m_sessionID != ses) { - SessionID = ses; - emit sessionChanged(SessionID); - emit sessionChanged(QString::number(SessionID)); + m_sessionID = ses; + emit sessionChanged(sid()); + emit sessionChanged(QString::number(sid())); resetStats(); } } @@ -213,7 +203,7 @@ toConnection &conn = connection(); toQueryParams args; if (!System) - args << SessionID; + args << sid(); Query = new toEventQuery(this , conn , toSQL::string(System ? SQLSystemStatisticName : SQLStatisticName, connection()) @@ -332,6 +322,25 @@ Qt::QueuedConnection); } +int toResultStats::sid() +{ + // TODO: this is non-sense here we store SID of randomly borrowed session + if (m_sessionID == -2) + try + { + toConnectionSubLoan conn(connection()); + toQuery query(conn, SQLSession, toQueryParams()); + m_sessionID = query.readValue().toInt(); + } + catch (...) + { + TLOG(1, toDecorator, __HERE__) << " Ignored exception." << std::endl; + m_sessionID = -1; + } + + return m_sessionID; +} + void toResultStats::addValue(bool reset, int id, const QString &name, double value) { QString delta; Modified: trunk/tora/src/core/toresultstats.h =================================================================== --- trunk/tora/src/core/toresultstats.h 2013-08-27 17:39:18 UTC (rev 4797) +++ trunk/tora/src/core/toresultstats.h 2013-08-27 17:58:20 UTC (rev 4798) @@ -129,13 +129,17 @@ /** Setup widget. */ void setup(); + + int sid(); + /** Add value */ void addValue(bool reset, int id, const QString &name, double value); /** Session ID to get statistics for. */ - int SessionID; + int m_sessionID; + /** Number of rows of statistics */ int Row; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-08-29 17:23:46
|
Revision: 4804 http://sourceforge.net/p/tora/code/4804 Author: ibre5041 Date: 2013-08-29 17:23:40 +0000 (Thu, 29 Aug 2013) Log Message: ----------- Unused methods removed Modified Paths: -------------- trunk/tora/src/core/toresultschema.cpp trunk/tora/src/core/toresultschema.h Modified: trunk/tora/src/core/toresultschema.cpp =================================================================== --- trunk/tora/src/core/toresultschema.cpp 2013-08-29 11:22:09 UTC (rev 4803) +++ trunk/tora/src/core/toresultschema.cpp 2013-08-29 17:23:40 UTC (rev 4804) @@ -103,50 +103,6 @@ } } -#define CHANGE_CURRENT_SCHEMA QString("ALTER SESSION SET CURRENT_SCHEMA = \"%1\"") -#define CHANGE_CURRENT_SCHEMA_PG QString("SET search_path TO %1,\"$user\",public") -#define CHANGE_CURRENT_SCHEMA_TD QString("DATABASE \"%1\"") - -void toResultSchema::update() -{ - update(toResultCombo::currentText()); -} - - -void toResultSchema::update(const QString &schema) -{ - if(schema.isEmpty()) - return; - - try - { - toConnection &conn = connection(); - - if (schema != conn.schema()) - { - if (conn.providerIs("Oracle")) - { - /* set the new one with selected schema */ - conn.setInit("SCHEMA", CHANGE_CURRENT_SCHEMA.arg(conn.user())); - } - else if (conn.providerIs("QMYSQL")) - { - conn.setInit("SCHEMA", QString("USE `%1`").arg(schema)); - } - else if (conn.providerIs("PostgreSQL")) - conn.setInit("SCHEMA", CHANGE_CURRENT_SCHEMA_PG.arg(schema)); - else if (conn.providerIs("Teradata")) - conn.setInit("SCHEMA", CHANGE_CURRENT_SCHEMA_TD.arg(schema)); - else - throw QString("No support for changing schema for this database"); - - conn.setSchema(schema); - } - } - TOCATCH; -} - - void toResultSchema::updateLastSchema(const QString &schema) { if (schema.isEmpty()) Modified: trunk/tora/src/core/toresultschema.h =================================================================== --- trunk/tora/src/core/toresultschema.h 2013-08-29 11:22:09 UTC (rev 4803) +++ trunk/tora/src/core/toresultschema.h 2013-08-29 17:23:40 UTC (rev 4804) @@ -74,20 +74,11 @@ virtual void query(const QString &sql, toQueryParams const& param); public slots: - /** - * Updates connections to use schema - */ - void update(const QString &schema); - - /** - * Update to currently selected schema - */ - void update(void); - virtual void refresh(void); private slots: // stores last schema selected in qsettings + // also set schema in toConnection void updateLastSchema(const QString &schema); // refreshes user list from connections cache, no query is executed This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-09-18 15:13:12
|
Revision: 4843 http://sourceforge.net/p/tora/code/4843 Author: ibre5041 Date: 2013-09-18 15:13:07 +0000 (Wed, 18 Sep 2013) Log Message: ----------- toConnection integrity checks and fixes toConnection.Widgets vs. toConnectionWidget Modified Paths: -------------- trunk/tora/src/core/tochangeconnection.cpp trunk/tora/src/core/toconnection.cpp trunk/tora/src/core/toconnection.h trunk/tora/src/core/toconnectionoptions.cpp trunk/tora/src/core/toconnectionoptions.h trunk/tora/src/core/totool.cpp trunk/tora/src/core/totool.h Modified: trunk/tora/src/core/tochangeconnection.cpp =================================================================== --- trunk/tora/src/core/tochangeconnection.cpp 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/tochangeconnection.cpp 2013-09-18 15:13:07 UTC (rev 4843) @@ -44,6 +44,7 @@ #include "core/toconnectionregistry.h" #include "core/tomainwindow.h" #include "core/totool.h" +#include "core/tologger.h" #include "core/utils.h" #include <QtGui/QMenu> Modified: trunk/tora/src/core/toconnection.cpp =================================================================== --- trunk/tora/src/core/toconnection.cpp 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/toconnection.cpp 2013-09-18 15:13:07 UTC (rev 4843) @@ -46,9 +46,12 @@ #include "core/tologger.h" #include "core/toconf.h" #include "core/tocache.h" +#include "core/toqvalue.h" +#include "core/toquery.h" #include "core/totool.h" #include "core/toconfiguration.h" #include "core/toconnectionprovider.h" +#include "core/toworkspace.h" #include <QtGui/QMenu> @@ -71,6 +74,7 @@ , NeedCommit(false) , Abort(false) , LoanCnt(0) + , ConnectionOptions(provider, host, database, user, password, schema, color , 0, options) { pConnectionImpl = toConnectionProviderRegistrySing::Instance().get(provider).createConnectionImpl(*this); pTrait = toConnectionProviderRegistrySing::Instance().get(provider).createConnectionTrait(); @@ -92,6 +96,42 @@ } } +toConnection::toConnection(const toConnectionOptions &opts) + : Provider(opts.provider) + , User(opts.username) + , Password(opts.password) + , Host(opts.host) + , Database(opts.database) + , Color(opts.color) + , Options(opts.options) + , pConnectionImpl(NULL) + , pCache(NULL) + , pTrait(NULL) + , NeedCommit(false) + , Abort(false) + , LoanCnt(0) + , ConnectionOptions(opts) +{ + pConnectionImpl = toConnectionProviderRegistrySing::Instance().get(Provider).createConnectionImpl(*this); + pTrait = toConnectionProviderRegistrySing::Instance().get(Provider).createConnectionTrait(); + + toConnectionSub* connSub = addConnection(); + Version = connSub->version(); + Connections.insert(connSub); + + setSchema(opts.schema); + + pCache = new toCache(*this, description(false).trimmed()); + + ////Version = connSub->version(); + { + QMutexLocker clock(&ConnectionLock); + if (toConfigurationSingle::Instance().objectCache() == toConfiguration::ON_CONNECT) + pCache->readCache(); + + } +} + toConnection::toConnection(const toConnection &other) : Provider(other.Provider) , User(other.User) @@ -108,6 +148,7 @@ , NeedCommit(other.NeedCommit) , Abort(other.Abort) , LoanCnt(0) + , ConnectionOptions(other.ConnectionOptions) { //tool Connection = toConnectionProvider::connection(Provider, this); //ConnectionPool = new toConnectionPool(this); @@ -250,45 +291,60 @@ void toConnection::delWidget(QWidget *widget) { - for (QList<QPointer<QWidget> >::iterator i = Widgets.begin(); i != Widgets.end(); i++) + Widgets.remove(widget); + +#ifdef QT_DEBUG + // Cross check tools connections against connections widgets + // Iterate over all the tool windows, increment the counter for every tool using this toConnection instance + unsigned toolCnt = 0; + QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); + Q_FOREACH(toToolWidget *tool, tools) { - if ((*i) && (*i) == widget) - { - Widgets.erase(i); - break; - } + if (this->ConnectionOptions == tool->connection().connectionOptions()) + toolCnt++; } + Q_ASSERT_X(toolCnt == Widgets.size(), qPrintable(__QHERE__), "Widgets.size() != toolCnt"); +#endif } void toConnection::addWidget(QWidget *widget) { - Widgets.insert(Widgets.end(), QPointer<QWidget>(widget)); + Widgets.insert(widget); + +#ifdef QT_DEBUG + // Cross check tools connections against connections widgets + // Iterate over all the tool windows, increment the counter for every tool using this instance + unsigned toolCnt = 0; + QList<toToolWidget*> tools = toWorkSpaceSingle::Instance().toolWindowList(); + Q_FOREACH(toToolWidget *tool, tools) + { + if (this->ConnectionOptions == tool->connection().connectionOptions()) + toolCnt++; + } + // +1: This widget was not yet regitered with toWorkSpaceSingle. (See: toTool::createWindow()) + Q_ASSERT_X(toolCnt+1 == Widgets.size(), qPrintable(__QHERE__), "Widgets.size() != toolCnt"); +#endif } bool toConnection::closeWidgets(void) { - for (QList<QPointer<QWidget> >::iterator i = Widgets.begin(); i != Widgets.end(); i++) + //for (QList<QPointer<QWidget> >::iterator i = Widgets.begin(); i != Widgets.end(); i++) + Q_FOREACH(QWidget* widget, Widgets) { - - if (!(*i)) - continue; - -#pragma message WARN("TODO/FIXME: close tool windows") - - // make double sure destroy flag is set - (*i)->setAttribute(Qt::WA_DeleteOnClose); - if (!(*i)->close()) - { - // close will fail if parent already closed. - // closing parent will hide children though - if ((*i)->isVisible()) - return false; - } - else - delete *i; + if (toToolWidget *toolWidget = dynamic_cast<toToolWidget*>(widget)) + { + bool retval = toWorkSpaceSingle::Instance().closeToolWidget(toolWidget); + if (retval) + { + bool removed = Widgets.remove(widget); // TODO: check if QT containers support modification while being iterated + continue; + } + else + return false; + } + Q_ASSERT_X(false, qPrintable(__QHERE__), qPrintable(QString("Unknown toConnectionWidget: %1").arg(widget->metaObject()->className()))); } - - Widgets.clear(); + Q_ASSERT_X(Widgets.isEmpty(), qPrintable(__QHERE__), "toConnection::Widgets is not empty"); return true; } Modified: trunk/tora/src/core/toconnection.h =================================================================== --- trunk/tora/src/core/toconnection.h 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/toconnection.h 2013-09-18 15:13:07 UTC (rev 4843) @@ -53,6 +53,8 @@ #include <QtCore/QMetaType> #include <QtCore/QDateTime> #include <QtCore/QAtomicInt> +#include <QtCore/QVariant> +#include <QtCore/QMutex> class toConnectionSub; class toConnectionTraits; @@ -128,6 +130,12 @@ return Options; } + /** Get the options for the connection. */ + inline toConnectionOptions const& connectionOptions() const + { + return ConnectionOptions; + } + /** Get username of connection. */ inline QString const& user() const { @@ -398,13 +406,13 @@ QString Schema; QString Version; QString Color; - QList<QPointer<QWidget> > Widgets; + QSet<QWidget*> Widgets; QMap<QString, QString> InitStrings; // Key, SQL QSet<QString> Options; QSet<toConnectionSub*> Connections, LentConnections; connectionImpl *pConnectionImpl; toConnectionTraits *pTrait; - toConnectionOptions connectionOptions; + toConnectionOptions ConnectionOptions; toCache *pCache; QAtomicInt LoanCnt; Modified: trunk/tora/src/core/toconnectionoptions.cpp =================================================================== --- trunk/tora/src/core/toconnectionoptions.cpp 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/toconnectionoptions.cpp 2013-09-18 15:13:07 UTC (rev 4843) @@ -44,7 +44,7 @@ toConnectionOptions::toConnectionOptions(const QString &_prov, const QString &_host, - const QString &_data, + const QString &_database, const QString &_user, const QString &_pass, const QString &_schema, @@ -53,7 +53,7 @@ QSet<QString> _options) : provider (_prov) , host (_host) - , database (_data) + , database (_database) , username (_user) , password (_pass) , schema (_schema) Modified: trunk/tora/src/core/toconnectionoptions.h =================================================================== --- trunk/tora/src/core/toconnectionoptions.h 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/toconnectionoptions.h 2013-09-18 15:13:07 UTC (rev 4843) @@ -61,7 +61,7 @@ toConnectionOptions(const QString &_prov, const QString &_host, - const QString &_data, + const QString &_database, const QString &_user, const QString &_pass, const QString &_schema, Modified: trunk/tora/src/core/totool.cpp =================================================================== --- trunk/tora/src/core/totool.cpp 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/totool.cpp 2013-09-18 15:13:07 UTC (rev 4843) @@ -98,6 +98,12 @@ Connection = NULL; } +toConnectionWidget::~toConnectionWidget() +{ + if (Connection) + Connection->delWidget(Widget); +} + toConnection &toConnectionWidget::connection() { if (Connection) Modified: trunk/tora/src/core/totool.h =================================================================== --- trunk/tora/src/core/totool.h 2013-09-18 12:19:50 UTC (rev 4842) +++ trunk/tora/src/core/totool.h 2013-09-18 15:13:07 UTC (rev 4843) @@ -297,7 +297,7 @@ toConnectionWidget(QWidget *widget); /** Destructor. */ - virtual ~toConnectionWidget() {}; + virtual ~toConnectionWidget(); /** Change connection of the widget. */ virtual void setConnection(toConnection &conn); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-09-20 11:19:16
|
Revision: 4847 http://sourceforge.net/p/tora/code/4847 Author: ibre5041 Date: 2013-09-20 11:19:12 +0000 (Fri, 20 Sep 2013) Log Message: ----------- Do not call multiple-times methods in toNewConnection Modified Paths: -------------- trunk/tora/src/core/toconf.h trunk/tora/src/core/toconnectionmodel.cpp trunk/tora/src/core/toconnectionmodel.h trunk/tora/src/core/tonewconnection.cpp Modified: trunk/tora/src/core/toconf.h =================================================================== --- trunk/tora/src/core/toconf.h 2013-09-19 18:09:14 UTC (rev 4846) +++ trunk/tora/src/core/toconf.h 2013-09-20 11:19:12 UTC (rev 4847) @@ -164,9 +164,7 @@ #ifndef DEFAULT_MAX_LONG #define DEFAULT_MAX_LONG 30000 #endif -// tonewconnection -#define CONF_PROVIDER_LIST_SORT_OFFSET "ProvListSort" //Sort by database/connection name, asc -#define DEFAULT_PROVIDER_LIST_SORT_OFFSET 4 + // tosqlconnection #define CONF_MYSQL_HOME "MYSQL_HOME" #define CONF_PGSQL_HOME "PGSQL_HOME" Modified: trunk/tora/src/core/toconnectionmodel.cpp =================================================================== --- trunk/tora/src/core/toconnectionmodel.cpp 2013-09-19 18:09:14 UTC (rev 4846) +++ trunk/tora/src/core/toconnectionmodel.cpp 2013-09-20 11:19:12 UTC (rev 4847) @@ -47,7 +47,8 @@ #include <QtCore/QSettings> -toConnectionModel::toConnectionModel() +toConnectionModel::toConnectionModel(QObject *parent) + : QAbstractTableModel(parent) { } Modified: trunk/tora/src/core/toconnectionmodel.h =================================================================== --- trunk/tora/src/core/toconnectionmodel.h 2013-09-19 18:09:14 UTC (rev 4846) +++ trunk/tora/src/core/toconnectionmodel.h 2013-09-20 11:19:12 UTC (rev 4847) @@ -56,7 +56,7 @@ Q_OBJECT public: - toConnectionModel(); + toConnectionModel(QObject *parent = NULL); //! \brief Pull connections from QSettings void readConfig(); Modified: trunk/tora/src/core/tonewconnection.cpp =================================================================== --- trunk/tora/src/core/tonewconnection.cpp 2013-09-19 18:09:14 UTC (rev 4846) +++ trunk/tora/src/core/tonewconnection.cpp 2013-09-20 11:19:12 UTC (rev 4847) @@ -41,7 +41,6 @@ #include "core/tonewconnection.h" #include "core/utils.h" -#include "core/toconf.h" #include "core/tohelp.h" #include "core/toconnectionprovider.h" #include "core/toconnectionregistry.h" @@ -60,6 +59,10 @@ #include <QtGui/QIcon> #include <QtGui/QSortFilterProxyModel> +// TODO turn these into enum (QMetaEnum) +#define CONF_PROVIDER_LIST_SORT_OFFSET "ProvListSort" //Sort by database/connection name, asc +#define DEFAULT_PROVIDER_LIST_SORT_OFFSET 4 + static toConnectionModel *m_connectionModel = 0; static QSortFilterProxyModel *m_proxyModel = 0; @@ -85,16 +88,19 @@ QList<QString> lst = toConnectionProviderRegistrySing::Instance().providers(); foreach(QString p, lst) { - if (p == "Oracle") - { - Provider->addItem(ORACLE_INSTANTCLIENT, QVariant(QString::fromAscii(ORACLE_PROVIDER))); - Provider->addItem(ORACLE_TNSCLIENT, QVariant(QString::fromAscii(ORACLE_PROVIDER))); - } - else - { - toConnectionProvider &provider = toConnectionProviderRegistrySing::Instance().get(p); - Provider->addItem(provider.displayName(), QVariant(provider.name())); - } + try + { + if (p == "Oracle") + { + Provider->addItem(ORACLE_INSTANTCLIENT, QVariant(QString::fromAscii(ORACLE_PROVIDER))); + Provider->addItem(ORACLE_TNSCLIENT, QVariant(QString::fromAscii(ORACLE_PROVIDER))); + } + else + { + toConnectionProvider &provider = toConnectionProviderRegistrySing::Instance().get(p); + Provider->addItem(provider.displayName(), QVariant(provider.name())); + } + } TOCATCH } if (Provider->count() < 1) @@ -167,6 +173,11 @@ // must make sure this gets called manually. changeProvider(Provider->currentIndex()); + + int r = connectionModel()->rowCount() - 1; + QModelIndex last = connectionModel()->index(r, 1); + Previous->setCurrentIndex(last); + Previous->selectionModel()->clear(); Previous->setFocus(Qt::OtherFocusReason); } @@ -307,6 +318,15 @@ int index = proxyModel()->data(baseIndex, Qt::DisplayRole).toInt(); toConnectionOptions opt = connectionModel()->availableConnection(index); + // Connection provider for selected/current history connection entry was not found => throw exception + QVariant p = QVariant::fromValue(opt.provider); + int idx = Provider->findData(p, Qt::DisplayRole); + if (idx == -1) + throw QString("Connection provider not loaded: %1").arg(opt.provider); + + QString RealProviderName = Provider->itemData(idx, Qt::UserRole).toString(); + toConnectionProvider &prov = toConnectionProviderRegistrySing::Instance().get(RealProviderName); + Provider->setCurrentIndex(Provider->findText(opt.provider)); Host->lineEdit()->setText(opt.host); Database->lineEdit()->setText(opt.database); @@ -361,9 +381,7 @@ bool oldStateH = Host->blockSignals(true); Host->clear(); - Host->blockSignals(oldStateH); QList<QString> hosts = toConnectionProviderRegistrySing::Instance().get(provider).hosts(); - DefaultPort = 0; foreach(QString const & host, hosts) { @@ -372,8 +390,9 @@ else if (host.startsWith(":")) DefaultPort = host.mid(1).toInt(); else - Host->addItem(host); + Host->addItem(host); // This might also call changeHost(), unless blockSignals == true } + Host->blockSignals(oldStateH); Database->clear(); changeHost(); // will populate Databases combobox @@ -442,8 +461,6 @@ OptionGroup->hide(); else OptionGroup->show(); - - changeHost(); } catch (const QString &str) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-10-15 16:05:31
|
Revision: 4869 http://sourceforge.net/p/tora/code/4869 Author: ibre5041 Date: 2013-10-15 16:05:24 +0000 (Tue, 15 Oct 2013) Log Message: ----------- toConfiguration cleanups Modified Paths: -------------- trunk/tora/src/core/toconf.h trunk/tora/src/core/toconfiguration.cpp trunk/tora/src/core/toconfiguration.h trunk/tora/src/core/toconfigurationpriv.cpp trunk/tora/src/core/toconfigurationpriv.h trunk/tora/src/core/todatabasesettingui.ui trunk/tora/src/core/toeventqueryworker.cpp trunk/tora/src/core/toglobalsetting.cpp trunk/tora/src/core/toresultlong.cpp trunk/tora/src/core/toresultmodel.cpp trunk/tora/src/core/toresultview.cpp Modified: trunk/tora/src/core/toconf.h =================================================================== --- trunk/tora/src/core/toconf.h 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toconf.h 2013-10-15 16:05:24 UTC (rev 4869) @@ -128,8 +128,6 @@ #define DEFAULT_RECENT_MAX 25 #define CONF_LAST_DIR "LastDir" #define CONF_LOCALE "Locale" -#define CONF_KEEP_ALIVE "KeepAlive" -#define DEFAULT_KEEP_ALIVE 300 #define CONF_NUMBER_FORMAT "NumberFormat" #define DEFAULT_NUMBER_FORMAT 0 #define CONF_NUMBER_DECIMALS "NumberDecimals" @@ -154,9 +152,6 @@ #define CONF_FORCELINEEND "ForceLineEnd" #define DEFAULT_FORCELINEEND "Default" -// connection (general) -#define CONF_CONNECTION_TEST_TIMEOUT "ConnectionTestTimeout" -#define DEFAULT_CONNECTION_TEST_TIMEOUT 0 // tooracleconnection.cpp #define CONF_ORACLE_HOME "ORACLE_HOME" #define CONF_MAX_LONG "MaxLong" Modified: trunk/tora/src/core/toconfiguration.cpp =================================================================== --- trunk/tora/src/core/toconfiguration.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toconfiguration.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -281,15 +281,15 @@ d->m_cachedConnections = v; } -int toConfiguration::maxNumber() +int toConfiguration::initialFetch() { Q_D(toConfiguration); - return d->m_maxNumber; + return d->m_initialFetch; } -void toConfiguration::setMaxNumber(int v) +void toConfiguration::setInitialFetch(int v) { Q_D(toConfiguration); - d->m_maxNumber = v; + d->m_initialFetch = v; } int toConfiguration::maxColDisp() @@ -636,12 +636,12 @@ d->m_connectionColors = v; } -toConfiguration::ObjectCache toConfiguration::objectCache() +toConfiguration::ObjectCacheEnum toConfiguration::objectCache() { Q_D(toConfiguration); return d->m_objectCache; } -void toConfiguration::setObjectCache(toConfiguration::ObjectCache v) +void toConfiguration::setObjectCache(toConfiguration::ObjectCacheEnum v) { Q_D(toConfiguration); d->m_objectCache = v; @@ -669,15 +669,15 @@ d->m_connTestInterval = v; } -int toConfiguration::maxContent() +int toConfiguration::initialEditorContent() { Q_D(toConfiguration); - return d->m_maxContent; + return d->m_initialEditorContent; } -void toConfiguration::setMaxContent(int v) +void toConfiguration::setInitialEditorContent(int v) { Q_D(toConfiguration); - d->m_maxContent = v; + d->m_initialEditorContent = v; } bool toConfiguration::keepPlans() @@ -808,17 +808,6 @@ d->m_translation = v; } -int toConfiguration::keepAlive() -{ - Q_D(toConfiguration); - return d->m_keepAlive; -} -void toConfiguration::setKeepAlive(int v) -{ - Q_D(toConfiguration); - d->m_keepAlive = v; -} - int toConfiguration::numberFormat() { Q_D(toConfiguration); @@ -1581,18 +1570,6 @@ d->m_maxTextWidthMark = v; } -int toConfiguration::connectionTestTimeout() -{ - Q_D(toConfiguration); - return d->m_connectionTestTimeout; -} - -void toConfiguration::setConnectionTestTimeout(int v) -{ - Q_D(toConfiguration); - d->m_connectionTestTimeout = v; -} - QByteArray toConfiguration::mainWindowGeometry() { Q_D(toConfiguration); Modified: trunk/tora/src/core/toconfiguration.h =================================================================== --- trunk/tora/src/core/toconfiguration.h 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toconfiguration.h 2013-10-15 16:05:24 UTC (rev 4869) @@ -26,6 +26,11 @@ { Q_OBJECT; + /* This enum represents various states from ObjectCache comboBox + * database settings gui(see todatabasesettingui.ui). + */ + Q_ENUMS(ObjectCacheEnum) + // Global Settings // Paths Q_PROPERTY(QString CustomSQL READ customSQL WRITE setCustomSQL) @@ -79,18 +84,22 @@ // everything is disabled ATM on the Syntax tab // Database settings + Q_PROPERTY(toConfiguration::ObjectCacheEnum ObjectCache READ objectCache WRITE setObjectCache) Q_PROPERTY(bool AutoCommit READ autoCommit WRITE setAutoCommit) + Q_PROPERTY(bool FirewallMode READ firewallMode WRITE setFirewallMode) + Q_PROPERTY(int ConnTestInterval READ connTestInterval WRITE setConnTestInterval) Q_PROPERTY(int CachedConnections READ cachedConnections WRITE setCachedConnections) - - Q_ENUMS(ObjectCache) + Q_PROPERTY(int InitialFetch READ initialFetch WRITE setInitialFetch) + Q_PROPERTY(int InitialEditorContent READ initialEditorContent WRITE setInitialEditorContent) + Q_PROPERTY(bool IndicateEmpty READ indicateEmpty WRITE setIndicateEmpty) + Q_PROPERTY(QString IndicateEmptyColor READ indicateEmptyColor WRITE setIndicateEmptyColor) + Q_PROPERTY(int NumberFormat READ numberFormat WRITE setNumberFormat) + Q_PROPERTY(int NumberDecimals READ numberDecimals WRITE setNumberDecimals) public: toConfiguration(QObject *parent = 0); ~toConfiguration(); - /* This enum represents various states from ObjectCache comboBox - * database settings gui(see todatabasesettingui.ui). - */ - enum ObjectCache + enum ObjectCacheEnum { WHEN_NEEDED = 0, ON_CONNECT = 1, @@ -134,8 +143,8 @@ int cachedConnections(); void setCachedConnections(int v); - int maxNumber(); - void setMaxNumber(int v); + int initialFetch(); + void setInitialFetch(int v); int maxColDisp(); void setMaxColDisp(int v); @@ -227,8 +236,8 @@ ConnectionColors connectionColors(); void setConnectionColors(const ConnectionColors & v); - ObjectCache objectCache(); - void setObjectCache(ObjectCache v); + ObjectCacheEnum objectCache(); + void setObjectCache(ObjectCacheEnum v); bool firewallMode(); void setFirewallMode(bool v); @@ -236,8 +245,8 @@ int connTestInterval(); void setConnTestInterval(int v); - int maxContent(); - void setMaxContent(int v); + int initialEditorContent(); + void setInitialEditorContent(int v); bool restoreSession(); void setRestoreSession(bool v); Modified: trunk/tora/src/core/toconfigurationpriv.cpp =================================================================== --- trunk/tora/src/core/toconfigurationpriv.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toconfigurationpriv.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -118,7 +118,7 @@ m_style = s.value(CONF_STYLE, DEFAULT_STYLE).toString(); m_translation = s.value(CONF_LOCALE, QLocale().name()).toString(); - m_maxNumber = s.value(CONF_MAX_NUMBER, DEFAULT_MAX_NUMBER).toInt(); + m_initialFetch = s.value(CONF_MAX_NUMBER, DEFAULT_MAX_NUMBER).toInt(); m_maxColDisp = s.value(CONF_MAX_COL_DISP, DEFAULT_MAX_COL_DISP).toInt(); m_planTable = s.value(CONF_PLAN_TABLE, DEFAULT_PLAN_TABLE).toString(); m_planCheckpoint = s.value(CONF_PLAN_CHECKPOINT, DEFAULT_PLAN_CHECKPOINT).toString(); @@ -143,10 +143,10 @@ m_autoIndent = s.value(CONF_AUTO_INDENT, true).toBool(); m_dontReread = s.value(CONF_DONT_REREAD, true).toBool(); - m_objectCache = (toConfiguration::ObjectCache)s.value(CONF_OBJECT_CACHE, DEFAULT_OBJECT_CACHE).toInt(); + m_objectCache = (toConfiguration::ObjectCacheEnum)s.value(CONF_OBJECT_CACHE, DEFAULT_OBJECT_CACHE).toInt(); m_firewallMode = s.value(CONF_FIREWALL_MODE, false).toBool(); m_connTestInterval = s.value(CONF_CONN_TEST_INTERVAL, DEFAULT_CONN_TEST_INTERVAL).toInt(); - m_maxContent = s.value(CONF_MAX_CONTENT, DEFAULT_MAX_CONTENT).toInt(); + m_initialEditorContent = s.value(CONF_MAX_CONTENT, DEFAULT_MAX_CONTENT).toInt(); m_keepPlans = s.value(CONF_KEEP_PLANS, false).toBool(); m_vsqlPlans = s.value(CONF_VSQL_PLANS, true).toBool(); m_sharedPlan = s.value(CONF_SHARED_PLAN, false).toBool(); @@ -159,7 +159,6 @@ m_recentFiles = s.value(CONF_RECENT_FILES, QStringList()).toStringList(); m_recentMax = s.value(CONF_RECENT_MAX, DEFAULT_RECENT_MAX).toInt(); m_lastDir = s.value(CONF_LAST_DIR, "").toString(); - m_keepAlive = s.value(CONF_KEEP_ALIVE, DEFAULT_KEEP_ALIVE).toInt(); m_numberFormat = s.value(CONF_NUMBER_FORMAT, DEFAULT_NUMBER_FORMAT).toInt(); m_numberDecimals = s.value(CONF_NUMBER_DECIMALS, DEFAULT_NUMBER_DECIMALS).toInt(); m_cacheTimeout = s.value(CONF_CACHE_TIMEOUT, DEFAULT_CACHE_TIMEOUT).toInt(); @@ -280,7 +279,6 @@ m_syntaxStaticBg = s.value("SyntaxStaticBg", "darkblue").toString(); m_useMaxTextWidthMark = s.value("useMaxTextWidthMark", false).toBool(); m_maxTextWidthMark = s.value("maxTextWidthMark", 75).toInt(); - m_connectionTestTimeout = s.value(CONF_CONNECTION_TEST_TIMEOUT, DEFAULT_CONNECTION_TEST_TIMEOUT).toInt(); m_encoding = s.value(CONF_ENCODING, DEFAULT_ENCODING).toString(); m_forcelineend = s.value(CONF_FORCELINEEND, DEFAULT_FORCELINEEND).toString(); s.endGroup(); @@ -366,13 +364,19 @@ s.setValue(CONF_STYLE, m_style); s.setValue(CONF_LOCALE, m_translation); - s.setValue(CONF_MAX_NUMBER, m_maxNumber); + // Editor setting + s.setValue(CONF_TEXT, m_textFontName); + s.setValue(CONF_CODE, m_codeFontName); + s.setValue(CONF_LIST, m_listFontName); + + // Database settings + s.setValue(CONF_OBJECT_CACHE, m_objectCache); + s.setValue(CONF_AUTO_COMMIT, m_autoCommit); + s.setValue(CONF_FIREWALL_MODE, m_firewallMode); + s.setValue(CONF_MAX_NUMBER, m_initialFetch); s.setValue(CONF_MAX_COL_DISP, m_maxColDisp); s.setValue(CONF_PLAN_TABLE, m_planTable); s.setValue(CONF_PLAN_CHECKPOINT, m_planCheckpoint); - s.setValue(CONF_TEXT, m_textFontName); - s.setValue(CONF_CODE, m_codeFontName); - s.setValue(CONF_LIST, m_listFontName); s.setValue(CONF_DATE_FORMAT, m_dateFormat); s.setValue(CONF_TIMESTAMP_FORMAT, m_timestampFormat); @@ -380,7 +384,7 @@ s.setValue(CONF_KEYWORD_UPPER, m_keywordUpper); s.setValue(CONF_OBJECT_NAMES_UPPER, m_objectNamesUpper); - s.setValue(CONF_AUTO_COMMIT, m_autoCommit); + s.setValue(CONF_DEFAULT_TOOL, m_defaultTool); s.setValue(CONF_CODE_COMPLETION, m_codeCompletion); s.setValue(CONF_COMPLETION_SORT, m_completionSort); @@ -388,10 +392,8 @@ s.setValue(CONF_DONT_REREAD, m_dontReread); - s.setValue(CONF_OBJECT_CACHE, m_objectCache); - s.setValue(CONF_FIREWALL_MODE, m_firewallMode); s.setValue(CONF_CONN_TEST_INTERVAL, m_connTestInterval); - s.setValue(CONF_MAX_CONTENT, m_maxContent); + s.setValue(CONF_MAX_CONTENT, m_initialEditorContent); s.setValue(CONF_KEEP_PLANS, m_keepPlans); s.setValue(CONF_VSQL_PLANS, m_vsqlPlans); s.setValue(CONF_SHARED_PLAN, m_sharedPlan); @@ -404,7 +406,6 @@ s.setValue(CONF_RECENT_MAX, m_recentMax); s.setValue(CONF_LAST_DIR, m_lastDir); - s.setValue(CONF_KEEP_ALIVE, m_keepAlive); s.setValue(CONF_NUMBER_FORMAT, m_numberFormat); s.setValue(CONF_NUMBER_DECIMALS, m_numberDecimals); s.setValue(CONF_CACHE_TIMEOUT, m_cacheTimeout); @@ -534,7 +535,6 @@ s.setValue("SyntaxStaticBg", m_syntaxStaticBg); s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); s.setValue("maxTextWidthMark", m_maxTextWidthMark); - s.setValue(CONF_CONNECTION_TEST_TIMEOUT, m_connectionTestTimeout); s.setValue(CONF_ENCODING, m_encoding); s.setValue(CONF_FORCELINEEND, m_forcelineend); s.endGroup(); Modified: trunk/tora/src/core/toconfigurationpriv.h =================================================================== --- trunk/tora/src/core/toconfigurationpriv.h 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toconfigurationpriv.h 2013-10-15 16:05:24 UTC (rev 4869) @@ -61,6 +61,8 @@ QString m_textFontName; QString m_codeFontName; QString m_listFontName; + QString m_extensions; + // Syntax QString m_syntaxDefault; QString m_syntaxComment; @@ -74,59 +76,75 @@ QString m_syntaxStaticBg; // Database + toConfiguration::ObjectCacheEnum m_objectCache; bool m_autoCommit; + bool m_firewallMode; + int m_connTestInterval; int m_cachedConnections; + int m_initialFetch; + int m_initialEditorContent; + int m_maxColDisp; + bool m_indicateEmpty; + QString m_indicateEmptyColor; + int m_numberFormat; + int m_numberDecimals; + // Database + // Oracle + QString m_dateFormat; + QString m_timestampFormat; + int m_maxLong; + bool m_keepPlans; + bool m_vsqlPlans; + bool m_sharedPlan; + // Extractor. Controls the method used to produce database object extracts + // as well as extraction settings (which information should be extracted). + bool m_extractorUseDbmsMetadata; + bool m_extractorIncludeSotrage; + bool m_extractorSkipOrgMonInformation; + bool m_extractorSkipStorageExceptTablespaces; + bool m_extractorIncludeParallel; + bool m_extractorIncludePartition; + bool m_extractorIncludeCode; + bool m_extractorIncludeHeader; + bool m_extractorIncludePrompt; - int m_maxNumber; - int m_maxColDisp; + QString m_planTable; QString m_planCheckpoint; - QString m_dateFormat; - QString m_timestampFormat; - mutable QDir m_applicationDir; + QString m_defaultTool; - bool m_editDragDrop; + bool m_dontReread; - toConfiguration::ObjectCache m_objectCache; - bool m_firewallMode; - int m_connTestInterval; - int m_maxContent; - bool m_keepPlans; - bool m_vsqlPlans; - bool m_sharedPlan; + // toEditExtensions (moved into obsolete ATM) + bool m_editDragDrop; bool m_autoIndentRo; - bool m_indicateEmpty; - QString m_indicateEmptyColor; - QString m_extensions; + bool m_commaBefore; + bool m_blockOpenLine; + bool m_operatorSpace; + bool m_rightSeparator; + bool m_endBlockNewline; + int m_commentColumn; + int m_recentMax; - QString m_lastDir; - int m_keepAlive; - int m_numberFormat; - int m_numberDecimals; + + int m_cacheTimeout; - int m_connectionTestTimeout; // after how many seconds connection should be tested QString m_encoding; QString m_forcelineend; // force line end type (win, linux, mac) when saving text files - // tooracleconnection - int m_openCursors; - int m_maxLong; - // toqsqlconnection - - bool m_onlyForward; int m_createAction; @@ -136,7 +154,13 @@ QByteArray m_leftDockbarState; QByteArray m_rightDockbarState; QStringList m_recentFiles; + mutable QDir m_applicationDir; + QString m_lastDir; + // mainwindow size + QByteArray m_mainWindowGeometry; + QByteArray m_mainWindowState; + // tools ToolsMap m_tools; @@ -144,14 +168,6 @@ QString m_csvSeparator; QString m_csvDelimiter; - // toeditextensions - bool m_commaBefore; - bool m_blockOpenLine; - bool m_operatorSpace; - bool m_rightSeparator; - bool m_endBlockNewline; - int m_commentColumn; - // tobrowser bool m_filterIgnoreCase; bool m_filterInvert; @@ -162,6 +178,7 @@ // tohelp HelpsMap m_additionalHelp; + // tochartmanager ChartsMap m_chartFiles; ChartsMap m_chartAlarms; @@ -213,22 +230,6 @@ bool m_wsExecLog; bool m_wsToplevelDescribe; - // mainwindow size - QByteArray m_mainWindowGeometry; - QByteArray m_mainWindowState; - - // Extractor. Controls the method used to produce database object extracts - // as well as extraction settings (which information should be extracted). - bool m_extractorUseDbmsMetadata; - bool m_extractorIncludeSotrage; - bool m_extractorSkipOrgMonInformation; - bool m_extractorSkipStorageExceptTablespaces; - bool m_extractorIncludeParallel; - bool m_extractorIncludePartition; - bool m_extractorIncludeCode; - bool m_extractorIncludeHeader; - bool m_extractorIncludePrompt; - toConfigurationPrivate(QObject *parent = 0); /*! \brief Get directory name where to store session files. Modified: trunk/tora/src/core/todatabasesettingui.ui =================================================================== --- trunk/tora/src/core/todatabasesettingui.ui 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/todatabasesettingui.ui 2013-10-15 16:05:24 UTC (rev 4869) @@ -74,6 +74,9 @@ </item> <item row="2" column="1"> <widget class="QSpinBox" name="MaxColDisp"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>1</horstretch> @@ -87,6 +90,9 @@ </item> <item row="1" column="1"> <widget class="QSpinBox" name="MaxContent"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>1</horstretch> @@ -148,13 +154,16 @@ </item> <item row="1" column="2"> <widget class="QCheckBox" name="UnlimitedContent"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="text"> <string>&All</string> </property> </widget> </item> <item row="0" column="2"> - <widget class="QCheckBox" name="ReadAll"> + <widget class="QCheckBox" name="FetchAll"> <property name="text"> <string>&All</string> </property> @@ -295,7 +304,7 @@ </widget> </item> <item row="2" column="0"> - <widget class="QLabel" name="label"> + <widget class="QLabel" name="ConnTestIntervalLabel"> <property name="enabled"> <bool>false</bool> </property> @@ -315,6 +324,9 @@ </item> <item row="2" column="1"> <widget class="QSpinBox" name="ConnTestInterval"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>1</horstretch> @@ -363,13 +375,6 @@ </widget> </item> </layout> - <zorder>FirewallMode</zorder> - <zorder>FirewallMode</zorder> - <zorder>label</zorder> - <zorder>ConnTestInterval</zorder> - <zorder>CachedConnections_2</zorder> - <zorder>CachedConnections</zorder> - <zorder>AutoCommit</zorder> </widget> </item> </layout> @@ -377,7 +382,7 @@ <layoutdefault spacing="6" margin="11"/> <tabstops> <tabstop>ObjectCache</tabstop> - <tabstop>ReadAll</tabstop> + <tabstop>FetchAll</tabstop> <tabstop>UnlimitedContent</tabstop> <tabstop>IndicateEmpty</tabstop> <tabstop>NumberFormat</tabstop> Modified: trunk/tora/src/core/toeventqueryworker.cpp =================================================================== --- trunk/tora/src/core/toeventqueryworker.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toeventqueryworker.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -166,7 +166,7 @@ return; } - unsigned maxRead = toConfigurationSingle::Instance().maxNumber(); + unsigned maxRead = toConfigurationSingle::Instance().initialFetch(); ValuesList values; for(unsigned row = 0; row < maxRead; row++) { Modified: trunk/tora/src/core/toglobalsetting.cpp =================================================================== --- trunk/tora/src/core/toglobalsetting.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toglobalsetting.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -331,13 +331,13 @@ setupUi(this); MaxColDisp->setValue(toConfigurationSingle::Instance().maxColDisp()); - int mxNumber = toConfigurationSingle::Instance().maxNumber(); + int mxNumber = toConfigurationSingle::Instance().initialFetch(); if (mxNumber <= 0) - ReadAll->setChecked(true); + FetchAll->setChecked(true); else InitialFetch->setValue(mxNumber); - int mxContent = toConfigurationSingle::Instance().maxContent(); + int mxContent = toConfigurationSingle::Instance().initialEditorContent(); if (mxContent <= 0) { MaxContent->setValue(InitialFetch->value()); @@ -384,13 +384,21 @@ void toDatabaseSetting::saveSetting(void) { - toConfigurationSingle::Instance().setMaxColDisp(MaxColDisp->value()); - if (ReadAll->isChecked()) - toConfigurationSingle::Instance().setMaxNumber(-1); + toConfigurationSingle::Instance().setObjectCache((toConfiguration::ObjectCacheEnum)ObjectCache->currentIndex()); + + toConfigurationSingle::Instance().setAutoCommit(AutoCommit->isChecked()); + toConfigurationSingle::Instance().setFirewallMode(FirewallMode->isChecked()); + toConfigurationSingle::Instance().setConnTestInterval(ConnTestInterval->value()); + toConfigurationSingle::Instance().setCachedConnections(CachedConnections->value()); + + + if (FetchAll->isChecked()) + toConfigurationSingle::Instance().setInitialFetch(-1); else - toConfigurationSingle::Instance().setMaxNumber(InitialFetch->value()); + toConfigurationSingle::Instance().setInitialFetch(InitialFetch->value()); + if (UnlimitedContent->isChecked()) - toConfigurationSingle::Instance().setMaxContent(-1); + toConfigurationSingle::Instance().setInitialEditorContent(-1); else { int num = InitialFetch->value(); @@ -404,20 +412,21 @@ tr("Doesn't make sense to have max content less than initial\n" "fetch size. Will adjust value to be higher."), tr("&Ok")); - toConfigurationSingle::Instance().setMaxContent(maxnum); + toConfigurationSingle::Instance().setInitialEditorContent(maxnum); } - toConfigurationSingle::Instance().setAutoCommit(AutoCommit->isChecked()); - toConfigurationSingle::Instance().setCachedConnections(CachedConnections->value()); + + toConfigurationSingle::Instance().setMaxColDisp(MaxColDisp->value()); + // toConfigurationSingle::Instance().setDontReread(DontReread->isChecked()); - toConfigurationSingle::Instance().setObjectCache((toConfiguration::ObjectCache)ObjectCache->currentIndex()); + // toConfigurationSingle::Instance().setBkgndConnect(BkgndConnect->isChecked()); // toConfigurationSingle::Instance().setAutoLong(AutoLong->isChecked() ? MoveAfter->value() : 0); toConfigurationSingle::Instance().setIndicateEmpty(IndicateEmpty->isChecked()); toConfigurationSingle::Instance().setIndicateEmptyColor(IndicateEmptyColor->palette().color(IndicateEmptyColor->backgroundRole()).name()); // toConfigurationSingle::Instance().setKeepAlive(KeepAlive->isChecked() ? DEFAULT_KEEP_ALIVE : -1); //FIXME: there was "" - toConfigurationSingle::Instance().setFirewallMode(FirewallMode->isChecked()); - toConfigurationSingle::Instance().setConnTestInterval(ConnTestInterval->value()); + + toConfigurationSingle::Instance().setNumberFormat(NumberFormat->currentIndex()); toConfigurationSingle::Instance().setNumberDecimals(Decimals->value()); toQValue::setNumberFormat(NumberFormat->currentIndex(), Decimals->value()); Modified: trunk/tora/src/core/toresultlong.cpp =================================================================== --- trunk/tora/src/core/toresultlong.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toresultlong.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -110,7 +110,7 @@ //// Query->slotReadAll(); // indicate that all records should be fetched } else - MaxNumber = toConfigurationSingle::Instance().maxNumber(); + MaxNumber = toConfigurationSingle::Instance().initialFetch(); Query->start(); } catch (const toConnection::exception &str) Modified: trunk/tora/src/core/toresultmodel.cpp =================================================================== --- trunk/tora/src/core/toresultmodel.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toresultmodel.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -66,7 +66,7 @@ ReadAll = false; SortedOnColumn = -1; - MaxRead = MaxNumber = toConfigurationSingle::Instance().maxNumber(); + MaxRead = MaxNumber = toConfigurationSingle::Instance().initialFetch(); CurrRowKey = 1; @@ -117,7 +117,7 @@ Query = NULL; - MaxRead = MaxNumber = toConfigurationSingle::Instance().maxNumber(); + MaxRead = MaxNumber = toConfigurationSingle::Instance().initialFetch(); setSupportedDragActions(Qt::CopyAction); Modified: trunk/tora/src/core/toresultview.cpp =================================================================== --- trunk/tora/src/core/toresultview.cpp 2013-10-15 05:10:18 UTC (rev 4868) +++ trunk/tora/src/core/toresultview.cpp 2013-10-15 16:05:24 UTC (rev 4869) @@ -1328,7 +1328,7 @@ else setSorting(Query->columns()); - int MaxNumber = toConfigurationSingle::Instance().maxNumber(); + int MaxNumber = toConfigurationSingle::Instance().initialFetch(); for (int j = 0; j < MaxNumber && !Query->eof(); j++) slotAddItem(); if (ReadAll || MaxNumber < 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-10-15 16:44:33
|
Revision: 4870 http://sourceforge.net/p/tora/code/4870 Author: ibre5041 Date: 2013-10-15 16:44:28 +0000 (Tue, 15 Oct 2013) Log Message: ----------- Modified Paths: -------------- trunk/tora/src/core/toconf.h trunk/tora/src/core/toconfiguration.cpp trunk/tora/src/core/toconfiguration.h trunk/tora/src/core/toconfigurationpriv.cpp trunk/tora/src/core/toconfigurationpriv.h trunk/tora/src/core/todatabasesettingui.ui Modified: trunk/tora/src/core/toconf.h =================================================================== --- trunk/tora/src/core/toconf.h 2013-10-15 16:05:24 UTC (rev 4869) +++ trunk/tora/src/core/toconf.h 2013-10-15 16:44:28 UTC (rev 4870) @@ -53,8 +53,6 @@ #define DEFAULT_MAX_COL_DISP 300 #define CONF_PLAN_TABLE "PlanTable" #define DEFAULT_PLAN_TABLE "PLAN_TABLE" -#define CONF_PLAN_CHECKPOINT "PlanCheckpoint" -#define DEFAULT_PLAN_CHECKPOINT "TORA_CHECKPOINT" #define CONF_TEXT "ConfText" #define CONF_CODE "ConfCode" #define CONF_LIST "ListText" Modified: trunk/tora/src/core/toconfiguration.cpp =================================================================== --- trunk/tora/src/core/toconfiguration.cpp 2013-10-15 16:05:24 UTC (rev 4869) +++ trunk/tora/src/core/toconfiguration.cpp 2013-10-15 16:44:28 UTC (rev 4870) @@ -1153,6 +1153,7 @@ d->m_additionalHelp = v; } +#ifdef TORA3_CHARTS // tochartmanager ChartsMap toConfiguration::chartFiles() { @@ -1175,6 +1176,7 @@ Q_D(toConfiguration); d->m_chartAlarms = v; } +#endif // toooutput QString toConfiguration::polling() Modified: trunk/tora/src/core/toconfiguration.h =================================================================== --- trunk/tora/src/core/toconfiguration.h 2013-10-15 16:05:24 UTC (rev 4869) +++ trunk/tora/src/core/toconfiguration.h 2013-10-15 16:44:28 UTC (rev 4870) @@ -408,12 +408,14 @@ HelpsMap additionalHelp(); void setAdditionalHelp(HelpsMap v); +#ifdef TORA3_CHARTS // tochartmanager ChartsMap chartFiles(); void setChartFiles(ChartsMap v); ChartsMap chartAlarms(); void setChartAlarms(ChartsMap v); +#endif // toooutput QString polling(); Modified: trunk/tora/src/core/toconfigurationpriv.cpp =================================================================== --- trunk/tora/src/core/toconfigurationpriv.cpp 2013-10-15 16:05:24 UTC (rev 4869) +++ trunk/tora/src/core/toconfigurationpriv.cpp 2013-10-15 16:44:28 UTC (rev 4870) @@ -121,7 +121,6 @@ m_initialFetch = s.value(CONF_MAX_NUMBER, DEFAULT_MAX_NUMBER).toInt(); m_maxColDisp = s.value(CONF_MAX_COL_DISP, DEFAULT_MAX_COL_DISP).toInt(); m_planTable = s.value(CONF_PLAN_TABLE, DEFAULT_PLAN_TABLE).toString(); - m_planCheckpoint = s.value(CONF_PLAN_CHECKPOINT, DEFAULT_PLAN_CHECKPOINT).toString(); m_textFontName = s.value(CONF_TEXT, "").toString(); m_codeFontName = s.value(CONF_CODE, "").toString(); m_listFontName = s.value(CONF_LIST, "").toString(); @@ -206,6 +205,8 @@ m_additionalHelp[s.value("HelpName").toString()] = s.value("Path").toString(); } s.endArray(); + +#ifdef TORA3_CHARTS // tochartmanager cnt = s.beginReadArray("ChartFiles"); for (int i = 0; i < cnt; ++i) @@ -221,6 +222,8 @@ m_chartAlarms[s.value("Name").toString()] = s.value("Spec").toString(); } s.endArray(); +#endif + // tooutput m_polling = s.value(CONF_POLLING, DEFAULT_POLLING).toString(); m_logType = s.value(CONF_LOG_TYPE, DEFAULT_LOG_TYPE).toInt(); @@ -365,43 +368,49 @@ s.setValue(CONF_LOCALE, m_translation); // Editor setting + s.setValue(CONF_HIGHLIGHT, m_syntaxHighlighting); + s.setValue(CONF_TEXT, m_textFontName); s.setValue(CONF_CODE, m_codeFontName); s.setValue(CONF_LIST, m_listFontName); + s.setValue(CONF_KEYWORD_UPPER, m_keywordUpper); + s.setValue(CONF_OBJECT_NAMES_UPPER, m_objectNamesUpper); + s.setValue(CONF_CODE_COMPLETION, m_codeCompletion); + s.setValue(CONF_COMPLETION_SORT, m_completionSort); + s.setValue(CONF_AUTO_INDENT, m_autoIndent); + s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); + s.setValue("maxTextWidthMark", m_maxTextWidthMark); + s.setValue(CONF_EXTENSIONS, m_extensions); + s.setValue(CONF_ENCODING, m_encoding); + s.setValue(CONF_FORCELINEEND, m_forcelineend); + s.setValue(CONF_TAB_STOP, m_tabStop); + s.setValue(CONF_TAB_SPACES, m_useSpacesForIndent); + // Database settings s.setValue(CONF_OBJECT_CACHE, m_objectCache); s.setValue(CONF_AUTO_COMMIT, m_autoCommit); s.setValue(CONF_FIREWALL_MODE, m_firewallMode); + s.setValue(CONF_CONN_TEST_INTERVAL, m_connTestInterval); s.setValue(CONF_MAX_NUMBER, m_initialFetch); + s.setValue(CONF_MAX_CONTENT, m_initialEditorContent); s.setValue(CONF_MAX_COL_DISP, m_maxColDisp); s.setValue(CONF_PLAN_TABLE, m_planTable); - s.setValue(CONF_PLAN_CHECKPOINT, m_planCheckpoint); + // Oracle + s.setValue(CONF_KEEP_PLANS, m_keepPlans); + s.setValue(CONF_VSQL_PLANS, m_vsqlPlans); + s.setValue(CONF_SHARED_PLAN, m_sharedPlan); s.setValue(CONF_DATE_FORMAT, m_dateFormat); s.setValue(CONF_TIMESTAMP_FORMAT, m_timestampFormat); - s.setValue(CONF_HIGHLIGHT, m_syntaxHighlighting); - s.setValue(CONF_KEYWORD_UPPER, m_keywordUpper); - s.setValue(CONF_OBJECT_NAMES_UPPER, m_objectNamesUpper); - s.setValue(CONF_DEFAULT_TOOL, m_defaultTool); - s.setValue(CONF_CODE_COMPLETION, m_codeCompletion); - s.setValue(CONF_COMPLETION_SORT, m_completionSort); - s.setValue(CONF_AUTO_INDENT, m_autoIndent); s.setValue(CONF_DONT_REREAD, m_dontReread); - - s.setValue(CONF_CONN_TEST_INTERVAL, m_connTestInterval); - s.setValue(CONF_MAX_CONTENT, m_initialEditorContent); - s.setValue(CONF_KEEP_PLANS, m_keepPlans); - s.setValue(CONF_VSQL_PLANS, m_vsqlPlans); - s.setValue(CONF_SHARED_PLAN, m_sharedPlan); - s.setValue(CONF_AUTO_INDENT_RO, m_autoIndentRo); s.setValue(CONF_INDICATE_EMPTY, m_indicateEmpty); s.setValue(CONF_INDICATE_EMPTY_COLOR, m_indicateEmptyColor); - s.setValue(CONF_EXTENSIONS, m_extensions); + s.setValue(CONF_RECENT_FILES, m_recentFiles); s.setValue(CONF_RECENT_MAX, m_recentMax); s.setValue(CONF_LAST_DIR, m_lastDir); @@ -409,19 +418,18 @@ s.setValue(CONF_NUMBER_FORMAT, m_numberFormat); s.setValue(CONF_NUMBER_DECIMALS, m_numberDecimals); s.setValue(CONF_CACHE_TIMEOUT, m_cacheTimeout); - s.setValue(CONF_TAB_STOP, m_tabStop); - s.setValue(CONF_TAB_SPACES, m_useSpacesForIndent); s.setValue(CONF_EDIT_DRAG_DROP, m_editDragDrop); // tooracleconnection + s.setValue(CONF_MAX_LONG, m_maxLong); - s.setValue(CONF_MAX_LONG, m_maxLong); // toqsqlconnection s.setValue(CONF_ONLY_FORWARD, m_onlyForward); s.setValue(CONF_CREATE_ACTION, m_createAction); // main.cpp s.setValue(CONF_LAST_VERSION, m_lastVersion); s.setValue(CONF_FIRST_INSTALL, m_firstInstall); + // tools s.beginWriteArray(CONF_TOOLS); for (int i = 0; i < m_tools.count(); ++i) @@ -432,6 +440,7 @@ s.setValue("Enabled", m_tools[key]); } s.endArray(); + // toresultlistformat s.setValue(CONF_CSV_SEPARATOR, m_csvSeparator); s.setValue(CONF_CSV_DELIMITER, m_csvDelimiter); @@ -458,6 +467,8 @@ s.setValue("Path", m_additionalHelp[key]); } s.endArray(); + +#ifdef TORA3_CHARTS // tochartmanager s.beginWriteArray("ChartFiles"); for (int i = 0; i < m_chartFiles.count(); ++i) @@ -477,6 +488,8 @@ s.setValue("Spec", m_chartAlarms[key]); } s.endArray(); +#endif + // tooutput s.setValue(CONF_POLLING, m_polling); s.setValue(CONF_LOG_TYPE, m_logType); @@ -533,10 +546,6 @@ s.setValue("SyntaxDebugBg", m_syntaxDebugBg); s.setValue("SyntaxCurrentLineMarker", m_syntaxCurrentLineMarker); s.setValue("SyntaxStaticBg", m_syntaxStaticBg); - s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); - s.setValue("maxTextWidthMark", m_maxTextWidthMark); - s.setValue(CONF_ENCODING, m_encoding); - s.setValue(CONF_FORCELINEEND, m_forcelineend); s.endGroup(); // main window Modified: trunk/tora/src/core/toconfigurationpriv.h =================================================================== --- trunk/tora/src/core/toconfigurationpriv.h 2013-10-15 16:05:24 UTC (rev 4869) +++ trunk/tora/src/core/toconfigurationpriv.h 2013-10-15 16:44:28 UTC (rev 4870) @@ -93,6 +93,7 @@ QString m_dateFormat; QString m_timestampFormat; int m_maxLong; + QString m_planTable; bool m_keepPlans; bool m_vsqlPlans; bool m_sharedPlan; @@ -108,24 +109,6 @@ bool m_extractorIncludeHeader; bool m_extractorIncludePrompt; - - QString m_planTable; - QString m_planCheckpoint; - - - - - - QString m_defaultTool; - - - - - - - bool m_dontReread; - - // toEditExtensions (moved into obsolete ATM) bool m_editDragDrop; bool m_autoIndentRo; @@ -136,11 +119,9 @@ bool m_endBlockNewline; int m_commentColumn; - int m_recentMax; - - + // TODO these attributes can be useful but can not be set from GUI + bool m_dontReread; int m_cacheTimeout; - QString m_encoding; QString m_forcelineend; // force line end type (win, linux, mac) when saving text files @@ -154,6 +135,7 @@ QByteArray m_leftDockbarState; QByteArray m_rightDockbarState; QStringList m_recentFiles; + int m_recentMax; mutable QDir m_applicationDir; QString m_lastDir; @@ -163,6 +145,7 @@ // tools ToolsMap m_tools; + QString m_defaultTool; // toresultlistformat QString m_csvSeparator; @@ -178,10 +161,11 @@ // tohelp HelpsMap m_additionalHelp; - +#ifdef TORA3_CHARTS // tochartmanager ChartsMap m_chartFiles; ChartsMap m_chartAlarms; +#endif // tooutput QString m_polling; Modified: trunk/tora/src/core/todatabasesettingui.ui =================================================================== --- trunk/tora/src/core/todatabasesettingui.ui 2013-10-15 16:05:24 UTC (rev 4869) +++ trunk/tora/src/core/todatabasesettingui.ui 2013-10-15 16:44:28 UTC (rev 4870) @@ -283,7 +283,7 @@ <property name="title"> <string>Connection Settings</string> </property> - <layout class="QGridLayout" name="gridLayout"> + <layout class="QGridLayout"> <item row="1" column="0"> <widget class="QCheckBox" name="FirewallMode"> <property name="enabled"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-10-16 18:57:26
|
Revision: 4879 http://sourceforge.net/p/tora/code/4879 Author: ibre5041 Date: 2013-10-16 18:57:22 +0000 (Wed, 16 Oct 2013) Log Message: ----------- Modified Paths: -------------- trunk/tora/src/core/toconnectionregistry.cpp trunk/tora/src/core/toconnectionregistry.h trunk/tora/src/core/tomain.cpp Modified: trunk/tora/src/core/toconnectionregistry.cpp =================================================================== --- trunk/tora/src/core/toconnectionregistry.cpp 2013-10-15 23:36:11 UTC (rev 4878) +++ trunk/tora/src/core/toconnectionregistry.cpp 2013-10-16 18:57:22 UTC (rev 4879) @@ -149,11 +149,11 @@ throw tr("Couldn't find specified connectionts (%1)").arg(opt.toString()); } -void toConnectionRegistry::currentIndexChanged(int idx) +void toConnectionRegistry::slotCurrentIndexChanged(int idx) { if (idx == -1) { - m_currentConnection = toConnectionOptions(); + m_currentConnection = s_noConnection; return; // No connection } Q_ASSERT_X(idx < m_ConnectionsList.size(), qPrintable(__QHERE__), qPrintable(QString("Connection index out of range: %1").arg(idx))); @@ -169,3 +169,6 @@ { return m_ConnectionsList; } + +toConnectionOptions toConnectionRegistry::s_noConnection = toConnectionOptions(); + Modified: trunk/tora/src/core/toconnectionregistry.h =================================================================== --- trunk/tora/src/core/toconnectionregistry.h 2013-10-15 23:36:11 UTC (rev 4878) +++ trunk/tora/src/core/toconnectionregistry.h 2013-10-16 18:57:22 UTC (rev 4879) @@ -92,12 +92,18 @@ // QAbstractListModel interface int rowCount(const QModelIndex &) const; QVariant data(const QModelIndex &,int) const; -public slots: - void currentIndexChanged(int); + +signals: + void activeConnectionChanged(QModelIndex); + +private slots: + void slotCurrentIndexChanged(int); + private: toConnectionOptions m_currentConnection; - QMap<toConnectionOptions, toConnection *> m_ConnectionsMap; - QList<toConnection *> m_ConnectionsList; + QMap<toConnectionOptions, toConnection *> m_ConnectionsMap; + QList<toConnection *> m_ConnectionsList; + static toConnectionOptions s_noConnection; }; typedef Loki::SingletonHolder<toConnectionRegistry> toConnectionRegistrySing; Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-10-15 23:36:11 UTC (rev 4878) +++ trunk/tora/src/core/tomain.cpp 2013-10-16 18:57:22 UTC (rev 4879) @@ -463,7 +463,7 @@ ConnectionSelection->setModel(&toConnectionRegistrySing::Instance()); //connect(ConnectionSelection, SIGNAL(activated(int)), this, SLOT(connectionSelectionChanged())); connect(ConnectionSelection, SIGNAL(currentIndexChanged(QString)), this, SLOT(connectionSelectionChanged())); - connect(ConnectionSelection, SIGNAL(currentIndexChanged(int)), &toConnectionRegistrySing::Instance(), SLOT(currentIndexChanged(int))); + connect(ConnectionSelection, SIGNAL(currentIndexChanged(int)), &toConnectionRegistrySing::Instance(), SLOT(slotCurrentIndexChanged(int))); addToolBarBreak(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-10-17 12:06:58
|
Revision: 4881 http://sourceforge.net/p/tora/code/4881 Author: ibre5041 Date: 2013-10-17 12:06:52 +0000 (Thu, 17 Oct 2013) Log Message: ----------- toConnectionRegistry changes Modified Paths: -------------- trunk/tora/src/core/toconnectionregistry.cpp trunk/tora/src/core/toconnectionregistry.h trunk/tora/src/core/tomain.cpp Modified: trunk/tora/src/core/toconnectionregistry.cpp =================================================================== --- trunk/tora/src/core/toconnectionregistry.cpp 2013-10-16 20:37:18 UTC (rev 4880) +++ trunk/tora/src/core/toconnectionregistry.cpp 2013-10-17 12:06:52 UTC (rev 4881) @@ -57,13 +57,13 @@ return m_ConnectionsList.empty(); } -void toConnectionRegistry::changeConnection(const toConnectionOptions &opts) -{ - if( m_ConnectionsMap.contains(opts)) - m_currentConnection = opts; - else - throw QString("Unregistered connection(change): %1").arg(opts.toString()); -} +//void toConnectionRegistry::changeConnection(const toConnectionOptions &opts) +//{ +// if( m_ConnectionsMap.contains(opts)) +// m_currentConnection = opts; +// else +// throw QString("Unregistered connection(change): %1").arg(opts.toString()); +//} int toConnectionRegistry::rowCount(const QModelIndex &) const { @@ -81,12 +81,13 @@ throw QString("Duplicit connection: %1").arg(opsStr); } - if(m_ConnectionsList.empty()) - m_currentConnection = conn->connectionOptions(); + // if(m_ConnectionsList.empty()) + // m_currentConnection = conn->connectionOptions(); beginInsertRows(QModelIndex(), m_ConnectionsList.size(), m_ConnectionsList.size()); m_ConnectionsMap.insert(conn->connectionOptions(), conn); m_ConnectionsList.append(conn); + m_currentConnection = index(m_ConnectionsList.size()-1, 0); endInsertRows(); } @@ -100,16 +101,19 @@ conn->setParent(this); throw QString("Unregistered connection for removal: %1").arg(conn->description()); } + + int pos = m_ConnectionsList.indexOf(conn); + // TODO if TCP connection is lost this can hang "forever" - preventing application exit // There must be some ugly way of doing this asynchronously in bg thread: // conn->setParent(NULL); conn->setThread(<something>); // emit something and then wait for threads response delete conn; - int pos = m_ConnectionsList.indexOf(conn); beginRemoveRows(QModelIndex(), pos, pos); int mRemoved = m_ConnectionsMap.remove(conns.at(0)); m_ConnectionsList.removeAt(pos); + m_currentConnection = index(m_ConnectionsList.size()-1, 0); endRemoveRows(); } @@ -137,30 +141,30 @@ toConnection& toConnectionRegistry::currentConnection() { - if( m_ConnectionsMap.contains(m_currentConnection)) - return *m_ConnectionsMap.value(m_currentConnection); - throw tr("Can't find active connection"); + if (m_ConnectionsList.empty()) + throw tr("Can't find active connection"); + return *m_ConnectionsList.at(m_currentConnection.row()); } toConnection& toConnectionRegistry::connection(const toConnectionOptions &opt) { if( m_ConnectionsMap.contains(opt)) return *m_ConnectionsMap.value(opt); - throw tr("Couldn't find specified connectionts (%1)").arg(opt.toString()); + throw tr("Couldn't find specified connectionts (%1)").arg(opt.toString()); } -void toConnectionRegistry::slotCurrentIndexChanged(int idx) +void toConnectionRegistry::slotViewIndexChanged(int idx) { if (idx == -1) { - m_currentConnection = s_noConnection; + m_currentConnection = QModelIndex(); return; // No connection } Q_ASSERT_X(idx < m_ConnectionsList.size(), qPrintable(__QHERE__), qPrintable(QString("Connection index out of range: %1").arg(idx))); QModelIndex i = index(idx, 0); QVariant val = data(i, Qt::UserRole); if (m_ConnectionsMap.contains(val.value<toConnectionOptions>())) - m_currentConnection = val.value<toConnectionOptions>(); + m_currentConnection = i; else throw tr("Can't find active connection"); } @@ -170,5 +174,3 @@ return m_ConnectionsList; } -toConnectionOptions toConnectionRegistry::s_noConnection = toConnectionOptions(); - Modified: trunk/tora/src/core/toconnectionregistry.h =================================================================== --- trunk/tora/src/core/toconnectionregistry.h 2013-10-16 20:37:18 UTC (rev 4880) +++ trunk/tora/src/core/toconnectionregistry.h 2013-10-17 12:06:52 UTC (rev 4881) @@ -65,7 +65,7 @@ */ // TODO - duno how to implement this // see void toChangeConnection::changeConnection(QAction *act) - void changeConnection(const toConnectionOptions &); + //void changeConnection(const toConnectionOptions &); /** * Get a list of currently open connections. @@ -97,13 +97,12 @@ void activeConnectionChanged(QModelIndex); private slots: - void slotCurrentIndexChanged(int); + void slotViewIndexChanged(int); private: - toConnectionOptions m_currentConnection; + QModelIndex m_currentConnection; QMap<toConnectionOptions, toConnection *> m_ConnectionsMap; QList<toConnection *> m_ConnectionsList; - static toConnectionOptions s_noConnection; }; typedef Loki::SingletonHolder<toConnectionRegistry> toConnectionRegistrySing; Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-10-16 20:37:18 UTC (rev 4880) +++ trunk/tora/src/core/tomain.cpp 2013-10-17 12:06:52 UTC (rev 4881) @@ -463,7 +463,7 @@ ConnectionSelection->setModel(&toConnectionRegistrySing::Instance()); //connect(ConnectionSelection, SIGNAL(activated(int)), this, SLOT(connectionSelectionChanged())); connect(ConnectionSelection, SIGNAL(currentIndexChanged(QString)), this, SLOT(connectionSelectionChanged())); - connect(ConnectionSelection, SIGNAL(currentIndexChanged(int)), &toConnectionRegistrySing::Instance(), SLOT(slotCurrentIndexChanged(int))); + connect(ConnectionSelection, SIGNAL(currentIndexChanged(int)), &toConnectionRegistrySing::Instance(), SLOT(slotViewIndexChanged(int))); addToolBarBreak(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-10-18 16:49:36
|
Revision: 4884 http://sourceforge.net/p/tora/code/4884 Author: ibre5041 Date: 2013-10-18 16:49:31 +0000 (Fri, 18 Oct 2013) Log Message: ----------- changeConnection when active tool changed Modified Paths: -------------- trunk/tora/src/core/toconnectionregistry.cpp trunk/tora/src/core/toconnectionregistry.h trunk/tora/src/core/toglobalsettingui.ui trunk/tora/src/core/tomain.cpp trunk/tora/src/core/tomain.h trunk/tora/src/core/totool.cpp trunk/tora/src/core/totool.h Modified: trunk/tora/src/core/toconnectionregistry.cpp =================================================================== --- trunk/tora/src/core/toconnectionregistry.cpp 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/toconnectionregistry.cpp 2013-10-18 16:49:31 UTC (rev 4884) @@ -57,14 +57,21 @@ return m_ConnectionsList.empty(); } -//void toConnectionRegistry::changeConnection(const toConnectionOptions &opts) -//{ -// if( m_ConnectionsMap.contains(opts)) -// m_currentConnection = opts; -// else -// throw QString("Unregistered connection(change): %1").arg(opts.toString()); -//} +void toConnectionRegistry::changeConnection(toConnection &conn) +{ + Q_ASSERT_X(m_ConnectionsMap.contains(conn.connectionOptions()) + , qPrintable(__QHERE__) + , qPrintable(QString("Unregistered connection(change): %1").arg(conn.connectionOptions().toString()))); + int oldIdx = m_currentConnection.row(); + m_currentConnection = index(m_ConnectionsList.indexOf(&conn)); + if (oldIdx != m_currentConnection.row()) + { + emit activeConnectionChanged(m_currentConnection); + emit activeConnectionChanged(m_currentConnection.row()); + } +} + int toConnectionRegistry::rowCount(const QModelIndex &) const { return m_ConnectionsList.size(); @@ -87,8 +94,10 @@ beginInsertRows(QModelIndex(), m_ConnectionsList.size(), m_ConnectionsList.size()); m_ConnectionsMap.insert(conn->connectionOptions(), conn); m_ConnectionsList.append(conn); - m_currentConnection = index(m_ConnectionsList.size()-1, 0); + m_currentConnection = index(m_ConnectionsList.size()-1); endInsertRows(); + emit activeConnectionChanged(m_currentConnection); + emit activeConnectionChanged(m_currentConnection.row()); } void toConnectionRegistry::removeConnection(toConnection *conn) @@ -113,8 +122,10 @@ beginRemoveRows(QModelIndex(), pos, pos); int mRemoved = m_ConnectionsMap.remove(conns.at(0)); m_ConnectionsList.removeAt(pos); - m_currentConnection = index(m_ConnectionsList.size()-1, 0); + m_currentConnection = index((std::min)(pos, m_ConnectionsList.size()-1)); endRemoveRows(); + emit activeConnectionChanged(m_currentConnection); + emit activeConnectionChanged(m_currentConnection.row()); } QVariant toConnectionRegistry::data(const QModelIndex &idx, int role) const @@ -141,7 +152,7 @@ toConnection& toConnectionRegistry::currentConnection() { - if (m_ConnectionsList.empty()) + if (m_ConnectionsList.empty() || m_currentConnection.row() == -1) throw tr("Can't find active connection"); return *m_ConnectionsList.at(m_currentConnection.row()); } @@ -155,18 +166,27 @@ void toConnectionRegistry::slotViewIndexChanged(int idx) { + Q_ASSERT_X(idx < m_ConnectionsList.size(), qPrintable(__QHERE__), qPrintable(QString("Connection index out of range: %1").arg(idx))); + + int oldIdx = m_currentConnection.row(); if (idx == -1) { m_currentConnection = QModelIndex(); - return; // No connection + Q_ASSERT_X(m_ConnectionsMap.empty() && m_ConnectionsList.empty() + , qPrintable(__QHERE__) + , "Dangling connection found"); + } else { + m_currentConnection = index(idx); + Q_ASSERT_X(m_ConnectionsMap.contains(data(m_currentConnection, Qt::UserRole).value<toConnectionOptions>()) + , qPrintable(__QHERE__) + , "Can't find active connection"); } - Q_ASSERT_X(idx < m_ConnectionsList.size(), qPrintable(__QHERE__), qPrintable(QString("Connection index out of range: %1").arg(idx))); - QModelIndex i = index(idx, 0); - QVariant val = data(i, Qt::UserRole); - if (m_ConnectionsMap.contains(val.value<toConnectionOptions>())) - m_currentConnection = i; - else - throw tr("Can't find active connection"); + + if (oldIdx != idx) + { + emit activeConnectionChanged(m_currentConnection); + emit activeConnectionChanged(m_currentConnection.row()); + } } QList<toConnection*> const& toConnectionRegistry::connections(void) const Modified: trunk/tora/src/core/toconnectionregistry.h =================================================================== --- trunk/tora/src/core/toconnectionregistry.h 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/toconnectionregistry.h 2013-10-18 16:49:31 UTC (rev 4884) @@ -63,9 +63,8 @@ /** Change current connection */ - // TODO - duno how to implement this // see void toChangeConnection::changeConnection(QAction *act) - //void changeConnection(const toConnectionOptions &); + void changeConnection(toConnection &); /** * Get a list of currently open connections. @@ -95,6 +94,7 @@ signals: void activeConnectionChanged(QModelIndex); + void activeConnectionChanged(int); private slots: void slotViewIndexChanged(int); Modified: trunk/tora/src/core/toglobalsettingui.ui =================================================================== --- trunk/tora/src/core/toglobalsettingui.ui 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/toglobalsettingui.ui 2013-10-18 16:49:31 UTC (rev 4884) @@ -343,9 +343,6 @@ </item> <item row="0" column="0"> <widget class="QCheckBox" name="ChangeConnection"> - <property name="enabled"> - <bool>false</bool> - </property> <property name="toolTip"> <string>Change currently select connection to the connection of the new active window</string> </property> Modified: trunk/tora/src/core/tomain.cpp =================================================================== --- trunk/tora/src/core/tomain.cpp 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/tomain.cpp 2013-10-18 16:49:31 UTC (rev 4884) @@ -89,6 +89,7 @@ , Workspace(toWorkSpaceSingle::Instance()) , Poll() , Connections(toConnectionRegistrySing::Instance()) + , lastToolWidget(NULL) { loggingWidget.setMaximumBlockCount(2000); loggingWidget.setCenterOnScroll(true); @@ -121,7 +122,7 @@ restoreGeometry(toConfigurationSingle::Instance().mainWindowGeometry()); restoreState(toConfigurationSingle::Instance().mainWindowState()); - enableConnectionActions(false); + //enableConnectionActions(false); QString defName(toConfigurationSingle::Instance().defaultTool()); for (ToolsRegistrySing::ObjectType::iterator k = ToolsRegistrySing::Instance().begin(); @@ -461,11 +462,10 @@ ConnectionSelection->setFocusPolicy(Qt::NoFocus); connectionToolbar->addWidget(ConnectionSelection); ConnectionSelection->setModel(&toConnectionRegistrySing::Instance()); - //connect(ConnectionSelection, SIGNAL(activated(int)), this, SLOT(connectionSelectionChanged())); - connect(ConnectionSelection, SIGNAL(currentIndexChanged(QString)), this, SLOT(connectionSelectionChanged())); connect(ConnectionSelection, SIGNAL(currentIndexChanged(int)), &toConnectionRegistrySing::Instance(), SLOT(slotViewIndexChanged(int))); + connect(&toConnectionRegistrySing::Instance(), SIGNAL(activeConnectionChanged(int)), ConnectionSelection, SLOT(setCurrentIndex(int))); + connect(&toConnectionRegistrySing::Instance(), SIGNAL(activeConnectionChanged(QModelIndex)), this, SLOT(connectionSelectionChanged())); - addToolBarBreak(); toolsToolbar = Utils::toAllocBar(this, tr("Tools")); @@ -947,13 +947,7 @@ void toMain::addConnection(toConnection *newconn) { Connections.addConnection(newconn); - ConnectionSelection->setCurrentIndex(ConnectionSelection->count() - 1); - if (ConnectionSelection->count() == 1) - enableConnectionActions(true); - - checkCaching(); - connectionSelectionChanged(); // New connection was added - create a default tool for it createDefault(); } @@ -1013,63 +1007,9 @@ return false; Connections.removeConnection(&conn); - - int pos = ConnectionSelection->currentIndex(); - if (ConnectionSelection->count()) - ConnectionSelection->setCurrentIndex((std::max)(pos - 1, 0)); - - if (ConnectionSelection->count() == 0) - enableConnectionActions(false); - else - connectionSelectionChanged(); return true; } -void toMain::enableConnectionActions(bool enabled) -{ - // now, loop through tools and enable/disable - try - { - stopAct->setEnabled(false); - closeConn->setEnabled(enabled); - refreshAct->setEnabled(enabled); - openAct->setEnabled(enabled); - recentMenu->setEnabled(enabled); - - // Handle situation when there are no connections open - if(toConnectionRegistrySing::Instance().isEmpty()) - { - for (ToolsRegistrySing::ObjectType::iterator i = ToolsRegistrySing::Instance().begin(); i != ToolsRegistrySing::Instance().end(); ++i) - { - toTool *pTool = i.value(); - pTool->enableAction(false); - } - return; - } - - toConnection &conn = toConnectionRegistrySing::Instance().currentConnection(); - commitAct->setEnabled(conn.needCommit()); - rollbackAct->setEnabled(conn.needCommit()); - - for (ToolsRegistrySing::ObjectType::iterator i = ToolsRegistrySing::Instance().begin(); i != ToolsRegistrySing::Instance().end(); ++i) - { - toTool *pTool = i.value(); - if (!pTool) - continue; - - if (!enabled) - pTool->enableAction(false); - else - pTool->enableAction(conn); - } - } catch(QString const& e) { - TLOG(1, toDecorator, __HERE__) << " Ignored exception." << e << std::endl; - } catch(...) { - TLOG(1, toDecorator, __HERE__) << " Ignored exception." << std::endl; - } -} - - void toMain::closeEvent(QCloseEvent *event) { toWorkSpaceSingle::Instance().closeAllToolWidgets(); @@ -1169,7 +1109,24 @@ void toMain::connectionSelectionChanged(void) { - enableConnectionActions(true); + // Handle the situation when there are no connections open + if(toConnectionRegistrySing::Instance().isEmpty()) + { + for (ToolsRegistrySing::ObjectType::iterator i = ToolsRegistrySing::Instance().begin(); i != ToolsRegistrySing::Instance().end(); ++i) + { + (*i)->enableAction(false); + } + closeConn->setDisabled(true); + return; + } + + closeConn->setEnabled(true); + + toConnection const& conn = toConnectionRegistrySing::Instance().currentConnection(); + for (ToolsRegistrySing::ObjectType::iterator i = ToolsRegistrySing::Instance().begin(); i != ToolsRegistrySing::Instance().end(); ++i) + { + (*i)->enableAction(conn); + } } void toMain::editOpenFile(const QString &file) @@ -1244,6 +1201,7 @@ void toMain::slotActiveToolChaged(toToolWidget *tool) { setNeedCommit(tool, tool ? tool->hasTransaction() : false); + lastToolWidget = tool; } void toMain::checkCaching(void) Modified: trunk/tora/src/core/tomain.h =================================================================== --- trunk/tora/src/core/tomain.h 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/tomain.h 2013-10-18 16:49:31 UTC (rev 4884) @@ -68,6 +68,7 @@ class toMessage; class toTool; class toToolWidget; +class toToolWidget; class toTreeWidget; class toTreeWidgetItem; class toWorkSpace; @@ -86,7 +87,7 @@ /** * enable or disable buttons that need an active connection */ - void enableConnectionActions(bool enabled); + // void enableConnectionActions(bool enabled); void createActions(); void createMenus(); @@ -334,6 +335,8 @@ QAction *windowCloseAct, *windowCloseAllAct; QPlainTextEdit &loggingWidget; + + toToolWidget *lastToolWidget; }; #endif Modified: trunk/tora/src/core/totool.cpp =================================================================== --- trunk/tora/src/core/totool.cpp 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/totool.cpp 2013-10-18 16:49:31 UTC (rev 4884) @@ -96,6 +96,8 @@ Connection = &conn; // 1st change "registration" to toConnection oldConnection->delWidget(Widget); // then notify old connection about the change Connection->addWidget(Widget); + if (toConfigurationSingle::Instance().changeConnection()) + toConnectionRegistrySing::Instance().changeConnection(conn); } toConnectionWidget::~toConnectionWidget() @@ -404,7 +406,7 @@ getAction()->setEnabled(en); } -void toTool::enableAction(toConnection &conn) +void toTool::enableAction(toConnection const& conn) { enableAction(canHandle(conn)); } Modified: trunk/tora/src/core/totool.h =================================================================== --- trunk/tora/src/core/totool.h 2013-10-18 16:47:29 UTC (rev 4883) +++ trunk/tora/src/core/totool.h 2013-10-18 16:49:31 UTC (rev 4884) @@ -205,7 +205,7 @@ /** * Enable/disable tool's QAction if tool can support conn. */ - void enableAction(toConnection &conn); + void enableAction(toConnection const& conn); /** * Set action visibility if tool can support toConnection This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-10-18 17:02:27
|
Revision: 4885 http://sourceforge.net/p/tora/code/4885 Author: ibre5041 Date: 2013-10-18 17:02:22 +0000 (Fri, 18 Oct 2013) Log Message: ----------- changeConnection when active tool changed Modified Paths: -------------- trunk/tora/src/core/totool.cpp trunk/tora/src/core/totool.h Modified: trunk/tora/src/core/totool.cpp =================================================================== --- trunk/tora/src/core/totool.cpp 2013-10-18 16:49:31 UTC (rev 4884) +++ trunk/tora/src/core/totool.cpp 2013-10-18 17:02:22 UTC (rev 4885) @@ -141,8 +141,8 @@ Timer = NULL; - toWorkSpace &ws = toWorkSpaceSingle::Instance(); - connect(&ws, SIGNAL(activeToolChaged(toToolWidget*)), this, SLOT(slotWindowActivated(toToolWidget*))); + connect(&toWorkSpaceSingle::Instance(), SIGNAL(activeToolChaged(toToolWidget*)), this, SLOT(slotWindowActivated(toToolWidget*))); + connect(&toWorkSpaceSingle::Instance(), SIGNAL(activeToolChaged(toToolWidget*)), this, SLOT(toolActivated(toToolWidget*))); if (parent) { @@ -310,6 +310,12 @@ } #endif +void toToolWidget::toolActivated(toToolWidget *tool) +{ + if (tool == this && toConfigurationSingle::Instance().changeConnection()) + toConnectionRegistrySing::Instance().changeConnection(connection()); +} + toToolWidget* toToolWidget::currentTool(QObject *cur) { while (cur) Modified: trunk/tora/src/core/totool.h =================================================================== --- trunk/tora/src/core/totool.h 2013-10-18 16:49:31 UTC (rev 4884) +++ trunk/tora/src/core/totool.h 2013-10-18 17:02:22 UTC (rev 4885) @@ -423,6 +423,7 @@ private slots: void parentConnection(void); virtual void slotWindowActivated(toToolWidget*) = 0; + void toolActivated(toToolWidget*); private: toTimer *Timer; toTool &Tool; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-06 13:56:25
|
Revision: 4924 http://sourceforge.net/p/tora/code/4924 Author: ibre5041 Date: 2013-11-06 13:56:12 +0000 (Wed, 06 Nov 2013) Log Message: ----------- fixup Modified Paths: -------------- trunk/tora/src/core/toconf.h trunk/tora/src/core/toconfigurationpriv.cpp Modified: trunk/tora/src/core/toconf.h =================================================================== --- trunk/tora/src/core/toconf.h 2013-11-06 13:28:07 UTC (rev 4923) +++ trunk/tora/src/core/toconf.h 2013-11-06 13:56:12 UTC (rev 4924) @@ -153,8 +153,6 @@ // tosqlconnection #define CONF_MYSQL_HOME "MYSQL_HOME" #define CONF_PGSQL_HOME "PGSQL_HOME" -#define CONF_ONLY_FORWARD "OnlyForward" -#define DEFAULT_ONLY_FORWARD true #define CONF_CREATE_ACTION "BeforeCreateAction" #define DEFAULT_CREATE_ACTION 0 // main.cpp Modified: trunk/tora/src/core/toconfigurationpriv.cpp =================================================================== --- trunk/tora/src/core/toconfigurationpriv.cpp 2013-11-06 13:28:07 UTC (rev 4923) +++ trunk/tora/src/core/toconfigurationpriv.cpp 2013-11-06 13:56:12 UTC (rev 4924) @@ -162,7 +162,6 @@ m_maxLong = s.value(CONF_MAX_LONG, DEFAULT_MAX_LONG).toInt(); // toqsqlconnection - m_onlyForward = s.value(CONF_ONLY_FORWARD, DEFAULT_ONLY_FORWARD).toBool(); m_beforeCreateAction = s.value(CONF_CREATE_ACTION, DEFAULT_CREATE_ACTION).toInt(); // main.cpp m_lastVersion = s.value(CONF_LAST_VERSION, "").toString(); @@ -418,7 +417,6 @@ s.setValue(CONF_MAX_LONG, m_maxLong); // toqsqlconnection - s.setValue(CONF_ONLY_FORWARD, m_onlyForward); s.setValue(CONF_CREATE_ACTION, m_beforeCreateAction); // main.cpp s.setValue(CONF_LAST_VERSION, m_lastVersion); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-11 15:44:26
|
Revision: 4937 http://sourceforge.net/p/tora/code/4937 Author: ibre5041 Date: 2013-11-11 15:44:21 +0000 (Mon, 11 Nov 2013) Log Message: ----------- Users cache Modified Paths: -------------- trunk/tora/src/core/toresultschema.cpp trunk/tora/src/core/toresultschema.h Modified: trunk/tora/src/core/toresultschema.cpp =================================================================== --- trunk/tora/src/core/toresultschema.cpp 2013-11-11 15:05:14 UTC (rev 4936) +++ trunk/tora/src/core/toresultschema.cpp 2013-11-11 15:44:21 UTC (rev 4937) @@ -128,9 +128,25 @@ SelectedFound = true; } } - slotQueryDone(); + toResultCombo::slotQueryDone(); // Combo list changed => do select the right field } +void toResultSchema::slotQueryDone(void) +{ + QAbstractItemModel const* m = model(); + QList<toCache::CacheEntry*> users; + + for(int i = 0; i < m->rowCount(); i++) + { + QModelIndex idx = m->index(i, 0); + QString s = m->data(idx).toString(); + if (Additional.contains(s)) + continue; + users << new toCacheEntryUser(s); + } + connection().getCache().upsertUserList(users); +} + void toResultSchema::refresh(void) { try { Modified: trunk/tora/src/core/toresultschema.h =================================================================== --- trunk/tora/src/core/toresultschema.h 2013-11-11 15:05:14 UTC (rev 4936) +++ trunk/tora/src/core/toresultschema.h 2013-11-11 15:44:21 UTC (rev 4937) @@ -75,6 +75,8 @@ // refreshes user list from connections cache, no query is executed void slotUsersFromCache(void); + + void slotQueryDone(); // Overridden but NOT virtual private: void init(toConnection &conn); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-14 22:34:31
|
Revision: 4939 http://sourceforge.net/p/tora/code/4939 Author: ibre5041 Date: 2013-11-14 22:34:27 +0000 (Thu, 14 Nov 2013) Log Message: ----------- override cursor only from the main thread - fixes SEGFAULT Modified Paths: -------------- trunk/tora/src/core/utils.cpp trunk/tora/src/core/utils.h Modified: trunk/tora/src/core/utils.cpp =================================================================== --- trunk/tora/src/core/utils.cpp 2013-11-13 17:19:38 UTC (rev 4938) +++ trunk/tora/src/core/utils.cpp 2013-11-14 22:34:27 UTC (rev 4939) @@ -42,9 +42,11 @@ #include "core/toqvalue.h" #include "core/toquery.h" +#include <QtCore/QTextCodec> +#include <QtCore/QThread> +#include <QtGui/QApplication> #include <QtGui/QComboBox> #include <QtGui/QFileDialog> -#include <QtCore/QTextCodec> #include <QtGui/QToolBar> #include <QtGui/QStyleFactory> #include <QtGui/QPixmapCache> @@ -760,18 +762,21 @@ toBusy::toBusy() { - if (m_busyCount.fetchAndAddAcquire(1) == 0 && m_enabled) + if (m_mainThread == NULL) + m_mainThread = qApp->thread(); + if (m_mainThread == QThread::currentThread() && m_busyCount.fetchAndAddAcquire(1) == 0 && m_enabled) qApp->setOverrideCursor(Qt::WaitCursor); } toBusy::~toBusy() { - if (m_busyCount.deref() == false) + if (m_mainThread == QThread::currentThread() && m_busyCount.deref() == false) qApp->restoreOverrideCursor(); } bool toBusy::m_enabled(true); QAtomicInt toBusy::m_busyCount(0); +QThread *toBusy::m_mainThread(NULL); QToolBar *toAllocBar(QWidget *parent, const QString &str) { Modified: trunk/tora/src/core/utils.h =================================================================== --- trunk/tora/src/core/utils.h 2013-11-13 17:19:38 UTC (rev 4938) +++ trunk/tora/src/core/utils.h 2013-11-14 22:34:27 UTC (rev 4939) @@ -307,6 +307,7 @@ static bool m_enabled; // disabled when main application window is already closed private: static QAtomicInt m_busyCount; + static QThread* m_mainThread; // no nothing if instantiated from bg thread }; /** Display a message in the statusbar of the main window. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-22 22:01:25
|
Revision: 4948 http://sourceforge.net/p/tora/code/4948 Author: ibre5041 Date: 2013-11-22 22:01:21 +0000 (Fri, 22 Nov 2013) Log Message: ----------- Modified Paths: -------------- trunk/tora/src/core/toresultdata.cpp trunk/tora/src/core/toresultdata.h trunk/tora/src/core/toresulttableviewedit.h Modified: trunk/tora/src/core/toresultdata.cpp =================================================================== --- trunk/tora/src/core/toresultdata.cpp 2013-11-21 19:56:22 UTC (rev 4947) +++ trunk/tora/src/core/toresultdata.cpp 2013-11-22 22:01:21 UTC (rev 4948) @@ -201,7 +201,7 @@ toConnection &conn = connection(); //conn std::list<QString> priKeys = conn.primaryKeys(); SQL = "SELECT "; - std::list<QString>::iterator ite; + //std::list<QString>::iterator ite; //conn for(ite=priKeys.begin();ite!=priKeys.end();ite++) // SQL = SQL + *ite + ","; SQL = SQL + "%2.* FROM %1.%2"; @@ -230,20 +230,6 @@ Edit->clearData(); } -void toResultData::exportData(std::map<QString, QString> &data, - const QString &prefix) -{ - ; // stub -} - - -void toResultData::importData(std::map<QString, QString> &data, - const QString &prefix) -{ - ; // stub -} - - void toResultData::closeEvent(QCloseEvent *event) { if (maybeSave()) Modified: trunk/tora/src/core/toresultdata.h =================================================================== --- trunk/tora/src/core/toresultdata.h 2013-11-21 19:56:22 UTC (rev 4947) +++ trunk/tora/src/core/toresultdata.h 2013-11-22 22:01:21 UTC (rev 4948) @@ -131,28 +131,7 @@ return true; } - /** - * Export data to a map. - * - * @param data A map that can be used to recreate the data of a chart. - * @param prefix Prefix to add to the map. - */ - virtual void exportData(std::map<QString, QString> &data, - const QString &prefix); - - - /** - * Import data - * - * @param data Data to read from a map. - * @param prefix Prefix to read data from. - */ - virtual void importData(std::map<QString, QString> &data, - const QString &prefix); - - - /** * Prompt to save if modified. * */ Modified: trunk/tora/src/core/toresulttableviewedit.h =================================================================== --- trunk/tora/src/core/toresulttableviewedit.h 2013-11-21 19:56:22 UTC (rev 4947) +++ trunk/tora/src/core/toresulttableviewedit.h 2013-11-22 22:01:21 UTC (rev 4948) @@ -84,6 +84,7 @@ QString Owner, Table; + // this code is duplicate to toResultModelEdit unsigned commitDelete(ChangeSet &change, toConnection &conn); unsigned commitAdd(ChangeSet &change, toConnection &conn); unsigned commitUpdate(ChangeSet &change, toConnection &conn); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-25 17:20:35
|
Revision: 4949 http://sourceforge.net/p/tora/code/4949 Author: ibre5041 Date: 2013-11-25 17:20:28 +0000 (Mon, 25 Nov 2013) Log Message: ----------- A lot of code moved from toResultTableViewEdit into toResultModelEdit toResultModelEdit contains a lot of duplicate code now. Modified Paths: -------------- trunk/tora/src/core/toresultdata.cpp trunk/tora/src/core/toresultdata.h trunk/tora/src/core/toresultmodeledit.cpp trunk/tora/src/core/toresultmodeledit.h trunk/tora/src/core/toresulttableviewedit.cpp trunk/tora/src/core/toresulttableviewedit.h Modified: trunk/tora/src/core/toresultdata.cpp =================================================================== --- trunk/tora/src/core/toresultdata.cpp 2013-11-22 22:01:21 UTC (rev 4948) +++ trunk/tora/src/core/toresultdata.cpp 2013-11-25 17:20:28 UTC (rev 4949) @@ -33,11 +33,12 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "core/toresultdata.h" - #include "core/utils.h" #include "core/toconf.h" #include "core/toconfiguration.h" #include "core/toresultdatasingle.h" +#include "core/toresulttableviewedit.h" +#include "core/toresultmodeledit.h" #include "core/toconnectiontraits.h" #include "ui_toresultcontentfilterui.h" @@ -118,7 +119,7 @@ addAct = toolbar->addAction( QIcon(QPixmap(const_cast<const char**>(addrecord_xpm))), tr("Add a new record")); - connect(addAct, SIGNAL(triggered()), this, SLOT(addRecord())); + connect(addAct, SIGNAL(triggered()), Edit, SLOT(addRecord())); duplicateAct = toolbar->addAction( QIcon(QPixmap(const_cast<const char**>(duplicaterecord_xpm))), @@ -366,7 +367,9 @@ bool toResultData::maybeSave(void) { - if (!Edit->changed()) + if (Edit->editModel() == NULL) + return true; + if (!Edit->editModel()->changed()) return true; if (!isVisible()) return true; @@ -442,18 +445,10 @@ emit changesSaved(); } - -void toResultData::addRecord() +void toResultData::refreshWarn() { - Edit->addRecord(); - // don't navigate here. done by Edit. -// navigate(lastAct); -} - -void toResultData::refreshWarn() -{ - if (Edit->changed()) + if (Edit->editModel() && Edit->editModel()->changed()) { switch (TOMessageBox( QMessageBox::Warning, Modified: trunk/tora/src/core/toresultdata.h =================================================================== --- trunk/tora/src/core/toresultdata.h 2013-11-22 22:01:21 UTC (rev 4948) +++ trunk/tora/src/core/toresultdata.h 2013-11-25 17:20:28 UTC (rev 4949) @@ -35,8 +35,6 @@ #ifndef TORESULTDATA_H #define TORESULTDATA_H - -#include "core/toresulttableviewedit.h" #include "core/tosql.h" #include "core/toresult.h" #include "core/toconnection.h" @@ -48,6 +46,7 @@ class QAction; class toResultDataSingle; +class toResultTableViewEdit; class QCloseEvent; @@ -156,7 +155,6 @@ void singleRecordForm(bool display); void updateForm(void); void save(void); - void addRecord(void); void refreshWarn(void); }; Modified: trunk/tora/src/core/toresultmodeledit.cpp =================================================================== --- trunk/tora/src/core/toresultmodeledit.cpp 2013-11-22 22:01:21 UTC (rev 4948) +++ trunk/tora/src/core/toresultmodeledit.cpp 2013-11-25 17:20:28 UTC (rev 4949) @@ -150,6 +150,11 @@ emit headerDataChanged(Qt::Vertical, 0, Rows.size() - 1); } +bool toResultModelEdit::changed(void) +{ + return !Changes.isEmpty(); +} + bool toResultModelEdit::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, @@ -485,3 +490,387 @@ } } } + +QList<struct toResultModelEdit::ChangeSet>& toResultModelEdit::changes() +{ + return Changes; +} + +void toResultModelEdit::revertChanges() +{ + bool c = changed(); + Changes.clear(); + emit changed(changed()); +} + +unsigned toResultModelEdit::commitDelete(ChangeSet &change, toConnection &conn) +{ + const toResultModel::HeaderList Headers = headers(); + bool oracle = conn.providerIs("Oracle"); + + QString sql = QString("DELETE FROM %1.%2 ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + sql += (" WHERE "); + int col = 1; + bool where = false; + for (toQuery::Row::iterator j = change.row.begin() + 1; + j != change.row.end(); + j++, col++) + { + if ((*j).isComplexType()) + { + Utils::toStatusMessage(tr("This table contains complex/user defined columns " + "and can not be edited")); + return 0; + } + + if (!oracle || (!Headers[col].datatype.toUpper().startsWith(("LONG")) && + !Headers[col].datatype.toUpper().contains(("LOB")))) + { + if (where) + sql += " AND "; + else + where = true; + + sql += conn.getTraits().quote(Headers[col].name); + + if ((*j).isNull()) + sql += " IS NULL"; + else + { + sql += "= :c"; + sql += QString::number(col); + if ((*j).isBinary()) + sql += "<raw_long>"; + else + sql += "<char[4000]>"; + } + } + } + + if (!where) + { + Utils::toStatusMessage(tr("This table contains only LOB/LONG columns and can not be edited")); + return 0; + } + + toQueryParams args; + for (int i = 1; i < change.row.size(); i++) + { + if (!change.row[i].isNull() && (!oracle || (!Headers[i].datatype.startsWith(("LONG")) && + !Headers[i].datatype.toUpper().contains(("LOB"))))) + { + args << change.row[i]; + } + } + + { + toConnectionSubLoan c(conn); + toQuery q(c, sql, args); + + if (toConfigurationSingle::Instance().autoCommit()) + c->commit(); + else + { + throw QString("Not implemented yet. %1").arg(__QHERE__); + //// TODO toGlobalEventSingle::Instance().setNeedCommit(conn); + } + return q.rowsProcessed(); + } +} + + +unsigned toResultModelEdit::commitAdd(ChangeSet &change, toConnection &conn) +{ + const toResultModel::HeaderList Headers = headers(); + + QString sql = QString("INSERT INTO %1.%2 (").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + + int num = 0; + for (int i = 1; i < change.row.size(); i++) + { + if (num > 0) + sql += ","; + sql += conn.getTraits().quote(headerData( + i, + Qt::Horizontal, + Qt::DisplayRole).toString()); + num++; + } + + sql += ") VALUES ("; + int col = 1; + for (toQuery::Row::iterator j = change.row.begin() + 1; + j != change.row.end(); + j++, col++) + { + if ((*j).isComplexType()) + { + Utils::toStatusMessage(tr("This table contains complex/user defined columns " + "and can not be edited")); + return 0; + } + + if (col > 1) + sql += (","); + sql += (":f"); + sql += QString::number(col); + + if ((*j).isBinary()) + { + if (Headers[col].datatype.toUpper().contains("LOB")) + sql += ("<blob,in>"); + else + sql += ("<raw_long,in>"); + } + else + { + if (Headers[col].datatype.toUpper().contains("LOB")) + sql += ("<varchar_long,in>"); + else + sql += ("<char[4000],in>"); + } + } + + sql += (")"); + + toQueryParams args; + for (int i = 1; i < change.row.size(); i++) + args << change.row[i]; + + { + toConnectionSubLoan c(conn); + toQuery q(c, sql, args); + + if (toConfigurationSingle::Instance().autoCommit()) + c->commit(); + else + { + throw QString("Not implemented yet. %1").arg(__QHERE__); + //toGlobalEventSingle::Instance().setNeedCommit(conn); + } + return q.rowsProcessed(); + } +} + +unsigned toResultModelEdit::commitUpdate(ChangeSet &change, toConnection &conn) +{ + const toResultModel::HeaderList Headers = headers(); + bool oracle = conn.providerIs("Oracle"); + + QString sql = QString("UPDATE %1.%2 SET ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + sql += conn.getTraits().quote(change.columnName); + + // set new value in update statement + if (change.newValue.isNull()) + sql += (" = NULL"); + else + { + sql += ("= :f0"); + + if (change.row[change.column].isBinary()) + { + if (Headers[change.column].datatype.toUpper().contains("LOB")) + sql += ("<blob,in>"); + else + sql += ("<raw_long,in>"); + } + else + { + if (Headers[change.column].datatype.toUpper().contains("LOB")) + sql += ("<varchar_long,in>"); + else + sql += ("<char[4000],in>"); + } + } + + // set where clause for update statement + sql += (" WHERE ("); + int col = 1; + bool where = false; + + for (toQuery::Row::iterator j = change.row.begin() + 1; + j != change.row.end(); + j++, col++) + { + + QString columnName = conn.getTraits().quote(headerData( + col, + Qt::Horizontal, + Qt::DisplayRole).toString()); + + if ((*j).isComplexType()) + { + Utils::toStatusMessage(tr("This table contains complex/user defined columns " + "and can not be edited")); + return 0; + } + + if (!oracle || (!Headers[col].datatype.toUpper().startsWith(("LONG")) && + !Headers[col].datatype.toUpper().contains(("LOB")))) + { + if (where) + sql += (" AND ("); + else + where = true; + + sql += columnName; + + if ((*j).isNull()) + { + sql += " IS NULL "; + + // QVariant cannot identify the type when value is null therefore + // we use the actual database type for this check. + if (Headers[col].datatype.startsWith("NUMBER") || + Headers[col].datatype.startsWith("INT") || + Headers[col].datatype.startsWith("DATE")) + sql += ")"; + else + { + sql += " OR " + columnName + " = :c"; + sql += QString::number(col); + if ((*j).isBinary()) + sql += ("<raw_long,in>)"); + else + sql += ("<char[4000],in>)"); + } + } + else + { + sql += " = :c"; + sql += QString::number(col); + if ((*j).isBinary()) + sql += ("<raw_long,in>)"); + else + sql += ("<char[4000],in>)"); + } + } + } + + if (!where) + { + Utils::toStatusMessage(tr("This table contains only LOB/LONG " + "columns and can not be edited")); + return 0; + } + + toQueryParams args; + + // the "SET = " value + if (!change.newValue.isNull()) + args << change.newValue; + + col = 1; + for (toQuery::Row::iterator j = change.row.begin() + 1; + j != change.row.end(); + j++, col++) + { + if (!oracle || (!Headers[col].datatype.toUpper().startsWith(("LONG")) && + !Headers[col].datatype.toUpper().contains(("LOB")))) + { + if ((*j).isNull()) + { + if (!Headers[col].datatype.startsWith("NUMBER") && + !Headers[col].datatype.startsWith("INT") && + !Headers[col].datatype.startsWith("DATE")) + args << toQValue(QString("")); + // else don't push null for numbers + } + else + args << (*j); + } + } + + { + toConnectionSubLoan c(conn); + toQuery q(c, sql, args); + if (toConfigurationSingle::Instance().autoCommit()) + c->commit(); + else + { + throw QString("Not implemented yet. %1").arg(__QHERE__); + ///toGlobalEventSingle::Instance().setNeedCommit(conn); + } + return q.rowsProcessed(); + } +} + +void toResultModelEdit::recordChange(const QModelIndex &index, + const toQValue &newValue, + const toQuery::Row &row) +{ + // first, if it was an added row, find and update the ChangeSet so + // they all get inserted as one. + toQValue rowDesc = row[0]; + for (int changeIndex = 0; changeIndex < Changes.size(); changeIndex++) + { + if (Changes[changeIndex].kind == Add && Changes[changeIndex].row[0].getRowDesc().key == rowDesc.getRowDesc().key) + { + Changes[changeIndex].row[index.column()] = newValue; + return; + } + } + + // don't record if not changed + if (newValue == row[index.column()]) + return; + + + struct ChangeSet change; + + change.columnName = headerData(index.column(), + Qt::Horizontal, + Qt::DisplayRole).toString(); + change.newValue = newValue; + change.row = row; + change.column = index.column(); + change.kind = Update; + + Changes.append(change); + emit changed(changed()); +} + + +void toResultModelEdit::recordAdd(const toQuery::Row &row) +{ + struct ChangeSet change; + + change.row = row; + change.kind = Add; + + Changes.append(change); + emit changed(changed()); +} + + +void toResultModelEdit::recordDelete(const toQuery::Row &row) +{ + // Loop through all previously recorded changes. If there is an insert (add) + // statement for the row being deleted - remove it (as there is no point of + // trying to insert a possibly bad row and throw exceptions then that row + // must be deleted). + QMutableListIterator<struct ChangeSet> j(Changes); + struct ChangeSet cs; + bool insertFound = false; + while (j.hasNext() && !insertFound) + { + cs = j.next(); + if ((cs.row[0].getRowDesc().key == row[0].getRowDesc().key) && + (cs.kind == Add)) + { + j.remove(); + insertFound = true; + } + } + + if (!insertFound) + { + struct ChangeSet change; + + change.row = row; + change.kind = Delete; + + Changes.append(change); + } + emit changed(changed()); +} Modified: trunk/tora/src/core/toresultmodeledit.h =================================================================== --- trunk/tora/src/core/toresultmodeledit.h 2013-11-22 22:01:21 UTC (rev 4948) +++ trunk/tora/src/core/toresultmodeledit.h 2013-11-25 17:20:28 UTC (rev 4949) @@ -49,7 +49,30 @@ class toResultModelEdit : public toResultModel { Q_OBJECT; + friend class toResultTableViewEdit; +protected: + enum ChangeKind + { + Add, + Delete, + Update + }; + struct ChangeSet + { + ChangeKind kind; /* sql change mode */ + QString columnName; /* column name */ + int column; /* the real column number + * after adjusting for + * numbercolumn */ + toQValue newValue; /* data after the change */ + toQuery::Row row; /* data before the change */ + }; + + // keep a history of changes to commit. + // this is a fifo -- don't sort or insert. just append. + QList<struct ChangeSet> Changes; + public: toResultModelEdit(toEventQuery *query, std::list<QString> priKeys, @@ -89,6 +112,11 @@ void clearStatus(); /** + * True if data has been modified. (moved from toResultTableViewEdit) + */ + bool changed(void); + + /** * Sets the role data for the item at index to value. Returns true * if successful; otherwise returns false. * @@ -164,12 +192,38 @@ */ void commitChanges(toConnection &conn, unsigned int &updated, unsigned int &added, unsigned int &deleted); + QList<struct ChangeSet>& changes(); + + void revertChanges(); + protected: void commitUpdate(toConnection &conn, const toQuery::Row &row, unsigned int &updated); void commitAdd(toConnection &conn, const toQuery::Row &row, unsigned int &added); void commitDelete(toConnection &conn, const toQuery::Row &row, unsigned int &deleted); + // this code is duplicate to toResultModelEdit (moved from toResultTableViewEdit) + unsigned commitUpdate(ChangeSet &change, toConnection &conn); + unsigned commitAdd(ChangeSet &change, toConnection &conn); + unsigned commitDelete(ChangeSet &change, toConnection &conn); + + /** + * Append change to Changes + */ + void recordChange(const QModelIndex &, + const toQValue &, + const toQuery::Row &); + + /** + * Append a new row to Changes + */ + void recordAdd(const toQuery::Row &); + + /** + * Record a deletion in Changes + */ + void recordDelete(const toQuery::Row &); + signals: /** @@ -192,6 +246,11 @@ */ void rowDeleted(const toQuery::Row &row); + /** + * Parameter is true after changes, false after save or load. + */ + void changed(bool edit); + private: //std::list<QString> PriKeys; QString Owner, Table; Modified: trunk/tora/src/core/toresulttableviewedit.cpp =================================================================== --- trunk/tora/src/core/toresulttableviewedit.cpp 2013-11-22 22:01:21 UTC (rev 4948) +++ trunk/tora/src/core/toresulttableviewedit.cpp 2013-11-25 17:20:28 UTC (rev 4949) @@ -83,9 +83,9 @@ } toResultTableView::query(SQL, toQueryParams(), priKeys); - +#if 0 emit changed(false); - +#endif if (!Model) return; // error @@ -135,393 +135,22 @@ return dynamic_cast<toResultModelEdit *>(Model.data()); } - void toResultTableViewEdit::slotHandleDoubleClick(const QModelIndex &) { // do nothing, when editable toResultTableView was clicked } -void toResultTableViewEdit::recordChange(const QModelIndex &index, - const toQValue &newValue, - const toQuery::Row &row) -{ - // first, if it was an added row, find and update the ChangeSet so - // they all get inserted as one. - toQValue rowDesc = row[0]; - for (int changeIndex = 0; changeIndex < Changes.size(); changeIndex++) - { - if (Changes[changeIndex].kind == Add && Changes[changeIndex].row[0].getRowDesc().key == rowDesc.getRowDesc().key) - { - Changes[changeIndex].row[index.column()] = newValue; - return; - } - } - - // don't record if not changed - if (newValue == row[index.column()]) - return; - - - struct ChangeSet change; - - change.columnName = model()->headerData(index.column(), - Qt::Horizontal, - Qt::DisplayRole).toString(); - change.newValue = newValue; - change.row = row; - change.column = index.column(); - change.kind = Update; - - Changes.append(change); - emit changed(changed()); -} - - -void toResultTableViewEdit::recordAdd(const toQuery::Row &row) -{ - struct ChangeSet change; - - change.row = row; - change.kind = Add; - - Changes.append(change); - emit changed(changed()); -} - - -void toResultTableViewEdit::recordDelete(const toQuery::Row &row) -{ - // Loop through all previously recorded changes. If there is an insert (add) - // statement for the row being deleted - remove it (as there is no point of - // trying to insert a possibly bad row and throw exceptions then that row - // must be deleted). - QMutableListIterator<struct ChangeSet> j(Changes); - struct ChangeSet cs; - bool insertFound = false; - while (j.hasNext() && !insertFound) - { - cs = j.next(); - if ((cs.row[0].getRowDesc().key == row[0].getRowDesc().key) && - (cs.kind == Add)) - { - j.remove(); - insertFound = true; - } - } - - if (!insertFound) - { - struct ChangeSet change; - - change.row = row; - change.kind = Delete; - - Changes.append(change); - } - emit changed(changed()); -} - - -unsigned toResultTableViewEdit::commitDelete(ChangeSet &change, toConnection &conn) -{ - const toResultModel::HeaderList Headers = Model->headers(); - bool oracle = conn.providerIs("Oracle"); - - QString sql = QString("DELETE FROM %1.%2 ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); - sql += (" WHERE "); - int col = 1; - bool where = false; - for (toQuery::Row::iterator j = change.row.begin() + 1; - j != change.row.end(); - j++, col++) - { - if ((*j).isComplexType()) - { - Utils::toStatusMessage(tr("This table contains complex/user defined columns " - "and can not be edited")); - return 0; - } - - if (!oracle || (!Headers[col].datatype.toUpper().startsWith(("LONG")) && - !Headers[col].datatype.toUpper().contains(("LOB")))) - { - if (where) - sql += " AND "; - else - where = true; - - sql += conn.getTraits().quote(Headers[col].name); - - if ((*j).isNull()) - sql += " IS NULL"; - else - { - sql += "= :c"; - sql += QString::number(col); - if ((*j).isBinary()) - sql += "<raw_long>"; - else - sql += "<char[4000]>"; - } - } - } - - if (!where) - { - Utils::toStatusMessage(tr("This table contains only LOB/LONG columns and can not be edited")); - return 0; - } - - toQueryParams args; - for (int i = 1; i < change.row.size(); i++) - { - if (!change.row[i].isNull() && (!oracle || (!Headers[i].datatype.startsWith(("LONG")) && - !Headers[i].datatype.toUpper().contains(("LOB"))))) - { - args << change.row[i]; - } - } - - { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); - - if (toConfigurationSingle::Instance().autoCommit()) - c->commit(); - else - { - throw QString("Not implemented yet. %1").arg(__QHERE__); - //// TODO toGlobalEventSingle::Instance().setNeedCommit(conn); - } - return q.rowsProcessed(); - } -} - - -unsigned toResultTableViewEdit::commitAdd(ChangeSet &change, toConnection &conn) -{ - const toResultModel::HeaderList Headers = Model->headers(); - - QString sql = QString("INSERT INTO %1.%2 (").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); - - int num = 0; - for (int i = 1; i < change.row.size(); i++) - { - if (num > 0) - sql += ","; - sql += conn.getTraits().quote(Model->headerData( - i, - Qt::Horizontal, - Qt::DisplayRole).toString()); - num++; - } - - sql += ") VALUES ("; - int col = 1; - for (toQuery::Row::iterator j = change.row.begin() + 1; - j != change.row.end(); - j++, col++) - { - if ((*j).isComplexType()) - { - Utils::toStatusMessage(tr("This table contains complex/user defined columns " - "and can not be edited")); - return 0; - } - - if (col > 1) - sql += (","); - sql += (":f"); - sql += QString::number(col); - - if ((*j).isBinary()) - { - if (Headers[col].datatype.toUpper().contains("LOB")) - sql += ("<blob,in>"); - else - sql += ("<raw_long,in>"); - } - else - { - if (Headers[col].datatype.toUpper().contains("LOB")) - sql += ("<varchar_long,in>"); - else - sql += ("<char[4000],in>"); - } - } - - sql += (")"); - - toQueryParams args; - for (int i = 1; i < change.row.size(); i++) - args << change.row[i]; - - { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); - - if (toConfigurationSingle::Instance().autoCommit()) - c->commit(); - else - { - throw QString("Not implemented yet. %1").arg(__QHERE__); - //toGlobalEventSingle::Instance().setNeedCommit(conn); - } - return q.rowsProcessed(); - } -} - -unsigned toResultTableViewEdit::commitUpdate(ChangeSet &change, toConnection &conn) -{ - const toResultModel::HeaderList Headers = Model->headers(); - bool oracle = conn.providerIs("Oracle"); - - QString sql = QString("UPDATE %1.%2 SET ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); - sql += conn.getTraits().quote(change.columnName); - - // set new value in update statement - if (change.newValue.isNull()) - sql += (" = NULL"); - else - { - sql += ("= :f0"); - - if (change.row[change.column].isBinary()) - { - if (Headers[change.column].datatype.toUpper().contains("LOB")) - sql += ("<blob,in>"); - else - sql += ("<raw_long,in>"); - } - else - { - if (Headers[change.column].datatype.toUpper().contains("LOB")) - sql += ("<varchar_long,in>"); - else - sql += ("<char[4000],in>"); - } - } - - // set where clause for update statement - sql += (" WHERE ("); - int col = 1; - bool where = false; - - for (toQuery::Row::iterator j = change.row.begin() + 1; - j != change.row.end(); - j++, col++) - { - - QString columnName = conn.getTraits().quote(Model->headerData( - col, - Qt::Horizontal, - Qt::DisplayRole).toString()); - - if ((*j).isComplexType()) - { - Utils::toStatusMessage(tr("This table contains complex/user defined columns " - "and can not be edited")); - return 0; - } - - if (!oracle || (!Headers[col].datatype.toUpper().startsWith(("LONG")) && - !Headers[col].datatype.toUpper().contains(("LOB")))) - { - if (where) - sql += (" AND ("); - else - where = true; - - sql += columnName; - - if ((*j).isNull()) - { - sql += " IS NULL "; - - // QVariant cannot identify the type when value is null therefore - // we use the actual database type for this check. - if (Headers[col].datatype.startsWith("NUMBER") || - Headers[col].datatype.startsWith("INT") || - Headers[col].datatype.startsWith("DATE")) - sql += ")"; - else - { - sql += " OR " + columnName + " = :c"; - sql += QString::number(col); - if ((*j).isBinary()) - sql += ("<raw_long,in>)"); - else - sql += ("<char[4000],in>)"); - } - } - else - { - sql += " = :c"; - sql += QString::number(col); - if ((*j).isBinary()) - sql += ("<raw_long,in>)"); - else - sql += ("<char[4000],in>)"); - } - } - } - - if (!where) - { - Utils::toStatusMessage(tr("This table contains only LOB/LONG " - "columns and can not be edited")); - return 0; - } - - toQueryParams args; - - // the "SET = " value - if (!change.newValue.isNull()) - args << change.newValue; - - col = 1; - for (toQuery::Row::iterator j = change.row.begin() + 1; - j != change.row.end(); - j++, col++) - { - if (!oracle || (!Headers[col].datatype.toUpper().startsWith(("LONG")) && - !Headers[col].datatype.toUpper().contains(("LOB")))) - { - if ((*j).isNull()) - { - if (!Headers[col].datatype.startsWith("NUMBER") && - !Headers[col].datatype.startsWith("INT") && - !Headers[col].datatype.startsWith("DATE")) - args << toQValue(QString("")); - // else don't push null for numbers - } - else - args << (*j); - } - } - - { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); - if (toConfigurationSingle::Instance().autoCommit()) - c->commit(); - else - { - throw QString("Not implemented yet. %1").arg(__QHERE__); - ///toGlobalEventSingle::Instance().setNeedCommit(conn); - } - return q.rowsProcessed(); - } -} - - bool toResultTableViewEdit::commitChanges(bool status) { // Check to make sure some changes were actually made if (!Model) return false; - if (Changes.size() < 1 && editModel()->getPriKeys().size() == 0) + toResultModelEdit * EditModel = editModel(); + Q_ASSERT_X(EditModel, qPrintable(__QHERE__), "Invalid instance of toResultModelEdit"); + QList<struct toResultModelEdit::ChangeSet>& Changes = EditModel->changes(); + + if (Changes.empty()) { if (status) Utils::toStatusMessage(tr("No changes made"), false, false); @@ -538,7 +167,7 @@ bool error = false; unsigned updated = 0, added = 0, deleted = 0; - if(editModel()->getPriKeys().size() == 0) + if(EditModel->getPriKeys().empty()) { // No primary keys for (int changeIndex = 0; changeIndex < Changes.size(); changeIndex++) @@ -550,18 +179,18 @@ try { - struct ChangeSet &change = Changes[changeIndex]; + struct toResultModelEdit::ChangeSet &change = Changes[changeIndex]; switch (change.kind) { - case Delete: - deleted += commitDelete(change, conn); + case toResultModelEdit::Delete: + deleted += EditModel->commitDelete(change, conn); break; - case Add: - added += commitAdd(change, conn); + case toResultModelEdit::Add: + added += EditModel->commitAdd(change, conn); break; - case Update: - updated += commitUpdate(change, conn); + case toResultModelEdit::Update: + updated += EditModel->commitUpdate(change, conn); break; default: Utils::toStatusMessage(tr("Internal error.")); @@ -605,8 +234,9 @@ , false, false); if (!error) Changes.clear(); - +#if 0 emit changed(changed()); +#endif return !error; } @@ -625,7 +255,10 @@ // where our changes are. // some cleanup work if (success) + { + Q_ASSERT_X(editModel(), qPrintable(__QHERE__), "commitChanges into NULL Model"); editModel()->clearStatus(); + } } TOCATCH } @@ -641,11 +274,10 @@ refresh(); } - void toResultTableViewEdit::revertChanges() { - Changes.clear(); - emit changed(changed()); + if (editModel()) + editModel()->revertChanges(); } void toResultTableViewEdit::handleNewRows(const QModelIndex &parent, @@ -668,12 +300,14 @@ void toResultTableViewEdit::addRecord(void) { + Q_ASSERT_X(editModel(), qPrintable(__QHERE__), "addRecord into NULL Model"); editModel()->addRow(selectionModel()->currentIndex(), false); } void toResultTableViewEdit::duplicateRecord(void) { + Q_ASSERT_X(editModel(), qPrintable(__QHERE__), "duplicateRecord into NULL Model"); editModel()->addRow(selectionModel()->currentIndex(), true); } @@ -685,5 +319,8 @@ QModelIndex ind = selectionModel()->currentIndex(); if (ind.isValid()) + { + Q_ASSERT_X(editModel(), qPrintable(__QHERE__), "deleteRecord into NULL Model"); editModel()->deleteRow(ind); + } } Modified: trunk/tora/src/core/toresulttableviewedit.h =================================================================== --- trunk/tora/src/core/toresulttableviewedit.h 2013-11-22 22:01:21 UTC (rev 4948) +++ trunk/tora/src/core/toresulttableviewedit.h 2013-11-25 17:20:28 UTC (rev 4949) @@ -59,7 +59,7 @@ class toResultTableViewEdit : public toResultTableView { Q_OBJECT; - +#if 0 enum ChangeKind { Add, @@ -81,13 +81,14 @@ // keep a history of changes to commit. // this is a fifo -- don't sort or insert. just append. QList<struct ChangeSet> Changes; - +#endif QString Owner, Table; - +#if 0 // this code is duplicate to toResultModelEdit unsigned commitDelete(ChangeSet &change, toConnection &conn); unsigned commitAdd(ChangeSet &change, toConnection &conn); unsigned commitUpdate(ChangeSet &change, toConnection &conn); +#endif public: /** @@ -115,7 +116,7 @@ } virtual void query(const QString &, toQueryParams const& params, const std::list<QString> priKeys); - +#if 0 /** * True if data has been modified. * @@ -124,6 +125,7 @@ { return !Changes.isEmpty(); } +#endif /** * Writes cached changes to database. @@ -133,17 +135,22 @@ */ bool commitChanges(bool status = true); + toResultModelEdit* editModel(); + signals: +#if 0 /** * Parameter is true after changes, false after save or load. */ void changed(bool edit); +#endif protected slots: // reimplemented virtual void slotHandleDoubleClick(const QModelIndex &); private slots: +#if 0 /** * Append change to Changes */ @@ -161,8 +168,8 @@ * Record a deletion in Changes */ void recordDelete(const toQuery::Row &); +#endif - /** * Handle connection toolbar's commit and rollback. * @@ -201,8 +208,6 @@ void handleNewRows(const QModelIndex &parent, int start, int end); protected: toResultModel* allocModel(toEventQuery *query); - - toResultModelEdit* editModel(); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-26 16:45:09
|
Revision: 4951 http://sourceforge.net/p/tora/code/4951 Author: ibre5041 Date: 2013-11-26 16:45:02 +0000 (Tue, 26 Nov 2013) Log Message: ----------- toBrowserData changes - still far from being completed Modified Paths: -------------- trunk/tora/src/core/toresultdata.cpp trunk/tora/src/core/toresultdata.h trunk/tora/src/core/toresulttableview.cpp trunk/tora/src/core/toresulttableview.h trunk/tora/src/core/toresulttableviewedit.h Modified: trunk/tora/src/core/toresultdata.cpp =================================================================== --- trunk/tora/src/core/toresultdata.cpp 2013-11-26 15:28:13 UTC (rev 4950) +++ trunk/tora/src/core/toresultdata.cpp 2013-11-26 16:45:02 UTC (rev 4951) @@ -67,6 +67,7 @@ const char *name, Qt::WindowFlags f) : QWidget(parent, f) + , Model(NULL) { AllFilter = false; Discard = false; @@ -95,6 +96,8 @@ this, SLOT(updateForm())); + connect(Edit, SIGNAL(modelChanged(toResultModel*)), this, SLOT(setModel(toResultModel*))); + singleRecordForm(false); filterAct = toolbar->addAction( @@ -239,6 +242,13 @@ event->ignore(); } +void toResultData::setModel(toResultModel *model) +{ + if (model == NULL) + Model = NULL; + Model = dynamic_cast<toResultModelEdit *>(model); + Q_ASSERT_X(Model != NULL, qPrintable(__QHERE__), "Invalid subclass of toResultModel"); +} void toResultData::navigate(QAction *action) { Modified: trunk/tora/src/core/toresultdata.h =================================================================== --- trunk/tora/src/core/toresultdata.h 2013-11-26 15:28:13 UTC (rev 4950) +++ trunk/tora/src/core/toresultdata.h 2013-11-26 16:45:02 UTC (rev 4951) @@ -47,14 +47,68 @@ class QAction; class toResultDataSingle; class toResultTableViewEdit; +class toResultModel; +class toResultModelEdit; class QCloseEvent; class toResultData : public QWidget, public toResult { Q_OBJECT; + +public: + toResultData(QWidget *parent = 0, + const char *name = 0, + Qt::WindowFlags f = 0); + + + /** + * Reimplemented from toResult. First parameter is ignored. + * + */ + virtual void query(const QString &, toQueryParams const& params); + + /** Clear result widget */ + virtual void clearData(); + + /** + * Reimplemented from toResult. Can handle all connections. + * + */ + virtual bool canHandle(const toConnection &) + { + return true; + } + + /** + * Prompt to save if modified. + * + */ + bool maybeSave(void); + +signals: + /** + * Emitted when changes are saved. + * + */ + void changesSaved(void); + +protected: + virtual void closeEvent(QCloseEvent *); + +protected slots: + void navigate(QAction *); + void changeFilter(bool); + void removeFilter(bool); + void setModel(toResultModel*); + +public slots: + void singleRecordForm(bool display); + void updateForm(void); + void save(void); + void refreshWarn(void); + private: - // toolbar actions QAction *filterAct; QAction *removeAct; @@ -106,56 +160,7 @@ // should be reset on every query bool Discard; -public: - toResultData(QWidget *parent = 0, - const char *name = 0, - Qt::WindowFlags f = 0); - - - /** - * Reimplemented from toResult. First parameter is ignored. - * - */ - virtual void query(const QString &, toQueryParams const& params); - - /** Clear result widget */ - virtual void clearData(); - - /** - * Reimplemented from toResult. Can handle all connections. - * - */ - virtual bool canHandle(const toConnection &) - { - return true; - } - - /** - * Prompt to save if modified. - * - */ - bool maybeSave(void); - -signals: - /** - * Emitted when changes are saved. - * - */ - void changesSaved(void); - -protected: - virtual void closeEvent(QCloseEvent *); - -protected slots: - void navigate(QAction *); - void changeFilter(bool); - void removeFilter(bool); - -public slots: - void singleRecordForm(bool display); - void updateForm(void); - void save(void); - void refreshWarn(void); + toResultModelEdit* Model; }; Modified: trunk/tora/src/core/toresulttableview.cpp =================================================================== --- trunk/tora/src/core/toresulttableview.cpp 2013-11-26 15:28:13 UTC (rev 4950) +++ trunk/tora/src/core/toresulttableview.cpp 2013-11-26 16:45:02 UTC (rev 4951) @@ -151,9 +151,9 @@ toResultTableView::~toResultTableView() { - if(Model) - delete Model; - Model = NULL; + if (Model && running()) + Model->stop(); + freeModel(); } void toResultTableView::query(const QString &sql, toQueryParams const& param, const std::list<QString> priKeys) @@ -165,11 +165,7 @@ { if (Model && running()) Model->stop(); - if(Model) - { - delete Model; - Model = NULL; - } + freeModel(); readAllAct->setEnabled(true); Ready = false; @@ -190,8 +186,8 @@ ); PriKeys = priKeys; - Model = allocModel(query); - setModel(Model); + toResultModel *model = allocModel(query); + setModel(model); connect(Model, SIGNAL(done()), this, SLOT(slotHandleDone())); connect(Model, SIGNAL(modelReset()), this, SLOT(slotHandleReset())); @@ -235,11 +231,7 @@ { if (Model && running()) Model->stop(); - if(Model) - { - delete Model; - Model = NULL; - } + freeModel(); readAllAct->setEnabled(true); Ready = false; @@ -260,8 +252,8 @@ ); PriKeys = std::list<QString>(); - Model = allocModel(query); - setModel(Model); + toResultModel *model = allocModel(query); + setModel(model); connect(Model, SIGNAL(done()), this, SLOT(slotHandleDone())); connect(Model, SIGNAL(modelReset()), this, SLOT(slotHandleReset())); @@ -301,16 +293,22 @@ return new toResultModel(query, PriKeys, this, ReadableColumns); } -void toResultTableView::clearData() +void toResultTableView::freeModel() { - // Note that destroying data model effectively "clears" QTableView - if (Model && running()) - Model->stop(); if(Model) { delete Model; Model = NULL; + emit modelChanged(NULL); } +} + +void toResultTableView::clearData() +{ + // Note that destroying data model effectively "clears" QTableView + if (Model && running()) + Model->stop(); + freeModel(); } // clearData void toResultTableView::createActions() @@ -634,6 +632,7 @@ SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(resizeRowsToContents())); + emit modelChanged(model); } @@ -780,21 +779,14 @@ toResult::refresh(); } -bool toResultTableView::queryFromCache(const QString &owner, const QString &type) +bool toResultTableView::queryFromCache(const QString &owner, const QString &objectType) { if (Model && running()) Model->stop(); - if(Model) - { - delete Model; - Model = NULL; - } + freeModel(); //TODO: Pass pri keys - Model = new toResultModel(owner, - type, - this, - ReadableColumns); + toResultModel* model = new toResultModel(owner, objectType, this, ReadableColumns); setModel(Model); this->sortByColumn(0, Qt::AscendingOrder); Modified: trunk/tora/src/core/toresulttableview.h =================================================================== --- trunk/tora/src/core/toresulttableview.h 2013-11-26 15:28:13 UTC (rev 4950) +++ trunk/tora/src/core/toresulttableview.h 2013-11-26 16:45:02 UTC (rev 4951) @@ -174,6 +174,7 @@ virtual void keyPressEvent(QKeyEvent * event); virtual toResultModel* allocModel(toEventQuery *); + virtual void freeModel(); signals: @@ -411,9 +412,11 @@ /** * Emitted when query is finished. - * */ void done(void); + + void modelChanged(toResultModel*); + //toResultModel }; Modified: trunk/tora/src/core/toresulttableviewedit.h =================================================================== --- trunk/tora/src/core/toresulttableviewedit.h 2013-11-26 15:28:13 UTC (rev 4950) +++ trunk/tora/src/core/toresulttableviewedit.h 2013-11-26 16:45:02 UTC (rev 4951) @@ -59,37 +59,6 @@ class toResultTableViewEdit : public toResultTableView { Q_OBJECT; -#if 0 - enum ChangeKind - { - Add, - Delete, - Update - }; - - struct ChangeSet - { - ChangeKind kind; /* sql change mode */ - QString columnName; /* column name */ - int column; /* the real column number - * after adjusting for - * numbercolumn */ - toQValue newValue; /* data after the change */ - toQuery::Row row; /* data before the change */ - }; - - // keep a history of changes to commit. - // this is a fifo -- don't sort or insert. just append. - QList<struct ChangeSet> Changes; -#endif - QString Owner, Table; -#if 0 - // this code is duplicate to toResultModelEdit - unsigned commitDelete(ChangeSet &change, toConnection &conn); - unsigned commitAdd(ChangeSet &change, toConnection &conn); - unsigned commitUpdate(ChangeSet &change, toConnection &conn); -#endif - public: /** * Creates a new tableview for editing data @@ -116,16 +85,6 @@ } virtual void query(const QString &, toQueryParams const& params, const std::list<QString> priKeys); -#if 0 - /** - * True if data has been modified. - * - */ - bool changed(void) - { - return !Changes.isEmpty(); - } -#endif /** * Writes cached changes to database. @@ -136,41 +95,12 @@ bool commitChanges(bool status = true); toResultModelEdit* editModel(); - -signals: -#if 0 - /** - * Parameter is true after changes, false after save or load. - */ - void changed(bool edit); -#endif - protected slots: // reimplemented virtual void slotHandleDoubleClick(const QModelIndex &); private slots: -#if 0 /** - * Append change to Changes - */ - void recordChange(const QModelIndex &, - const toQValue &, - const toQuery::Row &); - - - /** - * Append a new row to Changes - */ - void recordAdd(const toQuery::Row &); - - /** - * Record a deletion in Changes - */ - void recordDelete(const toQuery::Row &); -#endif - - /** * Handle connection toolbar's commit and rollback. * * @param conn Connection that is committed. @@ -179,8 +109,6 @@ void commitChanges(toConnection &conn); void rollbackChanges(toConnection &conn); - -public slots: /** * Calls Model to add new record. */ @@ -207,7 +135,15 @@ */ void handleNewRows(const QModelIndex &parent, int start, int end); protected: - toResultModel* allocModel(toEventQuery *query); + /* + * Helper function - allocate new instance of model + * toResultTableView uses toResultModel + * while + * toResultTableViewEdit uses toResultModelEdit + */ + virtual toResultModel* allocModel(toEventQuery *query); + + QString Owner, Table; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-11-30 22:30:55
|
Revision: 4957 http://sourceforge.net/p/tora/code/4957 Author: ibre5041 Date: 2013-11-30 22:30:50 +0000 (Sat, 30 Nov 2013) Log Message: ----------- Modified Paths: -------------- trunk/tora/src/core/toresultmodel.cpp trunk/tora/src/core/toresultmodeledit.cpp Modified: trunk/tora/src/core/toresultmodel.cpp =================================================================== --- trunk/tora/src/core/toresultmodel.cpp 2013-11-30 09:28:46 UTC (rev 4956) +++ trunk/tora/src/core/toresultmodel.cpp 2013-11-30 22:30:50 UTC (rev 4957) @@ -606,7 +606,7 @@ return QVariant(); if (role == Qt::DisplayRole) - return Headers[section].name; + return Headers[section /*+ PriKeys.size() */].name; else return QVariant(); } Modified: trunk/tora/src/core/toresultmodeledit.cpp =================================================================== --- trunk/tora/src/core/toresultmodeledit.cpp 2013-11-30 09:28:46 UTC (rev 4956) +++ trunk/tora/src/core/toresultmodeledit.cpp 2013-11-30 22:30:50 UTC (rev 4957) @@ -353,7 +353,7 @@ Qt::Orientation orientation, int role) const { - return toResultModel::headerData(section + PriKeys.size(), orientation, role); + return toResultModel::headerData(section, orientation, role); } /** @@ -364,6 +364,7 @@ int toResultModelEdit::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); + int i = Headers.size() - PriKeys.size(); return Headers.size() - PriKeys.size(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-12-02 12:27:00
|
Revision: 4958 http://sourceforge.net/p/tora/code/4958 Author: ibre5041 Date: 2013-12-02 12:26:52 +0000 (Mon, 02 Dec 2013) Log Message: ----------- toBrowserData changes - still far from being completed Modified Paths: -------------- trunk/tora/src/core/toresultmodel.cpp trunk/tora/src/core/toresultmodeledit.cpp Modified: trunk/tora/src/core/toresultmodel.cpp =================================================================== --- trunk/tora/src/core/toresultmodel.cpp 2013-11-30 22:30:50 UTC (rev 4957) +++ trunk/tora/src/core/toresultmodel.cpp 2013-12-02 12:26:52 UTC (rev 4958) @@ -606,7 +606,7 @@ return QVariant(); if (role == Qt::DisplayRole) - return Headers[section /*+ PriKeys.size() */].name; + return Headers[section].name; else return QVariant(); } Modified: trunk/tora/src/core/toresultmodeledit.cpp =================================================================== --- trunk/tora/src/core/toresultmodeledit.cpp 2013-11-30 22:30:50 UTC (rev 4957) +++ trunk/tora/src/core/toresultmodeledit.cpp 2013-12-02 12:26:52 UTC (rev 4958) @@ -341,7 +341,7 @@ */ QVariant toResultModelEdit::data(const QModelIndex &ind, int role) const { - QModelIndex i = index(ind.row(), ind.column() + PriKeys.size()); + QModelIndex i = createIndex(ind.row(), ind.column() + PriKeys.size(), NULL); return toResultModel::data(i, role); } @@ -353,7 +353,10 @@ Qt::Orientation orientation, int role) const { - return toResultModel::headerData(section, orientation, role); + if (orientation == Qt::Horizontal) + return toResultModel::headerData(section + PriKeys.size(), orientation, role); + else + return toResultModel::headerData(section, orientation, role); } /** @@ -364,6 +367,8 @@ int toResultModelEdit::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); + if (Headers.empty()) + return 0; int i = Headers.size() - PriKeys.size(); return Headers.size() - PriKeys.size(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2013-12-02 16:09:28
|
Revision: 4962 http://sourceforge.net/p/tora/code/4962 Author: ibre5041 Date: 2013-12-02 16:09:22 +0000 (Mon, 02 Dec 2013) Log Message: ----------- Modified Paths: -------------- trunk/tora/src/core/toresultmodeledit.cpp trunk/tora/src/core/toresultmodeledit.h trunk/tora/src/core/toresulttableviewedit.cpp Modified: trunk/tora/src/core/toresultmodeledit.cpp =================================================================== --- trunk/tora/src/core/toresultmodeledit.cpp 2013-12-02 15:25:03 UTC (rev 4961) +++ trunk/tora/src/core/toresultmodeledit.cpp 2013-12-02 16:09:22 UTC (rev 4962) @@ -335,9 +335,10 @@ return fl; } -void toResultModelEdit::commitUpdate(toConnection &conn, const toQuery::Row &row, unsigned int &updated) +void toResultModelEdit::commitUpdate(toConnectionSubLoan &conn, const toQuery::Row &row, unsigned int &updated) { - QString sql = QString("UPDATE %1.%2 SET ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + toConnectionTraits const& connTraits = conn.ParentConnection.getTraits(); + QString sql = QString("UPDATE %1.%2 SET ").arg(connTraits.quote(Owner)).arg(connTraits.quote(Table)); int num = 0; toQueryParams args; for (int i = PriKeys.size() + 1; i < Headers.size(); i++) @@ -351,7 +352,7 @@ } num++; // Construct place holder - sql += conn.getTraits().quote(Headers[i].name) + "=:f" + QString::number(num); + sql += connTraits.quote(Headers[i].name) + "=:f" + QString::number(num); if (row[i].isBinary()) { @@ -386,14 +387,14 @@ } qDebug() << sql; { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); + toQuery q(conn, sql, args); updated += q.rowsProcessed(); } } -void toResultModelEdit::commitAdd(toConnection &conn, const toQuery::Row &row, unsigned int &added) +void toResultModelEdit::commitAdd(toConnectionSubLoan &conn, const toQuery::Row &row, unsigned int &added) { - QString sql = QString("INSERT INTO %1.%2 (").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + toConnectionTraits const& connTraits = conn.ParentConnection.getTraits(); + QString sql = QString("INSERT INTO %1.%2 (").arg(connTraits.quote(Owner)).arg(connTraits.quote(Table)); QString sqlColumns, sqlValuePlaceHolders; int num = 0; toQueryParams args; @@ -408,7 +409,7 @@ sqlValuePlaceHolders += ','; } num++; - sqlColumns += conn.getTraits().quote(Headers[i].name); + sqlColumns += connTraits.quote(Headers[i].name); // Construct place holder sqlValuePlaceHolders += (":f"); sqlValuePlaceHolders += QString::number(num); @@ -434,14 +435,14 @@ sql = sql + sqlColumns + ") VALUES (" + sqlValuePlaceHolders + ")"; qDebug() << sql; { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); + toQuery q(conn, sql, args); added += q.rowsProcessed(); } } -void toResultModelEdit::commitDelete(toConnection &conn, const toQuery::Row &row, unsigned int &deleted) +void toResultModelEdit::commitDelete(toConnectionSubLoan &conn, const toQuery::Row &row, unsigned int &deleted) { - QString sql = QString("DELETE FROM %1.%2 WHERE ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + toConnectionTraits const& connTraits = conn.ParentConnection.getTraits(); + QString sql = QString("DELETE FROM %1.%2 WHERE ").arg(connTraits.quote(Owner)).arg(connTraits.quote(Table)); QList<QString>::const_iterator ite; int num = 0; toQueryParams args; @@ -459,12 +460,11 @@ } qDebug() << sql; { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); + toQuery q(conn, sql, args); deleted += q.rowsProcessed(); } } -void toResultModelEdit::commitChanges(toConnection &conn, unsigned int &updated, unsigned int &added, unsigned int &deleted) +void toResultModelEdit::commitChanges(toConnectionSubLoan &conn, unsigned int &updated, unsigned int &added, unsigned int &deleted) { toQuery::RowList::const_iterator ite; for(ite = Rows.constBegin(); ite != Rows.constEnd(); ite++) @@ -504,12 +504,13 @@ emit changed(changed()); } -unsigned toResultModelEdit::commitDelete(ChangeSet &change, toConnection &conn) +unsigned toResultModelEdit::commitDelete(toConnectionSubLoan &conn, ChangeSet &change) { + toConnectionTraits const& connTraits = conn.ParentConnection.getTraits(); const toResultModel::HeaderList Headers = headers(); - bool oracle = conn.providerIs("Oracle"); + bool oracle = conn.ParentConnection.providerIs("Oracle"); - QString sql = QString("DELETE FROM %1.%2 ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); + QString sql = QString("DELETE FROM %1.%2 ").arg(connTraits.quote(Owner)).arg(connTraits.quote(Table)); sql += (" WHERE "); int col = 1; bool where = false; @@ -532,7 +533,7 @@ else where = true; - sql += conn.getTraits().quote(Headers[col].name); + sql += connTraits.quote(Headers[col].name); if ((*j).isNull()) sql += " IS NULL"; @@ -565,11 +566,10 @@ } { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); + toQuery q(conn, sql, args); if (toConfigurationSingle::Instance().autoCommit()) - c->commit(); + conn->commit(); else { throw QString("Not implemented yet. %1").arg(__QHERE__); @@ -580,21 +580,21 @@ } -unsigned toResultModelEdit::commitAdd(ChangeSet &change, toConnection &conn) +unsigned toResultModelEdit::commitAdd(toConnectionSubLoan &conn, ChangeSet &change) { + toConnectionTraits const& connTraits = conn.ParentConnection.getTraits(); const toResultModel::HeaderList Headers = headers(); + QString sql = QString("INSERT INTO %1.%2 (").arg(connTraits.quote(Owner)).arg(connTraits.quote(Table)); - QString sql = QString("INSERT INTO %1.%2 (").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); - int num = 0; for (int i = 1; i < change.row.size(); i++) { if (num > 0) sql += ","; - sql += conn.getTraits().quote(headerData( - i, - Qt::Horizontal, - Qt::DisplayRole).toString()); + sql += connTraits.quote(headerData( + i, + Qt::Horizontal, + Qt::DisplayRole).toString()); num++; } @@ -639,11 +639,10 @@ args << change.row[i]; { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); + toQuery q(conn, sql, args); if (toConfigurationSingle::Instance().autoCommit()) - c->commit(); + conn->commit(); else { throw QString("Not implemented yet. %1").arg(__QHERE__); @@ -653,13 +652,14 @@ } } -unsigned toResultModelEdit::commitUpdate(ChangeSet &change, toConnection &conn) +unsigned toResultModelEdit::commitUpdate(toConnectionSubLoan &conn, ChangeSet &change) { + toConnectionTraits const& connTraits = conn.ParentConnection.getTraits(); const toResultModel::HeaderList Headers = headers(); - bool oracle = conn.providerIs("Oracle"); + bool oracle = conn.ParentConnection.providerIs("Oracle"); - QString sql = QString("UPDATE %1.%2 SET ").arg(conn.getTraits().quote(Owner)).arg(conn.getTraits().quote(Table)); - sql += conn.getTraits().quote(change.columnName); + QString sql = QString("UPDATE %1.%2 SET ").arg(connTraits.quote(Owner)).arg(connTraits.quote(Table)); + sql += connTraits.quote(change.columnName); // set new value in update statement if (change.newValue.isNull()) @@ -694,10 +694,10 @@ j++, col++) { - QString columnName = conn.getTraits().quote(headerData( - col, - Qt::Horizontal, - Qt::DisplayRole).toString()); + QString columnName = connTraits.quote(headerData( + col, + Qt::Horizontal, + Qt::DisplayRole).toString()); if ((*j).isComplexType()) { @@ -783,10 +783,9 @@ } { - toConnectionSubLoan c(conn); - toQuery q(c, sql, args); + toQuery q(conn, sql, args); if (toConfigurationSingle::Instance().autoCommit()) - c->commit(); + conn->commit(); else { throw QString("Not implemented yet. %1").arg(__QHERE__); Modified: trunk/tora/src/core/toresultmodeledit.h =================================================================== --- trunk/tora/src/core/toresultmodeledit.h 2013-12-02 15:25:03 UTC (rev 4961) +++ trunk/tora/src/core/toresultmodeledit.h 2013-12-02 16:09:22 UTC (rev 4962) @@ -190,7 +190,7 @@ /** * Update data */ - void commitChanges(toConnection &conn, unsigned int &updated, unsigned int &added, unsigned int &deleted); + void commitChanges(toConnectionSubLoan &conn, unsigned int &updated, unsigned int &added, unsigned int &deleted); QList<struct ChangeSet>& changes(); @@ -198,14 +198,14 @@ protected: - void commitUpdate(toConnection &conn, const toQuery::Row &row, unsigned int &updated); - void commitAdd(toConnection &conn, const toQuery::Row &row, unsigned int &added); - void commitDelete(toConnection &conn, const toQuery::Row &row, unsigned int &deleted); + void commitUpdate(toConnectionSubLoan &conn, const toQuery::Row &row, unsigned int &updated); + void commitAdd(toConnectionSubLoan &conn, const toQuery::Row &row, unsigned int &added); + void commitDelete(toConnectionSubLoan &conn, const toQuery::Row &row, unsigned int &deleted); // this code is duplicate to toResultModelEdit (moved from toResultTableViewEdit) - unsigned commitUpdate(ChangeSet &change, toConnection &conn); - unsigned commitAdd(ChangeSet &change, toConnection &conn); - unsigned commitDelete(ChangeSet &change, toConnection &conn); + unsigned commitUpdate(toConnectionSubLoan &conn, ChangeSet &change); + unsigned commitAdd(toConnectionSubLoan &conn, ChangeSet &change); + unsigned commitDelete(toConnectionSubLoan &conn, ChangeSet &change); /** * Append change to Changes Modified: trunk/tora/src/core/toresulttableviewedit.cpp =================================================================== --- trunk/tora/src/core/toresulttableviewedit.cpp 2013-12-02 15:25:03 UTC (rev 4961) +++ trunk/tora/src/core/toresulttableviewedit.cpp 2013-12-02 16:09:22 UTC (rev 4962) @@ -151,8 +151,6 @@ return false; } - toConnection &conn = connection(); - QProgressDialog progress(tr("Performing changes"), tr("Cancel"), 0, @@ -163,6 +161,7 @@ unsigned updated = 0, added = 0, deleted = 0; if(EditModel->getPriKeys().empty()) { + toConnectionSubLoan conn(connection()); // No primary keys for (int changeIndex = 0; changeIndex < Changes.size(); changeIndex++) { @@ -178,13 +177,13 @@ switch (change.kind) { case toResultModelEdit::Delete: - deleted += EditModel->commitDelete(change, conn); + deleted += EditModel->commitDelete(conn, change); break; case toResultModelEdit::Add: - added += EditModel->commitAdd(change, conn); + added += EditModel->commitAdd(conn, change); break; case toResultModelEdit::Update: - updated += EditModel->commitUpdate(change, conn); + updated += EditModel->commitUpdate(conn, change); break; default: Utils::toStatusMessage(tr("Internal error.")); @@ -201,23 +200,24 @@ } else { + toConnectionSubLoan conn(connection()); throw QString("Not implemented yet. %1").arg(__QHERE__); - // try - // { - // Model->commitChanges(conn, updated, added, deleted); - // if (toConfigurationSingle::Instance().autoCommit()) - // conn.commit(); - // else - // { - // throw QString("Not implemented yet. %1").arg(__QHERE__); - // ///toGlobalEventSingle::Instance().setNeedCommit(conn); - // } - // } - // catch(...) - // { - // conn.rollback(); - // throw; - // } + try + { + editModel()->commitChanges(conn, updated, added, deleted); + if (toConfigurationSingle::Instance().autoCommit()) + conn->commit(); + else + { + throw QString("Not implemented yet. %1").arg(__QHERE__); + ///toGlobalEventSingle::Instance().setNeedCommit(conn); + } + } + catch(...) + { + conn->rollback(); + throw; + } } Utils::toStatusMessage(tr("Saved %1 changes(updated %2, added %3, deleted %4)") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |