From: <ibr...@us...> - 2012-05-30 08:53:08
|
Revision: 4327 http://tora.svn.sourceforge.net/tora/?rev=4327&view=rev Author: ibre5041 Date: 2012-05-30 08:52:57 +0000 (Wed, 30 May 2012) Log Message: ----------- sync with trunk Modified Paths: -------------- branches/tora3/src/core/toresultmodel.cpp branches/tora3/src/core/toresulttableview.cpp Modified: branches/tora3/src/core/toresultmodel.cpp =================================================================== --- branches/tora3/src/core/toresultmodel.cpp 2012-05-29 21:15:18 UTC (rev 4326) +++ branches/tora3/src/core/toresultmodel.cpp 2012-05-30 08:52:57 UTC (rev 4327) @@ -62,7 +62,8 @@ First = true; Editable = edit; ReadAll = false; - + SortedOnColumn = -1; + MaxRead = MaxNumber = toConfigurationSingle::Instance().maxNumber(); CurrRowKey = 1; @@ -108,7 +109,8 @@ First = true; Editable = false; ReadAll = false; - + SortedOnColumn = -1; + CurrRowKey = 1; Query = 0; Modified: branches/tora3/src/core/toresulttableview.cpp =================================================================== --- branches/tora3/src/core/toresulttableview.cpp 2012-05-29 21:15:18 UTC (rev 4326) +++ branches/tora3/src/core/toresulttableview.cpp 2012-05-30 08:52:57 UTC (rev 4327) @@ -119,6 +119,7 @@ Editable = editable; ReadAll = false; Filter = 0; + VisibleColumns = 0; ReadableColumns = readable; NumberColumn = numberColumn; ColumnsResized = false; @@ -346,7 +347,7 @@ void toResultTableView::resizeEvent(QResizeEvent *event) { - if(VisibleColumns == 1 && ReadableColumns) + if(ReadableColumns && VisibleColumns == 1) setColumnWidth(1, viewport()->width()); QTableView::resizeEvent(event); } @@ -393,7 +394,7 @@ if (toConfigurationSingle::Instance().multiLineResults()) resizeRowsToContents(); - if (VisibleColumns == 1 && ReadableColumns) + if (ReadableColumns && VisibleColumns == 1) setColumnWidth(1, viewport()->width()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-06-25 20:39:29
|
Revision: 4370 http://tora.svn.sourceforge.net/tora/?rev=4370&view=rev Author: ibre5041 Date: 2012-06-25 20:39:22 +0000 (Mon, 25 Jun 2012) Log Message: ----------- whole schame drawing Modified Paths: -------------- branches/tora3/src/core/toresultdrawing.cpp branches/tora3/src/core/toresultdrawing.h Modified: branches/tora3/src/core/toresultdrawing.cpp =================================================================== --- branches/tora3/src/core/toresultdrawing.cpp 2012-06-25 15:45:40 UTC (rev 4369) +++ branches/tora3/src/core/toresultdrawing.cpp 2012-06-25 20:39:22 UTC (rev 4370) @@ -1,217 +1,264 @@ - -/* 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-2009 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 "core/toresultdrawing.h" -#include "dotgraph.h" - -static toSQL SQLTableFK( - "toResultDrawing:FKConstraints", - " SELECT \n" - " c.constraint_name \n" // c1 - " -- max(a.constraint_name) as constraint_name \n" - " -- , c.constraint_name \n" - " , max(r.constraint_name) as r_constraint_name \n" // c2 - " , max(c.owner) as owner \n" // c3 - " , max(c.table_name) as table_name \n" // c4 - " , c.column_name as column_name \n" // c5 - " , max(r.owner) as r_owner \n" // c6 - " , max(r.table_name) as r_table_name \n" // c7 - " , max(r.column_name) as r_column_name \n" // c8 - " , max(a.constraint_type) \n" // c9 - " FROM sys.all_constraints a \n" - " JOIN sys.all_cons_columns c ON (c.constraint_name = a.constraint_name AND c.owner = a.owner) \n" - " JOIN sys.all_cons_columns r ON (r.constraint_name = a.r_constraint_name AND r.owner = a.r_owner AND r.position = c.position) \n" - " WHERE \n" - " a.owner = :f1<char[101]> \n" - " AND a.table_name = :f2<char[101]> \n" - " AND a.constraint_type = 'R' \n" - " GROUP BY ROLLUP (c.constraint_name, c.column_name) \n", - "Get list of all the FK referenced tables", - "8000", - "Oracle"); - -static toSQL SQLTableREF( - "toResultDrawing:REFConstraints", - " SELECT \n" - " c.constraint_name \n" // c1 - " -- max(a.constraint_name) as constraint_name \n" - " -- , c.constraint_name \n" - " , max(r.constraint_name) as r_constraint_name \n" // c2 - " , max(c.owner) as owner \n" // c3 - " , max(c.table_name) as table_name \n" // c4 - " , c.column_name as column_name \n" // c5 - " , max(r.owner) as r_owner \n" // c6 - " , max(r.table_name) as r_table_name \n" // c7 - " , max(r.column_name) as r_column_name \n" // c8 - " , max(a.constraint_type) \n" // c9 - " FROM sys.all_constraints a \n" - " JOIN sys.all_cons_columns c ON (c.constraint_name = a.constraint_name AND c.owner = a.owner) \n" - " JOIN sys.all_cons_columns r ON (r.constraint_name = a.r_constraint_name AND r.owner = a.r_owner AND r.position = c.position) \n" - " WHERE \n" - " a.r_owner = :f1<char[101]> \n" - " AND r.table_name = :f2<char[101]> \n" - " AND a.constraint_type = 'R' \n" - " GROUP BY ROLLUP (c.constraint_name, c.column_name) \n", - "Get list of all the FK referencing tables", - "8000", - "Oracle"); - -toResultDrawing::toResultDrawing(QWidget *parent, const char *name, Qt::WindowFlags f) - : DotGraphView(NULL, parent) - , toResult() -{ - initEmpty(); - setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); -} - - -void toResultDrawing::query(const QString &, toQueryParams const& params) -{ - typedef QPair<QString, QString> Reference; - toConnection &conn = connection(); - - initEmpty(); - QString schema(params.at(0)), table(params.at(1)); - QSet<QString> tables; - QSet<Reference> references; - - tables.insert(table); - - DotGraph newGraph("dot"); - QMap<QString,QString> ga; - ga["id"] = "Schema"; - ga["compound"] = "true"; - ga["shape"] = "box"; - ga["rankdir"] = "BT"; // BOTTOM to TOP arrows - - newGraph.setGraphAttributes(ga); - - toQValue c1, c2, c3, c4, c5, c6, c7, c8, c9; - // TODO: use toCache here - additional attributes - toQuery QueryC(conn, SQLTableFK, toQueryParams() << schema.toUpper() << table.toUpper()); - while (!QueryC.eof()) - { - c1 = QueryC.readValue(); - c2 = QueryC.readValue(); - c3 = QueryC.readValue(); - c4 = QueryC.readValue(); - c5 = QueryC.readValue(); - c6 = QueryC.readValue(); - c7 = QueryC.readValue(); - c8 = QueryC.readValue(); - c9 = QueryC.readValue(); - - if( c5.isNull() && c1.isNull()) - { - // Here collect FK details (column list for compound keys) - } - - if( c5.isNull() && !c1.isNull()) // c5 (column_name) is null - see rollup def - { - TLOG(0, toNoDecorator, __HERE__) - << c3.displayData() << '.' << c4.displayData() - << " => " - << c6.displayData() << '.' << c7.displayData() - << std::endl; - tables.insert(c7); // r_table_name - references.insert( Reference( table, c7)); - } - } - - toQuery QueryR(conn, SQLTableREF, toQueryParams() << schema.toUpper() << table.toUpper()); - while (!QueryR.eof()) - { - c1 = QueryR.readValue(); - c2 = QueryR.readValue(); - c3 = QueryR.readValue(); - c4 = QueryR.readValue(); - c5 = QueryR.readValue(); - c6 = QueryR.readValue(); - c7 = QueryR.readValue(); - c8 = QueryR.readValue(); - c9 = QueryR.readValue(); - - if( c5.isNull() && c1.isNull()) - { - // Here collect FK details (column list for compound keys) - } - - if( c5.isNull() && !c1.isNull()) - { - TLOG(0, toNoDecorator, __HERE__) - << c3.displayData() << '.' << c4.displayData() - << " => " - << c6.displayData() << '.' << c7.displayData() - << std::endl; - tables.insert(c4); // table_name - references.insert( Reference( c4, table)); - } - } - - Q_FOREACH(QString const&t, tables) - { - QMap<QString,QString> ta; // table atributes - ta["name"] = t; - ta["label"] = t; - ta["fontsize"] = "12"; - ta["comment"]= t; - ta["id"]= t; - ta["tooltip"] = t; - newGraph.addNewNode(ta); - } - - Q_FOREACH(Reference const&r, references) - { - QMap<QString,QString> ea; // edge attreibutes - newGraph.addNewEdge(r.first, r.second, ea); - } - - graph()->updateWithGraph(newGraph); - //update(); - graph()->update(); - update(); -} - - /** Clear result widget */ -void toResultDrawing::clearData() -{ - initEmpty(); -} + +/* 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-2009 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 "core/toresultdrawing.h" +#include "dotgraph.h" + +static toSQL SQLTableFK( + "toResultDrawing:FKConstraints", + " SELECT \n" + " c.constraint_name \n" // c1 + " -- max(a.constraint_name) as constraint_name \n" + " -- , c.constraint_name \n" + " , max(r.constraint_name) as r_constraint_name \n" // c2 + " , max(c.owner) as owner \n" // c3 + " , max(c.table_name) as table_name \n" // c4 + " , c.column_name as column_name \n" // c5 + " , max(r.owner) as r_owner \n" // c6 + " , max(r.table_name) as r_table_name \n" // c7 + " , max(r.column_name) as r_column_name \n" // c8 + " , max(a.constraint_type) \n" // c9 + " FROM sys.all_constraints a \n" + " JOIN sys.all_cons_columns c ON (c.constraint_name = a.constraint_name AND c.owner = a.owner) \n" + " JOIN sys.all_cons_columns r ON (r.constraint_name = a.r_constraint_name AND r.owner = a.r_owner AND r.position = c.position) \n" + " WHERE \n" + " a.owner = :f1<char[101]> \n" + " AND a.table_name = :f2<char[101]> \n" + " AND a.constraint_type = 'R' \n" + " GROUP BY ROLLUP (c.constraint_name, c.column_name) \n", + "Get list of all the FK referenced tables", + "8000", + "Oracle"); + +static toSQL SQLTableREF( + "toResultDrawing:REFConstraints", + " SELECT \n" + " c.constraint_name \n" // c1 + " -- max(a.constraint_name) as constraint_name \n" + " -- , c.constraint_name \n" + " , max(r.constraint_name) as r_constraint_name \n" // c2 + " , max(c.owner) as owner \n" // c3 + " , max(c.table_name) as table_name \n" // c4 + " , c.column_name as column_name \n" // c5 + " , max(r.owner) as r_owner \n" // c6 + " , max(r.table_name) as r_table_name \n" // c7 + " , max(r.column_name) as r_column_name \n" // c8 + " , max(a.constraint_type) \n" // c9 + " FROM sys.all_constraints a \n" + " JOIN sys.all_cons_columns c ON (c.constraint_name = a.constraint_name AND c.owner = a.owner) \n" + " JOIN sys.all_cons_columns r ON (r.constraint_name = a.r_constraint_name AND r.owner = a.r_owner AND r.position = c.position) \n" + " WHERE \n" + " a.r_owner = :f1<char[101]> \n" + " AND r.table_name = :f2<char[101]> \n" + " AND a.constraint_type = 'R' \n" + " GROUP BY ROLLUP (c.constraint_name, c.column_name) \n", + "Get list of all the FK referencing tables", + "8000", + "Oracle"); + +static toSQL SQLALLRef ( + "toResultDrawing:ALLREFConstraints", + " WITH REFS \n" + " AS \n" + " ( \n" + " SELECT DISTINCT \n" + " c.constraint_name \n" // c1 + " , c.owner as owner \n" // c2 + " , c.table_name as table_name \n" // c3 + " , r.owner as r_owner \n" // c4 + " , r.table_name as r_table_name \n" // c5 + " FROM \n" + " sys.all_constraints a \n" + " JOIN sys.all_cons_columns c ON (c.constraint_name = a.constraint_name AND c.owner = a.owner) \n" + " JOIN sys.all_cons_columns r ON (r.constraint_name = a.r_constraint_name AND r.owner = a.r_owner AND r.position = c.position) \n" + " WHERE \n" + " a.owner = :f1<char[101]> \n" + " -- AND a.Table_Name = 'T_ROOT_1' \n" + " AND a.constraint_type = 'R' \n" + " ) \n" + " SELECT REFS.* \n" + " -- , SYS_CONNECT_BY_PATH(table_name, '/') Path, CONNECT_BY_ISCYCLE CYCLE, LEVEL \n" + " FROM REFS \n" + " CONNECT BY NOCYCLE PRIOR r_owner = owner AND PRIOR r_table_name = table_name \n", + "Get list of all references", + "8000", + "Oracle"); + +toResultDrawing::toResultDrawing(QWidget *parent, const char *name, Qt::WindowFlags f) + : DotGraphView(NULL, parent) + , toResult() +{ + initEmpty(); + setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); +} + + +void toResultDrawing::query(const QString &, toQueryParams const& params) +{ + typedef QPair<QString, QString> Reference; + toConnection &conn = connection(); + + initEmpty(); + QString schema(params.at(0)), table(params.at(1)); + QSet<QString> tables; + QSet<Reference> references; + + tables.insert(table); + + DotGraph newGraph("dot"); + QMap<QString,QString> ga; + ga["id"] = "Schema"; + ga["compound"] = "true"; + ga["shape"] = "box"; + ga["rankdir"] = "BT"; // BOTTOM to TOP arrows + + newGraph.setGraphAttributes(ga); + + toQValue c1, c2, c3, c4, c5, c6, c7, c8, c9; + // TODO: use toCache here - additional attributes + // toQuery QueryC(conn, SQLTableFK, toQueryParams() << schema.toUpper() << table.toUpper()); + // while (!QueryC.eof()) + // { + // c1 = QueryC.readValue(); + // c2 = QueryC.readValue(); + // c3 = QueryC.readValue(); + // c4 = QueryC.readValue(); + // c5 = QueryC.readValue(); + // c6 = QueryC.readValue(); + // c7 = QueryC.readValue(); + // c8 = QueryC.readValue(); + // c9 = QueryC.readValue(); + + // if( c5.isNull() && c1.isNull()) + // { + // // Here collect FK details (column list for compound keys) + // } + + // if( c5.isNull() && !c1.isNull()) // c5 (column_name) is null - see rollup def + // { + // TLOG(0, toNoDecorator, __HERE__) + // << c3.displayData() << '.' << c4.displayData() + // << " => " + // << c6.displayData() << '.' << c7.displayData() + // << std::endl; + // tables.insert(c7); // r_table_name + // references.insert( Reference( table, c7)); + // } + // } + + // toQuery QueryR(conn, SQLTableREF, toQueryParams() << schema.toUpper() << table.toUpper()); + // while (!QueryR.eof()) + // { + // c1 = QueryR.readValue(); + // c2 = QueryR.readValue(); + // c3 = QueryR.readValue(); + // c4 = QueryR.readValue(); + // c5 = QueryR.readValue(); + // c6 = QueryR.readValue(); + // c7 = QueryR.readValue(); + // c8 = QueryR.readValue(); + // c9 = QueryR.readValue(); + + // if( c5.isNull() && c1.isNull()) + // { + // // Here collect FK details (column list for compound keys) + // } + + // if( c5.isNull() && !c1.isNull()) + // { + // TLOG(0, toNoDecorator, __HERE__) + // << c3.displayData() << '.' << c4.displayData() + // << " => " + // << c6.displayData() << '.' << c7.displayData() + // << std::endl; + // tables.insert(c4); // table_name + // references.insert( Reference( c4, table)); + // } + // } + + toQuery QueryA(conn, SQLALLRef, toQueryParams() << schema.toUpper()); + while (!QueryA.eof()) + { + c1 = QueryA.readValue(); + c2 = QueryA.readValue(); + c3 = QueryA.readValue(); + c4 = QueryA.readValue(); + c5 = QueryA.readValue(); + + TLOG(0, toNoDecorator, __HERE__) + << c2.displayData() << '.' << c3.displayData() + << " => " + << c4.displayData() << '.' << c5.displayData() + << std::endl; + tables.insert(c3); // table_name + tables.insert(c5); // table_name + references.insert( Reference( c3, c5)); + } + + Q_FOREACH(QString const&t, tables) + { + QMap<QString,QString> ta; // table atributes + ta["name"] = t; + ta["label"] = t; + ta["fontsize"] = "12"; + ta["comment"]= t; + ta["id"]= t; + ta["tooltip"] = t; + newGraph.addNewNode(ta); + } + + Q_FOREACH(Reference const&r, references) + { + QMap<QString,QString> ea; // edge attreibutes + newGraph.addNewEdge(r.first, r.second, ea); + } + + graph()->updateWithGraph(newGraph); + //update(); + graph()->update(); + update(); +} + +/** Clear result widget */ +void toResultDrawing::clearData() +{ + initEmpty(); +} Modified: branches/tora3/src/core/toresultdrawing.h =================================================================== --- branches/tora3/src/core/toresultdrawing.h 2012-06-25 15:45:40 UTC (rev 4369) +++ branches/tora3/src/core/toresultdrawing.h 2012-06-25 20:39:22 UTC (rev 4370) @@ -1,69 +1,69 @@ - -/* 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-2009 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 TORESULTDRAWING_H -#define TORESULTDRAWING_H - -#include "core/toresult.h" -#include "dotgraphview.h" - -class toResultDrawing : public DotGraphView, public toResult -{ -private: - Q_OBJECT; - -public: - toResultDrawing(QWidget *parent = 0, - const char *name = 0, - Qt::WindowFlags f = 0); - - /** - * Implemented abstract method from toResult - */ - virtual void query(const QString &, toQueryParams const& params); - - /** Clear result widget */ - virtual void clearData(); -}; - - -#endif - + +/* 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-2009 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 TORESULTDRAWING_H +#define TORESULTDRAWING_H + +#include "core/toresult.h" +#include "dotgraphview.h" + +class toResultDrawing : public DotGraphView, public toResult +{ +private: + Q_OBJECT; + +public: + toResultDrawing(QWidget *parent = 0, + const char *name = 0, + Qt::WindowFlags f = 0); + + /** + * Implemented abstract method from toResult + */ + virtual void query(const QString &, toQueryParams const& params); + + /** Clear result widget */ + virtual void clearData(); +}; + + +#endif + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-07-25 21:05:23
|
Revision: 4381 http://tora.svn.sourceforge.net/tora/?rev=4381&view=rev Author: ibre5041 Date: 2012-07-25 21:05:17 +0000 (Wed, 25 Jul 2012) Log Message: ----------- Set enabled for all the connection types Modified Paths: -------------- branches/tora3/src/core/toresultdrawing.cpp branches/tora3/src/core/toresultdrawing.h Modified: branches/tora3/src/core/toresultdrawing.cpp =================================================================== --- branches/tora3/src/core/toresultdrawing.cpp 2012-07-12 13:49:35 UTC (rev 4380) +++ branches/tora3/src/core/toresultdrawing.cpp 2012-07-25 21:05:17 UTC (rev 4381) @@ -40,11 +40,15 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "core/toresultdrawing.h" +#include "core/utils.h" + #include "dotgraph.h" #include "dotgraphview.h" -// BIG FAT WARNING - this query causes ORA-07445: exception encountered: core dump [lnxmin()+2384] [SIGSEGV] -// on 11gR1. Use "alter session set OPTIMIZER_FEATURES_ENABLE='10.2.0.4';" as workaround +#include "icons/refresh.xpm" + +// BIG FAT WARNING - this query causes: ORA-07445: exception encountered: core dump [lnxmin()+2384] [SIGSEGV] +// on 11gR1. Use "alter session set OPTIMIZER_FEATURES_ENABLE='10.2.0.4';" as a workaround // Note: the query is not bi-directional static toSQL SQLTableFKWithDistance( "toResultDrawing:FKConstraintsWithDistance", @@ -110,46 +114,57 @@ : QWidget(parent, f) , toResult() { - if (name) - setObjectName(name); + if (name) + setObjectName(name); - QVBoxLayout *vbox = new QVBoxLayout; + QVBoxLayout *vbox = new QVBoxLayout; + vbox->setContentsMargins(0, 0, 0, 0); + vbox->setSpacing(0); + QToolBar *toolbar = Utils::toAllocBar(this, tr("Schema attributes")); + vbox->addWidget(toolbar); + + refreshAct = toolbar->addAction( + QIcon(QPixmap(const_cast<const char**>(refresh_xpm))), + tr("Refresh data")); + connect(refreshAct, SIGNAL(triggered()), this, SLOT(refreshAction())); + + toolbar->addSeparator(); + m_dotGraphView = new DotGraphView(NULL, this); m_dotGraphView ->initEmpty(); m_dotGraphView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); vbox->addWidget(m_dotGraphView); this->setFocusProxy(m_dotGraphView); - vbox->setContentsMargins(0, 0, 0, 0); - vbox->setSpacing(0); this->setLayout(vbox); }; void toResultDrawing::query(const QString &, toQueryParams const& params) { - typedef QPair<QString, QString> Reference; - toConnection &conn = connection(); + toResult::setParams(params); + typedef QPair<QString, QString> Reference; + toConnection &conn = connection(); - m_dotGraphView->initEmpty(); - QString schema(params.at(0)), table(params.at(1)); - QSet<QString> tables; - QSet<Reference> references; + m_dotGraphView->initEmpty(); + QString schema(params.at(0)), table(params.at(1)); + QSet<QString> tables; + QSet<Reference> references; - tables.insert(table); + tables.insert(table); - DotGraph newGraph("dot"); - QMap<QString,QString> ga; - ga["id"] = "Schema"; - ga["compound"] = "true"; - ga["shape"] = "box"; - ga["rankdir"] = "BT"; // BOTTOM to TOP arrows + DotGraph newGraph("dot"); + QMap<QString,QString> ga; + ga["id"] = "Schema"; + ga["compound"] = "true"; + ga["shape"] = "box"; + ga["rankdir"] = "BT"; // BOTTOM to TOP arrows - newGraph.setGraphAttributes(ga); + newGraph.setGraphAttributes(ga); - toQValue c1, c2, c3, c4, c5, c6, c7, c8, c9; - // TODO: use toCache here - additional attributes - toQuery QueryC(conn, SQLTableFKWithDistance, toQueryParams() << schema.toUpper() << 2 << table.toUpper()); + toQValue c1, c2, c3, c4, c5, c6, c7, c8, c9; + // TODO: use toCache here - additional attributes + toQuery QueryC(conn, SQLTableFKWithDistance, toQueryParams() << schema.toUpper() << 2 << table.toUpper()); while (!QueryC.eof()) { c1 = QueryC.readValue(); @@ -176,26 +191,26 @@ } - Q_FOREACH(QString const&t, tables) + Q_FOREACH(QString const&t, tables) { - QMap<QString,QString> ta; // table atributes - ta["name"] = t; - ta["label"] = t; - ta["fontsize"] = "12"; - ta["comment"]= t; - ta["id"]= t; - ta["tooltip"] = t; - newGraph.addNewNode(ta); + QMap<QString,QString> ta; // table atributes + ta["name"] = t; + ta["label"] = t; + ta["fontsize"] = "12"; + ta["comment"]= t; + ta["id"]= t; + ta["tooltip"] = t; + newGraph.addNewNode(ta); } - Q_FOREACH(Reference const&r, references) + Q_FOREACH(Reference const&r, references) { - QMap<QString,QString> ea; // edge attreibutes - newGraph.addNewEdge(r.first, r.second, ea); + QMap<QString,QString> ea; // edge attreibutes + newGraph.addNewEdge(r.first, r.second, ea); } - - m_dotGraphView->graph()->updateWithGraph(newGraph); - m_dotGraphView->graph()->update(); + + m_dotGraphView->graph()->updateWithGraph(newGraph); + m_dotGraphView->graph()->update(); } /** Clear result widget */ Modified: branches/tora3/src/core/toresultdrawing.h =================================================================== --- branches/tora3/src/core/toresultdrawing.h 2012-07-12 13:49:35 UTC (rev 4380) +++ branches/tora3/src/core/toresultdrawing.h 2012-07-25 21:05:17 UTC (rev 4381) @@ -52,12 +52,21 @@ Q_OBJECT; DotGraphView *m_dotGraphView; + QAction* refreshAct; public: toResultDrawing(QWidget *parent = 0, const char *name = 0, Qt::WindowFlags f = 0); /** + * Reimplemented from toResult. Can handle all connections. + */ + virtual bool canHandle(toConnection &) + { + return true; + } + + /** * Implemented abstract method from toResult */ virtual void query(const QString &, toQueryParams const& params); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-07-26 21:14:19
|
Revision: 4383 http://tora.svn.sourceforge.net/tora/?rev=4383&view=rev Author: ibre5041 Date: 2012-07-26 21:14:12 +0000 (Thu, 26 Jul 2012) Log Message: ----------- slider/ruler Modified Paths: -------------- branches/tora3/src/core/toresultdrawing.cpp branches/tora3/src/core/toresultdrawing.h Modified: branches/tora3/src/core/toresultdrawing.cpp =================================================================== --- branches/tora3/src/core/toresultdrawing.cpp 2012-07-25 21:07:41 UTC (rev 4382) +++ branches/tora3/src/core/toresultdrawing.cpp 2012-07-26 21:14:12 UTC (rev 4383) @@ -47,6 +47,8 @@ #include "icons/refresh.xpm" +#include <QSlider> + // BIG FAT WARNING - this query causes: ORA-07445: exception encountered: core dump [lnxmin()+2384] [SIGSEGV] // on 11gR1. Use "alter session set OPTIMIZER_FEATURES_ENABLE='10.2.0.4';" as a workaround // Note: the query is not bi-directional @@ -111,8 +113,9 @@ toResultDrawing::toResultDrawing(QWidget *parent, const char *name, Qt::WindowFlags f) - : QWidget(parent, f) - , toResult() + : QWidget(parent, f) + , toResult() + , distance(1) { if (name) setObjectName(name); @@ -131,6 +134,14 @@ toolbar->addSeparator(); + slider = new QSlider(Qt::Horizontal, toolbar); + slider->setMinimum(1); + slider->setMaximum(10); + slider->setTickPosition(QSlider::TicksAbove); + slider->setTickInterval(1); + toolbar->addWidget(slider); + connect(slider, SIGNAL(valueChanged(int)), this, SLOT(setDistance(int))); + m_dotGraphView = new DotGraphView(NULL, this); m_dotGraphView ->initEmpty(); m_dotGraphView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); @@ -164,7 +175,7 @@ toQValue c1, c2, c3, c4, c5, c6, c7, c8, c9; // TODO: use toCache here - additional attributes - toQuery QueryC(conn, SQLTableFKWithDistance, toQueryParams() << schema.toUpper() << 2 << table.toUpper()); + toQuery QueryC(conn, SQLTableFKWithDistance, toQueryParams() << schema.toUpper() << distance << table.toUpper()); while (!QueryC.eof()) { c1 = QueryC.readValue(); @@ -218,3 +229,9 @@ { m_dotGraphView->initEmpty(); } + +void toResultDrawing::setDistance(int d) +{ + distance = d; + refresh(); +} Modified: branches/tora3/src/core/toresultdrawing.h =================================================================== --- branches/tora3/src/core/toresultdrawing.h 2012-07-25 21:07:41 UTC (rev 4382) +++ branches/tora3/src/core/toresultdrawing.h 2012-07-26 21:14:12 UTC (rev 4383) @@ -45,6 +45,7 @@ #include "core/toresult.h" class DotGraphView; +class QSlider; class toResultDrawing : public QWidget, public toResult { @@ -53,6 +54,8 @@ DotGraphView *m_dotGraphView; QAction* refreshAct; + QSlider* slider; + int distance; public: toResultDrawing(QWidget *parent = 0, const char *name = 0, @@ -73,6 +76,8 @@ /** Clear result widget */ virtual void clearData(); +private slots: + void setDistance(int); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-07-28 00:02:29
|
Revision: 4387 http://tora.svn.sourceforge.net/tora/?rev=4387&view=rev Author: ibre5041 Date: 2012-07-28 00:02:22 +0000 (Sat, 28 Jul 2012) Log Message: ----------- some comments about logging Modified Paths: -------------- branches/tora3/src/core/tologger.h branches/tora3/src/core/tomain.cpp Modified: branches/tora3/src/core/tologger.h =================================================================== --- branches/tora3/src/core/tologger.h 2012-07-27 18:03:49 UTC (rev 4386) +++ branches/tora3/src/core/tologger.h 2012-07-28 00:02:22 UTC (rev 4387) @@ -25,9 +25,19 @@ using namespace boost; using namespace boost::iostreams; +//////////////////////////////////////////////////////////////////////////////// +// EXAMPLE USAGE +// - each log channel is identified by constant number (1-9) +// - decorator is a template class which prints log messages header(see beloow) +// - for where use preprocessor macro __HERE__ +// +// Usage: +// TLOG(1, toDecorator, __HERE__) << "The value for a is:" << a << std::endl; +// TLOG(5, toNoDecorator, __HERE__) << "The value for a is:" << a << std::endl; +//////////////////////////////////////////////////////////////////////////////// #define TLOG(lognumber, decorator, where) get_log(lognumber).ts<decorator>( where) -#define DISABLE_LOG(lognumber) \ +#define DISABLE_LOG(lognumber) \ template<> \ inline thread_safe_log templ_get_log_ownthread(int_to_type<lognumber>*) \ { \ @@ -36,7 +46,31 @@ static internal_thread_safe_log_ownthread log( out ); \ return thread_safe_log( log); \ }; +/** Wrapper class for Boost's null_sink ostream +*/ +struct s_null_sink : public boost::iostreams::stream_buffer<boost::iostreams::null_sink> +{ + s_null_sink() + { + open(boost::iostreams::null_sink() ); + } +}; +#define DOCKLET_LOG(lognumber) \ + template<> \ + inline thread_safe_log templ_get_log_ownthread(int_to_type<lognumber>*) \ + { \ + static toOStream out; \ + static internal_thread_safe_log_ownthread log( out ); \ + return thread_safe_log( log); \ + }; + + +//////////////////////////////////////////////////////////////////////////////// +// DECORATORS toDecorator, toNoDecorator +//////////////////////////////////////////////////////////////////////////////// +// toDecorator header: +// "----<tid> file.cpp:5 ----\n" typedef Tdecorator < TSLOG_TYPELIST_6(dashDecorator<4>, tidDecorator<DEFAULT_THREAD_MANAGER>, @@ -46,41 +80,42 @@ charDecorator < '\n' > ) > toDecorator; +typedef tidDecorator<DEFAULT_THREAD_MANAGER,0> tidDecoratorNC; typedef Tdecorator < +TSLOG_TYPELIST_6(dashDecorator<4>, + tidDecoratorNC, + charDecorator < ' ' > , + hereDecorator, + dashDecorator<4>, + charDecorator < '\n' > + ) > toDecoratorNC; + +// toNoDecorator header: +// " " +typedef Tdecorator < TSLOG_TYPELIST_1(charDecorator < ' ' > ) > toNoDecorator; -/** Wrapper class for Boost's null_sink ostream -*/ -struct s_null_sink : public boost::iostreams::stream_buffer<boost::iostreams::null_sink> -{ - s_null_sink() - { - open(boost::iostreams::null_sink() ); - } -}; - +//////////////////////////////////////////////////////////////////////////////// +// default templatetized log channel, by default it prints onto STDOUT +// +// macros DISABLE_LOG, DOCKLET_LOG generate templates specialization +// these classes use other outputs +//////////////////////////////////////////////////////////////////////////////// template< int idxLog> inline thread_safe_log templ_get_log_ownthread( int_to_type< idxLog> *i = NULL ) { - /* static std::ofstream out( get_out_name< idxLog>( false).c_str() ); */ -#ifdef DEBUG static internal_thread_safe_log_ownthread log( std::cout ); -#else - static s_null_sink nsink; - static std::ostream out(&nsink); - static internal_thread_safe_log_ownthread log( out ); -#endif - ///TODO it can crash here - /* The main thread(1) already exited the funcion main. Runs __run_exit_handlers and calls ~thread_safe_log_writer_ownthread. - It is waiting till the writter thread stops, m_bShouldBeDestructed == true. - The static instance "log" is already destructed. vptr => onto base class basic_internal_thread_safe_log_base. + /* TODO it can crash here + The main thread(1) already exited the funcion main. Runs __run_exit_handlers and calls ~thread_safe_log_writer_ownthread. + It is waiting till the writter thread stops, m_bShouldBeDestructed == true. + The static instance "log" is already destructed. vptr => onto base class basic_internal_thread_safe_log_base. Some other thread still uses logging and enters this line. basic_thread_safe_log( internal_type & tsLog) : m_tsLog( tsLog) { // get underlying stream state - => tsLog.copy_state_to( ts() ); // pure virtual call SEGFAULT + => tsLog.copy_state_to( ts() ); // pure virtual call - SEGFAULT useColor = is_color_terminal(tsLog); } */ @@ -92,18 +127,24 @@ //DISABLE_LOG(2); DISABLE_LOG(3); // tonoblockquery<3> - debugging(disabled) DISABLE_LOG(4); // tonoblockquery<4> - data read(disabled) -DISABLE_LOG(5); // tonoblockquery<5> +DOCKLET_LOG(5); // tonoblockquery<5> - connection provider finder //DISABLE_LOG(6); // tonoblockquery<6> -/* use this if you want output into the file -thread_safe_log templ_get_log_ownthread<1>( int_to_type< 1> * = NULL ) -{ - static std::ofstream out( get_out_name< idxLog>( false).c_str() ); - static internal_thread_safe_log_ownthread log( out); - return thread_safe_log( log); -} -*/ +//////////////////////////////////////////////////////////////////////////////// +// EXAMPLE USAGE +//////////////////////////////////////////////////////////////////////////////// +// +// /* use this if you want output into the file*/ +// thread_safe_log templ_get_log_ownthread<1>( int_to_type< 1> * = NULL ) +// { +// static std::ofstream out( get_out_name< idxLog>( false).c_str() ); +// static internal_thread_safe_log_ownthread log( out); +// return thread_safe_log( log); +// } +// +//////////////////////////////////////////////////////////////////////////////// + inline thread_safe_log get_log( int idxLog) { switch( idxLog) @@ -130,12 +171,12 @@ #include "ts_log/decorator.h" #include <QString> +#define TLOG(lognumber, decorator, where) get_null_log() + class NullLogger; template<typename C> inline NullLogger& operator<<( NullLogger& stream, const C &str); -//template<typename C> -//inline NullLogger& operator<<( NullLogger& stream, const C str); class NullLogger : public NullType { @@ -145,7 +186,6 @@ return *this; } template<class C> friend NullLogger& operator<<(NullLogger& stream, const C &str); -// template<class C> friend NullLogger& operator<<(NullLogger& stream, const C str); }; template<typename C> @@ -154,26 +194,18 @@ return stream; }; -//template<typename C> -//inline NullLogger& operator<<( NullLogger& stream, const C str) -//{ -// return stream; -//}; - inline NullLogger& get_null_log() { static NullLogger null; return null; } -#define TLOG(lognumber, decorator, where) get_null_log() +#endif // DEBUGing -#endif - -inline std::ostream& operator<<( std::ostream & stream, const QString & str) +inline std::ostream& operator<<(std::ostream & stream, const QString & str) { stream << qPrintable(str); - return stream; + return stream; } Modified: branches/tora3/src/core/tomain.cpp =================================================================== --- branches/tora3/src/core/tomain.cpp 2012-07-27 18:03:49 UTC (rev 4386) +++ branches/tora3/src/core/tomain.cpp 2012-07-28 00:02:22 UTC (rev 4387) @@ -210,7 +210,7 @@ // Loop over all finders and all ther find method each of them can return more locations for(std::vector<std::string>::const_iterator i = finders.begin(); i != finders.end(); ++i) { - TLOG(5, toDecorator, __HERE__) << "Looking for client: " << *i << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << "Looking for client: " << *i << std::endl; std::auto_ptr<toConnectionProviderFinder> finder = ConnectionProviderFinderFactory::Instance().create(*i, 0); QList<toConnectionProviderFinder::ConnectionProvirerParams> l = finder->find(); allProviders.append(l); @@ -225,17 +225,17 @@ { if ( params.value("PROVIDER").toString() == ORACLE_PROVIDER && params.value("IS INSTANT").toBool() == false) { - TLOG(5, toDecorator, __HERE__) << "Loading: " << params.value("PATH").toString() << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << "Loading: " << params.value("PATH").toString() << std::endl; QString providerName = params.value("PROVIDER").toString(); toConnectionProviderRegistrySing::Instance().load(params); - TLOG(5, toDecorator, __HERE__) << "Loaded provider: " - << toConnectionProviderRegistrySing::Instance().get(providerName).name() - << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << "Loaded provider: " + << toConnectionProviderRegistrySing::Instance().get(providerName).name() + << std::endl; QList<QString> databases = toConnectionProviderRegistrySing::Instance().get(providerName).databases("", "", ""); foreach(QString const & d, databases) { - TLOG(5, toDecorator, __HERE__) << d << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << d << std::endl; } } } @@ -244,17 +244,17 @@ if ( !toConnectionProviderRegistrySing::Instance().providers().contains(ORACLE_PROVIDER)) { toConnectionProviderFinder::ConnectionProvirerParams const& params = allProviders.first(); - TLOG(5, toDecorator, __HERE__) << "Loading: " << params.value("PATH").toString() << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << "Loading: " << params.value("PATH").toString() << std::endl; QString providerName = params.value("PROVIDER").toString(); toConnectionProviderRegistrySing::Instance().load(params); - TLOG(5, toDecorator, __HERE__) << "Loaded provider: " - << toConnectionProviderRegistrySing::Instance().get(providerName).name() - << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << "Loaded provider: " + << toConnectionProviderRegistrySing::Instance().get(providerName).name() + << std::endl; QList<QString> databases = toConnectionProviderRegistrySing::Instance().get(providerName).databases("", "", ""); foreach(QString const & d, databases) { - TLOG(5, toDecorator, __HERE__) << d << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << d << std::endl; } } @@ -273,7 +273,7 @@ std::vector<std::string> connections = ConnectionProvirerFactory::Instance().keys(); for(std::vector<std::string>::const_iterator i = connections.begin(); i != connections.end(); ++i) { - TLOG(5, toDecorator, __HERE__) << "Loaded client: " << *i << std::endl; + TLOG(5, toDecoratorNC, __HERE__) << "Loaded client: " << *i << std::endl; } if (Connections.empty()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-07-28 22:38:21
|
Revision: 4396 http://tora.svn.sourceforge.net/tora/?rev=4396&view=rev Author: ibre5041 Date: 2012-07-28 22:38:14 +0000 (Sat, 28 Jul 2012) Log Message: ----------- Name Linux/MACOS threads - code copied from QT trunk Modified Paths: -------------- branches/tora3/src/core/utils.cpp branches/tora3/src/core/utils.h Modified: branches/tora3/src/core/utils.cpp =================================================================== --- branches/tora3/src/core/utils.cpp 2012-07-28 21:45:02 UTC (rev 4395) +++ branches/tora3/src/core/utils.cpp 2012-07-28 22:38:14 UTC (rev 4396) @@ -80,7 +80,11 @@ #include <CoreServices/CoreServices.h> #endif // Q_OS_MACX +#if defined(__linux__) +#include <sys/prctl.h> +#endif + #define CHUNK_SIZE 31 // A little magic to get lrefresh to work and get a check on qApp @@ -1477,6 +1481,19 @@ #endif } +void toSetThreadName(QThread const& p) +{ + // This was copied from QT trunk - as of 4.8.2 it is not used yet + QByteArray objectName = p.objectName().toLatin1(); + if (objectName.isEmpty()) + objectName = p.metaObject()->className(); +#if defined(__linux__) + prctl(PR_SET_NAME, (unsigned long)objectName.constData(), 0, 0, 0); +#elif defined(Q_OS_MAC) + pthread_setname_np(objectName.constData()); +#endif +} + bool toLibrary::isValidLibrary(QFileInfo path) { if( !path.exists()) Modified: branches/tora3/src/core/utils.h =================================================================== --- branches/tora3/src/core/utils.h 2012-07-28 21:45:02 UTC (rev 4395) +++ branches/tora3/src/core/utils.h 2012-07-28 22:38:14 UTC (rev 4396) @@ -588,6 +588,14 @@ */ TORA_EXPORT void toUnSetEnv(const QString &var); +/** Set name for the current thread. Should be called from run method + * @param use "*this" as parameter + * + * NOTE: body of this function is copied from QT trunk. + * This is not used in the current QT release(4.8.2) + */ +TORA_EXPORT void toSetThreadName(QThread const& p); + /** This library has static clasess only */ class toLibrary This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-07-28 22:45:47
|
Revision: 4397 http://tora.svn.sourceforge.net/tora/?rev=4397&view=rev Author: ibre5041 Date: 2012-07-28 22:45:41 +0000 (Sat, 28 Jul 2012) Log Message: ----------- use thread naming Modified Paths: -------------- branches/tora3/src/core/torunnable.cpp branches/tora3/src/core/torunnable.h branches/tora3/src/core/totaskrunner.cpp Modified: branches/tora3/src/core/torunnable.cpp =================================================================== --- branches/tora3/src/core/torunnable.cpp 2012-07-28 22:38:14 UTC (rev 4396) +++ branches/tora3/src/core/torunnable.cpp 2012-07-28 22:45:41 UTC (rev 4397) @@ -40,6 +40,7 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "core/torunnable.h" +#include "core/utils.h" #include <QCoreApplication> @@ -63,9 +64,15 @@ void toRunnableThread::run() { + Utils::toSetThreadName(*this); Runner->setThread(this); Runner->run(); delete Runner; QCoreApplication::postEvent(Deleter, new FinishedEvent(this)); } + +toRunnableThread::~toRunnableThread() +{ +} + Modified: branches/tora3/src/core/torunnable.h =================================================================== --- branches/tora3/src/core/torunnable.h 2012-07-28 22:38:14 UTC (rev 4396) +++ branches/tora3/src/core/torunnable.h 2012-07-28 22:45:41 UTC (rev 4397) @@ -84,8 +84,8 @@ { Q_OBJECT; - toRunnableThread *Thread; - + friend class toRunnableThread; // there is cyclic pointer reference between these two classes + toRunnableThread *Thread; // This value is initialized at toRunnableThread::run() public: /** @@ -118,7 +118,6 @@ Thread = thread; } - toRunnableThread* thread(void) const { return Thread; @@ -135,6 +134,8 @@ Q_OBJECT; toRunnable *Runner; + + /** override from QThread */ virtual void run(void); public: @@ -150,6 +151,7 @@ setObjectName(QString::fromLatin1("Task:") + Runner->objectName()); } + virtual ~toRunnableThread(); /** * Redeclares public Modified: branches/tora3/src/core/totaskrunner.cpp =================================================================== --- branches/tora3/src/core/totaskrunner.cpp 2012-07-28 22:38:14 UTC (rev 4396) +++ branches/tora3/src/core/totaskrunner.cpp 2012-07-28 22:45:41 UTC (rev 4397) @@ -39,7 +39,9 @@ * * END_COMMON_COPYRIGHT_HEADER */ -#include "totaskrunner.h" +#include "core/totaskrunner.h" +#include "core/utils.h" + #include <stdio.h> toTaskRunner::toTaskRunner(toTask *task) @@ -50,6 +52,7 @@ void toTaskRunner::run(void) { + Utils::toSetThreadName(*this); try { toThread::Lock->lock(); toThread::toThreadInfoStorage.setLocalData(new toThreadInfo(++toThread::lastThreadNumber)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-07-31 20:40:17
|
Revision: 4401 http://tora.svn.sourceforge.net/tora/?rev=4401&view=rev Author: ibre5041 Date: 2012-07-31 20:40:11 +0000 (Tue, 31 Jul 2012) Log Message: ----------- headers reorganization Modified Paths: -------------- branches/tora3/src/core/main.cpp branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toeventquerytask.cpp branches/tora3/src/core/toeventquerytask.h branches/tora3/src/core/toqvalue.h Modified: branches/tora3/src/core/main.cpp =================================================================== --- branches/tora3/src/core/main.cpp 2012-07-30 22:55:40 UTC (rev 4400) +++ branches/tora3/src/core/main.cpp 2012-07-31 20:40:11 UTC (rev 4401) @@ -51,14 +51,8 @@ #include "core/tomarkedtext.h" #include "core/tosplash.h" #include "core/toconnection.h" -#include "core/toeventquerytask.h" #include "core/toraversion.h" -//#include "tohighlightedtext.h" -//#include "toeventquery.h" - -//#include "totool.h" - // qt4 in via the qtranslator // #include "tora_toad.h" Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-07-30 22:55:40 UTC (rev 4400) +++ branches/tora3/src/core/toeventquery.cpp 2012-07-31 20:40:11 UTC (rev 4401) @@ -51,22 +51,6 @@ #include "core/toconnectionsub.h" #include "core/toconnectionsubloan.h" - -toQValue toEventQuery::readValue() -{ - if(Values.isEmpty()) - throw tr("Read past end of query"); - - if((Values.size() == 15 || Values.size() == 1) && !eof()) - { - if(Task) - Task->read(); // getting close to end, request read - } - - return Values.takeFirst(); -} - - toEventQuery::toEventQuery(toConnection &conn , QString const& sql , toQueryParams const& param @@ -84,6 +68,30 @@ TaskDone = false; } +toEventQuery::toEventQuery(toConnectionSubLoan &conn + , QString const& sql + , toQueryParams const& param + , toResultStats *statistics + ) +{ + throw toConnection::exception("Not implemented yet: toEventQuery::toEventQuery(toConnectionSubLoan &conn..."); +} + +toQValue toEventQuery::readValue() +{ + if(Values.isEmpty()) + throw tr("Read past end of query"); + + if((Values.size() == 15 || Values.size() == 1) && !eof()) + { + if(Task) + Task->read(); // getting close to end, request read + } + + return Values.takeFirst(); +} + + //toEventQuery::toEventQuery(toConnection &conn //// , toQuery::queryMode mode // , QString const& sql @@ -221,12 +229,8 @@ Processed = rows; } -toEventQuery::toEventQuery(toConnectionSubLoan &conn -// , toQuery::queryMode mode - , QString const& sql - , toQueryParams const& param - , toResultStats *statistics - ) +void toEventQuery::readAll(void) { - throw toConnection::exception("Not implemented yet: toEventQuery::toEventQuery(toConnectionSubLoan &conn..."); + if(Task) + Task->read(true); } Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-07-30 22:55:40 UTC (rev 4400) +++ branches/tora3/src/core/toeventquery.h 2012-07-31 20:40:11 UTC (rev 4401) @@ -47,13 +47,13 @@ #include "core/toconnection.h" #include "core/toconnectionsub.h" #include "core/toconnectionsubloan.h" -#include "core/toeventquerytask.h" #include "core/toresultstats.h" #include <QObject> #include <QPointer> class toResultStats; +class toEventQueryTask; /** * Run a query in the background without blocking. This class should @@ -250,13 +250,8 @@ /** * Read all data */ - void readAll(void) - { - if(Task) - Task->read(true); - } + void readAll(void); - signals: Modified: branches/tora3/src/core/toeventquerytask.cpp =================================================================== --- branches/tora3/src/core/toeventquerytask.cpp 2012-07-30 22:55:40 UTC (rev 4400) +++ branches/tora3/src/core/toeventquerytask.cpp 2012-07-31 20:40:11 UTC (rev 4401) @@ -40,6 +40,7 @@ * END_COMMON_COPYRIGHT_HEADER */ #include "core/toeventquerytask.h" +#include "core/toeventquery.h" #include "core/utils.h" #include "core/tologger.h" #include "core/toconf.h" @@ -58,41 +59,45 @@ #define CATCH_ALL \ catch(const toConnection::exception &str) { \ + TLOG(1,toDecorator,__HERE__) << "What: " << str; \ if(!Closed) { \ emit error(str); \ close(); \ } \ } \ catch(const QString &str) { \ + TLOG(1,toDecorator,__HERE__) << "What: " << str; \ if(!Closed) { \ emit error(str); \ close(); \ } \ } \ catch(std::exception const &e) { \ + TLOG(1,toDecorator,__HERE__) << "what: " << e.what(); \ if(!Closed) { \ - emit error(QString(e.what())); \ - close(); \ - } \ - } \ + emit error(QString(e.what())); \ + close(); \ + } \ + } \ catch(...) { \ - TLOG(1,toDecorator,__HERE__) << " Ignored exception." << std::endl; \ + TLOG(1,toDecorator,__HERE__) << " Ignored exception." << std::endl; \ if(!Closed) { \ - emit error(tr("Unknown exception.")); \ + emit error(tr("Unknown exception.")); \ close(); \ } \ } -toEventQueryTask::toEventQueryTask(QObject *parent +toEventQueryTask::toEventQueryTask(toEventQuery *parent , toConnection &conn , QString const& sql , toQueryParams const& param //stat, toResultStats *stats ) : toRunnable() - , SQL(sql) - , Params(param) + , SQL(sql) + , Params(param) + , ParentQuery(parent) //stat , Statistics(stats) { Query = 0; @@ -171,6 +176,7 @@ toEventQueryTask::~toEventQueryTask() { + ParentQuery->Task = NULL; } Modified: branches/tora3/src/core/toeventquerytask.h =================================================================== --- branches/tora3/src/core/toeventquerytask.h 2012-07-30 22:55:40 UTC (rev 4400) +++ branches/tora3/src/core/toeventquerytask.h 2012-07-31 20:40:11 UTC (rev 4401) @@ -57,10 +57,8 @@ #include <QMutex> #include <QList> -typedef QList<toQValue> ValuesList; -Q_DECLARE_METATYPE(ValuesList); - class toResultStats; +class toEventQuery; /** @@ -91,12 +89,14 @@ // object was closed volatile bool Closed; + toEventQuery *ParentQuery; + // can't synchronize on query or cancel wouldn't work, but need to // protect access during close() which may be called from the main // thread QMutex CloseLock; - + public: // keeps thread from exiting until toEventQuery exits. this @@ -104,10 +104,10 @@ // task is alive. QMutex ThreadAlive; - toEventQueryTask(QObject *parent + toEventQueryTask(toEventQuery *parent , toConnection &conn , QString const& sql - , toQueryParams const& param + , toQueryParams const& param // , toResultStats *stats = NULL ); virtual ~toEventQueryTask(); Modified: branches/tora3/src/core/toqvalue.h =================================================================== --- branches/tora3/src/core/toqvalue.h 2012-07-30 22:55:40 UTC (rev 4400) +++ branches/tora3/src/core/toqvalue.h 2012-07-31 20:40:11 UTC (rev 4401) @@ -289,4 +289,7 @@ typedef QList<toQValue> toQueryParams; +typedef QList<toQValue> ValuesList; +Q_DECLARE_METATYPE(ValuesList); + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-08-06 11:31:29
|
Revision: 4405 http://tora.svn.sourceforge.net/tora/?rev=4405&view=rev Author: ibre5041 Date: 2012-08-06 11:31:22 +0000 (Mon, 06 Aug 2012) Log Message: ----------- toeventquery cleanup Modified Paths: -------------- branches/tora3/src/core/toconnectionsubloan.h branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toeventquerytask.cpp branches/tora3/src/core/toeventquerytask.h Modified: branches/tora3/src/core/toconnectionsubloan.h =================================================================== --- branches/tora3/src/core/toconnectionsubloan.h 2012-08-06 11:30:01 UTC (rev 4404) +++ branches/tora3/src/core/toconnectionsubloan.h 2012-08-06 11:31:22 UTC (rev 4405) @@ -5,9 +5,11 @@ class toConnection; class toConnectionSub; +class toEventQuery; class toConnectionSubLoan { + friend class toEventQuery; public: toConnectionSubLoan(toConnection &con); Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-08-06 11:30:01 UTC (rev 4404) +++ branches/tora3/src/core/toeventquery.cpp 2012-08-06 11:31:22 UTC (rev 4405) @@ -59,20 +59,27 @@ : SQL(sql) , Param(param) , Statistics(stats) - , Task(0) + , Task(NULL) + , Connection(conn) + , Processed(0) + , Columns(0) + , TaskDone(false) { - - Connection = &conn; - Processed = 0; - Columns = 0; - TaskDone = false; } toEventQuery::toEventQuery(toConnectionSubLoan &conn , QString const& sql , toQueryParams const& param - , toResultStats *statistics + , toResultStats *stats ) + : SQL(sql) + , Param(param) + , Statistics(stats) + , Task(NULL) + , Connection(conn.Connection) + , Processed(0) + , Columns(0) + , TaskDone(false) { throw toConnection::exception("Not implemented yet: toEventQuery::toEventQuery(toConnectionSubLoan &conn..."); } @@ -112,7 +119,7 @@ void toEventQuery::start() { - Task = new toEventQueryTask(this, *Connection, SQL, Param //stat , Statistics + Task = new toEventQueryTask(*this, Connection, SQL, Param //stat , Statistics ); Task->ThreadAlive.lock(); Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-08-06 11:30:01 UTC (rev 4404) +++ branches/tora3/src/core/toeventquery.h 2012-08-06 11:31:22 UTC (rev 4405) @@ -48,6 +48,7 @@ #include "core/toconnectionsub.h" #include "core/toconnectionsubloan.h" #include "core/toresultstats.h" +#include "core/toqvalue.h" #include <QObject> #include <QPointer> @@ -77,7 +78,7 @@ toQueryParams Param; // Number of rows processed. - int Processed; + unsigned long Processed; // Statistics to be used if any. QPointer<toResultStats> Statistics; @@ -86,7 +87,7 @@ toQColumnDescriptionList Description; // Number of columns in Description - int Columns; + unsigned Columns; // QThread instance that will do actual reading // Note: this pointer is NOT deleted by me, but by toRunnableThread::run/delete Runner @@ -102,7 +103,7 @@ volatile bool TaskDone; // connection for this query - toConnection *Connection; + toConnection &Connection; public: @@ -138,7 +139,6 @@ // ); toEventQuery(toConnectionSubLoan &conn -// , toQuery::queryMode mode , QString const& sql , toQueryParams const& param , toResultStats *statistics = NULL Modified: branches/tora3/src/core/toeventquerytask.cpp =================================================================== --- branches/tora3/src/core/toeventquerytask.cpp 2012-08-06 11:30:01 UTC (rev 4404) +++ branches/tora3/src/core/toeventquerytask.cpp 2012-08-06 11:31:22 UTC (rev 4405) @@ -48,6 +48,7 @@ #include "core/totool.h" #include "core/toconfiguration.h" #include "core/toquery.h" +#include "core/toqvalue.h" #include <QApplication> #include <QMutexLocker> @@ -88,7 +89,7 @@ } -toEventQueryTask::toEventQueryTask(toEventQuery *parent +toEventQueryTask::toEventQueryTask(toEventQuery &parent , toConnection &conn , QString const& sql , toQueryParams const& param @@ -98,12 +99,12 @@ , SQL(sql) , Params(param) , ParentQuery(parent) + , Query(0) + , Columns(0) + , Connection(conn) + , Closed(false) //stat , Statistics(stats) { - Query = 0; - Columns = 0; - Connection = &conn; - Closed = false; setObjectName("toEventQueryTask"); } @@ -112,7 +113,7 @@ { try { - Query = new toQuery(*Connection, SQL, Params); + Query = new toQuery(Connection, SQL, Params); //Query->execute(SQL, Params); connect(this, @@ -176,7 +177,7 @@ toEventQueryTask::~toEventQueryTask() { - ParentQuery->Task = NULL; + ParentQuery.Task = NULL; } @@ -237,7 +238,7 @@ for(int row = 0; row < maxRead; row++) { - for(int i = 0; i < Columns && !Query->eof(); i++) + for(unsigned i = 0; i < Columns && !Query->eof(); i++) values.append(Query->readValue()); } Modified: branches/tora3/src/core/toeventquerytask.h =================================================================== --- branches/tora3/src/core/toeventquerytask.h 2012-08-06 11:30:01 UTC (rev 4404) +++ branches/tora3/src/core/toeventquerytask.h 2012-08-06 11:31:22 UTC (rev 4405) @@ -60,7 +60,6 @@ class toResultStats; class toEventQuery; - /** * Threaded class used by toEventQuery. Internal to toEventQuery only. * @@ -70,6 +69,8 @@ */ class toEventQueryTask : public toRunnable { +private: + friend class toEventQuery; Q_OBJECT; // the real query object @@ -84,27 +85,24 @@ // Statistics to be used if any. //stat QPointer<toResultStats> Statistics; - toConnection *Connection; + toConnection &Connection; // object was closed volatile bool Closed; - toEventQuery *ParentQuery; + toEventQuery &ParentQuery; // can't synchronize on query or cancel wouldn't work, but need to // protect access during close() which may be called from the main // thread QMutex CloseLock; - -public: - // keeps thread from exiting until toEventQuery exits. this // prevents many race conditions and the caller can always assume // task is alive. QMutex ThreadAlive; - toEventQueryTask(toEventQuery *parent + toEventQueryTask(toEventQuery &parent , toConnection &conn , QString const& sql , toQueryParams const& param @@ -113,11 +111,8 @@ virtual ~toEventQueryTask(); protected: - - /** * Overrides toRunnable::run. Create toRunnableThread to start - * */ virtual void run(void); @@ -130,36 +125,28 @@ public slots: /** * Queues a read request. Emits readRequested() - * */ void read(bool all = false); /** * Closes this class. Good idea to call this. - * */ void close(void); - signals: // must be careful when defining signals. passing by reference // will share memory between threads. - /** * A read was requested - * */ void readRequested(bool all); - /** * Error message - * */ void error(const toConnection::exception &msg); - /** * Result headers * @@ -168,24 +155,18 @@ */ void headers(toQColumnDescriptionList &desc, int columns); - /** * Data read from query - * */ void data(ValuesList &values); - /** * Emitted when sql query is done - * */ void done(); - /** * Emitted if query.rowsProcessed() > 0. Number of affected rows. - * */ void rowsProcessed(int rows); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-08-06 15:04:57
|
Revision: 4406 http://tora.svn.sourceforge.net/tora/?rev=4406&view=rev Author: ibre5041 Date: 2012-08-06 15:04:50 +0000 (Mon, 06 Aug 2012) Log Message: ----------- Modified Paths: -------------- branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toeventquerytask.cpp branches/tora3/src/core/toeventquerytask.h Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-08-06 11:31:22 UTC (rev 4405) +++ branches/tora3/src/core/toeventquery.cpp 2012-08-06 15:04:50 UTC (rev 4406) @@ -121,7 +121,7 @@ { Task = new toEventQueryTask(*this, Connection, SQL, Param //stat , Statistics ); - Task->ThreadAlive.lock(); + ///Task->ThreadAlive.lock(); connect(Task, SIGNAL(headers(toQColumnDescriptionList &, int)), @@ -163,10 +163,12 @@ { if(Task) { - disconnect(Task, 0, 0, 0); + Task->disconnect(); + //disconnect(Task, 0, 0, 0); if(Task->thread()) - Task->thread()->exit(); - Task->ThreadAlive.unlock(); + //Task->thread()->exit(); + Task->thread()->wait(); + //Task->ThreadAlive.unlock(); } } catch(...) @@ -174,6 +176,7 @@ TLOG(1, toDecorator, __HERE__) << " Ignored exception." << std::endl; ; // ignored } + //Task->ThreadAlive.unlock(); } @@ -227,6 +230,7 @@ void toEventQuery::taskFinished() { TaskDone = true; + Task = NULL; emit done(this); } Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-08-06 11:31:22 UTC (rev 4405) +++ branches/tora3/src/core/toeventquery.h 2012-08-06 15:04:50 UTC (rev 4406) @@ -148,7 +148,9 @@ /** - * Start the query. Must be called prior to any other function. + * Start the query. + * First connect all the slots and then call start + * Must be called prior to any other function, */ void start(void); Modified: branches/tora3/src/core/toeventquerytask.cpp =================================================================== --- branches/tora3/src/core/toeventquerytask.cpp 2012-08-06 11:31:22 UTC (rev 4405) +++ branches/tora3/src/core/toeventquerytask.cpp 2012-08-06 15:04:50 UTC (rev 4406) @@ -60,21 +60,21 @@ #define CATCH_ALL \ catch(const toConnection::exception &str) { \ - TLOG(1,toDecorator,__HERE__) << "What: " << str; \ + TLOG(1,toDecorator,__HERE__) << "What: " << str << std::endl;\ if(!Closed) { \ emit error(str); \ close(); \ } \ } \ catch(const QString &str) { \ - TLOG(1,toDecorator,__HERE__) << "What: " << str; \ + TLOG(1,toDecorator,__HERE__) << "What: " << str << std::endl;\ if(!Closed) { \ emit error(str); \ close(); \ } \ } \ catch(std::exception const &e) { \ - TLOG(1,toDecorator,__HERE__) << "what: " << e.what(); \ + TLOG(1,toDecorator,__HERE__) << "what: " << e.what() << std::endl;\ if(!Closed) { \ emit error(QString(e.what())); \ close(); \ @@ -100,7 +100,7 @@ , Params(param) , ParentQuery(parent) , Query(0) - , Columns(0) + , ColumnCount(0) , Connection(conn) , Closed(false) //stat , Statistics(stats) @@ -123,8 +123,8 @@ Qt::QueuedConnection); toQColumnDescriptionList desc = Query->describe(); - Columns = Query->columns(); - emit headers(desc, Columns); + ColumnCount = Query->columns(); + emit headers(desc, ColumnCount); if(Query->eof()) { @@ -171,7 +171,7 @@ // ignored } - ThreadAlive.lock(); + //ThreadAlive.lock(); } @@ -222,7 +222,7 @@ void toEventQueryTask::pread(bool all) { - if(!Query || Columns < 1) + if(!Query || ColumnCount == 0) { close(); return; @@ -238,7 +238,7 @@ for(int row = 0; row < maxRead; row++) { - for(unsigned i = 0; i < Columns && !Query->eof(); i++) + for(unsigned i = 0; i < ColumnCount && !Query->eof(); i++) values.append(Query->readValue()); } Modified: branches/tora3/src/core/toeventquerytask.h =================================================================== --- branches/tora3/src/core/toeventquerytask.h 2012-08-06 11:31:22 UTC (rev 4405) +++ branches/tora3/src/core/toeventquerytask.h 2012-08-06 15:04:50 UTC (rev 4406) @@ -80,7 +80,7 @@ QString SQL; toQueryParams Params; - int Columns; + unsigned ColumnCount; // Statistics to be used if any. //stat QPointer<toResultStats> Statistics; @@ -100,7 +100,7 @@ // keeps thread from exiting until toEventQuery exits. this // prevents many race conditions and the caller can always assume // task is alive. - QMutex ThreadAlive; + ///QMutex ThreadAlive; toEventQueryTask(toEventQuery &parent , toConnection &conn This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-08-07 20:50:00
|
Revision: 4407 http://tora.svn.sourceforge.net/tora/?rev=4407&view=rev Author: ibre5041 Date: 2012-08-07 20:49:54 +0000 (Tue, 07 Aug 2012) Log Message: ----------- toEventquery buffering Modified Paths: -------------- branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toresultmodel.h branches/tora3/src/core/toresulttableview.cpp Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-08-06 15:04:50 UTC (rev 4406) +++ branches/tora3/src/core/toeventquery.cpp 2012-08-07 20:49:54 UTC (rev 4407) @@ -62,7 +62,7 @@ , Task(NULL) , Connection(conn) , Processed(0) - , Columns(0) + , ColumnCount(0) , TaskDone(false) { } @@ -78,18 +78,26 @@ , Task(NULL) , Connection(conn.Connection) , Processed(0) - , Columns(0) + , ColumnCount(0) , TaskDone(false) { throw toConnection::exception("Not implemented yet: toEventQuery::toEventQuery(toConnectionSubLoan &conn..."); } +/* Call stask for this function + * Async thread toEventQueryTask emits signal data + * the rest is processed in the main thread + * the slot taskData receives data (run within the main thread context) + * taskData emits signal dataAvailable + * toEventQuery parent(toResulModel for example) receives signal + * and then calls toEventQeury::readValue + */ toQValue toEventQuery::readValue() { if(Values.isEmpty()) throw tr("Read past end of query"); - if((Values.size() == 15 || Values.size() == 1) && !eof()) + if((Values.size() < ColumnCount) && !eof()) { if(Task) Task->read(); // getting close to end, request read @@ -216,7 +224,7 @@ void toEventQuery::taskDesc(toQColumnDescriptionList &desc, int column) { Description = desc; - Columns = column; + ColumnCount = column; emit descriptionAvailable(); } Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-08-06 15:04:50 UTC (rev 4406) +++ branches/tora3/src/core/toeventquery.h 2012-08-07 20:49:54 UTC (rev 4407) @@ -87,7 +87,7 @@ toQColumnDescriptionList Description; // Number of columns in Description - unsigned Columns; + unsigned ColumnCount; // QThread instance that will do actual reading // Note: this pointer is NOT deleted by me, but by toRunnableThread::run/delete Runner @@ -170,7 +170,7 @@ */ inline int columns(void) const { - return Columns; + return ColumnCount; } Modified: branches/tora3/src/core/toresultmodel.h =================================================================== --- branches/tora3/src/core/toresultmodel.h 2012-08-06 15:04:50 UTC (rev 4406) +++ branches/tora3/src/core/toresultmodel.h 2012-08-07 20:49:54 UTC (rev 4407) @@ -229,6 +229,8 @@ * Returns true if there is more data available for parent, * otherwise false. * + * overrides QAbstractTableModel::canFetchMore + * not intended for toResultModel subclasses */ virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const; @@ -237,6 +239,8 @@ * Fetches any available data for the items with the parent * specified by the parent index. * + * overrides QAbstractTableModel::fetchMore + * not intended for toResultModel subclasses */ virtual void fetchMore(const QModelIndex &parent); Modified: branches/tora3/src/core/toresulttableview.cpp =================================================================== --- branches/tora3/src/core/toresulttableview.cpp 2012-08-06 15:04:50 UTC (rev 4406) +++ branches/tora3/src/core/toresulttableview.cpp 2012-08-07 20:49:54 UTC (rev 4407) @@ -163,7 +163,7 @@ // this would be one great way to fix it, but as of this time it's // prioritized low and not scheduled for a fix: - // http://trolltech.no/developer/task-tracker/index_html?method=entry&id=177663 + // https://bugreports.qt-project.org/browse/QTBUG-9988 disconnect(QTableView::horizontalScrollBar(), SIGNAL(valueChanged(int)), this, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-08-16 16:43:35
|
Revision: 4418 http://tora.svn.sourceforge.net/tora/?rev=4418&view=rev Author: ibre5041 Date: 2012-08-16 16:43:28 +0000 (Thu, 16 Aug 2012) Log Message: ----------- toeventquerynew dows not work yet. async cancel is called sometimes on freed object. Modified Paths: -------------- branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toeventquerytask.cpp branches/tora3/src/core/toeventquerytask.h branches/tora3/src/core/toresultmodel.cpp branches/tora3/src/core/toresulttableview.cpp Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-08-15 13:45:18 UTC (rev 4417) +++ branches/tora3/src/core/toeventquery.cpp 2012-08-16 16:43:28 UTC (rev 4418) @@ -84,6 +84,7 @@ TLOG(7, toDecorator, __HERE__) << "~toEventQueryNew a" << std::endl; /** we request bg thread to stop, but do not really wait for thread finish */ + int i = Values.size(); stop(); } @@ -116,7 +117,7 @@ // initization connect(Thread, SIGNAL(started()), Worker, SLOT(init())); // main -> BG connect(this, SIGNAL(dataRequested()), Worker, SLOT(slotRead())); // main -> BG - if(Mode = READ_ALL) + if(Mode == READ_ALL) connect(this, SIGNAL(consumed()), Worker, SLOT(slotRead())); // main -> BG // finish connect(Worker, SIGNAL(finished()), Thread, SLOT(quit())); // BG -> main @@ -134,6 +135,11 @@ void toEventQueryNew::setFetchMode(FETCH_MODE m) { + if(Mode == READ_FIRST && m == READ_ALL) + { + connect(this, SIGNAL(consumed()), Worker, SLOT(slotRead())); + emit dataRequested(); + } Mode = m; } @@ -153,7 +159,7 @@ } /* Call stask for this function - * Async thread toEventQueryNewTask emits signal data + * Async thread toEventQueryWorker emits signal data * the rest is processed in the main thread * the slot taskData receives data (run within the main thread context) * taskData emits signal dataAvailable @@ -162,8 +168,8 @@ */ toQValue toEventQueryNew::readValue() { - // if(Values.isEmpty()) - // throw tr("Read past end of query"); + if(Values.isEmpty()) + throw tr("Read past end of query"); // if((Values.size() < ColumnCount) && !eof()) // { Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-08-15 13:45:18 UTC (rev 4417) +++ branches/tora3/src/core/toeventquery.h 2012-08-16 16:43:28 UTC (rev 4418) @@ -54,37 +54,8 @@ class toResultStats; class toEventQueryWorker; +class BGThread; - /* This class is just a temporary wrapper for QThread */ - class BGThread : public QThread - { - Q_OBJECT; - public: - BGThread(QObject* parent) : QThread(parent), Slave(NULL), Parent((toEventQueryNew*)parent) {}; - ~BGThread() {}; - toEventQueryWorker* Slave; - toEventQueryNew* Parent; - - static void msleep (unsigned long s) - { - QThread::msleep(s); - } - protected: - void run(void) - { - // This was copied from QT trunk - as of 4.8.2 it is not used yet - QByteArray objectName = QThread::objectName().toLatin1(); - if (objectName.isEmpty()) - objectName = QThread::metaObject()->className(); -#if defined(Q_OS_LINUX) - prctl(PR_SET_NAME, (unsigned long)objectName.constData(), 0, 0, 0); -#elif defined(Q_OS_MAC) - pthread_setname_np(objectName.constData()); -#endif - QThread::run(); - } - }; - /** * Run a query in the background without blocking. This class should * always be in the main thread, it uses toEventQueryWorker to actually @@ -125,23 +96,6 @@ //, toResultStats *statistics = NULL ); - /** - * Create a new query. - * - * @param conn Connection Loan to run on. - * @param mode Query mode to execute query in. - * @param sql SQL to execute. - * @param param Parameters to pass to query. - * @param statistics Optional statistics widget to update with values from query. - */ - //toEventQueryNew(QObject *parent - // , toConnectionSubLoan &conn - // , QString const& sql - // , toQueryParams const& param - // , FETCH_MODE - // //, toResultStats *statistics = NULL - // ); - virtual ~toEventQueryNew(); /** Modified: branches/tora3/src/core/toeventquerytask.cpp =================================================================== --- branches/tora3/src/core/toeventquerytask.cpp 2012-08-15 13:45:18 UTC (rev 4417) +++ branches/tora3/src/core/toeventquerytask.cpp 2012-08-16 16:43:28 UTC (rev 4418) @@ -93,7 +93,6 @@ , Params(params) , Connection(conn) , ColumnCount(0) - , CancelRequested(false) , Stopped(false) , Closed(false) { @@ -135,8 +134,7 @@ { TLOG(7, toDecorator, __HERE__) << "toEventQueryWorker syncStop" << std::endl; Stopped = true; - c->wakeAll(); - BGThread::msleep(2000); + c->wakeAll(); // send response to the main thread close(); } Modified: branches/tora3/src/core/toeventquerytask.h =================================================================== --- branches/tora3/src/core/toeventquerytask.h 2012-08-15 13:45:18 UTC (rev 4417) +++ branches/tora3/src/core/toeventquerytask.h 2012-08-16 16:43:28 UTC (rev 4418) @@ -61,7 +61,39 @@ class toResultStats; class toEventQueryNew; +class toEventQueryWorker; +/* This class is just a temporary wrapper for QThread */ +class BGThread : public QThread +{ + Q_OBJECT; +public: + BGThread(QObject* parent) : QThread(parent), Slave(NULL), Parent((toEventQueryNew*)parent) {}; + ~BGThread() {}; + toEventQueryWorker* Slave; + toEventQueryNew* Parent; + + static void msleep (unsigned long s) + { + QThread::msleep(s); + } +protected: + void run(void) + { + // This was copied from QT trunk - as of 4.8.2 it is not used yet + QByteArray objectName = QThread::objectName().toLatin1(); + if (objectName.isEmpty()) + objectName = QThread::metaObject()->className(); +#if defined(Q_OS_LINUX) + prctl(PR_SET_NAME, (unsigned long)objectName.constData(), 0, 0, 0); +#elif defined(Q_OS_MAC) + pthread_setname_np(objectName.constData()); +#endif + QThread::run(); + } +}; + + class toEventQueryWorker : public QObject { friend class toEventQueryNew; @@ -141,119 +173,7 @@ unsigned ColumnCount; - bool CancelRequested, Stopped, Closed; + bool Stopped, Closed; }; - -/** - * Threaded class used by toEventQuery. Internal to toEventQuery only. - * - * All signals and calls to slots should be created with - * Qt::QueuedConnection except to read() and stop() - * - */ -/* class toEventQueryTask : public toRunnable */ -/* { */ -/* private: */ -/* friend class toEventQuery; */ -/* Q_OBJECT; */ - -/* // the real query object */ -/* QPointer<toQuery> Query; */ - -/* // sql and bind parameters */ -/* QString SQL; */ -/* toQueryParams Params; */ - -/* unsigned ColumnCount; */ - -/* // Statistics to be used if any. */ -/* //stat QPointer<toResultStats> Statistics; */ - -/* toConnection &Connection; */ - -/* // object was closed */ -/* volatile bool Closed; */ - -/* toEventQuery &ParentQuery; */ - -/* // can't synchronize on query or cancel wouldn't work, but need to */ -/* // protect access during close() which may be called from the main */ -/* // thread */ -/* QMutex CloseLock; */ - -/* // keeps thread from exiting until toEventQuery exits. this */ -/* // prevents many race conditions and the caller can always assume */ -/* // task is alive. */ -/* ///QMutex ThreadAlive; */ - -/* toEventQueryTask(toEventQuery &parent */ -/* , toConnection &conn */ -/* , QString const& sql */ -/* , toQueryParams const& param */ -/* // , toResultStats *stats = NULL */ -/* ); */ -/* virtual ~toEventQueryTask(); */ - -/* protected: */ -/* /\** */ -/* * Overrides toRunnable::run. Create toRunnableThread to start */ -/* *\/ */ -/* virtual void run(void); */ - - -/* private slots: */ -/* void pread(bool all); */ -/* void timeout(void); */ - - -/* public slots: */ -/* /\** */ -/* * Queues a read request. Emits readRequested() */ -/* *\/ */ -/* void read(bool all = false); */ - -/* /\** */ -/* * Closes this class. Good idea to call this. */ -/* *\/ */ -/* void close(void); */ - -/* signals: */ -/* // must be careful when defining signals. passing by reference */ -/* // will share memory between threads. */ - -/* /\** */ -/* * A read was requested */ -/* *\/ */ -/* void readRequested(bool all); */ - -/* /\** */ -/* * Error message */ -/* *\/ */ -/* void error(const toConnection::exception &msg); */ - -/* /\** */ -/* * Result headers */ -/* * */ -/* * @param desc list of header values */ -/* * @param columns number of columns in result */ -/* *\/ */ -/* void headers(toQColumnDescriptionList &desc, int columns); */ - -/* /\** */ -/* * Data read from query */ -/* *\/ */ -/* void data(ValuesList &values); */ - -/* /\** */ -/* * Emitted when sql query is done */ -/* *\/ */ -/* void done(); */ - -/* /\** */ -/* * Emitted if query.rowsProcessed() > 0. Number of affected rows. */ -/* *\/ */ -/* void rowsProcessed(unsigned long rows); */ -/* }; */ - #endif Modified: branches/tora3/src/core/toresultmodel.cpp =================================================================== --- branches/tora3/src/core/toresultmodel.cpp 2012-08-15 13:45:18 UTC (rev 4417) +++ branches/tora3/src/core/toresultmodel.cpp 2012-08-16 16:43:28 UTC (rev 4418) @@ -116,7 +116,7 @@ CurrRowKey = 1; - Query = 0; + Query = NULL; setSupportedDragActions(Qt::CopyAction); // Manually add two columns (first one will be invisible) @@ -173,13 +173,11 @@ { disconnect(Query, 0, this, 0); - // TODO - here we directly call QObject's slot Query->stop(); delete Query; + Query = NULL; emit done(); } - - Query = 0; } Modified: branches/tora3/src/core/toresulttableview.cpp =================================================================== --- branches/tora3/src/core/toresulttableview.cpp 2012-08-15 13:45:18 UTC (rev 4417) +++ branches/tora3/src/core/toresulttableview.cpp 2012-08-16 16:43:28 UTC (rev 4418) @@ -186,7 +186,6 @@ { setSqlAndParams(sql, param); - toEventQueryNew *query = NULL; TLOG(7, toDecorator, __HERE__) << "Query from toResultTableView::query :" << sql << std::endl; try { @@ -208,7 +207,7 @@ QTimer t(this); t.singleShot(300, Working, SLOT(forceShow())); - query = new toEventQueryNew(this + toEventQueryNew *query = new toEventQueryNew(this , connection() , sql , param This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-08-18 23:31:29
|
Revision: 4422 http://tora.svn.sourceforge.net/tora/?rev=4422&view=rev Author: ibre5041 Date: 2012-08-18 23:31:23 +0000 (Sat, 18 Aug 2012) Log Message: ----------- one more care fixed Modified Paths: -------------- branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toeventquerytask.cpp branches/tora3/src/core/toeventquerytask.h Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-08-18 23:29:47 UTC (rev 4421) +++ branches/tora3/src/core/toeventquery.cpp 2012-08-18 23:31:23 UTC (rev 4422) @@ -68,7 +68,7 @@ , Worker(NULL) , Started(false) , WorkDone(false) - , Connection(conn) + , Connection(new toConnectionSubLoan(conn)) , Mode(mode) { /* BIG FAT WARNING QThread's parent must be NULL, so it is not disposed when toEventQueryNew is deleted. @@ -137,6 +137,7 @@ { if(Mode == READ_FIRST && m == READ_ALL) { + // TODO WORKER CAN ALREADY BE DELETED HERE connect(this, SIGNAL(consumed()), Worker, SLOT(slotRead())); emit dataRequested(); } @@ -213,7 +214,9 @@ if(!succeeded) { TLOG(7, toDecorator, __HERE__) << "toEventQueryNew stop bg did not respond" << std::endl; - Worker->asyncCancel(); + try { + (*Connection)->cancel(); + } TOCATCH; } //Thread->wait(); } Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-08-18 23:29:47 UTC (rev 4421) +++ branches/tora3/src/core/toeventquery.h 2012-08-18 23:31:23 UTC (rev 4422) @@ -51,6 +51,7 @@ #include <QObject> #include <QPointer> +#include <QSharedPointer> class toResultStats; class toEventQueryWorker; @@ -230,7 +231,7 @@ bool WorkDone; // connection for this query - toConnection &Connection; + QSharedPointer<toConnectionSubLoan> Connection; QMutex CancelMutex; QWaitCondition CancelCond; Modified: branches/tora3/src/core/toeventquerytask.cpp =================================================================== --- branches/tora3/src/core/toeventquerytask.cpp 2012-08-18 23:29:47 UTC (rev 4421) +++ branches/tora3/src/core/toeventquerytask.cpp 2012-08-18 23:31:23 UTC (rev 4422) @@ -84,7 +84,7 @@ } toEventQueryWorker::toEventQueryWorker(toEventQueryNew *c - , toConnection &conn + , QSharedPointer<toConnectionSubLoan> &conn , QString &sql , toQueryParams ¶ms) : Query(NULL) @@ -111,7 +111,7 @@ emit started(); try { - Query = new toQuery(Connection, SQL, Params); + Query = new toQuery(*Connection, SQL, Params); toQColumnDescriptionList desc = Query->describe(); ColumnCount = Query->columns(); @@ -159,15 +159,6 @@ TLOG(7, toDecorator, __HERE__) << "toEventQueryWorker close b" << std::endl; } -void toEventQueryWorker::asyncCancel() -{ - TLOG(7, toDecorator, __HERE__) << "toEventQueryWorker aclose a" << std::endl; - try { - Connection->cancel(); - } - TOCATCH; -} - void toEventQueryWorker::slotRead() { try { Modified: branches/tora3/src/core/toeventquerytask.h =================================================================== --- branches/tora3/src/core/toeventquerytask.h 2012-08-18 23:29:47 UTC (rev 4421) +++ branches/tora3/src/core/toeventquerytask.h 2012-08-18 23:31:23 UTC (rev 4422) @@ -99,15 +99,10 @@ friend class toEventQueryNew; Q_OBJECT; public: - toEventQueryWorker(toEventQueryNew* , toConnection &, QString &, toQueryParams&); + toEventQueryWorker(toEventQueryNew* , QSharedPointer<toConnectionSubLoan> &, QString &, toQueryParams&); virtual ~toEventQueryWorker(); - /** This only method should be called from the main thread - * if connection provider's traits do support async cancel - */ - void asyncCancel(); - public slots: void init(void); @@ -169,7 +164,7 @@ QString SQL; toQueryParams Params; - toConnectionSubLoan Connection; + QSharedPointer<toConnectionSubLoan> Connection; unsigned ColumnCount; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-09-07 00:56:22
|
Revision: 4454 http://tora.svn.sourceforge.net/tora/?rev=4454&view=rev Author: ibre5041 Date: 2012-09-07 00:56:16 +0000 (Fri, 07 Sep 2012) Log Message: ----------- QT 4.8.2 fix Modified Paths: -------------- branches/tora3/src/core/main.cpp branches/tora3/src/core/toeditmenu.cpp Modified: branches/tora3/src/core/main.cpp =================================================================== --- branches/tora3/src/core/main.cpp 2012-09-06 21:46:33 UTC (rev 4453) +++ branches/tora3/src/core/main.cpp 2012-09-07 00:56:16 UTC (rev 4454) @@ -134,10 +134,13 @@ QString pgsqlHome(toConfigurationSingle::Instance().pgsqlHome()); QDir pgsqlHomeDir(pgsqlHome); if (!pgsqlHome.isEmpty() && pgsqlHomeDir.exists()) { - QCoreApplication::addLibraryPath(pgsqlHome + QDir::separator() + "bin"); // libssleay32.dll + QCoreApplication::addLibraryPath(pgsqlHome + QDir::separator() + "bin"); // libeay32.dll QCoreApplication::addLibraryPath(pgsqlHome + QDir::separator() + "lib"); // libpg.dll - plugins << pgsqlHome + QDir::separator() + "bin" + QDir::separator() + "libssleay32.dll"; - plugins << pgsqlHome + QDir::separator() + "lib" + QDir::separator() + "llibpg.dll"; + plugins << pgsqlHome + QDir::separator() + "bin" + QDir::separator() + "LIBICONV-2.DLL"; + plugins << pgsqlHome + QDir::separator() + "bin" + QDir::separator() + "LIBINTL-8.DLL"; + plugins << pgsqlHome + QDir::separator() + "bin" + QDir::separator() + "libeay32.dll"; + plugins << pgsqlHome + QDir::separator() + "bin" + QDir::separator() + "ssleay32.dll"; + plugins << pgsqlHome + QDir::separator() + "lib" + QDir::separator() + "libpq.dll"; } #endif @@ -155,8 +158,7 @@ bool success = false; try { QLibrary library(path); - library.load(); - success = true; + success = library.load(); } TOCATCH; @@ -164,8 +166,10 @@ if (success) { label->setText(qApp->translate("main", "Loaded plugin %1").arg(path)); + TLOG(5, toDecoratorNC, __HERE__) << "Loaded plugin " << path << std::endl; } else { label->setText(qApp->translate("main", "Failed loading plugin %1").arg(path)); + TLOG(5, toDecoratorNC, __HERE__) << "Failed loading plugin " << path << std::endl; } qApp->processEvents(); } Modified: branches/tora3/src/core/toeditmenu.cpp =================================================================== --- branches/tora3/src/core/toeditmenu.cpp 2012-09-06 21:46:33 UTC (rev 4453) +++ branches/tora3/src/core/toeditmenu.cpp 2012-09-07 00:56:16 UTC (rev 4454) @@ -51,6 +51,7 @@ #include <QApplication> #include <QClipboard> +#include <QMimeData> toEditMenu::toEditMenu() : QMenu(tr("&Edit"), NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-09-07 17:11:08
|
Revision: 4456 http://tora.svn.sourceforge.net/tora/?rev=4456&view=rev Author: ibre5041 Date: 2012-09-07 17:11:02 +0000 (Fri, 07 Sep 2012) Log Message: ----------- Modified Paths: -------------- branches/tora3/src/core/toresult.cpp branches/tora3/src/core/toresult.h Modified: branches/tora3/src/core/toresult.cpp =================================================================== --- branches/tora3/src/core/toresult.cpp 2012-09-07 15:43:34 UTC (rev 4455) +++ branches/tora3/src/core/toresult.cpp 2012-09-07 17:11:02 UTC (rev 4456) @@ -94,7 +94,7 @@ , NeedsRefresh(true) , QueryReady(false) , FromSQL(false) - , DisableTab(true) + , IsCriticalTab(true) , Params() { //see EventDispatcherWin32Private::registerTimer time should be either 0 or >20 @@ -161,7 +161,7 @@ void toResult::setDisableTab(bool en) { - DisableTab = en; + IsCriticalTab = en; } void toResult::setSQL(const QString &sql) @@ -290,7 +290,7 @@ void toResult::changeHandle(void) { - if (!DisableTab) + if (!IsCriticalTab) return; QWidget *widget = dynamic_cast<QWidget *>(this); Modified: branches/tora3/src/core/toresult.h =================================================================== --- branches/tora3/src/core/toresult.h 2012-09-07 15:43:34 UTC (rev 4455) +++ branches/tora3/src/core/toresult.h 2012-09-07 17:11:02 UTC (rev 4456) @@ -215,7 +215,6 @@ void changeHandle(void); toResultObject Slots; - bool Handled; QTabWidget *Tabs; QWidget *TabWidget; QString SQL; @@ -226,7 +225,14 @@ toQueryParams Params; bool FromSQL; QString Name; - bool DisableTab; + + /** is set to true and toResult fails for some reason, the whole tool's Tab is disabled */ + bool IsCriticalTab; + + /** set to true, if something fails + * for example the current connection does not support the current toSql query + */ + bool Handled; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <su...@us...> - 2012-09-10 12:57:15
|
Revision: 4458 http://tora.svn.sourceforge.net/tora/?rev=4458&view=rev Author: subik Date: 2012-09-10 12:57:04 +0000 (Mon, 10 Sep 2012) Log Message: ----------- toSplash is centered again (even on multip-display machines) Modified Paths: -------------- branches/tora3/src/core/main.cpp branches/tora3/src/core/tosplash.cpp branches/tora3/src/core/tosplash.h Modified: branches/tora3/src/core/main.cpp =================================================================== --- branches/tora3/src/core/main.cpp 2012-09-10 07:32:51 UTC (rev 4457) +++ branches/tora3/src/core/main.cpp 2012-09-10 12:57:04 UTC (rev 4458) @@ -116,7 +116,7 @@ } { - toSplash splash(NULL, "About " TOAPPNAME, false); + toSplash splash(NULL); splash.show(); QList<QString> plugins; Modified: branches/tora3/src/core/tosplash.cpp =================================================================== --- branches/tora3/src/core/tosplash.cpp 2012-09-10 07:32:51 UTC (rev 4457) +++ branches/tora3/src/core/tosplash.cpp 2012-09-10 12:57:04 UTC (rev 4458) @@ -51,13 +51,12 @@ #include <QVBoxLayout> #include <QPalette> -toSplash::toSplash(QWidget *parent, const char *name, Qt::WFlags f) - : QWidget(parent, f) +toSplash::toSplash(QWidget *parent) + : QWidget(parent) { +// setWindowFlags(Qt::WindowStaysOnTopHint); + setObjectName("toSplash"); - if (name) - setObjectName(name); - QVBoxLayout *vbox = new QVBoxLayout; vbox->setSpacing(0); vbox->setContentsMargins(0, 0, 0, 0); @@ -77,8 +76,8 @@ Progress = new QProgressBar(this); vbox->addWidget(Progress); - QDesktopWidget *d = QApplication::desktop(); - move((d->width() - width()) / 2, (d->height() - height()) / 2); + QRect d = QApplication::desktop()->availableGeometry(-1); + move(d.center() - frameGeometry().center()/2); } toSplash::~toSplash() Modified: branches/tora3/src/core/tosplash.h =================================================================== --- branches/tora3/src/core/tosplash.h 2012-09-10 07:32:51 UTC (rev 4457) +++ branches/tora3/src/core/tosplash.h 2012-09-10 12:57:04 UTC (rev 4458) @@ -54,7 +54,7 @@ QLabel *Label; public: - toSplash(QWidget *parent = 0, const char *name = 0, Qt::WFlags f = 0); + toSplash(QWidget *parent = 0); ~toSplash(); QLabel* label(void); QProgressBar* progress(void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-09-17 20:17:53
|
Revision: 4469 http://tora.svn.sourceforge.net/tora/?rev=4469&view=rev Author: ibre5041 Date: 2012-09-17 20:17:46 +0000 (Mon, 17 Sep 2012) Log Message: ----------- Windows build fixes + some unused config options removed. Modified Paths: -------------- branches/tora3/src/core/main.cpp branches/tora3/src/core/toconf.h branches/tora3/src/core/toconfiguration.cpp branches/tora3/src/core/toconfiguration.h branches/tora3/src/core/toglobalsetting.cpp branches/tora3/src/core/toglobalsettingui.ui Modified: branches/tora3/src/core/main.cpp =================================================================== --- branches/tora3/src/core/main.cpp 2012-09-14 12:52:38 UTC (rev 4468) +++ branches/tora3/src/core/main.cpp 2012-09-17 20:17:46 UTC (rev 4469) @@ -76,6 +76,7 @@ #include <QStyleFactory> #include <QLibrary> #include <QDir> +#include <QDebug> int main(int argc, char **argv) { @@ -102,7 +103,7 @@ // qApp->setDefaultCodec(QTextCodec::codecForName(getenv("LANG"))); QTranslator torats(0); - QString qmDir = QString("%1/i18n/").arg(SHARE_DIR); + QString qmDir = toConfigurationSingle::Instance().sharePath(); torats.load(qmDir + QString("tora_") + toConfigurationSingle::Instance().locale(), "."); qApp->installTranslator(&torats); Modified: branches/tora3/src/core/toconf.h =================================================================== --- branches/tora3/src/core/toconf.h 2012-09-14 12:52:38 UTC (rev 4468) +++ branches/tora3/src/core/toconf.h 2012-09-17 20:17:46 UTC (rev 4469) @@ -46,20 +46,10 @@ #define DEFAULT_PROVIDER "Oracle" #define CONF_SAVE_PWD "SavePassword" #define DEFAULT_SAVE_PWD false -#define CONF_PASSWORD "DefaultPassword" -#define DEFAULT_PASSWORD "" -#define CONF_DATABASE "DefaultDatabase" -#define DEFAULT_DATABASE "" -#define CONF_USER "DefaultUser" -#define DEFAULT_USER "system" -#define CONF_HOST "Host" -#define DEFAULT_HOST "localhost" #define CONF_OPTIONS "Options" #define DEFAULT_OPTIONS "" #define CONF_MAX_NUMBER "MaxNumber" #define DEFAULT_MAX_NUMBER 50 -#define CONF_MAX_COL_SIZE "MaxColSize" -#define DEFAULT_MAX_COL_SIZE 30000 #define CONF_MAX_COL_DISP "MaxColDisp" #define DEFAULT_MAX_COL_DISP 300 #define CONF_PLAN_TABLE "PlanTable" @@ -110,14 +100,12 @@ #define CONF_COMPLETION_SORT "CompleteSort" #define CONF_AUTO_INDENT "AutoIndent" #define CONF_DONT_REREAD "DontReread" -#define CONF_AUTO_LONG "AutoLong" #define CONF_MESSAGE_STATUSBAR "MessageStatusbar" #define CONF_TABBED_TOOLS "TabbedTools" #define CONF_MULTI_LINE_RESULTS "MultiLineResults" #define DEFAULT_MULTI_LINE_RESULTS 0 // default false #define CONF_OBJECT_CACHE "ObjectCache" #define DEFAULT_OBJECT_CACHE 1 -#define CONF_BKGND_CONNECT "BackgroundConnect" #define CONF_FIREWALL_MODE "FirewallMode" #define CONF_CONN_TEST_INTERVAL "Connection test interval" #define DEFAULT_CONN_TEST_INTERVAL 900 // about 15 min. @@ -162,10 +150,6 @@ #define CONF_DISPLAY_GRIDLINES "Gridlines" #define DEFAULT_DISPLAY_GRIDLINES true #define DEFAULT_EXTENSIONS "SQL (*.sql *.pkg *.pkb), Text (*.txt), All (*)" -#define CONF_SMTP "SmtpServer" -#define DEFAULT_SMTP "localhost" -#define CONF_SMTP_PORT "SmtpServerPort" -#define DEFAULT_SMTP_PORT 25 #define CONF_STYLE "Style" #define DEFAULT_STYLE "" //"Cleanlooks" #define CONF_ENCODING "Encoding" @@ -183,8 +167,6 @@ #define DEFAULT_CONNECTION_TEST_TIMEOUT 0 // tooracleconnection.cpp #define CONF_ORACLE_HOME "ORACLE_HOME" -#define CONF_OPEN_CURSORS "OpenCursors" -#define DEFAULT_OPEN_CURSORS 40 // Defined to be able to update tuning view #define CONF_MAX_LONG "MaxLong" #ifndef DEFAULT_MAX_LONG #define DEFAULT_MAX_LONG 30000 Modified: branches/tora3/src/core/toconfiguration.cpp =================================================================== --- branches/tora3/src/core/toconfiguration.cpp 2012-09-14 12:52:38 UTC (rev 4468) +++ branches/tora3/src/core/toconfiguration.cpp 2012-09-17 20:17:46 UTC (rev 4469) @@ -57,12 +57,7 @@ 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; @@ -94,14 +89,12 @@ bool m_completionSort; bool m_autoIndent; bool m_dontReread; - int m_autoLong; bool m_messageStatusbar; bool m_tabbedTools; bool m_multiLineResults; bool m_colorizedConnections; ConnectionColors m_connectionColors; toConfiguration::ObjectCache m_objectCache; - bool m_bkgndConnect; bool m_firewallMode; int m_connTestInterval; int m_maxContent; @@ -127,8 +120,6 @@ bool m_editDragDrop; bool m_toadBindings; bool m_displayGridlines; - QString m_smtp; - int m_smtpPort; QString m_style; QString m_staticChecker; // path+name to static check script (used in code editor) int m_connectionTestTimeout; // after how many seconds connection should be tested @@ -262,7 +253,7 @@ bool m_extractorIncludeCode; bool m_extractorIncludeHeader; bool m_extractorIncludePrompt; - + toConfigurationPrivate() { // Note we must save copy of this before we change into some other directory @@ -286,15 +277,10 @@ 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(); @@ -332,7 +318,6 @@ 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, true).toBool(); m_multiLineResults = s.value(CONF_MULTI_LINE_RESULTS, DEFAULT_MULTI_LINE_RESULTS).toBool(); @@ -352,7 +337,6 @@ } m_objectCache = (toConfiguration::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_connTestInterval = s.value(CONF_CONN_TEST_INTERVAL, DEFAULT_CONN_TEST_INTERVAL).toInt(); m_maxContent = s.value(CONF_MAX_CONTENT, DEFAULT_MAX_CONTENT).toInt(); @@ -380,13 +364,10 @@ 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(); m_staticChecker = s.value(CONF_STATIC_CHECKER, "").toString(); // tooracleconnection.cpp m_oracleHome = s.value(CONF_ORACLE_HOME, "").toString(); - m_openCursors = s.value(CONF_OPEN_CURSORS, DEFAULT_OPEN_CURSORS).toInt(); m_maxLong = s.value(CONF_MAX_LONG, DEFAULT_MAX_LONG).toInt(); // toqsqlconnection m_mysqlHome = s.value(CONF_MYSQL_HOME, "").toString(); @@ -548,12 +529,7 @@ 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); @@ -584,7 +560,6 @@ 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_MULTI_LINE_RESULTS, m_multiLineResults); @@ -601,7 +576,6 @@ s.endArray(); s.setValue(CONF_OBJECT_CACHE, m_objectCache); - s.setValue(CONF_BKGND_CONNECT, m_bkgndConnect); s.setValue(CONF_FIREWALL_MODE, m_firewallMode); s.setValue(CONF_CONN_TEST_INTERVAL, m_connTestInterval); s.setValue(CONF_MAX_CONTENT, m_maxContent); @@ -628,14 +602,11 @@ 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); s.setValue(CONF_STATIC_CHECKER, m_staticChecker); // tooracleconnection s.setValue(CONF_ORACLE_HOME, m_oracleHome); - s.setValue(CONF_OPEN_CURSORS, m_openCursors); s.setValue(CONF_MAX_LONG, m_maxLong); // toqsqlconnection s.setValue(CONF_MYSQL_HOME, m_mysqlHome); @@ -1055,38 +1026,6 @@ 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; @@ -1096,11 +1035,6 @@ p->m_maxNumber = v; } -int toConfiguration::maxColSize() -{ - return p->m_maxColSize; -} - int toConfiguration::maxColDisp() { return p->m_maxColDisp; @@ -1375,15 +1309,6 @@ p->m_dontReread = v; } -int toConfiguration::autoLong() -{ - return p->m_autoLong; -} -void toConfiguration::setAutoLong(int v) -{ - p->m_autoLong = v; -} - bool toConfiguration::messageStatusbar() { return p->m_messageStatusbar; @@ -1437,15 +1362,6 @@ p->m_objectCache = v; } -bool toConfiguration::bkgndConnect() -{ - return p->m_bkgndConnect; -} -void toConfiguration::setBkgndConnect(bool v) -{ - p->m_bkgndConnect = v; -} - bool toConfiguration::firewallMode() { return p->m_firewallMode; @@ -1663,24 +1579,6 @@ p->m_displayGridlines = v; } -QString toConfiguration::smtp() -{ - return p->m_smtp; -} -void toConfiguration::setSmtp(const QString & v) -{ - p->m_smtp = v; -} - -int toConfiguration::smtpPort() -{ - return p->m_smtpPort; -} -void toConfiguration::setSmtpPort(int v) -{ - p->m_smtpPort = v; -} - QString toConfiguration::style() { return p->m_style; @@ -1690,16 +1588,6 @@ p->m_style = v; } -// tooracleconnection -//int toConfiguration::openCursors() -//{ -// return p->m_openCursors; -//} -//void toConfiguration::setOpenCursors(int v) -//{ -// p->m_openCursors = v; -//} - int toConfiguration::maxLong() { return p->m_maxLong; @@ -2412,3 +2300,16 @@ { p->m_extractorIncludePrompt = v; } + +QString toConfiguration::sharePath() +{ +#ifdef Q_OS_WIN32 + QString appl = QCoreApplication::applicationDirPath(); + appl += QDir::separator(); + appl += "i18n"; + appl += QDir::separator(); + return appl; +#else + return QString::fromAscii(SHARE_DIR); +#endif +} Modified: branches/tora3/src/core/toconfiguration.h =================================================================== --- branches/tora3/src/core/toconfiguration.h 2012-09-14 12:52:38 UTC (rev 4468) +++ branches/tora3/src/core/toconfiguration.h 2012-09-17 20:17:46 UTC (rev 4469) @@ -77,22 +77,9 @@ bool savePassword(); void setSavePassword(bool v); - QString defaultPassword(); - void setDefaultPassword(const QString & v); - - QString defaultDatabase(); - void setDefaultDatabase(const QString & v); - - QString defaultUser(); - void setDefaultUser(const QString & v); - - QString defaultHost(); - int maxNumber(); void setMaxNumber(int v); - int maxColSize(); - int maxColDisp(); void setMaxColDisp(int v); @@ -171,9 +158,6 @@ bool dontReread(); void setDontReread(bool v); - int autoLong(); - void setAutoLong(int v); - bool messageStatusbar(); void setMessageStatusbar(bool v); @@ -191,9 +175,6 @@ ObjectCache objectCache(); void setObjectCache(ObjectCache v); - bool bkgndConnect(); - void setBkgndConnect(bool v); - bool firewallMode(); void setFirewallMode(bool v); @@ -258,12 +239,6 @@ bool displayGridlines(); void setDisplayGridlines(bool v); - QString smtp(); - void setSmtp(const QString & v); - - int smtpPort(); - void setSmtpPort(int v); - QString style(); void setStyle(const QString & v); @@ -544,6 +519,9 @@ void setExtractorIncludeHeader(bool v); bool extractorIncludePrompt(); void setExtractorIncludePrompt(bool v); + + // Aplication location paths + QString sharePath(); }; typedef Loki::SingletonHolder<toConfiguration> toConfigurationSingle; Modified: branches/tora3/src/core/toglobalsetting.cpp =================================================================== --- branches/tora3/src/core/toglobalsetting.cpp 2012-09-14 12:52:38 UTC (rev 4468) +++ branches/tora3/src/core/toglobalsetting.cpp 2012-09-17 20:17:46 UTC (rev 4469) @@ -193,9 +193,6 @@ CustomSQL->setText(toConfigurationSingle::Instance().sqlFile()); Locale->setText(toConfigurationSingle::Instance().locale()); - - SmtpServer->setText(toConfigurationSingle::Instance().smtp()); - SmtpPort->setValue(toConfigurationSingle::Instance().smtpPort()); } void toGlobalSetting::sqlBrowse(void) @@ -313,9 +310,6 @@ toConfigurationSingle::Instance().setChartSamples(ChartSamples->value()); toConfigurationSingle::Instance().setLocale(Locale->text()); - - toConfigurationSingle::Instance().setSmtp(SmtpServer->text()); - toConfigurationSingle::Instance().setSmtpPort(SmtpPort->value()); } void toDatabaseSetting::numberFormatChange() Modified: branches/tora3/src/core/toglobalsettingui.ui =================================================================== --- branches/tora3/src/core/toglobalsettingui.ui 2012-09-14 12:52:38 UTC (rev 4468) +++ branches/tora3/src/core/toglobalsettingui.ui 2012-09-17 20:17:46 UTC (rev 4469) @@ -630,46 +630,6 @@ </property> </widget> </item> - <item row="10" column="1" colspan="3"> - <layout class="QHBoxLayout"> - <property name="spacing"> - <number>6</number> - </property> - <property name="margin"> - <number>11</number> - </property> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>SMTP Server</string> - </property> - <property name="buddy"> - <cstring>SmtpServer</cstring> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="SmtpServer"/> - </item> - <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>:</string> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="SmtpPort"> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>65536</number> - </property> - </widget> - </item> - </layout> - </item> <item row="10" column="0"> <widget class="QCheckBox" name="MultiLineResults"> <property name="text"> @@ -722,8 +682,6 @@ <tabstop>DefaultFormat</tabstop> <tabstop>Style</tabstop> <tabstop>Locale</tabstop> - <tabstop>SmtpServer</tabstop> - <tabstop>SmtpPort</tabstop> </tabstops> <resources/> <connections> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-09-22 13:59:58
|
Revision: 4472 http://tora.svn.sourceforge.net/tora/?rev=4472&view=rev Author: ibre5041 Date: 2012-09-22 13:59:52 +0000 (Sat, 22 Sep 2012) Log Message: ----------- tab creation/switching works. tab closing stopped working Modified Paths: -------------- branches/tora3/src/core/tomain.cpp branches/tora3/src/core/tomain.h branches/tora3/src/core/totool.cpp branches/tora3/src/core/totool.h Modified: branches/tora3/src/core/tomain.cpp =================================================================== --- branches/tora3/src/core/tomain.cpp 2012-09-22 12:34:40 UTC (rev 4471) +++ branches/tora3/src/core/tomain.cpp 2012-09-22 13:59:52 UTC (rev 4472) @@ -104,13 +104,11 @@ loggingWidget.setCenterOnScroll(true); loggingWidget.setReadOnly(true); - Workspace = new QMdiArea(this); + // it needs go first due signal/slot connection in it + createMdiArea(); Message = new toMessage(this); - // it needs go first due signal/slot connection in it - handleToolsDisplay(); - // setup all QAction objects createActions(); @@ -169,7 +167,6 @@ TOCATCH; } #endif - setCentralWidget(Workspace); show(); @@ -613,29 +610,36 @@ } -void toMain::handleToolsDisplay() +void toMain::createMdiArea() { -#if QT_VERSION >= 0x040400 - if (toConfigurationSingle::Instance().tabbedTools()) - { - Workspace->setViewMode(QMdiArea::TabbedView); + QWidget *w = new QWidget(this); + QVBoxLayout *l = new QVBoxLayout(w); + Workspace = new QMdiArea(this); + l->addWidget(Workspace); + w->setLayout(l); + setCentralWidget(w); + //setCentralWidget(Workspace); + Workspace->setActivationOrder(QMdiArea::CreationOrder); + #if QT_VERSION >= 0x040500 - // HACK: a workaround for missing QMdiArea feature. Real patch is waiting in the Qt4 bugtracker. - foreach (QTabBar * b, Workspace->findChildren<QTabBar*>()) - { - b->setTabsClosable(true); -#if QT_VERSION < 0x040800 - connect(b, SIGNAL(tabCloseRequested(int)), this, SLOT(workspaceCloseWindow(int))); + if (toConfigurationSingle::Instance().tabbedTools()) + { + Workspace->setViewMode(QMdiArea::TabbedView); + Workspace->setDocumentMode(true); + // HACK: a workaround for missing QMdiArea feature. Real patch is waiting in the Qt4 bugtracker. + foreach (QTabBar * b, Workspace->findChildren<QTabBar*>()) + { + b->setTabsClosable(true); + b->setMovable (true); + connect(b, SIGNAL(tabCloseRequested(int)), this, SLOT(workspaceCloseWindow(int))); + // we should be quite sure that the QMdiArea tab-widget + // goes first (because findChildren is called recursively) + break; + } + } + else #endif - // we should be quite sure that the QMdiArea tab-widget - // goes first (because findChildren is called recursively) - break; - } -#endif - } - else - Workspace->setViewMode(QMdiArea::SubWindowView); -#endif + Workspace->setViewMode(QMdiArea::SubWindowView); } void toMain::windowActivated(QMdiSubWindow *widget) @@ -753,28 +757,28 @@ windowsMenu->addAction(tileAct); windowsMenu->addSeparator(); - int index = 0; - QList<QMdiSubWindow *> list = workspace()->subWindowList(); + int index = 0; + QList<QMdiSubWindow *> list = workspace()->subWindowList(); - for (QList<QMdiSubWindow *>::iterator it = list.begin(); it != list.end(); it++, index++) - { - if (!(*it)->isHidden()) - { - QString caption = (*it)->windowTitle().trimmed(); + for (QList<QMdiSubWindow *>::iterator it = list.begin(); it != list.end(); it++, index++) + { + if (!(*it)->isHidden()) + { + QString caption = (*it)->windowTitle().trimmed(); - if (index < 9) - caption = "&" + QString::number(index + 1) + " " + caption; + if (index < 9) + caption = "&" + QString::number(index + 1) + " " + caption; - QAction *action = new QAction(caption, (*it)); - if (index < 9) - action->setShortcut(Qt::CTRL + Qt::Key_1 + index); + QAction *action = new QAction(caption, (*it)); + if (index < 9) + action->setShortcut(Qt::CTRL + Qt::Key_1 + index); - windowsMenu->addAction(action); - action->setCheckable(true); - if ((*it) == LastActiveWindow) - action->setChecked(true); - } - } + windowsMenu->addAction(action); + action->setCheckable(true); + if ((*it) == LastActiveWindow) + action->setChecked(true); + } + } } @@ -801,17 +805,17 @@ } else { - QMdiSubWindow *w = dynamic_cast<QMdiSubWindow *>(action->parentWidget()); - if(w) - { - workspace()->setActiveSubWindow(w); - w->raise(); - if(w->widget()) - w->widget()->setFocus(); - // piece of shit mdi doesn't always send window activated - // signal - windowActivated(w); - } + QMdiSubWindow *w = dynamic_cast<QMdiSubWindow *>(action->parentWidget()); + if(w) + { + workspace()->setActiveSubWindow(w); + w->raise(); + if(w->widget()) + w->widget()->setFocus(); + // piece of shit mdi doesn't always send window activated + // signal + windowActivated(w); + } } } @@ -1040,7 +1044,7 @@ else if (action == editMenu.prefsAct) { toPreferences::displayPreferences(this); - handleToolsDisplay(); + //handleToolsDisplay(); } #ifdef TORA3_SESSION else if (action == openSessionAct) Modified: branches/tora3/src/core/tomain.h =================================================================== --- branches/tora3/src/core/tomain.h 2012-09-22 12:34:40 UTC (rev 4471) +++ branches/tora3/src/core/tomain.h 2012-09-22 13:59:52 UTC (rev 4472) @@ -95,7 +95,7 @@ void createDocklets(); void createDockbars(); //! \brief Sets tools displaying depending on preferences (tabs/windows) - void handleToolsDisplay(); + void createMdiArea(); public: Modified: branches/tora3/src/core/totool.cpp =================================================================== --- branches/tora3/src/core/totool.cpp 2012-09-22 12:34:40 UTC (rev 4471) +++ branches/tora3/src/core/totool.cpp 2012-09-22 13:59:52 UTC (rev 4472) @@ -72,6 +72,24 @@ #undef QT_TRANSLATE_NOOP #define QT_TRANSLATE_NOOP(x,y) QTRANS(x,y) +// thx for Martin Pejcoch +// see QT JIRA bugs QTBUG-13515, QTBUG-18846, QTBUG-4982, QTBUG-19924, QTBUG-19957, QTBUG-2100 +// and all the QMdiArea related bugs +class MdiSubWindow : public QMdiSubWindow +{ +public: + MdiSubWindow( QWidget * parent = 0 , Qt::WindowFlags flags = 0) + : QMdiSubWindow( parent, flags ) + { + } + virtual void showEvent( QShowEvent * event ) + { + QMdiSubWindow::showEvent( event ); + if( widget() ) + widget()->show(); + } +}; + toConnectionWidget::toConnectionWidget(toConnection &conn, QWidget *widget) : Connection(&conn), Widget(widget) { @@ -248,6 +266,28 @@ toMainWidget()->updateWindowsMenu(); } +#ifdef QT_DEBUG +void toToolWidget::focusInEvent(QFocusEvent *e) +{ + QWidget::focusInEvent(e); +} + +void toToolWidget::enterEvent(QEvent *e) +{ + QWidget::enterEvent(e); +} + +void toToolWidget::paintEvent(QPaintEvent *e) +{ + QWidget::paintEvent(e); +} + +void toToolWidget::setVisible(bool visible) +{ + QWidget::setVisible(visible); +} +#endif + toToolWidget* toToolWidget::currentTool(QObject *cur) { while (cur) @@ -293,83 +333,86 @@ } QWidget* toTool::createWindow() -{ - toMainWindow *main = toMainWidget(); - QWidget *newWin = 0; +{ + QWidget *newWin; + try + { + toMainWindow *main = toMainWidget(); + // for more information about this WOODOO see + // QT Jira BUG: QTBUG-13515, QTBUG-18846 and all the QMdiArea related bugs + QMdiArea *workspace = main->workspace(); + MdiSubWindow *newSub = new MdiSubWindow(workspace); - try - { - if (!canHandle(main->currentConnection())) - throw QString("The tool %1 doesn't support the current database").arg(QString(name())); - newWin = toolWindow(main->workspace(), main->currentConnection()); + if (!canHandle(main->currentConnection())) + throw QString("The tool %1 doesn't support the current database").arg(QString(name())); + + // save previous window + QMdiSubWindow *previous = main->lastActiveWindow(); - if (newWin) - { - toToolWidget *tool = dynamic_cast<toToolWidget *>(newWin); + newWin = toolWindow(workspace, main->currentConnection()); + newWin->showMaximized(); + newSub->setWidget(newWin); + workspace->addSubWindow(newSub); + newSub->show(); + newWin->show(); + //newsub->setFocusProxy(newWin); - if (tool && tool->windowTitle().isEmpty()) - { - tool->setCaption(name()); - } + toToolWidget *tool = dynamic_cast<toToolWidget *>(newWin); + if (!newWin && !tool) + throw QString("The tool %1 creation failed").arg(QString(name())); - // save previous window - QMdiSubWindow *previous = main->lastActiveWindow(); - QMdiSubWindow *newsub = main->workspace()->addSubWindow(newWin); - newsub->setFocusProxy(newWin); - const QPixmap *icon = toolbarImage(); - if (icon) - { - newWin->setWindowIcon(*icon); // is this really required? - newsub->setWindowIcon(*icon); - } + if (tool->windowTitle().isEmpty()) + tool->setCaption(name()); + + const QPixmap *icon = toolbarImage(); + if (icon) + newSub->setWindowIcon(*icon); - if(tool) - main->toolWidgetAdded(tool); + main->toolWidgetAdded(tool); + + // Maximize window if only window + // bool max = true; + // foreach(QMdiSubWindow * window, main->workspace()->subWindowList()) + // { + // QWidget *widget = window->widget(); + // if (widget && widget != newWin && !widget->isHidden()) + // max = false; + // } - // Maximize window if only window - bool max = true; - foreach(QMdiSubWindow * window, main->workspace()->subWindowList()) - { - QWidget *widget = window->widget(); - if (widget && widget != newWin && !widget->isHidden()) - max = false; - } + // if(!max && previous) + // { + // // if not max, check previous window. if it's + // // maximized then show this window max + // if(previous->windowState() & Qt::WindowMaximized) + // max = true; + // } + // + // if (max) + // newWin->showMaximized(); - if(!max && previous) - { - // if not max, check previous window. if it's - // maximized then show this window max - if(previous->windowState() & Qt::WindowMaximized) - max = true; - } + // workaround bug in mdi. deactivate subwindow first, then + // set active + // WARNING: don't change this call order unles you know what + // are you doing ;) It's working now. When there is missing + // "previous" call, the toWorksheet tool do not get focus. + // Dunno why... it makes me mad. + // main->workspace()->setActiveSubWindow(0); + // main->workspace()->setActiveSubWindow(previous); + // main->workspace()->setActiveSubWindow(newsub); + // workspace->setActiveSubWindow(newsub); - if (max) - newWin->showMaximized(); + // piece of shit mdi doesn't always send window activated signal + // main->windowActivated(newsub); - // workaround bug in mdi. deactivate subwindow first, then - // set active - // WARNING: don't change this call order unles you know what - // are you doing ;) It's working now. When there is missing - // "previous" call, the toWorksheet tool do not get focus. - // Dunno why... it makes me mad. - main->workspace()->setActiveSubWindow(0); - main->workspace()->setActiveSubWindow(previous); - main->workspace()->setActiveSubWindow(newsub); + // newsub->show(); + // newsub->raise(); + // newsub->setFocus(); - // piece of shit mdi doesn't always send window activated - // signal - main->windowActivated(newsub); + // main->updateWindowsMenu(); + } + TOCATCH; - newsub->show(); - newsub->raise(); - newsub->setFocus(); - - main->updateWindowsMenu(); - } - } - TOCATCH; - - return newWin; + return newWin; } Modified: branches/tora3/src/core/totool.h =================================================================== --- branches/tora3/src/core/totool.h 2012-09-22 12:34:40 UTC (rev 4471) +++ branches/tora3/src/core/totool.h 2012-09-22 13:59:52 UTC (rev 4472) @@ -459,6 +459,13 @@ */ void setCaption(QString const& caption); +#ifdef QT_DEBUG + /* Inherited from QWidget - for debuging purposes only - buggy MDI */ + virtual void focusInEvent(QFocusEvent *); + virtual void enterEvent(QEvent *); + virtual void paintEvent(QPaintEvent *); + virtual void setVisible(bool visible); +#endif /** Return the tool widget most closely associated with a widget. * @return Pointer to tool widget. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-09-25 15:18:16
|
Revision: 4479 http://tora.svn.sourceforge.net/tora/?rev=4479&view=rev Author: ibre5041 Date: 2012-09-25 15:18:04 +0000 (Tue, 25 Sep 2012) Log Message: ----------- ??? Modified Paths: -------------- branches/tora3/src/core/tohighlightedtext.h branches/tora3/src/core/tomarkedtext.cpp branches/tora3/src/core/tomarkedtext.h branches/tora3/src/core/tomemoeditor.cpp branches/tora3/src/core/tomemoeditor.h branches/tora3/src/core/tomodeleditor.cpp branches/tora3/src/core/tomodeleditor.h branches/tora3/src/core/totimer.h branches/tora3/src/core/utils.cpp Modified: branches/tora3/src/core/tohighlightedtext.h =================================================================== --- branches/tora3/src/core/tohighlightedtext.h 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tohighlightedtext.h 2012-09-25 15:18:04 UTC (rev 4479) @@ -42,8 +42,6 @@ #ifndef TOHIGHLIGHTEDTEXT_H #define TOHIGHLIGHTEDTEXT_H - - #include "core/tomarkedtext.h" #include <Qsci/qscilexer.h> @@ -55,8 +53,8 @@ #include <QStringList> #include <QWidget> -#include <list> -#include <map> +//#include <list> +//#include <map> class QListWidget; class QListWidgetItem; @@ -67,7 +65,6 @@ /** This class implements a syntax parser to provide information to * a syntax highlighted editor. */ - class toSyntaxAnalyzer { public: @@ -422,4 +419,52 @@ void setStatusMessage(void); }; +class toMemoText : public toMarkedText +{ +public: + toMemoText(toModelEditor *edit, QWidget *parent, const char *name = NULL) + : toMarkedText(parent, name) + , MemoEditor(edit) + { } + + virtual void keyPressEvent(QKeyEvent *e); + //{ + // if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toModelEditor", "Ctrl+Return", "Memo Editor|Save changes")))) + // { + // MemoEditor->store(); + // e->accept(); + // } + // else + // { + // toMarkedText::keyPressEvent(e); + // } + //} +private: + toModelEditor *MemoEditor; +}; + +class toMemoSQL : public toHighlightedText +{ +public: + toMemoSQL(toModelEditor *edit, QWidget *parent, const char *name = NULL) + : toHighlightedText(parent, name) + , MemoEditor(edit) + { } + + virtual void keyPressEvent(QKeyEvent *e); +// { +// if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toModelEditor", "Ctrl+Return", "Memo Editor|Save changes")))) +// { +// MemoEditor->store(); +// e->accept(); +// } +// else +// { +// toHighlightedText::keyPressEvent(e); +// } +// } +private: + toModelEditor *MemoEditor; +}; + #endif Modified: branches/tora3/src/core/tomarkedtext.cpp =================================================================== --- branches/tora3/src/core/tomarkedtext.cpp 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tomarkedtext.cpp 2012-09-25 15:18:04 UTC (rev 4479) @@ -47,9 +47,6 @@ #include "core/toconfiguration.h" #include "core/toeditmenu.h" -//#include "tohighlightedtext.h" -//#include "totool.h" - #include <Qsci/qsciprinter.h> #include <QClipboard> #include <QMenu> @@ -79,6 +76,7 @@ toMarkedText::toMarkedText(QWidget *parent, const char *name) : QsciScintilla(parent) , toEditWidget() + , Search(false) , m_searchDirection(Search::SearchUndefined) , m_searchText("") , m_searchIndicator(9) // see QsciScintilla docs @@ -87,7 +85,6 @@ if (name) setObjectName(name); setEditFlags(); - Search = false; setFont(Utils::toStringToFont(toConfigurationSingle::Instance().textFont())); setMarginLineNumbers(0, true); setCallTipsStyle(CallTipsNone); @@ -440,14 +437,14 @@ Utils::toStatusMessage(tr("Incremental search") + QString::fromLatin1(":") + SearchString, false, false); } -void toMarkedText::incrementalSearch(bool forward, bool next) +void toMarkedText::incrementalSearch(Search::SearchDirection forward, bool next) { int curline, curcol; getCursorPosition (&curline, &curcol); QString line; if (SearchFailed && next) { - if (forward) + if (forward == Search::SearchForward) { curline = 0; curcol = 0; @@ -465,7 +462,7 @@ } else line = text(curline); - if (forward) + if (forward == Search::SearchForward) { if (next) curcol++; @@ -583,9 +580,9 @@ QsciScintilla::mousePressEvent(e); } -void toMarkedText::incrementalSearch(bool forward) +void toMarkedText::incrementalSearch(Search::SearchDirection forward) { - SearchForward = forward; + m_searchDirection = forward; if (!Search) { Search = true; @@ -598,7 +595,7 @@ if (!SearchString.length()) SearchString = LastSearch; if (SearchString.length()) - incrementalSearch(SearchForward, true); + incrementalSearch(m_searchDirection, true); } } @@ -633,7 +630,7 @@ if (ok) { - incrementalSearch(SearchForward, false); + incrementalSearch(m_searchDirection, false); e->accept(); return ; } @@ -647,6 +644,7 @@ QsciScintilla::keyPressEvent(e); } +#ifdef TORA3_GRAPH void toMarkedText::exportData(std::map<QString, QString> &data, const QString &prefix) { data[prefix + ":Filename"] = Filename; @@ -669,6 +667,8 @@ if (data[prefix + ":Edited"].isEmpty()) setModified(false); } +#endif + /* static int FindIndex(const QString &str, int line, int col) { @@ -712,6 +712,70 @@ return findText(Search::SearchBackward); } +QString toMarkedText::editText() +{ + return text(); +}; + +void toMarkedText::editUndo(void) +{ + QsciScintilla::undo(); +} + +/** + * Abstract method from toEditWidget + */ +void toMarkedText::editRedo(void) +{ + QsciScintilla::redo(); +} + +/** + * Abstract method from toEditWidget + */ +void toMarkedText::editCut(void) +{ + m_pasteAvailable = true; + QsciScintilla::cut(); +} + +/** + * Abstract method from toEditWidget + */ +void toMarkedText::editCopy(void) +{ + m_pasteAvailable = true; + QsciScintilla::copy(); +} + +/** + * Abstract method from toEditWidget + */ +void toMarkedText::editPaste(void) +{ + QsciScintilla::paste(); +} + +/** + * Abstract method from toEditWidget + */ +void toMarkedText::editSelectAll(void) +{ + selectAll(); +} + +/** + * QsciScintilla's selectAll doesn't always work like we want. + */ +void toMarkedText::selectAll(bool select /*=TRUE*/ ) +{ + // selectAll(true) doesn't work if there's a selection already. + if (QsciScintilla::hasSelectedText()) + QsciScintilla::selectAll(false); + + QsciScintilla::selectAll(); +} + bool toMarkedText::findText(Search::SearchDirection direction) { bool r = false; @@ -908,26 +972,17 @@ if (!isReadOnly()) { - action = popup->addAction(QIcon(undo_xpm), - tr("&Undo"), - this, - SLOT(undo())); + action = popup->addAction(QIcon(undo_xpm), tr("&Undo"), this, SLOT(undo())); action->setShortcut(QKeySequence::Undo); action->setEnabled(isUndoAvailable()); - action = popup->addAction(QIcon(redo_xpm), - tr("&Redo"), - this, - SLOT(redo())); + action = popup->addAction(QIcon(redo_xpm), tr("&Redo"), this, SLOT(redo())); action->setShortcut(QKeySequence::Redo); action->setEnabled(isRedoAvailable()); popup->addSeparator(); - action = popup->addAction(QIcon(cut_xpm), - tr("Cu&t"), - this, - SLOT(cut())); + action = popup->addAction(QIcon(cut_xpm), tr("Cu&t"), this, SLOT(cut())); action->setShortcut(QKeySequence::Cut); action->setToolTip(tr("Cut to clipboard")); action->setEnabled(hasSelectedText()); Modified: branches/tora3/src/core/tomarkedtext.h =================================================================== --- branches/tora3/src/core/tomarkedtext.h 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tomarkedtext.h 2012-09-25 15:18:04 UTC (rev 4479) @@ -64,49 +64,33 @@ class QsciPrinter; class QFileSystemWatcher; +class toModelEditor; /** * This is the enhanced editor used in TOra. It mainly offers integration in the TOra - * menues and print support. It is based on QsciScintilla which is API compatible - * with QTextEdit class. + * menus and print support. It is based on QsciScintilla which is API compatible + * with QTextEdit class. toEditWidget is abstract class representing copy/paste interface. + * + * Inheritance tree for this class: + * (if you know why is this so complicated please let me know (ibre5041) + * + * toMarkedText + * |-> toHighlightedText + * | |-> toMemoSQL + * | |-> toResultField + * | \-> toWorksheetText + * \-> toMemoText + * + * Classes toMemoText, toMemoSQL are used only in Dialogs toModelEditor, toMemoEditor */ - class toMarkedText : public QsciScintilla, public toEditWidget { - Q_OBJECT + Q_OBJECT; - /** Filename of the file in this buffer. - */ - QString Filename; - - bool Search; - bool SearchFailed; - bool SearchForward; - bool m_pasteAvailable; - - QString SearchString; - QString LastSearch; - - int CursorTimerID; - - QPoint DragStart; - - Search::SearchDirection m_searchDirection; - //! Text to search - QString m_searchText; - //! Highligh all occurrences of m_searchText QScintilla indicator - int m_searchIndicator; - - //! Original content of the editor for XML format functionality. See setXMLWrap() - QString m_origContent; - - //! Watch for file (if any) changes from external apps - QFileSystemWatcher * m_fsWatcher; - bool findText(Search::SearchDirection direction); void searchFound(int line, int col); - void incrementalSearch(bool forward, bool next); + void incrementalSearch(Search::SearchDirection forward, bool next); void fsWatcherClear(); protected: @@ -165,7 +149,6 @@ bool getSelection (int * line1, int * col1, int * line2, int * col2) { QsciScintilla::getSelection(line1, col1, line2, col2); - return hasSelectedText(); } @@ -180,62 +163,66 @@ /** Get filename of current file in editor. * @return Filename of editor. */ - virtual QString filename(void) const + QString const& filename(void) const { return Filename; } + /** Open a file for editing. * @param file File to open for editing. */ - virtual void openFilename(const QString &file); + void openFilename(const QString &file); + /** Set the current filename of the file in editor. * @param str String containing filename. */ - virtual void setFilename(const QString &str) + void setFilename(const QString &str) { Filename = str; } + /** Update user interface with availability of copy/paste etc. */ void setEditFlags(void); - /** Reimplemented for internal reasons. + /** Reimplemented from toEditWidget */ - virtual void focusInEvent (QFocusEvent *e); - /** Reimplemented for internal reasons. - */ - virtual void focusOutEvent (QFocusEvent *e); - /** Print this editor. - */ + virtual QString editText(); + virtual void editUndo(void); + virtual void editRedo(void); + virtual void editCut(void); + virtual void editCopy(void); + virtual void editPaste(void); + virtual void editSelectAll(void); virtual void editPrint(void); - /** Reimplemented for internal reasons. - */ virtual bool editOpen(QString suggestedFile = QString::null); - /** Reimplemented for internal reasons. - */ virtual bool editSave(bool askfile); - virtual bool searchNext(const QString & text); virtual bool searchPrevious(const QString & text); - - /** Replace entry with new data - */ virtual void searchReplace(const QString &newData); virtual void searchReplaceAll(const QString &newData); - /** Check if data can be modified by search + + /** Reimplemented from toEditWidget + * Check if data can be modified by search * @param all If true can replace all, otherwise can replace right now. */ virtual bool searchCanReplace(bool all); - virtual QString editText() - { - return text(); - }; + /** Reimplemented from QsciScintilla + * QsciScintilla's selectAll doesn't always work like we want. + */ + virtual void selectAll(bool select = TRUE); + /** Reimplemented from QsciScintilla + */ + virtual void focusInEvent (QFocusEvent *e); + virtual void focusOutEvent (QFocusEvent *e); + /** Start incremental search mode, or search next if started. */ - void incrementalSearch(bool forward); + void incrementalSearch(Search::SearchDirection forward); +#ifdef TORA3_GRAPH /** Export data to a map. * @param data A map that can be used to recreate the data of a chart. * @param prefix Prefix to add to the map. @@ -246,6 +233,8 @@ * @param prefix Prefix to read data from. */ virtual void importData(std::map<QString, QString> &data, const QString &prefix); +#endif TORA3_GRAPH + /** Find the line and column of an index into the string of the entire editor. * @param index Index to get line and col from. * @param line Will be filled out with the line. @@ -283,69 +272,7 @@ void m_fsWatcher_fileChanged(const QString & filename); public slots: - /** - * Reimplemented for internal reasons. - */ - virtual void editUndo(void) - { - undo(); - } - /** - * Reimplemented for internal reasons. - */ - virtual void editRedo(void) - { - redo(); - } - - /** - * Reimplemented for internal reasons. - */ - virtual void editCut(void) - { - m_pasteAvailable = true; - cut(); - } - - /** - * Reimplemented for internal reasons. - */ - virtual void editCopy(void) - { - m_pasteAvailable = true; - copy(); - } - - /** - * Reimplemented for internal reasons. - */ - virtual void editPaste(void) - { - paste(); - } - - /** - * Reimplemented for internal reasons. - */ - virtual void editSelectAll(void) - { - selectAll(); - } - - /** - * QsciScintilla's selectAll doesn't always work like we want. - * - */ - virtual void selectAll(bool select = TRUE) - { - // selectAll(true) doesn't work if there's a selection already. - if (QsciScintilla::hasSelectedText()) - QsciScintilla::selectAll(false); - - QsciScintilla::selectAll(); - } - void setWordWrap(bool); /*! \brief Tries to format XML content of the editor. @@ -356,6 +283,55 @@ \param wrap true for use formatting, false for use original text */ void setXMLWrap(bool wrap); + +private: + QString Filename; // Filename of the file in this buffer. + + bool Search; + bool SearchFailed; + bool m_pasteAvailable; + + QString SearchString; + QString LastSearch; + + int CursorTimerID; + + QPoint DragStart; + + Search::SearchDirection m_searchDirection; + + //! Text to search + QString m_searchText; + //! Highligh all occurrences of m_searchText QScintilla indicator + int m_searchIndicator; + + //! Original content of the editor for XML format functionality. See setXMLWrap() + QString m_origContent; + + //! Watch for file (if any) changes from external apps + QFileSystemWatcher * m_fsWatcher; }; +template <class SUPER, class DIALOG> +class TMemoWithExec : public SUPER +{ + DIALOG *MemoEditor; +public: + TMemoWithExec(DIALOG *edit, QWidget *parent, const char *name = NULL) + : SUPER(parent, name) + , MemoEditor(edit) + { } + virtual ~TMemoWithExec() {} + virtual void keyPressEvent(QKeyEvent *e) + { + if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toMemoEditor", "Ctrl+Return", "Memo Editor|Save changes")))) + { + MemoEditor->store(); + e->accept(); + } + else + SUPER::keyPressEvent(e); + } +}; + #endif Modified: branches/tora3/src/core/tomemoeditor.cpp =================================================================== --- branches/tora3/src/core/tomemoeditor.cpp 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tomemoeditor.cpp 2012-09-25 15:18:04 UTC (rev 4479) @@ -47,13 +47,6 @@ #include "core/toresultview.h" #include "core/tomain.h" -// #include <qcheckbox.h> -// #include <qlabel.h> -// #include <qlayout.h> -// #include <qpixmap.h> -// #include <qtoolbar.h> -// #include <qtoolbutton.h> - #include <QKeyEvent> #include <QVBoxLayout> #include <QDialogButtonBox> @@ -71,48 +64,6 @@ #include "icons/previous.xpm" #include "icons/rewind.xpm" -class toMemoText : public toMarkedText -{ - toMemoEditor *MemoEditor; -public: - toMemoText(toMemoEditor *edit, QWidget *parent, const char *name = NULL) - : toMarkedText(parent, name), MemoEditor(edit) - { } - virtual void keyPressEvent(QKeyEvent *e) - { - if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toMemoEditor", "Ctrl+Return", "Memo Editor|Save changes")))) - { - MemoEditor->store(); - e->accept(); - } - else - { - toMarkedText::keyPressEvent(e); - } - } -}; - -class toMemoSQL : public toHighlightedText -{ - toMemoEditor *MemoEditor; -public: - toMemoSQL(toMemoEditor *edit, QWidget *parent, const char *name = NULL) - : toHighlightedText(parent, name), MemoEditor(edit) - { } - virtual void keyPressEvent(QKeyEvent *e) - { - if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toMemoEditor", "Ctrl+Return", "Memo Editor|Save changes")))) - { - MemoEditor->store(); - e->accept(); - } - else - { - toHighlightedText::keyPressEvent(e); - } - } -}; - void toMemoEditor::openFile(void) { Editor->editOpen(); @@ -147,9 +98,9 @@ vbox->addWidget(Toolbar); if (sql) - Editor = new toMemoSQL(this, this); + Editor = new toMemoEditor::toMemoSQL(this, this); else - Editor = new toMemoText(this, this); + Editor = new toMemoEditor::toMemoText(this, this); vbox->addWidget(Editor); Editor->setReadOnly(Row < 0 || Col < 0 || listView()); Editor->setFocus(); Modified: branches/tora3/src/core/tomemoeditor.h =================================================================== --- branches/tora3/src/core/tomemoeditor.h 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tomemoeditor.h 2012-09-25 15:18:04 UTC (rev 4479) @@ -42,8 +42,9 @@ #ifndef TOMEMOEDITOR_H #define TOMEMOEDITOR_H +#include "core/tomarkedtext.h" +#include "core/tohighlightedtext.h" - #include <QDialog> #include <QLabel> #include <QToolBar> @@ -58,25 +59,13 @@ /** Displays an text in a widget which can optionally be modified and saved back. */ - class toMemoEditor : public QDialog { - Q_OBJECT + Q_OBJECT; - /** Editor of widget - */ - toMarkedText *Editor; - /** Row of this field - */ - int Row; - /** Column of this field - */ - int Col; - QToolBar *Toolbar; - QLabel *Label; - QCheckBox *Null; + typedef TMemoWithExec<toMarkedText, toMemoEditor> toMemoText; + typedef TMemoWithExec<toHighlightedText, toMemoEditor> toMemoSQL; - toListView *listView(void); private slots: void openFile(void); void saveFile(void); @@ -159,6 +148,21 @@ private slots: void changeCurrent(toTreeWidgetItem *item); virtual void null(bool); +private: + /** Editor of widget + */ + toMarkedText *Editor; + /** Row of this field + */ + int Row; + /** Column of this field + */ + int Col; + QToolBar *Toolbar; + QLabel *Label; + QCheckBox *Null; + + toListView *listView(void); }; #endif Modified: branches/tora3/src/core/tomodeleditor.cpp =================================================================== --- branches/tora3/src/core/tomodeleditor.cpp 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tomodeleditor.cpp 2012-09-25 15:18:04 UTC (rev 4479) @@ -46,19 +46,12 @@ #include "core/toresultview.h" #include "core/tomain.h" -// #include <qcheckbox.h> -// #include <qlayout.h> -// #include <qpixmap.h> -// #include <qtoolbutton.h> - #include <QKeyEvent> #include <QVBoxLayout> #include <QDialogButtonBox> #include <QSettings> #include <QAbstractItemModel> -#include <cstdio> - #include "icons/commit.xpm" #include "icons/copy.xpm" #include "icons/wordwrap.xpm" @@ -71,53 +64,6 @@ #include "icons/previous.xpm" #include "icons/rewind.xpm" -class toMemoText : public toMarkedText -{ - toModelEditor *MemoEditor; - -public: - toMemoText(toModelEditor *edit, QWidget *parent, const char *name = NULL) - : toMarkedText(parent, name), MemoEditor(edit) - { } - - virtual void keyPressEvent(QKeyEvent *e) - { - if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toModelEditor", "Ctrl+Return", "Memo Editor|Save changes")))) - { - MemoEditor->store(); - e->accept(); - } - else - { - toMarkedText::keyPressEvent(e); - } - } -}; - - -class toMemoSQL : public toHighlightedText -{ - toModelEditor *MemoEditor; - -public: - toMemoSQL(toModelEditor *edit, QWidget *parent, const char *name = NULL) - : toHighlightedText(parent, name), MemoEditor(edit) - { } - - virtual void keyPressEvent(QKeyEvent *e) - { - if (Utils::toCheckKeyEvent(e, QKeySequence(qApp->translate("toModelEditor", "Ctrl+Return", "Memo Editor|Save changes")))) - { - MemoEditor->store(); - e->accept(); - } - else - { - toHighlightedText::keyPressEvent(e); - } - } -}; - void toModelEditor::openFile() { Editor->editOpen(); @@ -188,9 +134,9 @@ vbox->addWidget(Toolbar); if (sql) - Editor = new toMemoSQL(this, this); + Editor = new toModelEditor::toMemoSQL(this, this); else - Editor = new toMemoText(this, this); + Editor = new toModelEditor::toMemoText(this, this); vbox->addWidget(Editor); Editable = Model->flags(Current) & Qt::ItemIsEditable; Modified: branches/tora3/src/core/tomodeleditor.h =================================================================== --- branches/tora3/src/core/tomodeleditor.h 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/tomodeleditor.h 2012-09-25 15:18:04 UTC (rev 4479) @@ -39,11 +39,12 @@ * * END_COMMON_COPYRIGHT_HEADER */ -#ifndef TOMEMOEDITOR_H -#define TOMEMOEDITOR_H +#ifndef TOMODELEDITOR_H +#define TOMODELEDITOR_H +#include "core/tomarkedtext.h" +#include "core/tohighlightedtext.h" - #include <QDialog> #include <QLabel> #include <QToolBar> @@ -56,25 +57,31 @@ /** - * A dialog for displaying and editing a row and column of a model. - * + * A dialog for displaying and editing a row and column of a model */ class toModelEditor : public QDialog { Q_OBJECT; - // Editor of widget - toMarkedText *Editor; + class toMemoText : public TMemoWithExec<toMarkedText, toModelEditor> {}; + class toMemoSQL: public TMemoWithExec<toHighlightedText, toModelEditor> {}; +public: + /** + * Create this editor. + * + * @param parent Parent widget. + * @param model data source + * @param row Optional location specifier, pass on in @ref changeData call. + * @param col Optional location specifier, pass on in @ref changeData call. + * @param sql Use SQL syntax highlighting of widget. + * @param modal Display in modal dialog + */ + toModelEditor(QWidget *parent, + QAbstractItemModel *model, + QModelIndex current, + bool sql = false, + bool modal = true); // changed to true to prevent random crashes on tora exits with memo opened - petr vanek - QToolBar *Toolbar; - QLabel *Label; - QCheckBox *NullCheck; - - bool Editable; - QModelIndex Current; - QAbstractItemModel *Model; - - mutable unsigned offset; private slots: void openFile(void); void saveFile(void); @@ -96,23 +103,6 @@ return Label; } -public: - /** - * Create this editor. - * - * @param parent Parent widget. - * @param model data source - * @param row Optional location specifier, pass on in @ref changeData call. - * @param col Optional location specifier, pass on in @ref changeData call. - * @param sql Use SQL syntax highlighting of widget. - * @param modal Display in modal dialog - */ - toModelEditor(QWidget *parent, - QAbstractItemModel *model, - QModelIndex current, - bool sql = false, - bool modal = true); // changed to true to prevent random crashes on tora exits with memo opened - petr vanek - public slots: /** Save changes and close. */ @@ -145,6 +135,19 @@ /** Retun next chunk of data(for write into a file */ QByteArray nextData() const; +private: + // Editor of widget + toMarkedText *Editor; + + QToolBar *Toolbar; + QLabel *Label; + QCheckBox *NullCheck; + + bool Editable; + QModelIndex Current; + QAbstractItemModel *Model; + + mutable unsigned offset; }; #endif Modified: branches/tora3/src/core/totimer.h =================================================================== --- branches/tora3/src/core/totimer.h 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/totimer.h 2012-09-25 15:18:04 UTC (rev 4479) @@ -14,8 +14,7 @@ class toTimer : public QTimer { - int LastTimer; - + Q_OBJECT; public: /** Create timer. @@ -34,6 +33,8 @@ * @return Last timeout in millisecond. */ int lastTimer(void); +private: + int LastTimer; }; #endif Modified: branches/tora3/src/core/utils.cpp =================================================================== --- branches/tora3/src/core/utils.cpp 2012-09-24 19:46:32 UTC (rev 4478) +++ branches/tora3/src/core/utils.cpp 2012-09-25 15:18:04 UTC (rev 4479) @@ -520,6 +520,7 @@ break; default: ret += rc; + break; } } } @@ -593,6 +594,7 @@ break; default: ret += rc; + break; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-10-04 11:27:36
|
Revision: 4491 http://tora.svn.sourceforge.net/tora/?rev=4491&view=rev Author: ibre5041 Date: 2012-10-04 11:27:29 +0000 (Thu, 04 Oct 2012) Log Message: ----------- Tab switching fix. PS: QMdiArea is cripled, because QTabBar has bad api. addTab, insertTab do emit currentChanged, but only if 0th (1st) tab is added. At this movement the Tab has not UserData associated with it.] Modified Paths: -------------- branches/tora3/src/core/totool.h branches/tora3/src/core/toworkspace.cpp branches/tora3/src/core/toworkspace.h Modified: branches/tora3/src/core/totool.h =================================================================== --- branches/tora3/src/core/totool.h 2012-10-03 14:47:09 UTC (rev 4490) +++ branches/tora3/src/core/totool.h 2012-10-04 11:27:29 UTC (rev 4491) @@ -390,9 +390,6 @@ , public toConnectionWidget { Q_OBJECT; -private slots: - void parentConnection(void); - virtual void slotWindowActivated(toToolWidget*) = 0; signals: /** Emitted when the connection is changed. */ @@ -414,6 +411,7 @@ { return toConnectionWidget::connection(); } + /** Get the tool for this tool widget. * @return Reference to a tool object. */ @@ -421,6 +419,7 @@ { return Tool; } + /** Check if this tool can handle a specific connection. * @param provider Name of connection. * @return True if connection is handled. @@ -429,13 +428,16 @@ { return Tool.canHandle(conn); } + /** Change connection of tool. */ void setConnection(toConnection &conn); + /** Get timer of tool. Used by some results to get update time. * @return Pointer to a timer object. */ toTimer *timer(void); + #ifdef TORA3_GRAPH /** Export data to a map. * @param data A map that can be used to recreate the data of a chart. @@ -449,12 +451,6 @@ virtual void importData(std::map<QString, QString> &data, const QString &prefix); #endif - /* Set or change title of a tool window. - * @param tool Widget of tool. - * @param caption Caption to set to the tool. - */ - void setCaption(QString const& caption); - #ifdef QT_DEBUG /* Inherited from QWidget - for debuging purposes only - buggy MDI */ virtual void focusInEvent(QFocusEvent *); @@ -466,6 +462,17 @@ * @return Pointer to tool widget. */ static toToolWidget* currentTool(QObject *widget); + +protected: + /* Set or change title of a tool window. + * @param tool Widget of tool. + * @param caption Caption to set to the tool. + */ + void setCaption(QString const& caption); + +private slots: + void parentConnection(void); + virtual void slotWindowActivated(toToolWidget*) = 0; private: toTimer *Timer; toTool &Tool; Modified: branches/tora3/src/core/toworkspace.cpp =================================================================== --- branches/tora3/src/core/toworkspace.cpp 2012-10-03 14:47:09 UTC (rev 4490) +++ branches/tora3/src/core/toworkspace.cpp 2012-10-04 11:27:29 UTC (rev 4491) @@ -41,6 +41,7 @@ #include "core/toworkspace.h" #include "core/totool.h" +#include "ts_log/ts_log_utils.h" #include <QTabBar> #include <QStackedWidget> @@ -49,6 +50,7 @@ toWorkSpace::toWorkSpace(QWidget * parent) : QWidget(parent) + , m_lastWidget(NULL) { //setAutoFillBackground(true); //setPalette(QPalette(Qt::white)); @@ -62,6 +64,7 @@ m_tabBar->setTabsClosable(true); m_tabBar->setMovable(true); connect(m_tabBar, SIGNAL(currentChanged(int)) , this, SLOT(slotCurrentIndexChanged(int))); + connect(m_tabBar, SIGNAL(tabMoved(int,int)) , this, SLOT(slotTabMoved(int,int))); connect(m_tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(slotTabCloseRequested(int))); vbox->addWidget(m_tabBar); @@ -74,49 +77,87 @@ vbox->addWidget(m_stackedWidget); - QLabel *l = new QLabel("Blablabla", this); + m_label = new QLabel("Blablabla", this); - vbox->addWidget(l); + vbox->addWidget(m_label); show(); } void toWorkSpace::addToolWidget(toToolWidget *toolWidget) { - int tabIndex = m_tabBar->addTab(toolWidget->tool().name()); + Q_ASSERT_X(!m_toolsRegistry.contains(toolWidget), (__HERE__).c_str(), "Tool window already added"); + ToolIndex i; + i.WidgetIndex = m_stackedWidget->addWidget(toolWidget); + i.TabBarIndex = m_tabBar->insertTab(m_tabBar->count(), toolWidget->tool().name()); // note this emits currentIndexChanged + m_toolsRegistry.insert(toolWidget, i); const QPixmap *icon = toolWidget->tool().toolbarImage(); if (icon) - m_tabBar->setTabIcon(tabIndex, *icon); + m_tabBar->setTabIcon(i.TabBarIndex, *icon); - int index = m_stackedWidget->addWidget(toolWidget); - m_stackedWidget->setCurrentIndex(index); + QVariant data = qVariantFromValue((void *) toolWidget); + m_tabBar->setTabData(i.TabBarIndex, data); + if(m_lastWidget == NULL) // 0th tab was added (slotCurrentIndexChanged did nothing) + { + m_lastWidget = toolWidget; + m_stackedWidget->setCurrentIndex(i.WidgetIndex); + toolWidget->setFocus(); + emit activeToolChaged(toolWidget); // => toTool::slotWindowActivated + } else { + m_tabBar->setCurrentIndex(i.TabBarIndex); // also sometimes called from m_tabBar->insertTab + } + + Q_ASSERT_X(m_lastWidget != NULL, (__HERE__).c_str(), "Tool widgets list corrupted"); - QVariant data(index); - m_tabBar->setTabData(tabIndex, data); - - toolWidget->setFocus(); + //emit activeToolChaged(toolWidget); // => toTool::slotWindowActivated +} - emit activeToolChaged(toolWidget); +void toWorkSpace::slotCurrentIndexChanged(int idx) +{ + if(idx == -1) + return; // no tab openned + + toToolWidget *w = static_cast<toToolWidget*>(m_tabBar->tabData(idx).value<void*>()); + if(w) + { + m_lastWidget = w; + int WidgetIndex = m_toolsRegistry.value(w).WidgetIndex; + m_stackedWidget->setCurrentIndex(WidgetIndex); + w->setFocus(); + emit activeToolChaged(w); // => toTool::slotWindowActivated + } else { + // w == NULL => this was called from insertTab + // new tab was added but so far it has NO widget + // and also has no UserData + // NOTE: this applies to 0th tab only + //Q_ASSERT_X(false, (__HERE__).c_str(), "No tool widget for index"); + m_lastWidget = NULL; + } + + m_label->setText(QString("%1").arg(idx)); } -void toWorkSpace::slotCurrentIndexChanged(int i) +void toWorkSpace::slotTabMoved(int from, int to) { - int index = m_tabBar->tabData(i).toInt(); - m_stackedWidget->setCurrentIndex(index); - toToolWidget *tool = dynamic_cast<toToolWidget*>(m_stackedWidget->widget(index)); - if(tool) - emit activeToolChaged(tool); + m_label->setText(QString("%1 %2").arg(from).arg(to)); } -void toWorkSpace::slotTabCloseRequested(int i) +void toWorkSpace::slotTabCloseRequested(int idx) { - int index = m_tabBar->tabData(i).toInt(); - toToolWidget *tool = dynamic_cast<toToolWidget*>(m_stackedWidget->widget(index)); + toToolWidget *w = static_cast<toToolWidget*>(m_tabBar->tabData(idx).value<void*>()); - if(tool->close()) + if(!w) { - m_stackedWidget->removeWidget(tool); - m_tabBar->removeTab(i); - delete tool; + throw QString("Trying to close non-existing tab %1").arg(idx); } + + m_tabBar->setCurrentIndex(idx); // show tab before showing Save dialog + if(w->close()) + { + m_stackedWidget->removeWidget(w); + m_tabBar->removeTab(idx); + delete w; + m_label->setText(QString("*%1").arg(idx)); + m_lastWidget = NULL; + } } Modified: branches/tora3/src/core/toworkspace.h =================================================================== --- branches/tora3/src/core/toworkspace.h 2012-10-03 14:47:09 UTC (rev 4490) +++ branches/tora3/src/core/toworkspace.h 2012-10-04 11:27:29 UTC (rev 4491) @@ -43,28 +43,43 @@ #define TOWORKSPACE_H #include <QWidget> +#include <QMap> class toToolWidget; class QTabBar; +class QLabel; class QStackedWidget; class toWorkSpace : public QWidget { Q_OBJECT; + + struct ToolIndex { + int TabBarIndex; + int WidgetIndex; + }; + typedef QMap<toToolWidget*, ToolIndex> ToolsRegistry; + public: toWorkSpace(QWidget * parent); void addToolWidget(toToolWidget*); + void setToolCaption(toToolWidget *, QString const&); + signals: void activeToolChaged(toToolWidget*); private slots: void slotCurrentIndexChanged(int); + void slotTabMoved(int from, int to); void slotTabCloseRequested(int); private: QTabBar *m_tabBar; + QLabel *m_label; // TODO DEBUG ONLY QStackedWidget *m_stackedWidget; + ToolsRegistry m_toolsRegistry; + toToolWidget *m_lastWidget; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-10-11 18:14:04
|
Revision: 4507 http://tora.svn.sourceforge.net/tora/?rev=4507&view=rev Author: ibre5041 Date: 2012-10-11 18:13:57 +0000 (Thu, 11 Oct 2012) Log Message: ----------- toBrowser -> Table -> Data -> refresh Modified Paths: -------------- branches/tora3/src/core/toresult.cpp branches/tora3/src/core/toresulttableviewedit.cpp Modified: branches/tora3/src/core/toresult.cpp =================================================================== --- branches/tora3/src/core/toresult.cpp 2012-10-11 13:28:52 UTC (rev 4506) +++ branches/tora3/src/core/toresult.cpp 2012-10-11 18:13:57 UTC (rev 4507) @@ -240,7 +240,6 @@ bool toResult::setSqlAndParams(const QString &sql, toQueryParams const& par) { - return true; bool force = NeedsRefresh; NeedsRefresh = false; Modified: branches/tora3/src/core/toresulttableviewedit.cpp =================================================================== --- branches/tora3/src/core/toresulttableviewedit.cpp 2012-10-11 13:28:52 UTC (rev 4506) +++ branches/tora3/src/core/toresulttableviewedit.cpp 2012-10-11 18:13:57 UTC (rev 4507) @@ -81,6 +81,8 @@ { revertChanges(); + setSqlAndParams(SQL, params); + if (params.size() == 2) { toQueryParams::const_iterator par = params.begin(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-10-22 11:45:16
|
Revision: 4516 http://tora.svn.sourceforge.net/tora/?rev=4516&view=rev Author: ibre5041 Date: 2012-10-22 11:45:05 +0000 (Mon, 22 Oct 2012) Log Message: ----------- do not call setSqlAndParams twice in a row Modified Paths: -------------- branches/tora3/src/core/toresultcombo.h branches/tora3/src/core/toresultschema.cpp Modified: branches/tora3/src/core/toresultcombo.h =================================================================== --- branches/tora3/src/core/toresultcombo.h 2012-10-22 09:43:13 UTC (rev 4515) +++ branches/tora3/src/core/toresultcombo.h 2012-10-22 11:45:05 UTC (rev 4516) @@ -44,7 +44,6 @@ #include "core/toresult.h" -#include "core/tocache.h" #include <QComboBox> #include <QStringList> @@ -60,7 +59,7 @@ class toResultCombo : public QComboBox, public toResult { private: - Q_OBJECT + Q_OBJECT; public: enum selectionPolicy Modified: branches/tora3/src/core/toresultschema.cpp =================================================================== --- branches/tora3/src/core/toresultschema.cpp 2012-10-22 09:43:13 UTC (rev 4515) +++ branches/tora3/src/core/toresultschema.cpp 2012-10-22 11:45:05 UTC (rev 4516) @@ -90,8 +90,9 @@ void toResultSchema::query(const QString &sql, toQueryParams const& param) { - if (!setSqlAndParams(sql, param)) - return ; + // do not call setSqlAndParams twice in a row. (also called from toResultCombo::query) + //if (!setSqlAndParams(sql, param)) + // return ; if(connection().getCache().userListExists(toCache::USERS)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-10-24 11:25:39
|
Revision: 4519 http://tora.svn.sourceforge.net/tora/?rev=4519&view=rev Author: ibre5041 Date: 2012-10-24 11:25:28 +0000 (Wed, 24 Oct 2012) Log Message: ----------- One more runtimme check. Tora still can segfault when closing the mail windows and there is still some BG thread running Modified Paths: -------------- branches/tora3/src/core/toconnection.cpp branches/tora3/src/core/toconnection.h Modified: branches/tora3/src/core/toconnection.cpp =================================================================== --- branches/tora3/src/core/toconnection.cpp 2012-10-22 22:05:58 UTC (rev 4518) +++ branches/tora3/src/core/toconnection.cpp 2012-10-24 11:25:28 UTC (rev 4519) @@ -69,6 +69,7 @@ , pTrait(NULL) , NeedCommit(false) , Abort(false) + , LoanCnt(0) { pConnectionImpl = toConnectionProviderRegistrySing::Instance().get(provider).createConnectionImpl(*this); pTrait = toConnectionProviderRegistrySing::Instance().get(provider).createConnectionTrait(); @@ -103,6 +104,7 @@ , pTrait(other.pTrait) , NeedCommit(other.NeedCommit) , Abort(other.Abort) + , LoanCnt(0) { //tool Connection = toConnectionProvider::connection(Provider, this); //ConnectionPool = new toConnectionPool(this); @@ -173,6 +175,8 @@ Utils::toBusy busy; Abort = true; + Q_ASSERT_X( (int)LoanCnt == 0 , (__HERE__).c_str(), "toConnection deleted while BG query is running"); + unsigned cacheNewRefCnt; { QWriteLocker clock(&getCache().cacheLock); @@ -411,10 +415,12 @@ { toConnectionSub* retval = *(Connections.begin()); Connections.erase(Connections.begin()); + LoanCnt.fetchAndAddAcquire(1); return retval; } else { + LoanCnt.fetchAndAddAcquire(1); return addConnection(); } } @@ -423,6 +429,7 @@ { QMutexLocker clock(&ConnectionLock); Q_ASSERT_X( !Connections.contains(conn) , (__HERE__).c_str(), "Invalid use of toConnectionSubLoan"); + LoanCnt.deref(); Connections.insert(conn); } Modified: branches/tora3/src/core/toconnection.h =================================================================== --- branches/tora3/src/core/toconnection.h 2012-10-22 22:05:58 UTC (rev 4518) +++ branches/tora3/src/core/toconnection.h 2012-10-24 11:25:28 UTC (rev 4519) @@ -52,6 +52,7 @@ #include <QSet> #include <QMetaType> #include <QDateTime> +#include <QAtomicInt> class toConnectionSub; class toConnectionTraits; @@ -373,6 +374,7 @@ connectionImpl *pConnectionImpl; toConnectionTraits *pTrait; toCache *pCache; + QAtomicInt LoanCnt; friend class toResultModel; bool NeedCommit; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-11-08 11:40:56
|
Revision: 4538 http://tora.svn.sourceforge.net/tora/?rev=4538&view=rev Author: ibre5041 Date: 2012-11-08 11:40:43 +0000 (Thu, 08 Nov 2012) Log Message: ----------- perf. improvement toEventQuery, notify the bg thread instantly. Modified Paths: -------------- branches/tora3/src/core/toeventquery.cpp branches/tora3/src/core/toeventquery.h branches/tora3/src/core/toeventqueryworker.h Modified: branches/tora3/src/core/toeventquery.cpp =================================================================== --- branches/tora3/src/core/toeventquery.cpp 2012-11-07 15:03:02 UTC (rev 4537) +++ branches/tora3/src/core/toeventquery.cpp 2012-11-08 11:40:43 UTC (rev 4538) @@ -98,8 +98,8 @@ connect(Worker, SIGNAL(headers(toQColumnDescriptionList &, int)), // BG -> main this, SLOT(slotDesc(toQColumnDescriptionList &, int))); - connect(Worker, SIGNAL(data(ValuesList &)), // BG -> main - this, SLOT(slotData(ValuesList &))); + connect(Worker, SIGNAL(data(const ValuesList &)), // BG -> main + this, SLOT(slotData(const ValuesList &))); connect(Worker, SIGNAL(error(const toConnection::exception &)), // BG -> main this, SLOT(slotError(const toConnection::exception &))); @@ -225,13 +225,16 @@ emit dataRequested(); // request 1st chunk of rows } -void toEventQuery::slotData(ValuesList &values) +// warning: values is a reference only bg thread's stack +void toEventQuery::slotData(const ValuesList &values) { //TLOG(7, toDecorator, __HERE__) << "toEventQuery slot data" << std::endl; - Values += values; - emit dataAvailable(this); + Values << values; + if(Mode == READ_ALL) emit consumed(); + + emit dataAvailable(this); try { @@ -245,12 +248,13 @@ } } -void toEventQuery::slotDesc(toQColumnDescriptionList &desc, int column) +void toEventQuery::slotDesc(toQColumnDescriptionList &desc, int columns) { TLOG(7, toDecorator, __HERE__) << "toEventQuery slot desc" << std::endl; Started = true; Description = desc; - ColumnCount = column; + Q_ASSERT_X(columns > 0 , qPrintable(__QHERE__), " invalid number of columns for a result"); + ColumnCount = columns; emit descriptionAvailable(this); emit descriptionAvailable(this, Description); } Modified: branches/tora3/src/core/toeventquery.h =================================================================== --- branches/tora3/src/core/toeventquery.h 2012-11-07 15:03:02 UTC (rev 4537) +++ branches/tora3/src/core/toeventquery.h 2012-11-08 11:40:43 UTC (rev 4538) @@ -225,7 +225,7 @@ void slotStarted(); // handle worker's data() signal. emits dataAvailable() - void slotData(ValuesList &values); + void slotData(const ValuesList &values); // handle worker's headers() signal emits descriptionAvailable() void slotDesc(toQColumnDescriptionList &desc, int columns); Modified: branches/tora3/src/core/toeventqueryworker.h =================================================================== --- branches/tora3/src/core/toeventqueryworker.h 2012-11-07 15:03:02 UTC (rev 4537) +++ branches/tora3/src/core/toeventqueryworker.h 2012-11-08 11:40:43 UTC (rev 4538) @@ -134,7 +134,7 @@ /** * Data read from query */ - void data(ValuesList &values); + void data(const ValuesList &values); /** * Emitted when sql query is done This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ibr...@us...> - 2012-11-29 08:11:25
|
Revision: 4554 http://tora.svn.sourceforge.net/tora/?rev=4554&view=rev Author: ibre5041 Date: 2012-11-29 08:11:17 +0000 (Thu, 29 Nov 2012) Log Message: ----------- MSVC fixes - function must return a value Modified Paths: -------------- branches/tora3/src/core/toresulttableview.h branches/tora3/src/core/toresultview.h Modified: branches/tora3/src/core/toresulttableview.h =================================================================== --- branches/tora3/src/core/toresulttableview.h 2012-11-27 14:39:12 UTC (rev 4553) +++ branches/tora3/src/core/toresulttableview.h 2012-11-29 08:11:17 UTC (rev 4554) @@ -369,7 +369,7 @@ virtual void editCut() {} virtual void editPaste() {} virtual void editReadAll() {} - virtual bool searchNext() {}; + virtual bool searchNext() { return false; }; virtual void searchReplace() {}; virtual QString editText() { return ""; } Modified: branches/tora3/src/core/toresultview.h =================================================================== --- branches/tora3/src/core/toresultview.h 2012-11-27 14:39:12 UTC (rev 4553) +++ branches/tora3/src/core/toresultview.h 2012-11-29 08:11:17 UTC (rev 4554) @@ -681,7 +681,7 @@ /** Search for next entry * @return True if found, should select the found text. */ - virtual bool searchNext() {}; + virtual bool searchNext() { return false; }; virtual void searchReplace() {}; #ifdef TORA3_GRAPH This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |