From: <su...@us...> - 2008-10-15 07:26:41
|
Revision: 3060 http://tora.svn.sourceforge.net/tora/?rev=3060&view=rev Author: subik Date: 2008-10-15 07:26:34 +0000 (Wed, 15 Oct 2008) Log Message: ----------- more usable plsql units opening in the plsql editor; hackish disabling of accidental window close without work saved Modified Paths: -------------- trunk/tora/src/toplsqleditor.cpp trunk/tora/src/toplsqleditor.h Modified: trunk/tora/src/toplsqleditor.cpp =================================================================== --- trunk/tora/src/toplsqleditor.cpp 2008-10-14 09:01:33 UTC (rev 3059) +++ trunk/tora/src/toplsqleditor.cpp 2008-10-15 07:26:34 UTC (rev 3060) @@ -223,10 +223,13 @@ QString selected = Schema->currentText(); if(!selected.isEmpty()) CodeModel->refresh(connection, selected); - connect(Objects->selectionModel(), - SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), - this, - SLOT(changePackage(const QModelIndex &, const QModelIndex &))); + // even better (?) for reopening the tabs +// connect(Objects->selectionModel(), +// SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), +// this, +// SLOT(changePackage(const QModelIndex &, const QModelIndex &))); + connect(Objects, SIGNAL(doubleClicked(const QModelIndex &)), + this, SLOT(changePackage(const QModelIndex &))); splitter->addWidget(Objects); @@ -237,8 +240,13 @@ QToolButton *closeButton = new toPopupButton(Editors); closeButton->setIcon(QPixmap(const_cast<const char**>(close_xpm))); closeButton->setFixedSize(20, 18); + // HACK: disable closing the editor tabs with the global shortcut. + // it raises: "QAction::eventFilter: Ambiguous shortcut overload: Ctrl+W" + // on some systems. But it rejects to close unfinished.unsaved work. + // - <pe...@sc...> + closeButton->setShortcut(QKeySequence::Close); + connect(closeButton, SIGNAL(clicked()), this, SLOT(closeEditor())); - connect(closeButton, SIGNAL(clicked()), this, SLOT(closeEditor())); Editors->setCornerWidget(closeButton); setFocusProxy(Editors); @@ -402,6 +410,11 @@ TOCATCH } +void toPLSQLEditor::changePackage(const QModelIndex ¤t) +{ + changePackage(current, QModelIndex()); +} + void toPLSQLEditor::changePackage(const QModelIndex ¤t, const QModelIndex &previous) { toBusy busy; Modified: trunk/tora/src/toplsqleditor.h =================================================================== --- trunk/tora/src/toplsqleditor.h 2008-10-14 09:01:33 UTC (rev 3059) +++ trunk/tora/src/toplsqleditor.h 2008-10-15 07:26:34 UTC (rev 3060) @@ -121,6 +121,7 @@ void compileWarn(void); void changeSchema(int); void refresh(void); + void changePackage(const QModelIndex &); void changePackage(const QModelIndex &, const QModelIndex &); void prevError(void); void nextError(void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-11-21 07:59:20
|
Revision: 3081 http://tora.svn.sourceforge.net/tora/?rev=3081&view=rev Author: subik Date: 2008-11-21 07:59:15 +0000 (Fri, 21 Nov 2008) Log Message: ----------- fixed [ 2308438 ] problem with a function in editor Modified Paths: -------------- trunk/tora/src/tocodemodel.cpp trunk/tora/src/tocodemodel.h Modified: trunk/tora/src/tocodemodel.cpp =================================================================== --- trunk/tora/src/tocodemodel.cpp 2008-11-19 15:36:51 UTC (rev 3080) +++ trunk/tora/src/tocodemodel.cpp 2008-11-21 07:59:15 UTC (rev 3081) @@ -70,11 +70,13 @@ rootItem = new QTreeWidgetItem(); packageItem = new QTreeWidgetItem(rootItem); procItem = new QTreeWidgetItem(rootItem); + funcItem = new QTreeWidgetItem(rootItem); typeItem = new QTreeWidgetItem(rootItem); rootItem->setText(0, tr("Code")); packageItem->setText(0, tr("Package")); procItem->setText(0, tr("Procedure")); + funcItem->setText(0, tr("Function")); typeItem->setText(0, tr("Type")); } @@ -163,8 +165,10 @@ return createIndex(1, 0, parentItem); if (parentItem == procItem) return createIndex(2, 0, parentItem); + if (parentItem == funcItem) + return createIndex(3, 0, parentItem); if (parentItem == typeItem) - return createIndex(3, 0, parentItem); + return createIndex(4, 0, parentItem); return QModelIndex(); } @@ -197,11 +201,13 @@ packageItem = new QTreeWidgetItem(rootItem); procItem = new QTreeWidgetItem(rootItem); + funcItem = new QTreeWidgetItem(rootItem); typeItem = new QTreeWidgetItem(rootItem); rootItem->setText(0, tr("Code")); packageItem->setText(0, tr("Package")); procItem->setText(0, tr("Procedure")); + funcItem->setText(0, tr("Function")); typeItem->setText(0, tr("Type")); toQList param; @@ -259,12 +265,12 @@ QString ctype = query->readValueNull().toString(); QTreeWidgetItem *item = 0; - if(ctype == QString("FUNCTION")) - item = new QTreeWidgetItem(procItem); - else if(ctype == QString("PACKAGE")) + if(ctype == QString("PACKAGE")) item = new QTreeWidgetItem(packageItem); else if(ctype == QString("PROCEDURE")) item = new QTreeWidgetItem(procItem); + else if (ctype == QString("FUNCTION")) + item = new QTreeWidgetItem(funcItem); else if(ctype == QString("TYPE")) item = new QTreeWidgetItem(typeItem); Modified: trunk/tora/src/tocodemodel.h =================================================================== --- trunk/tora/src/tocodemodel.h 2008-11-19 15:36:51 UTC (rev 3080) +++ trunk/tora/src/tocodemodel.h 2008-11-21 07:59:15 UTC (rev 3081) @@ -91,6 +91,7 @@ QTreeWidgetItem *rootItem; QTreeWidgetItem *packageItem; QTreeWidgetItem *procItem; + QTreeWidgetItem *funcItem; QTreeWidgetItem *typeItem; toEventQuery *query; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-11-21 10:52:09
|
Revision: 3082 http://tora.svn.sourceforge.net/tora/?rev=3082&view=rev Author: subik Date: 2008-11-21 10:52:06 +0000 (Fri, 21 Nov 2008) Log Message: ----------- new feature: implemented shorcuts for sql editor. User can define his own abbreviations for editor. These are expanded into its meaning after <TAB>. Example: scf<TAB> expands into "select count(1) from " in my config. Modified Paths: -------------- trunk/tora/src/CMakeLists.txt trunk/tora/src/Makefile.am trunk/tora/src/toconfiguration.cpp trunk/tora/src/toconfiguration.h trunk/tora/src/tohighlightedtext.cpp trunk/tora/src/tohighlightedtext.h trunk/tora/src/tosyntaxsetup.cpp trunk/tora/src/tosyntaxsetup.h trunk/tora/src/tosyntaxsetupui.ui Added Paths: ----------- trunk/tora/src/shortcuteditor/ trunk/tora/src/shortcuteditor/README trunk/tora/src/shortcuteditor/shortcuteditordialog.cpp trunk/tora/src/shortcuteditor/shortcuteditordialog.h trunk/tora/src/shortcuteditor/shortcuteditordialog.ui trunk/tora/src/shortcuteditor/shortcutmodel.cpp trunk/tora/src/shortcuteditor/shortcutmodel.h Modified: trunk/tora/src/CMakeLists.txt =================================================================== --- trunk/tora/src/CMakeLists.txt 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/CMakeLists.txt 2008-11-21 10:52:06 UTC (rev 3082) @@ -66,6 +66,8 @@ totuningoverviewui.ui totuningsettingui.ui toworksheetsetupui.ui + # shortcuteditor + shortcuteditor/shortcuteditordialog.ui ) IF (ORACLE_FOUND) LIST (APPEND TORA_UI_SRC tooraclesettingui.ui) @@ -211,6 +213,9 @@ # toworksheettext.h toworksheetwidget.h utils.h +# shortcuteditor + shortcuteditor/shortcuteditordialog.h + shortcuteditor/shortcutmodel.h ) IF (ORACLE_FOUND) LIST(APPEND TORA_MOC_CLASSES tooraclesetting.h) @@ -360,6 +365,9 @@ migratetool/sqldeveloper.cpp migratetool/squirrelsql.cpp migratetool/tora3.cpp + # shortcuteditor + shortcuteditor/shortcuteditordialog.cpp + shortcuteditor/shortcutmodel.cpp ) # compiled in icons for windows IF (WIN32 AND MSVC) Modified: trunk/tora/src/Makefile.am =================================================================== --- trunk/tora/src/Makefile.am 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/Makefile.am 2008-11-21 10:52:06 UTC (rev 3082) @@ -180,6 +180,8 @@ migratetool/sqldeveloper.cpp migratetool/sqldeveloper.h \ migratetool/squirrelsql.cpp migratetool/squirrelsql.h \ migratetool/tora3.cpp migratetool/tora3.h \ + shortcuteditor/shortcuteditordialog.cpp shortcuteditor/shortcuteditordialog.h \ + shortcuteditor/shortcutmodel.cpp shortcuteditor/shortcutmodel.h \ $(EXTRA_ORACLE_MONO_SOURCE) \ $(LOKIDIR_SRC)/SmallObj.cpp \ $(LOKIDIR_SRC)/Singleton.cpp \ @@ -231,7 +233,8 @@ tonewconnectionui.ui \ tostorageprefsui.ui \ todroptablespaceui.ui \ - toscriptschemawidgetui.ui + toscriptschemawidgetui.ui \ + shortcuteditor/shortcuteditordialog.ui EXTRA_DIST = icons \ Added: trunk/tora/src/shortcuteditor/README =================================================================== --- trunk/tora/src/shortcuteditor/README (rev 0) +++ trunk/tora/src/shortcuteditor/README 2008-11-21 10:52:06 UTC (rev 3082) @@ -0,0 +1,6 @@ +Source code located in this directory has been taken +from Sqliteman, sqlite3 GUI tool: +http://sqliteman.com + +The code is released unde GPLv2 license. + Added: trunk/tora/src/shortcuteditor/shortcuteditordialog.cpp =================================================================== --- trunk/tora/src/shortcuteditor/shortcuteditordialog.cpp (rev 0) +++ trunk/tora/src/shortcuteditor/shortcuteditordialog.cpp 2008-11-21 10:52:06 UTC (rev 3082) @@ -0,0 +1,156 @@ +/* +For general Sqliteman copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Sqliteman +for which a new license (GPL+exception) is in place. +*/ +#include <QMessageBox> +#include <QFileDialog> +#include <QTextStream> +#if QT_VERSION >= 0x040300 +#include <QXmlStreamReader> +#else +#warning "QXmlStreamReader is disabled. Qt 4.3.x required." +#endif + +#include "shortcuteditordialog.h" +#include "shortcutmodel.h" + + +ShortcutEditorDialog::ShortcutEditorDialog(QWidget * parent) + : QDialog(parent) +{ + setupUi(this); + + model = new ShortcutModel(); + tableView->setModel(model); + tableView->resizeColumnsToContents(); + + connect(removeAllButton, SIGNAL(clicked()), this, SLOT(removeAllButton_clicked())); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeButton_clicked())); + connect(addButton, SIGNAL(clicked()), this, SLOT(addButton_clicked())); + connect(model, SIGNAL(keysNotUnique(QString)), this, SLOT(keysNotUnique(QString))); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(acceptDialog())); + + connect(exportButton, SIGNAL(clicked()), this, SLOT(exportButton_clicked())); + connect(importButton, SIGNAL(clicked()), this, SLOT(importButton_clicked())); +} + +ShortcutEditorDialog::~ShortcutEditorDialog() +{ +} + +void ShortcutEditorDialog::removeAllButton_clicked() +{ + model->removeRows(0, model->rowCount()); +} + +void ShortcutEditorDialog::removeButton_clicked() +{ + model->removeRows(tableView->currentIndex().row(), 1); +} + +void ShortcutEditorDialog::addButton_clicked() +{ + model->insertRow(); +} + +void ShortcutEditorDialog::keysNotUnique(QString value) +{ + QMessageBox::warning(this, tr("Shortcut Error"), + tr("The value you entered as a key (%1) is not unique. Enter another one, please.").arg(value)); +} + +void ShortcutEditorDialog::acceptDialog() +{ + QPair<QString,QString> p; + foreach (p, model->values()) + { + if (p.first.isEmpty()) + { + int b = QMessageBox::question(this, tr("Shortcut Error"), + tr("Some of key values are empty. These items will be lost. Do you want to return to the shortcut editor to fix it?"), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::Yes); + if (b == QMessageBox::Yes) + return; + } + } + model->saveValues(); + accept(); +} + +void ShortcutEditorDialog::exportButton_clicked() +{ +#if QT_VERSION >= 0x040300 + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Shortcuts"), + QDir::currentPath(), tr("Sqliteman Shortcuts XML (*.xml);;All Files (*)")); + if (fileName.isEmpty()) + return; + + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + { + QMessageBox::warning(this, tr("Export Error"), tr("Cannot open file %1 for writting.").arg(fileName)); + return; + } + + QXmlStreamWriter xml(&file); + xml.writeStartDocument(); + xml.writeStartElement("sqliteman-shortcuts"); + + QPair<QString,QString> p; + foreach (p, model->values()) + { + xml.writeStartElement("pair"); + xml.writeAttribute("key", p.first); + xml.writeAttribute("value", p.second); + xml.writeEndElement(); + } + xml.writeEndElement(); //"sqliteman-shortcuts" + xml.writeEndDocument(); + + file.close(); +#endif +} + +void ShortcutEditorDialog::importButton_clicked() +{ +#if QT_VERSION >= 0x040300 + QString fileName = QFileDialog::getOpenFileName(this, tr("Load Shortcuts"), + QDir::currentPath(), tr("Sqliteman Shortcuts XML (*.xml);;All Files (*)")); + if (fileName.isEmpty()) + return; + + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QMessageBox::warning(this, tr("Load Error"), tr("Cannot open file %1 for reading.").arg(fileName)); + return; + } + + QXmlStreamReader xml(&file); + bool isXML = false; + + while (!xml.atEnd()) + { + xml.readNext(); + if (xml.isStartElement()) + { + if (xml.name() == "sqliteman-shortcuts") + isXML = true; + if (isXML && xml.name() == "pair") + { + model->insertRow(xml.attributes().value("key").toString(), + xml.attributes().value("value").toString()); + } + } + } + if (xml.error() && xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) + { +// qWarning() << "XML ERROR:" << xml.lineNumber() << ": " << xml.errorString(); + } + + file.close(); +#endif +} Added: trunk/tora/src/shortcuteditor/shortcuteditordialog.h =================================================================== --- trunk/tora/src/shortcuteditor/shortcuteditordialog.h (rev 0) +++ trunk/tora/src/shortcuteditor/shortcuteditordialog.h 2008-11-21 10:52:06 UTC (rev 3082) @@ -0,0 +1,46 @@ +/* +For general Sqliteman copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Sqliteman +for which a new license (GPL+exception) is in place. +*/ + +#ifndef SHORTCUTEDITORDIALOG_H +#define SHORTCUTEDITORDIALOG_H + +#include "ui_shortcuteditordialog.h" + +class ShortcutModel; + + +/*! \brief A GUI for settings sQL editor shortcuts. +The basic idea of "shortcuts" is: user can define some string +sequences like "sf" what will be expanded into e.g. "select * from" +after pressing Tabelator in the editor. +\author Petr Vanek <pe...@sc...> +*/ +class ShortcutEditorDialog : public QDialog, public Ui::ShortcutEditorDialog +{ + Q_OBJECT + + public: + ShortcutEditorDialog(QWidget * parent = 0); + ~ShortcutEditorDialog(); + + private: + ShortcutModel * model; + + private slots: + void removeAllButton_clicked(); + void removeButton_clicked(); + void addButton_clicked(); + + void acceptDialog(); + + void keysNotUnique(QString value); + + void exportButton_clicked(); + void importButton_clicked(); +}; + +#endif Added: trunk/tora/src/shortcuteditor/shortcuteditordialog.ui =================================================================== --- trunk/tora/src/shortcuteditor/shortcuteditordialog.ui (rev 0) +++ trunk/tora/src/shortcuteditor/shortcuteditordialog.ui 2008-11-21 10:52:06 UTC (rev 3082) @@ -0,0 +1,126 @@ +<ui version="4.0" > + <class>ShortcutEditorDialog</class> + <widget class="QDialog" name="ShortcutEditorDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>557</width> + <height>392</height> + </rect> + </property> + <property name="windowTitle" > + <string>Editor Shortcuts</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QGroupBox" name="groupBox" > + <property name="title" > + <string>Define Editor Shortcuts</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="1" column="1" > + <widget class="QPushButton" name="importButton" > + <property name="text" > + <string>&Import...</string> + </property> + </widget> + </item> + <item row="1" column="2" > + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" > + <size> + <width>61</width> + <height>33</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="3" > + <widget class="QPushButton" name="addButton" > + <property name="text" > + <string>&Add</string> + </property> + </widget> + </item> + <item row="1" column="4" > + <widget class="QPushButton" name="removeButton" > + <property name="text" > + <string>&Remove</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="6" > + <widget class="QTableView" name="tableView" > + <property name="alternatingRowColors" > + <bool>true</bool> + </property> + <property name="selectionMode" > + <enum>QAbstractItemView::SingleSelection</enum> + </property> + </widget> + </item> + <item row="1" column="5" > + <widget class="QPushButton" name="removeAllButton" > + <property name="text" > + <string>R&emove All</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QPushButton" name="exportButton" > + <property name="text" > + <string>E&xport...</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>ShortcutEditorDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>325</x> + <y>350</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> Added: trunk/tora/src/shortcuteditor/shortcutmodel.cpp =================================================================== --- trunk/tora/src/shortcuteditor/shortcutmodel.cpp (rev 0) +++ trunk/tora/src/shortcuteditor/shortcutmodel.cpp 2008-11-21 10:52:06 UTC (rev 3082) @@ -0,0 +1,135 @@ +/* +For general Sqliteman copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Sqliteman +for which a new license (GPL+exception) is in place. +*/ +#include "shortcutmodel.h" +#include "toconfiguration.h" + + +ShortcutModel::ShortcutModel(QObject * /*parent*/) + : QAbstractTableModel() +{ + EditorShortcutsMap map(toConfigurationSingle::Instance().editorShortcuts()); + EditorShortcutsMapIterator i(map); + while (i.hasNext()) + { + i.next(); + m_values.append(qMakePair(i.key(), i.value().toString())); + } +} + + +ShortcutModel::~ShortcutModel() +{ +} + +int ShortcutModel::rowCount(const QModelIndex & /*parent*/) const +{ + return m_values.count(); +} + +int ShortcutModel::columnCount(const QModelIndex & /*parent*/) const +{ + return 2; +} + +QVariant ShortcutModel::data(const QModelIndex & index, int role) const +{ + if (!index.isValid()) + return QVariant(); + if (role == Qt::DisplayRole || role == Qt::EditRole) + { + QString s; + return QVariant(index.column() == 0 ? m_values.at(index.row()).first : m_values.at(index.row()).second); + } + if (role == Qt::BackgroundRole && index.column() == 0 && m_values.at(index.row()).first.isEmpty()) + return QVariant(Qt::red); + return QVariant(); +} + +bool ShortcutModel::setData(const QModelIndex & index, const QVariant & value, int role) +{ + if (role != Qt::EditRole || !index.isValid()) + return false; + QString newVal(value.toString()); + if (index.column() == 0) + { + // ensure it's unique. Message is handled in the ShortcutEditorDialog + QPair<QString,QString> p; + foreach (p, m_values) + { + if (p.first == newVal) + { + emit keysNotUnique(newVal); + return false; + } + } + m_values[index.row()].first = newVal; + } + else + m_values[index.row()].second = newVal; + emit dataChanged(index, index); + return true; +} + +Qt::ItemFlags ShortcutModel::flags(const QModelIndex & /*index*/) const +{ + return Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable; +} + +QVariant ShortcutModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return section == 0 ? tr("Shortcut") : tr("Expanded Text"); + else + return QString("%1").arg(section + 1); +} + +bool ShortcutModel::removeRows(int row, int count, const QModelIndex & parent) +{ + if(count <= 0 || row < 0 || (row + count) > rowCount(parent)) + return false; + + beginRemoveRows(parent, row, row + count - 1); + for (int i = 0; i < count; ++i) + m_values.removeAt(row); + endRemoveRows(); + return true; +} + +bool ShortcutModel::insertRows( int row, int count, const QModelIndex & parent) +{ + beginInsertRows(parent, row, row + count - 1); + for (int i = 0; i < count; ++i) + m_values.insert(row + count, qMakePair(QString(), QString())); + endInsertRows(); + return true; +} + +void ShortcutModel::insertRow() +{ + insertRows(rowCount(), 1); +} + +void ShortcutModel::insertRow(QString key, QString value) +{ + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + m_values.insert(rowCount(), qMakePair(key, value)); + endInsertRows(); +} + +void ShortcutModel::saveValues() +{ + EditorShortcutsMap ret; + QPair<QString,QString> p; + + foreach (p, m_values) + ret[p.first] = p.second; + + toConfigurationSingle::Instance().setEditorShortcuts(ret); +} Added: trunk/tora/src/shortcuteditor/shortcutmodel.h =================================================================== --- trunk/tora/src/shortcuteditor/shortcutmodel.h (rev 0) +++ trunk/tora/src/shortcuteditor/shortcutmodel.h 2008-11-21 10:52:06 UTC (rev 3082) @@ -0,0 +1,63 @@ +/* +For general Sqliteman copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Sqliteman +for which a new license (GPL+exception) is in place. +*/ +#ifndef SHORTCUTMODEL_H +#define SHORTCUTMODEL_H + +#include <QAbstractTableModel> +#include <QPair> + + +/*! \brief A model for sQL editor shortcuts. +See ShortcutEditorDialog for basic idea of shortcuts. +Shortcuts are handled as a QList of QPairs in the model. +It's due the need of changing "key" values what is impossible +in QMap/QHash structures (well, it could be done but it is +expensive). +Shortcuts are saved by Preferences as a QMap(QString,QVariant). +QVariant due the QSettings limitations. +\author Petr Vanek <pe...@sc...> +*/ +class ShortcutModel : public QAbstractTableModel +{ + Q_OBJECT + + public: + ShortcutModel(QObject * parent = 0); + ~ShortcutModel(); + + int rowCount(const QModelIndex & parent = QModelIndex()) const; + int columnCount(const QModelIndex & parent = QModelIndex()) const; + + QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; + bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); + + Qt::ItemFlags flags(const QModelIndex & index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); + bool insertRows( int row, int count, const QModelIndex & parent = QModelIndex()); + void insertRow(); + void insertRow(QString key, QString value); + + QList<QPair<QString,QString> > values() { return m_values; }; + //! \brief Check emptiness of keys and save it by Preferences. + void saveValues(); + + signals: + /*! \brief Signal emmitted when the user finish the editation of one value. + */ + void valueChanged(); + /*! \brief Emitted when user enters duplicate key value. + QString is the duplicate value. It's handled in the GUI with message box */ + void keysNotUnique(QString); + + private: + QList<QPair<QString,QString> > m_values; +}; + +#endif Modified: trunk/tora/src/toconfiguration.cpp =================================================================== --- trunk/tora/src/toconfiguration.cpp 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/toconfiguration.cpp 2008-11-21 10:52:06 UTC (rev 3082) @@ -227,6 +227,18 @@ // mainwindow's toolbars etc m_mainWindowState = s.value("state").toByteArray(); s.endGroup(); + + // editor shortcuts + s.beginGroup("editorShortcuts"); + m_useEditorShortcuts = s.value("useEditorShortcuts", false).toBool(); + cnt = s.beginReadArray("shortcuts"); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_editorShortcuts[s.value("key").toString()] = s.value("value"); + } + s.endArray(); + s.endGroup(); } toConfiguration::~toConfiguration() @@ -432,6 +444,20 @@ // mainwindow's toolbars etc s.setValue("state", m_mainWindowState); s.endGroup(); + + // editor shortcuts + s.beginGroup("editorShortcuts"); + s.setValue("useEditorShortcuts", m_useEditorShortcuts); + s.beginWriteArray("shortcuts"); + for (int i = 0; i < m_editorShortcuts.count(); ++i) + { + s.setArrayIndex(i); + key = m_editorShortcuts.keys().at(i); + s.setValue("key", key); + s.setValue("value", m_editorShortcuts[key]); + } + s.endArray(); + s.endGroup(); } void toConfiguration::loadMap(const QString &filename, std::map<QString, QString> &pairs) Modified: trunk/tora/src/toconfiguration.h =================================================================== --- trunk/tora/src/toconfiguration.h 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/toconfiguration.h 2008-11-21 10:52:06 UTC (rev 3082) @@ -17,6 +17,8 @@ typedef QMapIterator<QString, QString> ChartsMapIterator; typedef QMap<QString, QString> TemplatesMap; typedef QMapIterator<QString, QString> TemplatesMapIterator; +typedef QMap<QString,QVariant> EditorShortcutsMap; +typedef QMapIterator<QString, QVariant> EditorShortcutsMapIterator; class toConfiguration @@ -1154,6 +1156,13 @@ QByteArray mainWindowState() { return m_mainWindowState; }; void setMainWindowState(QByteArray v) { m_mainWindowState = v; }; + // shortcut editor + bool useEditorShortcuts() { return m_useEditorShortcuts; }; + void setUseEditorShortcuts(bool v) { m_useEditorShortcuts = v; }; + EditorShortcutsMap editorShortcuts() { return m_editorShortcuts; }; + void setEditorShortcuts(const EditorShortcutsMap & v) { m_editorShortcuts = v; }; + + private: QString m_provider; bool m_savePassword; @@ -1320,6 +1329,10 @@ // mainwindow size QByteArray m_mainWindowGeometry; QByteArray m_mainWindowState; + + // shortcut editor + bool m_useEditorShortcuts; + EditorShortcutsMap m_editorShortcuts; }; typedef Loki::SingletonHolder<toConfiguration> toConfigurationSingle; Modified: trunk/tora/src/tohighlightedtext.cpp =================================================================== --- trunk/tora/src/tohighlightedtext.cpp 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/tohighlightedtext.cpp 2008-11-21 10:52:06 UTC (rev 3082) @@ -396,6 +396,40 @@ SLOT(completeFromAPI(QListWidgetItem*))); } +void toHighlightedText::keyPressEvent(QKeyEvent * e) +{ + // handle editor shortcuts with TAB + // It uses qscintilla lowlevel API to handle "word unde cursor" + // This code is taken from sqliteman.com + if (toConfigurationSingle::Instance().useEditorShortcuts() && e->key() == Qt::Key_Tab) + { + int pos = SendScintilla(SCI_GETCURRENTPOS); + int start = SendScintilla(SCI_WORDSTARTPOSITION, pos,true); + int end = SendScintilla(SCI_WORDENDPOSITION, pos, true); + SendScintilla(SCI_SETSELECTIONSTART, start, true); + SendScintilla(SCI_SETSELECTIONEND, end, true); + QString key(selectedText()); + bool done = false; + EditorShortcutsMap shorts(toConfigurationSingle::Instance().editorShortcuts()); + if (shorts.contains(key)) + { + removeSelectedText(); + insert(shorts.value(key).toString()); + SendScintilla(SCI_SETCURRENTPOS, + SendScintilla(SCI_GETCURRENTPOS) + + shorts.value(key).toString().length()); + done = true; + } + pos = SendScintilla(SCI_GETCURRENTPOS); + SendScintilla(SCI_SETSELECTIONSTART, pos,true); + SendScintilla(SCI_SETSELECTIONEND, pos, true); + + if (done) + return; + } + toMarkedText::keyPressEvent(e); +} + toHighlightedText::~toHighlightedText() { if (complAPI) Modified: trunk/tora/src/tohighlightedtext.h =================================================================== --- trunk/tora/src/tohighlightedtext.h 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/tohighlightedtext.h 2008-11-21 10:52:06 UTC (rev 3082) @@ -242,6 +242,8 @@ int errorMarker; toComplPopup* popup; + virtual void keyPressEvent(QKeyEvent * e); + public: friend class toComplPopup; Modified: trunk/tora/src/tosyntaxsetup.cpp =================================================================== --- trunk/tora/src/tosyntaxsetup.cpp 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/tosyntaxsetup.cpp 2008-11-21 10:52:06 UTC (rev 3082) @@ -44,6 +44,7 @@ #include "toconf.h" #include "tohighlightedtext.h" #include "tosyntaxsetup.h" +#include "shortcuteditor/shortcuteditordialog.h" #include <stdio.h> @@ -74,6 +75,9 @@ KeywordUpper->setChecked(toConfigurationSingle::Instance().keywordUpper()); SyntaxHighlighting->setChecked(toConfigurationSingle::Instance().highlight()); CodeCompletion->setChecked(toConfigurationSingle::Instance().codeCompletion()); + EditorShortcuts->setChecked(toConfigurationSingle::Instance().useEditorShortcuts()); + connect(EditorShortcutsEdit, SIGNAL(clicked()), + this, SLOT(openEditorShortcutsDialog())); CompletionSort->setChecked(toConfigurationSingle::Instance().completionSort()); AutoIndent->setChecked(toConfigurationSingle::Instance().autoIndent()); Extensions->setText(toConfigurationSingle::Instance().extensions()); @@ -278,6 +282,12 @@ } } +void toSyntaxSetup::openEditorShortcutsDialog() +{ + ShortcutEditorDialog dia(this); + dia.exec(); +} + QString toSyntaxSetup::color() { QString t = Current->text(); @@ -334,6 +344,7 @@ toConfigurationSingle::Instance().setKeywordUpper(KeywordUpper->isChecked()); toConfigurationSingle::Instance().setCodeCompletion(highlight && CodeCompletion->isChecked()); toConfigurationSingle::Instance().setCodeCompletionSort(CompletionSort->isChecked()); + toConfigurationSingle::Instance().setUseEditorShortcuts(EditorShortcuts->isChecked()); toConfigurationSingle::Instance().setAutoIndent(AutoIndent->isChecked()); toMarkedText::setDefaultTabWidth(TabStop->value()); toConfigurationSingle::Instance().setTabStop(toMarkedText::defaultTabWidth()); Modified: trunk/tora/src/tosyntaxsetup.h =================================================================== --- trunk/tora/src/tosyntaxsetup.h 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/tosyntaxsetup.h 2008-11-21 10:52:06 UTC (rev 3082) @@ -88,6 +88,7 @@ Example->setSyntaxColoring(val); Example->update(); } + void openEditorShortcutsDialog(); }; #endif Modified: trunk/tora/src/tosyntaxsetupui.ui =================================================================== --- trunk/tora/src/tosyntaxsetupui.ui 2008-11-21 07:59:15 UTC (rev 3081) +++ trunk/tora/src/tosyntaxsetupui.ui 2008-11-21 10:52:06 UTC (rev 3082) @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>548</width> - <height>527</height> + <width>840</width> + <height>648</height> </rect> </property> <property name="windowTitle" > @@ -16,48 +16,24 @@ <string/> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>0</number> </property> - <property name="topMargin" > - <number>0</number> - </property> - <property name="rightMargin" > - <number>0</number> - </property> - <property name="bottomMargin" > - <number>0</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="0" column="1" > <widget class="QGroupBox" name="Options" > <property name="title" > <string>Options</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="1" column="0" colspan="3" > <widget class="QCheckBox" name="KeywordUpper" > <property name="toolTip" > @@ -78,7 +54,7 @@ </property> </widget> </item> - <item row="3" column="0" colspan="3" > + <item row="4" column="0" colspan="3" > <widget class="QCheckBox" name="CompletionSort" > <property name="enabled" > <bool>false</bool> @@ -104,7 +80,7 @@ </property> </widget> </item> - <item row="4" column="0" colspan="3" > + <item row="5" column="0" colspan="3" > <widget class="QCheckBox" name="AutoIndent" > <property name="toolTip" > <string>Indent a new line in an editor to the same column as the previous line</string> @@ -114,14 +90,14 @@ </property> </widget> </item> - <item row="7" column="2" > + <item row="8" column="2" > <widget class="QPushButton" name="PushButton1" > <property name="text" > <string>Choose</string> </property> </widget> </item> - <item row="7" column="0" > + <item row="8" column="0" > <widget class="QLabel" name="ResultExample" > <property name="text" > <string>List example</string> @@ -131,7 +107,7 @@ </property> </widget> </item> - <item row="6" column="0" > + <item row="7" column="0" > <widget class="QLabel" name="CodeExample" > <property name="text" > <string>Code example</string> @@ -141,21 +117,14 @@ </property> </widget> </item> - <item row="6" column="2" > + <item row="7" column="2" > <widget class="QPushButton" name="PushButton1_2" > <property name="text" > <string>Choose</string> </property> </widget> </item> - <item row="5" column="2" > - <widget class="QPushButton" name="PushButton1_2_2" > - <property name="text" > - <string>Choose</string> - </property> - </widget> - </item> - <item row="5" column="0" > + <item row="6" column="0" > <widget class="QLabel" name="TextExample" > <property name="text" > <string>Text example</string> @@ -165,10 +134,10 @@ </property> </widget> </item> - <item row="8" column="1" colspan="2" > + <item row="9" column="1" colspan="2" > <widget class="QLineEdit" name="Extensions" /> </item> - <item row="8" column="0" > + <item row="9" column="0" > <widget class="QLabel" name="TextLabel1" > <property name="text" > <string>Filename extensions</string> @@ -178,7 +147,7 @@ </property> </widget> </item> - <item row="11" column="1" > + <item row="12" column="1" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> @@ -186,7 +155,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -194,14 +163,14 @@ </property> </spacer> </item> - <item row="9" column="2" > + <item row="10" column="2" > <widget class="QSpinBox" name="TabStop" > <property name="minimum" > <number>1</number> </property> </widget> </item> - <item row="9" column="0" colspan="2" > + <item row="10" column="0" colspan="2" > <widget class="QLabel" name="TextLabel1_2" > <property name="toolTip" > <string>Number of character width of tabstops</string> @@ -220,7 +189,7 @@ </property> </widget> </item> - <item row="10" column="0" > + <item row="11" column="0" > <widget class="QCheckBox" name="TabSpaces" > <property name="toolTip" > <string>If set the editor will insert spaces rather than tabs</string> @@ -230,6 +199,27 @@ </property> </widget> </item> + <item row="6" column="2" > + <widget class="QPushButton" name="PushButton1_2_2" > + <property name="text" > + <string>Choose</string> + </property> + </widget> + </item> + <item row="3" column="0" > + <widget class="QCheckBox" name="EditorShortcuts" > + <property name="text" > + <string>&Editor shortcuts (TAB replacement)</string> + </property> + </widget> + </item> + <item row="3" column="2" > + <widget class="QPushButton" name="EditorShortcutsEdit" > + <property name="text" > + <string>E&dit...</string> + </property> + </widget> + </item> </layout> </widget> </item> @@ -242,24 +232,12 @@ <string>Sy&ntax components</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="1" column="0" > <widget class="QLabel" name="ExampleColor" > <property name="text" > This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-11-25 13:06:16
|
Revision: 3084 http://tora.svn.sourceforge.net/tora/?rev=3084&view=rev Author: subik Date: 2008-11-25 13:06:08 +0000 (Tue, 25 Nov 2008) Log Message: ----------- improvements for editor: highlight current line, show "max text width" marker (standard from the other text editors) Modified Paths: -------------- trunk/tora/src/toconfiguration.cpp trunk/tora/src/toconfiguration.h trunk/tora/src/tohighlightedtext.cpp trunk/tora/src/tohighlightedtext.h trunk/tora/src/tosyntaxsetup.cpp trunk/tora/src/tosyntaxsetupui.ui Modified: trunk/tora/src/toconfiguration.cpp =================================================================== --- trunk/tora/src/toconfiguration.cpp 2008-11-25 10:02:44 UTC (rev 3083) +++ trunk/tora/src/toconfiguration.cpp 2008-11-25 13:06:08 UTC (rev 3084) @@ -218,7 +218,9 @@ m_syntaxDefaultBg = s.value("SyntaxDefaultBg", cg.color(QPalette::Text).name()).toString(); m_syntaxErrorBg = s.value("SyntaxErrorBg", "darkred").toString(); m_syntaxDebugBg = s.value("SyntaxDebugBg", "darkgreen").toString(); - + m_syntaxCurrentLineMarker = s.value("SyntaxCurrentLineMarker", "whitesmoke").toString(); + m_useMaxTextWidthMark = s.value("useMaxTextWidthMark", false).toBool(); + m_maxTextWidthMark = s.value("maxTextWidthMark", 75).toInt(); s.endGroup(); // main window @@ -435,7 +437,9 @@ s.setValue("SyntaxDefaultBg", m_syntaxDefaultBg); s.setValue("SyntaxErrorBg", m_syntaxErrorBg); s.setValue("SyntaxDebugBg", m_syntaxDebugBg); - + s.setValue("SyntaxCurrentLineMarker", m_syntaxCurrentLineMarker); + s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); + s.setValue("maxTextWidthMark", m_maxTextWidthMark); s.endGroup(); // main window @@ -635,3 +639,14 @@ { m_syntaxErrorBg = v.name(); } + +QColor toConfiguration::syntaxCurrentLineMarker() +{ + QColor c; + c.setNamedColor(m_syntaxCurrentLineMarker); + return c; +} +void toConfiguration::setSyntaxCurrentLineMarker(QColor v) +{ + m_syntaxCurrentLineMarker = v.name(); +} Modified: trunk/tora/src/toconfiguration.h =================================================================== --- trunk/tora/src/toconfiguration.h 2008-11-25 10:02:44 UTC (rev 3083) +++ trunk/tora/src/toconfiguration.h 2008-11-25 13:06:08 UTC (rev 3084) @@ -1148,7 +1148,14 @@ void setSyntaxDebugBg(QColor v); QColor syntaxErrorBg(); void setSyntaxErrorBg(QColor v); + QColor syntaxCurrentLineMarker(); + void setSyntaxCurrentLineMarker(QColor v); + bool useMaxTextWidthMark() { return m_useMaxTextWidthMark; }; + void setUseMaxTextWidthMark(bool v) { m_useMaxTextWidthMark = v; }; + int maxTextWidthMark() { return m_maxTextWidthMark; }; + void setMaxTextWidthMark(int v) { m_maxTextWidthMark = v; }; + // main window size QByteArray mainWindowGeometry() { return m_mainWindowGeometry; }; void setMainWindowGeometry(QByteArray v) { m_mainWindowGeometry = v; }; @@ -1325,6 +1332,9 @@ QString m_syntaxDefaultBg; QString m_syntaxErrorBg; QString m_syntaxDebugBg; + QString m_syntaxCurrentLineMarker; + bool m_useMaxTextWidthMark; + int m_maxTextWidthMark; // mainwindow size QByteArray m_mainWindowGeometry; Modified: trunk/tora/src/tohighlightedtext.cpp =================================================================== --- trunk/tora/src/tohighlightedtext.cpp 2008-11-25 10:02:44 UTC (rev 3083) +++ trunk/tora/src/tohighlightedtext.cpp 2008-11-25 13:06:08 UTC (rev 3084) @@ -341,7 +341,8 @@ toHighlightedText::toHighlightedText(QWidget *parent, const char *name) - : toMarkedText(parent, name), lexer(0), syntaxColoring(false) + : toMarkedText(parent, name), + lexer(0) { sqlLexer()->setDefaultFont(toStringToFont(toConfigurationSingle::Instance().codeFont())); @@ -375,8 +376,21 @@ errorMarker = markerDefine(Circle, 4); debugMarker = markerDefine(Rectangle, 8); + m_currentLineHandle = markerDefine(QsciScintilla::Background); updateSyntaxColor(toSyntaxAnalyzer::DebugBg); updateSyntaxColor(toSyntaxAnalyzer::ErrorBg); + updateSyntaxColor(toSyntaxAnalyzer::CurrentLineMarker); + + // handle "max text width" mark + if (toConfigurationSingle::Instance().useMaxTextWidthMark()) + { + setEdgeColumn(toConfigurationSingle::Instance().maxTextWidthMark()); + setEdgeColor(DefaultAnalyzer.getColor(toSyntaxAnalyzer::CurrentLineMarker).darker(150)); + setEdgeMode(QsciScintilla::EdgeLine); + } + else + setEdgeMode(QsciScintilla::EdgeNone); + setMarginMarkerMask(1, 0); setAutoIndent(true); connect(this, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(setStatusMessage(void ))); @@ -449,6 +463,9 @@ if (timer->isActive()) timer->stop(); } + // current line marker + markerDeleteAll(m_currentLineHandle); + markerAdd(row, m_currentLineHandle); } static QString UpperIdent(const QString &str) @@ -555,6 +572,7 @@ updateSyntaxColor(toSyntaxAnalyzer::Keyword); updateSyntaxColor(toSyntaxAnalyzer::String); updateSyntaxColor(toSyntaxAnalyzer::DefaultBg); + updateSyntaxColor(toSyntaxAnalyzer::CurrentLineMarker); update(); } @@ -607,6 +625,9 @@ case toSyntaxAnalyzer::DebugBg: setMarkerBackgroundColor(col, debugMarker); break; + case toSyntaxAnalyzer::CurrentLineMarker: + setMarkerBackgroundColor(col, m_currentLineHandle); + break; default: break; } Modified: trunk/tora/src/tohighlightedtext.h =================================================================== --- trunk/tora/src/tohighlightedtext.h 2008-11-25 10:02:44 UTC (rev 3083) +++ trunk/tora/src/tohighlightedtext.h 2008-11-25 13:06:08 UTC (rev 3084) @@ -83,7 +83,8 @@ String = 4, DefaultBg = 5, ErrorBg = 6, - DebugBg = 7 + DebugBg = 7, + CurrentLineMarker = 8 }; private: /** Indicate if colors are updated, can't do this in constructor since QApplication @@ -92,14 +93,14 @@ bool ColorsUpdated; /** Colors allocated for the different @ref infoType values. */ - QColor Colors[8]; + QMap<infoType,QColor> Colors; /** marker per linea contenente errori */ - int errorMarker; +// int errorMarker; /** marker per linea corrente */ - int debugMarker; +// int debugMarker; /** Keeps track of possible hits found so far. */ struct posibleHit @@ -240,6 +241,9 @@ protected: int debugMarker; int errorMarker; + //! \brief A handler for current line highlighting + int m_currentLineHandle; + toComplPopup* popup; virtual void keyPressEvent(QKeyEvent * e); Modified: trunk/tora/src/tosyntaxsetup.cpp =================================================================== --- trunk/tora/src/tosyntaxsetup.cpp 2008-11-25 10:02:44 UTC (rev 3083) +++ trunk/tora/src/tosyntaxsetup.cpp 2008-11-25 13:06:08 UTC (rev 3084) @@ -74,6 +74,8 @@ setupUi(this); KeywordUpper->setChecked(toConfigurationSingle::Instance().keywordUpper()); SyntaxHighlighting->setChecked(toConfigurationSingle::Instance().highlight()); + EdgeMarkCheckBox->setChecked(toConfigurationSingle::Instance().useMaxTextWidthMark()); + EdgeSizeSpinBox->setValue(toConfigurationSingle::Instance().maxTextWidthMark()); CodeCompletion->setChecked(toConfigurationSingle::Instance().codeCompletion()); EditorShortcuts->setChecked(toConfigurationSingle::Instance().useEditorShortcuts()); connect(EditorShortcutsEdit, SIGNAL(clicked()), @@ -123,6 +125,7 @@ INIT_COL(toSyntaxAnalyzer::DefaultBg); INIT_COL(toSyntaxAnalyzer::ErrorBg); INIT_COL(toSyntaxAnalyzer::DebugBg); + INIT_COL(toSyntaxAnalyzer::CurrentLineMarker); } TOCATCH; @@ -193,6 +196,8 @@ return ErrorBg; if (str == "Debug background") return DebugBg; + if (str == "Current line highlight") + return CurrentLineMarker; throw qApp->translate("toSyntaxAnalyzer", "Unknown type"); } @@ -216,6 +221,8 @@ return "Error background"; case DebugBg: return "Debug background"; + case CurrentLineMarker: + return "Current line highlight"; } throw qApp->translate("toSyntaxAnalyzer", "Unknown type"); } @@ -232,6 +239,7 @@ Colors[DefaultBg] = toConfigurationSingle::Instance().syntaxDefaultBg(); Colors[ErrorBg] = toConfigurationSingle::Instance().syntaxErrorBg(); Colors[DebugBg] = toConfigurationSingle::Instance().syntaxDebugBg(); + Colors[CurrentLineMarker] = toConfigurationSingle::Instance().syntaxCurrentLineMarker(); } TOCATCH } @@ -341,6 +349,8 @@ toConfigurationSingle::Instance().setListFont(List); bool highlight = SyntaxHighlighting->isChecked(); toConfigurationSingle::Instance().setHighlight(highlight); + toConfigurationSingle::Instance().setUseMaxTextWidthMark(EdgeMarkCheckBox->isChecked()); + toConfigurationSingle::Instance().setMaxTextWidthMark(EdgeSizeSpinBox->value()); toConfigurationSingle::Instance().setKeywordUpper(KeywordUpper->isChecked()); toConfigurationSingle::Instance().setCodeCompletion(highlight && CodeCompletion->isChecked()); toConfigurationSingle::Instance().setCodeCompletionSort(CompletionSort->isChecked()); @@ -370,6 +380,7 @@ toConfigurationSingle::Instance().setSyntaxDefaultBg(C2T(toSyntaxAnalyzer::DefaultBg)); toConfigurationSingle::Instance().setSyntaxDebugBg(C2T(toSyntaxAnalyzer::DebugBg)); toConfigurationSingle::Instance().setSyntaxErrorBg(C2T(toSyntaxAnalyzer::ErrorBg)); + toConfigurationSingle::Instance().setSyntaxCurrentLineMarker(C2T(toSyntaxAnalyzer::CurrentLineMarker)); toSyntaxAnalyzer::defaultAnalyzer().updateSettings(); toConfigurationSingle::Instance().setExtensions(Extensions->text()); Modified: trunk/tora/src/tosyntaxsetupui.ui =================================================================== --- trunk/tora/src/tosyntaxsetupui.ui 2008-11-25 10:02:44 UTC (rev 3083) +++ trunk/tora/src/tosyntaxsetupui.ui 2008-11-25 13:06:08 UTC (rev 3084) @@ -34,7 +34,7 @@ <property name="spacing" > <number>6</number> </property> - <item row="1" column="0" colspan="3" > + <item row="2" column="0" colspan="3" > <widget class="QCheckBox" name="KeywordUpper" > <property name="toolTip" > <string>Convert all keywords to uppercase when displayingsyntaxhighlighted text. Only available for monospaced fonts.</string> @@ -44,7 +44,7 @@ </property> </widget> </item> - <item row="2" column="0" colspan="3" > + <item row="3" column="0" colspan="3" > <widget class="QCheckBox" name="CodeCompletion" > <property name="toolTip" > <string>Activate code completion in SQL editors. Not recommended on slow connections.</string> @@ -54,7 +54,7 @@ </property> </widget> </item> - <item row="4" column="0" colspan="3" > + <item row="5" column="0" colspan="3" > <widget class="QCheckBox" name="CompletionSort" > <property name="enabled" > <bool>false</bool> @@ -80,7 +80,7 @@ </property> </widget> </item> - <item row="5" column="0" colspan="3" > + <item row="6" column="0" colspan="3" > <widget class="QCheckBox" name="AutoIndent" > <property name="toolTip" > <string>Indent a new line in an editor to the same column as the previous line</string> @@ -90,14 +90,14 @@ </property> </widget> </item> - <item row="8" column="2" > + <item row="9" column="2" > <widget class="QPushButton" name="PushButton1" > <property name="text" > <string>Choose</string> </property> </widget> </item> - <item row="8" column="0" > + <item row="9" column="0" > <widget class="QLabel" name="ResultExample" > <property name="text" > <string>List example</string> @@ -107,7 +107,7 @@ </property> </widget> </item> - <item row="7" column="0" > + <item row="8" column="0" > <widget class="QLabel" name="CodeExample" > <property name="text" > <string>Code example</string> @@ -117,14 +117,14 @@ </property> </widget> </item> - <item row="7" column="2" > + <item row="8" column="2" > <widget class="QPushButton" name="PushButton1_2" > <property name="text" > <string>Choose</string> </property> </widget> </item> - <item row="6" column="0" > + <item row="7" column="0" > <widget class="QLabel" name="TextExample" > <property name="text" > <string>Text example</string> @@ -134,10 +134,10 @@ </property> </widget> </item> - <item row="9" column="1" colspan="2" > + <item row="10" column="1" colspan="2" > <widget class="QLineEdit" name="Extensions" /> </item> - <item row="9" column="0" > + <item row="10" column="0" > <widget class="QLabel" name="TextLabel1" > <property name="text" > <string>Filename extensions</string> @@ -147,7 +147,7 @@ </property> </widget> </item> - <item row="12" column="1" > + <item row="13" column="1" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> @@ -163,14 +163,14 @@ </property> </spacer> </item> - <item row="10" column="2" > + <item row="11" column="2" > <widget class="QSpinBox" name="TabStop" > <property name="minimum" > <number>1</number> </property> </widget> </item> - <item row="10" column="0" colspan="2" > + <item row="11" column="0" colspan="2" > <widget class="QLabel" name="TextLabel1_2" > <property name="toolTip" > <string>Number of character width of tabstops</string> @@ -189,7 +189,7 @@ </property> </widget> </item> - <item row="11" column="0" > + <item row="12" column="0" > <widget class="QCheckBox" name="TabSpaces" > <property name="toolTip" > <string>If set the editor will insert spaces rather than tabs</string> @@ -199,27 +199,50 @@ </property> </widget> </item> - <item row="6" column="2" > + <item row="7" column="2" > <widget class="QPushButton" name="PushButton1_2_2" > <property name="text" > <string>Choose</string> </property> </widget> </item> - <item row="3" column="0" > + <item row="4" column="0" > <widget class="QCheckBox" name="EditorShortcuts" > <property name="text" > <string>&Editor shortcuts (TAB replacement)</string> </property> </widget> </item> - <item row="3" column="2" > + <item row="4" column="2" > <widget class="QPushButton" name="EditorShortcutsEdit" > <property name="text" > <string>E&dit...</string> </property> </widget> </item> + <item row="1" column="0" > + <widget class="QCheckBox" name="EdgeMarkCheckBox" > + <property name="toolTip" > + <string>Display the line/column marker at the specified position</string> + </property> + <property name="text" > + <string>Use &maximum text width mark</string> + </property> + </widget> + </item> + <item row="1" column="2" > + <widget class="QSpinBox" name="EdgeSizeSpinBox" > + <property name="toolTip" > + <string>Specify the column (text width) where to show marker</string> + </property> + <property name="minimum" > + <number>1</number> + </property> + <property name="maximum" > + <number>999999</number> + </property> + </widget> + </item> </layout> </widget> </item> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2008-11-29 00:46:01
|
Revision: 3086 http://tora.svn.sourceforge.net/tora/?rev=3086&view=rev Author: ibre5041 Date: 2008-11-29 00:45:54 +0000 (Sat, 29 Nov 2008) Log Message: ----------- sort segments acording to last extent position in datafile Modified Paths: -------------- trunk/tora/src/toresultstorage.cpp trunk/tora/src/toresultstorage.h Modified: trunk/tora/src/toresultstorage.cpp =================================================================== --- trunk/tora/src/toresultstorage.cpp 2008-11-26 08:57:43 UTC (rev 3085) +++ trunk/tora/src/toresultstorage.cpp 2008-11-29 00:45:54 UTC (rev 3086) @@ -142,7 +142,7 @@ { Unit = toConfigurationSingle::Instance().sizeUnit(); setAllColumnsShowFocus(true); - setSorting(0); + //setSorting(0); setRootIsDecorated(true); addColumn(tr("Name")); addColumn(tr("Status")); @@ -758,8 +758,13 @@ Size = size; } -bool toStorageExtent::extentName::operator < (const toStorageExtent::extentName &ext) const +bool toStorageExtent::extentTotal::operator < (const toStorageExtent::extentTotal &ext) const { + if (fileView ) { + if (LastBlock < ext.LastBlock) + return true; + return false; + } else { if (Owner < ext.Owner) return true; if (Owner > ext.Owner) @@ -771,6 +776,7 @@ if (Partition < ext.Partition) return true; return false; + } } bool toStorageExtent::extentName::operator == (const toStorageExtent::extentName &ext) const @@ -805,7 +811,7 @@ } toStorageExtent::toStorageExtent(QWidget *parent, const char *name) - : QWidget(parent) + : QWidget(parent) { setObjectName(name); QPalette pal = palette(); @@ -906,6 +912,7 @@ void toStorageExtent::setTablespace(const QString &tablespace) { + fileView = false; try { if (Tablespace == tablespace) @@ -964,6 +971,7 @@ void toStorageExtent::setFile(const QString &tablespace, int file) { + fileView = true; try { toBusy busy; @@ -1093,12 +1101,13 @@ { (*j).Size += (*i).Size; (*j).Extents++; + (*j).LastBlock = ( ((*j).LastBlock > (*i).Block) ? (*j).LastBlock : (*i).Block ); dup = true; break; } } if (!dup) - toPush(ret, extentTotal((*i).Owner, (*i).Table, (*i).Partition, (*i).Size)); + toPush(ret, extentTotal((*i).Owner, (*i).Table, (*i).Partition, (*i).Block, (*i).Size)); } ret.sort(); @@ -1109,7 +1118,7 @@ static toSQL SQLListExtents("toResultStorage:ListExtents", "SELECT * \n" " FROM SYS.DBA_EXTENTS WHERE OWNER = :f1<char[101]> AND SEGMENT_NAME = :f2<char[101]>\n" - " ORDER BY extent_id", + " ORDER BY block_id", "List the extents of a table in a schema.", "" , "Oracle"); @@ -1159,3 +1168,5 @@ } TOCATCH } + +bool toStorageExtent::fileView; Modified: trunk/tora/src/toresultstorage.h =================================================================== --- trunk/tora/src/toresultstorage.h 2008-11-26 08:57:43 UTC (rev 3085) +++ trunk/tora/src/toresultstorage.h 2008-11-29 00:45:54 UTC (rev 3086) @@ -68,21 +68,23 @@ Size = 0; } extentName(const QString &owner, const QString &table, const QString &partition, int size); - bool operator < (const extentName &) const; bool operator == (const extentName &) const; }; -struct extentTotal : public extentName + struct extentTotal : public extentName { int Extents; - extentTotal(const QString &owner, const QString &table, const QString &partition, int size) + int LastBlock; + extentTotal(const QString &owner, const QString &table, const QString &partition, int block, int size) : extentName(owner, table, partition, size) { Extents = 1; + LastBlock = block; } + bool operator < (const extentTotal &) const; }; -struct extent : public extentName + struct extent : public extentName { int File; int Block; @@ -104,6 +106,7 @@ std::map<int, int> FileOffset; int Total; + static bool fileView; public: toStorageExtent(QWidget *parent, const char *name = NULL); void highlight(const QString &owner, const QString &table, const QString &partition); @@ -114,7 +117,7 @@ std::list<extentTotal> objects(void); protected: virtual void paintEvent(QPaintEvent *); -}; +}; // toStorageExtent class toResultTableView; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-01 14:26:55
|
Revision: 3090 http://tora.svn.sourceforge.net/tora/?rev=3090&view=rev Author: subik Date: 2008-12-01 14:26:46 +0000 (Mon, 01 Dec 2008) Log Message: ----------- fix for malformed Background processes layout in the "Server Tuning Tool" Modified Paths: -------------- trunk/tora/src/totuning.cpp trunk/tora/src/totuningoverviewui.ui Modified: trunk/tora/src/totuning.cpp =================================================================== --- trunk/tora/src/totuning.cpp 2008-12-01 10:53:32 UTC (rev 3089) +++ trunk/tora/src/totuning.cpp 2008-12-01 14:26:46 UTC (rev 3090) @@ -902,6 +902,8 @@ { setupUi(this); + BackgroundGroup->setLayout(new QVBoxLayout); + setupChart(ArchiveWrite, tr("< Archive write"), " " + tr("blocks/s"), SQLOverviewArchiveWrite); setupChart(BufferHit, tr("Hitrate"), QString::fromLatin1("%"), SQLOverviewBufferHit); BufferHit->setMaxValue(100); @@ -1314,6 +1316,7 @@ if (labIt == Backgrounds.end() || *labIt == NULL) { label = new QLabel(BackgroundGroup); + BackgroundGroup->layout()->addWidget(label); label->show(); if (labIt == Backgrounds.end()) { Modified: trunk/tora/src/totuningoverviewui.ui =================================================================== --- trunk/tora/src/totuningoverviewui.ui 2008-12-01 10:53:32 UTC (rev 3089) +++ trunk/tora/src/totuningoverviewui.ui 2008-12-01 14:26:46 UTC (rev 3090) @@ -6,31 +6,19 @@ <x>0</x> <y>0</y> <width>906</width> - <height>552</height> + <height>575</height> </rect> </property> <property name="windowTitle" > <string>Form1</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="4" column="3" > <widget class="toResultLine" native="1" name="RedoEntries" /> </item> @@ -42,7 +30,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -73,7 +61,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -89,7 +77,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -108,7 +96,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -122,24 +110,12 @@ <string>SGA</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="3" column="0" > <spacer> <property name="orientation" > @@ -148,7 +124,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -162,24 +138,12 @@ <string>Buffer Cache</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="1" column="0" > <widget class="toResultLine" native="1" name="BufferHit" /> </item> @@ -274,7 +238,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -288,24 +252,12 @@ <string>Shared Pool</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="0" column="0" > <widget class="QLabel" name="SharedSize" > <property name="font" > @@ -339,7 +291,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -358,7 +310,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -378,24 +330,12 @@ <string>Archive logs</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="1" column="0" > <widget class="QLabel" name="ArchiveInfo" > <property name="font" > @@ -437,48 +377,24 @@ <string>Files</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="0" column="0" > <widget class="QGroupBox" name="GroupBox9" > <property name="title" > <string>Datafiles</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="5" column="0" > <widget class="QLabel" name="Filesize" > <property name="font" > @@ -587,24 +503,12 @@ <string>Redo Logs</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="1" column="0" > <widget class="QLabel" name="RedoFiles" > <property name="font" > @@ -712,7 +616,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -729,48 +633,24 @@ <string>Processes</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="2" column="0" > <widget class="QGroupBox" name="GroupBox5" > <property name="title" > <string>Server</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="2" column="0" > <widget class="QLabel" name="TextLabel2_5" > <property name="text" > @@ -936,11 +816,30 @@ </item> <item row="3" column="0" > <widget class="QGroupBox" name="BackgroundGroup" > + <property name="minimumSize" > + <size> + <width>0</width> + <height>130</height> + </size> + </property> <property name="title" > <string>Background</string> </property> </widget> </item> + <item row="4" column="0" > + <spacer name="verticalSpacer" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0" > + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> </layout> </widget> </item> @@ -965,7 +864,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -979,24 +878,12 @@ <string>Clients</string> </property> <layout class="QGridLayout" > - <property name="leftMargin" > + <property name="margin" > <number>11</number> </property> - <property name="topMargin" > - <number>11</number> - </property> - <property name="rightMargin" > - <number>11</number> - </property> - <property name="bottomMargin" > - <number>11</number> - </property> - <property name="horizontalSpacing" > + <property name="spacing" > <number>6</number> </property> - <property name="verticalSpacing" > - <number>6</number> - </property> <item row="9" column="0" > <spacer> <property name="orientation" > @@ -1005,7 +892,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -1021,7 +908,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -1171,7 +1058,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -1187,7 +1074,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> @@ -1206,7 +1093,7 @@ <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mrj...@us...> - 2008-12-01 18:45:06
|
Revision: 3091 http://tora.svn.sourceforge.net/tora/?rev=3091&view=rev Author: mrjohnson0 Date: 2008-12-01 18:44:58 +0000 (Mon, 01 Dec 2008) Log Message: ----------- add docklets, fixes for Makefile.am Modified Paths: -------------- trunk/tora/src/CMakeLists.txt trunk/tora/src/Makefile.am trunk/tora/src/toconnection.h trunk/tora/src/toconnectionmodel.cpp trunk/tora/src/toconnectionmodel.h trunk/tora/src/tomain.cpp trunk/tora/src/tomain.h trunk/tora/src/tomarkedtext.cpp trunk/tora/src/tomarkedtext.h trunk/tora/src/tonewconnection.cpp trunk/tora/src/tonewconnection.h trunk/tora/src/totool.cpp trunk/tora/src/totool.h trunk/tora/src/toworksheet.cpp trunk/tora/src/toworksheettext.cpp Added Paths: ----------- trunk/tora/src/docklets/ trunk/tora/src/docklets/toviewconnections.cpp trunk/tora/src/docklets/toviewconnections.h trunk/tora/src/docklets/toviewdirectory.cpp trunk/tora/src/docklets/toviewdirectory.h trunk/tora/src/todockbar.cpp trunk/tora/src/todockbar.h trunk/tora/src/todocklet.cpp trunk/tora/src/todocklet.h trunk/tora/src/topushbutton.cpp trunk/tora/src/topushbutton.h Modified: trunk/tora/src/CMakeLists.txt =================================================================== --- trunk/tora/src/CMakeLists.txt 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/CMakeLists.txt 2008-12-01 18:44:58 UTC (rev 3091) @@ -94,6 +94,9 @@ toconnectionimport.h toconnectionmodel.h toconnectionpool.h + todocklet.h + todockbar.h + topushbutton.h torunnable.h tonoblockquery.h tocurrent.h @@ -216,6 +219,9 @@ # shortcuteditor shortcuteditor/shortcuteditordialog.h shortcuteditor/shortcutmodel.h +# docklets + docklets/toviewconnections.h + docklets/toviewdirectory.h ) IF (ORACLE_FOUND) LIST(APPEND TORA_MOC_CLASSES tooraclesetting.h) @@ -242,6 +248,9 @@ toconnectionimport.cpp toconnectionmodel.cpp toconnectionpool.cpp + todocklet.cpp + todockbar.cpp + topushbutton.cpp torunnable.cpp tocurrent.cpp todatatype.cpp @@ -368,6 +377,9 @@ # shortcuteditor shortcuteditor/shortcuteditordialog.cpp shortcuteditor/shortcutmodel.cpp + # docklets + docklets/toviewconnections.cpp + docklets/toviewdirectory.cpp ) # compiled in icons for windows IF (WIN32 AND MSVC) Modified: trunk/tora/src/Makefile.am =================================================================== --- trunk/tora/src/Makefile.am 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/Makefile.am 2008-12-01 18:44:58 UTC (rev 3091) @@ -110,6 +110,11 @@ tobackup.cpp tobackup.h \ tobackuptool.cpp tobackuptool.h \ tobrowser.cpp tobrowser.h \ + todocklet.cpp todocklet.h \ + todockbar.cpp todockbar.h \ + topushbutton.cpp topushbutton.h \ + docklets/toviewdirectory.cpp docklets/toviewdirectory.h \ + docklets/toviewconnections.cpp docklets/toviewconnections.h \ tobarchart.cpp tobarchart.h \ tocurrent.cpp tocurrent.h \ todebug.cpp todebug.h \ @@ -128,8 +133,8 @@ tocodemodel.cpp tocodemodel.h \ toscripttreemodel.cpp toscripttreemodel.h \ tosecurity.cpp tosecurity.h \ - tosecuritytreemodel.cpp tosecuritytreemodel.h \ - tosecuritytreeitem.cpp tosecuritytreeitem.h \ + tosecuritytreemodel.cpp tosecuritytreemodel.h \ + tosecuritytreeitem.cpp tosecuritytreeitem.h \ tosession.cpp tosession.h \ tosgatrace.cpp tosgatrace.h \ tosqledit.cpp tosqledit.h \ @@ -180,8 +185,8 @@ migratetool/sqldeveloper.cpp migratetool/sqldeveloper.h \ migratetool/squirrelsql.cpp migratetool/squirrelsql.h \ migratetool/tora3.cpp migratetool/tora3.h \ - shortcuteditordialog.cpp shortcuteditordialog.h \ - shortcutmodel.cpp shortcutmodel.h \ + shortcuteditor/shortcuteditordialog.cpp shortcuteditor/shortcuteditordialog.h \ + shortcuteditor/shortcutmodel.cpp shortcuteditor/shortcutmodel.h \ $(EXTRA_ORACLE_MONO_SOURCE) \ $(LOKIDIR_SRC)/SmallObj.cpp \ $(LOKIDIR_SRC)/Singleton.cpp \ @@ -234,7 +239,7 @@ tostorageprefsui.ui \ todroptablespaceui.ui \ toscriptschemawidgetui.ui \ - shortcuteditordialog.ui + shortcuteditor/shortcuteditordialog.ui EXTRA_DIST = icons \ @@ -354,7 +359,7 @@ moc_toscript.cpp \ moc_tosearchreplace.cpp \ moc_tosecurity.cpp \ - moc_tosecuritytreemodel.cpp \ + moc_tosecuritytreemodel.cpp \ moc_tosession.cpp \ moc_tosgastatement.cpp \ moc_tosgatrace.cpp \ @@ -380,8 +385,13 @@ moc_toscriptschemawidget.cpp \ moc_toscripttreemodel.cpp \ moc_toworkingwidget.cpp \ - moc_shortcuteditordialog.cpp \ - moc_shortcutmodel.cpp \ + shortcuteditor/moc_shortcuteditordialog.cpp \ + shortcuteditor/moc_shortcutmodel.cpp \ + moc_todocklet.cpp \ + moc_todockbar.cpp \ + moc_topushbutton.cpp \ + docklets/moc_toviewdirectory.cpp \ + docklets/moc_toviewconnections.cpp \ ui_toaboutui.h \ ui_todroptablespaceui.h \ ui_tobrowserconstraintui.h \ @@ -427,7 +437,7 @@ ui_toworksheetsetupui.h \ ui_tohelpui.h \ ui_toscriptschemawidgetui.h \ - ui_shortcuteditordialog.h \ + shortcuteditor/ui_shortcuteditordialog.h \ $(EXTRA_ORACLE_MONO_SOURCE_MOC) \ $(filter %.qm,$(TRANSLATIONS:%.ts=%.qm)) \ tora_toad.h \ @@ -438,8 +448,8 @@ ui_%.h: %.ui $(UIC) -o $@ $< -#%.cpp: %.h %.ui -# $(UIC) -o $@ $< +%.cpp: %.h %.ui + $(UIC) -o $@ $< moc_%.cpp: %.h $(MOC) $< -o $@ @@ -484,19 +494,3 @@ install-data-hook: mkdir -p $(DESTDIR)$(libdir) cp -f $(top_builddir)/src/i18n/*.qm $(DESTDIR)$(libdir) - -# temporary hack - autoconf does not support sources in different dirctory -shortcuteditordialog.cpp: - ln -sf $(top_srcdir)/src/shortcuteditor/shortcuteditordialog.cpp - -shortcuteditordialog.h: - ln -sf $(top_srcdir)/src/shortcuteditor/shortcuteditordialog.h - -shortcuteditordialog.ui: - ln -sf $(top_srcdir)/src/shortcuteditor/shortcuteditordialog.ui - -shortcutmodel.cpp: - ln -sf $(top_srcdir)/src/shortcuteditor/shortcutmodel.cpp - -shortcutmodel.h: - ln -sf $(top_srcdir)/src/shortcuteditor/shortcutmodel.h Added: trunk/tora/src/docklets/toviewconnections.cpp =================================================================== --- trunk/tora/src/docklets/toviewconnections.cpp (rev 0) +++ trunk/tora/src/docklets/toviewconnections.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,168 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + + +#include "utils.h" +#include "toviewconnections.h" +#include "tomain.h" +#include "toconnectionmodel.h" + +#include <QHeaderView> + +REGISTER_VIEW("Connection", toViewConnections); + + +toViewConnections::toViewConnections(QWidget *parent, + Qt::WindowFlags flags) + : toDocklet(tr("Connections"), parent, flags) +{ + setObjectName("Connections Docklet"); + + TableView = new QTableView(this); + setFocusProxy(TableView); + + Model = toNewConnection::proxyModel(); + toNewConnection::connectionModel()->readConfig(); + TableView->setModel(Model); + + TableView->horizontalHeader()->setStretchLastSection(true); + TableView->horizontalHeader()->setHighlightSections(false); + TableView->verticalHeader()->setVisible(false); + TableView->hideColumn(0); + TableView->hideColumn(1); + TableView->hideColumn(5); + + TableView->setSelectionBehavior(QAbstractItemView::SelectRows); + TableView->setSelectionMode(QAbstractItemView::ContiguousSelection); + TableView->setAlternatingRowColors(true); + + connect(TableView, + SIGNAL(activated(const QModelIndex &)), + this, + SLOT(handleActivated(const QModelIndex &))); + + setWidget(TableView); +} + + +QIcon toViewConnections::icon() const +{ + return QIcon(":/icons/connect.xpm"); +} + + +QString toViewConnections::name() const +{ + return tr("Connections"); +} + + +void toViewConnections::handleActivated(const QModelIndex &index) { + if(!index.isValid()) + return; + + QModelIndex baseIndex = toNewConnection::proxyModel()->index(index.row(), 0); + int ind = toNewConnection::proxyModel()->data(baseIndex, Qt::DisplayRole).toInt(); + toConnectionOptions opt = toNewConnection::connectionModel()->availableConnection(ind); + + QString database = opt.database; + QString host = opt.host; + QString provider = opt.provider; + + if(opt.port) + host += ":" + QString::number(opt.port); + + if(provider == toNewConnection::ORACLE_INSTANT) + { + // create the rest of the connect string. this will work + // without an ORACLE_HOME. + + database = "//" + host + "/" + database; + host = ""; + } + + if(opt.provider.startsWith("Oracle")) + provider = "Oracle"; + + // checks for existing connection + std::list<QString> con = toMainWidget()->connections(); + for (std::list<QString>::iterator i = con.begin();i != con.end();i++) + { + try + { + toConnection &conn = toMainWidget()->connection(*i); + +// qDebug() << "user" << conn.user() << opt.username; +// qDebug() << "prov" << conn.provider() << provider; +// qDebug() << "host" << conn.host() << host; +// qDebug() << "db" << conn.database() << database; +// qDebug() << "schema" << conn.schema() << opt.schema; + + if(conn.user() == opt.username && + conn.provider() == provider && + conn.host() == host && + conn.database() == database && + opt.schema.isEmpty() || (conn.schema() == opt.schema)) + { + toMainWidget()->createDefault(); + emit activated(); + return; + } + } + catch (...) {} + } + + try { + toConnection *retCon = new toConnection( + provider, + opt.username, + opt.password, + host, + database, + opt.schema, + opt.options); + + if(retCon) + toMainWidget()->addConnection(retCon, true); + emit activated(); + } + TOCATCH; +} Added: trunk/tora/src/docklets/toviewconnections.h =================================================================== --- trunk/tora/src/docklets/toviewconnections.h (rev 0) +++ trunk/tora/src/docklets/toviewconnections.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,86 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + +#ifndef TOVIEWCONNECTIONS_H +#define TOVIEWCONNECTIONS_H + +#include "config.h" +#include "todocklet.h" + +#include <QTableView> +#include <QSortFilterProxyModel> + +class toToolWidget; +class toConnectionModel; + + +class toViewConnections : public toDocklet +{ + Q_OBJECT; + +private: + QSortFilterProxyModel *Model; + QTableView *TableView; + +public: + toViewConnections(QWidget *parent = 0, + Qt::WindowFlags flags = 0); + + + /** + * Get the action icon name for this docklet + * + */ + virtual QIcon icon() const; + + /** + * Get the docklet's name + * + */ + virtual QString name() const; + + +public slots: + void handleActivated(const QModelIndex &index); +}; + + +#endif Added: trunk/tora/src/docklets/toviewdirectory.cpp =================================================================== --- trunk/tora/src/docklets/toviewdirectory.cpp (rev 0) +++ trunk/tora/src/docklets/toviewdirectory.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,158 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + + +#include "utils.h" +#include "toviewdirectory.h" +#include "tomain.h" +#include "toworksheet.h" +#include "tohighlightedtext.h" +#include "totool.h" +#include "toconfiguration.h" + + +REGISTER_VIEW("Directory", toViewDirectory); + + +toViewDirectory::toViewDirectory(QWidget *parent, + Qt::WindowFlags flags) + : toDocklet(tr("Directory"), parent, flags) +{ + setObjectName("Directory Docklet"); + + ListView = new QListView(this); + setFocusProxy(ListView); + + Model = new QDirModel; + Model->setSorting(QDir::DirsFirst | QDir::Name); + Model->setFilter(QDir::AllEntries); + ListView->setModel(Model); + + connect(ListView, + SIGNAL(activated(const QModelIndex &)), + this, + SLOT(handleActivated(const QModelIndex &))); + + connect(toMainWidget(), + SIGNAL(addedToolWidget(toToolWidget *)), + this, + SLOT(handleToolAdded(toToolWidget *))); + + setWidget(ListView); + + // default to the default file in worksheet editor if specified + QString autoload = toConfigurationSingle::Instance().wsAutoLoad(); + if(!autoload.isEmpty()) + showFile(autoload); + else + findRoot(QDir::currentPath()); +} + + +QIcon toViewDirectory::icon() const +{ + return style()->standardIcon(QStyle::SP_ComputerIcon); +} + + +QString toViewDirectory::name() const +{ + return tr("Directory"); +} + + +void toViewDirectory::findRoot(QFileInfo dir) { + if(!dir.isDir()) + dir = QFileInfo(dir.absoluteDir().absolutePath()); + + ListView->setRootIndex(Model->index(dir.absoluteFilePath())); +} + + +void toViewDirectory::handleActivated(const QModelIndex &index) { + if(!index.isValid()) + return; + + QFileInfo info = Model->fileInfo(index); + if(info.isDir()) + findRoot(info); + else if(info.isFile()) + { + toMainWidget()->editOpenFile(info.absoluteFilePath()); + emit activated(); + } +} + + +void toViewDirectory::handleToolAdded(toToolWidget *tool) { + toWorksheet *sheet = dynamic_cast<toWorksheet *>(tool); + if(!sheet) + return; + + // just in case we already connected to this one + disconnect(sheet->editor(), + 0, + this, + 0); + + connect(sheet->editor(), + SIGNAL(fileOpened(QString)), + this, + SLOT(showFile(QString))); +} + + +void toViewDirectory::showFile(QString file) { + QFileInfo info(file); + + findRoot(info); + if(!info.exists()) + return; + + QModelIndex index = Model->index(file); + if(!index.isValid()) + return; + + ListView->selectionModel()->select(QItemSelection(index, index), + QItemSelectionModel::ClearAndSelect); + ListView->setCurrentIndex(index); +} + Added: trunk/tora/src/docklets/toviewdirectory.h =================================================================== --- trunk/tora/src/docklets/toviewdirectory.h (rev 0) +++ trunk/tora/src/docklets/toviewdirectory.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,96 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + +#ifndef TOVIEWDIRECTORY_H +#define TOVIEWDIRECTORY_H + +#include "config.h" +#include "todocklet.h" + +#include <QListView> +#include <QDirModel> + +class toToolWidget; + + +class toViewDirectory : public toDocklet +{ + Q_OBJECT; + +private: + QDirModel *Model; + QListView *ListView; + +public: + toViewDirectory(QWidget *parent = 0, + Qt::WindowFlags flags = 0); + + + /** + * Get the action icon name for this docklet + * + */ + virtual QIcon icon() const; + + /** + * Get the docklet's name + * + */ + virtual QString name() const; + + + /** + * Update model show the given directory is listed. + * + */ + void findRoot(QFileInfo dir); + + +public slots: + void handleActivated(const QModelIndex &index); + + void handleToolAdded(toToolWidget *); + + void showFile(QString); +}; + + +#endif Modified: trunk/tora/src/toconnection.h =================================================================== --- trunk/tora/src/toconnection.h 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/toconnection.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -750,7 +750,7 @@ * in a subconnection. * @param conn Connection to copy. */ - toConnection(const toConnection &conn); + explicit toConnection(const toConnection &conn); /** Destroy connection. */ virtual ~toConnection(); Modified: trunk/tora/src/toconnectionmodel.cpp =================================================================== --- trunk/tora/src/toconnectionmodel.cpp 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/toconnectionmodel.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -40,11 +40,14 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "toconnectionmodel.h" +#include "tonewconnection.h" +#include "utils.h" +#include <QSettings> + toConnectionModel::toConnectionModel() { - m_data.clear(); } void toConnectionModel::setupData(QMap<int,toConnectionOptions> list) @@ -54,22 +57,77 @@ reset(); } + +void toConnectionModel::readConfig() +{ + m_data.clear(); + + QSettings Settings; + Settings.beginGroup("connections"); + Settings.beginGroup("history"); + for (int pos = 0; pos < Settings.childGroups().count(); ++pos) + { + Settings.beginGroup(/*"history/" +*/ QString::number(pos)); // X + if (!Settings.contains("provider")) + { + Settings.endGroup(); // X + break; + } + + QString provider = Settings.value("provider", "").toString(); + QString host = Settings.value("host", "").toString(); + QString database = Settings.value("database", "").toString(); + QString username = Settings.value("username", "").toString(); + QString password = toUnobfuscate(Settings.value("password", "").toString()); + QString schema = Settings.value("schema", "").toString(); + + if (provider == toNewConnection::ORACLE_TNS) + host = ""; + + Settings.beginGroup("options"); + std::set<QString> options; + QStringList keys = Settings.allKeys(); + Q_FOREACH(QString s, keys) + { + if (Settings.value(s, false).toBool()) + options.insert(s); + } + Settings.endGroup(); // options + + toConnectionOptions opt( + provider, + host, + database, + username, + password, + schema, + Settings.value("port", 0).toInt(), + options); + m_data[pos] = opt; + Settings.endGroup(); // X + } + Settings.endGroup(); // history + + reset(); +} + void toConnectionModel::append(int ix, toConnectionOptions conn) { m_data[ix] = conn; reset(); } -// bool toConnectionModel::removeRow(int row, const QModelIndex & parent) -// { -// // beginRemoveRows(QModelIndex(), row, row + 1); -// QModelIndex ix = index(row, 0); -// int key = data(ix, Qt::DisplayRole).toInt(); -// bool ret = m_data.remove(key); -// // endRemoveRows(); -// return ret; -// } +bool toConnectionModel::removeRow(int row, const QModelIndex &parent) +{ + beginRemoveRows(QModelIndex(), row, row + 1); + QModelIndex ix = index(row, 0); + int key = data(ix, Qt::DisplayRole).toInt(); + bool ret = m_data.remove(key); + endRemoveRows(); + return ret; +} + QVariant toConnectionModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) Modified: trunk/tora/src/toconnectionmodel.h =================================================================== --- trunk/tora/src/toconnectionmodel.h 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/toconnectionmodel.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -58,10 +58,12 @@ public: toConnectionModel(); + //! \brief Pull connections from QSettings + void readConfig(); //! \brief Set the m_data and update all connected views. void setupData(QMap<int,toConnectionOptions> list); void append(int ix, toConnectionOptions conn); -// bool removeRow(int row, const QModelIndex & parent = QModelIndex()); + bool removeRow(int row, const QModelIndex & parent = QModelIndex()); //! \brief Bring m_data back to caller. QMap<int,toConnectionOptions> availableConnections() { return m_data; }; toConnectionOptions availableConnection(int ix) { return m_data[ix]; }; Added: trunk/tora/src/todockbar.cpp =================================================================== --- trunk/tora/src/todockbar.cpp (rev 0) +++ trunk/tora/src/todockbar.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,156 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + +#include "todockbar.h" +#include "todocklet.h" + + +toDockbarButton::toDockbarButton(const QIcon &icon, + const QString &text, + QWidget *parent) + : toPushButton(icon, text, parent) +{ +} + + +toDockbar::toDockbar(Qt::ToolBarArea area, + const QString &title, + QWidget *parent) + : QToolBar(title, parent) +{ + Area = area; + + setObjectName(title); + setAllowedAreas(area); + setFloatable(false); + setMovable(false); + + if(Area == Qt::LeftToolBarArea || Qt::RightToolBarArea) + setOrientation(Qt::Vertical); +} + + +void toDockbar::addDocklet(toDocklet *let, bool show) +{ + if(Docklets.contains(let->name())) + { + if(show) + let->show(); + return; + } + + // this action is not related to + // QDockWidget::toggleViewAction. Clicking this activates a + // Qt::Tool window that'll be dismissed after it looses focus. + toDockbarButton *button = new toDockbarButton(let->icon(), let->name(), 0); + if(Area == Qt::LeftToolBarArea) + button->setRotation(toPushButton::CounterClockwise); + else if(Area == Qt::RightToolBarArea) + button->setRotation(toPushButton::Clockwise); + + button->setCheckable(true); + addWidget(button); + + Docklets[let->name()] = button; + + this->show(); + + if(show) + let->setFocus(Qt::OtherFocusReason); + else + let->hide(); + + connect(button, + SIGNAL(clicked(bool)), + let, + SLOT(showPopup(bool))); + + connect(let, + SIGNAL(popupVisibleToggled(bool)), + button, + SLOT(setChecked(bool))); +} + + +toDocklet* toDockbar::removeDocklet(QString name) +{ + toDocklet *let = toDocklet::docklet(name); + if(!let) + return 0; + + return removeDocklet(let); +} + + +toDocklet* toDockbar::removeDocklet(toDocklet *let) +{ + if(let->isVisible()) + let->close(); + if(!Docklets.contains(let->name())) + return 0; + + delete Docklets.take(let->name()); + + // if that was the last docklet removed, hide the toolbar + if(Docklets.size() < 1) + hide(); + + return let; +} + + +void toDockbar::setAllVisible(bool visible) +{ + foreach(QString name, Docklets.keys()) + { + toDocklet *let = toDocklet::docklet(name); + if(!let) + continue; + + let->setVisible(visible); + } +} + + +bool toDockbar::contains(toDocklet *let) +{ + return Docklets.contains(let->name()); +} Added: trunk/tora/src/todockbar.h =================================================================== --- trunk/tora/src/todockbar.h (rev 0) +++ trunk/tora/src/todockbar.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,126 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + +#ifndef TODOCKBAR_H +#define TODOCKBAR_H + +#include "config.h" +#include "topushbutton.h" + +#include <QAction> +#include <QToolBar> +#include <QMap> + +class toDocklet; + + +class toDockbarButton : public toPushButton +{ + Q_OBJECT; + +public: + explicit toDockbarButton(const QIcon &icon, + const QString &text, + QWidget *parent = 0); +}; + + +class toDockbar : public QToolBar +{ + Q_OBJECT; + +private: + Qt::ToolBarArea Area; + + // docklets managed by this dockbar + QMap<QString, toDockbarButton *> Docklets; + +public: + toDockbar(Qt::ToolBarArea area, + const QString &title, + QWidget *parent = 0); + + /** + * Adds docklet to be managed by this dockbar + * + */ + void addDocklet(toDocklet *let, bool show = true); + + + /** + * Removes a docklet managed by this dockbar + * + */ + toDocklet* removeDocklet(QString name); + + + /** + * Removes a docklet managed by this dockbar + * + */ + toDocklet* removeDocklet(toDocklet *let); + + + /** + * Show or hide all docklets + * + */ + void setAllVisible(bool); + + + /** + * Returns true if this dockbar manages this docklet + * + */ + bool contains(toDocklet *let); + + + /** + * Returns the area for the dockbar + * + */ + inline Qt::ToolBarArea area() const + { + return Area; + } +}; + +#endif Added: trunk/tora/src/todocklet.cpp =================================================================== --- trunk/tora/src/todocklet.cpp (rev 0) +++ trunk/tora/src/todocklet.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,167 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + + +#include "utils.h" +#include "todocklet.h" +#include "docklets/toviewdirectory.h" +#include "docklets/toviewconnections.h" +#include "tomain.h" +#include "todockbar.h" + +#include <QMdiArea> +#include <QVBoxLayout> + + +static QMap<QString, toDockletHolder *>& Docklets() { + static QMap<QString, toDockletHolder *> Docklets; + return Docklets; +} + + +toDocklet::toDocklet(const QString &title, + QWidget *parent, + Qt::WindowFlags flags) + : QDockWidget(title, parent, flags), + isPopup(false) +{ + setFocusPolicy(Qt::StrongFocus); + setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + + connect(this, + SIGNAL(activated()), + this, + SLOT(childActivated())); +} + + +toDockletHolder* toDocklet::registerDocklet(QString name, toDockletHolder *holder) +{ + Docklets()[name] = holder; + return holder; +} + + +toDocklet* toDocklet::docklet(QString name) +{ + foreach(toDockletHolder *holder, Docklets().values()) + { + toDocklet *let = holder->docklet(); + if(let->name() == name) + return let; + } + + return 0; +} + + +QList<toDocklet *> toDocklet::docklets() +{ + QList<toDockletHolder *> holders = Docklets().values(); + QList<toDocklet *> ret; + foreach(toDockletHolder *hold, holders) + ret.append(hold->docklet()); + return ret; +} + + +void toDocklet::showPopup(bool shown) +{ + setFocusProxy(widget()); + + if(shown) + { + // if this window is docked it'll screw with the viewport + // measurements, so make sure to hide it and allow QMainWidget + // to redraw the layout first. + hide(); + qApp->processEvents(); + + setFloating(true); + // setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); + show(); + + toDockbar *dockbar = toMainWidget()->dockbar(this); + Qt::ToolBarArea area = dockbar->area(); + + QPoint pos; + if(area == Qt::LeftToolBarArea) + pos.setX(dockbar->geometry().width()); + pos = dockbar->mapToGlobal(pos); + move(pos); + + QRect geom = geometry(); + geom.setHeight(toMainWidget()->workspace()->viewport()->geometry().height()); + setGeometry(geom); + + isPopup = shown; + raise(); + qApp->setActiveWindow(this); // works + activateWindow(); // doesn't work + widget()->setFocus(); + } + else + { + if(isPopup) // may be open in dock + { + setWindowFlags(0); // defaults + hide(); + isPopup = false; // not anymore + setWindowModality(Qt::NonModal); + } + } + + emit popupVisibleToggled(isPopup); +} + + +bool toDocklet::event(QEvent *event) +{ + if(event->type() == QEvent::WindowDeactivate) + showPopup(false); + return QDockWidget::event(event); +} + + +void toDocklet::childActivated() +{ + showPopup(false); +} Added: trunk/tora/src/todocklet.h =================================================================== --- trunk/tora/src/todocklet.h (rev 0) +++ trunk/tora/src/todocklet.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -0,0 +1,171 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER + * + * TOra - An Oracle Toolkit for DBA's and developers + * + * Shared/mixed copyright is held throughout files in this product + * + * Portions Copyright (C) 2000-2001 Underscore AB + * Portions Copyright (C) 2003-2005 Quest Software, Inc. + * Portions Copyright (C) 2004-2008 Numerous Other Contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; only version 2 of + * the License is valid for this program. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, you have permission to link this program + * with the Oracle Client libraries and distribute executables, as long + * as you follow the requirements of the GNU GPL in regard to all of the + * software in the executable aside from Oracle client libraries. + * + * Specifically you are not permitted to link this program with the + * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. + * And you are not permitted to distribute binaries compiled against + * these libraries. + * + * You may link this product with any GPL'd Qt library. + * + * All trademarks belong to their respective owners. + * + * END_COMMON_COPYRIGHT_HEADER */ + +#ifndef TODOCKLET_H +#define TODOCKLET_H + +#include "config.h" + +#include <QMap> +#include <QAction> +#include <QWidget> +#include <QDockWidget> +#include <QRect> + +class toDocklet; + +class toDockletHolder +{ +public: + virtual toDocklet* docklet(QWidget *parent = 0, + Qt::WindowFlags flags = 0) = 0; +}; + + +class toDocklet : public QDockWidget +{ + Q_OBJECT; + +public: + explicit toDocklet(const QString &title, + QWidget *parent = 0, + Qt::WindowFlags flags = 0); + virtual ~toDocklet() {} + + + /** + * Get the icon for this docklet + * + */ + virtual QIcon icon() const = 0; + + + /** + * Get the docklet's name + * + */ + virtual QString name() const = 0; + + + // ---------------------------------------- static + + /** + * Used by REGISTER_VIEW to init docklets + * + */ + static toDockletHolder* registerDocklet(QString name, toDockletHolder *holder); + + + /** + * Get a list of available docklets + * + */ + static QList<toDocklet *> docklets(void); + + + /** + * Find the docklet for the given name + * + */ + static toDocklet* docklet(QString name); + + +signals: + /** + * Use this signal in a subclass after a child widget has been + * activated. toDocklet will handle closing the popup, if any. + * + */ + void activated(void); + + + /** + * Emitted when the popup is closed + * + */ + void popupVisibleToggled(bool shown); + + +public slots: + /** + * Show or hide popup. This is different from QDockWidget::floating + * + */ + void showPopup(bool shown); + + +protected: + virtual bool event(QEvent *event); + + +private slots: + void childActivated(); + + +private: + bool isPopup; +}; + + +/** + * Registers views statically. Simply place: + * + * REGISTER_VIEW("some untranslated, unique name", myAwesomeView); + * + * call in the .cpp file of your view definition. Uses toDockletHolder + * to get around limitations with static initialization and QWidgets. + * + */ +#define REGISTER_VIEW(NAME, TYPE) \ +class TYPE##Holder : public toDockletHolder \ +{ \ +public: \ + virtual toDocklet* docklet(QWidget *parent = 0, \ + Qt::WindowFlags flags = 0) \ + { \ + static TYPE *let = new TYPE(parent, flags); \ + return let; \ + } \ +}; \ +toDockletHolder* TYPE ## _myPrototype = \ + toDocklet::registerDocklet(NAME, new TYPE##Holder()); + +#endif Modified: trunk/tora/src/tomain.cpp =================================================================== --- trunk/tora/src/tomain.cpp 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/tomain.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -58,6 +58,10 @@ #include "totool.h" #include "tomessage.h" #include "tothread.h" +#include "todocklet.h" +#include "todockbar.h" +#include "toworksheet.h" +#include "tohighlightedtext.h" #include <qapplication.h> #include <qcombobox.h> @@ -128,6 +132,8 @@ createToolMenus(); + createDocklets(); + handleToolsDisplay(); updateRecent(); @@ -188,14 +194,12 @@ TOCATCH; } -// if (toConfigurationSingle::Instance().maximizeMain() && Connections.empty()) -// showMaximized(); -// else -// show(); setCentralWidget(Workspace); show(); + createDockbars(); // keep after restoreState() and show() + statusBar()->addPermanentWidget(BackgroundLabel, 0); BackgroundLabel->show(); BackgroundLabel->setToolTip(tr("No background queries.")); @@ -446,6 +450,20 @@ SLOT(commandCallback(QAction *)), Qt::QueuedConnection); + viewMenu = menuBar()->addMenu(tr("&View")); + foreach(toDocklet *let, toDocklet::docklets()) + { + viewMenu->addAction(new QAction(let->icon(), + let->name(), + 0)); + } + + connect(viewMenu, + SIGNAL(triggered(QAction *)), + this, + SLOT(viewCallback(QAction *)), + Qt::QueuedConnection); + toolsMenu = menuBar()->addMenu(tr("&Tools")); connect(toolsMenu, SIGNAL(triggered(QAction *)), @@ -540,7 +558,7 @@ addToolBarBreak(); } -//! \warning Do not use it. It screw realoading of the state of toolbars +//! \warning Do not use it. It screws up reloading the toolbar state void toMain::addButtonApplication(QAction *act) { editToolbar->addAction(act); @@ -642,6 +660,48 @@ TOCATCH; } + +void toMain::createDocklets() +{ + foreach(toDocklet *let, toDocklet::docklets()) + addDockWidget(Qt::LeftDockWidgetArea, let); +} + + +// must call this after restoreState() + +void toMain::createDockbars() +{ + leftDockbar = new toDockbar(Qt::LeftToolBarArea, + tr("Left Dockbar"), + this); + addToolBar(Qt::LeftToolBarArea, leftDockbar); + leftDockbar->hide(); + + rightDockbar = new toDockbar(Qt::RightToolBarArea, + tr("Right Dockbar"), + this); + addToolBar(Qt::RightToolBarArea, rightDockbar); + rightDockbar->hide(); + + // toDockbar keeps it's own settings, but just in case something + // goes wrong, or a new setup, add any visible docklets to the + // dockbar. + + foreach(toDocklet *let, toDocklet::docklets()) + { + if(!let->isVisible()) + continue; + + Qt::DockWidgetArea area = dockWidgetArea(let); + if(area == Qt::LeftDockWidgetArea) + leftDockbar->addDocklet(let, false); + else if(area == Qt::RightDockWidgetArea) + rightDockbar->addDocklet(let, false); + } +} + + void toMain::handleToolsDisplay() { #if QT_VERSION >= 0x040400 @@ -849,6 +909,34 @@ } +void toMain::viewCallback(QAction *action) +{ + toDocklet *let = toDocklet::docklet(action->text()); + if(!let) + return; + + if(leftDockbar->contains(let)) + { + leftDockbar->removeDocklet(let); + return; + } + if(rightDockbar->contains(let)) + { + rightDockbar->removeDocklet(let); + return; + } + + addDockWidget(Qt::LeftDockWidgetArea, let); + restoreDockWidget(let); + + Qt::DockWidgetArea area = dockWidgetArea(let); + if(area == Qt::RightDockWidgetArea) + rightDockbar->addDocklet(let); + else + leftDockbar->addDocklet(let); +} + + void toMain::commandCallback(QAction *action) { QWidget *focus = qApp->focusWidget(); @@ -1387,6 +1475,9 @@ } TOCATCH; + leftDockbar->setAllVisible(true); + rightDockbar->setAllVisible(true); + toConfigurationSingle::Instance().setMainWindowGeometry(saveGeometry()); toConfigurationSingle::Instance().setMainWindowState(saveState()); @@ -1462,11 +1553,54 @@ } +void toMain::editOpenFile(QString file) { + toWorksheet *sheet = 0; + if(Edit) + sheet = dynamic_cast<toWorksheet *>(Edit); + + // the only fscking way to find the tool on top, regardless of + // what's got focus or whatever. this is called from docklets + // which usually have focus. though, manually setting focus on + // Workspace doesn't help either. + if(!Workspace->subWindowList().isEmpty()) + { + QMdiSubWindow *sub = Workspace->subWindowList(QMdiArea::StackingOrder).last(); + if(!sheet && sub) + sheet = dynamic_cast<toWorksheet *>(sub->widget()); + } + + if(!sheet) { + toTool *tool = toTool::tool("00010SQL Editor"); + if(tool) { + QWidget *win = tool->createWindow(); + if(win) + sheet = dynamic_cast<toWorksheet *>(win); + } + else + printf("Couldn't find sql worksheet.\n"); + } + + if(!sheet) + return; + + sheet->editor()->editOpen(file); + sheet->setFocus(); +} + + +toDockbar* toMain::dockbar(toDocklet *let) +{ + if(rightDockbar->contains(let)) + return rightDockbar; + return leftDockbar; +} + + void toMain::showMessage(const QString &str, bool save, bool log) { - // this function can be called from any thread. - // this tomain class is in the main (gui) thread, so emitting - // a signal with a queued flag will be picked up in the main + // this function can be called from any thread. this tomain + // instance is always in the main (gui) thread, so emitting a + // signal with a queued flag will be picked up in the main // thread. otherwise tora crashes. emit messageRequested(str, save, log); } Modified: trunk/tora/src/tomain.h =================================================================== --- trunk/tora/src/tomain.h 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/tomain.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -76,6 +76,8 @@ class toTool; class toToolWidget; class toMessage; +class toDocklet; +class toDockbar; /** This class defines the main window. Observe that this class will have different baseclass @@ -105,11 +107,6 @@ */ QComboBox *ConnectionSelection; /** - * Add a new connection. The connection itself must already be created. - * Returns the connection or it's duplicate already opened connection. - */ - toConnection *addConnection(toConnection *conn, bool def = true); - /** * The ID of the tool providing the SQL editor. */ QString SQLEditor; @@ -138,6 +135,18 @@ QToolBar *connectionToolbar; /** + * Toolbar for minimizing docklets, left + * + */ + toDockbar *leftDockbar; + + /** + * Toolbar for minimizing docklets, right + * + */ + toDockbar *rightDockbar; + + /** * File menu. */ QMenu *fileMenu; @@ -150,6 +159,10 @@ */ QMenu *editMenu; /** + * View menu. + */ + QMenu *viewMenu; + /** * Tools menu. */ QMenu *toolsMenu; @@ -251,6 +264,8 @@ void createToolbars(); void createStatusbar(); void createToolMenus(); + void createDocklets(); + void createDockbars(); //! \brief Sets tools displaying depending on preferences (tabs/windows) void handleToolsDisplay(); @@ -449,6 +464,12 @@ */ void addButtonApplication(QAction *); + /** + * Add a new connection. The connection itself must already be created. + * Returns the connection or it's duplicate already opened connection. + */ + toConnection *addConnection(toConnection *conn, bool def = true); + signals: /** Invoked to start editing an SQL identifier. * @param str Identifier to start editing. @@ -550,6 +571,20 @@ */ void removeBusy(void); + /** + * Open a file in sql worksheet + * + */ + void editOpenFile(QString file); + + /** + * Return the toDockbar that manages the docklet. If none + * currently manages the docklet, returns what will if the docklet + * is shown. + * + */ + toDockbar* dockbar(toDocklet *let); + protected: /** intercept close event from parent */ @@ -585,6 +620,12 @@ */ void windowCallback(QAction *action); + /** + * handles callbacks for the view menu + * + */ + void viewCallback(QAction *action); + void updateStatusMenu(void); /** Display status message Modified: trunk/tora/src/tomarkedtext.cpp =================================================================== --- trunk/tora/src/tomarkedtext.cpp 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/tomarkedtext.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -274,6 +274,8 @@ { openFilename(fname); emit fileOpened(); + emit fileOpened(fname); + printf("emit file opened\n"); return true; } TOCATCH Modified: trunk/tora/src/tomarkedtext.h =================================================================== --- trunk/tora/src/tomarkedtext.h 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/tomarkedtext.h 2008-12-01 18:44:58 UTC (rev 3091) @@ -240,6 +240,7 @@ void displayMenu(QMenu *); // emitted when a new file is opened void fileOpened(void); + void fileOpened(QString file); protected: virtual void newLine(void); Modified: trunk/tora/src/tonewconnection.cpp =================================================================== --- trunk/tora/src/tonewconnection.cpp 2008-12-01 14:26:46 UTC (rev 3090) +++ trunk/tora/src/tonewconnection.cpp 2008-12-01 18:44:58 UTC (rev 3091) @@ -60,24 +60,21 @@ // #define MAX_HISTORY 50 -static const QString ORACLE_INSTANT = "Oracle (Instant Client)"; -static const QString ORACLE_TNS = "Oracle (TNS)"; +const QString toNewConnection::ORACLE_INSTANT = "Oracle (Instant Client)"; +const QString toNewConnection::ORACLE_TNS = "Oracle (TNS)"; +static toConnectionModel *m_connectionModel = 0; +static QSortFilterProxyModel *m_proxyModel = 0; -toNewConnection::toNewConnection( - QWidget* parent, - Qt::WFlags fl) : QDialog(parent, fl), - toHelpContext(QString::fromLatin1("newconnection.html")) + +toNewConnection::toNewConnection(QWidget* parent, Qt::WFlags fl) + : QDialog(parent, fl), + toHelpContext(QString::fromLatin1("newconnection.html")) { setupUi(this); toHelp::connectDialog(this); - m_connectionModel = new toConnectionModel(); - m_proxyModel = new QSortFilterProxyModel(this); - m_proxyModel->setSourceModel(m_connectionModel); - m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - m_proxyModel->setFilterKeyColumn(-1); - Previous->setModel(m_proxyModel); + Previous->setModel(proxyModel()); std::list<QString> lst = toConnectionProvider::providers(); @@ -171,56 +168,12 @@ void toNewConnection::readSettings() { - QMap<int, toConnectionOptions> OptionMap; restoreGeometry(Settings.value("geometry").toByteArray()); + connectionModel()->readConfig(); + Previous->setSortingEnabled(false); - Settings.beginGroup("history"); - for (int pos = 0; pos < Settings.childGroups().count(); ++pos) - { - Settings.beginGroup(/*"history/" +*/ QString::number(pos)); // X - if (!Settings.contains("provider")) - { - Settings.endGroup(); // X - break; - } - - QString provider = Settings.value("provider", "").toString(); - QString host = Settings.value("host", "").toString(); - QString database = Settings.value("database", "").toString(); - QString username = Settings.value("username", "").toString(); - QString password = toUnobfuscate(Settings.value("password", "").toString()); - QString schema = Settings.value("schema", "").toString(); - - if ( provider == ORACLE_TNS ) - host = ""; - - Settings.beginGroup("options"); - std::set<QString> options; - QStringList keys = Settings.allKeys(); - Q_FOREACH(QString s, keys) - { - if (Settings.value(s, false).toBool()) - options.insert(s); - } - Settings.endGroup(); // options - - toConnectionOptions opt( - provider, - host, - database, - username, - password, - schema, - Settings.value("port", 0).toInt(), - options); - OptionMap[pos] = opt; - Settings.endGroup(); // X - } - Settings.endGroup(); // history - - m_connectionModel->setupData(OptionMap); Previous->resizeColumnsToContents(); Previous->setSortingEnabled(true); @@ -268,7 +221,7 @@ Schema->text()); } - QMap<int,toConnectionOptions> c = m_connectionModel->availableConnections(); + QMap<int,toConnectionOptions> c = connectionModel()->availableConnections(); foreach(int row, c.keys()) { if (row == skip)// && ++skipped) @@ -293,6 +246,8 @@ Settings.endGroup(); ++r; } + + connectionModel()->readConfig(); } @@ -302,7 +257,7 @@ const QString &database, const QString &schema) { - QMapIterator<int,toConnectionOptions> i(m_connectionModel->availableConnections()); + QMapIterator<int,toConnectionOptions> i(connectionModel()->availableConnections()); while (i.hasNext()) { i.next(); @@ -322,9 +277,9 @@ if (!current.isValid()) return; - QModelIndex baseIndex = m_proxyModel->index(current.row(), 0); - int index = m_proxyModel->data(baseIndex, Qt::DisplayRole).toInt(); - toConnectionOptions opt = m_connectionModel->availableConnection(index);// OptionMap[index]; + QModelIndex baseIndex = proxyModel()->index(current.row(), 0); + int index = proxyModel()->data(baseIndex, Qt::DisplayRole).toInt(); + toConnectionOptions opt = connectionModel()->availableConnection(index); Provider->setCurrentIndex(Provider->findText(opt.provider)); Host->lineEdit()->setText(opt.host); @@ -501,7 +456,7 @@ Previous->setSortingEnabled(false); // find latest id (max+1) - QList<int> keys = m_connectionModel->availableConnections().keys(); + QList<int> keys = connectionModel()->availableConnections().keys(); qSort(keys); int max = 0; if (keys.count() > 0) @@ -512,7 +467,7 @@ if (findHistory(opt.provider, opt.username, opt.host, opt.database, opt.schema) != -1) continue; - m_connectionModel->append(max, opt); + connectionModel()->append(ma... [truncated message content] |
From: <su...@us...> - 2008-12-02 08:21:09
|
Revision: 3096 http://tora.svn.sourceforge.net/tora/?rev=3096&view=rev Author: subik Date: 2008-12-02 08:21:03 +0000 (Tue, 02 Dec 2008) Log Message: ----------- improve describe GUI in progress Modified Paths: -------------- trunk/tora/src/CMakeLists.txt trunk/tora/src/Makefile.am trunk/tora/src/toresulttableview.cpp trunk/tora/src/toresulttableview.h trunk/tora/src/toworksheet.cpp trunk/tora/src/toworksheet.h Added Paths: ----------- trunk/tora/src/todescribe.cpp trunk/tora/src/todescribe.h trunk/tora/src/todescribeui.ui Modified: trunk/tora/src/CMakeLists.txt =================================================================== --- trunk/tora/src/CMakeLists.txt 2008-12-02 01:38:39 UTC (rev 3095) +++ trunk/tora/src/CMakeLists.txt 2008-12-02 08:21:03 UTC (rev 3096) @@ -31,6 +31,7 @@ todatabasesettingui.ui todebugchangeui.ui todebugwatch.ui + todescribeui.ui todroptablespaceui.ui # toeditextensiongotoui.ui toeditextensionsetupui.ui @@ -103,6 +104,7 @@ todatatype.h todebug.h todebugtext.h + todescribe.h # todefaultkeywords.h toeditextensions.h # toeditwidget.h @@ -256,6 +258,7 @@ todatatype.cpp todebug.cpp todebugtext.cpp + todescribe.cpp toeditextensions.cpp toeditwidget.cpp toextract.cpp Modified: trunk/tora/src/Makefile.am =================================================================== --- trunk/tora/src/Makefile.am 2008-12-02 01:38:39 UTC (rev 3095) +++ trunk/tora/src/Makefile.am 2008-12-02 08:21:03 UTC (rev 3096) @@ -53,6 +53,7 @@ toqvalue.cpp toqvalue.h \ toconnectionimport.cpp toconnectionimport.h \ toconnectionpool.cpp toconnectionpool.h \ + todescribe.cpp todescribe.h \ torunnable.cpp torunnable.h \ toeditwidget.cpp toeditwidget.h \ toglobalsetting.cpp toglobalsetting.h \ @@ -199,6 +200,7 @@ tobrowserindexui.ui \ tobrowsertableui.ui \ toconnectionimportui.ui \ + todescribeui.ui \ tooraclesettingui.ui \ tostoragetablespaceui.ui \ tochartalarmui.ui \ Added: trunk/tora/src/todescribe.cpp =================================================================== --- trunk/tora/src/todescribe.cpp (rev 0) +++ trunk/tora/src/todescribe.cpp 2008-12-02 08:21:03 UTC (rev 3096) @@ -0,0 +1,234 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER +* +* TOra - An Oracle Toolkit for DBA's and developers +* +* Shared/mixed copyright is held throughout files in this product +* +* Portions Copyright (C) 2000-2001 Underscore AB +* Portions Copyright (C) 2003-2005 Quest Software, Inc. +* Portions Copyright (C) 2004-2008 Numerous Other Contributors +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; only version 2 of +* the License is valid for this program. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* As a special exception, you have permission to link this program +* with the Oracle Client libraries and distribute executables, as long +* as you follow the requirements of the GNU GPL in regard to all of the +* software in the executable aside from Oracle client libraries. +* +* Specifically you are not permitted to link this program with the +* Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. +* And you are not permitted to distribute binaries compiled against +* these libraries. +* +* You may link this product with any GPL'd Qt library. +* +* All trademarks belong to their respective owners. +* +* END_COMMON_COPYRIGHT_HEADER */ + +#include <QSettings> +#include <QHideEvent> + +#include "todescribe.h" + + +// TODO/FIXME: these SQL statements are same as in tobrowser.cpp +// Is there any way how to reuse them without any new subclassing +// of special widgets for indexes/constraints etc. +// It returns strange errors if SQL statements are moved into +// standalone include file to include in both places. +// TODO: I'll propably break toBrowser GUI into smaller chunks +// to allow reuse in widgets such this one... later. +static toSQL SQLTableIndex("toDescribe:TableIndex", + "SELECT IND.index_name AS \"Index Name\",\n" + " ind.column_name AS \"Column Name\",\n" + " al.uniqueness AS \"Unique\",\n" + " AL.index_type AS \"Type\",\n" + " EX.column_expression AS \"Column Expression\"\n" + " FROM SYS.ALL_IND_COLUMNS IND,\n" + " SYS.ALL_IND_EXPRESSIONS EX,\n" + " sys.All_Indexes AL\n" + " WHERE IND.INDEX_OWNER = :own<char[101]>\n" + " AND IND.TABLE_NAME = :nam<char[101]>\n" + " AND EX.index_owner ( + ) = IND.index_owner\n" + " AND EX.index_name ( + ) = IND.index_name\n" + " AND IND.index_name = AL.index_name ( + )\n" + " AND IND.index_owner = AL.owner ( + )", + "List the indexes on a table", + ""); +static toSQL SQLTableIndexSapDB("toDescribe:TableIndex", + "SELECT owner,\n" + " indexname \"Index_Name\",\n" + " 'NORMAL',\n" + " type\n" + " FROM indexes \n" + " WHERE owner = :f1<char[101]> and tablename = :f2<char[101]> \n" + " ORDER by indexname", + "", + "", + "SapDB"); + +static toSQL SQLTableIndexPG("toDescribe:TableIndex", + "SELECT u.usename AS \"Owner\",\n" + " c2.relname AS \"Index Name\",\n" + " pg_get_indexdef(i.indexrelid) as \"Definition\"\n" + " FROM pg_class c,\n" + " pg_class c2,\n" + " pg_index i,\n" + " pg_user u,\n" + " pg_namespace n\n" + " WHERE c.relowner = u.usesysid\n" + " AND n.nspname = :f1\n" + " AND c.relname = :f2\n" + " AND c.relowner = u.usesysid\n" + " AND n.OID = c.relnamespace\n" + " AND c.OID = i.indrelid\n" + " AND i.indexrelid = c2.OID", + "", + "", + "PostgreSQL"); + +static toSQL SQLTableIndexMySQL("toDescribe:TableIndex", + "SHOW INDEX FROM `:f1<noquote>`.`:tab<noquote>`", + "", + "", + "MySQL"); + +static toSQL SQLTableConstraint( + "toDescribe:TableConstraint", +// "SELECT sub.constraint_name AS \"Constraint Name\",\n" +// " srch.search_condition AS \"Search Condition\",\n" +// " sub.condition AS \"Condition\",\n" +// " sub.status AS \"Status\",\n" +// " sub.constraint_type AS \"Type\",\n" +// " sub.delete_rule AS \"Delete Rule\",\n" +// " sub.GENERATED AS \"Generated\"\n" +// " FROM ( SELECT c.Constraint_Name,\n" +// " DECODE ( constraint_type,\n" +// " 'R',\n" +// " 'foreign key (' || a.column_name || ') references ' " +// "|| a2.owner || '.' || a2.table_name || '(' || a2.column_name || ')',\n" +// " 'P',\n" +// " 'primary key (' || a.column_name || ')',\n" +// " 'U',\n" +// " 'unique (' || a.column_name || ')',\n" +// " NULL ) AS condition,\n" +// " c.Status,\n" +// " c.Constraint_Type,\n" +// " c.Delete_Rule,\n" +// " c.GENERATED\n" +// " FROM sys.All_Constraints c,\n" +// " sys.all_cons_columns a,\n" +// " sys.all_cons_columns a2\n" +// " WHERE c.constraint_name = a.constraint_name\n" +// " AND c.Owner = :f1<char[101]>\n" +// " AND c.Table_Name = :f2<char[101]>\n" +// " AND c.r_constraint_name = a2.constraint_name ( + ) ) sub,\n" +// " sys.all_constraints srch\n" +// " WHERE sub.constraint_name = srch.constraint_name", + "SELECT main.constraint_name AS \"Constraint Name\",\n" + " main.column_name AS \"Column Name\",\n" + " main.search_condition AS \"Search Condition\",\n" + " main.status AS \"Status\",\n" + " main.constraint_type AS \"Type\",\n" + " main.delete_rule AS \"Delete Rule\",\n" + " main.generated AS \"Generated\",\n" + " DECODE ( main.constraint_type,\n" + " 'R',\n" + " 'FK (' || main.column_name || ') ref. ' || refs.owner || '.'\n" + " || refs.table_name || '(' || refs.column_name || ')',\n" + " 'P',\n" + " 'PK (' || main.column_name || ')',\n" + " 'U',\n" + " 'unique (' || main.column_name || ')',\n" + " NULL ) AS \"Condition\"\n" + " FROM\n" + " (\n" + " SELECT\n" + " c.constraint_name,\n" + " a.column_name,\n" + " c.constraint_type,\n" + " c.r_constraint_name,\n" + " c.search_condition,\n" + " c.status,\n" + " c.delete_rule,\n" + " c.generated\n" + " FROM\n" + " sys.All_Constraints c,\n" + " sys.all_cons_columns a\n" + " WHERE\n" + " c.constraint_name = a.constraint_name\n" + " AND c.Owner = :f1<char[101]>\n" + " AND c.Table_Name = :f2<char[101]>\n" + " ORDER BY\n" + " c.constraint_name, a.constraint_name, a.position\n" + " ) main,\n" + " sys.all_cons_columns refs\n" + " WHERE\n" + " main.r_constraint_name = refs.constraint_name (+)\n" + " AND main.column_name = refs.column_name (+)", + "List the constraints on a table", + ""); + +static toSQL SQLTableConstraintPG( + "toDescribe:TableConstraint", + "SELECT conname as \"Constraint Name\",\n" + " pg_catalog.pg_get_constraintdef ( r.OID,\n" + " TRUE ) AS \"Description\"\n" + " FROM pg_catalog.pg_constraint r,\n" + " pg_catalog.pg_class c,\n" + " pg_catalog.pg_namespace n\n" + " WHERE n.nspname = :f1\n" + " AND c.relname = :f2\n" + " AND c.relnamespace = n.OID\n" + " AND c.OID = r.conrelid\n" + " ORDER BY 1", + "", + "", + "PostgreSQL"); + + +toDescribe::toDescribe(QWidget * parent) + : QDialog(parent) +{ + setupUi(this); + + indexView->setSQL(SQLTableIndex); + indexView->setReadAll(true); + constraintsView->setSQL(SQLTableConstraint); + constraintsView->setReadAll(true); + + QSettings s; + s.beginGroup("toDescribe"); + restoreGeometry(s.value("geometry", QByteArray()).toByteArray()); + s.endGroup(); +} + +void toDescribe::hideEvent(QHideEvent * event) +{ + QSettings s; + s.beginGroup("toDescribe"); + s.setValue("geometry", saveGeometry()); + s.endGroup(); + event->accept(); +} + +void toDescribe::changeParams(const QString & owner, const QString & table) +{ + columnsWidget->changeParams(owner, table); + indexView->changeParams(owner, table); + constraintsView->changeParams(owner, table); +} Added: trunk/tora/src/todescribe.h =================================================================== --- trunk/tora/src/todescribe.h (rev 0) +++ trunk/tora/src/todescribe.h 2008-12-02 08:21:03 UTC (rev 3096) @@ -0,0 +1,64 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER +* +* TOra - An Oracle Toolkit for DBA's and developers +* +* Shared/mixed copyright is held throughout files in this product +* +* Portions Copyright (C) 2000-2001 Underscore AB +* Portions Copyright (C) 2003-2005 Quest Software, Inc. +* Portions Copyright (C) 2004-2008 Numerous Other Contributors +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; only version 2 of +* the License is valid for this program. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* As a special exception, you have permission to link this program +* with the Oracle Client libraries and distribute executables, as long +* as you follow the requirements of the GNU GPL in regard to all of the +* software in the executable aside from Oracle client libraries. +* +* Specifically you are not permitted to link this program with the +* Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. +* And you are not permitted to distribute binaries compiled against +* these libraries. +* +* You may link this product with any GPL'd Qt library. +* +* All trademarks belong to their respective owners. +* +* END_COMMON_COPYRIGHT_HEADER */ + +#ifndef TODESCRIBE_H +#define TODESCRIBE_H + +#include "ui_todescribeui.h" + + +/*! \brief Enhanced "key F4 describe table" dialog. +It's work in progress. It'll require a toBrowser cleanup. A bit... +*/ +class toDescribe : public QDialog, public Ui::toDescribe +{ + Q_OBJECT + + public: + toDescribe(QWidget * parent = 0); + void changeParams(const QString & owner, const QString & table); + + protected: + //! Save the prefs + void hideEvent(QHideEvent * event); +}; + +#endif Added: trunk/tora/src/todescribeui.ui =================================================================== --- trunk/tora/src/todescribeui.ui (rev 0) +++ trunk/tora/src/todescribeui.ui 2008-12-02 08:21:03 UTC (rev 3096) @@ -0,0 +1,76 @@ +<ui version="4.0" > + <class>toDescribe</class> + <widget class="QDialog" name="toDescribe" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>751</width> + <height>330</height> + </rect> + </property> + <property name="windowTitle" > + <string>Describe</string> + </property> + <layout class="QGridLayout" name="gridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>0</number> + </property> + <item row="0" column="0" > + <widget class="QTabWidget" name="indexesWidget" > + <property name="currentIndex" > + <number>0</number> + </property> + <widget class="QWidget" name="columnsTab" > + <attribute name="title" > + <string>&Columns</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_2" > + <item row="0" column="0" > + <widget class="toResultCols" native="1" name="columnsWidget" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="indexesTab" > + <attribute name="title" > + <string>&Indexes</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_3" > + <item row="0" column="0" > + <widget class="toResultTableView" name="indexView" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="constraintsTab" > + <attribute name="title" > + <string>C&onstraints</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_4" > + <item row="0" column="0" > + <widget class="toResultTableView" name="constraintsView" /> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>toResultCols</class> + <extends>QWidget</extends> + <header location="global" >toresultcols.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>toResultTableView</class> + <extends>QTableView</extends> + <header location="global" >toresulttableview.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> Modified: trunk/tora/src/toresulttableview.cpp =================================================================== --- trunk/tora/src/toresulttableview.cpp 2008-12-02 01:38:39 UTC (rev 3095) +++ trunk/tora/src/toresulttableview.cpp 2008-12-02 08:21:03 UTC (rev 3096) @@ -94,6 +94,26 @@ }; +toResultTableView::toResultTableView(QWidget * parent) + : QTableView(parent), + toResult(), + toEditWidget(false, // open + true, // save + true, // print + false, // undo + false, // redo + false, // cut + true, // copy + false, // past + true, // search + true, // selectall + false), // readall + Model(NULL) +{ + setObjectName("toResultTableView"); + setup(true, false, false); +} + toResultTableView::toResultTableView(bool readable, bool numberColumn, QWidget *parent, @@ -114,10 +134,13 @@ false), // readall Model(NULL) { - if (name) setObjectName(name); + setup(readable, numberColumn, editable); +} +void toResultTableView::setup(bool readable, bool numberColumn, bool editable) +{ Statistics = NULL; Menu = NULL; Editable = editable; Modified: trunk/tora/src/toresulttableview.h =================================================================== --- trunk/tora/src/toresulttableview.h 2008-12-02 01:38:39 UTC (rev 3095) +++ trunk/tora/src/toresulttableview.h 2008-12-02 08:21:03 UTC (rev 3096) @@ -128,6 +128,11 @@ // use Filter to hide rows void applyFilter(void); + /*! \brief Common setup function called from constructors + */ + void setup(bool readable, bool numberColumn, bool editable); + + protected slots: void displayMenu(const QPoint &pos); void menuCallback(QAction *action); @@ -208,6 +213,9 @@ QWidget *parent, const char *name = 0, bool editable = false); + /*! \brief Constructor provided for Qt designer. See setup() + */ + toResultTableView(QWidget * parent = 0); virtual ~toResultTableView(void); Modified: trunk/tora/src/toworksheet.cpp =================================================================== --- trunk/tora/src/toworksheet.cpp 2008-12-02 01:38:39 UTC (rev 3095) +++ trunk/tora/src/toworksheet.cpp 2008-12-02 08:21:03 UTC (rev 3096) @@ -65,6 +65,7 @@ #include "toworksheetstatistic.h" #include "toworksheettext.h" #include "toeditablemenu.h" +#include "todescribe.h" #include <qcheckbox.h> #include <qcheckbox.h> @@ -1630,33 +1631,22 @@ { QString owner, table; Editor->tableAtCursor(owner, table); + if (owner.isNull()) + owner = Schema->currentText(); - bool toplevel = toConfigurationSingle::Instance().wsToplevelDescribe(); - - toResultCols *columns; - if (toplevel) + if (toConfigurationSingle::Instance().wsToplevelDescribe()) { - columns = new toResultCols( - this, - "description", - Qt::Window); - - QAction *close = new QAction(columns); - close->setShortcut(Qt::Key_Escape); - connect(close, SIGNAL(triggered()), columns, SLOT(close())); - columns->addAction(close); + toDescribe * d = new toDescribe(this); + d->changeParams(owner, table); + d->show(); } else { - columns = Columns; + unhideResults(); + Columns->changeParams(owner, table); Columns->show(); Current = Columns; } - - if (owner.isNull()) - owner = Schema->currentText(); - columns->changeParams(owner, table); - columns->show(); } void toWorksheet::executeSaved(QAction *act) Modified: trunk/tora/src/toworksheet.h =================================================================== --- trunk/tora/src/toworksheet.h 2008-12-02 01:38:39 UTC (rev 3095) +++ trunk/tora/src/toworksheet.h 2008-12-02 08:21:03 UTC (rev 3096) @@ -105,6 +105,7 @@ toTreeWidgetItem *LastLogItem; QWidget *StatTab; bool TryStrip; + //! Used only for DESC/DESCRIBE sql statements toResultCols *Columns; QComboBox *Refresh; QLabel *Started; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-02 08:37:08
|
Revision: 3097 http://tora.svn.sourceforge.net/tora/?rev=3097&view=rev Author: subik Date: 2008-12-02 08:37:05 +0000 (Tue, 02 Dec 2008) Log Message: ----------- fixed gcc 4.3.x warnings Modified Paths: -------------- trunk/tora/src/docklets/toviewconnections.cpp trunk/tora/src/tonewconnection.h Modified: trunk/tora/src/docklets/toviewconnections.cpp =================================================================== --- trunk/tora/src/docklets/toviewconnections.cpp 2008-12-02 08:21:03 UTC (rev 3096) +++ trunk/tora/src/docklets/toviewconnections.cpp 2008-12-02 08:37:05 UTC (rev 3097) @@ -140,7 +140,7 @@ conn.provider() == provider && conn.host() == host && conn.database() == database && - opt.schema.isEmpty() || (conn.schema() == opt.schema)) + (opt.schema.isEmpty() || (conn.schema() == opt.schema))) { toMainWidget()->createDefault(); emit activated(); Modified: trunk/tora/src/tonewconnection.h =================================================================== --- trunk/tora/src/tonewconnection.h 2008-12-02 08:21:03 UTC (rev 3096) +++ trunk/tora/src/tonewconnection.h 2008-12-02 08:37:05 UTC (rev 3097) @@ -114,7 +114,7 @@ conn.provider() == provider && conn.host() == host + ":" + QString::number(port) && conn.database() == database && - schema.isEmpty() || (conn.schema() == schema); + (schema.isEmpty() || (conn.schema() == schema)); } bool operator!=(const toConnectionOptions &other) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mrj...@us...> - 2008-12-08 00:08:39
|
Revision: 3107 http://tora.svn.sourceforge.net/tora/?rev=3107&view=rev Author: mrjohnson0 Date: 2008-12-08 00:08:36 +0000 (Mon, 08 Dec 2008) Log Message: ----------- pimpl this class, add left|right dockbar state i was hitting some weird size limit i think was due to loki. i'd tried different allocators but it didn't seem to help. this is better anyhow... Modified Paths: -------------- trunk/tora/src/toconfiguration.cpp trunk/tora/src/toconfiguration.h Modified: trunk/tora/src/toconfiguration.cpp =================================================================== --- trunk/tora/src/toconfiguration.cpp 2008-12-07 18:44:15 UTC (rev 3106) +++ trunk/tora/src/toconfiguration.cpp 2008-12-08 00:08:36 UTC (rev 3107) @@ -9,644 +9,2022 @@ #undef QT_TRANSLATE_NOOP #define QT_TRANSLATE_NOOP(x,y) QTRANS(x,y) +#include "toconf.h" + #include <QLocale> #include <QSettings> -#include "toconf.h" -// static one -void toConfiguration::setQSettingsEnv() +class toConfigurationPrivate { - if (QCoreApplication::organizationName().isEmpty()) - QCoreApplication::setOrganizationName(TOORGNAME); - if (QCoreApplication::organizationDomain().isEmpty()) - QCoreApplication::setOrganizationDomain(TOORGDOMAIN); - if (QCoreApplication::applicationName().isEmpty()) - QCoreApplication::setApplicationName(TOAPPNAME); -} +public: + QString m_provider; + bool m_savePassword; + QString m_defaultPassword; + QString m_defaultDatabase; + QString m_defaultUser; + QString m_defaultHost; + int m_maxNumber; + int m_maxColSize; + int m_maxColDisp; + QString m_planTable; + QString m_planCheckpoint; + QString m_textFont; + QString m_codeFont; + QString m_listFont; + QString m_dateFormat; + QString m_refresh; + bool m_highlight; + bool m_keywordUpper; + QString m_pluginDir; + QString m_cacheDir; + bool m_cacheDisk; + QString m_sqlFile; + int m_statusMessage; + bool m_dbTitle; + QString m_sizeUnit; + QString m_helpPath; + int m_statusSave; + bool m_autoCommit; + bool m_changeConnection; + int m_connectSize; + QString m_defaultTool; + int m_chartSamples; + int m_displaySamples; + bool m_codeCompletion; + bool m_completionSort; + bool m_autoIndent; + bool m_dontReread; + int m_autoLong; + bool m_messageStatusbar; + bool m_tabbedTools; + int m_objectCache; + bool m_bkgndConnect; + bool m_firewallMode; + int m_maxContent; + bool m_keepPlans; + bool m_restoreSession; + QString m_defaultSession; + int m_defaultFormat; + bool m_autoIndentRo; + bool m_indicateEmpty; + QString m_indicateEmptyColor; + QString m_extensions; + int m_recentMax; + QString m_lastDir; + QString m_locale; + int m_keepAlive; + int m_numberFormat; + int m_numberDecimals; + int m_cacheTimeout; + int m_tabStop; + bool m_tabSpaces; + bool m_editDragDrop; + bool m_toadBindings; + bool m_displayGridlines; + QString m_smtp; + int m_smtpPort; + QString m_style; -toConfiguration::toConfiguration() -{ - int cnt; // tmp count holder for setting arrays - setQSettingsEnv(); - QSettings s; - s.beginGroup("preferences"); - m_provider = s.value(CONF_PROVIDER, DEFAULT_PROVIDER).toString(); - m_savePassword = s.value(CONF_SAVE_PWD, DEFAULT_SAVE_PWD).toBool(); - m_defaultPassword = s.value(CONF_PASSWORD, DEFAULT_PASSWORD).toString(); - m_defaultDatabase = s.value(CONF_DATABASE, DEFAULT_DATABASE).toString(); - m_defaultUser = s.value(CONF_USER, DEFAULT_USER).toString(); - m_defaultHost = s.value(CONF_HOST, DEFAULT_HOST).toString(); + // tooracleconnection + int m_openCursors; + int m_maxLong; -// #define CONF_OPTIONS "Options" -// #define DEFAULT_OPTIONS "" - m_maxNumber = s.value(CONF_MAX_NUMBER, DEFAULT_MAX_NUMBER).toInt(); - m_maxColSize = s.value(CONF_MAX_COL_SIZE, DEFAULT_MAX_COL_SIZE).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_textFont = s.value(CONF_TEXT, "").toString(); - m_codeFont = s.value(CONF_CODE, "").toString(); - m_listFont = s.value(CONF_LIST, "").toString(); - m_dateFormat = s.value(CONF_DATE_FORMAT, DEFAULT_DATE_FORMAT).toString(); - m_refresh = s.value(CONF_REFRESH, DEFAULT_REFRESH).toString(); - m_highlight = s.value(CONF_HIGHLIGHT, true).toBool(); - m_keywordUpper = s.value(CONF_KEYWORD_UPPER, DEFAULT_KEYWORD_UPPER).toBool(); + // toqsqlconnection + bool m_onlyForward; - m_pluginDir = s.value(CONF_PLUGIN_DIR, DEFAULT_PLUGIN_DIR).toString(); - m_cacheDir = s.value(CONF_CACHE_DIR, "").toString(); - m_cacheDisk = s.value(CONF_CACHE_DISK, DEFAULT_CACHE_DISK).toBool(); - m_sqlFile = s.value(CONF_SQL_FILE, DEFAULT_SQL_FILE).toString(); - m_statusMessage = s.value(CONF_STATUS_MESSAGE, DEFAULT_STATUS_MESSAGE).toInt(); + // main.cpp + QString m_lastVersion; + QString m_firstInstall; + QByteArray m_leftDockbarState; + QByteArray m_rightDockbarState; + QStringList m_recentFiles; - m_dbTitle = s.value(CONF_DB_TITLE, true).toBool(); - m_sizeUnit = s.value(CONF_SIZE_UNIT, DEFAULT_SIZE_UNIT).toString(); - m_helpPath = s.value(CONF_HELP_PATH, "qrc:/help/toc.html").toString(); - m_statusSave = s.value(CONF_STATUS_SAVE, DEFAULT_STATUS_SAVE).toInt(); - m_autoCommit = s.value(CONF_AUTO_COMMIT, false).toBool(); - m_changeConnection = s.value(CONF_CHANGE_CONNECTION, true).toBool(); + // tools + ToolsMap m_tools; -// #define CONF_CONNECT_HISTORY "ConnectHistory" - m_connectSize = s.value(CONF_CONNECT_SIZE, DEFAULT_CONNECT_SIZE).toInt(); + // toresultlistformat + QString m_csvSeparator; + QString m_csvDelimiter; -// #define CONF_CONNECT_CURRENT "ConnectCurrent" - m_defaultTool = s.value(CONF_DEFAULT_TOOL).toString(); -// #define CONF_TOOL_ENABLE "Enabled" - m_chartSamples = s.value(CONF_CHART_SAMPLES, DEFAULT_CHART_SAMPLES).toInt(); - m_displaySamples = s.value(CONF_DISPLAY_SAMPLES, DEFAULT_DISPLAY_SAMPLES).toInt(); - m_codeCompletion = s.value(CONF_CODE_COMPLETION, true).toBool(); - m_completionSort = s.value(CONF_COMPLETION_SORT, true).toBool(); - m_autoIndent = s.value(CONF_AUTO_INDENT, true).toBool(); - m_dontReread = s.value(CONF_DONT_REREAD, true).toBool(); - m_autoLong = s.value(CONF_AUTO_LONG, 0).toInt(); - m_messageStatusbar = s.value(CONF_MESSAGE_STATUSBAR, false).toBool(); - m_tabbedTools = s.value(CONF_TABBED_TOOLS, false).toBool(); - m_objectCache = s.value(CONF_OBJECT_CACHE, DEFAULT_OBJECT_CACHE).toInt(); - m_bkgndConnect = s.value(CONF_BKGND_CONNECT, false).toBool(); - m_firewallMode = s.value(CONF_FIREWALL_MODE, false).toBool(); - m_maxContent = s.value(CONF_MAX_CONTENT, DEFAULT_MAX_CONTENT).toInt(); - m_keepPlans = s.value(CONF_KEEP_PLANS, false).toBool(); - m_restoreSession = s.value(CONF_RESTORE_SESSION, false).toBool(); - m_defaultSession = s.value(CONF_DEFAULT_SESSION, DEFAULT_SESSION).toString(); - // FIXME! - m_defaultFormat = s.value(CONF_DEFAULT_FORMAT, "").toInt(); - m_autoIndentRo = s.value(CONF_AUTO_INDENT_RO, true).toBool(); - m_indicateEmpty = s.value(CONF_INDICATE_EMPTY, true).toBool(); - m_indicateEmptyColor = s.value(CONF_INDICATE_EMPTY_COLOR, "#f2ffbc").toString(); - m_extensions = s.value(CONF_EXTENSIONS, DEFAULT_EXTENSIONS).toString(); - 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_locale = s.value(CONF_LOCALE, QLocale().name()).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(); - m_tabStop = s.value(CONF_TAB_STOP, DEFAULT_TAB_STOP).toInt(); - m_tabSpaces = s.value(CONF_TAB_SPACES, DEFAULT_TAB_SPACES).toBool(); - m_editDragDrop = s.value(CONF_EDIT_DRAG_DROP, DEFAULT_EDIT_DRAG_DROP).toBool(); - m_toadBindings = s.value(CONF_TOAD_BINDINGS, DEFAULT_TOAD_BINDINGS).toBool(); - m_displayGridlines = s.value(CONF_DISPLAY_GRIDLINES, DEFAULT_DISPLAY_GRIDLINES).toBool(); - m_smtp = s.value(CONF_SMTP, DEFAULT_SMTP).toString(); - m_smtpPort = s.value(CONF_SMTP_PORT, DEFAULT_SMTP_PORT).toInt(); - m_style = s.value(CONF_STYLE, DEFAULT_STYLE).toString(); - // tooracleconnection.cpp - m_openCursors = s.value(CONF_OPEN_CURSORS, DEFAULT_OPEN_CURSORS).toInt(); - m_maxLong = s.value(CONF_MAX_LONG, DEFAULT_MAX_LONG).toInt(); - // toqsqlconnection - m_onlyForward = s.value(CONF_ONLY_FORWARD, DEFAULT_ONLY_FORWARD).toBool(); - // main.cpp - m_lastVersion = s.value(CONF_LAST_VERSION, "").toString(); - m_firstInstall = s.value(CONF_FIRST_INSTALL, "").toString(); - // tools - cnt = s.beginReadArray(CONF_TOOLS); - for (int i = 0; i < cnt; ++i) - { - s.setArrayIndex(i); - m_tools[s.value("ToolName").toString()] = s.value("Enabled").toBool(); - } - s.endArray(); - // toresultlistformat - m_csvSeparator = s.value(CONF_CSV_SEPARATOR, DEFAULT_CSV_SEPARATOR).toString(); - m_csvDelimiter = s.value(CONF_CSV_DELIMITER, DEFAULT_CSV_DELIMITER).toString(); // toeditextensions - m_commaBefore = s.value(CONF_COMMA_BEFORE, true).toBool(); - m_blockOpenLine = s.value(CONF_BLOCK_OPEN_LINE, true).toBool(); - m_operatorSpace = s.value(CONF_OPERATOR_SPACE, true).toBool(); - m_rightSeparator = s.value(CONF_RIGHT_SEPARATOR, true).toBool(); - m_endBlockNewline = s.value(CONF_END_BLOCK_NEWLINE, true).toBool(); - m_commentColumn = s.value(CONF_COMMENT_COLUMN, DEFAULT_COMMENT_COLUMN).toInt(); + bool m_commaBefore; + bool m_blockOpenLine; + bool m_operatorSpace; + bool m_rightSeparator; + bool m_endBlockNewline; + int m_commentColumn; + // tobrowser - m_filterIgnoreCase = s.value(CONF_FILTER_IGNORE_CASE, false).toBool(); - m_filterInvert = s.value(CONF_FILTER_INVERT, false).toBool(); - m_filterType = s.value(CONF_FILTER_TYPE, 0).toInt(); - m_filterTablespaceType = s.value(CONF_FILTER_TABLESPACE_TYPE, 0).toInt(); - m_filterText = s.value(CONF_FILTER_TEXT, "").toString(); + bool m_filterIgnoreCase; + bool m_filterInvert; + int m_filterType; + int m_filterTablespaceType; + QString m_filterText; + // tohelp - cnt = s.beginReadArray("AdditionalHelp"); - for (int i = 0; i < cnt; ++i) - { - s.setArrayIndex(i); - m_additionalHelp[s.value("HelpName").toString()] = s.value("Path").toString(); - } - s.endArray(); + HelpsMap m_additionalHelp; + // tochartmanager - cnt = s.beginReadArray("ChartFiles"); - for (int i = 0; i < cnt; ++i) - { - s.setArrayIndex(i); - m_chartFiles[s.value("Name").toString()] = s.value("Spec").toString(); - } - s.endArray(); - cnt = s.beginReadArray("ChartAlarms"); - for (int i = 0; i < cnt; ++i) - { - s.setArrayIndex(i); - m_chartAlarms[s.value("Name").toString()] = s.value("Spec").toString(); - } - s.endArray(); + ChartsMap m_chartFiles; + ChartsMap m_chartAlarms; + // tooutput - m_polling = s.value(CONF_POLLING, DEFAULT_POLLING).toString(); - m_logType = s.value(CONF_LOG_TYPE, DEFAULT_LOG_TYPE).toInt(); - m_logUser = s.value(CONF_LOG_USER, DEFAULT_LOG_USER).toString(); + QString m_polling; + int m_logType; + QString m_logUser; + // torollback - m_noExec = s.value(CONF_NO_EXEC, true).toBool(); - m_needRead = s.value(CONF_NEED_READ, true).toBool(); - m_needTwo = s.value(CONF_NEED_TWO, true).toBool(); - m_alignLeft = s.value(CONF_ALIGN_LEFT, true).toBool(); - m_oldEnable = s.value(CONF_OLD_ENABLE, false).toBool(); + bool m_noExec; + bool m_needRead; + bool m_needTwo; + bool m_alignLeft; + bool m_oldEnable; + // tosgatrace - m_autoUpdate = s.value(CONF_AUTO_UPDATE, true).toBool(); + bool m_autoUpdate; + // tostorage - m_dispTablespaces = s.value(CONF_DISP_TABLESPACES, true).toBool(); - m_dispCoalesced = s.value(CONF_DISP_COALESCED, false).toBool(); - m_dispExtents = s.value(CONF_DISP_EXTENTS, false).toBool(); - m_dispAvailableGraph = s.value(CONF_DISP_AVAILABLEGRAPH, true).toBool(); + bool m_dispTablespaces; + bool m_dispCoalesced; + bool m_dispExtents; + bool m_dispAvailableGraph; + // totemplate - cnt = s.beginReadArray("Templates"); - for (int i = 0; i < cnt; ++i) - { - s.setArrayIndex(i); - m_templates[s.value("Name").toString()] = s.value("File").toString(); - } - s.endArray(); + TemplatesMap m_templates; + // totuning - m_tuningFirstRun = (s.value(CONF_OVERVIEW) == QVariant()); - m_tuningOverview = s.value(CONF_OVERVIEW, false).toBool(); - m_tuningFileIO = s.value(CONF_FILEIO, false).toBool(); - m_tuningWaits = s.value(CONF_WAITS, false).toBool(); - m_tuningCharts = s.value(CONF_CHART, false).toBool(); + /*! True if there are all features enabled. + It's used when there is no m_tuningOverview defined in prefs. */ + bool m_tuningFirstRun; + bool m_tuningOverview; + bool m_tuningFileIO; + bool m_tuningWaits; + bool m_tuningCharts; + // toworksheet - m_wsAutoSave = s.value(CONF_AUTO_SAVE, false).toBool(); - m_wsCheckSave = s.value(CONF_CHECK_SAVE, true).toBool(); - m_wsAutoLoad = s.value(CONF_AUTO_LOAD, "").toString(); - m_wsLogAtEnd = s.value(CONF_LOG_AT_END, true).toBool(); - m_wsLogMulti = s.value(CONF_LOG_MULTI, true).toBool(); - m_wsStatistics = s.value(CONF_STATISTICS, false).toBool(); - m_wsTimedStats = s.value(CONF_TIMED_STATS, true).toBool(); - m_wsNumber = s.value(CONF_NUMBER, true).toBool(); - m_wsMoveToErr = s.value(CONF_MOVE_TO_ERR, true).toBool(); - m_wsHistory = s.value(CONF_HISTORY, false).toBool(); - m_wsExecLog = s.value(CONF_EXEC_LOG, false).toBool(); - m_wsToplevelDescribe = s.value(CONF_TOPLEVEL_DESCRIBE, true).toBool(); + bool m_wsAutoSave; + bool m_wsCheckSave; + QString m_wsAutoLoad; + bool m_wsLogAtEnd; + bool m_wsLogMulti; + bool m_wsStatistics; + bool m_wsTimedStats; + bool m_wsNumber; + bool m_wsMoveToErr; + bool m_wsHistory; + bool m_wsExecLog; + bool m_wsToplevelDescribe; + // tosyntaxsetup - const QPalette cg = qApp->palette(); - m_syntaxDefault = s.value("SyntaxDefault", cg.color(QPalette::Base).name()).toString(); - m_syntaxComment = s.value("SyntaxComment", "darkgray").toString(); - m_syntaxNumber = s.value("SyntaxNumber", "limegreen").toString(); - m_syntaxKeyword = s.value("SyntaxKeyword", "navy").toString(); - m_syntaxString = s.value("SyntaxString", "red").toString(); - m_syntaxDefaultBg = s.value("SyntaxDefaultBg", cg.color(QPalette::Text).name()).toString(); - m_syntaxErrorBg = s.value("SyntaxErrorBg", "darkred").toString(); - m_syntaxDebugBg = s.value("SyntaxDebugBg", "darkgreen").toString(); - m_syntaxCurrentLineMarker = s.value("SyntaxCurrentLineMarker", "whitesmoke").toString(); - m_useMaxTextWidthMark = s.value("useMaxTextWidthMark", false).toBool(); - m_maxTextWidthMark = s.value("maxTextWidthMark", 75).toInt(); - s.endGroup(); + QString m_syntaxDefault; + QString m_syntaxComment; + QString m_syntaxNumber; + QString m_syntaxKeyword; + QString m_syntaxString; + QString m_syntaxDefaultBg; + QString m_syntaxErrorBg; + QString m_syntaxDebugBg; + QString m_syntaxCurrentLineMarker; + bool m_useMaxTextWidthMark; + int m_maxTextWidthMark; - // main window - s.beginGroup("toMainWindow"); - m_mainWindowGeometry = s.value("geometry").toByteArray(); - // mainwindow's toolbars etc - m_mainWindowState = s.value("state").toByteArray(); - s.endGroup(); + // mainwindow size + QByteArray m_mainWindowGeometry; + QByteArray m_mainWindowState; - // editor shortcuts - s.beginGroup("editorShortcuts"); - m_useEditorShortcuts = s.value("useEditorShortcuts", false).toBool(); - cnt = s.beginReadArray("shortcuts"); - for (int i = 0; i < cnt; ++i) + // shortcut editor + bool m_useEditorShortcuts; + EditorShortcutsMap m_editorShortcuts; + + + toConfigurationPrivate() { - s.setArrayIndex(i); - m_editorShortcuts[s.value("key").toString()] = s.value("value"); + loadConfig(); } - s.endArray(); - s.endGroup(); -} -toConfiguration::~toConfiguration() -{ -} -void toConfiguration::saveConfig() -{ - QString key; // tmp key for maps - QSettings s; - s.beginGroup("preferences"); - s.setValue(CONF_PROVIDER, m_provider); - s.setValue(CONF_SAVE_PWD, m_savePassword); - s.setValue(CONF_PASSWORD, m_defaultPassword); - s.setValue(CONF_DATABASE, m_defaultDatabase); - s.setValue(CONF_USER, m_defaultUser); - s.setValue(CONF_HOST, m_defaultHost); - s.setValue(CONF_MAX_NUMBER, m_maxNumber); - s.setValue(CONF_MAX_COL_SIZE, m_maxColSize); - 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_textFont); - s.setValue(CONF_CODE, m_codeFont); - s.setValue(CONF_LIST, m_listFont); - s.setValue(CONF_DATE_FORMAT, m_dateFormat); - s.setValue(CONF_REFRESH, m_refresh); - s.setValue(CONF_HIGHLIGHT, m_highlight); - s.setValue(CONF_KEYWORD_UPPER, m_keywordUpper); - s.setValue(CONF_PLUGIN_DIR, m_pluginDir); - s.setValue(CONF_CACHE_DIR, m_cacheDir); - s.setValue(CONF_CACHE_DISK, m_cacheDisk); - s.setValue(CONF_SQL_FILE, m_sqlFile); - s.setValue(CONF_STATUS_MESSAGE, m_statusMessage); - s.setValue(CONF_DB_TITLE, m_dbTitle); - s.setValue(CONF_SIZE_UNIT, m_sizeUnit); - s.setValue(CONF_HELP_PATH, m_helpPath); - s.setValue(CONF_STATUS_SAVE, m_statusSave); - s.setValue(CONF_AUTO_COMMIT, m_autoCommit); - s.setValue(CONF_CHANGE_CONNECTION, m_changeConnection); - s.setValue(CONF_CONNECT_SIZE, m_connectSize); - s.setValue(CONF_DEFAULT_TOOL, m_defaultTool); - s.setValue(CONF_CHART_SAMPLES, m_chartSamples); - s.setValue(CONF_DISPLAY_SAMPLES, m_displaySamples); - 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_AUTO_LONG, m_autoLong); - s.setValue(CONF_MESSAGE_STATUSBAR, m_messageStatusbar); - s.setValue(CONF_TABBED_TOOLS, m_tabbedTools); - s.setValue(CONF_OBJECT_CACHE, m_objectCache); - s.setValue(CONF_BKGND_CONNECT, m_bkgndConnect); - s.setValue(CONF_FIREWALL_MODE, m_firewallMode); - s.setValue(CONF_MAX_CONTENT, m_maxContent); - s.setValue(CONF_KEEP_PLANS, m_keepPlans); - s.setValue(CONF_RESTORE_SESSION, m_restoreSession); - s.setValue(CONF_DEFAULT_SESSION, m_defaultSession); - s.setValue(CONF_DEFAULT_FORMAT, m_defaultFormat); - 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); - s.setValue(CONF_LOCALE, m_locale); - 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); - s.setValue(CONF_TAB_STOP, m_tabStop); - s.setValue(CONF_TAB_SPACES, m_tabSpaces); - s.setValue(CONF_EDIT_DRAG_DROP, m_editDragDrop); - s.setValue(CONF_TOAD_BINDINGS, m_toadBindings); - s.setValue(CONF_DISPLAY_GRIDLINES, m_displayGridlines); - s.setValue(CONF_SMTP, m_smtp); - s.setValue(CONF_SMTP_PORT, m_smtpPort); - s.setValue(CONF_STYLE, m_style); - // tooracleconnection - s.setValue(CONF_OPEN_CURSORS, m_openCursors); - s.setValue(CONF_MAX_LONG, m_maxLong); - // toqsqlconnection - s.setValue(CONF_ONLY_FORWARD, m_onlyForward); - // 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) + void loadConfig() { - s.setArrayIndex(i); - key = m_tools.keys().at(i); - s.setValue("ToolName", key); - s.setValue("Enabled", m_tools[key]); + int cnt; // tmp count holder for setting arrays + QSettings s; + s.beginGroup("preferences"); + m_provider = s.value(CONF_PROVIDER, DEFAULT_PROVIDER).toString(); + m_savePassword = s.value(CONF_SAVE_PWD, DEFAULT_SAVE_PWD).toBool(); + m_defaultPassword = s.value(CONF_PASSWORD, DEFAULT_PASSWORD).toString(); + m_defaultDatabase = s.value(CONF_DATABASE, DEFAULT_DATABASE).toString(); + m_defaultUser = s.value(CONF_USER, DEFAULT_USER).toString(); + m_defaultHost = s.value(CONF_HOST, DEFAULT_HOST).toString(); + + // #define CONF_OPTIONS "Options" + // #define DEFAULT_OPTIONS "" + m_maxNumber = s.value(CONF_MAX_NUMBER, DEFAULT_MAX_NUMBER).toInt(); + m_maxColSize = s.value(CONF_MAX_COL_SIZE, DEFAULT_MAX_COL_SIZE).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_textFont = s.value(CONF_TEXT, "").toString(); + m_codeFont = s.value(CONF_CODE, "").toString(); + m_listFont = s.value(CONF_LIST, "").toString(); + m_dateFormat = s.value(CONF_DATE_FORMAT, DEFAULT_DATE_FORMAT).toString(); + m_refresh = s.value(CONF_REFRESH, DEFAULT_REFRESH).toString(); + m_highlight = s.value(CONF_HIGHLIGHT, true).toBool(); + m_keywordUpper = s.value(CONF_KEYWORD_UPPER, DEFAULT_KEYWORD_UPPER).toBool(); + + m_pluginDir = s.value(CONF_PLUGIN_DIR, DEFAULT_PLUGIN_DIR).toString(); + m_cacheDir = s.value(CONF_CACHE_DIR, "").toString(); + m_cacheDisk = s.value(CONF_CACHE_DISK, DEFAULT_CACHE_DISK).toBool(); + m_sqlFile = s.value(CONF_SQL_FILE, DEFAULT_SQL_FILE).toString(); + m_statusMessage = s.value(CONF_STATUS_MESSAGE, DEFAULT_STATUS_MESSAGE).toInt(); + + m_dbTitle = s.value(CONF_DB_TITLE, true).toBool(); + m_sizeUnit = s.value(CONF_SIZE_UNIT, DEFAULT_SIZE_UNIT).toString(); + m_helpPath = s.value(CONF_HELP_PATH, "qrc:/help/toc.html").toString(); + m_statusSave = s.value(CONF_STATUS_SAVE, DEFAULT_STATUS_SAVE).toInt(); + m_autoCommit = s.value(CONF_AUTO_COMMIT, false).toBool(); + m_changeConnection = s.value(CONF_CHANGE_CONNECTION, true).toBool(); + + // #define CONF_CONNECT_HISTORY "ConnectHistory" + m_connectSize = s.value(CONF_CONNECT_SIZE, DEFAULT_CONNECT_SIZE).toInt(); + + // #define CONF_CONNECT_CURRENT "ConnectCurrent" + m_defaultTool = s.value(CONF_DEFAULT_TOOL).toString(); + // #define CONF_TOOL_ENABLE "Enabled" + m_chartSamples = s.value(CONF_CHART_SAMPLES, DEFAULT_CHART_SAMPLES).toInt(); + m_displaySamples = s.value(CONF_DISPLAY_SAMPLES, DEFAULT_DISPLAY_SAMPLES).toInt(); + m_codeCompletion = s.value(CONF_CODE_COMPLETION, true).toBool(); + m_completionSort = s.value(CONF_COMPLETION_SORT, true).toBool(); + m_autoIndent = s.value(CONF_AUTO_INDENT, true).toBool(); + m_dontReread = s.value(CONF_DONT_REREAD, true).toBool(); + m_autoLong = s.value(CONF_AUTO_LONG, 0).toInt(); + m_messageStatusbar = s.value(CONF_MESSAGE_STATUSBAR, false).toBool(); + m_tabbedTools = s.value(CONF_TABBED_TOOLS, false).toBool(); + m_objectCache = s.value(CONF_OBJECT_CACHE, DEFAULT_OBJECT_CACHE).toInt(); + m_bkgndConnect = s.value(CONF_BKGND_CONNECT, false).toBool(); + m_firewallMode = s.value(CONF_FIREWALL_MODE, false).toBool(); + m_maxContent = s.value(CONF_MAX_CONTENT, DEFAULT_MAX_CONTENT).toInt(); + m_keepPlans = s.value(CONF_KEEP_PLANS, false).toBool(); + m_restoreSession = s.value(CONF_RESTORE_SESSION, false).toBool(); + m_defaultSession = s.value(CONF_DEFAULT_SESSION, DEFAULT_SESSION).toString(); + // FIXME! + m_defaultFormat = s.value(CONF_DEFAULT_FORMAT, "").toInt(); + m_autoIndentRo = s.value(CONF_AUTO_INDENT_RO, true).toBool(); + m_indicateEmpty = s.value(CONF_INDICATE_EMPTY, true).toBool(); + m_indicateEmptyColor = s.value(CONF_INDICATE_EMPTY_COLOR, "#f2ffbc").toString(); + m_extensions = s.value(CONF_EXTENSIONS, DEFAULT_EXTENSIONS).toString(); + 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_locale = s.value(CONF_LOCALE, QLocale().name()).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(); + m_tabStop = s.value(CONF_TAB_STOP, DEFAULT_TAB_STOP).toInt(); + m_tabSpaces = s.value(CONF_TAB_SPACES, DEFAULT_TAB_SPACES).toBool(); + m_editDragDrop = s.value(CONF_EDIT_DRAG_DROP, DEFAULT_EDIT_DRAG_DROP).toBool(); + m_toadBindings = s.value(CONF_TOAD_BINDINGS, DEFAULT_TOAD_BINDINGS).toBool(); + m_displayGridlines = s.value(CONF_DISPLAY_GRIDLINES, DEFAULT_DISPLAY_GRIDLINES).toBool(); + m_smtp = s.value(CONF_SMTP, DEFAULT_SMTP).toString(); + m_smtpPort = s.value(CONF_SMTP_PORT, DEFAULT_SMTP_PORT).toInt(); + m_style = s.value(CONF_STYLE, DEFAULT_STYLE).toString(); + // tooracleconnection.cpp + m_openCursors = s.value(CONF_OPEN_CURSORS, DEFAULT_OPEN_CURSORS).toInt(); + m_maxLong = s.value(CONF_MAX_LONG, DEFAULT_MAX_LONG).toInt(); + // toqsqlconnection + m_onlyForward = s.value(CONF_ONLY_FORWARD, DEFAULT_ONLY_FORWARD).toBool(); + // main.cpp + m_lastVersion = s.value(CONF_LAST_VERSION, "").toString(); + m_firstInstall = s.value(CONF_FIRST_INSTALL, "").toString(); + // tools + cnt = s.beginReadArray(CONF_TOOLS); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_tools[s.value("ToolName").toString()] = s.value("Enabled").toBool(); + } + s.endArray(); + // toresultlistformat + m_csvSeparator = s.value(CONF_CSV_SEPARATOR, DEFAULT_CSV_SEPARATOR).toString(); + m_csvDelimiter = s.value(CONF_CSV_DELIMITER, DEFAULT_CSV_DELIMITER).toString(); + // toeditextensions + m_commaBefore = s.value(CONF_COMMA_BEFORE, true).toBool(); + m_blockOpenLine = s.value(CONF_BLOCK_OPEN_LINE, true).toBool(); + m_operatorSpace = s.value(CONF_OPERATOR_SPACE, true).toBool(); + m_rightSeparator = s.value(CONF_RIGHT_SEPARATOR, true).toBool(); + m_endBlockNewline = s.value(CONF_END_BLOCK_NEWLINE, true).toBool(); + m_commentColumn = s.value(CONF_COMMENT_COLUMN, DEFAULT_COMMENT_COLUMN).toInt(); + // tobrowser + m_filterIgnoreCase = s.value(CONF_FILTER_IGNORE_CASE, false).toBool(); + m_filterInvert = s.value(CONF_FILTER_INVERT, false).toBool(); + m_filterType = s.value(CONF_FILTER_TYPE, 0).toInt(); + m_filterTablespaceType = s.value(CONF_FILTER_TABLESPACE_TYPE, 0).toInt(); + m_filterText = s.value(CONF_FILTER_TEXT, "").toString(); + // tohelp + cnt = s.beginReadArray("AdditionalHelp"); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_additionalHelp[s.value("HelpName").toString()] = s.value("Path").toString(); + } + s.endArray(); + // tochartmanager + cnt = s.beginReadArray("ChartFiles"); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_chartFiles[s.value("Name").toString()] = s.value("Spec").toString(); + } + s.endArray(); + cnt = s.beginReadArray("ChartAlarms"); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_chartAlarms[s.value("Name").toString()] = s.value("Spec").toString(); + } + s.endArray(); + // tooutput + m_polling = s.value(CONF_POLLING, DEFAULT_POLLING).toString(); + m_logType = s.value(CONF_LOG_TYPE, DEFAULT_LOG_TYPE).toInt(); + m_logUser = s.value(CONF_LOG_USER, DEFAULT_LOG_USER).toString(); + // torollback + m_noExec = s.value(CONF_NO_EXEC, true).toBool(); + m_needRead = s.value(CONF_NEED_READ, true).toBool(); + m_needTwo = s.value(CONF_NEED_TWO, true).toBool(); + m_alignLeft = s.value(CONF_ALIGN_LEFT, true).toBool(); + m_oldEnable = s.value(CONF_OLD_ENABLE, false).toBool(); + // tosgatrace + m_autoUpdate = s.value(CONF_AUTO_UPDATE, true).toBool(); + // tostorage + m_dispTablespaces = s.value(CONF_DISP_TABLESPACES, true).toBool(); + m_dispCoalesced = s.value(CONF_DISP_COALESCED, false).toBool(); + m_dispExtents = s.value(CONF_DISP_EXTENTS, false).toBool(); + m_dispAvailableGraph = s.value(CONF_DISP_AVAILABLEGRAPH, true).toBool(); + // totemplate + cnt = s.beginReadArray("Templates"); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_templates[s.value("Name").toString()] = s.value("File").toString(); + } + s.endArray(); + // totuning + m_tuningFirstRun = (s.value(CONF_OVERVIEW) == QVariant()); + m_tuningOverview = s.value(CONF_OVERVIEW, false).toBool(); + m_tuningFileIO = s.value(CONF_FILEIO, false).toBool(); + m_tuningWaits = s.value(CONF_WAITS, false).toBool(); + m_tuningCharts = s.value(CONF_CHART, false).toBool(); + // toworksheet + m_wsAutoSave = s.value(CONF_AUTO_SAVE, false).toBool(); + m_wsCheckSave = s.value(CONF_CHECK_SAVE, true).toBool(); + m_wsAutoLoad = s.value(CONF_AUTO_LOAD, "").toString(); + m_wsLogAtEnd = s.value(CONF_LOG_AT_END, true).toBool(); + m_wsLogMulti = s.value(CONF_LOG_MULTI, true).toBool(); + m_wsStatistics = s.value(CONF_STATISTICS, false).toBool(); + m_wsTimedStats = s.value(CONF_TIMED_STATS, true).toBool(); + m_wsNumber = s.value(CONF_NUMBER, true).toBool(); + m_wsMoveToErr = s.value(CONF_MOVE_TO_ERR, true).toBool(); + m_wsHistory = s.value(CONF_HISTORY, false).toBool(); + m_wsExecLog = s.value(CONF_EXEC_LOG, false).toBool(); + m_wsToplevelDescribe = s.value(CONF_TOPLEVEL_DESCRIBE, true).toBool(); + // tosyntaxsetup + const QPalette cg = qApp->palette(); + m_syntaxDefault = s.value("SyntaxDefault", cg.color(QPalette::Base).name()).toString(); + m_syntaxComment = s.value("SyntaxComment", "darkgray").toString(); + m_syntaxNumber = s.value("SyntaxNumber", "limegreen").toString(); + m_syntaxKeyword = s.value("SyntaxKeyword", "navy").toString(); + m_syntaxString = s.value("SyntaxString", "red").toString(); + m_syntaxDefaultBg = s.value("SyntaxDefaultBg", cg.color(QPalette::Text).name()).toString(); + m_syntaxErrorBg = s.value("SyntaxErrorBg", "darkred").toString(); + m_syntaxDebugBg = s.value("SyntaxDebugBg", "darkgreen").toString(); + m_syntaxCurrentLineMarker = s.value("SyntaxCurrentLineMarker", "whitesmoke").toString(); + m_useMaxTextWidthMark = s.value("useMaxTextWidthMark", false).toBool(); + m_maxTextWidthMark = s.value("maxTextWidthMark", 75).toInt(); + s.endGroup(); + + // main window + s.beginGroup("toMainWindow"); + m_mainWindowGeometry = s.value("geometry").toByteArray(); + // mainwindow's toolbars etc + m_mainWindowState = s.value("state").toByteArray(); + m_leftDockbarState = s.value("leftDockbar").toByteArray(); + m_rightDockbarState = s.value("rightDockbar").toByteArray(); + s.endGroup(); + + // editor shortcuts + s.beginGroup("editorShortcuts"); + m_useEditorShortcuts = s.value("useEditorShortcuts", false).toBool(); + cnt = s.beginReadArray("shortcuts"); + for (int i = 0; i < cnt; ++i) + { + s.setArrayIndex(i); + m_editorShortcuts[s.value("key").toString()] = s.value("value"); + } + s.endArray(); + s.endGroup(); } - s.endArray(); - // toresultlistformat - s.setValue(CONF_CSV_SEPARATOR, m_csvSeparator); - s.setValue(CONF_CSV_DELIMITER, m_csvDelimiter); - // toeditextensions - s.setValue(CONF_COMMA_BEFORE, m_commaBefore); - s.setValue(CONF_BLOCK_OPEN_LINE, m_blockOpenLine); - s.setValue(CONF_OPERATOR_SPACE, m_operatorSpace); - s.setValue(CONF_RIGHT_SEPARATOR, m_rightSeparator); - s.setValue(CONF_END_BLOCK_NEWLINE, m_endBlockNewline); - s.setValue(CONF_COMMENT_COLUMN, m_commentColumn); - // tobrowser - s.setValue(CONF_FILTER_IGNORE_CASE, m_filterIgnoreCase); - s.setValue(CONF_FILTER_INVERT, m_filterInvert); - s.setValue(CONF_FILTER_TYPE, m_filterType); - s.setValue(CONF_FILTER_TABLESPACE_TYPE, m_filterTablespaceType); - s.setValue(CONF_FILTER_TEXT, m_filterText); - // tohelp - s.beginWriteArray("AdditionalHelp"); - for (int i = 0; i < m_additionalHelp.count(); ++i) + + + void saveConfig() { - s.setArrayIndex(i); - key = m_additionalHelp.keys().at(i); - s.setValue("HelpName", key); - s.setValue("Path", m_additionalHelp[key]); - } - s.endArray(); - // tochartmanager - s.beginWriteArray("ChartFiles"); - for (int i = 0; i < m_chartFiles.count(); ++i) - { - s.setArrayIndex(i); - key = m_chartFiles.keys().at(i); - s.setValue("Name", key); - s.setValue("Spec", m_chartFiles[key]); - } - s.endArray(); - s.beginWriteArray("ChartAlarms"); - for (int i = 0; i < m_chartAlarms.count(); ++i) - { - s.setArrayIndex(i); - key = m_chartAlarms.keys().at(i); - s.setValue("Name", key); - s.setValue("Spec", m_chartAlarms[key]); - } - s.endArray(); - // tooutput - s.setValue(CONF_POLLING, m_polling); - s.setValue(CONF_LOG_TYPE, m_logType); - s.setValue(CONF_LOG_USER, m_logUser); - // torollback - s.setValue(CONF_NO_EXEC, m_noExec); - s.setValue(CONF_NEED_READ, m_needRead); - s.setValue(CONF_NEED_TWO, m_needTwo); - s.setValue(CONF_ALIGN_LEFT, m_alignLeft); - s.setValue(CONF_OLD_ENABLE, m_oldEnable); - // tosgatrace - s.setValue(CONF_AUTO_UPDATE, m_autoUpdate); - // tostorage - s.setValue(CONF_DISP_TABLESPACES, m_dispTablespaces); - s.setValue(CONF_DISP_COALESCED, m_dispCoalesced); - s.setValue(CONF_DISP_EXTENTS, m_dispExtents); - s.setValue(CONF_DISP_AVAILABLEGRAPH, m_dispAvailableGraph); - // totemplate - s.beginWriteArray("Templates"); - for (int i = 0; i < m_templates.count(); ++i) - { - s.setArrayIndex(i); - key = m_templates.keys().at(i); - s.setValue("Name", key); - s.setValue("File", m_templates[key]); - } - s.endArray(); - // totuning - s.setValue(CONF_OVERVIEW, m_tuningOverview); - s.setValue(CONF_FILEIO, m_tuningFileIO); - s.setValue(CONF_WAITS, m_tuningWaits); - s.setValue(CONF_CHART, m_tuningCharts); - // toworksheet - s.setValue(CONF_AUTO_SAVE, m_wsAutoSave); - s.setValue(CONF_CHECK_SAVE, m_wsCheckSave); - s.setValue(CONF_AUTO_LOAD, m_wsAutoLoad); - s.setValue(CONF_LOG_AT_END, m_wsLogAtEnd); - s.setValue(CONF_LOG_MULTI, m_wsLogMulti); - s.setValue(CONF_STATISTICS, m_wsStatistics); - s.setValue(CONF_TIMED_STATS, m_wsTimedStats); - s.setValue(CONF_NUMBER, m_wsNumber); - s.setValue(CONF_MOVE_TO_ERR, m_wsMoveToErr); - s.setValue(CONF_HISTORY, m_wsHistory); - s.setValue(CONF_EXEC_LOG, m_wsExecLog); - s.setValue(CONF_TOPLEVEL_DESCRIBE, m_wsToplevelDescribe); - // tosyntaxsetup - s.setValue("SyntaxDefault", m_syntaxDefault); - s.setValue("SyntaxComment", m_syntaxComment); - s.setValue("SyntaxNumber", m_syntaxNumber); - s.setValue("SyntaxKeyword", m_syntaxKeyword); - s.setValue("SyntaxString", m_syntaxString); - s.setValue("SyntaxDefaultBg", m_syntaxDefaultBg); - s.setValue("SyntaxErrorBg", m_syntaxErrorBg); - s.setValue("SyntaxDebugBg", m_syntaxDebugBg); - s.setValue("SyntaxCurrentLineMarker", m_syntaxCurrentLineMarker); - s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); - s.setValue("maxTextWidthMark", m_maxTextWidthMark); - s.endGroup(); + QString key; // tmp key for maps + QSettings s; + s.beginGroup("preferences"); + s.setValue(CONF_PROVIDER, m_provider); + s.setValue(CONF_SAVE_PWD, m_savePassword); + s.setValue(CONF_PASSWORD, m_defaultPassword); + s.setValue(CONF_DATABASE, m_defaultDatabase); + s.setValue(CONF_USER, m_defaultUser); + s.setValue(CONF_HOST, m_defaultHost); + s.setValue(CONF_MAX_NUMBER, m_maxNumber); + s.setValue(CONF_MAX_COL_SIZE, m_maxColSize); + 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_textFont); + s.setValue(CONF_CODE, m_codeFont); + s.setValue(CONF_LIST, m_listFont); + s.setValue(CONF_DATE_FORMAT, m_dateFormat); + s.setValue(CONF_REFRESH, m_refresh); + s.setValue(CONF_HIGHLIGHT, m_highlight); + s.setValue(CONF_KEYWORD_UPPER, m_keywordUpper); + s.setValue(CONF_PLUGIN_DIR, m_pluginDir); + s.setValue(CONF_CACHE_DIR, m_cacheDir); + s.setValue(CONF_CACHE_DISK, m_cacheDisk); + s.setValue(CONF_SQL_FILE, m_sqlFile); + s.setValue(CONF_STATUS_MESSAGE, m_statusMessage); + s.setValue(CONF_DB_TITLE, m_dbTitle); + s.setValue(CONF_SIZE_UNIT, m_sizeUnit); + s.setValue(CONF_HELP_PATH, m_helpPath); + s.setValue(CONF_STATUS_SAVE, m_statusSave); + s.setValue(CONF_AUTO_COMMIT, m_autoCommit); + s.setValue(CONF_CHANGE_CONNECTION, m_changeConnection); + s.setValue(CONF_CONNECT_SIZE, m_connectSize); + s.setValue(CONF_DEFAULT_TOOL, m_defaultTool); + s.setValue(CONF_CHART_SAMPLES, m_chartSamples); + s.setValue(CONF_DISPLAY_SAMPLES, m_displaySamples); + 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_AUTO_LONG, m_autoLong); + s.setValue(CONF_MESSAGE_STATUSBAR, m_messageStatusbar); + s.setValue(CONF_TABBED_TOOLS, m_tabbedTools); + s.setValue(CONF_OBJECT_CACHE, m_objectCache); + s.setValue(CONF_BKGND_CONNECT, m_bkgndConnect); + s.setValue(CONF_FIREWALL_MODE, m_firewallMode); + s.setValue(CONF_MAX_CONTENT, m_maxContent); + s.setValue(CONF_KEEP_PLANS, m_keepPlans); + s.setValue(CONF_RESTORE_SESSION, m_restoreSession); + s.setValue(CONF_DEFAULT_SESSION, m_defaultSession); + s.setValue(CONF_DEFAULT_FORMAT, m_defaultFormat); + 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); + s.setValue(CONF_LOCALE, m_locale); + 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); + s.setValue(CONF_TAB_STOP, m_tabStop); + s.setValue(CONF_TAB_SPACES, m_tabSpaces); + s.setValue(CONF_EDIT_DRAG_DROP, m_editDragDrop); + s.setValue(CONF_TOAD_BINDINGS, m_toadBindings); + s.setValue(CONF_DISPLAY_GRIDLINES, m_displayGridlines); + s.setValue(CONF_SMTP, m_smtp); + s.setValue(CONF_SMTP_PORT, m_smtpPort); + s.setValue(CONF_STYLE, m_style); + // tooracleconnection + s.setValue(CONF_OPEN_CURSORS, m_openCursors); + s.setValue(CONF_MAX_LONG, m_maxLong); + // toqsqlconnection + s.setValue(CONF_ONLY_FORWARD, m_onlyForward); + // 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) + { + s.setArrayIndex(i); + key = m_tools.keys().at(i); + s.setValue("ToolName", key); + s.setValue("Enabled", m_tools[key]); + } + s.endArray(); + // toresultlistformat + s.setValue(CONF_CSV_SEPARATOR, m_csvSeparator); + s.setValue(CONF_CSV_DELIMITER, m_csvDelimiter); + // toeditextensions + s.setValue(CONF_COMMA_BEFORE, m_commaBefore); + s.setValue(CONF_BLOCK_OPEN_LINE, m_blockOpenLine); + s.setValue(CONF_OPERATOR_SPACE, m_operatorSpace); + s.setValue(CONF_RIGHT_SEPARATOR, m_rightSeparator); + s.setValue(CONF_END_BLOCK_NEWLINE, m_endBlockNewline); + s.setValue(CONF_COMMENT_COLUMN, m_commentColumn); + // tobrowser + s.setValue(CONF_FILTER_IGNORE_CASE, m_filterIgnoreCase); + s.setValue(CONF_FILTER_INVERT, m_filterInvert); + s.setValue(CONF_FILTER_TYPE, m_filterType); + s.setValue(CONF_FILTER_TABLESPACE_TYPE, m_filterTablespaceType); + s.setValue(CONF_FILTER_TEXT, m_filterText); + // tohelp + s.beginWriteArray("AdditionalHelp"); + for (int i = 0; i < m_additionalHelp.count(); ++i) + { + s.setArrayIndex(i); + key = m_additionalHelp.keys().at(i); + s.setValue("HelpName", key); + s.setValue("Path", m_additionalHelp[key]); + } + s.endArray(); + // tochartmanager + s.beginWriteArray("ChartFiles"); + for (int i = 0; i < m_chartFiles.count(); ++i) + { + s.setArrayIndex(i); + key = m_chartFiles.keys().at(i); + s.setValue("Name", key); + s.setValue("Spec", m_chartFiles[key]); + } + s.endArray(); + s.beginWriteArray("ChartAlarms"); + for (int i = 0; i < m_chartAlarms.count(); ++i) + { + s.setArrayIndex(i); + key = m_chartAlarms.keys().at(i); + s.setValue("Name", key); + s.setValue("Spec", m_chartAlarms[key]); + } + s.endArray(); + // tooutput + s.setValue(CONF_POLLING, m_polling); + s.setValue(CONF_LOG_TYPE, m_logType); + s.setValue(CONF_LOG_USER, m_logUser); + // torollback + s.setValue(CONF_NO_EXEC, m_noExec); + s.setValue(CONF_NEED_READ, m_needRead); + s.setValue(CONF_NEED_TWO, m_needTwo); + s.setValue(CONF_ALIGN_LEFT, m_alignLeft); + s.setValue(CONF_OLD_ENABLE, m_oldEnable); + // tosgatrace + s.setValue(CONF_AUTO_UPDATE, m_autoUpdate); + // tostorage + s.setValue(CONF_DISP_TABLESPACES, m_dispTablespaces); + s.setValue(CONF_DISP_COALESCED, m_dispCoalesced); + s.setValue(CONF_DISP_EXTENTS, m_dispExtents); + s.setValue(CONF_DISP_AVAILABLEGRAPH, m_dispAvailableGraph); + // totemplate + s.beginWriteArray("Templates"); + for (int i = 0; i < m_templates.count(); ++i) + { + s.setArrayIndex(i); + key = m_templates.keys().at(i); + s.setValue("Name", key); + s.setValue("File", m_templates[key]); + } + s.endArray(); + // totuning + s.setValue(CONF_OVERVIEW, m_tuningOverview); + s.setValue(CONF_FILEIO, m_tuningFileIO); + s.setValue(CONF_WAITS, m_tuningWaits); + s.setValue(CONF_CHART, m_tuningCharts); + // toworksheet + s.setValue(CONF_AUTO_SAVE, m_wsAutoSave); + s.setValue(CONF_CHECK_SAVE, m_wsCheckSave); + s.setValue(CONF_AUTO_LOAD, m_wsAutoLoad); + s.setValue(CONF_LOG_AT_END, m_wsLogAtEnd); + s.setValue(CONF_LOG_MULTI, m_wsLogMulti); + s.setValue(CONF_STATISTICS, m_wsStatistics); + s.setValue(CONF_TIMED_STATS, m_wsTimedStats); + s.setValue(CONF_NUMBER, m_wsNumber); + s.setValue(CONF_MOVE_TO_ERR, m_wsMoveToErr); + s.setValue(CONF_HISTORY, m_wsHistory); + s.setValue(CONF_EXEC_LOG, m_wsExecLog); + s.setValue(CONF_TOPLEVEL_DESCRIBE, m_wsToplevelDescribe); + // tosyntaxsetup + s.setValue("SyntaxDefault", m_syntaxDefault); + s.setValue("SyntaxComment", m_syntaxComment); + s.setValue("SyntaxNumber", m_syntaxNumber); + s.setValue("SyntaxKeyword", m_syntaxKeyword); + s.setValue("SyntaxString", m_syntaxString); + s.setValue("SyntaxDefaultBg", m_syntaxDefaultBg); + s.setValue("SyntaxErrorBg", m_syntaxErrorBg); + s.setValue("SyntaxDebugBg", m_syntaxDebugBg); + s.setValue("SyntaxCurrentLineMarker", m_syntaxCurrentLineMarker); + s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); + s.setValue("maxTextWidthMark", m_maxTextWidthMark); + s.endGroup(); - // main window - s.beginGroup("toMainWindow"); - s.setValue("geometry", m_mainWindowGeometry); - // mainwindow's toolbars etc - s.setValue("state", m_mainWindowState); - s.endGroup(); + // main window + s.beginGroup("toMainWindow"); + s.setValue("geometry", m_mainWindowGeometry); + // mainwindow's toolbars etc + s.setValue("state", m_mainWindowState); + s.setValue("leftDockbar", m_leftDockbarState); + s.setValue("rightDockbar", m_rightDockbarState); + s.endGroup(); - // editor shortcuts - s.beginGroup("editorShortcuts"); - s.setValue("useEditorShortcuts", m_useEditorShortcuts); - s.beginWriteArray("shortcuts"); - for (int i = 0; i < m_editorShortcuts.count(); ++i) - { - s.setArrayIndex(i); - key = m_editorShortcuts.keys().at(i); - s.setValue("key", key); - s.setValue("value", m_editorShortcuts[key]); + // editor shortcuts + s.beginGroup("editorShortcuts"); + s.setValue("useEditorShortcuts", m_useEditorShortcuts); + s.beginWriteArray("shortcuts"); + for (int i = 0; i < m_editorShortcuts.count(); ++i) + { + s.setArrayIndex(i); + key = m_editorShortcuts.keys().at(i); + s.setValue("key", key); + s.setValue("value", m_editorShortcuts[key]); + } + s.endArray(); + s.endGroup(); } - s.endArray(); - s.endGroup(); -} -void toConfiguration::loadMap(const QString &filename, std::map<QString, QString> &pairs) -{ - QByteArray data = toReadFile(filename).toUtf8(); - int pos = 0; - int bol = 0; - int endtag = -1; - int wpos = 0; - int size = data.length(); - while (pos < size) + void loadMap(const QString &filename, std::map<QString, QString> &pairs) { - switch (data[pos]) + QByteArray data = toReadFile(filename).toUtf8(); + + int pos = 0; + int bol = 0; + int endtag = -1; + int wpos = 0; + int size = data.length(); + while (pos < size) { - case '\n': - data[wpos] = 0; - if (endtag == -1) - throw QT_TRANSLATE_NOOP("toTool", "Malformed tag in config file. Missing = on row. (%1)").arg(QString(data.mid(bol, wpos - bol))); + switch (data[pos]) { - QString tag = ((const char *)data) + bol; - QString val = ((const char *)data) + endtag + 1; - pairs[tag] = val; - } - bol = pos + 1; - endtag = -1; - wpos = pos; - break; - case '=': - if (endtag == -1) - { - endtag = pos; + case '\n': data[wpos] = 0; + if (endtag == -1) + throw QT_TRANSLATE_NOOP("toTool", "Malformed tag in config file. Missing = on row. (%1)").arg(QString(data.mid(bol, wpos - bol))); + { + QString tag = ((const char *)data) + bol; + QString val = ((const char *)data) + endtag + 1; + pairs[tag] = val; + } + bol = pos + 1; + endtag = -1; wpos = pos; - } - else - data[wpos] = data[pos]; - break; - case '\\': - pos++; - switch (data[pos]) - { - case 'n': - data[wpos] = '\n'; break; - case '\\': - if (endtag >= 0) - data[wpos] = '\\'; + case '=': + if (endtag == -1) + { + endtag = pos; + data[wpos] = 0; + wpos = pos; + } else - data[wpos] = ':'; + data[wpos] = data[pos]; break; + case '\\': + pos++; + switch (data[pos]) + { + case 'n': + data[wpos] = '\n'; + break; + case '\\': + if (endtag >= 0) + data[wpos] = '\\'; + else + data[wpos] = ':'; + break; + default: + throw QT_TRANSLATE_NOOP("toTool", "Unknown escape character in string (Only \\\\ and \\n recognised)"); + } + break; default: - throw QT_TRANSLATE_NOOP("toTool", "Unknown escape character in string (Only \\\\ and \\n recognised)"); + data[wpos] = data[pos]; } - break; - default: - data[wpos] = data[pos]; + wpos++; + pos++; } - wpos++; - pos++; + + return; } - return ; -} -bool toConfiguration::saveMap(const QString &file, std::map<QString, QString> &pairs) -{ - QString data; + bool saveMap(const QString &file, std::map<QString, QString> &pairs) { -// qt4 QRegExp newline(QString::fromLatin1("\n")); + QString data; + + { + // qt4 QRegExp newline(QString::fromLatin1("\n")); // qt4 QRegExp backslash(QString::fromLatin1("\\")); - QString newline("\n"); - QString backslash("\\"); - for (std::map<QString, QString>::iterator i = pairs.begin();i != pairs.end();i++) - { - QString str = (*i).first; - str.append(QString::fromLatin1("=")); - str.replace(backslash, QString::fromLatin1("\\\\")); - str.replace(newline, QString::fromLatin1("\\n")); - QString line = (*i).second; - line.replace(backslash, QString::fromLatin1("\\\\")); - line.replace(newline, QString::fromLatin1("\\n")); - str += line.toUtf8(); - str += QString::fromLatin1("\n"); - data += str; + QString newline("\n"); + QString backslash("\\"); + for (std::map<QString, QString>::iterator i = pairs.begin();i != pairs.end();i++) + { + QString str = (*i).first; + str.append(QString::fromLatin1("=")); + str.replace(backslash, QString::fromLatin1("\\\\")); + str.replace(newline, QString::fromLatin1("\\n")); + QString line = (*i).second; + line.replace(backslash, QString::fromLatin1("\\\\")); + line.replace(newline, QString::fromLatin1("\\n")); + str += line.toUtf8(); + str += QString::fromLatin1("\n"); + data += str; + } } + return toWriteFile(file, data); } - return toWriteFile(file, data); +}; + + +// static one +void toConfiguration::setQSettingsEnv() +{ + if (QCoreApplication::organizationName().isEmpty()) + QCoreApplication::setOrganizationName(TOORGNAME); + if (QCoreApplication::organizationDomain().isEmpty()) + QCoreApplication::setOrganizationDomain(TOORGDOMAIN); + if (QCoreApplication::applicationName().isEmpty()) + QCoreApplication::setApplicationName(TOAPPNAME); } +toConfiguration::toConfiguration() +{ + setQSettingsEnv(); + p = new toConfigurationPrivate; +} + +toConfiguration::~toConfiguration() +{ + delete p; +} + +void toConfiguration::saveConfig() +{ + p->saveConfig(); +} + +void toConfiguration::loadMap(const QString &filename, std::map<QString, QString> &pairs) +{ + p->loadMap(filename, pairs); +} + +bool toConfiguration::saveMap(const QString &file, std::map<QString, QString> &pairs) +{ + return p->saveMap(file, pairs); +} + QColor toConfiguration::syntaxDefault() { QColor c; - c.setNamedColor(m_syntaxDefault); + c.setNamedColor(p->m_syntaxDefault); return c; } void toConfiguration::setSyntaxDefault(QColor v) { - m_syntaxDefault = v.name(); + p->m_syntaxDefault = v.name(); } QColor toConfiguration::syntaxComment() { QColor c; - c.setNamedColor(m_syntaxComment); + c.setNamedColor(p->m_syntaxComment); return c; } void toConfiguration::setSyntaxComment(QColor v) { - m_syntaxComment = v.name(); + p->m_syntaxComment = v.name(); } QColor toConfiguration::syntaxNumber() { QColor c; - c.setNamedColor(m_syntaxNumber); + c.setNamedColor(p->m_syntaxNumber); return c; } void toConfiguration::setSyntaxNumber(QColor v) { - m_syntaxNumber = v.name(); + p->m_syntaxNumber = v.name(); } QColor toConfiguration::syntaxKeyword() { QColor c; - c.setNamedColor(m_syntaxKeyword); + c.setNamedColor(p->m_syntaxKeyword); return c; } void toConfiguration::setSyntaxKeyword(QColor v) { - m_syntaxKeyword = v.name(); + p->m_syntaxKeyword = v.name(); } QColor toConfiguration::syntaxString() { QColor c; - c.setNamedColor(m_syntaxString); + c.setNamedColor(p->m_syntaxString); return c; } void toConfiguration::setSyntaxString(QColor v) { - m_syntaxString = v.name(); + p->m_syntaxString = v.name(); } QColor toConfiguration::syntaxDefaultBg() { QColor c; - c.setNamedColor(m_syntaxDefaultBg); + c.setNamedColor(p->m_syntaxDefaultBg); return c; } void toConfiguration::setSyntaxDefaultBg(QColor v) { - m_syntaxDefaultBg = v.name(); + p->m_syntaxDefaultBg = v.name(); } QColor toConfiguration::syntaxDebugBg() { QColor c; - c.setNamedColor(m_syntaxDebugBg); + c.setNamedColor(p->m_syntaxDebugBg); return c; } void toConfiguration::setSyntaxDebugBg(QColor v) { - m_syntaxDebugBg = v.name(); + p->m_syntaxDebugBg = v.name(); } QColor toConfiguration::syntaxErrorBg() { QColor c; - c.setNamedColor(m_syntaxErrorBg); + c.setNamedColor(p->m_syntaxErrorBg); return c; } void toConfiguration::setSyntaxErrorBg(QColor v) { - m_syntaxErrorBg = v.name(); + p->m_syntaxErrorBg = v.name(); } QColor toConfiguration::syntaxCurrentLineMarker() { QColor c; - c.setNamedColor(m_syntaxCurrentLineMarker); + c.setNamedColor(p->m_syntaxCurrentLineMarker); return c; } void toConfiguration::setSyntaxCurrentLineMarker(QColor v) { - m_syntaxCurrentLineMarker = v.name(); + p->m_syntaxCurrentLineMarker = v.name(); } + + +QString toConfiguration::provider() +{ + return p->m_provider; +} +// void setProvider(const QString & v) { p->m_provider = v; } + +bool toConfiguration::savePassword() +{ + return p->m_savePassword; +} +void toConfiguration::setSavePassword(bool v) +{ + p->m_savePassword = v; +} + +QString toConfiguration::defaultPassword() +{ + return p->m_defaultPassword; +} +void toConfiguration::setDefaultPassword(const QString & v) +{ + p->m_defaultPassword = v; +} + +QString toConfiguration::defaultDatabase() +{ + return p->m_defaultDatabase; +} +void toConfiguration::setDefaultDatabase(const QString & v) +{ + p->m_defaultDatabase = v; +} + +QString toConfiguration::defaultUser() +{ + return p->m_defaultUser; +} +void toConfiguration::setDefaultUser(const QString & v) +{ + p->m_defaultUser = v; +} + +QString toConfiguration::defaultHost() +{ + return p->m_defaultHost; +} + +int toConfiguration::maxNumber() +{ + return p->m_maxNumber; +} +void toConfiguration::setMaxNumber(int v) +{ + p->m_maxNumber = v; +} + +int toConfiguration::maxColSize() +{ + return p->m_maxColSize; +} + +int toConfiguration::maxColDisp() +{ + return p->m_maxColDisp; +} +void toConfiguration::setMaxColDisp(int v) +{ + p->m_maxColDisp = v; +} + +QString toConfiguration::planTable() +{ + return p->m_planTable; +} +void toConfiguration::setPlanTable(const QString & v) +{ + p->m_planTable = v; +} + +QString toConfiguration::planCheckpoint() +{ + return p->m_planCheckpoint; +} +void toConfiguration::setPlanCheckpoint(const QString & v) +{ + p->m_planCheckpoint = v; +} + +QString toConfiguration::textFont() +{ + return p->m_textFont; +} +void toConfiguration::setTextFont(const QString & v) +{ + p->m_textFont = v; +} + +QString toConfiguration::codeFont() +{ + return p->m_codeFont; +} +void toConfiguration::setCodeFont(const QString & v) +{ + p->m_codeFont = v; +} + +QString toConfiguration::listFont() +{ + return p->m_listFont; +} +void toConfiguration::setListFont(const QString & v) +{ + p->m_listFont = v; +} + +QString toConfiguration::dateFormat() +{ + return p->m_dateFormat; +} +void toConfiguration::setDateFormat(const QString & v) +{ + p->m_dateFormat = v; +} + +QString toConfiguration::refresh() +{ + return p->m_refresh; +} +void toConfiguration::setRefresh(const QString & v) +{ + p->m_refresh = v; +} + +bool toConfiguration::highlight() +{ + return p->m_highlight; +} +void toConfiguration::setHighlight(bool v) +{ + p->m_highlight = v; +} + +bool toConfiguration::keywordUpper() +{ + return p->m_keywordUpper; +} +void toConfiguration::setKeywordUpper(bool v) +{ + p->m_keywordUpper = v; +} + +QString toConfiguration::pluginDir() +{ + return p->m_pluginDir; +} +void toConfiguration::setPluginDir(const QString & v) +{ + p->m_pluginDir = v; +} + +QString toConfiguration::cacheDir() +{ + return p->m_cacheDir; +} +void toConfiguration::setCacheDir(const QString & v) +{ + p->m_cacheDir = v; +} + +bool toConfiguration::cacheDisk() +{ + return p->m_cacheDisk; +} +void toConfiguration::setCacheDisk(bool v) +{ + p->m_cacheDisk = v; +} + +QString toConfiguration::sqlFile() +{ + return p->m_sqlFile; +} +void toConfiguration::setSqlFile(const QString & v) +{ + p->m_sqlFile = v; +} + +int toConfiguration::statusMessage() +{ + return p->m_statusMessage; +} +void toConfiguration::setStatusMessage(int v) +{ + p->m_statusMessage = v; +} + +bool toConfiguration::dbTitle() +{ + return p->m_dbTitle; +} +void toConfiguration::setDbTitle(bool v) +{ + p->m_dbTitle = v; +} + +Q... [truncated message content] |
From: <mrj...@us...> - 2008-12-08 00:09:32
|
Revision: 3108 http://tora.svn.sourceforge.net/tora/?rev=3108&view=rev Author: mrjohnson0 Date: 2008-12-08 00:09:29 +0000 (Mon, 08 Dec 2008) Log Message: ----------- docklets can be dragged to new areas, will remember where they were on startup Modified Paths: -------------- trunk/tora/src/todockbar.cpp trunk/tora/src/todockbar.h trunk/tora/src/todocklet.cpp trunk/tora/src/todocklet.h trunk/tora/src/tomain.cpp trunk/tora/src/tomain.h Modified: trunk/tora/src/todockbar.cpp =================================================================== --- trunk/tora/src/todockbar.cpp 2008-12-08 00:08:36 UTC (rev 3107) +++ trunk/tora/src/todockbar.cpp 2008-12-08 00:09:29 UTC (rev 3108) @@ -42,7 +42,10 @@ #include "todockbar.h" #include "todocklet.h" +#include <QDataStream> +#include <QByteArray> + toDockbarButton::toDockbarButton(const QIcon &icon, const QString &text, QWidget *parent) @@ -122,8 +125,6 @@ toDocklet* toDockbar::removeDocklet(toDocklet *let) { - if(let->isVisible()) - let->close(); if(!Docklets.contains(let->name())) return 0; @@ -154,3 +155,49 @@ { return Docklets.contains(let->name()); } + + +QByteArray toDockbar::saveState() const +{ + QByteArray buf; + QDataStream data(&buf, QIODevice::WriteOnly); + + foreach(QString name, Docklets.keys()) + { + toDocklet *let = toDocklet::docklet(name); + if(!let) + continue; + + // these will be stored by main window saveState() + if(let->isVisible()) + continue; + + data << let->name(); + data << let->geometry().width(); + } + + return buf; +} + + +void toDockbar::restoreState(QByteArray buf) +{ + QDataStream data(&buf, QIODevice::ReadOnly); + + while(!data.atEnd()) + { + QString name; + int width; + data >> name; + data >> width; + + toDocklet *let = toDocklet::docklet(name); + if(!let) + continue; + + QRect geo = let->geometry(); + geo.setWidth(width); + let->setGeometry(geo); + addDocklet(let, false); + } +} Modified: trunk/tora/src/todockbar.h =================================================================== --- trunk/tora/src/todockbar.h 2008-12-08 00:08:36 UTC (rev 3107) +++ trunk/tora/src/todockbar.h 2008-12-08 00:09:29 UTC (rev 3108) @@ -121,6 +121,21 @@ { return Area; } + + + /** + * Save state to QByteArray. Necessary since main window + * saveState() will only preserve docked QDockWidgets. + * + */ + QByteArray saveState() const; + + + /** + * Restore state of hidden docklets, buttons. + * + */ + void restoreState(QByteArray); }; #endif Modified: trunk/tora/src/todocklet.cpp =================================================================== --- trunk/tora/src/todocklet.cpp 2008-12-08 00:08:36 UTC (rev 3107) +++ trunk/tora/src/todocklet.cpp 2008-12-08 00:09:29 UTC (rev 3108) @@ -70,6 +70,11 @@ SIGNAL(activated()), this, SLOT(childActivated())); + + connect(this, + SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), + this, + SLOT(handleDockletLocationChanged(Qt::DockWidgetArea))); } @@ -125,6 +130,8 @@ QPoint pos; if(area == Qt::LeftToolBarArea) pos.setX(dockbar->geometry().width()); + else if(area == Qt::RightToolBarArea) + pos.setX(-(this->geometry().width())); pos = dockbar->mapToGlobal(pos); move(pos); @@ -165,3 +172,9 @@ { showPopup(false); } + + +void toDocklet::handleDockletLocationChanged(Qt::DockWidgetArea area) +{ + emit dockletLocationChanged(this, area); +} Modified: trunk/tora/src/todocklet.h =================================================================== --- trunk/tora/src/todocklet.h 2008-12-08 00:08:36 UTC (rev 3107) +++ trunk/tora/src/todocklet.h 2008-12-08 00:09:29 UTC (rev 3108) @@ -124,6 +124,13 @@ void popupVisibleToggled(bool shown); + /** + * Emitted when docklet moves to new location + * + */ + void dockletLocationChanged(toDocklet *let, Qt::DockWidgetArea area); + + public slots: /** * Show or hide popup. This is different from QDockWidget::floating @@ -138,6 +145,7 @@ private slots: void childActivated(); + void handleDockletLocationChanged(Qt::DockWidgetArea area); private: Modified: trunk/tora/src/tomain.cpp =================================================================== --- trunk/tora/src/tomain.cpp 2008-12-08 00:08:36 UTC (rev 3107) +++ trunk/tora/src/tomain.cpp 2008-12-08 00:09:29 UTC (rev 3108) @@ -688,15 +688,17 @@ foreach(toDocklet *let, toDocklet::docklets()) { - if(!let->isVisible()) - continue; + if(let->isVisible()) + moveDocklet(let, dockWidgetArea(let)); - Qt::DockWidgetArea area = dockWidgetArea(let); - if(area == Qt::LeftDockWidgetArea) - leftDockbar->addDocklet(let, false); - else if(area == Qt::RightDockWidgetArea) - rightDockbar->addDocklet(let, false); + connect(let, + SIGNAL(dockletLocationChanged(toDocklet *, Qt::DockWidgetArea)), + this, + SLOT(moveDocklet(toDocklet *, Qt::DockWidgetArea))); } + + leftDockbar->restoreState(toConfigurationSingle::Instance().leftDockbarState()); + rightDockbar->restoreState(toConfigurationSingle::Instance().rightDockbarState()); } @@ -913,6 +915,7 @@ if(!let) return; + let->close(); if(leftDockbar->contains(let)) { leftDockbar->removeDocklet(let); @@ -930,12 +933,22 @@ #else let->show(); #endif +} - Qt::DockWidgetArea area = dockWidgetArea(let); + +void toMain::moveDocklet(toDocklet *let, Qt::DockWidgetArea area) +{ if(area == Qt::RightDockWidgetArea) + { + leftDockbar->removeDocklet(let); rightDockbar->addDocklet(let); - else + } + + if(area == Qt::LeftDockWidgetArea) + { + rightDockbar->removeDocklet(let); leftDockbar->addDocklet(let); + } } @@ -1477,12 +1490,12 @@ } TOCATCH; - leftDockbar->setAllVisible(true); - rightDockbar->setAllVisible(true); - toConfigurationSingle::Instance().setMainWindowGeometry(saveGeometry()); toConfigurationSingle::Instance().setMainWindowState(saveState()); + toConfigurationSingle::Instance().setLeftDockbarState(leftDockbar->saveState()); + toConfigurationSingle::Instance().setRightDockbarState(rightDockbar->saveState()); + toConfigurationSingle::Instance().saveConfig(); event->accept(); } Modified: trunk/tora/src/tomain.h =================================================================== --- trunk/tora/src/tomain.h 2008-12-08 00:08:36 UTC (rev 3107) +++ trunk/tora/src/tomain.h 2008-12-08 00:09:29 UTC (rev 3108) @@ -585,6 +585,12 @@ */ toDockbar* dockbar(toDocklet *let); + /** + * Handles moving docklet to new dockbar + * + */ + void moveDocklet(toDocklet *let, Qt::DockWidgetArea area); + protected: /** intercept close event from parent */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-08 14:33:46
|
Revision: 3110 http://tora.svn.sourceforge.net/tora/?rev=3110&view=rev Author: subik Date: 2008-12-08 14:33:37 +0000 (Mon, 08 Dec 2008) Log Message: ----------- first part of Schema Browser tool cleanup. It's work in progress. It doesn't crash but its functionality (actions) is limited yet. Modified Paths: -------------- trunk/tora/src/CMakeLists.txt trunk/tora/src/Makefile.am trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowser.h trunk/tora/src/todescribe.cpp trunk/tora/src/todescribe.h trunk/tora/src/todescribeui.ui trunk/tora/src/toresult.cpp trunk/tora/src/toresultextract.cpp trunk/tora/src/toresultextract.h trunk/tora/src/toresultitem.cpp trunk/tora/src/toresultitem.h Added Paths: ----------- trunk/tora/src/tobrowserbasewidget.cpp trunk/tora/src/tobrowserbasewidget.h trunk/tora/src/tobrowsercodewidget.cpp trunk/tora/src/tobrowsercodewidget.h trunk/tora/src/tobrowserdblinkswidget.cpp trunk/tora/src/tobrowserdblinkswidget.h trunk/tora/src/tobrowserindexwidget.cpp trunk/tora/src/tobrowserindexwidget.h trunk/tora/src/tobrowsersequencewidget.cpp trunk/tora/src/tobrowsersequencewidget.h trunk/tora/src/tobrowsersynonymwidget.cpp trunk/tora/src/tobrowsersynonymwidget.h trunk/tora/src/tobrowsertablewidget.cpp trunk/tora/src/tobrowsertablewidget.h trunk/tora/src/tobrowsertriggerwidget.cpp trunk/tora/src/tobrowsertriggerwidget.h trunk/tora/src/tobrowserviewwidget.cpp trunk/tora/src/tobrowserviewwidget.h trunk/tora/src/toresultgrants.cpp trunk/tora/src/toresultgrants.h Modified: trunk/tora/src/CMakeLists.txt =================================================================== --- trunk/tora/src/CMakeLists.txt 2008-12-08 03:37:52 UTC (rev 3109) +++ trunk/tora/src/CMakeLists.txt 2008-12-08 14:33:37 UTC (rev 3110) @@ -33,7 +33,6 @@ todebugwatch.ui todescribeui.ui todroptablespaceui.ui -# toeditextensiongotoui.ui toeditextensionsetupui.ui toglobalsettingui.ui tohelpaddfileui.ui @@ -87,8 +86,19 @@ tobackgroundlabel.h tobrowserconstraint.h tobrowser.h + toresultgrants.h tobrowserindex.h tobrowsertable.h + tobrowserbasewidget.h + tobrowsertablewidget.h + tobrowserviewwidget.h + tobrowserindexwidget.h + tobrowsersequencewidget.h + tobrowsersynonymwidget.h + tobrowsercodewidget.h + tobrowsertriggerwidget.h + tobrowserdblinkswidget.h +# tobrowserschemabasewidget.h # toconf.h # toconfiguration.h toconnection.h @@ -242,8 +252,19 @@ tobarchart.cpp tobrowserconstraint.cpp tobrowser.cpp + toresultgrants.cpp tobrowserindex.cpp tobrowsertable.cpp + tobrowserbasewidget.cpp + tobrowsertablewidget.cpp + tobrowserviewwidget.cpp + tobrowserindexwidget.cpp + tobrowsersequencewidget.cpp + tobrowsersynonymwidget.cpp + tobrowsercodewidget.cpp + tobrowsertriggerwidget.cpp + tobrowserdblinkswidget.cpp +# tobrowserschemabasewidget.cpp toconfiguration.cpp toconnection.cpp toqvalue.cpp Modified: trunk/tora/src/Makefile.am =================================================================== --- trunk/tora/src/Makefile.am 2008-12-08 03:37:52 UTC (rev 3109) +++ trunk/tora/src/Makefile.am 2008-12-08 14:33:37 UTC (rev 3110) @@ -183,6 +183,16 @@ tovisualize.cpp tovisualize.h \ towaitevents.cpp towaitevents.h \ toconnectionmodel.cpp toconnectionmodel.h \ + tobrowserbasewidget.cpp tobrowserbasewidget.h \ + tobrowsertablewidget.cpp tobrowsertablewidget.h \ + tobrowserviewwidget.cpp tobrowserviewwidget.h \ + tobrowserindexwidget.cpp tobrowserindexwidget.h \ + tobrowsersequencewidget.cpp tobrowsersequencewidget.h \ + tobrowsersynonymwidget.cpp tobrowsersynonymwidget.h \ + tobrowsercodewidget.cpp tobrowsercodewidget.h \ + tobrowsertriggerwidget.cpp tobrowsertriggerwidget.h \ + tobrowserdblinkswidget.cpp tobrowserdblinkswidget.h \ + toresultgrants.cpp toresultgrants.h \ migratetool/sqldeveloper.cpp migratetool/sqldeveloper.h \ migratetool/squirrelsql.cpp migratetool/squirrelsql.h \ migratetool/tora3.cpp migratetool/tora3.h \ @@ -393,6 +403,16 @@ moc_todocklet.cpp \ moc_todockbar.cpp \ moc_topushbutton.cpp \ + moc_tobrowserbasewidget.cpp \ + moc_tobrowsertablewidget.cpp \ + moc_tobrowserviewwidget.cpp \ + moc_tobrowserindexwidget.cpp \ + moc_tobrowsersequencewidget.cpp \ + moc_tobrowsersynonymwidget.cpp \ + moc_tobrowsercodewidget.cpp \ + moc_tobrowsertriggerwidget.cpp \ + moc_tobrowserdblinkswidget.cpp \ + moc_toresultgrants.cpp \ docklets/moc_toviewdirectory.cpp \ docklets/moc_toviewconnections.cpp \ ui_toaboutui.h \ Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-08 03:37:52 UTC (rev 3109) +++ trunk/tora/src/tobrowser.cpp 2008-12-08 14:33:37 UTC (rev 3110) @@ -1,4 +1,4 @@ - +#include <QtDebug> /* BEGIN_COMMON_COPYRIGHT_HEADER * * TOra - An Oracle Toolkit for DBA's and developers @@ -758,144 +758,131 @@ "", "MySQL"); -static toSQL SQLTableConstraint( - "toBrowser:TableConstraint", -// "SELECT sub.constraint_name AS \"Constraint Name\",\n" -// " srch.search_condition AS \"Search Condition\",\n" -// " sub.condition AS \"Condition\",\n" -// " sub.status AS \"Status\",\n" -// " sub.constraint_type AS \"Type\",\n" -// " sub.delete_rule AS \"Delete Rule\",\n" -// " sub.GENERATED AS \"Generated\"\n" -// " FROM ( SELECT c.Constraint_Name,\n" -// " DECODE ( constraint_type,\n" -// " 'R',\n" -// " 'foreign key (' || a.column_name || ') references ' " -// "|| a2.owner || '.' || a2.table_name || '(' || a2.column_name || ')',\n" -// " 'P',\n" -// " 'primary key (' || a.column_name || ')',\n" -// " 'U',\n" -// " 'unique (' || a.column_name || ')',\n" -// " NULL ) AS condition,\n" -// " c.Status,\n" -// " c.Constraint_Type,\n" -// " c.Delete_Rule,\n" -// " c.GENERATED\n" -// " FROM sys.All_Constraints c,\n" -// " sys.all_cons_columns a,\n" -// " sys.all_cons_columns a2\n" -// " WHERE c.constraint_name = a.constraint_name\n" -// " AND c.Owner = :f1<char[101]>\n" -// " AND c.Table_Name = :f2<char[101]>\n" -// " AND c.r_constraint_name = a2.constraint_name ( + ) ) sub,\n" -// " sys.all_constraints srch\n" -// " WHERE sub.constraint_name = srch.constraint_name", - "SELECT main.constraint_name AS \"Constraint Name\",\n" - " main.column_name AS \"Column Name\",\n" - " main.search_condition AS \"Search Condition\",\n" - " main.status AS \"Status\",\n" - " main.constraint_type AS \"Type\",\n" - " main.delete_rule AS \"Delete Rule\",\n" - " main.generated AS \"Generated\",\n" - " DECODE ( main.constraint_type,\n" - " 'R',\n" - " 'FK (' || main.column_name || ') ref. ' || refs.owner || '.'\n" - " || refs.table_name || '(' || refs.column_name || ')',\n" - " 'P',\n" - " 'PK (' || main.column_name || ')',\n" - " 'U',\n" - " 'unique (' || main.column_name || ')',\n" - " NULL ) AS \"Condition\"\n" - " FROM\n" - " (\n" - " SELECT\n" - " c.constraint_name,\n" - " a.column_name,\n" - " c.constraint_type,\n" - " c.r_constraint_name,\n" - " c.search_condition,\n" - " c.status,\n" - " c.delete_rule,\n" - " c.generated\n" - " FROM\n" - " sys.All_Constraints c,\n" - " sys.all_cons_columns a\n" - " WHERE\n" - " c.constraint_name = a.constraint_name\n" - " AND c.Owner = :f1<char[101]>\n" - " AND c.Table_Name = :f2<char[101]>\n" - " ORDER BY\n" - " c.constraint_name, a.constraint_name, a.position\n" - " ) main,\n" - " sys.all_cons_columns refs\n" - " WHERE\n" - " main.r_constraint_name = refs.constraint_name (+)\n" - " AND main.column_name = refs.column_name (+)", - "List the constraints on a table", - ""); +// static toSQL SQLTableConstraint( +// "toBrowser:TableConstraint", +// // "SELECT sub.constraint_name AS \"Constraint Name\",\n" +// // " srch.search_condition AS \"Search Condition\",\n" +// // " sub.condition AS \"Condition\",\n" +// // " sub.status AS \"Status\",\n" +// // " sub.constraint_type AS \"Type\",\n" +// // " sub.delete_rule AS \"Delete Rule\",\n" +// // " sub.GENERATED AS \"Generated\"\n" +// // " FROM ( SELECT c.Constraint_Name,\n" +// // " DECODE ( constraint_type,\n" +// // " 'R',\n" +// // " 'foreign key (' || a.column_name || ') references ' " +// // "|| a2.owner || '.' || a2.table_name || '(' || a2.column_name || ')',\n" +// // " 'P',\n" +// // " 'primary key (' || a.column_name || ')',\n" +// // " 'U',\n" +// // " 'unique (' || a.column_name || ')',\n" +// // " NULL ) AS condition,\n" +// // " c.Status,\n" +// // " c.Constraint_Type,\n" +// // " c.Delete_Rule,\n" +// // " c.GENERATED\n" +// // " FROM sys.All_Constraints c,\n" +// // " sys.all_cons_columns a,\n" +// // " sys.all_cons_columns a2\n" +// // " WHERE c.constraint_name = a.constraint_name\n" +// // " AND c.Owner = :f1<char[101]>\n" +// // " AND c.Table_Name = :f2<char[101]>\n" +// // " AND c.r_constraint_name = a2.constraint_name ( + ) ) sub,\n" +// // " sys.all_constraints srch\n" +// // " WHERE sub.constraint_name = srch.constraint_name", +// "SELECT main.constraint_name AS \"Constraint Name\",\n" +// " main.column_name AS \"Column Name\",\n" +// " main.search_condition AS \"Search Condition\",\n" +// " main.status AS \"Status\",\n" +// " main.constraint_type AS \"Type\",\n" +// " main.delete_rule AS \"Delete Rule\",\n" +// " main.generated AS \"Generated\",\n" +// " DECODE ( main.constraint_type,\n" +// " 'R',\n" +// " 'FK (' || main.column_name || ') ref. ' || refs.owner || '.'\n" +// " || refs.table_name || '(' || refs.column_name || ')',\n" +// " 'P',\n" +// " 'PK (' || main.column_name || ')',\n" +// " 'U',\n" +// " 'unique (' || main.column_name || ')',\n" +// " NULL ) AS \"Condition\"\n" +// " FROM\n" +// " (\n" +// " SELECT\n" +// " c.constraint_name,\n" +// " a.column_name,\n" +// " c.constraint_type,\n" +// " c.r_constraint_name,\n" +// " c.search_condition,\n" +// " c.status,\n" +// " c.delete_rule,\n" +// " c.generated\n" +// " FROM\n" +// " sys.All_Constraints c,\n" +// " sys.all_cons_columns a\n" +// " WHERE\n" +// " c.constraint_name = a.constraint_name\n" +// " AND c.Owner = :f1<char[101]>\n" +// " AND c.Table_Name = :f2<char[101]>\n" +// " ORDER BY\n" +// " c.constraint_name, a.constraint_name, a.position\n" +// " ) main,\n" +// " sys.all_cons_columns refs\n" +// " WHERE\n" +// " main.r_constraint_name = refs.constraint_name (+)\n" +// " AND main.column_name = refs.column_name (+)", +// "List the constraints on a table", +// ""); +// +// static toSQL SQLTableConstraintPG( +// "toBrowser:TableConstraint", +// "SELECT conname as \"Constraint Name\",\n" +// " pg_catalog.pg_get_constraintdef ( r.OID,\n" +// " TRUE ) AS \"Description\"\n" +// " FROM pg_catalog.pg_constraint r,\n" +// " pg_catalog.pg_class c,\n" +// " pg_catalog.pg_namespace n\n" +// " WHERE n.nspname = :f1\n" +// " AND c.relname = :f2\n" +// " AND c.relnamespace = n.OID\n" +// " AND c.OID = r.conrelid\n" +// " ORDER BY 1", +// "", +// "", +// "PostgreSQL"); -static toSQL SQLTableConstraintPG( - "toBrowser:TableConstraint", - "SELECT conname as \"Constraint Name\",\n" - " pg_catalog.pg_get_constraintdef ( r.OID,\n" - " TRUE ) AS \"Description\"\n" - " FROM pg_catalog.pg_constraint r,\n" - " pg_catalog.pg_class c,\n" - " pg_catalog.pg_namespace n\n" - " WHERE n.nspname = :f1\n" - " AND c.relname = :f2\n" - " AND c.relnamespace = n.OID\n" - " AND c.OID = r.conrelid\n" - " ORDER BY 1", - "", - "", - "PostgreSQL"); +// static toSQL SQLTableReferences( +// "toBrowser:TableReferences", +// "SELECT a.Owner AS \"Owner\",\n" +// " a.Table_Name AS \"Object\",\n" +// " a.Constraint_Name AS \"Constraint\",\n" +// " 'foreign key (' || c.column_name || ') references ' || r.owner || " +// "'.' || r.table_name || '(' || r.column_name || ')' AS \"Condition\",\n" +// " a.Status AS \"Status\",\n" +// " a.Delete_Rule AS \"Delete Rule\"\n" +// " FROM sys.all_constraints a,\n" +// " sys.all_cons_columns r,\n" +// " sys.all_cons_columns c\n" +// " WHERE a.constraint_type = 'R'\n" +// " AND a.r_constraint_name IN ( SELECT b.constraint_name\n" +// " FROM sys.all_constraints b\n" +// " WHERE b.OWNER = :owner<char[101]>\n" +// " AND b.TABLE_NAME = :tab<char[101]> )\n" +// " AND a.r_constraint_name = r.constraint_name\n" +// " AND a.constraint_name = c.constraint_name\n" +// " UNION SELECT owner,\n" +// " name,\n" +// " NULL,\n" +// " TYPE || ' ' || dependency_type,\n" +// " 'DEPENDENCY',\n" +// " NULL\n" +// " FROM sys.all_dependencies\n" +// " WHERE referenced_owner = :owner<char[101]>\n" +// " AND referenced_name = :tab<char[101]>", +// "List the references on a table", +// ""); -static toSQL SQLTableReferences( - "toBrowser:TableReferences", - "SELECT a.Owner AS \"Owner\",\n" - " a.Table_Name AS \"Object\",\n" - " a.Constraint_Name AS \"Constraint\",\n" - " 'foreign key (' || c.column_name || ') references ' || r.owner || " - "'.' || r.table_name || '(' || r.column_name || ')' AS \"Condition\",\n" - " a.Status AS \"Status\",\n" - " a.Delete_Rule AS \"Delete Rule\"\n" - " FROM sys.all_constraints a,\n" - " sys.all_cons_columns r,\n" - " sys.all_cons_columns c\n" - " WHERE a.constraint_type = 'R'\n" - " AND a.r_constraint_name IN ( SELECT b.constraint_name\n" - " FROM sys.all_constraints b\n" - " WHERE b.OWNER = :owner<char[101]>\n" - " AND b.TABLE_NAME = :tab<char[101]> )\n" - " AND a.r_constraint_name = r.constraint_name\n" - " AND a.constraint_name = c.constraint_name\n" - " UNION SELECT owner,\n" - " name,\n" - " NULL,\n" - " TYPE || ' ' || dependency_type,\n" - " 'DEPENDENCY',\n" - " NULL\n" - " FROM sys.all_dependencies\n" - " WHERE referenced_owner = :owner<char[101]>\n" - " AND referenced_name = :tab<char[101]>", - "List the references on a table", - ""); - -static toSQL SQLAnyGrantsSapDB("toBrowser:AnyGrants", - "SELECT privilege,grantee,grantor,is_grantable\n" - " FROM tableprivileges \n" - " WHERE owner = upper(:f1<char[101]>) and tablename = :f2<char[101]>\n" - " ORDER by privilege,grantee ", - "Display the grants on an object", - "", - "SapDB"); -static toSQL SQLAnyGrants("toBrowser:AnyGrants", - "SELECT Privilege,Grantee,Grantor,Grantable FROM SYS.ALL_TAB_PRIVS\n" - " WHERE Table_Schema = :f1<char[101]> AND Table_Name = :f2<char[101]>\n" - " ORDER BY Privilege,Grantee", - ""); -static toSQL SQLTableTriggerSapDB("toBrowser:TableTrigger", +/*static toSQL SQLTableTriggerSapDB("toBrowser:TableTrigger", "SELECT TriggerName,'UPDATE' \"Event\",''\"Column\",'ENABLED' \"Status\",''\"Description\"\n" " FROM triggers \n" " WHERE owner = upper(:f1<char[101]>) and tablename = :f2<char[101]>\n" @@ -945,8 +932,8 @@ " ORDER BY 1\n", "", "", - "PostgreSQL"); -static toSQL SQLTableInfoMysql("toBrowser:TableInformation", + "PostgreSQL");*/ +/*static toSQL SQLTableInfoMysql("toBrowser:TableInformation", "show table status from `:own<noquote>` like :tab", "Display information about a table", "3.0", @@ -971,35 +958,35 @@ " WHERE tabletype = 'TABLE' and owner = upper(:f1<char[101]>) and tablename = :f2<char[101]>", "", "", - "SapDB"); -static toSQL SQLTableStatistic("toBrowser:TableStatstics", + "SapDB");*/ +/*static toSQL SQLTableStatistic("toBrowser:TableStatstics", "SELECT description \"Description\", value(char_value,numeric_value) \"Value\" \n" " FROM tablestatistics \n" " WHERE owner = upper(:f1<char[101]>) and tablename = :f2<char[101]>", "Table Statistics", "", - "SapDB"); -static toSQL SQLTablePartition("toBrowser:TablePartitions", - "select p.partition_name \"Partition\"\n" - " , p.composite \"Composite\"\n" - " , p.num_rows \"Partition rows\"\n" - " , p.high_value \"High value\"\n" - " , p.subpartition_count \"Subpartitions\"\n" - " , p.partition_position \"Position\"\n" - " , s.subpartition_name \"Subpartition\"\n" - " , s.num_rows \"Subpartition rows\"\n" - " , s.subpartition_position \"Subpartition position\"\n" - " from all_tab_partitions p,\n" - " all_tab_subpartitions s\n" - " where p.table_owner = s.table_owner(+)\n" - " and p.table_name = s.table_name(+)\n" - " and p.partition_name = s.partition_name(+)\n" - " and p.table_owner like upper(:table_owner<char[101]>)\n" - " and p.table_name like upper(:table_name<char[101]>)\n" - " order by p.partition_name\n" - " , s.subpartition_name\n", - "Table partitions", - "0801"); + "SapDB");*/ +// static toSQL SQLTablePartition("toBrowser:TablePartitions", +// "select p.partition_name \"Partition\"\n" +// " , p.composite \"Composite\"\n" +// " , p.num_rows \"Partition rows\"\n" +// " , p.high_value \"High value\"\n" +// " , p.subpartition_count \"Subpartitions\"\n" +// " , p.partition_position \"Position\"\n" +// " , s.subpartition_name \"Subpartition\"\n" +// " , s.num_rows \"Subpartition rows\"\n" +// " , s.subpartition_position \"Subpartition position\"\n" +// " from all_tab_partitions p,\n" +// " all_tab_subpartitions s\n" +// " where p.table_owner = s.table_owner(+)\n" +// " and p.table_name = s.table_name(+)\n" +// " and p.partition_name = s.partition_name(+)\n" +// " and p.table_owner like upper(:table_owner<char[101]>)\n" +// " and p.table_name like upper(:table_name<char[101]>)\n" +// " order by p.partition_name\n" +// " , s.subpartition_name\n", +// "Table partitions", +// "0801"); static toSQL SQLListViewPgSQL("toBrowser:ListView", "SELECT c.relname as View_Name\n" @@ -1023,26 +1010,26 @@ "", "", "SapDB"); -static toSQL SQLViewSQLPgSQL("toBrowser:ViewSQL", - "SELECT pg_get_viewdef(c.relname)\n" - " FROM pg_class c LEFT OUTER JOIN pg_namespace n ON c.relnamespace=n.oid\n" - " WHERE (n.nspname = :f1 OR n.oid IS NULL)\n" - " AND c.relkind = 'v' AND c.relname = :f2", - "Display SQL of a specified view", - "7.1", - "PostgreSQL"); -static toSQL SQLViewSQL("toBrowser:ViewSQL", - "SELECT Text SQL\n" - " FROM SYS.ALL_Views\n" - " WHERE Owner = :f1<char[101]> AND View_Name = :f2<char[101]>", - ""); -static toSQL SQLViewSQLSapDb("toBrowser:ViewSQL", - "SELECT definition \"SQL\"\n" - " FROM viewdefs \n" - " WHERE viewname = :f2<char[101]> and owner = upper(:f1<char[101]>)\n", - "", - "", - "SapDB"); +// static toSQL SQLViewSQLPgSQL("toBrowser:ViewSQL", +// "SELECT pg_get_viewdef(c.relname)\n" +// " FROM pg_class c LEFT OUTER JOIN pg_namespace n ON c.relnamespace=n.oid\n" +// " WHERE (n.nspname = :f1 OR n.oid IS NULL)\n" +// " AND c.relkind = 'v' AND c.relname = :f2", +// "Display SQL of a specified view", +// "7.1", +// "PostgreSQL"); +// static toSQL SQLViewSQL("toBrowser:ViewSQL", +// "SELECT Text SQL\n" +// " FROM SYS.ALL_Views\n" +// " WHERE Owner = :f1<char[101]> AND View_Name = :f2<char[101]>", +// ""); +// static toSQL SQLViewSQLSapDb("toBrowser:ViewSQL", +// "SELECT definition \"SQL\"\n" +// " FROM viewdefs \n" +// " WHERE viewname = :f2<char[101]> and owner = upper(:f1<char[101]>)\n", +// "", +// "", +// "SapDB"); static toSQL SQLListIndexMySQL("toBrowser:ListIndex", "SHOW INDEX FROM `:f1<database>`", @@ -1073,75 +1060,75 @@ "", "SapDB"); -static toSQL SQLIndexColsMySQL("toBrowser:IndexCols", - "SHOW INDEX FROM `:f1<noquote>`.`:f2<noquote>`", - "Display columns on which an index is built", - "3.23", - "MySQL"); -static toSQL SQLIndexCols("toBrowser:IndexCols", - "SELECT a.Table_Name,a.Column_Name,a.Column_Length,a.Descend,b.Column_Expression \" \"\n" - " FROM sys.All_Ind_Columns a,sys.All_Ind_Expressions b\n" - " WHERE a.Index_Owner = :f1<char[101]> AND a.Index_Name = :f2<char[101]>\n" - " AND a.Index_Owner = b.Index_Owner(+) AND a.Index_Name = b.Index_Name(+)\n" - " AND a.column_Position = b.Column_Position(+)\n" - " ORDER BY a.Column_Position", - "", - "0801"); -static toSQL SQLIndexCols8("toBrowser:IndexCols", - "SELECT Table_Name,Column_Name,Column_Length,Descend\n" - " FROM SYS.ALL_IND_COLUMNS\n" - " WHERE Index_Owner = :f1<char[101]> AND Index_Name = :f2<char[101]>\n" - " ORDER BY Column_Position", - "", - "0800"); -static toSQL SQLIndexCols7("toBrowser:IndexCols", - "SELECT Table_Name,Column_Name,Column_Length\n" - " FROM SYS.ALL_IND_COLUMNS\n" - " WHERE Index_Owner = :f1<char[101]> AND Index_Name = :f2<char[101]>\n" - " ORDER BY Column_Position", - "", - "0703"); -static toSQL SQLIndexColsPgSQL("toBrowser:IndexCols", - "SELECT a.attname,\n" - " format_type(a.atttypid, a.atttypmod) as FORMAT,\n" - " a.attnotnull,\n" - " a.atthasdef\n" - " FROM pg_class c LEFT OUTER JOIN pg_namespace n ON c.relnamespace=n.oid,\n" - " pg_attribute a\n" - " WHERE (n.nspname = :f1 OR n.oid IS NULL)\n" - " AND a.attrelid = c.oid AND c.relname = :f2\n" - " AND a.attnum > 0\n" - " ORDER BY a.attnum\n", - "", - "7.1", - "PostgreSQL"); -static toSQL SQLIndexColsSapDb("toBrowser:IndexCols", - "SELECT tablename,columnname,len \"Length\",DataType,Sort \n" - " FROM indexcolumns \n" - " WHERE owner = upper(:f1<char[101]>) and indexname = upper(:f2<char[101]>)\n" - " ORDER BY indexname,columnno", - "", - "", - "SapDB"); +// static toSQL SQLIndexColsMySQL("toBrowser:IndexCols", +// "SHOW INDEX FROM `:f1<noquote>`.`:f2<noquote>`", +// "Display columns on which an index is built", +// "3.23", +// "MySQL"); +// static toSQL SQLIndexCols("toBrowser:IndexCols", +// "SELECT a.Table_Name,a.Column_Name,a.Column_Length,a.Descend,b.Column_Expression \" \"\n" +// " FROM sys.All_Ind_Columns a,sys.All_Ind_Expressions b\n" +// " WHERE a.Index_Owner = :f1<char[101]> AND a.Index_Name = :f2<char[101]>\n" +// " AND a.Index_Owner = b.Index_Owner(+) AND a.Index_Name = b.Index_Name(+)\n" +// " AND a.column_Position = b.Column_Position(+)\n" +// " ORDER BY a.Column_Position", +// "", +// "0801"); +// static toSQL SQLIndexCols8("toBrowser:IndexCols", +// "SELECT Table_Name,Column_Name,Column_Length,Descend\n" +// " FROM SYS.ALL_IND_COLUMNS\n" +// " WHERE Index_Owner = :f1<char[101]> AND Index_Name = :f2<char[101]>\n" +// " ORDER BY Column_Position", +// "", +// "0800"); +// static toSQL SQLIndexCols7("toBrowser:IndexCols", +// "SELECT Table_Name,Column_Name,Column_Length\n" +// " FROM SYS.ALL_IND_COLUMNS\n" +// " WHERE Index_Owner = :f1<char[101]> AND Index_Name = :f2<char[101]>\n" +// " ORDER BY Column_Position", +// "", +// "0703"); +// static toSQL SQLIndexColsPgSQL("toBrowser:IndexCols", +// "SELECT a.attname,\n" +// " format_type(a.atttypid, a.atttypmod) as FORMAT,\n" +// " a.attnotnull,\n" +// " a.atthasdef\n" +// " FROM pg_class c LEFT OUTER JOIN pg_namespace n ON c.relnamespace=n.oid,\n" +// " pg_attribute a\n" +// " WHERE (n.nspname = :f1 OR n.oid IS NULL)\n" +// " AND a.attrelid = c.oid AND c.relname = :f2\n" +// " AND a.attnum > 0\n" +// " ORDER BY a.attnum\n", +// "", +// "7.1", +// "PostgreSQL"); +// static toSQL SQLIndexColsSapDb("toBrowser:IndexCols", +// "SELECT tablename,columnname,len \"Length\",DataType,Sort \n" +// " FROM indexcolumns \n" +// " WHERE owner = upper(:f1<char[101]>) and indexname = upper(:f2<char[101]>)\n" +// " ORDER BY indexname,columnno", +// "", +// "", +// "SapDB"); -static toSQL SQLIndexInfoSapDb("toBrowser:IndexInformation", - "SELECT INDEXNAME,TABLENAME, TYPE, CREATEDATE,CREATETIME,INDEX_USED, DISABLED \n" - " FROM indexes\n" - " WHERE owner = upper(:f1<char[101]>) and indexname = :f2<char[101]>\n", - "Display information about an index", - "", - "SapDB"); -static toSQL SQLIndexInfo("toBrowser:IndexInformation", - "SELECT * FROM SYS.ALL_INDEXES\n" - " WHERE Owner = :f1<char[101]> AND Index_Name = :f2<char[101]>", - ""); -static toSQL SQLIndexStatistic("toBrowser:IndexStatstics", - "SELECT description \"Description\", value(char_value,numeric_value) \"Value\" \n" - " FROM indexstatistics \n" - " WHERE owner = upper(:f1<char[101]>) and indexname = :f2<char[101]>", - "Index Statistics", - "", - "SapDB"); +// static toSQL SQLIndexInfoSapDb("toBrowser:IndexInformation", +// "SELECT INDEXNAME,TABLENAME, TYPE, CREATEDATE,CREATETIME,INDEX_USED, DISABLED \n" +// " FROM indexes\n" +// " WHERE owner = upper(:f1<char[101]>) and indexname = :f2<char[101]>\n", +// "Display information about an index", +// "", +// "SapDB"); +// static toSQL SQLIndexInfo("toBrowser:IndexInformation", +// "SELECT * FROM SYS.ALL_INDEXES\n" +// " WHERE Owner = :f1<char[101]> AND Index_Name = :f2<char[101]>", +// ""); +// static toSQL SQLIndexStatistic("toBrowser:IndexStatstics", +// "SELECT description \"Description\", value(char_value,numeric_value) \"Value\" \n" +// " FROM indexstatistics \n" +// " WHERE owner = upper(:f1<char[101]>) and indexname = :f2<char[101]>", +// "Index Statistics", +// "", +// "SapDB"); static toSQL SQLListSequencePgSQL("toBrowser:ListSequence", "SELECT c.relname AS \"Sequence Name\"\n" @@ -1158,16 +1145,16 @@ " AND UPPER(SEQUENCE_NAME) LIKE :f2<char[101]>\n" " ORDER BY Sequence_Name", ""); -static toSQL SQLSequenceInfoPgSQL("toBrowser:SequenceInformation", - "SELECT *, substr(:f1,1) as \"Owner\" FROM :f2<noquote>", - "Display information about a sequence", - "7.1", - "PostgreSQL"); -static toSQL SQLSequenceInfo("toBrowser:SequenceInformation", - "SELECT * FROM SYS.ALL_SEQUENCES\n" - " WHERE Sequence_Owner = :f1<char[101]>\n" - " AND Sequence_Name = :f2<char[101]>", - ""); +// static toSQL SQLSequenceInfoPgSQL("toBrowser:SequenceInformation", +// "SELECT *, substr(:f1,1) as \"Owner\" FROM :f2<noquote>", +// "Display information about a sequence", +// "7.1", +// "PostgreSQL"); +// static toSQL SQLSequenceInfo("toBrowser:SequenceInformation", +// "SELECT * FROM SYS.ALL_SEQUENCES\n" +// " WHERE Sequence_Owner = :f1<char[101]>\n" +// " AND Sequence_Name = :f2<char[101]>", +// ""); static toSQL SQLListSynonym("toBrowser:ListSynonym", "SELECT DECODE(Owner,'PUBLIC','',Owner||'.')||Synonym_Name \"Synonym Name\"\n" @@ -1177,11 +1164,11 @@ " AND UPPER(Synonym_Name) LIKE :f2<char[101]>\n" " ORDER BY Synonym_Name", "List the available synonyms in a schema"); -static toSQL SQLSynonymInfo("toBrowser:SynonymInformation", - "SELECT * FROM Sys.All_Synonyms a\n" - " WHERE Owner = :f1<char[101]>\n" - " AND Synonym_Name = :f2<char[101]>", - "Display information about a synonym"); +// static toSQL SQLSynonymInfo("toBrowser:SynonymInformation", +// "SELECT * FROM Sys.All_Synonyms a\n" +// " WHERE Owner = :f1<char[101]>\n" +// " AND Synonym_Name = :f2<char[101]>", +// "Display information about a synonym"); static toSQL SQLListSQLPgSQL("toBrowser:ListCode", "SELECT p.proname AS Object_Name,\n" @@ -1227,79 +1214,79 @@ "Declaration of object displayed in template window"); // PostgreSQL does not distinguish between Head and Body for Stored SQL // package code will be returnd for both Head and Body -static toSQL SQLSQLHeadPgSQL("toBrowser:CodeHead", - "SELECT p.prosrc\n" - "FROM pg_proc p LEFT OUTER JOIN pg_namespace n ON p.pronamespace=n.oid\n" - "WHERE (n.nspname = :f1 OR n.oid IS NULL)\n" - " AND p.proname = :f2\n", - "Declaration of object", - "7.1", - "PostgreSQL"); -static toSQL SQLSQLHead("toBrowser:CodeHead", - "SELECT Text FROM SYS.ALL_SOURCE\n" - " WHERE Owner = :f1<char[101]> AND Name = :f2<char[101]>\n" - " AND Type IN ('PACKAGE','TYPE')", - ""); +// static toSQL SQLSQLHeadPgSQL("toBrowser:CodeHead", +// "SELECT p.prosrc\n" +// "FROM pg_proc p LEFT OUTER JOIN pg_namespace n ON p.pronamespace=n.oid\n" +// "WHERE (n.nspname = :f1 OR n.oid IS NULL)\n" +// " AND p.proname = :f2\n", +// "Declaration of object", +// "7.1", +// "PostgreSQL"); +// static toSQL SQLSQLHead("toBrowser:CodeHead", +// "SELECT Text FROM SYS.ALL_SOURCE\n" +// " WHERE Owner = :f1<char[101]> AND Name = :f2<char[101]>\n" +// " AND Type IN ('PACKAGE','TYPE')", +// ""); +// +// static toSQL SQLSQLBodyPgSQL("toBrowser:CodeBody", +// "SELECT 'CREATE OR REPLACE FUNCTION ' || p.proname || ' ( ' ||\n" +// "( SELECT array_to_string ( ARRAY ( SELECT t.typname\n" +// " FROM pg_type t\n" +// " WHERE t.OID = ANY ( p.proargtypes ) ),\n" +// " ', ' ) ) || ' ) RETURNS ' || ( SELECT t.typname\n" +// " from pg_type t\n" +// " where p.prorettype = t.oid) ||\n" +// " ' AS ' || quote_literal ( p.prosrc ) || ' language plpgsql;'\n" +// " FROM pg_proc p\n" +// " LEFT OUTER JOIN pg_namespace n\n" +// " ON p.pronamespace = n.OID\n" +// " WHERE ( n.nspname = :f1 OR n.OID IS NULL )\n" +// " AND p.proname = :f2", +// "Implementation of object", +// "7.1", +// "PostgreSQL"); +// static toSQL SQLSQLBody("toBrowser:CodeBody", +// "SELECT Text FROM SYS.ALL_SOURCE\n" +// " WHERE Owner = :f1<char[101]> AND Name = :f2<char[101]>\n" +// " AND Type IN ('PROCEDURE','FUNCTION','PACKAGE BODY','TYPE BODY')", +// ""); -static toSQL SQLSQLBodyPgSQL("toBrowser:CodeBody", - "SELECT 'CREATE OR REPLACE FUNCTION ' || p.proname || ' ( ' ||\n" - "( SELECT array_to_string ( ARRAY ( SELECT t.typname\n" - " FROM pg_type t\n" - " WHERE t.OID = ANY ( p.proargtypes ) ),\n" - " ', ' ) ) || ' ) RETURNS ' || ( SELECT t.typname\n" - " from pg_type t\n" - " where p.prorettype = t.oid) ||\n" - " ' AS ' || quote_literal ( p.prosrc ) || ' language plpgsql;'\n" - " FROM pg_proc p\n" - " LEFT OUTER JOIN pg_namespace n\n" - " ON p.pronamespace = n.OID\n" - " WHERE ( n.nspname = :f1 OR n.OID IS NULL )\n" - " AND p.proname = :f2", - "Implementation of object", - "7.1", - "PostgreSQL"); -static toSQL SQLSQLBody("toBrowser:CodeBody", - "SELECT Text FROM SYS.ALL_SOURCE\n" - " WHERE Owner = :f1<char[101]> AND Name = :f2<char[101]>\n" - " AND Type IN ('PROCEDURE','FUNCTION','PACKAGE BODY','TYPE BODY')", - ""); - static toSQL SQLListTrigger("toBrowser:ListTrigger", "SELECT Trigger_Name FROM SYS.ALL_TRIGGERS\n" " WHERE OWNER = :f1<char[101]>\n" " AND UPPER(TRIGGER_NAME) LIKE :f2<char[101]>\n" " ORDER BY Trigger_Name", "List the available triggers in a schema"); -static toSQL SQLTriggerInfo("toBrowser:TriggerInfo", - "SELECT Owner,Trigger_Name,\n" - " Trigger_Type,Triggering_Event,\n" - " Table_Owner,Base_Object_Type,Table_Name,Column_Name,\n" - " Referencing_Names,When_Clause,Status,\n" - " Description,Action_Type\n" - " FROM SYS.ALL_TRIGGERS\n" - "WHERE Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", - "Display information about a trigger", - "0801"); -static toSQL SQLTriggerInfo8("toBrowser:TriggerInfo", - "SELECT Owner,Trigger_Name,\n" - " Trigger_Type,Triggering_Event,\n" - " Table_Owner,Table_Name,\n" - " Referencing_Names,When_Clause,Status,\n" - " Description\n" - " FROM SYS.ALL_TRIGGERS\n" - "WHERE Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", - "", - "0800"); -static toSQL SQLTriggerBody("toBrowser:TriggerBody", - "SELECT Trigger_Body FROM SYS.ALL_TRIGGERS\n" - " WHERE Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", - "Implementation of trigger"); -static toSQL SQLTriggerCols("toBrowser:TriggerCols", - "SELECT Column_Name,Column_List \"In Update\",Column_Usage Usage\n" - " FROM SYS.ALL_TRIGGER_COLS\n" - " WHERE Trigger_Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", - "Columns used by trigger"); +// static toSQL SQLTriggerInfo("toBrowser:TriggerInfo", +// "SELECT Owner,Trigger_Name,\n" +// " Trigger_Type,Triggering_Event,\n" +// " Table_Owner,Base_Object_Type,Table_Name,Column_Name,\n" +// " Referencing_Names,When_Clause,Status,\n" +// " Description,Action_Type\n" +// " FROM SYS.ALL_TRIGGERS\n" +// "WHERE Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", +// "Display information about a trigger", +// "0801"); +// static toSQL SQLTriggerInfo8("toBrowser:TriggerInfo", +// "SELECT Owner,Trigger_Name,\n" +// " Trigger_Type,Triggering_Event,\n" +// " Table_Owner,Table_Name,\n" +// " Referencing_Names,When_Clause,Status,\n" +// " Description\n" +// " FROM SYS.ALL_TRIGGERS\n" +// "WHERE Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", +// "", +// "0800"); +// static toSQL SQLTriggerBody("toBrowser:TriggerBody", +// "SELECT Trigger_Body FROM SYS.ALL_TRIGGERS\n" +// " WHERE Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", +// "Implementation of trigger"); +// static toSQL SQLTriggerCols("toBrowser:TriggerCols", +// "SELECT Column_Name,Column_List \"In Update\",Column_Usage Usage\n" +// " FROM SYS.ALL_TRIGGER_COLS\n" +// " WHERE Trigger_Owner = :f1<char[101]> AND Trigger_Name = :f2<char[101]>", +// "Columns used by trigger"); #if DBLINK static toSQL SQLListDBLink("toBrowser:ListDBLink", "SELECT Db_Link, Owner FROM SYS.ALL_DB_LINKS\n" @@ -1310,16 +1297,16 @@ "SELECT Owner, Db_Link, Username, Host, Created\n" " FROM SYS.DBA_DB_LINK\n", "List database links as DBA"); -static toSQL SQLDBLinkInfo("toBrowser:DBLinkInformation", - "SELECT * FROM Sys.all_db_links a\n" - " WHERE Owner = :f1<char[101]>\n" - " AND DB_LINK = :f2<char[101]>", - "Display information about database link"); -static toSQL SQLDBLinkSynonyms("toBrowser:DBLinkSynonyms", - "SELECT * FROM Sys.all_synonyms a\n" - " WHERE Owner = :f1<char[101]>\n" - " AND DB_LINK = :f2<char[101]>", - "Display foreign synonyms"); +// static toSQL SQLDBLinkInfo("toBrowser:DBLinkInformation", +// "SELECT * FROM Sys.all_db_links a\n" +// " WHERE Owner = :f1<char[101]>\n" +// " AND DB_LINK = :f2<char[101]>", +// "Display information about database link"); +// static toSQL SQLDBLinkSynonyms("toBrowser:DBLinkSynonyms", +// "SELECT * FROM Sys.all_synonyms a\n" +// " WHERE Owner = :f1<char[101]>\n" +// " AND DB_LINK = :f2<char[101]>", +// "Display foreign synonyms"); #endif static toSQL SQLMySQLAccess("toBrowser:MySQLAcess", @@ -1367,19 +1354,27 @@ else Filter = new toBrowserFilter(); FilterButton->setChecked(filter); - for (std::map<QString, toResultTableView *>::iterator i = Map.begin();i != Map.end();i++) - (*i).second->setFilter(Filter->clone()); +// for (std::map<QString, toResultTableView *>::iterator i = Map.begin();i != Map.end();i++) +// (*i).second->setFilter(Filter->clone()); refresh(); } +#include "tobrowsertablewidget.h" +#include "tobrowserviewwidget.h" +#include "tobrowserindexwidget.h" +#include "tobrowsersequencewidget.h" +#include "tobrowsersynonymwidget.h" +#include "tobrowsercodewidget.h" +#include "tobrowsertriggerwidget.h" +#include "tobrowserdblinkswidget.h" + + toBrowser::toBrowser(QWidget *parent, toConnection &connection) : toToolWidget(BrowserTool, "browser.html", parent, connection, "toBrowser") { - SecondTab = NULL; - SecondText = QString::null; - Filter = new toBrowserFilter(false); + // man toolbar of the tool QToolBar *toolbar = toAllocBar(this, tr("DB Browser")); layout()->addWidget(toolbar); @@ -1421,57 +1416,59 @@ toolbar->addWidget(new QLabel(toolbar)); new toChangeConnection(toolbar, TO_TOOLBAR_WIDGET_NAME); - TopTab = new toTabWidget(this); - layout()->addWidget(TopTab); - QSplitter *splitter = new QSplitter(Qt::Horizontal, TopTab); - splitter->setObjectName(TAB_TABLES); - TopTab->addTab(splitter, tr("T&ables")); - CurrentTop = splitter; + // Main tab widget + m_mainTab = new QTabWidget(this); + layout()->addWidget(m_mainTab); - QWidget *box = new QWidget(splitter); - QVBoxLayout *vbox = new QVBoxLayout; - vbox->setSpacing(0); - vbox->setContentsMargins(0, 0, 0, 0); - box->setLayout(vbox); + // Tables + QSplitter *tableSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + tableSplitter->setObjectName(TAB_TABLES); + m_mainTab->addTab(tableSplitter, tr("T&ables")); - toolbar = toAllocBar(box, tr("Database browser")); - vbox->addWidget(toolbar); + QWidget *tableWidget = new QWidget(tableSplitter); + QVBoxLayout *tableLayout = new QVBoxLayout; + tableLayout->setSpacing(0); + tableLayout->setContentsMargins(0, 0, 0, 0); + tableWidget->setLayout(tableLayout); + QToolBar *tableToolbar = toAllocBar(tableWidget, tr("Database browser")); + tableLayout->addWidget(tableToolbar); + addTableAct = new QAction(QPixmap(const_cast<const char**>(addtable_xpm)), tr("Create new table"), this); connect(addTableAct, SIGNAL(triggered()), this, SLOT(addTable(void))); - toolbar->addAction(addTableAct); + tableToolbar->addAction(addTableAct); - toolbar->addSeparator(); + tableToolbar->addSeparator(); modTableAct = new QAction(QPixmap(const_cast<const char**>(modtable_xpm)), tr("Modify table columns"), this); connect(modTableAct, SIGNAL(triggered()), this, SLOT(modifyTable(void))); - toolbar->addAction(modTableAct); + tableToolbar->addAction(modTableAct); modConstraintAct = new QAction(QPixmap(const_cast<const char**>(modconstraint_xpm)), tr("Modify constraints"), this); connect(modConstraintAct, SIGNAL(triggered()), this, SLOT(modifyConstraint(void))); - toolbar->addAction(modConstraintAct); + tableToolbar->addAction(modConstraintAct); modIndexAct = new QAction(QPixmap(const_cast<const char**>(modindex_xpm)), tr("Modify indexes"), this); connect(modIndexAct, SIGNAL(triggered()), this, SLOT(modifyIndex(void))); - toolbar->addAction(modIndexAct); + tableToolbar->addAction(modIndexAct); - toolbar->addSeparator(); + tableToolbar->addSeparator(); dropTableAct = new QAction(QPixmap(const_cast<const char**>(trash_xpm)), tr("Drop table"), this); connect(dropTableAct, SIGNAL(triggered()), this, SLOT(dropTable(void))); - toolbar->addAction(dropTableAct); + tableToolbar->addAction(dropTableAct); - toolbar->addSeparator(); + tableToolbar->addSeparator(); enableConstraintAct = new QAction(QPixmap(const_cast<const char**>(online_xpm)), tr("Enable constraint or trigger"), @@ -1480,7 +1477,7 @@ SIGNAL(triggered()), this, SLOT(enableConstraints(void))); - toolbar->addAction(enableConstraintAct); + tableToolbar->addAction(enableConstraintAct); disableConstraintAct = new QAction(QPixmap(const_cast<const char**>(offline_xpm)), tr("Disable constraint or trigger"), @@ -1489,19 +1486,19 @@ SIGNAL(triggered()), this, SLOT(disableConstraints(void))); - toolbar->addAction(disableConstraintAct); + tableToolbar->addAction(disableConstraintAct); - toResultTableView *tableView = new toResultTableView(true, false, box); - vbox->addWidget(tableView); + tableView = new toResultTableView(true, false, tableWidget); + tableLayout->addWidget(tableView); tableView->setReadAll(true); tableView->setSQL(SQLListTables); setFocusProxy(tableView); - box->resize(FIRST_WIDTH, tableView->height()); - splitter->setStretchFactor(splitter->indexOf(box), 0); - connect(tableView, SIGNAL(done()), this, SLOT(firstDone())); - FirstTab = tableView; - Map[TAB_TABLES] = tableView; - tableView->setTabWidget(TopTab); + tableWidget->resize(FIRST_WIDTH, tableView->height()); + tableSplitter->setStretchFactor(tableSplitter->indexOf(tableWidget), 0); + + tableBrowserWidget = new toBrowserTableWidget(tableSplitter); + tableSplitter->setStretchFactor(tableSplitter->indexOf(tableBrowserWidget), 1); + connect(tableView, SIGNAL(selectionChanged()), this, SLOT(changeItem())); connect(tableView, @@ -1509,439 +1506,207 @@ this, SLOT(displayTableMenu(QMenu *))); + m_objectsMap[m_mainTab->count()-1] = tableView; + m_browsersMap[m_mainTab->count()-1] = tableBrowserWidget; - toTabWidget *curr = new toTabWidget(splitter); - splitter->setStretchFactor(splitter->indexOf(curr), 1); - - toResultCols *resultCols = new toResultCols(curr, TAB_TABLE_COLUMNS); - curr->addTab(resultCols, tr("&Columns")); - SecondMap[TAB_TABLES] = resultCols; - SecondMap[TAB_TABLE_COLUMNS] = resultCols; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_INDEXES); - tableView->setSQL(SQLTableIndex); - tableView->setReadAll(true); - curr->addTab(tableView, tr("&Indexes")); - SecondMap[TAB_TABLE_INDEXES] = tableView; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_CONS); - tableView->setSQL(SQLTableConstraint); - curr->addTab(tableView, tr("C&onstraints")); - SecondMap[TAB_TABLE_CONS] = tableView; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_DEPEND); - tableView->setSQL(SQLTableReferences); - curr->addTab(tableView, tr("&References")); - SecondMap[TAB_TABLE_DEPEND] = tableView; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_GRANTS); - tableView->setSQL(SQLAnyGrants); - tableView->setReadAll(true); - curr->addTab(tableView, tr("&Grants")); - SecondMap[TAB_TABLE_GRANTS] = tableView; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_TRIGGERS); - tableView->setSQL(SQLTableTrigger); - tableView->setReadAll(true); - curr->addTab(tableView, tr("Triggers")); - SecondMap[TAB_TABLE_TRIGGERS] = tableView; - - TableContent = new toResultData(curr, TAB_TABLE_DATA); - curr->addTab(TableContent, tr("&Data")); - SecondMap[TAB_TABLE_DATA] = TableContent; - - toResultItem *resultInfo = new toResultItem(2, true, curr, TAB_TABLE_INFO); - resultInfo->setSQL(SQLTableInfo); - curr->addTab(resultInfo, tr("Information")); - SecondMap[TAB_TABLE_INFO] = resultInfo; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_STATISTIC); - tableView->setSQL(SQLTableStatistic); - tableView->setReadAll(true); - curr->addTab(tableView, tr("Statistic")); - SecondMap[TAB_TABLE_STATISTIC] = tableView; - - tableView = new toResultTableView(true, false, curr, TAB_TABLE_PARTITION); - tableView->setSQL(SQLTablePartition); - tableView->setReadAll(true); - curr->addTab(tableView, tr("Partitions")); - SecondMap[TAB_TABLE_PARTITION] = tableView; - - toResultExtent *resultExtent = new toResultExtent(curr, TAB_TABLE_EXTENT); - curr->addTab(resultExtent, tr("Extents")); - SecondMap[TAB_TABLE_EXTENT] = resultExtent; - - toResultExtract *resultExtract = new toResultExtract(true, this, TAB_TABLE_EXTRACT); - curr->addTab(resultExtract, tr("Script")); - SecondMap[TAB_TABLE_EXTRACT] = resultExtract; - - // make sure this gets setup as SecondTab - //curr->setCurrentWidget(resultCols); - changeSecondTab(resultCols); - connect(curr, SIGNAL(currentTabChanged(QWidget *)), this, SLOT(changeSecondTab(QWidget *))); - - splitter = new QSplitter(Qt::Horizontal, TopTab); - splitter->setObjectName(TAB_VIEWS); - TopTab->addTab(splitter, tr("&Views")); - tableView = new toResultTableView(true, false, splitter); - tableView->setReadAll(true); - connect(tableView, SIGNAL(done()), this, SLOT(firstDone())); - Map[TAB_VIEWS] = tableView; - tableView->setTabWidget(TopTab); - tableView->setSQL(SQLListView); - tableView->resize(FIRST_WIDTH, tableView->height()); - connect(tableView, SIGNAL(selectionChanged()), + // Views + QSplitter * viewSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + viewSplitter->setObjectName(TAB_VIEWS); + m_mainTab->addTab(viewSplitter, tr("&Views")); + viewView = new toResultTableView(true, false, viewSplitter); + viewView->setReadAll(true); + viewView->setSQL(SQLListView); + viewView->resize(FIRST_WIDTH, viewView->height()); + connect(viewView, SIGNAL(selectionChanged()), this, SLOT(changeItem())); - splitter->setStretchFactor(splitter->indexOf(tableView), 0); + viewSplitter->setStretchFactor(viewSplitter->indexOf(viewView), 0); - curr = new toTabWidget(splitter); - splitter->setStretchFactor(splitter->indexOf(curr), 1); - resultCols = new toResultCols(curr, TAB_VIEW_COLUMNS); - curr->addTab(resultCols, tr("&Columns")); - SecondMap[TAB_VIEWS] = resultCols; - SecondMap[TAB_VIEW_COLUMNS] = resultCols; + viewBrowserWidget = new toBrowserViewWidget(viewSplitter); + viewSplitter->setStretchFactor(viewSplitter->indexOf(viewBrowserWidget), 1); - toResultField *resultField = new toResultField(curr, TAB_VIEW_SQL); - resultField->setSQL(SQLViewSQL); - curr->addTab(resultField, tr("SQL")); - SecondMap[TAB_VIEW_SQL] = resultField; + m_objectsMap[m_mainTab->count()-1] = viewView; + m_browsersMap[m_mainTab->count()-1] = viewBrowserWidget; - ViewContent = new toResultData(curr, TAB_VIEW_DATA); - curr->addTab(ViewContent, tr("&Data")); - SecondMap[TAB_VIEW_DATA] = ViewContent; - tableView = new toResultTableView(true, false, curr, TAB_VIEW_GRANTS); - tableView->setSQL(SQLAnyGrants); - tableView->setReadAll(true); - curr->addTab(tableView, tr("&Grants")); - SecondMap[TAB_VIEW_GRANTS] = tableView; + // Indexes + QSplitter * indexSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + indexSplitter->setObjectName(TAB_INDEX); + m_mainTab->addTab(indexSplitter, tr("Inde&xes")); - toResultDepend *resultDepend = new toResultDepend(curr, TAB_VIEW_DEPEND); - curr->addTab(resultDepend, tr("De&pendencies")); - SecondMap[TAB_VIEW_DEPEND] = resultDepend; + QWidget * indexWidget = new QWidget(indexSplitter); + QVBoxLayout * indexLayout = new QVBoxLayout; + indexLayout->setSpacing(0); + indexLayout->setContentsMargins(0, 0, 0, 0); + indexWidget->setLayout(indexLayout); - resultExtract = new toResultExtract(true, this, TAB_VIEW_EXTRACT); - curr->addTab(resultExtract, tr("Script")); - SecondMap[TAB_VIEW_EXTRACT] = resultExtract; - connect(curr, SIGNAL(currentTabChanged(QWidget *)), this, SLOT(changeSecondTab(QWidget *))); + QToolBar * indexToolbar = toAllocBar(indexWidget, tr("Database browser")); + indexLayout->addWidget(ind... [truncated message content] |
From: <su...@us...> - 2008-12-09 15:12:53
|
Revision: 3111 http://tora.svn.sourceforge.net/tora/?rev=3111&view=rev Author: subik Date: 2008-12-09 15:12:49 +0000 (Tue, 09 Dec 2008) Log Message: ----------- schema browser progress Modified Paths: -------------- trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowser.h trunk/tora/src/tobrowserbasewidget.cpp trunk/tora/src/tobrowserbasewidget.h Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-08 14:33:37 UTC (rev 3110) +++ trunk/tora/src/tobrowser.cpp 2008-12-09 15:12:49 UTC (rev 3111) @@ -117,7 +117,17 @@ #include "icons/new.xpm" #endif +#include "tobrowsertablewidget.h" +#include "tobrowserviewwidget.h" +#include "tobrowserindexwidget.h" +#include "tobrowsersequencewidget.h" +#include "tobrowsersynonymwidget.h" +#include "tobrowsercodewidget.h" +#include "tobrowsertriggerwidget.h" +#include "tobrowserdblinkswidget.h" + + const char **toBrowserTool::pictureXPM(void) { return const_cast<const char**>(tobrowser_xpm); @@ -561,39 +571,39 @@ } }; -toBrowseButton::toBrowseButton(const QIcon &iconSet, - const QString &textLabel, - const QString & grouptext, - QObject * receiver, - const char * slot, - QToolBar * parent, - const char * name) - : QToolButton(parent) -{ +// toBrowseButton::toBrowseButton(const QIcon &iconSet, +// const QString &textLabel, +// const QString & grouptext, +// QObject * receiver, +// const char * slot, +// QToolBar * parent, +// const char * name) +// : QToolButton(parent) +// { +// +// setIcon(iconSet); +// setText(textLabel); +// connect(this, SIGNAL(triggered(QAction *)), receiver, slot); +// setObjectName(name); +// setToolTip(grouptext); +// +// try +// { +// connect(toCurrentTool(this), SIGNAL(connectionChange()), this, SLOT(connectionChanged())); +// } +// TOCATCH +// connectionChanged(); +// } +// +// void toBrowseButton::connectionChanged() +// { +// try +// { +// setEnabled(toExtract::canHandle(toCurrentConnection(this))); +// } +// TOCATCH +// } - setIcon(iconSet); - setText(textLabel); - connect(this, SIGNAL(triggered(QAction *)), receiver, slot); - setObjectName(name); - setToolTip(grouptext); - - try - { - connect(toCurrentTool(this), SIGNAL(connectionChange()), this, SLOT(connectionChanged())); - } - TOCATCH - connectionChanged(); -} - -void toBrowseButton::connectionChanged() -{ - try - { - setEnabled(toExtract::canHandle(toCurrentConnection(this))); - } - TOCATCH -} - #define FIRST_WIDTH 180 #define TAB_TABLES "Tables" @@ -1327,48 +1337,14 @@ "", "Any"); -QString toBrowser::schema(void) -{ - try - { - QString ret = Schema->selected(); - if (ret == tr("No schemas")) - return connection().database(); - return ret; - } - catch (...) - { - return QString::null; - } -} +static toSQL SQLDropUser("toBrowser:DropUser", + "DELETE FROM mysql.user WHERE concat(user,'@',host) = :f1<char[255]>", + "Drop MYSQL user", + "3.23", + "MySQL"); -void toBrowser::setNewFilter(toBrowserFilter *filter) -{ - if (Filter) - { - delete Filter; - Filter = NULL; - } - if (filter) - Filter = filter; - else - Filter = new toBrowserFilter(); - FilterButton->setChecked(filter); -// for (std::map<QString, toResultTableView *>::iterator i = Map.begin();i != Map.end();i++) -// (*i).second->setFilter(Filter->clone()); - refresh(); -} -#include "tobrowsertablewidget.h" -#include "tobrowserviewwidget.h" -#include "tobrowserindexwidget.h" -#include "tobrowsersequencewidget.h" -#include "tobrowsersynonymwidget.h" -#include "tobrowsercodewidget.h" -#include "tobrowsertriggerwidget.h" -#include "tobrowserdblinkswidget.h" - toBrowser::toBrowser(QWidget *parent, toConnection &connection) : toToolWidget(BrowserTool, "browser.html", parent, connection, "toBrowser") { @@ -1542,31 +1518,31 @@ QToolBar * indexToolbar = toAllocBar(indexWidget, tr("Database browser")); indexLayout->addWidget(indexToolbar); - indexToolbar->addWidget( - new toBrowseButton(QPixmap(const_cast<const char**>(addindex_xpm)), - tr("Add indexes"), - tr("Add indexes"), - this, SLOT(addIndex()), - toolbar)); + addIndexesAct = new QAction(QPixmap(const_cast<const char**>(addindex_xpm)), + tr("Add indexes"), + this); + connect(addIndexesAct, SIGNAL(triggered()), + this, SLOT(addIndex())); + tableToolbar->addAction(addIndexesAct); indexToolbar->addSeparator(); - indexToolbar->addWidget( - new toBrowseButton(QPixmap(const_cast<const char**>(modindex_xpm)), - tr("Modify indexes"), - tr("Modify indexes"), - this, SLOT(modifyIndex()), - toolbar)); +// modifyIndexesAct = new QAction(QPixmap(const_cast<const char**>(modindex_xpm)), +// tr("Modify indexes"), +// this); +// connect(modifyIndexesAct, SIGNAL(triggered()), +// this, SLOT(modifyIndex())); + tableToolbar->addAction(modIndexAct); indexToolbar->addSeparator(); - indexToolbar->addWidget( - new toBrowseButton(QPixmap(const_cast<const char**>(trash_xpm)), - tr("Drop index"), - tr("Drop index"), - this, SLOT(dropIndex()), - toolbar)); - + dropIndexesAct = new QAction(QPixmap(const_cast<const char**>(trash_xpm)), + tr("Drop index"), + this); + connect(dropIndexesAct, SIGNAL(triggered()), + this, SLOT(dropIndex())); + tableToolbar->addAction(dropIndexesAct); + indexView = new toResultTableView(true, false, indexWidget); indexLayout->addWidget(indexView); indexView->setReadAll(true); @@ -1858,12 +1834,38 @@ } } -static toSQL SQLDropUser("toBrowser:DropUser", - "DELETE FROM mysql.user WHERE concat(user,'@',host) = :f1<char[255]>", - "Drop MYSQL user", - "3.23", - "MySQL"); +QString toBrowser::schema(void) +{ + try + { + QString ret = Schema->selected(); + if (ret == tr("No schemas")) + return connection().database(); + return ret; + } + catch (...) + { + return QString::null; + } +} +void toBrowser::setNewFilter(toBrowserFilter *filter) +{ + if (Filter) + { + delete Filter; + Filter = NULL; + } + if (filter) + Filter = filter; + else + Filter = new toBrowserFilter(); + FilterButton->setChecked(filter); + // for (std::map<QString, toResultTableView *>::iterator i = Map.begin();i != Map.end();i++) + // (*i).second->setFilter(Filter->clone()); + refresh(); +} + void toBrowser::addUser() { #ifdef TOEXTENDED_MYSQL @@ -1930,13 +1932,22 @@ refresh(); } +QString toBrowser::currentItemText(int col) +{ + int ix = m_mainTab->currentIndex(); + if (m_browsersMap.contains(ix)) + { + return m_objectsMap[ix]->selectedIndex(1).data(Qt::EditRole).toString(); + } + return ""; +} + void toBrowser::changeItem() { int ix = m_mainTab->currentIndex(); if (m_browsersMap.contains(ix)) { - m_browsersMap[ix]->changeParams(schema(), - m_objectsMap[ix]->selectedIndex(1).data(Qt::EditRole).toString()); + m_browsersMap[ix]->changeParams(schema(), currentItemText()); } else qDebug() << "changeItem() unhandled index" << ix; @@ -1978,13 +1989,13 @@ void toBrowser::modifyTable(void) { - // TODO/FIXME - qDebug("void toBrowser::modifyTable(void) data from tabbrowser!"); -// toBrowserTable::editTable(connection(), -// Schema->selected(), -// SecondText, -// this); -// refresh(); + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed + toBrowserTable::editTable(connection(), + schema(), + currentItemText(), + this); + refresh(); } void toBrowser::addTable(void) @@ -2017,24 +2028,22 @@ // // if (item.isValid()) // { -// toBrowserIndex::modifyIndex(connection(), -// Schema->selected(), -// item.data(Qt::EditRole).toString(), -// this, -// index); + toBrowserIndex::modifyIndex(connection(), + schema(), + currentItemText(), + this/*, + index*/); // } -// refresh(); + refresh(); } void toBrowser::addIndex(void) { - // TODO/FIXME - qDebug("void toBrowser::addIndex(void) move to tabbrowser?"); -// toBrowserIndex::addIndex(connection(), -// Schema->selected(), -// SecondText, -// this); -// refresh(); + toBrowserIndex::addIndex(connection(), + schema(), + currentItemText(), + this); + refresh(); } void toBrowser::displayTableMenu(QMenu *menu) @@ -2144,46 +2153,53 @@ } TOCATCH } - refresh(); +// refresh(); no refresh goes here as it can be called from loop } void toBrowser::dropTable(void) { - // TODO/FIXME - qDebug() << "void toBrowser::dropTable(void) move to its location"; -// dropSomething("TABLE", SecondText); + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed + + for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) + { + if (tableView->isRowSelected(*it)) + dropSomething("TABLE", (*it).data(Qt::EditRole).toString()); + } + refresh(); } void toBrowser::truncateTable(void) { - // TODO/FIXME - qDebug() << "void toBrowser::truncateTable(void) move to its location"; -// bool force = false; -// for (toResultTableView::iterator it(FirstTab); (*it).isValid(); it++) -// { -// if (FirstTab->isRowSelected(*it)) -// { -// switch (force ? 0 : TOMessageBox::warning(this, tr("Truncate table?"), -// tr("Are you sure you want to truncate the table %2.%3,\n" -// "this action can not be undone?").arg( -// Schema->selected()).arg((*it).data(Qt::EditRole).toString()), -// tr("&Yes"), tr("Yes to &all"), tr("&Cancel"), 0)) -// { -// case 1 : -// force = true; -// // Intentionally no break here. -// case 0: -// connection().execute( -// toSQL::string(SQLTruncateTable, connection()). -// arg(connection().quote(Schema->selected())). -// arg(connection().quote((*it).data(Qt::EditRole).toString()))); -// updateTabs(); -// break; -// case 2: -// return; -// } -// } -// } + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed + + bool force = false; + for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) + { + if (tableView->isRowSelected(*it)) + { + switch (force ? 0 : TOMessageBox::warning(this, tr("Truncate table?"), + tr("Are you sure you want to truncate the table %2.%3,\n" + "this action can not be undone?").arg( + schema()).arg((*it).data(Qt::EditRole).toString()), + tr("&Yes"), tr("Yes to &all"), tr("&Cancel"), 0)) + { + case 1 : + force = true; + // Intentionally no break here. + case 0: + connection().execute( + toSQL::string(SQLTruncateTable, connection()). + arg(connection().quote(schema())). + arg(connection().quote((*it).data(Qt::EditRole).toString()))); + break; + case 2: + return; + } + } + } + refresh(); } void toBrowser::flushPrivs(void) @@ -2197,43 +2213,43 @@ void toBrowser::checkTable(void) { - // TODO/FIXME - qDebug() << "void toBrowser::checkTable(void) move to its location"; -// QString sql; -// -// for (toResultTableView::iterator it(FirstTab); (*it).isValid(); it++) -// { -// if (FirstTab->isRowSelected(*it)) -// { -// if (sql.isEmpty()) -// sql = "CHECK TABLE "; -// else -// sql += ", "; -// sql += connection().quote(Schema->selected()) + "." + -// connection().quote((*it).data(Qt::EditRole).toString()); -// } -// } -// -// if (!sql.isEmpty()) -// { -// toResultTableView *result = new toResultTableView(true, false, this); -// result->setWindowFlags(Qt::Window); -// result->setAttribute(Qt::WA_DeleteOnClose); -// result->query(sql); -// result->show(); -// } + QString sql; + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed + for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) + { + if (tableView->isRowSelected(*it)) + { + if (sql.isEmpty()) + sql = "CHECK TABLE "; + else + sql += ", "; + sql += connection().quote(schema()) + "." + + connection().quote((*it).data(Qt::EditRole).toString()); + } + } + + if (!sql.isEmpty()) + { + toResultTableView *result = new toResultTableView(true, false, this); + result->setWindowFlags(Qt::Window); + result->setAttribute(Qt::WA_DeleteOnClose); + result->query(sql); + result->show(); + } + } void toBrowser::optimizeTable(void) { - // TODO/FIXME - qDebug() << "void toBrowser::optimizeTable(void) move to its location"; -/* QString sql; + QString sql; + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed - for (toResultTableView::iterator it(FirstTab); (*it).isValid(); it++) + for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) { - if (FirstTab->isRowSelected(*it)) + if (tableView->isRowSelected(*it)) { if (sql.isEmpty()) sql = "OPTIMIZE TABLE "; @@ -2251,55 +2267,57 @@ result->setAttribute(Qt::WA_DeleteOnClose); result->query(sql); result->show(); - }*/ + } } void toBrowser::changeType(void) { - // TODO/FIXME - qDebug() << "void toBrowser::changeType(void) move to its location"; -// bool ok; -// QString text = QInputDialog::getText(this, -// "Change table type", -// "Enter new table type", -// QLineEdit::Normal, -// "MyISAM", -// &ok); -// if (ok && !text.isEmpty()) -// { -// for (toResultTableView::iterator it(FirstTab); (*it).isValid(); it++) -// { -// if (FirstTab->isRowSelected(*it)) -// { -// QString sql = "ALTER TABLE "; -// sql += connection().quote(Schema->selected()) + "." + -// connection().quote((*it).data(Qt::EditRole).toString()); -// sql += " TYPE = " + text; -// try -// { -// connection().execute(sql); -// } -// TOCATCH -// } -// } -// } + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed + + bool ok; + QString text = QInputDialog::getText(this, + "Change table type", + "Enter new table type", + QLineEdit::Normal, + "MyISAM", + &ok); + if (ok && !text.isEmpty()) + { + for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) + { + if (tableView->isRowSelected(*it)) + { + QString sql = "ALTER TABLE "; + sql += connection().quote(schema()) + "." + + connection().quote((*it).data(Qt::EditRole).toString()); + sql += " TYPE = " + text; + try + { + connection().execute(sql); + } + TOCATCH + } + } + } } void toBrowser::analyzeTable(void) { - // TODO/FIXME - qDebug() << "void toBrowser::analyzeTable(void) move to its location"; -/* QString sql; + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; // only tabs allowed - for (toResultTableView::iterator it(FirstTab); (*it).isValid(); it++) + QString sql; + + for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) { - if (FirstTab->isRowSelected(*it)) + if (tableView->isRowSelected(*it)) { if (sql.isEmpty()) sql = "ANALYZE TABLE "; else sql += ", "; - sql += connection().quote(Schema->selected()) + "." + + sql += connection().quote(schema()) + "." + connection().quote((*it).data(Qt::EditRole).toString()); } } @@ -2311,15 +2329,25 @@ result->setAttribute(Qt::WA_DeleteOnClose); result->query(sql); result->show(); - }*/ + } } void toBrowser::dropIndex(void) { - // TODO/FIXME - qDebug() << "void toBrowser::dropIndex(void) move to its location"; -// dropSomething("INDEX", SecondText); - // Why there was this? + if (m_mainTab->currentIndex() == toBrowser::TabIndex) + { + for (toResultTableView::iterator it(indexView); (*it).isValid(); it++) + { + if (indexView->isRowSelected(*it)) + { + dropSomething("INDEX", (*it).data(Qt::EditRole).toString()); + } + } + return; + } + // TODO/FIXME: implement deleting from table tab + qDebug() << "toBrowser::dropIndex()" << "indexes can be dropped only directly from indexes tab"; + // for (toResultTableView::iterator it(FirstTab); (*it).isValid(); it++) // { // if (FirstTab->isRowSelected(*it)) @@ -2337,17 +2365,15 @@ void toBrowser::closeEvent(QCloseEvent *event) { - qDebug() << "void toBrowser::closeEvent(QCloseEvent *event)" << "// TODO/FIXME: save edited data in some widgets"; - // TODO/FIXME: save edited data in some widgets -// if (ViewContent->maybeSave() && -// TableContent->maybeSave() && -// AccessContent->maybeSave()) -// { + bool acceptEvent = true; + for (int i = 0; i < m_browsersMap.count(); ++i) + acceptEvent &= m_browsersMap[i]->maybeSave(); + + if (acceptEvent) event->accept(); -// } -// else -// event->ignore(); + else + event->ignore(); } Modified: trunk/tora/src/tobrowser.h =================================================================== --- trunk/tora/src/tobrowser.h 2008-12-08 14:33:37 UTC (rev 3110) +++ trunk/tora/src/tobrowser.h 2008-12-09 15:12:49 UTC (rev 3111) @@ -85,6 +85,17 @@ QTabWidget *m_mainTab; QMenu *ToolMenu; + enum { + TabTable = 0, + TabView, + TabIndex, + TabSequence, + TabSynonym, + TabCode, + TabTrigger, + TabDBLink + } GuiTabType; + toResultTableView *tableView; toBrowserTableWidget * tableBrowserWidget; toResultTableView * viewView; @@ -124,6 +135,8 @@ void enableDisableConstraints(const QString &); void dropSomething(const QString &, const QString &); + QString currentItemText(int col = 1); + QAction *refreshAct; QAction *FilterButton; QAction *clearFilterAct; @@ -131,6 +144,8 @@ QAction *modTableAct; QAction *modConstraintAct; QAction *modIndexAct; + QAction *addIndexesAct; + QAction *dropIndexesAct; QAction *dropTableAct; QAction *enableConstraintAct; QAction *disableConstraintAct; @@ -235,23 +250,23 @@ // }; -class toBrowseButton : public QToolButton -{ - Q_OBJECT; +// class toBrowseButton : public QToolButton +// { +// Q_OBJECT; +// +// public: +// toBrowseButton(const QIcon &iconSet, +// const QString &textLabel, +// const QString & grouptext, +// QObject * receiver, +// const char * slot, +// QToolBar * parent, +// const char * name = 0); +// +// private slots: +// void connectionChanged(void); +// }; -public: - toBrowseButton(const QIcon &iconSet, - const QString &textLabel, - const QString & grouptext, - QObject * receiver, - const char * slot, - QToolBar * parent, - const char * name = 0); - -private slots: - void connectionChanged(void); -}; - class toBrowserTool : public toTool { Q_OBJECT; Modified: trunk/tora/src/tobrowserbasewidget.cpp =================================================================== --- trunk/tora/src/tobrowserbasewidget.cpp 2008-12-08 14:33:37 UTC (rev 3110) +++ trunk/tora/src/tobrowserbasewidget.cpp 2008-12-09 15:12:49 UTC (rev 3111) @@ -40,6 +40,7 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "toresult.h" +#include "toresultdata.h" #include "tobrowserbasewidget.h" @@ -54,6 +55,18 @@ this, SLOT(tabWidget_currentChanged(int))); } +bool toBrowserBaseWidget::maybeSave() +{ + bool ret = true; + foreach (toResult * i, m_tabs.values()) + { + toResultData * d = dynamic_cast<toResultData*>(i); + if (d) + ret &= d->maybeSave(); + } + return ret; +} + void toBrowserBaseWidget::addTab(QWidget * page, const QString & label) { QTabWidget::addTab(page, label); Modified: trunk/tora/src/tobrowserbasewidget.h =================================================================== --- trunk/tora/src/tobrowserbasewidget.h 2008-12-08 14:33:37 UTC (rev 3110) +++ trunk/tora/src/tobrowserbasewidget.h 2008-12-09 15:12:49 UTC (rev 3111) @@ -86,6 +86,11 @@ //! Returns currently used object name. QString object() { return m_object; }; + /*! \brief Check all editable subwidgets for editation in progress. + \retval bool true on "all is save". See toResultData::maybeSave(). + */ + bool maybeSave(); + /*! \brief Add given widget/page as a new tab with label. It adds page into m_tabs structure as well. \param page a toResult and QWidget inherited object. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-10 09:20:39
|
Revision: 3113 http://tora.svn.sourceforge.net/tora/?rev=3113&view=rev Author: subik Date: 2008-12-10 09:20:34 +0000 (Wed, 10 Dec 2008) Log Message: ----------- schema browser progress - GUI operations fixes, db links tests Modified Paths: -------------- trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowser.h trunk/tora/src/tobrowserdblinkswidget.cpp trunk/tora/src/tobrowserdblinkswidget.h trunk/tora/src/tobrowsertablewidget.cpp trunk/tora/src/tobrowsertablewidget.h Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-10 08:51:11 UTC (rev 3112) +++ trunk/tora/src/tobrowser.cpp 2008-12-10 09:20:34 UTC (rev 3113) @@ -1523,16 +1523,11 @@ this); connect(addIndexesAct, SIGNAL(triggered()), this, SLOT(addIndex())); - tableToolbar->addAction(addIndexesAct); + indexToolbar->addAction(addIndexesAct); indexToolbar->addSeparator(); -// modifyIndexesAct = new QAction(QPixmap(const_cast<const char**>(modindex_xpm)), -// tr("Modify indexes"), -// this); -// connect(modifyIndexesAct, SIGNAL(triggered()), -// this, SLOT(modifyIndex())); - tableToolbar->addAction(modIndexAct); + indexToolbar->addAction(modIndexAct); indexToolbar->addSeparator(); @@ -1541,8 +1536,8 @@ this); connect(dropIndexesAct, SIGNAL(triggered()), this, SLOT(dropIndex())); - tableToolbar->addAction(dropIndexesAct); - + indexToolbar->addAction(dropIndexesAct); + indexView = new toResultTableView(true, false, indexWidget); indexLayout->addWidget(indexView); indexView->setReadAll(true); @@ -1651,12 +1646,14 @@ QToolBar * dblinkToolbar = toAllocBar(dblinkWidget, tr("Database browser")); dblinkLayout->addWidget(dblinkToolbar); + dblinkView = new toResultTableView(true, false, dblinkWidget); + dblinkBrowserWidget = new toBrowserDBLinksWidget(dblinkSplitter); + testDBLinkAct = new QAction(QPixmap(const_cast<const char**>(modconstraint_xpm)), tr("Test DBLink"), this); - connect(testDBLinkAct, SIGNAL(triggered()), this, SLOT(testDBLink())); + connect(testDBLinkAct, SIGNAL(triggered()), dblinkBrowserWidget, SLOT(testDBLink())); dblinkToolbar->addAction(testDBLinkAct); - dblinkView = new toResultTableView(true, false, dblinkWidget); dblinkLayout->addWidget(dblinkView); dblinkView->setReadAll(true); dblinkView->setSQL(SQLListDBLink); @@ -1671,8 +1668,6 @@ this, SLOT(displayIndexMenu(QMenu *))); - dblinkBrowserWidget = new toBrowserDBLinksWidget(dblinkSplitter); - dblinkWidget->resize(FIRST_WIDTH, dblinkView->height()); dblinkSplitter->setStretchFactor(dblinkSplitter->indexOf(dblinkView), 0); dblinkSplitter->setStretchFactor(dblinkSplitter->indexOf(dblinkBrowserWidget), 1); @@ -2008,32 +2003,23 @@ void toBrowser::modifyConstraint(void) { - // TODO/FIXME - qDebug("void toBrowser::modifyConstraint(void) data from tabbrowser!"); -// toBrowserConstraint::modifyConstraint(connection(), -// Schema->selected(), -// SecondText, -// this); -// refresh(); + if (m_mainTab->currentIndex() != toBrowser::TabTable) + return; + + toBrowserConstraint::modifyConstraint(connection(), + schema(), + tableBrowserWidget->object(), + this); + refresh(); } void toBrowser::modifyIndex(void) { - // TODO/FIXME - qDebug("void toBrowser::modifyIndex(void) move to tabbrowser?"); -// QString index; -// QModelIndex item = selectedItem(1); -// if (FirstTab->model()->columnCount() > 1 && item.isValid()) -// index = item.data(Qt::EditRole).toString(); -// -// if (item.isValid()) -// { - toBrowserIndex::modifyIndex(connection(), - schema(), - currentItemText(), - this/*, - index*/); -// } + toBrowserIndex::modifyIndex(connection(), + schema(), + tableBrowserWidget->object(), + this, + currentItemText()); refresh(); } @@ -2041,7 +2027,7 @@ { toBrowserIndex::addIndex(connection(), schema(), - currentItemText(), + tableBrowserWidget->object(), this); refresh(); } @@ -3082,102 +3068,14 @@ // Filter->exportData(data, prefix + ":Filter"); // } -void toBrowser::enableDisableConstraints(const QString &what) -{ - // TODO/FIXME - qDebug() << "void toBrowser::enableDisableConstraints(const QString &what) move to its location"; -/* if (!SecondTab) - return; - - try - { - toResultTableView *table = - dynamic_cast<toResultTableView *>(SecondTab); - toConnection &conn = connection(); - std::list<QString> migrate; - if (table && table->objectName() == TAB_TABLE_CONS) - { - for (toResultTableView::iterator it(table); (*it).isValid(); it++) - { - if (table->isRowSelected(*it)) - { - toPush(migrate, - conn.quote(schema()) + ":" + - "TABLE:" + - conn.quote(SecondText) + ":" + - "CONSTRAINT:" + - conn.quote((*it).data(Qt::EditRole).toString()) + ":" + - "DEFINITION:" + - what); - } - } - } - else if (table && table->objectName() == TAB_TABLE_DEPEND) - { - toResultModel *model = table->model(); - for (toResultTableView::iterator it(table); (*it).isValid(); it++) - { - if (table->isRowSelected(*it)) - { - toPush(migrate, - conn.quote(model->data((*it).row(), 0).toString()) + ":" + - "TABLE:" + - conn.quote(model->data((*it).row(), 1).toString()) + ":" + - "CONSTRAINT:" + - conn.quote(model->data((*it).row(), 2).toString()) + ":" + - "DEFINITION:" + - what); - } - } - } - else - { -// toResultView *lst = dynamic_cast<toResultView *>(SecondTab); -// if (lst && lst->sqlName() == "toBrowser:TableTrigger") { - // Need work -// } - } - - if (migrate.begin() != migrate.end()) - { - std::list<QString> drop; - toExtract extract(conn, this); - extract.setPrompt(false); - extract.setHeading(false); - QString sql = extract.migrate(drop, migrate); - conn.execute("BEGIN\n" + sql + "\nEND;"); - } - } - TOCATCH;*/ -} - void toBrowser::enableConstraints(void) { - enableDisableConstraints("ENABLE"); + if (m_mainTab->currentIndex() == toBrowser::TabTable) + tableBrowserWidget->enableConstraints(true); } void toBrowser::disableConstraints(void) { - enableDisableConstraints("DISABLE"); + if (m_mainTab->currentIndex() == toBrowser::TabTable) + tableBrowserWidget->enableConstraints(false); } - -void toBrowser::testDBLink(void) -{ - // TODO/FIXME - qDebug() << "void toBrowser::testDBLink(void) move to its location"; -/* if (SecondText.isEmpty()) - return ; - - toQList resultset; - try - { - resultset = toQuery::readQueryNull(toCurrentConnection(this), - "SELECT * FROM dual@" + SecondText); - } - TOCATCH; - // } catch (...) { - // TOMessageBox::information(this, "Database link", SecondText); - // } - QString status(resultset.empty() ? tr("status: FAILED") : tr("status: OK")); - TOMessageBox::information(this, "Database link", SecondText + " " + status);*/ -} Modified: trunk/tora/src/tobrowser.h =================================================================== --- trunk/tora/src/tobrowser.h 2008-12-10 08:51:11 UTC (rev 3112) +++ trunk/tora/src/tobrowser.h 2008-12-10 09:20:34 UTC (rev 3113) @@ -132,7 +132,6 @@ void setNewFilter(toBrowserFilter *filter); QString schema(void); - void enableDisableConstraints(const QString &); void dropSomething(const QString &, const QString &); QString currentItemText(int col = 1); @@ -198,8 +197,6 @@ void enableConstraints(void); void disableConstraints(void); - void testDBLink(void); - void displayIndexMenu(QMenu *menu); void displayTableMenu(QMenu *menu); Modified: trunk/tora/src/tobrowserdblinkswidget.cpp =================================================================== --- trunk/tora/src/tobrowserdblinkswidget.cpp 2008-12-10 08:51:11 UTC (rev 3112) +++ trunk/tora/src/tobrowserdblinkswidget.cpp 2008-12-10 09:20:34 UTC (rev 3113) @@ -39,6 +39,9 @@ * * END_COMMON_COPYRIGHT_HEADER */ +#include <QMessageBox> + +#include "utils.h" #include "toresultitem.h" #include "toresulttableview.h" @@ -70,3 +73,23 @@ synonymsView->setSQL(SQLDBLinkSynonyms); addTab(synonymsView, "&Synonyms"); } + +void toBrowserDBLinksWidget::testDBLink() +{ + if (object().isEmpty()) + { + TOMessageBox::information(this, "Database link", "No selected database link to test."); + return; + } + + toQList resultset; + try + { + resultset = toQuery::readQueryNull(toCurrentConnection(this), + "SELECT * FROM dual@" + object()); + } + TOCATCH; + + QString status(resultset.empty() ? tr("status: FAILED") : tr("status: OK")); + TOMessageBox::information(this, "Database link", object() + " " + status); +} Modified: trunk/tora/src/tobrowserdblinkswidget.h =================================================================== --- trunk/tora/src/tobrowserdblinkswidget.h 2008-12-10 08:51:11 UTC (rev 3112) +++ trunk/tora/src/tobrowserdblinkswidget.h 2008-12-10 09:20:34 UTC (rev 3113) @@ -61,6 +61,9 @@ public: toBrowserDBLinksWidget(QWidget * parent); + + public slots: + void testDBLink(); }; #endif Modified: trunk/tora/src/tobrowsertablewidget.cpp =================================================================== --- trunk/tora/src/tobrowsertablewidget.cpp 2008-12-10 08:51:11 UTC (rev 3112) +++ trunk/tora/src/tobrowsertablewidget.cpp 2008-12-10 09:20:34 UTC (rev 3113) @@ -49,6 +49,7 @@ #include "toresultgrants.h" #include "tobrowsertablewidget.h" #include "utils.h" +#include "toextract.h" static toSQL SQLTableIndex("toBrowserTableWidget:TableIndex", @@ -336,7 +337,10 @@ "Table partitions", "0801"); +#define TAB_CONSTRAINTS 2 +#define TAB_REFERENCES 3 + toBrowserTableWidget::toBrowserTableWidget(QWidget * parent) : toBrowserBaseWidget(parent) { @@ -396,4 +400,67 @@ addTab(extractView, "Script"); } +void toBrowserTableWidget::enableConstraints(bool enable) +{ + QString what(enable ? "ENABLE" : "DISABLE"); + std::list<QString> migrate; + toConnection &conn = toCurrentConnection(this); + try + { + if (currentIndex() == TAB_CONSTRAINTS) + { + for (toResultTableView::iterator it(constraintsView); (*it).isValid(); it++) + { + if (constraintsView->isRowSelected(*it)) + { + toPush(migrate, + conn.quote(schema()) + ":" + + "TABLE:" + + conn.quote(object()) + ":" + + "CONSTRAINT:" + + conn.quote((*it).data(Qt::EditRole).toString()) + ":" + + "DEFINITION:" + + what); + } + } + } + else if (currentIndex() == TAB_REFERENCES) + { + toResultModel *model = referencesView->model(); + for (toResultTableView::iterator it(referencesView); (*it).isValid(); it++) + { + if (referencesView->isRowSelected(*it)) + { + toPush(migrate, + conn.quote(model->data((*it).row(), 0).toString()) + ":" + + "TABLE:" + + conn.quote(model->data((*it).row(), 1).toString()) + ":" + + "CONSTRAINT:" + + conn.quote(model->data((*it).row(), 2).toString()) + ":" + + "DEFINITION:" + + what); + } + } + } + else + { + qDebug("toBrowserTableWidget::enableConstraints - unimplemented"); + // toResultView *lst = dynamic_cast<toResultView *>(SecondTab); + // if (lst && lst->sqlName() == "toBrowser:TableTrigger") { + // Need work + // } + } + + if (migrate.begin() != migrate.end()) + { + std::list<QString> drop; + toExtract extract(conn, this); + extract.setPrompt(false); + extract.setHeading(false); + QString sql = extract.migrate(drop, migrate); + conn.execute("BEGIN\n" + sql + "\nEND;"); + } + } + TOCATCH; +} Modified: trunk/tora/src/tobrowsertablewidget.h =================================================================== --- trunk/tora/src/tobrowsertablewidget.h 2008-12-10 08:51:11 UTC (rev 3112) +++ trunk/tora/src/tobrowsertablewidget.h 2008-12-10 09:20:34 UTC (rev 3113) @@ -76,6 +76,11 @@ public: toBrowserTableWidget(QWidget * parent); + + /*! \brief Enable or disable chosen constraints. + Affected sub-tabs are: Constraints and Dependencies + */ + void enableConstraints(bool enable); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-12 09:30:22
|
Revision: 3114 http://tora.svn.sourceforge.net/tora/?rev=3114&view=rev Author: subik Date: 2008-12-12 09:30:15 +0000 (Fri, 12 Dec 2008) Log Message: ----------- schema browser progress - MySQL access tab implemented Modified Paths: -------------- trunk/tora/src/CMakeLists.txt trunk/tora/src/Makefile.am trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowser.h Added Paths: ----------- trunk/tora/src/tobrowseraccesswidget.cpp trunk/tora/src/tobrowseraccesswidget.h Modified: trunk/tora/src/CMakeLists.txt =================================================================== --- trunk/tora/src/CMakeLists.txt 2008-12-10 09:20:34 UTC (rev 3113) +++ trunk/tora/src/CMakeLists.txt 2008-12-12 09:30:15 UTC (rev 3114) @@ -90,6 +90,7 @@ tobrowserindex.h tobrowsertable.h tobrowserbasewidget.h + tobrowseraccesswidget.h tobrowsertablewidget.h tobrowserviewwidget.h tobrowserindexwidget.h @@ -256,6 +257,7 @@ tobrowserindex.cpp tobrowsertable.cpp tobrowserbasewidget.cpp + tobrowseraccesswidget.cpp tobrowsertablewidget.cpp tobrowserviewwidget.cpp tobrowserindexwidget.cpp Modified: trunk/tora/src/Makefile.am =================================================================== --- trunk/tora/src/Makefile.am 2008-12-10 09:20:34 UTC (rev 3113) +++ trunk/tora/src/Makefile.am 2008-12-12 09:30:15 UTC (rev 3114) @@ -184,6 +184,7 @@ towaitevents.cpp towaitevents.h \ toconnectionmodel.cpp toconnectionmodel.h \ tobrowserbasewidget.cpp tobrowserbasewidget.h \ + tobrowseraccesswidget.cpp tobrowseraccesswidget.h \ tobrowsertablewidget.cpp tobrowsertablewidget.h \ tobrowserviewwidget.cpp tobrowserviewwidget.h \ tobrowserindexwidget.cpp tobrowserindexwidget.h \ @@ -404,6 +405,7 @@ moc_todockbar.cpp \ moc_topushbutton.cpp \ moc_tobrowserbasewidget.cpp \ + moc_tobrowseraccesswidget.cpp \ moc_tobrowsertablewidget.cpp \ moc_tobrowserviewwidget.cpp \ moc_tobrowserindexwidget.cpp \ Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-10 09:20:34 UTC (rev 3113) +++ trunk/tora/src/tobrowser.cpp 2008-12-12 09:30:15 UTC (rev 3114) @@ -125,6 +125,7 @@ #include "tobrowsercodewidget.h" #include "tobrowsertriggerwidget.h" #include "tobrowserdblinkswidget.h" +#include "tobrowseraccesswidget.h" @@ -1676,113 +1677,64 @@ m_browsersMap[m_mainTab->count()-1] = dblinkBrowserWidget; #endif // dblink - // TODO/FIXME: MySQL support temp. removed -/* - splitter = new QSplitter(Qt::Horizontal, TopTab); - splitter->setObjectName(TAB_ACCESS); - TopTab->addTab(splitter, tr("Access")); + QSplitter * accessSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + accessSplitter->setObjectName(TAB_ACCESS); + m_mainTab->addTab(accessSplitter, tr("Access")); + #ifdef TOEXTENDED_MYSQL - box = new QWidget(splitter); - QVBoxLayout *vbox = new QVBoxLayout; - vbox->setSpacing(0); - vbox->setContentsMargins(0, 0, 0, 0); - setLayout(vbox); + // This is propably never compiled... and never worked... + QWidget * accessWidget = new QWidget(accessSplitter); + QVBoxLayout *accessLayout = new QVBoxLayout; + accessLayout->setSpacing(0); + accessLayout->setContentsMargins(0, 0, 0, 0); + accessWidget->setLayout(accessLayout); - toolbar = toAllocBar(box, tr("Database browser")); - vbox->addWidget(box); - toolbar->addWidget( - new toBrowseButton(QPixmap(const_cast<const char**>(new_xpm)), + QToolBar * accessToolBar = toAllocBar(box, tr("Database browser")); + accessLayout->addWidget(accessToolBar); + + QAction * addUserAct = accessToolBar->addAction(QPixmap(const_cast<const char**>(new_xpm)), tr("Add user"), - tr("Add user"), - this, SLOT(addUser()), - toolbar)); - toolbar->addWidget( - new toBrowseButton(QPixmap(const_cast<const char**>(trash_xpm)), + this, SLOT(addUser())); + QAction * dropUserAct = accessToolBar->addAction(QPixmap(const_cast<const char**>(trash_xpm)), tr("Drop user"), - tr("Drop user"), - this, SLOT(dropUser()), - toolbar)); + this, SLOT(dropUser())); - tableView = new toResultTableView(true, false, box); - vbox->addWidget(tableView); + accessView = new toResultTableView(true, false, accessWidget); + accessView->setSQL(SQLMySQLUsers); + accessView->setReadAll(true); + AccessContent = NULL; + accessLayout->addWidget(accessView); + accessWidget->resize(FIRST_WIDTH, accessView->height()); #else - tableView = new toResultTableView(true, false, splitter); + accessView = new toResultTableView(true, false, accessSplitter); + accessView->resize(FIRST_WIDTH, accessView->height()); + accessView->setSQL(SQLMySQLAccess); + accessView->setReadAll(true); #endif - tableView->setReadAll(true); - Map[TAB_ACCESS] = tableView; - tableView->setTabWidget(TopTab); - tableView->resize(FIRST_WIDTH, tableView->height()); - connect(tableView, SIGNAL(selectionChanged()), - this, SLOT(changeItem())); + accessBrowserWidget = new toBrowserAccessWidget(accessSplitter); - curr = new toTabWidget(splitter); - splitter->setStretchFactor(splitter->indexOf(curr), 1); + accessSplitter->setStretchFactor(accessSplitter->indexOf(accessView), 0); + accessSplitter->setStretchFactor(accessSplitter->indexOf(accessBrowserWidget), 1); -#ifdef TOEXTENDED_MYSQL - splitter->setResizeMode(box, QSplitter::KeepSize); - tableView->setSQL(SQLMySQLUsers); + m_objectsMap[m_mainTab->count()-1] = accessView; + m_browsersMap[m_mainTab->count()-1] = accessBrowserWidget; - AccessContent = NULL; + connect(accessView, SIGNAL(selectionChanged()), + this, SLOT(changeItem())); - UserPanel = new toMySQLUser(curr, TAB_ACCESS_USER); - curr->addTab(UserPanel, tr("&User")); - SecondMap[TAB_ACCESS] = UserPanel; - SecondMap[TAB_ACCESS_USER] = UserPanel; - AccessPanel = new toMySQLUserAccess(curr, TAB_ACCESS_OBJECTS); - curr->addTab(AccessPanel, tr("&Objects")); - SecondMap[TAB_ACCESS_OBJECTS] = UserPanel; // Yes, it should be - // this one, it will - // signal the - // TAB_ACCESS_OBJECTS - // to update. - connect(AccessPanel, SIGNAL(hasChanged()), UserPanel, SLOT(hasChanged())); - connect(UserPanel, - SIGNAL(saveChanges(const QString &, const QString &)), - AccessPanel, - SLOT(saveChanges(const QString &, const QString &))); - connect(UserPanel, - SIGNAL(changeUser(const QString &)), - AccessPanel, - SLOT(changeUser(const QString &))); - - AccessContent = new toResultData(curr, TAB_ACCESS_CONTENT); - curr->addTab(AccessContent, tr("&Hosts")); - SecondMap[TAB_ACCESS_CONTENT] = AccessContent; -#else - splitter->setStretchFactor(splitter->indexOf(tableView), 1); - tableView->setSQL(SQLMySQLAccess); - - AccessContent = new toResultData(curr, TAB_ACCESS_CONTENT); - curr->addTab(AccessContent, tr("&Data")); - SecondMap[TAB_ACCESS] = AccessContent; - SecondMap[TAB_ACCESS_CONTENT] = AccessContent; -#endif - - connect(AccessContent, SIGNAL(changesSaved()), this, SLOT(flushPrivs())); - - connect(curr, - SIGNAL(currentTabChanged(QWidget *)), - this, - SLOT(changeSecondTab(QWidget *))); - + // End of tabs. Now the common things are comming... ToolMenu = NULL; connect(toMainWidget()->workspace(), SIGNAL(subWindowActivated(QMdiSubWindow *)), this, SLOT(windowActivated(QMdiSubWindow *))); - connect(TopTab, - SIGNAL(currentTabChanged(QWidget *)), - this, - SLOT(changeTab(QWidget *))); - connect(this, SIGNAL(connectionChange()), this, SLOT(changeConnection())); Schema->setFocus(); setNewFilter(NULL); -*/ refresh(); connect(this, SIGNAL(connectionChange()), @@ -1871,6 +1823,7 @@ void toBrowser::dropUser() { #ifdef TOEXTENDED_MYSQL +// This propably never woked... try { AccessPanel->dropCurrentAccess(); @@ -2188,14 +2141,6 @@ refresh(); } -void toBrowser::flushPrivs(void) -{ - try - { - connection().execute("FLUSH PRIVILEGES"); - } - TOCATCH -} void toBrowser::checkTable(void) { Modified: trunk/tora/src/tobrowser.h =================================================================== --- trunk/tora/src/tobrowser.h 2008-12-10 09:20:34 UTC (rev 3113) +++ trunk/tora/src/tobrowser.h 2008-12-12 09:30:15 UTC (rev 3114) @@ -74,6 +74,7 @@ class toBrowserCodeWidget; class toBrowserTriggerWidget; class toBrowserDBLinksWidget; +class toBrowserAccessWidget; class toBrowserBaseWidget; @@ -93,7 +94,8 @@ TabSynonym, TabCode, TabTrigger, - TabDBLink + TabDBLink, + TabAccess } GuiTabType; toResultTableView *tableView; @@ -112,6 +114,8 @@ toBrowserTriggerWidget * triggerBrowserWidget; toResultTableView * dblinkView; toBrowserDBLinksWidget * dblinkBrowserWidget; + toResultTableView * accessView; + toBrowserAccessWidget * accessBrowserWidget; QMap<int,toResultTableView*> m_objectsMap; QMap<int,toBrowserBaseWidget*> m_browsersMap; @@ -189,7 +193,6 @@ void checkTable(void); void optimizeTable(void); void analyzeTable(void); - void flushPrivs(void); void dropIndex(void); Added: trunk/tora/src/tobrowseraccesswidget.cpp =================================================================== --- trunk/tora/src/tobrowseraccesswidget.cpp (rev 0) +++ trunk/tora/src/tobrowseraccesswidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) @@ -0,0 +1,99 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER +* +* TOra - An Oracle Toolkit for DBA's and developers +* +* Shared/mixed copyright is held throughout files in this product +* +* Portions Copyright (C) 2000-2001 Underscore AB +* Portions Copyright (C) 2003-2005 Quest Software, Inc. +* Portions Copyright (C) 2004-2008 Numerous Other Contributors +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; only version 2 of +* the License is valid for this program. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* As a special exception, you have permission to link this program +* with the Oracle Client libraries and distribute executables, as long +* as you follow the requirements of the GNU GPL in regard to all of the +* software in the executable aside from Oracle client libraries. +* +* Specifically you are not permitted to link this program with the +* Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. +* And you are not permitted to distribute binaries compiled against +* these libraries. +* +* You may link this product with any GPL'd Qt library. +* +* All trademarks belong to their respective owners. +* +* END_COMMON_COPYRIGHT_HEADER */ + +#include "toresultdata.h" +#include "utils.h" +#include "tobrowseraccesswidget.h" + + + +toBrowserAccessWidget::toBrowserAccessWidget(QWidget * parent) + : toBrowserBaseWidget(parent) +{ + setObjectName("toBrowserAccessWidget"); + +#ifdef TOEXTENDED_MYSQL + // This is propably never compiled... + // I'm leaving this code as is + UserPanel = new toMySQLUser(curr, TAB_ACCESS_USER); + curr->addTab(UserPanel, tr("&User")); + SecondMap[TAB_ACCESS] = UserPanel; + SecondMap[TAB_ACCESS_USER] = UserPanel; + + AccessPanel = new toMySQLUserAccess(curr, TAB_ACCESS_OBJECTS); + curr->addTab(AccessPanel, tr("&Objects")); + SecondMap[TAB_ACCESS_OBJECTS] = UserPanel; // Yes, it should be + // this one, it will + // signal the + // TAB_ACCESS_OBJECTS + // to update. + connect(AccessPanel, SIGNAL(hasChanged()), UserPanel, SLOT(hasChanged())); + connect(UserPanel, + SIGNAL(saveChanges(const QString &, const QString &)), + AccessPanel, + SLOT(saveChanges(const QString &, const QString &))); + connect(UserPanel, + SIGNAL(changeUser(const QString &)), + AccessPanel, + SLOT(changeUser(const QString &))); + + AccessContent = new toResultData(curr, TAB_ACCESS_CONTENT); + curr->addTab(AccessContent, tr("&Hosts")); + SecondMap[TAB_ACCESS_CONTENT] = AccessContent; +#else + + accessContent = new toResultData(this); + addTab(accessContent, tr("&Data")); + connect(accessContent, SIGNAL(changesSaved()), this, SLOT(flushPrivs())); + +#endif + +} + +void toBrowserAccessWidget::flushPrivs(void) +{ + try + { + toCurrentConnection(this).execute("FLUSH PRIVILEGES"); + } + TOCATCH +} + Added: trunk/tora/src/tobrowseraccesswidget.h =================================================================== --- trunk/tora/src/tobrowseraccesswidget.h (rev 0) +++ trunk/tora/src/tobrowseraccesswidget.h 2008-12-12 09:30:15 UTC (rev 3114) @@ -0,0 +1,67 @@ + +/* BEGIN_COMMON_COPYRIGHT_HEADER +* +* TOra - An Oracle Toolkit for DBA's and developers +* +* Shared/mixed copyright is held throughout files in this product +* +* Portions Copyright (C) 2000-2001 Underscore AB +* Portions Copyright (C) 2003-2005 Quest Software, Inc. +* Portions Copyright (C) 2004-2008 Numerous Other Contributors +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; only version 2 of +* the License is valid for this program. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* As a special exception, you have permission to link this program +* with the Oracle Client libraries and distribute executables, as long +* as you follow the requirements of the GNU GPL in regard to all of the +* software in the executable aside from Oracle client libraries. +* +* Specifically you are not permitted to link this program with the +* Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. +* And you are not permitted to distribute binaries compiled against +* these libraries. +* +* You may link this product with any GPL'd Qt library. +* +* All trademarks belong to their respective owners. +* +* END_COMMON_COPYRIGHT_HEADER */ + +#ifndef TOBROWSERACCESSWIDGET_H +#define TOBROWSERACCESSWIDGET_H + +#include "tobrowserbasewidget.h" + +class toResultData; + + +/*! \brief MySQL Access browser for toBrowser tool. +See toBrowserBaseWidget for more info. +\author Petr Vanek <pe...@sc...> +*/ +class toBrowserAccessWidget : public toBrowserBaseWidget +{ + Q_OBJECT + + toResultData * accessContent; + + public: + toBrowserAccessWidget(QWidget * parent); + + private slots: + void flushPrivs(void); +}; + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-12 13:54:49
|
Revision: 3115 http://tora.svn.sourceforge.net/tora/?rev=3115&view=rev Author: subik Date: 2008-12-12 13:54:42 +0000 (Fri, 12 Dec 2008) Log Message: ----------- schema browser progress - use tabs properly depending on DB features Modified Paths: -------------- trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowser.h trunk/tora/src/tobrowseraccesswidget.cpp trunk/tora/src/tobrowseraccesswidget.h trunk/tora/src/tobrowserbasewidget.cpp trunk/tora/src/tobrowserbasewidget.h trunk/tora/src/tobrowsercodewidget.cpp trunk/tora/src/tobrowsercodewidget.h trunk/tora/src/tobrowserdblinkswidget.cpp trunk/tora/src/tobrowserdblinkswidget.h trunk/tora/src/tobrowserindexwidget.cpp trunk/tora/src/tobrowserindexwidget.h trunk/tora/src/tobrowsersequencewidget.cpp trunk/tora/src/tobrowsersequencewidget.h trunk/tora/src/tobrowsersynonymwidget.cpp trunk/tora/src/tobrowsersynonymwidget.h trunk/tora/src/tobrowsertablewidget.cpp trunk/tora/src/tobrowsertablewidget.h trunk/tora/src/tobrowsertriggerwidget.cpp trunk/tora/src/tobrowsertriggerwidget.h trunk/tora/src/tobrowserviewwidget.cpp trunk/tora/src/tobrowserviewwidget.h Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowser.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -1398,9 +1398,9 @@ layout()->addWidget(m_mainTab); // Tables - QSplitter *tableSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + tableSplitter = new QSplitter(Qt::Horizontal, m_mainTab); tableSplitter->setObjectName(TAB_TABLES); - m_mainTab->addTab(tableSplitter, tr("T&ables")); +// m_mainTab->addTab(tableSplitter, tr("T&ables")); QWidget *tableWidget = new QWidget(tableSplitter); QVBoxLayout *tableLayout = new QVBoxLayout; @@ -1483,13 +1483,13 @@ this, SLOT(displayTableMenu(QMenu *))); - m_objectsMap[m_mainTab->count()-1] = tableView; - m_browsersMap[m_mainTab->count()-1] = tableBrowserWidget; + m_objectsMap[tableSplitter] = tableView; + m_browsersMap[tableSplitter] = tableBrowserWidget; // Views - QSplitter * viewSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + viewSplitter = new QSplitter(Qt::Horizontal, m_mainTab); viewSplitter->setObjectName(TAB_VIEWS); - m_mainTab->addTab(viewSplitter, tr("&Views")); +// m_mainTab->addTab(viewSplitter, tr("&Views")); viewView = new toResultTableView(true, false, viewSplitter); viewView->setReadAll(true); viewView->setSQL(SQLListView); @@ -1501,14 +1501,14 @@ viewBrowserWidget = new toBrowserViewWidget(viewSplitter); viewSplitter->setStretchFactor(viewSplitter->indexOf(viewBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = viewView; - m_browsersMap[m_mainTab->count()-1] = viewBrowserWidget; + m_objectsMap[viewSplitter] = viewView; + m_browsersMap[viewSplitter] = viewBrowserWidget; // Indexes - QSplitter * indexSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + indexSplitter = new QSplitter(Qt::Horizontal, m_mainTab); indexSplitter->setObjectName(TAB_INDEX); - m_mainTab->addTab(indexSplitter, tr("Inde&xes")); +// m_mainTab->addTab(indexSplitter, tr("Inde&xes")); QWidget * indexWidget = new QWidget(indexSplitter); QVBoxLayout * indexLayout = new QVBoxLayout; @@ -1554,13 +1554,13 @@ indexBrowserWidget = new toBrowserIndexWidget(indexSplitter); indexSplitter->setStretchFactor(indexSplitter->indexOf(indexBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = indexView; - m_browsersMap[m_mainTab->count()-1] = indexBrowserWidget; + m_objectsMap[indexSplitter] = indexView; + m_browsersMap[indexSplitter] = indexBrowserWidget; // Sequences - QSplitter * sequenceSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + sequenceSplitter = new QSplitter(Qt::Horizontal, m_mainTab); sequenceSplitter->setObjectName(TAB_SEQUENCES); - m_mainTab->addTab(sequenceSplitter, tr("Se&quences")); +// m_mainTab->addTab(sequenceSplitter, tr("Se&quences")); sequenceView = new toResultTableView(true, false, sequenceSplitter); sequenceView->setReadAll(true); sequenceView->setSQL(SQLListSequence); @@ -1572,14 +1572,14 @@ sequenceBrowserWidget = new toBrowserSequenceWidget(sequenceSplitter); sequenceSplitter->setStretchFactor(sequenceSplitter->indexOf(sequenceBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = sequenceView; - m_browsersMap[m_mainTab->count()-1] = sequenceBrowserWidget; + m_objectsMap[sequenceSplitter] = sequenceView; + m_browsersMap[sequenceSplitter] = sequenceBrowserWidget; // Synonyms - QSplitter * synonymSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + synonymSplitter = new QSplitter(Qt::Horizontal, m_mainTab); synonymSplitter->setObjectName(TAB_SYNONYM); - m_mainTab->addTab(synonymSplitter, tr("S&ynonyms")); +// m_mainTab->addTab(synonymSplitter, tr("S&ynonyms")); synonymView = new toResultTableView(true, false, synonymSplitter); synonymView->setReadAll(true); synonymView->setSQL(SQLListSynonym); @@ -1591,13 +1591,13 @@ synonymBrowserWidget = new toBrowserSynonymWidget(synonymSplitter); synonymSplitter->setStretchFactor(synonymSplitter->indexOf(synonymBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = synonymView; - m_browsersMap[m_mainTab->count()-1] = synonymBrowserWidget; + m_objectsMap[synonymSplitter] = synonymView; + m_browsersMap[synonymSplitter] = synonymBrowserWidget; // Codes - QSplitter * codeSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + codeSplitter = new QSplitter(Qt::Horizontal, m_mainTab); codeSplitter->setObjectName(TAB_PLSQL); - m_mainTab->addTab(codeSplitter, tr("Cod&e")); +// m_mainTab->addTab(codeSplitter, tr("Cod&e")); codeView = new toResultTableView(true, false, codeSplitter); codeView->setReadAll(true); codeView->setSQL(SQLListSQL); @@ -1609,14 +1609,14 @@ codeBrowserWidget = new toBrowserCodeWidget(codeSplitter); codeSplitter->setStretchFactor(codeSplitter->indexOf(codeBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = codeView; - m_browsersMap[m_mainTab->count()-1] = codeBrowserWidget; + m_objectsMap[codeSplitter] = codeView; + m_browsersMap[codeSplitter] = codeBrowserWidget; // Triggers - QSplitter * triggerSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + triggerSplitter = new QSplitter(Qt::Horizontal, m_mainTab); triggerSplitter->setObjectName(TAB_TRIGGER); - m_mainTab->addTab(triggerSplitter, tr("Tri&ggers")); +// m_mainTab->addTab(triggerSplitter, tr("Tri&ggers")); triggerView = new toResultTableView(true, false, triggerSplitter); triggerView->setReadAll(true); triggerView->setSQL(SQLListTrigger); @@ -1628,14 +1628,13 @@ triggerBrowserWidget = new toBrowserTriggerWidget(triggerSplitter); triggerSplitter->setStretchFactor(triggerSplitter->indexOf(triggerBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = triggerView; - m_browsersMap[m_mainTab->count()-1] = triggerBrowserWidget; + m_objectsMap[triggerSplitter] = triggerView; + m_browsersMap[triggerSplitter] = triggerBrowserWidget; #ifdef DBLINK - - QSplitter * dblinkSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + dblinkSplitter = new QSplitter(Qt::Horizontal, m_mainTab); dblinkSplitter->setObjectName(TAB_DBLINK); - m_mainTab->addTab(dblinkSplitter, tr("DBLinks")); +// m_mainTab->addTab(dblinkSplitter, tr("DBLinks")); QWidget * dblinkWidget = new QWidget(dblinkSplitter); @@ -1673,14 +1672,13 @@ dblinkSplitter->setStretchFactor(dblinkSplitter->indexOf(dblinkView), 0); dblinkSplitter->setStretchFactor(dblinkSplitter->indexOf(dblinkBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = dblinkView; - m_browsersMap[m_mainTab->count()-1] = dblinkBrowserWidget; + m_objectsMap[dblinkSplitter] = dblinkView; + m_browsersMap[dblinkSplitter] = dblinkBrowserWidget; #endif // dblink - - QSplitter * accessSplitter = new QSplitter(Qt::Horizontal, m_mainTab); + accessSplitter = new QSplitter(Qt::Horizontal, m_mainTab); accessSplitter->setObjectName(TAB_ACCESS); - m_mainTab->addTab(accessSplitter, tr("Access")); +// m_mainTab->addTab(accessSplitter, tr("Access")); #ifdef TOEXTENDED_MYSQL // This is propably never compiled... and never worked... @@ -1718,8 +1716,8 @@ accessSplitter->setStretchFactor(accessSplitter->indexOf(accessView), 0); accessSplitter->setStretchFactor(accessSplitter->indexOf(accessBrowserWidget), 1); - m_objectsMap[m_mainTab->count()-1] = accessView; - m_browsersMap[m_mainTab->count()-1] = accessBrowserWidget; + m_objectsMap[accessSplitter] = accessView; + m_browsersMap[accessSplitter] = accessBrowserWidget; connect(accessView, SIGNAL(selectionChanged()), this, SLOT(changeItem())); @@ -1734,20 +1732,30 @@ Schema->setFocus(); - setNewFilter(NULL); +// setNewFilter(NULL); - refresh(); + changeConnection(); + connect(this, SIGNAL(connectionChange()), this, SLOT(changeConnection())); connect(m_mainTab, SIGNAL(currentChanged(int)), this, SLOT(mainTab_currentChanged(int))); } -void toBrowser::mainTab_currentChanged(int ix) +void toBrowser::mainTab_currentChanged(int /*ix*/) { if (Schema->selected().isEmpty()) return; + // It can be called when there is no widget at all + // e.g. from refresh(). Exit silently in this case. + if (!m_mainTab->currentWidget()) + return; + + QSplitter * ix = qobject_cast<QSplitter*>(m_mainTab->currentWidget()); + Q_ASSERT_X(ix, "toBrowser::mainTab_currentChanged", + "main widget of the tab is not QSplitter as is mandatory!"); + if (m_objectsMap.contains(ix)) m_objectsMap[ix]->changeParams(schema(), Filter ? Filter->wildCard() : "%"); else @@ -1858,6 +1866,7 @@ void toBrowser::changeConnection(void) { + m_mainTab->blockSignals(true); Schema->query(toSQL::sql(toSQL::TOSQL_USERLIST)); if ( ! connection().schema().isEmpty() ) @@ -1877,13 +1886,70 @@ Schema->setSelected(connection().user()); } + // enable/disable main tabs depending on DB + m_mainTab->clear(); + m_mainTab->addTab(tableSplitter, tr("T&ables")); + m_mainTab->addTab(viewSplitter, tr("&Views")); + m_mainTab->addTab(indexSplitter, tr("Inde&xes")); + + if (toIsOracle(connection()) || toIsPostgreSQL(connection())) + { + sequenceSplitter->show(); + m_mainTab->addTab(sequenceSplitter, tr("Se&quences")); + } + else + sequenceSplitter->hide(); + + if (toIsOracle(connection())) + { + synonymSplitter->show(); + m_mainTab->addTab(synonymSplitter, tr("S&ynonyms")); + } + else + synonymSplitter->hide(); + + if (!toIsMySQL(connection())) + { + codeSplitter->show(); + m_mainTab->addTab(codeSplitter, tr("Cod&e")); + } + else + codeSplitter->hide(); + + m_mainTab->addTab(triggerSplitter, tr("Tri&ggers")); + + if (toIsOracle(connection())) + { + dblinkSplitter->show(); + m_mainTab->addTab(dblinkSplitter, tr("DBLinks")); + } + else + dblinkSplitter->hide(); + + if (toIsMySQL(connection())) + { + accessSplitter->show(); + m_mainTab->addTab(accessSplitter, tr("Access")); + } + else + accessSplitter->hide(); + + foreach (toBrowserBaseWidget * w, m_browsersMap.values()) + w->changeConnection(); + + m_mainTab->setCurrentIndex(0); + m_mainTab->blockSignals(false); + refresh(); } QString toBrowser::currentItemText(int col) { - int ix = m_mainTab->currentIndex(); - if (m_browsersMap.contains(ix)) + QSplitter * ix = qobject_cast<QSplitter*>(m_mainTab->currentWidget()); + Q_ASSERT_X(ix, "toBrowser::currentItemText", + "main widget of the tab is not QSplitter as is mandatory!"); + + if (m_objectsMap.contains(ix)) { return m_objectsMap[ix]->selectedIndex(1).data(Qt::EditRole).toString(); } @@ -1892,7 +1958,10 @@ void toBrowser::changeItem() { - int ix = m_mainTab->currentIndex(); + QSplitter * ix = qobject_cast<QSplitter*>(m_mainTab->currentWidget()); + Q_ASSERT_X(ix, "toBrowser::changeItem", + "main widget of the tab is not QSplitter as is mandatory!"); + if (m_browsersMap.contains(ix)) { m_browsersMap[ix]->changeParams(schema(), currentItemText()); @@ -1937,7 +2006,7 @@ void toBrowser::modifyTable(void) { - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed toBrowserTable::editTable(connection(), schema(), @@ -1956,7 +2025,7 @@ void toBrowser::modifyConstraint(void) { - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; toBrowserConstraint::modifyConstraint(connection(), @@ -2097,7 +2166,7 @@ void toBrowser::dropTable(void) { - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) @@ -2110,7 +2179,7 @@ void toBrowser::truncateTable(void) { - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed bool force = false; @@ -2145,7 +2214,7 @@ void toBrowser::checkTable(void) { QString sql; - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) @@ -2175,7 +2244,7 @@ void toBrowser::optimizeTable(void) { QString sql; - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed for (toResultTableView::iterator it(tableView); (*it).isValid(); it++) @@ -2203,7 +2272,7 @@ void toBrowser::changeType(void) { - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed bool ok; @@ -2235,7 +2304,7 @@ void toBrowser::analyzeTable(void) { - if (m_mainTab->currentIndex() != toBrowser::TabTable) + if (m_mainTab->currentWidget() != tableSplitter) return; // only tabs allowed QString sql; @@ -2265,7 +2334,7 @@ void toBrowser::dropIndex(void) { - if (m_mainTab->currentIndex() == toBrowser::TabIndex) + if (m_mainTab->currentWidget() == indexSplitter) { for (toResultTableView::iterator it(indexView); (*it).isValid(); it++) { @@ -2298,8 +2367,8 @@ { bool acceptEvent = true; - for (int i = 0; i < m_browsersMap.count(); ++i) - acceptEvent &= m_browsersMap[i]->maybeSave(); + foreach (toBrowserBaseWidget * w, m_browsersMap.values()) + acceptEvent &= w->maybeSave(); if (acceptEvent) event->accept(); @@ -3015,12 +3084,12 @@ void toBrowser::enableConstraints(void) { - if (m_mainTab->currentIndex() == toBrowser::TabTable) + if (m_mainTab->currentWidget() == tableSplitter) tableBrowserWidget->enableConstraints(true); } void toBrowser::disableConstraints(void) { - if (m_mainTab->currentIndex() == toBrowser::TabTable) + if (m_mainTab->currentWidget() == tableSplitter) tableBrowserWidget->enableConstraints(false); } Modified: trunk/tora/src/tobrowser.h =================================================================== --- trunk/tora/src/tobrowser.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowser.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -78,6 +78,34 @@ class toBrowserBaseWidget; +/*! \brief Main GUI fo Schema Browser. +toBrowser holds the GUI stuff for schema browsing. It contains +some slots/actions related to the DB object manipulations - mainly +the "mass" actions available for multiple objects (e.g. deleting +all selected tables etc.). Actions related to the one object (e.g. +test the DB link) are moved to toBrowserBaseWidget inherited +classes. + +The main widget of toBrowser is the tab widget m_mainTab. Every its +tab widget is based on QSplitter (\see tableSplitter, etc.). +This QSplitter has two main children - the "object browser" (usually +the toResultTableView - dblinkView etc. - or QWidget with toolbar +and toResultTableView) and the "browser" - the toBrowserBaseWidget +inherited object. +QSplitters are keys in the m_browsersMap and m_objectsMap implicitly +shared QMap structures to allow easy and quick access with +QTabWidget::currentWidget() casted to QSplitter (\see e.g. +mainTab_currentChanged() as an example of data transfer to subwidgets). + +Availability of the tabs for given connection is checked in +changeConnection() method. Some tabs are available only for +some DBMS, depending on features. The tab is hidden when there +is no available fature in DBMS. + +Hidden tabs, resp. widgets, are not deleted. All is still available +in QMap (\see m_objectsMap, m_browsersMap) structures waiting for +resfresh. +*/ class toBrowser : public toToolWidget { Q_OBJECT; @@ -86,39 +114,44 @@ QTabWidget *m_mainTab; QMenu *ToolMenu; - enum { - TabTable = 0, - TabView, - TabIndex, - TabSequence, - TabSynonym, - TabCode, - TabTrigger, - TabDBLink, - TabAccess - } GuiTabType; - + QSplitter * tableSplitter; toResultTableView *tableView; toBrowserTableWidget * tableBrowserWidget; + + QSplitter * viewSplitter; toResultTableView * viewView; toBrowserViewWidget * viewBrowserWidget; + + QSplitter * indexSplitter; toResultTableView * indexView; toBrowserIndexWidget * indexBrowserWidget; + + QSplitter * sequenceSplitter; toResultTableView * sequenceView; toBrowserSequenceWidget * sequenceBrowserWidget; + + QSplitter * synonymSplitter; toResultTableView * synonymView; toBrowserSynonymWidget * synonymBrowserWidget; + + QSplitter * codeSplitter; toResultTableView * codeView; toBrowserCodeWidget * codeBrowserWidget; + + QSplitter * triggerSplitter; toResultTableView * triggerView; toBrowserTriggerWidget * triggerBrowserWidget; + + QSplitter * dblinkSplitter; toResultTableView * dblinkView; toBrowserDBLinksWidget * dblinkBrowserWidget; + + QSplitter * accessSplitter; toResultTableView * accessView; toBrowserAccessWidget * accessBrowserWidget; - QMap<int,toResultTableView*> m_objectsMap; - QMap<int,toBrowserBaseWidget*> m_browsersMap; + QMap<QSplitter*,toResultTableView*> m_objectsMap; + QMap<QSplitter*,toBrowserBaseWidget*> m_browsersMap; // QString SecondText; @@ -136,8 +169,18 @@ void setNewFilter(toBrowserFilter *filter); QString schema(void); - void dropSomething(const QString &, const QString &); + /*! \brief A wrapper method to drop any object from DB. + \param type a uppercase string with e.g. 'TABLE', 'INDEX', etc. + Only objects supported by toExtract can be dropped. + \param what a object name to drop. + */ + void dropSomething(const QString & type, const QString & what); + + /*! \brief Get text from the active "object browser" (toResultTableView). + \see m_objectsMap. + \param col a column name. It's 1 by default + */ QString currentItemText(int col = 1); QAction *refreshAct; Modified: trunk/tora/src/tobrowseraccesswidget.cpp =================================================================== --- trunk/tora/src/tobrowseraccesswidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowseraccesswidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -44,7 +44,6 @@ #include "tobrowseraccesswidget.h" - toBrowserAccessWidget::toBrowserAccessWidget(QWidget * parent) : toBrowserBaseWidget(parent) { @@ -75,19 +74,30 @@ AccessPanel, SLOT(changeUser(const QString &))); - AccessContent = new toResultData(curr, TAB_ACCESS_CONTENT); - curr->addTab(AccessContent, tr("&Hosts")); - SecondMap[TAB_ACCESS_CONTENT] = AccessContent; + accessContent = new toResultData(curr, TAB_ACCESS_CONTENT); + accessContent->setObjectName("accessContent"); + #else accessContent = new toResultData(this); - addTab(accessContent, tr("&Data")); + accessContent->setObjectName("accessContent"); connect(accessContent, SIGNAL(changesSaved()), this, SLOT(flushPrivs())); #endif + changeConnection(); } +void toBrowserAccessWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + if (toIsMySQL(toCurrentConnection(this))) + addTab(accessContent, "&Data"); + else + accessContent->setVisible(false); +} + void toBrowserAccessWidget::flushPrivs(void) { try Modified: trunk/tora/src/tobrowseraccesswidget.h =================================================================== --- trunk/tora/src/tobrowseraccesswidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowseraccesswidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -60,6 +60,8 @@ public: toBrowserAccessWidget(QWidget * parent); + void changeConnection(); + private slots: void flushPrivs(void); }; Modified: trunk/tora/src/tobrowserbasewidget.cpp =================================================================== --- trunk/tora/src/tobrowserbasewidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserbasewidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -39,6 +39,8 @@ * * END_COMMON_COPYRIGHT_HEADER */ +#include <QApplication> + #include "toresult.h" #include "toresultdata.h" #include "tobrowserbasewidget.h" @@ -70,9 +72,22 @@ void toBrowserBaseWidget::addTab(QWidget * page, const QString & label) { QTabWidget::addTab(page, label); + page->setVisible(true); + toResult * r = dynamic_cast<toResult*>(page); - Q_ASSERT_X(r, "new tab is not toResult child!", "toBrowserBaseWidget::addTab params must contain toResult"); - m_tabs[count()-1] = r; + +// qDebug() << objectName() << label << page; + Q_ASSERT_X(r, + "toBrowserBaseWidget::addTab", + "new tab is not toResult child"); + Q_ASSERT_X(!page->objectName().isEmpty(), + "toBrowserBaseWidget::addTab", + "widget objectName cannot be empty; page must have objectName property set"); + Q_ASSERT_X(!m_tabs.contains(page->objectName()), + "toBrowserBaseWidget::addTab", + "widget objectName is already used; page objectName must be unique"); + + m_tabs[page->objectName()] = r; } void toBrowserBaseWidget::changeParams(const QString & schema, const QString & object) @@ -81,10 +96,19 @@ { m_schema = schema; m_object = object; - updateData(currentIndex()); + updateData(currentWidget()->objectName()); } } +void toBrowserBaseWidget::changeConnection() +{ + m_schema = ""; + m_object = ""; + + m_tabs.clear(); + clear(); +} + void toBrowserBaseWidget::tabWidget_currentChanged(int ix) { // Re-read data from sql only when there is no cache for given @@ -92,16 +116,20 @@ if (m_schema.isEmpty() || m_object.isEmpty()) return; - if ((!m_cache.contains(ix)) - || (m_cache[ix].first != m_schema) - || (m_cache[ix].second != m_object)) + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QString key(currentWidget()->objectName()); + + if ((!m_cache.contains(key)) + || (m_cache[key].first != m_schema) + || (m_cache[key].second != m_object)) { - m_cache[ix] = qMakePair(m_schema, m_object); - updateData(ix); + m_cache[key] = qMakePair(m_schema, m_object); + updateData(key); } + QApplication::restoreOverrideCursor(); } -void toBrowserBaseWidget::updateData(int ix) +void toBrowserBaseWidget::updateData(const QString & ix) { if (schema().isEmpty() || object().isEmpty()) return; Modified: trunk/tora/src/tobrowserbasewidget.h =================================================================== --- trunk/tora/src/tobrowserbasewidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserbasewidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -75,11 +75,16 @@ See updateData(). */ virtual void changeParams(const QString & schema, const QString & object); - /*! \brief Performs data refresh. - Call toResult child its changeParams() if it's really needed. - \param ix index of the required tab/widget. See m_tabs. + + /*! \brief Change connection for widget. It has to handle visibility + of tabs depending on DB features. + This method should be reimplemented in all child classes to customize + its impact on child's tab members. All reimplementations should call + parent's changeConnection() to clear the cache; + \warning If you don't call toBrowserBaseWidget::changeConnection(), + the m_tabs cleaning, before new addTab() you can get assertions. */ - virtual void updateData(int ix); + virtual void changeConnection(); //! Returns currently used schema. QString schema() { return m_schema; }; @@ -109,17 +114,23 @@ only when there is no index-reference or the m_schema or m_object have been changed from outside. Structure: - - int and currentTab index for QTabWidget access. + - QString is the currentTab's widget objectName for QTabWidget access. - QPair's string1 cached schema name - QPair's string2 cached object name */ - QMap<int, QPair<QString,QString> > m_cache; + QMap<QString, QPair<QString,QString> > m_cache; /*! Keep pages in this map. It's used in updateData() as a quick access shorcut. */ - QMap<int, toResult*> m_tabs; + QMap<QString, toResult*> m_tabs; + /*! \brief Performs data refresh. + Call toResult child its changeParams() if it's really needed. + \param ix index of the required tab/widget. See m_tabs. + */ + void updateData(const QString & ix); + protected slots: /*! \brief Handle current tab change. It updates the m_cache cache structure too. Modified: trunk/tora/src/tobrowsercodewidget.cpp =================================================================== --- trunk/tora/src/tobrowsercodewidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsercodewidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -43,6 +43,7 @@ #include "toresultextract.h" #include "toresultfield.h" #include "toresultgrants.h" +#include "utils.h" #include "tobrowsercodewidget.h" @@ -92,19 +93,46 @@ setObjectName("toBrowserCodeWidget"); declarationResult = new toResultField(this); + declarationResult->setObjectName("declarationResult"); declarationResult->setSQL(SQLSQLHead); - addTab(declarationResult, "&Declaration"); bodyResult = new toResultField(this); + bodyResult->setObjectName("bodyResult"); bodyResult->setSQL(SQLSQLBody); - addTab(bodyResult, "B&ody"); grantsView = new toResultGrants(this); - addTab(grantsView, "&Grants"); + grantsView->setObjectName("grantsView"); - dependsWidget = new toResultDepend(this); - addTab(dependsWidget, "De&pendencies"); + dependsWidget = new toResultDepend(this, "dependsWidget"); +// dependsWidget->setObjectName("dependsWidget"); extractView = new toResultExtract(this); + extractView->setObjectName("extractView"); + + changeConnection(); +} + +void toBrowserCodeWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + if (toIsOracle(c)) + addTab(declarationResult, "&Declaration"); + else + declarationResult->setVisible(false); + + addTab(bodyResult, "B&ody"); + + if (toIsOracle(c) || toIsSapDB(c)) + addTab(grantsView, "&Grants"); + else + grantsView->setVisible(false); + + if (toIsOracle(c)) + addTab(dependsWidget, "De&pendencies"); + else + dependsWidget->setVisible(false); + addTab(extractView, "Script"); } Modified: trunk/tora/src/tobrowsercodewidget.h =================================================================== --- trunk/tora/src/tobrowsercodewidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsercodewidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -66,6 +66,8 @@ public: toBrowserCodeWidget(QWidget * parent); + + virtual void changeConnection(); }; #endif Modified: trunk/tora/src/tobrowserdblinkswidget.cpp =================================================================== --- trunk/tora/src/tobrowserdblinkswidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserdblinkswidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -66,14 +66,32 @@ setObjectName("toBrowserDBLinksWidget"); resultDBLink = new toResultItem(this); + resultDBLink->setObjectName("resultDBLink"); resultDBLink->setSQL(SQLDBLinkInfo); - addTab(resultDBLink, "Info"); synonymsView = new toResultTableView(this); + synonymsView->setObjectName("synonymsView"); synonymsView->setSQL(SQLDBLinkSynonyms); - addTab(synonymsView, "&Synonyms"); + + changeConnection(); } +void toBrowserDBLinksWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + toConnection & c = toCurrentConnection(this); + if (toIsOracle(c)) + { + addTab(resultDBLink, "Info"); + addTab(synonymsView, "&Synonyms"); + } + else + { + resultDBLink->setVisible(false); + synonymsView->setVisible(false); + } +} + void toBrowserDBLinksWidget::testDBLink() { if (object().isEmpty()) Modified: trunk/tora/src/tobrowserdblinkswidget.h =================================================================== --- trunk/tora/src/tobrowserdblinkswidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserdblinkswidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -62,6 +62,8 @@ public: toBrowserDBLinksWidget(QWidget * parent); + virtual void changeConnection(); + public slots: void testDBLink(); }; Modified: trunk/tora/src/tobrowserindexwidget.cpp =================================================================== --- trunk/tora/src/tobrowserindexwidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserindexwidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -44,6 +44,7 @@ #include "toresultitem.h" #include "toresulttableview.h" #include "tostorage.h" +#include "utils.h" #include "tobrowserindexwidget.h" @@ -123,28 +124,49 @@ toBrowserIndexWidget::toBrowserIndexWidget(QWidget * parent) : toBrowserBaseWidget(parent) { -// setupUi(this); setObjectName("toBrowserIndexWidget"); columnView = new toResultTableView(this); + columnView->setObjectName("columnView"); columnView->setSQL(SQLIndexCols); columnView->setReadAll(true); - addTab(columnView, "&Columns"); resultInfo = new toResultItem(this); + resultInfo->setObjectName("resultInfo"); resultInfo->setSQL(SQLIndexInfo); - addTab(resultInfo, "Informations"); extentsView = new toResultExtent(this); - addTab(extentsView, "Extents"); + extentsView->setObjectName("extentsView"); extractView = new toResultExtract(this); - addTab(extractView, "Script"); + extractView->setObjectName("extractView"); -// FIXME/TODO: sapDB only? -// tableView = new toResultTableView(true, false, curr, TAB_INDEX_STATISTIC); -// tableView->setSQL(SQLIndexStatistic); -// tableView->setReadAll(true); -// curr->addTab(tableView, tr("&Statistic")); -// SecondMap[TAB_INDEX_STATISTIC] = tableView; + statisticView = new toResultTableView(this); + statisticView->setObjectName("statisticView"); + statisticView->setSQL(SQLIndexStatistic); + statisticView->setReadAll(true); + + changeConnection(); } + +void toBrowserIndexWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + + addTab(columnView, "&Columns"); + addTab(resultInfo, "Informations"); + + if (toIsOracle(c)) + addTab(extentsView, "Extents"); + else + extentsView->setVisible(false); + + if (toIsSapDB(c)) + addTab(statisticView, tr("&Statistic")); + else + statisticView->setVisible(false); + + addTab(extractView, "Script"); +} Modified: trunk/tora/src/tobrowserindexwidget.h =================================================================== --- trunk/tora/src/tobrowserindexwidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserindexwidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -62,9 +62,13 @@ toResultItem *resultInfo; toResultExtent *extentsView; toResultExtract *extractView; + toResultTableView *statisticView; public: toBrowserIndexWidget(QWidget * parent); + + virtual void changeConnection(); + }; #endif Modified: trunk/tora/src/tobrowsersequencewidget.cpp =================================================================== --- trunk/tora/src/tobrowsersequencewidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsersequencewidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -43,8 +43,11 @@ #include "toresultitem.h" #include "toresulttableview.h" #include "toresultgrants.h" +#include "utils.h" + #include "tobrowsersequencewidget.h" + static toSQL SQLSequenceInfoPgSQL("toBrowser:SequenceInformation", "SELECT *, substr(:f1,1) as \"Owner\" FROM :f2<noquote>", "Display information about a sequence", @@ -65,12 +68,34 @@ setObjectName("toBrowserSequenceWidget"); resultInfo = new toResultItem(this); + resultInfo->setObjectName("resultInfo"); resultInfo->setSQL(SQLSequenceInfo); - addTab(resultInfo, "Info"); grantsView = new toResultGrants(this); - addTab(grantsView, "&Grants"); + grantsView->setObjectName("grantsView"); extractView = new toResultExtract(this); - addTab(extractView, "Script"); + extractView->setObjectName("extractView"); + + changeConnection(); } + +void toBrowserSequenceWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + + if (toIsOracle(c) || toIsPostgreSQL(c)) + { + addTab(resultInfo, "Info"); + addTab(grantsView, "&Grants"); + addTab(extractView, "Script"); + } + else + { + resultInfo->setVisible(false); + grantsView->setVisible(false); + extractView->setVisible(false); + } +} Modified: trunk/tora/src/tobrowsersequencewidget.h =================================================================== --- trunk/tora/src/tobrowsersequencewidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsersequencewidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -63,6 +63,8 @@ public: toBrowserSequenceWidget(QWidget * parent); + + virtual void changeConnection(); }; #endif Modified: trunk/tora/src/tobrowsersynonymwidget.cpp =================================================================== --- trunk/tora/src/tobrowsersynonymwidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsersynonymwidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -42,28 +42,34 @@ #include "toresultextract.h" #include "toresultitem.h" #include "toresultgrants.h" +#include "utils.h" + #include "tobrowsersynonymwidget.h" + static toSQL SQLSynonymInfo("toBrowser:SynonymInformation", "SELECT * FROM Sys.All_Synonyms a\n" " WHERE Owner = :f1<char[101]>\n" " AND Synonym_Name = :f2<char[101]>", "Display information about a synonym"); + toBrowserSynonymWidget::toBrowserSynonymWidget(QWidget * parent) : toBrowserBaseWidget(parent) { setObjectName("toBrowserSynonymWidget"); resultInfo = new toResultItem(this); + resultInfo->setObjectName("resultInfo"); resultInfo->setSQL(SQLSynonymInfo); - addTab(resultInfo, "Info"); grantsView = new toResultGrants(this); - addTab(grantsView, "&Grants"); + grantsView->setObjectName("grantsView"); extractView = new toResultExtract(this); - addTab(extractView, "Script"); + extractView->setObjectName("extractView"); + + changeConnection(); } void toBrowserSynonymWidget::changeParams(const QString & schema, const QString & object) @@ -80,3 +86,23 @@ toBrowserBaseWidget::changeParams(own, name); } + +void toBrowserSynonymWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + + if (toIsOracle(c)) + { + addTab(resultInfo, "Info"); + addTab(grantsView, "&Grants"); + addTab(extractView, "Script"); + } + else + { + resultInfo->setVisible(false); + grantsView->setVisible(false); + extractView->setVisible(false); + } +} Modified: trunk/tora/src/tobrowsersynonymwidget.h =================================================================== --- trunk/tora/src/tobrowsersynonymwidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsersynonymwidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -67,6 +67,8 @@ /*! Reimplemented due names given in the SCHEMA.SYNONYMNAME structure. */ void changeParams(const QString & schema, const QString & object); + + void changeConnection(); }; #endif Modified: trunk/tora/src/tobrowsertablewidget.cpp =================================================================== --- trunk/tora/src/tobrowsertablewidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsertablewidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -337,67 +337,114 @@ "Table partitions", "0801"); -#define TAB_CONSTRAINTS 2 -#define TAB_REFERENCES 3 - toBrowserTableWidget::toBrowserTableWidget(QWidget * parent) : toBrowserBaseWidget(parent) { -// setupUi(this); setObjectName("toBrowserTableWidget"); columnsWidget = new toResultCols(this); - addTab(columnsWidget, "&Columns"); + columnsWidget->setObjectName("columnsWidget"); indexView = new toResultTableView(this); + indexView->setObjectName("indexView"); indexView->setSQL(SQLTableIndex); indexView->setReadAll(true); - addTab(indexView, "&Indexes"); constraintsView = new toResultTableView(this); + constraintsView->setObjectName("constraintsView"); constraintsView->setSQL(SQLTableConstraint); constraintsView->setReadAll(true); - addTab(constraintsView, "C&onstraints"); referencesView = new toResultTableView(this); + referencesView->setObjectName("referencesView"); referencesView->setSQL(SQLTableReferences); referencesView->setReadAll(true); - addTab(referencesView, "&References"); grantsView = new toResultGrants(this); - addTab(grantsView, "&Grants"); + grantsView->setObjectName("grantsView"); triggersView = new toResultTableView(this); + triggersView->setObjectName("triggersView"); triggersView->setSQL(SQLTableTrigger); triggersView->setReadAll(true); - addTab(triggersView, "Triggers"); resultData = new toResultData(this); - addTab(resultData, "&Data"); + resultData->setObjectName("resultData"); resultInfo = new toResultItem(this); + resultInfo->setObjectName("resultInfo"); resultInfo->setSQL(SQLTableInfo); - addTab(resultInfo, "Information"); - if (toIsSapDB(toCurrentConnection(this))) - { - statisticsView = new toResultTableView(this); - statisticsView->setSQL(SQLTableStatistic); - statisticsView->setReadAll(true); - addTab(statisticsView, "Statistics"); - } + statisticsView = new toResultTableView(this); + statisticsView->setObjectName("statisticsView"); + statisticsView->setSQL(SQLTableStatistic); + statisticsView->setReadAll(true); partitionsView = new toResultTableView(this); + partitionsView->setObjectName("partitionsView"); partitionsView->setSQL(SQLTablePartition); partitionsView->setReadAll(true); - addTab(partitionsView, "Partitions"); extentsView = new toResultExtent(this); - addTab(extentsView, "Externts"); + extentsView->setObjectName("extentsView"); extractView = new toResultExtract(this); + extractView->setObjectName("extractView"); + + changeConnection(); +} + +void toBrowserTableWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + + addTab(columnsWidget, "&Columns"); + addTab(indexView, "&Indexes"); + + if (toIsOracle(c) || toIsPostgreSQL(c)) + addTab(constraintsView, "C&onstraints"); + else + constraintsView->setVisible(false); + + if (toIsOracle(c)) + addTab(referencesView, "&References"); + else + referencesView->setVisible(false); + + addTab(grantsView, "&Grants"); + + addTab(triggersView, "Triggers"); + + addTab(resultData, "&Data"); + + addTab(resultInfo, "Information"); + + if (toIsSapDB(c)) + addTab(statisticsView, "Statistics"); + else + statisticsView->setVisible(false); + + if (toIsOracle(c)) + { + addTab(partitionsView, "Partitions"); + addTab(extentsView, "Extents"); + } + else + { + partitionsView->setVisible(false); + extentsView->setVisible(false); + } + addTab(extractView, "Script"); + + foreach(QObject * w, children()) + { + QWidget * i = qobject_cast<QWidget*>(w); + qDebug() << w << i->isVisible(); + } } void toBrowserTableWidget::enableConstraints(bool enable) @@ -408,7 +455,7 @@ try { - if (currentIndex() == TAB_CONSTRAINTS) + if (currentWidget() == constraintsView) { for (toResultTableView::iterator it(constraintsView); (*it).isValid(); it++) { @@ -425,7 +472,7 @@ } } } - else if (currentIndex() == TAB_REFERENCES) + else if (currentWidget() == referencesView) { toResultModel *model = referencesView->model(); for (toResultTableView::iterator it(referencesView); (*it).isValid(); it++) Modified: trunk/tora/src/tobrowsertablewidget.h =================================================================== --- trunk/tora/src/tobrowsertablewidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsertablewidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -77,6 +77,8 @@ public: toBrowserTableWidget(QWidget * parent); + void changeConnection(); + /*! \brief Enable or disable chosen constraints. Affected sub-tabs are: Constraints and Dependencies */ Modified: trunk/tora/src/tobrowsertriggerwidget.cpp =================================================================== --- trunk/tora/src/tobrowsertriggerwidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsertriggerwidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -45,9 +45,11 @@ #include "toresultfield.h" #include "toresultitem.h" #include "toresultgrants.h" +#include "utils.h" #include "tobrowsertriggerwidget.h" + static toSQL SQLTriggerInfo("toBrowser:TriggerInfo", "SELECT Owner,Trigger_Name,\n" " Trigger_Type,Triggering_Event,\n" @@ -85,23 +87,44 @@ setObjectName("toBrowserTriggerWidget"); infoView = new toResultItem(this); + infoView->setObjectName("infoView"); infoView->setSQL(SQLTriggerInfo); - addTab(infoView, "Info"); codeView = new toResultField(this); + codeView->setObjectName("codeView"); codeView->setSQL(SQLTriggerBody); - addTab(codeView, "Code"); columnsWidget = new toResultCols(this); + columnsWidget->setObjectName("columnsWidget"); columnsWidget->setSQL(SQLTriggerCols); - addTab(columnsWidget, "&Columns"); grantsView = new toResultGrants(this); + grantsView->setObjectName("grantsView"); + + dependView = new toResultDepend(this, "dependView"); +// dependView->setObjectName("dependView"); + + extractView = new toResultExtract(this); + extractView->setObjectName("extractView"); + + changeConnection(); +} + +void toBrowserTriggerWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + + addTab(infoView, "Info"); + addTab(codeView, "Code"); + addTab(columnsWidget, "&Columns"); addTab(grantsView, "&Grants"); - dependView = new toResultDepend(this); - addTab(dependView, "De&pendencies"); + if (toIsOracle(c)) + addTab(dependView, "De&pendencies"); + else + dependView->setVisible(false); - extractView = new toResultExtract(this); addTab(extractView, "Script"); } Modified: trunk/tora/src/tobrowsertriggerwidget.h =================================================================== --- trunk/tora/src/tobrowsertriggerwidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowsertriggerwidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -69,6 +69,8 @@ public: toBrowserTriggerWidget(QWidget * parent); + + void changeConnection(); }; #endif Modified: trunk/tora/src/tobrowserviewwidget.cpp =================================================================== --- trunk/tora/src/tobrowserviewwidget.cpp 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserviewwidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) @@ -45,6 +45,7 @@ #include "toresultgrants.h" #include "toresultdepend.h" #include "toresultextract.h" +#include "utils.h" #include "tobrowserviewwidget.h" @@ -74,25 +75,50 @@ toBrowserViewWidget::toBrowserViewWidget(QWidget * parent) : toBrowserBaseWidget(parent) { -// setupUi(this); setObjectName("toBrowserViewWidget"); columnsWidget = new toResultCols(this); - addTab(columnsWidget, "&Columns"); + columnsWidget->setObjectName("columnsWidget"); resultField = new toResultField(this); + resultField->setObjectName("resultField"); resultField->setSQL(SQLViewSQL); - addTab(resultField, "SQL"); resultData = new toResultData(this); - addTab(resultData, "&Data"); + resultData->setObjectName("resultData"); grantsView = new toResultGrants(this); + grantsView->setObjectName("grantsView"); + + resultDependencies = new toResultDepend(this, "resultDependencies"); +// resultDependencies->setObjectName("resultDependencies"); + + extractView = new toResultExtract(this); + extractView->setObjectName("extractView"); + + changeConnection(); +} + +void toBrowserViewWidget::changeConnection() +{ + toBrowserBaseWidget::changeConnection(); + + toConnection & c = toCurrentConnection(this); + + addTab(columnsWidget, "&Columns"); + + if (toIsOracle(c) || toIsSapDB(c) || toIsPostgreSQL(c)) + addTab(resultField, "SQL"); + else + resultField->setVisible(false); + + addTab(resultData, "&Data"); addTab(grantsView, "&Grants"); - resultDependencies = new toResultDepend(this); - addTab(resultDependencies, "De&pendencies"); + if (toIsOracle(c)) + addTab(resultDependencies, "De&pendencies"); + else + resultDependencies->setVisible(false); - extractView = new toResultExtract(this); addTab(extractView, "Script"); } Modified: trunk/tora/src/tobrowserviewwidget.h =================================================================== --- trunk/tora/src/tobrowserviewwidget.h 2008-12-12 09:30:15 UTC (rev 3114) +++ trunk/tora/src/tobrowserviewwidget.h 2008-12-12 13:54:42 UTC (rev 3115) @@ -69,6 +69,8 @@ public: toBrowserViewWidget(QWidget * parent); + + void changeConnection(); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-12 14:10:42
|
Revision: 3116 http://tora.svn.sourceforge.net/tora/?rev=3116&view=rev Author: subik Date: 2008-12-12 14:10:35 +0000 (Fri, 12 Dec 2008) Log Message: ----------- schema browser progress - fixed widget re-shown glitches in the unrelated tabs Modified Paths: -------------- trunk/tora/src/tobrowserbasewidget.cpp trunk/tora/src/tobrowsertablewidget.cpp Modified: trunk/tora/src/tobrowserbasewidget.cpp =================================================================== --- trunk/tora/src/tobrowserbasewidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) +++ trunk/tora/src/tobrowserbasewidget.cpp 2008-12-12 14:10:35 UTC (rev 3116) @@ -71,8 +71,10 @@ void toBrowserBaseWidget::addTab(QWidget * page, const QString & label) { + // show must go *before* QTabWidget::addTab() to prevent + // widgets glitches in the other tabs. + page->setVisible(true); QTabWidget::addTab(page, label); - page->setVisible(true); toResult * r = dynamic_cast<toResult*>(page); Modified: trunk/tora/src/tobrowsertablewidget.cpp =================================================================== --- trunk/tora/src/tobrowsertablewidget.cpp 2008-12-12 13:54:42 UTC (rev 3115) +++ trunk/tora/src/tobrowsertablewidget.cpp 2008-12-12 14:10:35 UTC (rev 3116) @@ -439,12 +439,6 @@ } addTab(extractView, "Script"); - - foreach(QObject * w, children()) - { - QWidget * i = qobject_cast<QWidget*>(w); - qDebug() << w << i->isVisible(); - } } void toBrowserTableWidget::enableConstraints(bool enable) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-12 15:20:20
|
Revision: 3118 http://tora.svn.sourceforge.net/tora/?rev=3118&view=rev Author: subik Date: 2008-12-12 15:20:16 +0000 (Fri, 12 Dec 2008) Log Message: ----------- schema browser progress - table browser: DB supported features, new table-triggers tab for mysql Modified Paths: -------------- trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowser.h trunk/tora/src/tobrowsertablewidget.cpp Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-12 14:19:03 UTC (rev 3117) +++ trunk/tora/src/tobrowser.cpp 2008-12-12 15:20:16 UTC (rev 3118) @@ -1732,8 +1732,6 @@ Schema->setFocus(); -// setNewFilter(NULL); - changeConnection(); connect(this, SIGNAL(connectionChange()), @@ -1888,52 +1886,25 @@ // enable/disable main tabs depending on DB m_mainTab->clear(); - m_mainTab->addTab(tableSplitter, tr("T&ables")); - m_mainTab->addTab(viewSplitter, tr("&Views")); - m_mainTab->addTab(indexSplitter, tr("Inde&xes")); + addTab(tableSplitter, tr("T&ables"), + true); + addTab(viewSplitter, tr("&Views"), + !toIsMySQL(connection())); + addTab(indexSplitter, tr("Inde&xes"), + true); + addTab(sequenceSplitter, tr("Se&quences"), + toIsOracle(connection()) || toIsPostgreSQL(connection())); + addTab(synonymSplitter, tr("S&ynonyms"), + toIsOracle(connection())); + addTab(codeSplitter, tr("Cod&e"), + !toIsMySQL(connection())); + addTab(triggerSplitter, tr("Tri&ggers"), + !toIsMySQL(connection())); + addTab(dblinkSplitter, tr("DBLinks"), + toIsOracle(connection())); + addTab(accessSplitter, tr("Access"), + toIsMySQL(connection())); - if (toIsOracle(connection()) || toIsPostgreSQL(connection())) - { - sequenceSplitter->show(); - m_mainTab->addTab(sequenceSplitter, tr("Se&quences")); - } - else - sequenceSplitter->hide(); - - if (toIsOracle(connection())) - { - synonymSplitter->show(); - m_mainTab->addTab(synonymSplitter, tr("S&ynonyms")); - } - else - synonymSplitter->hide(); - - if (!toIsMySQL(connection())) - { - codeSplitter->show(); - m_mainTab->addTab(codeSplitter, tr("Cod&e")); - } - else - codeSplitter->hide(); - - m_mainTab->addTab(triggerSplitter, tr("Tri&ggers")); - - if (toIsOracle(connection())) - { - dblinkSplitter->show(); - m_mainTab->addTab(dblinkSplitter, tr("DBLinks")); - } - else - dblinkSplitter->hide(); - - if (toIsMySQL(connection())) - { - accessSplitter->show(); - m_mainTab->addTab(accessSplitter, tr("Access")); - } - else - accessSplitter->hide(); - foreach (toBrowserBaseWidget * w, m_browsersMap.values()) w->changeConnection(); @@ -1943,6 +1914,14 @@ refresh(); } +void toBrowser::addTab(QSplitter * page, const QString & label, bool enable) +{ + page->setVisible(enable); + if (!enable) + return; + m_mainTab->addTab(page, label); +} + QString toBrowser::currentItemText(int col) { QSplitter * ix = qobject_cast<QSplitter*>(m_mainTab->currentWidget()); Modified: trunk/tora/src/tobrowser.h =================================================================== --- trunk/tora/src/tobrowser.h 2008-12-12 14:19:03 UTC (rev 3117) +++ trunk/tora/src/tobrowser.h 2008-12-12 15:20:16 UTC (rev 3118) @@ -153,19 +153,8 @@ QMap<QSplitter*,toResultTableView*> m_objectsMap; QMap<QSplitter*,toBrowserBaseWidget*> m_browsersMap; - -// QString SecondText; -// toResultTableView *FirstTab; -// toResult *SecondTab; toBrowserFilter *Filter; -// QWidget *CurrentTop; -// toResultData *ViewContent; -// toResultData *TableContent; -// toResultData *AccessContent; - -// std::map<QString, toResultTableView *> Map; -// std::map<QString, toResult *> SecondMap; void setNewFilter(toBrowserFilter *filter); QString schema(void); @@ -183,6 +172,14 @@ */ QString currentItemText(int col = 1); + /*! \brief Add a page to the m_mainTab widget; + \see changeConnection(). + \param page a QSplitter main widget (tableSplitter etc.) + \param label text to display as a tab title + \param enable true when it should be visible. False on missing feature. + */ + void addTab(QSplitter * page, const QString & label, bool enable); + QAction *refreshAct; QAction *FilterButton; QAction *clearFilterAct; @@ -249,9 +246,9 @@ void addUser(void); void dropUser(void); - private slots: - //! \brief Handle main tabwidget and its tabs switch - void mainTab_currentChanged(int); +private slots: + //! \brief Handle main tabwidget and its tabs switch + void mainTab_currentChanged(int); protected: virtual void closeEvent(QCloseEvent *); Modified: trunk/tora/src/tobrowsertablewidget.cpp =================================================================== --- trunk/tora/src/tobrowsertablewidget.cpp 2008-12-12 14:19:03 UTC (rev 3117) +++ trunk/tora/src/tobrowsertablewidget.cpp 2008-12-12 15:20:16 UTC (rev 3118) @@ -282,6 +282,14 @@ "", "", "PostgreSQL"); +static toSQL SQLTableTriggerMysql("toBrowser:TableTrigger", + "SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\n" + " WHERE event_object_schema = :f1<char[101]>\n" + " AND event_object_table = :f2<char[101]>\n" + " ORDER BY trigger_name\n", + "", + "5.0", + "MySQL"); static toSQL SQLTableInfoMysql("toBrowser:TableInformation", "show table status from `:own<noquote>` like :tab", "Display information about a table", @@ -407,14 +415,17 @@ if (toIsOracle(c) || toIsPostgreSQL(c)) addTab(constraintsView, "C&onstraints"); else - constraintsView->setVisible(false); + constraintsView->hide(); if (toIsOracle(c)) addTab(referencesView, "&References"); else - referencesView->setVisible(false); + referencesView->hide(); - addTab(grantsView, "&Grants"); + if (!toIsMySQL(c)) + addTab(grantsView, "&Grants"); + else + grantsView->hide(); addTab(triggersView, "Triggers"); @@ -425,7 +436,7 @@ if (toIsSapDB(c)) addTab(statisticsView, "Statistics"); else - statisticsView->setVisible(false); + statisticsView->hide(); if (toIsOracle(c)) { @@ -434,11 +445,14 @@ } else { - partitionsView->setVisible(false); - extentsView->setVisible(false); + partitionsView->hide(); + extentsView->hide(); } - addTab(extractView, "Script"); + if (!toIsMySQL(c)) + addTab(extractView, "Script"); + else + extractView->hide(); } void toBrowserTableWidget::enableConstraints(bool enable) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mrj...@us...> - 2008-12-13 19:12:35
|
Revision: 3121 http://tora.svn.sourceforge.net/tora/?rev=3121&view=rev Author: mrjohnson0 Date: 2008-12-13 19:12:30 +0000 (Sat, 13 Dec 2008) Log Message: ----------- directory docklet should update when window changes and on file save Modified Paths: -------------- trunk/tora/src/docklets/toviewdirectory.cpp trunk/tora/src/docklets/toviewdirectory.h trunk/tora/src/tomarkedtext.cpp trunk/tora/src/tomarkedtext.h Modified: trunk/tora/src/docklets/toviewdirectory.cpp =================================================================== --- trunk/tora/src/docklets/toviewdirectory.cpp 2008-12-13 18:52:44 UTC (rev 3120) +++ trunk/tora/src/docklets/toviewdirectory.cpp 2008-12-13 19:12:30 UTC (rev 3121) @@ -48,7 +48,10 @@ #include "totool.h" #include "toconfiguration.h" +#include <QMdiArea> +#include <QMdiSubWindow> + REGISTER_VIEW("Directory", toViewDirectory); @@ -76,6 +79,11 @@ this, SLOT(handleToolAdded(toToolWidget *))); + connect(toMainWidget()->workspace(), + SIGNAL(subWindowActivated(QMdiSubWindow *)), + this, + SLOT(windowActivated(QMdiSubWindow *))); + setWidget(ListView); // default to the default file in worksheet editor if specified @@ -103,7 +111,9 @@ if(!dir.isDir()) dir = QFileInfo(dir.absoluteDir().absolutePath()); - ListView->setRootIndex(Model->index(dir.absoluteFilePath())); + QModelIndex parent = Model->index(dir.absoluteFilePath()); + ListView->setRootIndex(parent); + Model->refresh(parent); } @@ -137,6 +147,11 @@ SIGNAL(fileOpened(QString)), this, SLOT(showFile(QString))); + + connect(sheet->editor(), + SIGNAL(fileSaved(QString)), + this, + SLOT(showFile(QString))); } @@ -156,3 +171,17 @@ ListView->setCurrentIndex(index); } + +void toViewDirectory::windowActivated(QMdiSubWindow *w) +{ + if(!w || !w->widget()) + return; + + toWorksheet *sheet = dynamic_cast<toWorksheet *>(w->widget()); + if(!sheet) + return; + + QString file = sheet->editor()->filename(); + if(!file.isEmpty()) + showFile(file); +} Modified: trunk/tora/src/docklets/toviewdirectory.h =================================================================== --- trunk/tora/src/docklets/toviewdirectory.h 2008-12-13 18:52:44 UTC (rev 3120) +++ trunk/tora/src/docklets/toviewdirectory.h 2008-12-13 19:12:30 UTC (rev 3121) @@ -49,8 +49,8 @@ #include <QDirModel> class toToolWidget; +class QMdiSubWindow; - class toViewDirectory : public toDocklet { Q_OBJECT; @@ -90,6 +90,8 @@ void handleToolAdded(toToolWidget *); void showFile(QString); + + void windowActivated(QMdiSubWindow *w); }; Modified: trunk/tora/src/tomarkedtext.cpp =================================================================== --- trunk/tora/src/tomarkedtext.cpp 2008-12-13 18:52:44 UTC (rev 3120) +++ trunk/tora/src/tomarkedtext.cpp 2008-12-13 19:12:30 UTC (rev 3121) @@ -296,6 +296,7 @@ toMainWidget()->addRecentFile(fn); setFilename(fn); setModified(false); + emit fileSaved(fn); return true; } return false; Modified: trunk/tora/src/tomarkedtext.h =================================================================== --- trunk/tora/src/tomarkedtext.h 2008-12-13 18:52:44 UTC (rev 3120) +++ trunk/tora/src/tomarkedtext.h 2008-12-13 19:12:30 UTC (rev 3121) @@ -241,6 +241,7 @@ // emitted when a new file is opened void fileOpened(void); void fileOpened(QString file); + void fileSaved(QString file); protected: virtual void newLine(void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mrj...@us...> - 2008-12-13 23:28:46
|
Revision: 3123 http://tora.svn.sourceforge.net/tora/?rev=3123&view=rev Author: mrjohnson0 Date: 2008-12-13 23:28:44 +0000 (Sat, 13 Dec 2008) Log Message: ----------- port session tool to model/view Modified Paths: -------------- trunk/tora/src/toresulttableview.cpp trunk/tora/src/toresulttableview.h trunk/tora/src/tosession.cpp trunk/tora/src/tosession.h Modified: trunk/tora/src/toresulttableview.cpp =================================================================== --- trunk/tora/src/toresulttableview.cpp 2008-12-13 23:25:29 UTC (rev 3122) +++ trunk/tora/src/toresulttableview.cpp 2008-12-13 23:28:44 UTC (rev 3123) @@ -56,44 +56,15 @@ #include "toworkingwidget.h" #include <QClipboard> -#include <QScrollBar> -#include <QItemDelegate> -#include <QSize> #include <QFont> #include <QFontMetrics> +#include <QHBoxLayout> #include <QMessageBox> +#include <QScrollBar> +#include <QSize> #include <QVBoxLayout> -#include <QHBoxLayout> -/** - * This is a simple class for providing sensible size hints to the - * view. - * - */ -class toResultTableViewDelegate : public QItemDelegate -{ - static const int maxWidth = 200; // the maximum size to grow a column - -public: - toResultTableViewDelegate(QObject *parent = 0) - : QItemDelegate(parent) - { - } - - - virtual QSize sizeHint(const QStyleOptionViewItem &option, - const QModelIndex &index) const - { - QSize size = QItemDelegate::sizeHint(option, index); - if (size.width() > maxWidth) - size.setWidth(maxWidth); - - return size; - } -}; - - toResultTableView::toResultTableView(QWidget * parent) : QTableView(parent), toResult(), @@ -156,8 +127,10 @@ connect(Working, SIGNAL(stop()), this, SLOT(stop())); Working->hide(); // hide by default - toResultTableViewDelegate *del = new toResultTableViewDelegate(this); - setItemDelegate(del); + // set item delegate if default. Don't replace custom set delegate + QAbstractItemDelegate *del = itemDelegate(); + if(dynamic_cast<toResultTableViewDelegate *>(del) == 0) + setItemDelegate(new toResultTableViewDelegate(this)); createActions(); Modified: trunk/tora/src/toresulttableview.h =================================================================== --- trunk/tora/src/toresulttableview.h 2008-12-13 23:25:29 UTC (rev 3122) +++ trunk/tora/src/toresulttableview.h 2008-12-13 23:28:44 UTC (rev 3123) @@ -50,15 +50,16 @@ #include "toresultmodel.h" #include "toeditwidget.h" -#include <QObject> #include <QAbstractTableModel> -#include <QTableView> -#include <QModelIndex> +#include <QHeaderView> +#include <QItemDelegate> +#include <QLabel> #include <QList> -#include <QHeaderView> #include <QMenu> -#include <QLabel> +#include <QModelIndex> +#include <QObject> #include <QPushButton> +#include <QTableView> class toResultStats; class toViewFilter; @@ -66,6 +67,34 @@ class toWorkingWidget; +/** + * This is a simple class for providing sensible size hints to the + * view. + * + */ +class toResultTableViewDelegate : public QItemDelegate +{ + static const int maxWidth = 200; // the maximum size to grow a column + +public: + toResultTableViewDelegate(QObject *parent = 0) + : QItemDelegate(parent) + { + } + + + virtual QSize sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const + { + QSize size = QItemDelegate::sizeHint(option, index); + if (size.width() > maxWidth) + size.setWidth(maxWidth); + + return size; + } +}; + + class toResultTableView : public QTableView, public toResult, public toEditWidget Modified: trunk/tora/src/tosession.cpp =================================================================== --- trunk/tora/src/tosession.cpp 2008-12-13 23:25:29 UTC (rev 3122) +++ trunk/tora/src/tosession.cpp 2008-12-13 23:28:44 UTC (rev 3123) @@ -1,4 +1,3 @@ - /* BEGIN_COMMON_COPYRIGHT_HEADER * * TOra - An Oracle Toolkit for DBA's and developers @@ -83,6 +82,7 @@ #include "icons/tosession.xpm" #include "icons/filter.xpm" + class toSessionTool : public toTool { protected: @@ -113,21 +113,23 @@ static toSessionTool SessionTool; -static toSQL SQLConnectInfo("toSession:ConnectInfo", - "select authentication_type,osuser,network_service_banner\n" - " from v$session_connect_info where sid = :f1<char[101]>", - "Get connection info for a session"); +static toSQL SQLConnectInfo( + "toSession:ConnectInfo", + "select authentication_type,osuser,network_service_banner\n" + " from v$session_connect_info where sid = :f1<char[101]>", + "Get connection info for a session"); -static toSQL SQLLockedObject("toSession:LockedObject", - "select b.Object_Name \"Object Name\",\n" - " b.Object_Type \"Type\",\n" - " DECODE(a.locked_mode,0,'None',1,'Null',2,'Row-S',\n" - " 3,'Row-X',4,'Share',5,'S/Row-X',\n" - " 6,'Exclusive',a.Locked_Mode) \"Locked Mode\"\n" - " from v$locked_object a,sys.all_objects b\n" - " where a.object_id = b.object_id\n" - " and a.session_id = :f1<char[101]>", - "Display info about objects locked by this session"); +static toSQL SQLLockedObject( + "toSession:LockedObject", + "select b.Object_Name \"Object Name\",\n" + " b.Object_Type \"Type\",\n" + " DECODE(a.locked_mode,0,'None',1,'Null',2,'Row-S',\n" + " 3,'Row-X',4,'Share',5,'S/Row-X',\n" + " 6,'Exclusive',a.Locked_Mode) \"Locked Mode\"\n" + " from v$locked_object a,sys.all_objects b\n" + " where a.object_id = b.object_id\n" + " and a.session_id = :f1<char[101]>", + "Display info about objects locked by this session"); static toSQL SQLLockedObjectPg( "toSession:LockedObject", @@ -148,95 +150,102 @@ "", "PostgreSQL"); -static toSQL SQLOpenCursors("toSession:OpenCursor", - "select SQL_Text \"SQL\", Address||':'||Hash_Value \" Address\"\n" - " from v$open_cursor where sid = :f1<char[101]>", - "Display open cursors of this session"); -static toSQL SQLSessionWait(TO_SESSION_WAIT, - "select sysdate,\n" - " cpu*10 \"CPU\",\n" - " parallel*10 \"Parallel execution\",\n" - " filewrite*10 \"DB File Write\",\n" - " writecomplete*10 \"Write Complete\",\n" - " fileread*10 \"DB File Read\",\n" - " singleread*10 \"DB Single File Read\",\n" - " control*10 \"Control File I/O\",\n" - " direct*10 \"Direct I/O\",\n" - " log*10 \"Log file\",\n" - " net*10 \"SQL*Net\",\n" - " (total-parallel-filewrite-writecomplete-fileread-singleread-control-direct-log-net)*10 \"Other\"\n" - " from (select SUM(DECODE(SUBSTR(event,1,2),'PX',time_waited,0))-SUM(DECODE(event,'PX Idle Wait',time_waited,0)) parallel,\n" - " SUM(DECODE(event,'db file parallel write',time_waited,'db file single write',time_waited,0)) filewrite,\n" - " SUM(DECODE(event,'write complete waits',time_waited,NULL)) writecomplete,\n" - " SUM(DECODE(event,'db file parallel read',time_waited,'db file sequential read',time_waited,0)) fileread,\n" - " SUM(DECODE(event,'db file scattered read',time_waited,0)) singleread,\n" - " SUM(DECODE(SUBSTR(event,1,12),'control file',time_waited,0)) control,\n" - " SUM(DECODE(SUBSTR(event,1,11),'direct path',time_waited,0)) direct,\n" - " SUM(DECODE(SUBSTR(event,1,3),'log',time_waited,0)) log,\n" - " SUM(DECODE(SUBSTR(event,1,7),'SQL*Net',time_waited,0))-SUM(DECODE(event,'SQL*Net message from client',time_waited,0)) net,\n" - " SUM(DECODE(event,'PX Idle Wait',0,'SQL*Net message from client',0,time_waited)) total\n" - " from v$session_event where sid in (select b.sid from v$session a,v$session b where a.sid = :f1<char[101]> and a.audsid = b.audsid)),\n" - " (select value*10 cpu from v$sesstat a\n" - " where statistic# = 12 and a.sid in (select b.sid from v$session a,v$session b where a.sid = :f1<char[101]> and a.audsid = b.audsid))", - "Used to generate chart for session wait time."); -static toSQL SQLSessionIO(TO_SESSION_IO, - "select sysdate,\n" - " sum(block_gets) \"Block gets\",\n" - " sum(consistent_gets) \"Consistent gets\",\n" - " sum(physical_reads) \"Physical reads\",\n" - " sum(block_changes) \"Block changes\",\n" - " sum(consistent_changes) \"Consistent changes\"\n" - " from v$sess_io where sid in (select b.sid from v$session a,v$session b where a.sid = :f1<char[101]> and a.audsid = b.audsid)", - "Display chart of session generated I/O"); +static toSQL SQLOpenCursors( + "toSession:OpenCursor", + "select SQL_Text \"SQL\", Address||':'||Hash_Value \" Address\"\n" + " from v$open_cursor where sid = :f1<char[101]>", + "Display open cursors of this session"); -static toSQL SQLAccessedObjects("toSession:AccessedObjects", - "SELECT owner,\n" - " OBJECT,\n" - " TYPE FROM v$access\n" - " WHERE sid=:f1<CHAR [101]>\n" - " ORDER BY owner,\n" - " OBJECT,\n" - " TYPE", - "Which objects are accessed by the current session"); +static toSQL SQLSessionWait( + TO_SESSION_WAIT, + "select sysdate,\n" + " cpu*10 \"CPU\",\n" + " parallel*10 \"Parallel execution\",\n" + " filewrite*10 \"DB File Write\",\n" + " writecomplete*10 \"Write Complete\",\n" + " fileread*10 \"DB File Read\",\n" + " singleread*10 \"DB Single File Read\",\n" + " control*10 \"Control File I/O\",\n" + " direct*10 \"Direct I/O\",\n" + " log*10 \"Log file\",\n" + " net*10 \"SQL*Net\",\n" + " (total-parallel-filewrite-writecomplete-fileread-singleread-control-direct-log-net)*10 \"Other\"\n" + " from (select SUM(DECODE(SUBSTR(event,1,2),'PX',time_waited,0))-SUM(DECODE(event,'PX Idle Wait',time_waited,0)) parallel,\n" + " SUM(DECODE(event,'db file parallel write',time_waited,'db file single write',time_waited,0)) filewrite,\n" + " SUM(DECODE(event,'write complete waits',time_waited,NULL)) writecomplete,\n" + " SUM(DECODE(event,'db file parallel read',time_waited,'db file sequential read',time_waited,0)) fileread,\n" + " SUM(DECODE(event,'db file scattered read',time_waited,0)) singleread,\n" + " SUM(DECODE(SUBSTR(event,1,12),'control file',time_waited,0)) control,\n" + " SUM(DECODE(SUBSTR(event,1,11),'direct path',time_waited,0)) direct,\n" + " SUM(DECODE(SUBSTR(event,1,3),'log',time_waited,0)) log,\n" + " SUM(DECODE(SUBSTR(event,1,7),'SQL*Net',time_waited,0))-SUM(DECODE(event,'SQL*Net message from client',time_waited,0)) net,\n" + " SUM(DECODE(event,'PX Idle Wait',0,'SQL*Net message from client',0,time_waited)) total\n" + " from v$session_event where sid in (select b.sid from v$session a,v$session b where a.sid = :f1<char[101]> and a.audsid = b.audsid)),\n" + " (select value*10 cpu from v$sesstat a\n" + " where statistic# = 12 and a.sid in (select b.sid from v$session a,v$session b where a.sid = :f1<char[101]> and a.audsid = b.audsid))", + "Used to generate chart for session wait time."); -static toSQL SQLSessions("toSession:ListSession", - "SELECT a.Sid \"-Id\",\n" - " a.Serial# \"-Serial#\",\n" - " a.SchemaName \"Schema\",\n" - " a.Status \"Status\",\n" - " a.Server \"Server\",\n" - " a.OsUser \"Osuser\",\n" - " a.Machine \"Machine\",\n" - " a.Program \"Program\",\n" - " a.Type \"Type\",\n" - " a.Module \"Module\",\n" - " a.Action \"Action\",\n" - " a.Client_Info \"Client Info\",\n" - " b.Block_Gets \"-Block Gets\",\n" - " b.Consistent_Gets \"-Consistent Gets\",\n" - " b.Physical_Reads \"-Physical Reads\",\n" - " b.Block_Changes \"-Block Changes\",\n" - " b.Consistent_Changes \"-Consistent Changes\",\n" - " c.Value*10 \"-CPU (ms)\",\n" - " a.last_call_et \"Last SQL\",\n" - " a.Process \"-Client PID\",\n" - " e.SPid \"-Server PID\",\n" - " d.sql_text \"Current statement\",\n" - " a.SQL_Address||':'||a.SQL_Hash_Value \" SQL Address\",\n" - " a.Prev_SQL_Addr||':'||a.Prev_Hash_Value \" Prev SQl Address\"\n" - " FROM v$session a,\n" - " v$sess_io b,\n" - " v$sesstat c,\n" - " v$sql d,\n" - " v$process e\n" - " WHERE a.sid = b.sid(+)\n" - " AND a.sid = c.sid(+) AND (c.statistic# = 12 OR c.statistic# IS NULL)\n" - " AND a.sql_address = d.address(+) AND a.sql_hash_value = d.hash_value(+)\n" - " AND (d.child_number = 0 OR d.child_number IS NULL)\n" - " AND a.paddr = e.addr(+)\n" - "%1 ORDER BY a.Sid", - "List sessions, must have same number of columns and the first and last 2 must be the same"); +static toSQL SQLSessionIO( + TO_SESSION_IO, + "select sysdate,\n" + " sum(block_gets) \"Block gets\",\n" + " sum(consistent_gets) \"Consistent gets\",\n" + " sum(physical_reads) \"Physical reads\",\n" + " sum(block_changes) \"Block changes\",\n" + " sum(consistent_changes) \"Consistent changes\"\n" + " from v$sess_io where sid in (select b.sid from v$session a,v$session b where a.sid = :f1<char[101]> and a.audsid = b.audsid)", + "Display chart of session generated I/O"); +static toSQL SQLAccessedObjects( + "toSession:AccessedObjects", + "SELECT owner,\n" + " OBJECT,\n" + " TYPE FROM v$access\n" + " WHERE sid=:f1<CHAR [101]>\n" + " ORDER BY owner,\n" + " OBJECT,\n" + " TYPE", + "Which objects are accessed by the current session"); + +static toSQL SQLSessions( + "toSession:ListSession", + "SELECT a.Sid \"Id\",\n" + " a.Serial# \"Serial#\",\n" + " a.SchemaName \"Schema\",\n" + " a.Status \"Status\",\n" + " a.Server \"Server\",\n" + " a.OsUser \"Osuser\",\n" + " a.Machine \"Machine\",\n" + " a.Program \"Program\",\n" + " a.Type \"Type\",\n" + " a.Module \"Module\",\n" + " a.Action \"Action\",\n" + " a.Client_Info \"Client Info\",\n" + " b.Block_Gets \"Block Gets\",\n" + " b.Consistent_Gets \"Consistent Gets\",\n" + " b.Physical_Reads \"Physical Reads\",\n" + " b.Block_Changes \"Block Changes\",\n" + " b.Consistent_Changes \"Consistent Changes\",\n" + " c.Value*10 \"CPU (ms)\",\n" + " a.last_call_et \"Last SQL\",\n" + " a.Process \"Client PID\",\n" + " e.SPid \"Server PID\",\n" + " d.sql_text \"Current statement\",\n" + " a.SQL_Address||':'||a.SQL_Hash_Value \" SQL Address\",\n" + " a.Prev_SQL_Addr||':'||a.Prev_Hash_Value \" Prev SQl Address\"\n" + " FROM v$session a,\n" + " v$sess_io b,\n" + " v$sesstat c,\n" + " v$sql d,\n" + " v$process e\n" + " WHERE a.sid = b.sid(+)\n" + " AND a.sid = c.sid(+) AND (c.statistic# = 12 OR c.statistic# IS NULL)\n" + " AND a.sql_address = d.address(+) AND a.sql_hash_value = d.hash_value(+)\n" + " AND (d.child_number = 0 OR d.child_number IS NULL)\n" + " AND a.paddr = e.addr(+)\n" + "%1 ORDER BY a.Sid", + "List sessions, must have same number of columns and the first and last 2 must be the same"); + static toSQL SQLSessionsPg( "toSession:ListSession", "SELECT pg_stat_get_backend_pid ( s.backendid ) AS \"Backend ID\",\n" @@ -247,7 +256,9 @@ " pg_stat_get_backend_client_port ( s.backendid ) AS \"Port\",\n" " pg_stat_get_backend_activity_start ( s.backendid ) AS \"Started\",\n" " pg_stat_get_backend_waiting ( s.backendid ) AS \"Waiting\",\n" - " pg_stat_get_backend_activity ( s.backendid ) AS \"Current Query\"\n" + " pg_stat_get_backend_activity ( s.backendid ) AS \"Current Query\",\n" + " s.backendid as \" current\",\n" + " null as \" previous\"\n" " FROM ( SELECT pg_stat_get_backend_idset ( ) AS backendid ) AS s", "", "", @@ -319,7 +330,7 @@ QIcon(QPixmap(const_cast<const char**>(kill_xpm))), tr("Cancel selected backend"), this, - SLOT(cancelBackend(void))); + SLOT(cancelBackend())); } toolbar->addWidget( @@ -331,27 +342,28 @@ this, SLOT(changeRefresh(const QString &))); toolbar->addWidget(Refresh); - if (toIsOracle(connection)) - { - toolbar->addSeparator(); + // TODO +// if (toIsOracle(connection)) +// { +// toolbar->addSeparator(); - QToolButton *btn = new QToolButton(toolbar); - btn->setCheckable(true); - btn->setIcon(QIcon(filter_xpm)); - connect(btn, SIGNAL(toggled(bool)), this, SLOT(excludeSelection(bool))); - btn->setToolTip(tr("Exclude selected sessions")); - toolbar->addWidget(btn); +// QToolButton *btn = new QToolButton(toolbar); +// btn->setCheckable(true); +// btn->setIcon(QIcon(filter_xpm)); +// connect(btn, SIGNAL(toggled(bool)), this, SLOT(excludeSelection(bool))); +// btn->setToolTip(tr("Exclude selected sessions")); +// toolbar->addWidget(btn); - toolbar->addAction(QIcon(QPixmap(const_cast<const char**>(add_xpm))), - tr("Select all sessions"), - this, - SLOT(selectAll(void))); +// toolbar->addAction(QIcon(QPixmap(const_cast<const char**>(add_xpm))), +// tr("Select all sessions"), +// this, +// SLOT(selectAll(void))); - toolbar->addAction(QIcon(QPixmap(const_cast<const char**>(minus_xpm))), - tr("Deselect all sessions"), - this, - SLOT(selectNone(void))); - } +// toolbar->addAction(QIcon(QPixmap(const_cast<const char**>(minus_xpm))), +// tr("Deselect all sessions"), +// this, +// SLOT(selectNone(void))); +// } toolbar->addWidget(new toSpacer()); @@ -364,13 +376,15 @@ QSplitter *splitter = new QSplitter(Qt::Vertical, this); layout()->addWidget(splitter); - Sessions = new toSessionList(splitter); +// Sessions = new toSessionList(splitter); + Sessions = new toResultTableView(true, + false, + splitter, + "session list", + false); Sessions->setAlternatingRowColors(true); + Sessions->horizontalHeader()->setStretchLastSection(true); - QList<int> list; - list.append(75); - splitter->setSizes(list); - Sessions->setReadAll(true); connect(Sessions, SIGNAL(done()), this, SLOT(done())); @@ -402,7 +416,8 @@ Waits = new toWaitEvents(0, ResultTab, "waits"); ResultTab->addTab(Waits, tr("Wait events")); - ConnectInfo = new toResultLong(true, false, toQuery::Background, ResultTab); + ConnectInfo = new toResultTableView(true, false, ResultTab); + ConnectInfo->horizontalHeader()->setStretchLastSection(true); ConnectInfo->setSQL(SQLConnectInfo); ResultTab->addTab(ConnectInfo, tr("Connect Info")); @@ -413,7 +428,7 @@ ResultTab->addTab(LockedObjects, tr("Locked Objects")); LockedObjects->setSQL(SQLLockedObject); - AccessedObjects = new toResultLong(false, false, toQuery::Background, ResultTab); + AccessedObjects = new toResultTableView(false, false, ResultTab); AccessedObjects->setSQL(SQLAccessedObjects); ResultTab->addTab(AccessedObjects, tr("Accessing")); @@ -422,13 +437,16 @@ OpenSplitter = new QSplitter(Qt::Horizontal, ResultTab); ResultTab->addTab(OpenSplitter, tr("Open Cursors")); - OpenCursors = new toResultLong(false, true, toQuery::Background, OpenSplitter); + OpenCursors = new toResultTableView(false, true, OpenSplitter); OpenCursors->setSQL(SQLOpenCursors); + OpenCursors->setSelectionBehavior(QAbstractItemView::SelectRows); + + connect(OpenCursors, + SIGNAL(selectionChanged()), + this, + SLOT(changeCursor())); + OpenStatement = new toSGAStatement(OpenSplitter); - - OpenCursors->setSelectionMode(toTreeWidget::Single); - connect(OpenCursors, SIGNAL(selectionChanged(toTreeWidgetItem *)), - this, SLOT(changeCursor(toTreeWidgetItem *))); } else { @@ -451,12 +469,17 @@ LockedObjects->setSQL(SQLLockedObject); } - Sessions->setSelectionMode(toTreeWidget::Single); - connect(Sessions, SIGNAL(selectionChanged(toTreeWidgetItem *)), - this, SLOT(changeItem(toTreeWidgetItem *))); - connect(ResultTab, SIGNAL(currentChanged(int)), - this, SLOT(changeTab(int))); + Sessions->setSelectionBehavior(QAbstractItemView::SelectRows); + connect(Sessions, + SIGNAL(selectionChanged()), + this, + SLOT(changeItem())); + connect(ResultTab, + SIGNAL(currentChanged(int)), + this, + SLOT(changeTab(int))); + try { connect(timer(), SIGNAL(timeout(void)), this, SLOT(refreshTabs(void))); @@ -471,6 +494,11 @@ this, SLOT(windowActivated(QMdiSubWindow *))); refresh(); + QList<int> list; + list.append(999); + list.append(1); + splitter->setSizes(list); + setFocusProxy(Sessions); } @@ -481,102 +509,41 @@ void toSession::excludeSelection(bool tgl) { - toSessionList::sessionFilter *filt = - dynamic_cast<toSessionList::sessionFilter *>(Sessions->filter()); - if (filt) - { - filt->setShow(!tgl); - refresh(); - } + // TODO +// toSessionList::sessionFilter *filt = +// dynamic_cast<toSessionList::sessionFilter *>(Sessions->filter()); +// if (filt) +// { +// filt->setShow(!tgl); +// refresh(); +// } } void toSession::selectAll(void) { - for (toTreeWidgetItem *item = Sessions->firstChild(); - item; - item = item->nextSibling()) - { - toResultViewCheck * chk = dynamic_cast<toResultViewCheck *>(item); - if (chk) - chk->setOn(true); - } + // TODO +// for (toTreeWidgetItem *item = Sessions->firstChild(); +// item; +// item = item->nextSibling()) +// { +// toResultViewCheck * chk = dynamic_cast<toResultViewCheck *>(item); +// if (chk) +// chk->setOn(true); +// } } void toSession::selectNone(void) { - for (toTreeWidgetItem *item = Sessions->firstChild();item;item = item->nextSibling()) - { - toResultViewCheck * chk = dynamic_cast<toResultViewCheck *>(item); - if (chk) - chk->setOn(false); - } + // TODO +// for (toTreeWidgetItem *item = Sessions->firstChild();item;item = item->nextSibling()) +// { +// toResultViewCheck * chk = dynamic_cast<toResultViewCheck *>(item); +// if (chk) +// chk->setOn(false); +// } } -toTreeWidgetItem *toSessionList::createItem(toTreeWidgetItem *last, const QString &str) -{ - sessionFilter *filt = dynamic_cast<sessionFilter *>(filter()); - if (filt && filt->show() && toIsOracle(connection())) - return new toResultViewCheck(this, last, str, toTreeWidgetCheck::CheckBox); - else - return new toResultViewItem(this, last, str); -} -void toSessionList::updateFilter() -{ - sessionFilter *filt = dynamic_cast<sessionFilter *>(filter()); - if (filt) - filt->updateList(this); -} - -bool toSessionList::sessionFilter::check(const toTreeWidgetItem *item) -{ - if (!OnlyDatabase.isEmpty()) - { - if (OnlyDatabase == "/") - { - if (item->text(4) == "Sleep") - return false; - } - else if (OnlyDatabase != item->text(3)) - return false; - } - - sessionID serial(item->text(0).toInt(), item->text(1).toInt()); - bool checked = false; - for (std::list<sessionID>::iterator i = Serials.begin();i != Serials.end();i++) - if ((*i) == serial) - { - checked = true; - break; - } - const toResultViewCheck *chk = dynamic_cast<const toResultViewCheck *>(item); - if (chk) - { - const_cast<toResultViewCheck *>(chk)->setOn(checked); - return true; - } - return !checked; -} - -void toSessionList::sessionFilter::updateList(toResultLong *lst) -{ - bool first = true; - for (toTreeWidgetItem *item = lst->firstChild();item;item = item->nextSibling()) - { - toResultViewCheck * chk = dynamic_cast<toResultViewCheck *>(item); - if (chk) - { - if (first) - { - Serials.clear(); - first = false; - } - if (chk->isOn()) - Serials.insert(Serials.end(), sessionID(item->text(0).toInt(), item->text(1).toInt())); - } - } -} - void toSession::windowActivated(QMdiSubWindow *widget) { if (!widget) @@ -623,11 +590,11 @@ { try { - toTreeWidgetItem *item = Sessions->selectedItem(); - if (item) + QModelIndex item = Sessions->selectedIndex(); + if(item.isValid()) { - Session = item->text(0); - Serial = item->text(1); + Session = item.data().toString(); + Serial = item.data().toString(); } else Session = Serial = QString::null; @@ -658,25 +625,34 @@ void toSession::done(void) { - int system = 0, total = 0, active = 0; - for (toTreeWidgetItem *item = Sessions->firstChild(); - item; - item = item->nextSibling()) + int system = 0; + int total = 0; + int active = 0; + + for (toResultTableView::iterator it(Sessions); (*it).isValid(); it++) { - if (item->text(0) == Session && - item->text(1) == Serial) + QString session = Sessions->model()->data((*it).row(), 1).toString(); + QString serial = Sessions->model()->data((*it).row(), 2).toString(); + QString user = Sessions->model()->data((*it).row(), 9).toString(); + QString act = Sessions->model()->data((*it).row(), 4).toString(); + + if(session == Session && serial == Serial) { - Sessions->setSelected(item, true); + Sessions->selectionModel()->select( + QItemSelection(*it, *it), + QItemSelectionModel::ClearAndSelect); + Sessions->setCurrentIndex(*it); } + total++; - if (item->text(8) != "USER") + if(user != "USER") system++; - else if (item->text(3) == "ACTIVE") + else if(act == "ACTIVE") active++; } + Total->setText(QString("Total <B>%1</B> (Active <B>%3</B>, System <B>%2</B>)") .arg(total).arg(system).arg(active)); - Sessions->resizeColumnsToContents(); } void toSession::enableStatistics(bool enable) @@ -703,130 +679,153 @@ if (tab != CurrentTab) { CurrentTab = tab; - toTreeWidgetItem *item = Sessions->selectedItem(); - if (item) + QModelIndex item = Sessions->selectedIndex(); + + if(!item.isValid()) + return; + + QString connectionId = item.data().toString(); + QModelIndex index = Sessions->model()->index(item.row(), 2); + QString serial = index.data().toString(); + + if (CurrentTab == StatisticSplitter) { - if (CurrentTab == StatisticSplitter) + int ses = connectionId.toInt(); + try { - int ses = item->text(0).toInt(); - try + SessionStatistics->changeSession(ses); + } + TOCATCH; + } + else if (CurrentTab == ConnectInfo) + { + ConnectInfo->clearParams(); + ConnectInfo->changeParams(connectionId); + } + else if (CurrentTab == LongOps) + { + LongOps->clearParams(); + LongOps->changeParams(connectionId, serial); + } + else if (CurrentTab == PendingLocks) + { + PendingLocks->clearParams(); + PendingLocks->query(connectionId); + } + else if (CurrentTab == OpenSplitter) + { + QModelIndex openitem = OpenCursors->selectedIndex(2); + QString address; + if(openitem.isValid()) + address = openitem.data().toString(); + OpenCursors->clearParams(); + OpenCursors->changeParams(connectionId); + if (!address.isEmpty()) + { + for (toResultTableView::iterator it(OpenCursors); (*it).isValid(); it++) { - SessionStatistics->changeSession(ses); + if(address == OpenCursors->model()->data(*it).toString()) + { + OpenCursors->selectionModel()->select( + QItemSelection(*it, *it), + QItemSelectionModel::ClearAndSelect); + OpenCursors->setCurrentIndex(*it); + } } - TOCATCH; } - else if (CurrentTab == ConnectInfo) - { - ConnectInfo->clearParams(); - ConnectInfo->changeParams(item->text(0)); - } - else if (CurrentTab == LongOps) - { - LongOps->clearParams(); - LongOps->changeParams(item->text(0), item->text(1)); - } - else if (CurrentTab == PendingLocks) - { - PendingLocks->clearParams(); - PendingLocks->query(item->text(0)); - } - else if (CurrentTab == OpenSplitter) - { - toTreeWidgetItem *openitem = OpenCursors->currentItem(); - QString address; - if (openitem) - address = openitem->text(2); - OpenCursors->clearParams(); - OpenCursors->changeParams(item->text(0)); - if (!address.isEmpty()) - for (openitem = OpenCursors->firstChild(); - openitem;openitem = openitem->nextSibling()) - if (address == openitem->text(2)) - { - OpenCursors->setSelected(item, true); - break; - } - } - else if (CurrentTab == CurrentStatement) - { - CurrentStatement->changeAddress(item->text(Sessions->columns() + 0)); - } - else if (CurrentTab == AccessedObjects) - { - AccessedObjects->clearParams(); - AccessedObjects->changeParams(item->text(0)); - } - else if (CurrentTab == LockedObjects) - { - LockedObjects->clearParams(); - LockedObjects->changeParams(item->text(0)); - } - else if (CurrentTab == PreviousStatement) - { - PreviousStatement->changeAddress(item->text(Sessions->columns() + 1)); - } } + else if (CurrentTab == CurrentStatement) + { + QModelIndex sindex = Sessions->model()->index( + item.row(), + Sessions->model()->columnCount() - 2); + if(sindex.isValid()) + CurrentStatement->changeAddress(sindex.data().toString()); + } + else if (CurrentTab == AccessedObjects) + { + AccessedObjects->clearParams(); + AccessedObjects->changeParams(connectionId); + } + else if (CurrentTab == LockedObjects) + { + LockedObjects->clearParams(); + LockedObjects->changeParams(connectionId); + } + else if (CurrentTab == PreviousStatement) + { + QModelIndex sindex = Sessions->model()->index( + item.row(), + Sessions->model()->columnCount() - 1); + if(sindex.isValid()) + PreviousStatement->changeAddress(sindex.data().toString()); + } } } -void toSession::changeCursor(toTreeWidgetItem *item) +void toSession::changeCursor() { - if (item) - OpenStatement->changeAddress(item->text(2)); + QModelIndex item = OpenCursors->selectedIndex(2); + if (item.isValid()) + OpenStatement->changeAddress(item.data().toString()); } void toSession::cancelBackend() { - toTreeWidgetItem *item = Sessions->selectedItem(); - if (item) + QModelIndex item = Sessions->selectedIndex(); + if(!item.isValid()) + return; + + try { - try - { - connection().execute( - QString("SELECT pg_cancel_backend ( %1 )").arg(item->text(0))); - } - TOCATCH; + connection().execute( + QString("SELECT pg_cancel_backend ( %1 )").arg(item.data().toString())); } + TOCATCH; } void toSession::disconnectSession() { - toTreeWidgetItem *item = Sessions->selectedItem(); - if (item) + QModelIndex item = Sessions->selectedIndex(); + if(!item.isValid()) + return; + + QString connectionId = item.data().toString(); + QModelIndex index = Sessions->model()->index(item.row(), 2); + QString serial = index.data().toString(); + + QString sess = QString::fromLatin1("'"); + sess.append(connectionId); + sess.append(QString::fromLatin1(",")); + sess.append(serial); + sess.append(QString::fromLatin1("'")); + QString str(tr("Let current transaction finish before " + "disconnecting this session?")); + QString sql; + switch (TOMessageBox::warning(this, + tr("Commit work?"), + str, + tr("&Yes"), + tr("&No"), + tr("Cancel"))) { - QString sess = QString::fromLatin1("'"); - sess.append(item->text(0)); - sess.append(QString::fromLatin1(",")); - sess.append(item->text(1)); - sess.append(QString::fromLatin1("'")); - QString str(tr("Let current transaction finish before " - "disconnecting this session?")); - QString sql; - switch (TOMessageBox::warning(this, - tr("Commit work?"), - str, - tr("&Yes"), - tr("&No"), - tr("Cancel"))) - { - case 0: - sql = QString::fromLatin1("ALTER SYSTEM DISCONNECT SESSION "); - sql.append(sess); - sql.append(QString::fromLatin1(" POST_TRANSACTION")); - break; - case 1: - sql = QString::fromLatin1("ALTER SYSTEM KILL SESSION "); - sql.append(sess); - break; - case 2: - return ; - } - try - { - connection().execute(sql); - } - TOCATCH; + case 0: + sql = QString::fromLatin1("ALTER SYSTEM DISCONNECT SESSION "); + sql.append(sess); + sql.append(QString::fromLatin1(" POST_TRANSACTION")); + break; + case 1: + sql = QString::fromLatin1("ALTER SYSTEM KILL SESSION "); + sql.append(sess); + break; + case 2: + return ; } + try + { + connection().execute(sql); + } + TOCATCH; } void toSession::changeRefresh(const QString &str) @@ -838,21 +837,28 @@ TOCATCH; } -void toSession::changeItem(toTreeWidgetItem *item) +void toSession::changeItem() { - if (item && LastSession != item->text(0)) + QModelIndex selected = Sessions->selectedIndex(); + if(!selected.isValid()) + return; + + QString item = selected.data().toString(); + if (LastSession != item) { - if (!item->text(0).isEmpty()) + if (!item.isEmpty()) { if (WaitBar) - WaitBar->changeParams(item->text(0)); + WaitBar->changeParams(item); if (IOBar) - IOBar->changeParams(item->text(0)); + IOBar->changeParams(item); if (Waits) - Waits->setSession(item->text(0).toInt()); + Waits->setSession(item.toInt()); } - LastSession = item->text(0); + + LastSession = item; } + QWidget *t = CurrentTab; CurrentTab = NULL; changeTab(ResultTab->indexOf(t)); @@ -860,7 +866,5 @@ void toSession::refreshTabs(void) { - toTreeWidgetItem *item = Sessions->selectedItem(); - if (item) - changeItem(item); + changeItem(); } Modified: trunk/tora/src/tosession.h =================================================================== --- trunk/tora/src/tosession.h 2008-12-13 23:25:29 UTC (rev 3122) +++ trunk/tora/src/tosession.h 2008-12-13 23:28:44 UTC (rev 3123) @@ -65,81 +65,16 @@ class toWaitEvents; class toResultTableView; + #define TO_SESSION_WAIT "toSession:SessionWait" #define TO_SESSION_IO "toSession:SessionIO" -class toSessionList : public toResultLong -{ -public: -class sessionFilter : public toResultFilter - { - struct sessionID - { - int Session; - int Serial; - sessionID(int session, int serial) - { - Session = session; - Serial = serial; - } - bool operator == (const sessionID &ses) const - { - return Session == ses.Session && Serial == ses.Serial; - } - }; - std::list<sessionID> Serials; - bool Show; - QString OnlyDatabase; - public: - - sessionFilter() - { - Show = true; - } - sessionFilter(const std::list<sessionID> &serials, bool show) - { - Serials = serials; - Show = show; - } - virtual bool check(const toTreeWidgetItem *item); - virtual toResultFilter *clone(void) - { - return new sessionFilter(Serials, Show); - } - void setShow(bool show) - { - Show = show; - } - bool show() - { - return Show; - } - void onlyDatabase(const QString &db) - { - OnlyDatabase = db; - } - void updateList(toResultLong *lst); - }; - toSessionList(QWidget *parent) - : toResultLong(false, false, toQuery::Background, parent) - { - setFilter(new sessionFilter); - } - virtual toTreeWidgetItem *createItem(toTreeWidgetItem *last, const QString &str); - void updateFilter(void); - virtual void refresh(void) - { - updateFilter(); - toResultLong::refresh(); - } -}; - class toSession : public toToolWidget { Q_OBJECT - toResultLong *Sessions; - QTabWidget *ResultTab; + toResultTableView *Sessions; + QTabWidget *ResultTab; QWidget *CurrentTab; @@ -149,17 +84,17 @@ toSGAStatement *PreviousStatement; toResultStats *SessionStatistics; toResultLong *LongOps; - toResultLong *ConnectInfo; + toResultTableView *ConnectInfo; toResultTableView *LockedObjects; toResultLock *PendingLocks; - toResultLong *AccessedObjects; + toResultTableView *AccessedObjects; toResultBar *WaitBar; toResultBar *IOBar; toWaitEvents *Waits; QSplitter *OpenSplitter; QSplitter *StatisticSplitter; toSGAStatement *OpenStatement; - toResultLong *OpenCursors; + toResultTableView *OpenCursors; QString LastSession; QMenu *ToolMenu; QComboBox *Refresh; @@ -182,8 +117,8 @@ virtual bool canHandle(toConnection &conn); public slots: void changeTab(int); - void changeItem(toTreeWidgetItem *item); - void changeCursor(toTreeWidgetItem *item); + void changeItem(); + void changeCursor(); void changeRefresh(const QString &str); void refresh(void); void refreshTabs(void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-15 08:30:45
|
Revision: 3124 http://tora.svn.sourceforge.net/tora/?rev=3124&view=rev Author: subik Date: 2008-12-15 08:30:38 +0000 (Mon, 15 Dec 2008) Log Message: ----------- schema browser fixes and updates (realted to 5.x<) for mysql Modified Paths: -------------- trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowseraccesswidget.cpp trunk/tora/src/tobrowseraccesswidget.h trunk/tora/src/tobrowserindexwidget.cpp Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-13 23:28:44 UTC (rev 3123) +++ trunk/tora/src/tobrowser.cpp 2008-12-15 08:30:38 UTC (rev 3124) @@ -1042,11 +1042,19 @@ // "", // "SapDB"); -static toSQL SQLListIndexMySQL("toBrowser:ListIndex", - "SHOW INDEX FROM `:f1<database>`", +static toSQL SQLListIndexMySQL3("toBrowser:ListIndex", + "SHOW INDEX FROM :f1<char[100]>", "List the available indexes in a schema", "3.23", "MySQL"); +static toSQL SQLListIndexMySQL("toBrowser:ListIndex", + "select distinct table_name \"Tables with Indexes\"\n" + " from information_schema.statistics\n" + " where index_schema = :f1<char[100]>\n" + " order by 1\n", + "", + "5.0", + "MySQL"); static toSQL SQLListIndex("toBrowser:ListIndex", "SELECT Index_Name,NULL \" Ignore\",NULL \" Ignore2\",Tablespace_name \" Ignore2\"\n" " FROM SYS.ALL_INDEXES\n" Modified: trunk/tora/src/tobrowseraccesswidget.cpp =================================================================== --- trunk/tora/src/tobrowseraccesswidget.cpp 2008-12-13 23:28:44 UTC (rev 3123) +++ trunk/tora/src/tobrowseraccesswidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) @@ -98,6 +98,12 @@ accessContent->setVisible(false); } +void toBrowserAccessWidget::changeParams(const QString & schema, + const QString & object) +{ + toBrowserBaseWidget::changeParams("mysql", object); +} + void toBrowserAccessWidget::flushPrivs(void) { try Modified: trunk/tora/src/tobrowseraccesswidget.h =================================================================== --- trunk/tora/src/tobrowseraccesswidget.h 2008-12-13 23:28:44 UTC (rev 3123) +++ trunk/tora/src/tobrowseraccesswidget.h 2008-12-15 08:30:38 UTC (rev 3124) @@ -62,6 +62,9 @@ void changeConnection(); + //! Reimplemented due schema workaround for this tab + void changeParams(const QString & schema, const QString & object); + private slots: void flushPrivs(void); }; Modified: trunk/tora/src/tobrowserindexwidget.cpp =================================================================== --- trunk/tora/src/tobrowserindexwidget.cpp 2008-12-13 23:28:44 UTC (rev 3123) +++ trunk/tora/src/tobrowserindexwidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) @@ -156,17 +156,24 @@ toConnection & c = toCurrentConnection(this); addTab(columnView, "&Columns"); - addTab(resultInfo, "Informations"); + if (!toIsMySQL(c)) + addTab(resultInfo, "Informations"); + else + resultInfo->hide(); + if (toIsOracle(c)) addTab(extentsView, "Extents"); else - extentsView->setVisible(false); + extentsView->hide(); if (toIsSapDB(c)) addTab(statisticView, tr("&Statistic")); else - statisticView->setVisible(false); + statisticView->hide(); - addTab(extractView, "Script"); + if (!toIsMySQL(c)) + addTab(extractView, "Script"); + else + extractView->hide(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-15 09:13:49
|
Revision: 3125 http://tora.svn.sourceforge.net/tora/?rev=3125&view=rev Author: subik Date: 2008-12-15 09:13:45 +0000 (Mon, 15 Dec 2008) Log Message: ----------- schema browser fixes for postgresql Modified Paths: -------------- trunk/tora/src/tobrowser.cpp trunk/tora/src/tobrowsercodewidget.cpp trunk/tora/src/tobrowserindexwidget.cpp trunk/tora/src/tobrowsersequencewidget.cpp trunk/tora/src/tobrowsertablewidget.cpp trunk/tora/src/tobrowserviewwidget.cpp Modified: trunk/tora/src/tobrowser.cpp =================================================================== --- trunk/tora/src/tobrowser.cpp 2008-12-15 08:30:38 UTC (rev 3124) +++ trunk/tora/src/tobrowser.cpp 2008-12-15 09:13:45 UTC (rev 3125) @@ -1907,7 +1907,7 @@ addTab(codeSplitter, tr("Cod&e"), !toIsMySQL(connection())); addTab(triggerSplitter, tr("Tri&ggers"), - !toIsMySQL(connection())); + !toIsMySQL(connection()) && !toIsPostgreSQL(connection())); addTab(dblinkSplitter, tr("DBLinks"), toIsOracle(connection())); addTab(accessSplitter, tr("Access"), Modified: trunk/tora/src/tobrowsercodewidget.cpp =================================================================== --- trunk/tora/src/tobrowsercodewidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) +++ trunk/tora/src/tobrowsercodewidget.cpp 2008-12-15 09:13:45 UTC (rev 3125) @@ -120,19 +120,23 @@ if (toIsOracle(c)) addTab(declarationResult, "&Declaration"); else - declarationResult->setVisible(false); + declarationResult->hide(); addTab(bodyResult, "B&ody"); if (toIsOracle(c) || toIsSapDB(c)) addTab(grantsView, "&Grants"); else - grantsView->setVisible(false); + grantsView->hide(); if (toIsOracle(c)) + { addTab(dependsWidget, "De&pendencies"); + addTab(extractView, "Script"); + } else - dependsWidget->setVisible(false); - - addTab(extractView, "Script"); + { + dependsWidget->hide(); + extractView->hide(); + } } Modified: trunk/tora/src/tobrowserindexwidget.cpp =================================================================== --- trunk/tora/src/tobrowserindexwidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) +++ trunk/tora/src/tobrowserindexwidget.cpp 2008-12-15 09:13:45 UTC (rev 3125) @@ -157,7 +157,7 @@ addTab(columnView, "&Columns"); - if (!toIsMySQL(c)) + if (toIsOracle(c) || toIsSapDB(c)) addTab(resultInfo, "Informations"); else resultInfo->hide(); @@ -172,7 +172,7 @@ else statisticView->hide(); - if (!toIsMySQL(c)) + if (toIsOracle(c)) addTab(extractView, "Script"); else extractView->hide(); Modified: trunk/tora/src/tobrowsersequencewidget.cpp =================================================================== --- trunk/tora/src/tobrowsersequencewidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) +++ trunk/tora/src/tobrowsersequencewidget.cpp 2008-12-15 09:13:45 UTC (rev 3125) @@ -87,15 +87,18 @@ toConnection & c = toCurrentConnection(this); if (toIsOracle(c) || toIsPostgreSQL(c)) + addTab(resultInfo, "Info"); + else + resultInfo->hide(); + + if (toIsOracle(c)) { - addTab(resultInfo, "Info"); addTab(grantsView, "&Grants"); addTab(extractView, "Script"); } else { - resultInfo->setVisible(false); - grantsView->setVisible(false); - extractView->setVisible(false); + grantsView->hide(); + extractView->hide(); } } Modified: trunk/tora/src/tobrowsertablewidget.cpp =================================================================== --- trunk/tora/src/tobrowsertablewidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) +++ trunk/tora/src/tobrowsertablewidget.cpp 2008-12-15 09:13:45 UTC (rev 3125) @@ -422,7 +422,7 @@ else referencesView->hide(); - if (!toIsMySQL(c)) + if (toIsOracle(c)) addTab(grantsView, "&Grants"); else grantsView->hide(); @@ -449,7 +449,7 @@ extentsView->hide(); } - if (!toIsMySQL(c)) + if (toIsOracle(c)) addTab(extractView, "Script"); else extractView->hide(); Modified: trunk/tora/src/tobrowserviewwidget.cpp =================================================================== --- trunk/tora/src/tobrowserviewwidget.cpp 2008-12-15 08:30:38 UTC (rev 3124) +++ trunk/tora/src/tobrowserviewwidget.cpp 2008-12-15 09:13:45 UTC (rev 3125) @@ -110,15 +110,20 @@ if (toIsOracle(c) || toIsSapDB(c) || toIsPostgreSQL(c)) addTab(resultField, "SQL"); else - resultField->setVisible(false); + resultField->hide(); addTab(resultData, "&Data"); - addTab(grantsView, "&Grants"); if (toIsOracle(c)) + { + addTab(grantsView, "&Grants"); addTab(resultDependencies, "De&pendencies"); + addTab(extractView, "Script"); + } else - resultDependencies->setVisible(false); - - addTab(extractView, "Script"); + { + grantsView->hide(); + resultDependencies->hide(); + extractView->hide(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-17 13:26:15
|
Revision: 3127 http://tora.svn.sourceforge.net/tora/?rev=3127&view=rev Author: subik Date: 2008-12-17 13:26:06 +0000 (Wed, 17 Dec 2008) Log Message: ----------- Editor: implementation of bookmarks; fix for qscintilla markers in margins; preparation of "block/column selection" (waiting for 3rd party backend support) Modified Paths: -------------- trunk/tora/src/toeditextensions.cpp trunk/tora/src/toeditextensions.h trunk/tora/src/tohighlightedtext.cpp trunk/tora/src/tohighlightedtext.h trunk/tora/src/tomain.cpp trunk/tora/src/tomain.h trunk/tora/src/tomarkedtext.cpp trunk/tora/src/tomarkedtext.h Modified: trunk/tora/src/toeditextensions.cpp =================================================================== --- trunk/tora/src/toeditextensions.cpp 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/toeditextensions.cpp 2008-12-17 13:26:06 UTC (rev 3127) @@ -86,6 +86,11 @@ QAction *UpperCase = NULL; QAction *LowerCase = NULL; +QMenu * BookmarkMenu = NULL; +QAction * BookmarkSwitchAct = NULL; +QAction * BookmarkPrevAct = NULL; +QAction * BookmarkNextAct = NULL; + QAction *Indent = NULL; QAction *Deindent = NULL; QAction *Quote = NULL; @@ -143,6 +148,7 @@ IncMenu->setEnabled(enable); IndentMenu->setEnabled(enable); CaseMenu->setEnabled(enable); + BookmarkMenu->setEnabled(enable); Indent->setEnabled(enable); Deindent->setEnabled(enable); @@ -153,6 +159,27 @@ AutoComplete->setEnabled(enable); } +void toEditExtensions::bookmarkSwitch() +{ + toHighlightedText * t = qobject_cast<toHighlightedText*>(Current); + if (t) + t->handleBookmark(); +} + +void toEditExtensions::bookmarkPrev() +{ + toHighlightedText * t = qobject_cast<toHighlightedText*>(Current); + if (t) + t->gotoPrevBookmark(); +} + +void toEditExtensions::bookmarkNext() +{ + toHighlightedText * t = qobject_cast<toHighlightedText*>(Current); + if (t) + t->gotoNextBookmark(); +} + void toEditExtensions::gotoLine() { if (Current) @@ -646,6 +673,21 @@ SLOT(lowerCase())); LowerCase->setShortcut(Qt::CTRL + Qt::Key_L); + // bookmark menu + BookmarkMenu = edit->addMenu(qApp->translate("toEditExtensionTool", "Bookmarks")); + BookmarkSwitchAct = BookmarkMenu->addAction("Add/Remove Bookmark", + &EditExtensions, + SLOT(bookmarkSwitch())); + BookmarkSwitchAct->setShortcut(Qt::CTRL + Qt::Key_B); + BookmarkPrevAct = BookmarkMenu->addAction("Go to previous Bookmark", + &EditExtensions, + SLOT(bookmarkPrev())); + BookmarkPrevAct->setShortcut(Qt::ALT + Qt::Key_PageUp); + BookmarkNextAct = BookmarkMenu->addAction("Go to next Bookmark", + &EditExtensions, + SLOT(bookmarkNext())); + BookmarkNextAct->setShortcut(Qt::ALT + Qt::Key_PageDown); + // ------------------------------ etc Indent = edit->addAction( Modified: trunk/tora/src/toeditextensions.h =================================================================== --- trunk/tora/src/toeditextensions.h 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/toeditextensions.h 2008-12-17 13:26:06 UTC (rev 3127) @@ -93,6 +93,11 @@ void autoComplete(void); void editEnabled(bool); + + // bookmarks + void bookmarkSwitch(); + void bookmarkPrev(); + void bookmarkNext(); }; Modified: trunk/tora/src/tohighlightedtext.cpp =================================================================== --- trunk/tora/src/tohighlightedtext.cpp 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/tohighlightedtext.cpp 2008-12-17 13:26:06 UTC (rev 3127) @@ -374,9 +374,18 @@ // set the font setFont(toStringToFont(toConfigurationSingle::Instance().codeFont())); - errorMarker = markerDefine(Circle, 4); - debugMarker = markerDefine(Rectangle, 8); + m_errorMarginHandle = markerDefine(QsciScintilla::Circle); + m_errorHandle = markerDefine(QsciScintilla::Background); + + m_debugMarginHandle = markerDefine(QsciScintilla::Rectangle); + m_debugHandle = markerDefine(QsciScintilla::Background); + + m_currentLineMarginHandle = markerDefine(QsciScintilla::RightArrow); m_currentLineHandle = markerDefine(QsciScintilla::Background); + + m_bookmarkMarginHandle = markerDefine(QsciScintilla::RightTriangle); + m_bookmarkHandle = markerDefine(QsciScintilla::Background); + updateSyntaxColor(toSyntaxAnalyzer::DebugBg); updateSyntaxColor(toSyntaxAnalyzer::ErrorBg); updateSyntaxColor(toSyntaxAnalyzer::CurrentLineMarker); @@ -391,7 +400,6 @@ else setEdgeMode(QsciScintilla::EdgeNone); - setMarginMarkerMask(1, 0); setAutoIndent(true); connect(this, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(setStatusMessage(void ))); complAPI = new QsciAPIs(lexer); @@ -464,7 +472,9 @@ } // current line marker markerDeleteAll(m_currentLineHandle); + markerDeleteAll(m_currentLineMarginHandle); markerAdd(row, m_currentLineHandle); + markerAdd(row, m_currentLineMarginHandle); } static QString UpperIdent(const QString &str) @@ -619,19 +629,34 @@ //lexer->setPaper(col, QsciLexerSQL::Default); break; case toSyntaxAnalyzer::ErrorBg: - setMarkerBackgroundColor(col, errorMarker); + setMarkerBackgroundColor(col, m_errorHandle); break; case toSyntaxAnalyzer::DebugBg: - setMarkerBackgroundColor(col, debugMarker); + setMarkerBackgroundColor(col, m_debugHandle); break; case toSyntaxAnalyzer::CurrentLineMarker: setMarkerBackgroundColor(col, m_currentLineHandle); +// setMarkerBackgroundColor(col, m_currentLineMarginHandle); + // TODO/FIXME?: make it configurable - color. + setMarkerBackgroundColor(DefaultAnalyzer.getColor(toSyntaxAnalyzer::CurrentLineMarker).lighter(100), + m_bookmarkHandle); break; default: break; } } + +void toHighlightedText::openFilename(const QString & file) +{ + toMarkedText::openFilename(file); + + m_bookmarks.clear(); + markerDeleteAll(m_bookmarkHandle); + markerDeleteAll(m_bookmarkMarginHandle); + setErrors(QMap<int,QString>()); +} + /** * Set the lexer to use. * @param lexer to use, @@ -675,10 +700,15 @@ void toHighlightedText::setCurrent(int current) { setCursorPosition (current, 0); - markerDeleteAll(debugMarker); + markerDeleteAll(m_debugHandle); + markerDeleteAll(m_debugMarginHandle); if (current >= 0) - markerAdd(current, debugMarker); + { + markerAdd(current, m_debugHandle); + markerAdd(current, m_debugMarginHandle); + } } + void toHighlightedText::tableAtCursor(QString &owner, QString &table, bool mark) { try @@ -777,14 +807,71 @@ setCursorPosition(curcol, 0); } +void toHighlightedText::handleBookmark() +{ + int curline, curcol; + getCursorPosition (&curline, &curcol); + + if (m_bookmarks.contains(curline)) + { + markerDelete(curline, m_bookmarkHandle); + markerDefine(curline, m_bookmarkMarginHandle); + m_bookmarks.removeAll(curline); + } + else + { + markerAdd(curline, m_bookmarkHandle); + markerAdd(curline, m_bookmarkMarginHandle); + m_bookmarks.append(curline); + } + qSort(m_bookmarks); +} + +void toHighlightedText::gotoPrevBookmark() +{ + int curline, curcol; + getCursorPosition (&curline, &curcol); + --curline; + + int newline = -1; + foreach(int i, m_bookmarks) + { + if (curline < i) + break; + newline = i; + } + if (newline >= 0) + setCursorPosition(newline, 0); +} + +void toHighlightedText::gotoNextBookmark() +{ + int curline, curcol; + getCursorPosition (&curline, &curcol); + ++curline; + + int newline = -1; + foreach(int i, m_bookmarks) + { + if (curline > i) + continue; + newline = i; + break; + } + if (newline >= 0) + setCursorPosition(newline, 0); +} + void toHighlightedText::setErrors(const QMap<int, QString> &errors) { Errors = errors; setStatusMessage(); - markerDeleteAll(errorMarker); + markerDeleteAll(m_errorHandle); + markerDeleteAll(m_errorMarginHandle); for (QMap<int, QString>::const_iterator i = Errors.begin();i != Errors.end();i++) { - markerAdd(i.key(), errorMarker); + markerAdd(i.key(), m_errorHandle); + markerAdd(i.key(), m_errorMarginHandle); } } Modified: trunk/tora/src/tohighlightedtext.h =================================================================== --- trunk/tora/src/tohighlightedtext.h 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/tohighlightedtext.h 2008-12-17 13:26:06 UTC (rev 3127) @@ -239,10 +239,24 @@ QStringList defaultCompletion; protected: - int debugMarker; - int errorMarker; - //! \brief A handler for current line highlighting + //! \brief A handler for debug - line highlighted + int m_debugHandle; + //! \brief A handler for debug - margin + int m_debugMarginHandle; + //! \brief A handler for code error - line highlighted + int m_errorHandle; + //! \brief A handler for code error - margin + int m_errorMarginHandle; + //! \brief A handler for current line highlighting - line highlighted int m_currentLineHandle; + //! \brief A handler for current line highlighting - margin + int m_currentLineMarginHandle; + //! \brief A handler for bookrmarks - line highlighted + int m_bookmarkHandle; + //! \brief A handler for bookrmarks - margin + int m_bookmarkMarginHandle; + //! \brief Bookrmarks handler list used for navigation (next/prev) + QList<int> m_bookmarks; toComplPopup* popup; @@ -262,7 +276,11 @@ */ virtual ~toHighlightedText(); -public: + /*! \brief Inherited from toMarkedText to clear all required editor + markers; + */ + virtual void openFilename(const QString &file); + /** * Set the lexer to use. * @param lexer to use, @@ -386,6 +404,10 @@ */ void previousError(void); + void handleBookmark(); + void gotoPrevBookmark(); + void gotoNextBookmark(); + virtual void autoCompleteFromAPIs(); void positionChanged(int row, int col); Modified: trunk/tora/src/tomain.cpp =================================================================== --- trunk/tora/src/tomain.cpp 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/tomain.cpp 2008-12-17 13:26:06 UTC (rev 3127) @@ -351,6 +351,13 @@ selectAllAct = new QAction(tr("Select &All"), this); selectAllAct->setShortcut(QKeySequence::SelectAll); +#if 0 + // TODO: this part is waiting for QScintilla backend feature (yet unimplemented). + selectBlockAct = new QAction(tr("Block Selection"), this); + selectBlockAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_B); + selectBlockAct->setCheckable(true); +#endif + readAllAct = new QAction(tr("Read All &Items"), this); prefsAct = new QAction(tr("&Preferences..."), this); @@ -440,6 +447,10 @@ editMenu->addAction(searchReplaceAct); editMenu->addAction(searchNextAct); editMenu->addAction(selectAllAct); +#if 0 +// TODO: this part is waiting for QScintilla backend feature (yet unimplemented). + editMenu->addAction(selectBlockAct); +#endif editMenu->addAction(readAllAct); editMenu->addSeparator(); @@ -567,6 +578,14 @@ { statusBar()->showMessage(QString::null); +#if 0 +// TODO: this part is waiting for QScintilla backend feature (yet unimplemented). + SelectionLabel = new QLabel(statusBar()); + statusBar()->addPermanentWidget(SelectionLabel); + SelectionLabel->setMinimumWidth(90); + SelectionLabel->setText("Sel: Normal"); +#endif + RowLabel = new QLabel(statusBar()); statusBar()->addPermanentWidget(RowLabel, 0); RowLabel->setMinimumWidth(60); @@ -988,6 +1007,28 @@ edit->editCut(); else if (action == selectAllAct) edit->editSelectAll(); +#if 0 +// TODO: this part is waiting for QScintilla backend feature (yet unimplemented). + else if (action == selectBlockAct) + { + // OK, this looks ugly but it's pretty functional. + // Here I need to setup chosen selection type for + // all QScintilla based editors. + int selectionType = action->isChecked() + ? QsciScintillaBase::SC_SEL_RECTANGLE + : QsciScintillaBase::SC_SEL_STREAM; + foreach (QWidget * i, QApplication::allWidgets()) + { + toMarkedText * w = qobject_cast<toMarkedText*>(i); + if (w) + { + w->setSelectionType(selectionType); + qDebug() << "setting" << w << selectionType; + } + } + SelectionLabel->setText(action->isChecked() ? "Sel: Block" : "Sel: Normal"); + } +#endif else if (action == refreshAct) edit->editReadAll(); else if (action == searchReplaceAct) Modified: trunk/tora/src/tomain.h =================================================================== --- trunk/tora/src/tomain.h 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/tomain.h 2008-12-17 13:26:06 UTC (rev 3127) @@ -186,6 +186,10 @@ * Current row label. */ QLabel *RowLabel; + + //! \brief Display current type of text edit selection (normal/block) + QLabel * SelectionLabel; + toBackground Poll; /** * Search & replace dialog if available. @@ -247,6 +251,10 @@ QAction *searchReplaceAct; QAction *searchNextAct; QAction *selectAllAct; +#if 0 +// TODO: this part is waiting for QScintilla backend feature (yet unimplemented). + QAction *selectBlockAct; +#endif QAction *readAllAct; QAction *prefsAct; QAction *helpCurrentAct; Modified: trunk/tora/src/tomarkedtext.cpp =================================================================== --- trunk/tora/src/tomarkedtext.cpp 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/tomarkedtext.cpp 2008-12-17 13:26:06 UTC (rev 3127) @@ -666,6 +666,16 @@ QsciScintilla::endUndoAction(); } +#if 0 +// TODO: this part is waiting for QScintilla backend feature (yet unimplemented). +void toMarkedText::setSelectionType(int aType) +{ + qDebug() << "setSelectionType" << SendScintilla(SCI_GETSELECTIONMODE) << aType; + qDebug() << SendScintilla(SCI_SETSELECTIONMODE, aType); + qDebug() << "setSelectionType" << SendScintilla(SCI_GETSELECTIONMODE) << aType; +} +#endif + void toMarkedText::setTextChanged() { redoEnabled(isRedoAvailable()); Modified: trunk/tora/src/tomarkedtext.h =================================================================== --- trunk/tora/src/tomarkedtext.h 2008-12-15 09:34:41 UTC (rev 3126) +++ trunk/tora/src/tomarkedtext.h 2008-12-17 13:26:06 UTC (rev 3127) @@ -160,6 +160,14 @@ return hasSelectedText(); } +#if 0 +// TODO: this part is waiting for QScintilla backend feature (yet unimplemented). + /*! \brief Set the selection mode for editor. + \param aType SC_SEL_STREAM = 0, SC_SEL_RECTANGLE = 1, SC_SEL_LINES = 2 + */ + void setSelectionType(int aType=SC_SEL_STREAM); +#endif + /** Get filename of current file in editor. * @return Filename of editor. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-17 14:05:16
|
Revision: 3128 http://tora.svn.sourceforge.net/tora/?rev=3128&view=rev Author: subik Date: 2008-12-17 14:05:07 +0000 (Wed, 17 Dec 2008) Log Message: ----------- describe (key_f4) supports various object types now Modified Paths: -------------- trunk/tora/src/todescribe.cpp trunk/tora/src/todescribe.h trunk/tora/src/toworksheet.cpp Modified: trunk/tora/src/todescribe.cpp =================================================================== --- trunk/tora/src/todescribe.cpp 2008-12-17 13:26:06 UTC (rev 3127) +++ trunk/tora/src/todescribe.cpp 2008-12-17 14:05:07 UTC (rev 3128) @@ -41,7 +41,17 @@ #include <QSettings> #include <QHideEvent> +#include <QMessageBox> +#include "toconnection.h" +#include "tobrowsertablewidget.h" +#include "tobrowserviewwidget.h" +#include "tobrowserindexwidget.h" +#include "tobrowsersequencewidget.h" +#include "tobrowsercodewidget.h" +#include "tobrowsersynonymwidget.h" +#include "tobrowsertriggerwidget.h" +#include "utils.h" #include "todescribe.h" @@ -66,15 +76,51 @@ event->accept(); } -#include "tobrowsertablewidget.h" void toDescribe::changeParams(const QString & owner, const QString & object) { - // TODO/FIXME: check it if it's table or widget or whatever... if (widget) { delete widget; + widget = 0; + } + + QString objectType; + + std::list<toConnection::objectName> objects = toCurrentConnection(this).objects(false); + for (std::list<toConnection::objectName>::iterator i = objects.begin();i != objects.end();i++) + { + if ((*i).Name == object && (*i).Owner == owner) + { + objectType = (*i).Type; + break; + } + } + + if (objectType == "TABLE") widget = new toBrowserTableWidget(this); - layout()->addWidget(widget); - } + else if (objectType == "VIEW") + widget = new toBrowserViewWidget(this); + else if (objectType == "INDEX") + widget = new toBrowserIndexWidget(this); + else if (objectType == "SEQUENCE") + widget = new toBrowserSequenceWidget(this); + else if (objectType == "SYNONYM") + widget = new toBrowserSynonymWidget(this); + else if (objectType == "FUNCTION" + || objectType == "PROCEDURE" + || objectType == "PACKAGE" + || objectType == "PACKAGE BODY") + widget = new toBrowserCodeWidget(this); + else if (objectType == "TRIGGER") + widget = new toBrowserTriggerWidget(this); + else + QMessageBox::information(this, "Describe", + tr("Object %1 (%2) cannot be described").arg(object, owner)); + + if (!widget) + return; + + layout()->addWidget(widget); widget->changeParams(owner, object); + show(); } Modified: trunk/tora/src/todescribe.h =================================================================== --- trunk/tora/src/todescribe.h 2008-12-17 13:26:06 UTC (rev 3127) +++ trunk/tora/src/todescribe.h 2008-12-17 14:05:07 UTC (rev 3128) @@ -46,7 +46,8 @@ /*! \brief Enhanced "key F4 describe table" dialog. -It's work in progress. It'll require a toBrowser cleanup. A bit... +It tries to find object by its name. It uses descibe +widget based on name's type. */ class toDescribe : public QDialog, public Ui::toDescribe { @@ -54,6 +55,10 @@ public: toDescribe(QWidget * parent = 0); + /*! \brief This method tries to find object type + by its name. It shows the dialog itself - so there + is no need to call show() explicitly. + */ void changeParams(const QString & owner, const QString & object); protected: Modified: trunk/tora/src/toworksheet.cpp =================================================================== --- trunk/tora/src/toworksheet.cpp 2008-12-17 13:26:06 UTC (rev 3127) +++ trunk/tora/src/toworksheet.cpp 2008-12-17 14:05:07 UTC (rev 3128) @@ -1638,7 +1638,7 @@ { toDescribe * d = new toDescribe(this); d->changeParams(owner, table); - d->show(); +// d->show(); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2008-12-18 14:07:47
|
Revision: 3129 http://tora.svn.sourceforge.net/tora/?rev=3129&view=rev Author: subik Date: 2008-12-18 14:07:37 +0000 (Thu, 18 Dec 2008) Log Message: ----------- comment/uncomment feature for sql editor Modified Paths: -------------- trunk/tora/src/toeditextensions.cpp trunk/tora/src/toeditextensions.h Modified: trunk/tora/src/toeditextensions.cpp =================================================================== --- trunk/tora/src/toeditextensions.cpp 2008-12-17 14:05:07 UTC (rev 3128) +++ trunk/tora/src/toeditextensions.cpp 2008-12-18 14:07:37 UTC (rev 3129) @@ -95,6 +95,7 @@ QAction *Deindent = NULL; QAction *Quote = NULL; QAction *UnQuote = NULL; +QAction *Comment = NULL; QAction *GotoLine = NULL; QAction *AutoComplete = NULL; @@ -364,7 +365,41 @@ } } +void toEditExtensions::handleCommentLine(int line) +{ + QString t(Current->text(line)); + if (t.startsWith("--")) + { + Current->setSelection(line, 0, line, 2); + Current->removeSelectedText(); + } + else + Current->insertAt("--", line, 0); +} +void toEditExtensions::handleComment() +{ + if (!Current) + return; + + if (Current->hasSelectedText()) + { + int l, c, l1, c1; + Current->getSelection(&l, &c, &l1, &c1); + for (int i = l; i <= l1; ++i) + { + handleCommentLine(i); + } + Current->setSelection(l, c, l1, c1); + } + else + { + int l, c; + Current->getCursorPosition(&l, &c); + handleCommentLine(l); + } +} + void toEditExtensions::upperCase(void) { if (Current) @@ -710,10 +745,16 @@ SLOT(quoteBlock())); UnQuote = edit->addAction(qApp->translate("toEditExtensionTool", - "UnQuote Selection"), + "UnQuote Selection"), &EditExtensions, SLOT(unquoteBlock())); + Comment = edit->addAction(qApp->translate("toEditExtensionTool", + "Comment or Uncomment"), + &EditExtensions, + SLOT(handleComment()), + Qt::CTRL + Qt::Key_D); + GotoLine = edit->addAction(qApp->translate("toEditExtensionTool", "Goto Line"), &EditExtensions, Modified: trunk/tora/src/toeditextensions.h =================================================================== --- trunk/tora/src/toeditextensions.h 2008-12-17 14:05:07 UTC (rev 3128) +++ trunk/tora/src/toeditextensions.h 2008-12-18 14:07:37 UTC (rev 3129) @@ -64,6 +64,14 @@ void intIndent(int level); + /*! \brief A helper method for handleComment(). + It takes given line's text, then it checks if it starts + with SQL comment "--". It adds a comment mark if there isn't any. + It removes comment mark if there is one in the beginning of the line. + \param line row position in the document + */ + void handleCommentLine(int line); + public: toEditExtensions(); virtual void receivedFocus(toEditWidget *widget); @@ -79,6 +87,11 @@ void quoteBlock(void); void unquoteBlock(void); + /*! \brief Comment or uncomment the text selection or current line. + See handleCommentLine(). + */ + void handleComment(); + void obfuscateBlock(void); void obfuscateBuffer(void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |