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
This commit is contained in:
Viktor Szakats
2009-03-27 10:47:12 +00:00
parent 35621741c5
commit af4c14d95c
6 changed files with 225 additions and 194 deletions

View File

@@ -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<qthHeaderFilesPath> -O<cppSourceFilePath> <qthFile1.qth> <qthFile2.qth> <...>
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 <CODE> </CODE> construct will be
UserCode : Anything contained in <CODE> </CODE> 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 <const QFont & other> . 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.

View File

@@ -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

View File

@@ -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
/*----------------------------------------------------------------------*/

View File

@@ -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

View File

@@ -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() );
}

View File

@@ -2,5 +2,7 @@
# $Id$
#
{mingw}libs=supc++ mingw32
libs=hbqt
libs=QtCore4 QtGui4 QtNetwork4 QtWebKit4
gui=yes