diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 7c81200735..4aae4c72e8 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,24 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-03-27 11:45 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * ChangeLog + * One TOFIX marked as DONE. + + * contrib/hbmysql/tmysql.prg + % Optimizations (using SWITCH) + + * contrib/hbqt/qth/QFont.qth + * contrib/hbqt/qth/QPen.qth + * contrib/hbqt/hbqt_qfont.cpp + ! Fixed HB_IS*() macro usage. + + * contrib/hbqt/tests/hbqt.hbp + + Added C++ and runtime MinGW lib. + ; TOFIX: I still get: + harbour/lib/win/mingw/libhbvm.a(fm.o):fm.c:(.text+0x39b): undefined reference to `__mingw_vfprintf' + + gui=yes + 2009-03-27 02:03 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * harbour/contrib/hbqt/hbqt.h * harbour/contrib/hbqt/hbqt_qfont.cpp @@ -25,10 +43,10 @@ + harbour/contrib/hbqt/qth/QFont.qth + harbour/contrib/hbqt/qth/QPen.qth + harbour/contrib/hbqt/qth/QWidget.qth - + Added .qth contining prototypes and user code to be embedded + + Added .qth contining prototypes and user code to be embedded into the resulting .cpp source file. - /* + /* COMPILE : hbmk2 hbqtgen USAGE : hbqtgen -I -O <...> hbqtgen -help @@ -36,8 +54,8 @@ NEXT : hbqtgen @QtProjectFile.qtp - OVERVIEW : .qth - + OVERVIEW : .qth + enum Capitalization { MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize } enum SpacingType { PercentageSpacing, AbsoluteSpacing } @@ -132,30 +150,30 @@ qreal wordSpacing () const - - Comments : # // - Enumerators: enum definitions must be included what exists in the - help documenttaion. It has special significan while + Comments : # // + + Enumerators: enum definitions must be included what exists in the + help documenttaion. It has special significan while parsing the prototypes. - - UserCode : Anything contained in construct will be + + UserCode : Anything contained in construct will be written directly in the .cpp as is. Developer is responsible to insert syntatically correct code. usually constructor function goes here. And may be complex functions be put under it. Also if some special #include command is needed. - Prototype : Not all prototypes are included in the source .cpp at the - moment. I need more help on this front how we detect and + Prototype : Not all prototypes are included in the source .cpp at the + moment. I need more help on this front how we detect and format the parameters. I am struck specially at something like . Przemek? Bottom line: Copy and Paste all prototypes from the docs, generate the .cpp, compile it, check which function raises error, comment it out in .qth with either "//" or "#", - regenerate .cpp until all errors are covered, copy .cpp + regenerate .cpp until all errors are covered, copy .cpp into production folder. - + */ 2009-03-27 10:16 UTC+0100 Viktor Szakats (harbour.01 syenar hu) @@ -217,7 +235,7 @@ * contrib/hbole/tests/sample.odt + Updated to latest hbole code. ; TOFIX: hbole code doesn't compile with MSVC in default C++ - even if #define CINTERFACE 1 is enabled. + even if #define CINTERFACE 1 is enabled. [DONE] ; TOFIX: OpenOffice example fails at some point. It probably needs array support. diff --git a/harbour/contrib/hbmysql/tmysql.prg b/harbour/contrib/hbmysql/tmysql.prg index 144201b611..7fd29a2642 100644 --- a/harbour/contrib/hbmysql/tmysql.prg +++ b/harbour/contrib/hbmysql/tmysql.prg @@ -202,46 +202,37 @@ METHOD FieldDec( nNum, lFormat ) CLASS TMySQLRow METHOD FieldType( nNum ) CLASS TMySQLRow - LOCAL cType := "U" + IF nNum >= 1 .AND. nNum <= Len( ::aFieldStruct ) - IF nNum >=1 .AND. nNum <= Len( ::aFieldStruct ) + SWITCH ::aFieldStruct[nNum][MYSQL_FS_TYPE] + CASE MYSQL_TINY_TYPE + RETURN "L" - DO CASE - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_TINY_TYPE - cType := "L" + CASE MYSQL_SHORT_TYPE + CASE MYSQL_LONG_TYPE + CASE MYSQL_LONGLONG_TYPE + CASE MYSQL_FLOAT_TYPE + CASE MYSQL_DOUBLE_TYPE + CASE MYSQL_DECIMAL_TYPE + CASE MYSQL_INT24_TYPE + RETURN "N" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_SHORT_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_LONG_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_LONGLONG_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_FLOAT_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DOUBLE_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DECIMAL_TYPE - cType := "N" + CASE MYSQL_VAR_STRING_TYPE + CASE MYSQL_STRING_TYPE + CASE MYSQL_DATETIME_TYPE + RETURN "C" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DATE_TYPE - cType := "D" + CASE MYSQL_DATE_TYPE + RETURN "D" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_BLOB_TYPE - cType := "M" + CASE MYSQL_BLOB_TYPE + CASE MYSQL_MEDIUM_BLOB_TYPE + RETURN "M" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_VAR_STRING_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_STRING_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DATETIME_TYPE - cType := "C" - - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_INT24_TYPE - cType := "N" - - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_MEDIUM_BLOB_TYPE - cType := "M" - - OTHERWISE - cType := "U" - - ENDCASE + ENDSWITCH ENDIF - RETURN cType + RETURN "U" // returns a WHERE x=y statement which uses primary key (if available) @@ -279,28 +270,28 @@ METHOD MakePrimaryKeyWhere() CLASS TMySQLRow // Every single query submitted to MySQL server CREATE CLASS TMySQLQuery - DATA nSocket // connection handle to MySQL server - DATA nResultHandle // result handle received from MySQL + VAR nSocket // connection handle to MySQL server + VAR nResultHandle // result handle received from MySQL - DATA cQuery // copy of query that generated this object + VAR cQuery // copy of query that generated this object - DATA nNumRows // number of rows available on answer NOTE MySQL is 0 based - DATA nCurRow // I'm currently over row number + VAR nNumRows // number of rows available on answer NOTE MySQL is 0 based + VAR nCurRow // I'm currently over row number //DAVID: - DATA lBof - DATA lEof + VAR lBof + VAR lEof //DAVID: - DATA lFieldAsData //Use fields as object DATA. For compatibility + VAR lFieldAsData //Use fields as object DATA. For compatibility //Names of fields can match name of TMySQLQuery/Table DATAs, //and it is dangerous. ::lFieldAsData:=.F. can fix it - DATA aRow //Values of fields of current row + VAR aRow //Values of fields of current row - DATA nNumFields // how many fields per row - DATA aFieldStruct // type of each field, a copy is here a copy inside each row + VAR nNumFields // how many fields per row + VAR aFieldStruct // type of each field, a copy is here a copy inside each row - DATA lError // .T. if last operation failed + VAR lError // .T. if last operation failed METHOD New( nSocket, cQuery ) // New query object METHOD Destroy() @@ -537,57 +528,65 @@ METHOD GetRow( nRow ) CLASS TMySQLQuery // Convert answer from text field to correct clipper types FOR i := 1 TO ::nNumFields - DO CASE - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_TINY_TYPE + + SWITCH ::aFieldStruct[i][MYSQL_FS_TYPE] + CASE MYSQL_TINY_TYPE //DAVID: IF ::aRow[i] == NIL ::aRow[i] := "0" ENDIF ::aRow[i] := Val( ::aRow[i] ) != 0 + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_SHORT_TYPE .OR.; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_LONG_TYPE .OR.; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_LONGLONG_TYPE .OR.; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_INT24_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DECIMAL_TYPE + CASE MYSQL_SHORT_TYPE + CASE MYSQL_LONG_TYPE + CASE MYSQL_LONGLONG_TYPE + CASE MYSQL_INT24_TYPE + CASE MYSQL_DECIMAL_TYPE //DAVID: IF ::aRow[i] == NIL ::aRow[i] := "0" ENDIF ::aRow[i] := Val( ::aRow[i] ) + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DOUBLE_TYPE .OR.; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_FLOAT_TYPE + CASE MYSQL_DOUBLE_TYPE + CASE MYSQL_FLOAT_TYPE //DAVID: IF ::aRow[i] == NIL ::aRow[i] := "0" ENDIF ::aRow[i] := Val( ::aRow[i] ) + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DATE_TYPE + CASE MYSQL_DATE_TYPE IF Empty( ::aRow[i] ) ::aRow[i] := hb_SToD( "" ) ELSE // Date format YYYY-MM-DD ::aRow[i] := hb_SToD( Left( ::aRow[i], 4 ) + SubStr( ::aRow[i], 6, 2 ) + Right( ::aRow[i], 2 ) ) ENDIF + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_BLOB_TYPE + CASE MYSQL_BLOB_TYPE // Memo field + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_STRING_TYPE .OR.; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_VAR_STRING_TYPE + CASE MYSQL_STRING_TYPE + CASE MYSQL_VAR_STRING_TYPE // char field + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DATETIME_TYPE + CASE MYSQL_DATETIME_TYPE // DateTime field + EXIT OTHERWISE //DAVID: Alert( "Unknown type from SQL Server Field: " + hb_NToS( i ) + " is type " + hb_NToS( ::aFieldStruct[i][MYSQL_FS_TYPE] ) ) // QOUT( "Unknown type from SQL Server Field: " + hb_NToS( i ) + " is type " + hb_NToS( ::aFieldStruct[i][MYSQL_FS_TYPE] ) ) - ENDCASE + ENDSWITCH //DAVID: IF ::lFieldAsData @@ -717,45 +716,37 @@ METHOD FieldDec( nNum, lFormat ) CLASS TMySQLQuery METHOD FieldType( nNum ) CLASS TMySQLQuery - LOCAL cType := "U" - IF nNum >= 1 .AND. nNum <= Len( ::aFieldStruct ) - DO CASE - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_TINY_TYPE - cType := "L" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_SHORT_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_LONG_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_LONGLONG_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_FLOAT_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DOUBLE_TYPE.OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DECIMAL_TYPE - cType := "N" + SWITCH ::aFieldStruct[nNum][MYSQL_FS_TYPE] + CASE MYSQL_TINY_TYPE + RETURN "L" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DATE_TYPE - cType := "D" + CASE MYSQL_SHORT_TYPE + CASE MYSQL_LONG_TYPE + CASE MYSQL_LONGLONG_TYPE + CASE MYSQL_FLOAT_TYPE + CASE MYSQL_DOUBLE_TYPE + CASE MYSQL_DECIMAL_TYPE + CASE MYSQL_INT24_TYPE + RETURN "N" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_BLOB_TYPE - cType := "M" + CASE MYSQL_VAR_STRING_TYPE + CASE MYSQL_STRING_TYPE + CASE MYSQL_DATETIME_TYPE + RETURN "C" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_VAR_STRING_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_STRING_TYPE .OR.; - ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_DATETIME_TYPE - cType := "C" + CASE MYSQL_DATE_TYPE + RETURN "D" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_INT24_TYPE - cType := "N" + CASE MYSQL_BLOB_TYPE + CASE MYSQL_MEDIUM_BLOB_TYPE + RETURN "M" - CASE ::aFieldStruct[nNum][MYSQL_FS_TYPE] == MYSQL_MEDIUM_BLOB_TYPE - cType := "M" - - OTHERWISE - cType := "U" - - ENDCASE + ENDSWITCH ENDIF - RETURN cType + RETURN "U" /* ----------------------------------------------------------------------------------------*/ @@ -765,8 +756,8 @@ METHOD FieldType( nNum ) CLASS TMySQLQuery // SELECT * FROM ... was issued CREATE CLASS TMySQLTable FROM TMySQLQuery - DATA cTable // name of table - DATA aOldValue // keeps a copy of old value + VAR cTable // name of table + VAR aOldValue // keeps a copy of old value METHOD New( nSocket, cQuery, cTableName ) METHOD GetRow( nRow ) @@ -857,8 +848,7 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable ::lError := .F. - DO CASE - CASE oRow == NIL // default Current row + IF oRow == NIL // default Current row FOR i := 1 TO ::nNumFields @@ -912,7 +902,7 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable ::lError := .T. ENDIF - CASE oRow != NIL + ELSE IF oRow:cTable == ::cTable @@ -965,7 +955,7 @@ METHOD Update( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable ::lError := .T. ENDIF ENDIF - ENDCASE + ENDIF RETURN !::lError @@ -982,8 +972,7 @@ METHOD Delete( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable DEFAULT lRefresh TO .T. // is this a row of this table ? - DO CASE - CASE orow == NIL + IF oRow == NIL //DAVID: IF lOldRecord @@ -1023,7 +1012,8 @@ METHOD Delete( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable ::lError := .T. ENDIF - CASE oRow != NIL + ELSE + IF oRow:cTable == ::cTable //DAVID: @@ -1058,7 +1048,7 @@ METHOD Delete( oRow, lOldRecord, lRefresh ) CLASS TMySQLTable ::lError := .T. ENDIF ENDIF - ENDCASE + ENDIF RETURN !::lError @@ -1073,8 +1063,7 @@ METHOD Append( oRow, lRefresh ) CLASS TMySQLTable //DAVID: too many ::refresh() can slow some processes, so we can desactivate it by parameter DEFAULT lRefresh TO .T. - DO CASE - CASE oRow == NIL // default Current row + IF oRow == NIL // default Current row // field names FOR i := 1 TO ::nNumFields @@ -1117,7 +1106,7 @@ METHOD Append( oRow, lRefresh ) CLASS TMySQLTable ::lError := .T. ENDIF - CASE oRow != NIL + ELSE IF oRow:cTable == ::cTable @@ -1166,7 +1155,7 @@ METHOD Append( oRow, lRefresh ) CLASS TMySQLTable ENDIF ENDIF - ENDCASE + ENDIF RETURN .F. @@ -1183,34 +1172,39 @@ METHOD GetBlankRow( lSetValues ) CLASS TMySQLTable // crate an array of empty fields FOR i := 1 TO ::nNumFields - DO CASE - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_STRING_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_VAR_STRING_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_BLOB_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DATETIME_TYPE + SWITCH ::aFieldStruct[i][MYSQL_FS_TYPE] + CASE MYSQL_STRING_TYPE + CASE MYSQL_VAR_STRING_TYPE + CASE MYSQL_BLOB_TYPE + CASE MYSQL_DATETIME_TYPE aRow[i] := "" + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_SHORT_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_LONG_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_LONGLONG_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_INT24_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DECIMAL_TYPE + CASE MYSQL_SHORT_TYPE + CASE MYSQL_LONG_TYPE + CASE MYSQL_LONGLONG_TYPE + CASE MYSQL_INT24_TYPE + CASE MYSQL_DECIMAL_TYPE aRow[i] := 0 + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_TINY_TYPE + CASE MYSQL_TINY_TYPE aRow[i] := .F. + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DOUBLE_TYPE .OR. ; - ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_FLOAT_TYPE + CASE MYSQL_DOUBLE_TYPE + CASE MYSQL_FLOAT_TYPE aRow[i] := 0.0 + EXIT - CASE ::aFieldStruct[i][MYSQL_FS_TYPE] == MYSQL_DATE_TYPE + CASE MYSQL_DATE_TYPE aRow[i] := hb_SToD( "" ) + EXIT OTHERWISE aRow[i] := NIL - ENDCASE + ENDSWITCH NEXT //DAVID: @@ -1328,13 +1322,13 @@ METHOD MakePrimaryKeyWhere() CLASS TMySQLTable // Every available MySQL server CREATE CLASS TMySQLServer - DATA nSocket // connection handle to server (currently pointer to a MYSQL structure) - DATA cServer // server name - DATA cDBName // Selected DB - DATA cUser // user accessing db - DATA cPassword // his/her password - DATA lError // .T. if occurred an error - DATA cCreateQuery + VAR nSocket // connection handle to server (currently pointer to a MYSQL structure) + VAR cServer // server name + VAR cDBName // Selected DB + VAR cUser // user accessing db + VAR cPassword // his/her password + VAR lError // .T. if occurred an error + VAR cCreateQuery METHOD New( cServer, cUser, cPassword ) // Opens connection to a server, returns a server object METHOD Destroy() // Closes connection to server @@ -1445,14 +1439,17 @@ METHOD CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto ) CLASS TMyS ::cCreateQuery := "CREATE TABLE " + Lower( cTable ) + " (" FOR i := 1 TO Len( aStruct ) - DO CASE - CASE aStruct[i][DBS_TYPE] == "C" + + SWITCH aStruct[i][DBS_TYPE] + CASE "C" ::cCreateQuery += aStruct[i][DBS_NAME] + " char(" + hb_NToS( aStruct[i][DBS_LEN]) + ")" + Eval( cNN, aStruct[i] ) + iif( aStruct[i][DBS_NAME] == cPrimaryKey, " NOT NULL ", "" ) + "," + EXIT - CASE aStruct[i][DBS_TYPE] == "M" + CASE "M" ::cCreateQuery += aStruct[i][DBS_NAME] + " text" + Eval( cNN, aStruct[i] ) + "," + EXIT - CASE aStruct[i][DBS_TYPE] == "N" + CASE "N" /* IF aStruct[i][DBS_DEC] == 0 ::cCreateQuery += aStruct[i][DBS_NAME] + " int(" + hb_NToS( aStruct[i][DBS_LEN] ) + ")" + Eval( cNN, aStruct[i] ) + iif( aStruct[i][DBS_NAME] == cPrimaryKey, " NOT NULL ", "" ) + iif( aStruct[i][DBS_NAME] == cAuto, " auto_increment ", "" ) + "," @@ -1475,22 +1472,28 @@ METHOD CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto ) CLASS TMyS ELSE ::cCreateQuery += aStruct[i][DBS_NAME] + " real(" + hb_NToS( aStruct[i][DBS_LEN] ) + "," + hb_NToS( aStruct[i][DBS_DEC]) + ")" + Eval( cNN, aStruct[i] ) + "," ENDIF - CASE aStruct[i][DBS_TYPE] == "D" + EXIT + + CASE "D" ::cCreateQuery += aStruct[i][DBS_NAME] + " date " + Eval( cNN, aStruct[i] ) + "," + EXIT - CASE aStruct[i][DBS_TYPE] == "L" + CASE "L" ::cCreateQuery += aStruct[i][DBS_NAME] + " tinyint " + Eval( cNN, aStruct[i] ) + "," + EXIT - CASE aStruct[i][DBS_TYPE] == "B" + CASE "B" ::cCreateQuery += aStruct[i][DBS_NAME] + " mediumblob " + Eval( cNN, aStruct[i] ) + "," + EXIT - CASE aStruct[i][DBS_TYPE] == "I" + CASE "I" ::cCreateQuery += aStruct[i][DBS_NAME] + " mediumint " + Eval( cNN, aStruct[i] ) + "," + EXIT OTHERWISE ::cCreateQuery += aStruct[i][DBS_NAME] + " char(" + hb_NToS( aStruct[i][DBS_LEN] ) + ")" + Eval( cNN, aStruct[i] ) + "," - ENDCASE + ENDSWITCH NEXT IF cPrimarykey != NIL @@ -1642,38 +1645,45 @@ METHOD TableStruct( cTable ) CLASS TMySQLServer aSField[DBS_NAME] := Left( aField[MSQL_FS_NAME], 10 ) aSField[DBS_DEC] := 0 - DO CASE - CASE aField[MSQL_FS_TYPE] == MSQL_INT_TYPE + SWITCH aField[MSQL_FS_TYPE] + CASE MSQL_INT_TYPE aSField[DBS_TYPE] := "N" aSField[DBS_LEN] := 11 + EXIT - CASE aField[MSQL_FS_TYPE] == MSQL_UINT_TYPE + CASE MSQL_UINT_TYPE aSField[DBS_TYPE] := "L" aSField[DBS_LEN] := 1 + EXIT - CASE aField[MSQL_FS_TYPE] == MSQL_CHAR_TYPE + CASE MSQL_CHAR_TYPE aSField[DBS_TYPE] := "C" aSField[DBS_LEN] := aField[MSQL_FS_LENGTH] + EXIT - CASE aField[MSQL_FS_TYPE] == MSQL_DATE_TYPE + CASE MSQL_DATE_TYPE aSField[DBS_TYPE] := "D" aSField[DBS_LEN] := aField[MSQL_FS_LENGTH] + EXIT - CASE aField[MSQL_FS_TYPE] == MSQL_REAL_TYPE + CASE MSQL_REAL_TYPE aSField[DBS_TYPE] := "N" aSField[DBS_LEN] := 12 aSFIeld[DBS_DEC] := 8 + EXIT - CASE aField[MSQL_FS_TYPE] == MYSQL_MEDIUM_BLOB_TYPE + CASE MYSQL_MEDIUM_BLOB_TYPE aSField[DBS_TYPE] := "B" aSField[DBS_LEN] := aField[MSQL_FS_LENGTH] + EXIT - CASE aField[MSQL_FS_TYPE] == FIELD_TYPE_INT24 + CASE FIELD_TYPE_INT24 aSField[DBS_TYPE] := "I" aSField[DBS_LEN] := aField[MSQL_FS_LENGTH] aSFIeld[DBS_DEC] := aField[MYSQL_FS_DECIMALS] + EXIT - ENDCASE + ENDSWITCH AAdd( aStruct, aSField ) ENDIF @@ -1691,19 +1701,22 @@ STATIC FUNCTION ClipValue2SQL( Value ) LOCAL cValue - DO CASE - CASE ISNUMBER( Value ) + SWITCH ValType( Value ) + CASE "N" cValue := hb_NToS( Value ) + EXIT - CASE ISDATE( Value ) + CASE "D" IF ! Empty( Value ) /* MySQL dates are like YYYY-MM-DD */ cValue := "'" + StrZero( Year( Value ), 4 ) + "-" + StrZero( Month( Value ), 2 ) + "-" + StrZero( Day( Value ), 2 ) + "'" ELSE cValue := "''" ENDIF + EXIT - CASE Valtype( Value ) $ "CM" + CASE "C" + CASE "M" IF Empty( Value ) cValue := "''" ELSE @@ -1711,13 +1724,15 @@ STATIC FUNCTION ClipValue2SQL( Value ) Value := mysql_escape_string( value ) cValue += value + "'" ENDIF + EXIT - CASE ISLOGICAL( Value ) + CASE "L" cValue := iif( Value, "1", "0" ) + EXIT OTHERWISE cValue := "''" // NOTE: Here we lose values we cannot convert - ENDCASE + ENDSWITCH RETURN cValue diff --git a/harbour/contrib/hbqt/hbqt_qfont.cpp b/harbour/contrib/hbqt/hbqt_qfont.cpp index e2f415935f..867d86073d 100644 --- a/harbour/contrib/hbqt/hbqt_qfont.cpp +++ b/harbour/contrib/hbqt/hbqt_qfont.cpp @@ -92,7 +92,7 @@ bool bold () const */ HB_FUNC( QT_QFONT_BOLD ) { - hb_retl( hbqt_par_QFont( 1 )->bold( ) ); + hb_retl( hbqt_par_QFont( 1 )->bold() ); } /* @@ -100,7 +100,7 @@ Capitalization capitalization () const */ HB_FUNC( QT_QFONT_CAPITALIZATION ) { - hb_retni( hbqt_par_QFont( 1 )->capitalization( ) ); + hb_retni( hbqt_par_QFont( 1 )->capitalization() ); } /* @@ -116,7 +116,7 @@ bool exactMatch () const */ HB_FUNC( QT_QFONT_EXACTMATCH ) { - hb_retl( hbqt_par_QFont( 1 )->exactMatch( ) ); + hb_retl( hbqt_par_QFont( 1 )->exactMatch() ); } /* @@ -132,7 +132,7 @@ bool fixedPitch () const */ HB_FUNC( QT_QFONT_FIXEDPITCH ) { - hb_retl( hbqt_par_QFont( 1 )->fixedPitch( ) ); + hb_retl( hbqt_par_QFont( 1 )->fixedPitch() ); } /* @@ -162,7 +162,7 @@ bool italic () const */ HB_FUNC( QT_QFONT_ITALIC ) { - hb_retl( hbqt_par_QFont( 1 )->italic( ) ); + hb_retl( hbqt_par_QFont( 1 )->italic() ); } /* @@ -170,7 +170,7 @@ bool kerning () const */ HB_FUNC( QT_QFONT_KERNING ) { - hb_retl( hbqt_par_QFont( 1 )->kerning( ) ); + hb_retl( hbqt_par_QFont( 1 )->kerning() ); } /* @@ -202,7 +202,7 @@ qreal letterSpacing () const */ HB_FUNC( QT_QFONT_LETTERSPACING ) { - hb_retnd( hbqt_par_QFont( 1 )->letterSpacing( ) ); + hb_retnd( hbqt_par_QFont( 1 )->letterSpacing() ); } /* @@ -210,7 +210,7 @@ SpacingType letterSpacingType () const */ HB_FUNC( QT_QFONT_LETTERSPACINGTYPE ) { - hb_retni( hbqt_par_QFont( 1 )->letterSpacingType( ) ); + hb_retni( hbqt_par_QFont( 1 )->letterSpacingType() ); } /* @@ -218,7 +218,7 @@ bool overline () const */ HB_FUNC( QT_QFONT_OVERLINE ) { - hb_retl( hbqt_par_QFont( 1 )->overline( ) ); + hb_retl( hbqt_par_QFont( 1 )->overline() ); } /* @@ -226,7 +226,7 @@ int pixelSize () const */ HB_FUNC( QT_QFONT_PIXELSIZE ) { - hb_retni( hbqt_par_QFont( 1 )->pixelSize( ) ); + hb_retni( hbqt_par_QFont( 1 )->pixelSize() ); } /* @@ -234,7 +234,7 @@ int pointSize () const */ HB_FUNC( QT_QFONT_POINTSIZE ) { - hb_retni( hbqt_par_QFont( 1 )->pointSize( ) ); + hb_retni( hbqt_par_QFont( 1 )->pointSize() ); } /* @@ -242,7 +242,7 @@ qreal pointSizeF () const */ HB_FUNC( QT_QFONT_POINTSIZEF ) { - hb_retnd( hbqt_par_QFont( 1 )->pointSizeF( ) ); + hb_retnd( hbqt_par_QFont( 1 )->pointSizeF() ); } /* @@ -250,7 +250,7 @@ bool rawMode () const */ HB_FUNC( QT_QFONT_RAWMODE ) { - hb_retl( hbqt_par_QFont( 1 )->rawMode( ) ); + hb_retl( hbqt_par_QFont( 1 )->rawMode() ); } /* @@ -441,7 +441,7 @@ int stretch () const */ HB_FUNC( QT_QFONT_STRETCH ) { - hb_retni( hbqt_par_QFont( 1 )->stretch( ) ); + hb_retni( hbqt_par_QFont( 1 )->stretch() ); } /* @@ -449,7 +449,7 @@ bool strikeOut () const */ HB_FUNC( QT_QFONT_STRIKEOUT ) { - hb_retl( hbqt_par_QFont( 1 )->strikeOut( ) ); + hb_retl( hbqt_par_QFont( 1 )->strikeOut() ); } /* @@ -457,7 +457,7 @@ Style style () const */ HB_FUNC( QT_QFONT_STYLE ) { - hb_retni( hbqt_par_QFont( 1 )->style( ) ); + hb_retni( hbqt_par_QFont( 1 )->style() ); } /* @@ -465,7 +465,7 @@ StyleHint styleHint () const */ HB_FUNC( QT_QFONT_STYLEHINT ) { - hb_retni( hbqt_par_QFont( 1 )->styleHint( ) ); + hb_retni( hbqt_par_QFont( 1 )->styleHint() ); } /* @@ -473,7 +473,7 @@ StyleStrategy styleStrategy () const */ HB_FUNC( QT_QFONT_STYLESTRATEGY ) { - hb_retni( hbqt_par_QFont( 1 )->styleStrategy( ) ); + hb_retni( hbqt_par_QFont( 1 )->styleStrategy() ); } /* @@ -489,7 +489,7 @@ bool underline () const */ HB_FUNC( QT_QFONT_UNDERLINE ) { - hb_retl( hbqt_par_QFont( 1 )->underline( ) ); + hb_retl( hbqt_par_QFont( 1 )->underline() ); } /* @@ -497,7 +497,7 @@ int weight () const */ HB_FUNC( QT_QFONT_WEIGHT ) { - hb_retni( hbqt_par_QFont( 1 )->weight( ) ); + hb_retni( hbqt_par_QFont( 1 )->weight() ); } /* @@ -505,11 +505,8 @@ qreal wordSpacing () const */ HB_FUNC( QT_QFONT_WORDSPACING ) { - hb_retnd( hbqt_par_QFont( 1 )->wordSpacing( ) ); + hb_retnd( hbqt_par_QFont( 1 )->wordSpacing() ); } - - #endif /*----------------------------------------------------------------------*/ - diff --git a/harbour/contrib/hbqt/qth/QFont.qth b/harbour/contrib/hbqt/qth/QFont.qth index 50ae780bf6..1907e7d0b1 100644 --- a/harbour/contrib/hbqt/qth/QFont.qth +++ b/harbour/contrib/hbqt/qth/QFont.qth @@ -1,4 +1,4 @@ -# +# enum Capitalization { MixedCase, AllUppercase, AllLowercase, SmallCaps, Capitalize } enum SpacingType { PercentageSpacing, AbsoluteSpacing } @@ -26,9 +26,9 @@ HB_FUNC( QT_QFONT ) } else { - hb_retptr( ( QFont* ) new QFont( hbqt_par_QString( 1 ), - HB_IS_NUMERIC( 2 ) ? hb_parni( 2 ) : -1, - HB_IS_NUMERIC( 3 ) ? hb_parni( 3 ) : -1, + hb_retptr( ( QFont* ) new QFont( hbqt_par_QString( 1 ), + HB_ISNUM( 2 ) ? hb_parni( 2 ) : -1, + HB_ISNUM( 3 ) ? hb_parni( 3 ) : -1, hb_parl( 4 ) ) ); } } @@ -92,4 +92,3 @@ QString toString () const bool underline () const int weight () const qreal wordSpacing () const - diff --git a/harbour/contrib/hbqt/qth/QPen.qth b/harbour/contrib/hbqt/qth/QPen.qth index b41c0e701d..9882984bef 100644 --- a/harbour/contrib/hbqt/qth/QPen.qth +++ b/harbour/contrib/hbqt/qth/QPen.qth @@ -10,7 +10,7 @@ QPen ( const QPen & pen ) */ HB_FUNC( QT_QPEN ) { - if( hb_pcount() == 1 && HB_IS_NUMERIC( 1 ) ) + if( hb_pcount() == 1 && HB_ISNUM( 1 ) ) { hb_retptr( ( QPen* ) new QPen() ); } diff --git a/harbour/contrib/hbqt/tests/hbqt.hbp b/harbour/contrib/hbqt/tests/hbqt.hbp index 884d477c4b..1e24984fc2 100644 --- a/harbour/contrib/hbqt/tests/hbqt.hbp +++ b/harbour/contrib/hbqt/tests/hbqt.hbp @@ -2,5 +2,7 @@ # $Id$ # +{mingw}libs=supc++ mingw32 libs=hbqt libs=QtCore4 QtGui4 QtNetwork4 QtWebKit4 +gui=yes