My First Program
Previous topic  First topic  Next topic


Marinas-IDE can be launched by clicking on the desktop icon installed on the desktop of the operating system Marinas-IDE was downloaded and installed on.
Luego de bajar e instalar Marinas-GUI, tenemos acceso directo a Marinas-IDE mediante los íconos disponibles en el escritorio de los diferentes Sistemas Operativos.



Click Open / New from the toolbar and type the name of the project we want to create:

Presionamos Open/New de la Barra de Herramientas y escribimos el nombre del proyecto que deseamos crear:



Marinas-IDE warns us that the project does not exist and asks if we want to create it:

Marinas-IDE nos avisa que el proyecto no existe y nos pregunta si deseamos crearlo:



Marinas-IDE asks us if we want to create an empty source program (actually a small program module.), we answer YES!

Luego nos pregunta si deseamos crear un programa fuente vacio (en realidad es un pequeño programa modelo). Le respondemos YES !



At this point, Marinas-IDE informs us that the project has been created successfully.

En este punto, Marinas-IDE nos informa que el proyecto ha sido creado con exito.



Marinas-IDE now opens a default options window for the sample project. Before you start work on the sample project, you should review these suggested settings to ensure they are appropriate.
With the correct default settings, you should now be able to compile your first program. For details of these options please read the topic Project Options

Antes de comenzar a trabajar con nuestro proyecto, Marinas-IDE nos lleva automaticamente a revisar las opciones de default del nuevo proyecto.
Con estas opciones de default, deberíamos poder compilar nuestro primer programa. Para un detalle de estas opciones lea el tópico Project Options




Check that the directory paths for Marinas-IDE are correct. For details of these options please read the topic Global Options

A continuación nos permite revisar si los path para la compilación son los correctos. Para un detalle de estas opciones lea el tópico Global Options



Ready! We now push the BUILD button and see what happens:

Listo!, presionamos el bottón BUILD y vemos que ocurre:








Our first program has been constructed!!
Nuestro primer programa ha sido contruido !!!!

Then run the program by pressing RUN:
A continuación ejecutamos el programa mediante el botón RUN:






Obviously, HbQt and Marinas-GUI code are similar for a short program without logic, but in a real world application Marinas-GUI uses much less code to achieve the same result. In the following sample you can see that a browse control window coded in Marinas-GUI is obviously much less complex than a HbQt coded browse control window:

Obviamente, el codigo en HbQt y en Marinas-GUI es similar en este pequeño programa y sin lógica, pero el mejor resultado lo obtenemos en una aplicacion del mundo real. A continuación se puede ver el mismo ejemplo para un control browse y usted puede ver la diferencia en la complejidad.

HbQt Oficial Sample testbrow.prg

Marinas-GUI like testbrow code

/*
 * $Id: testbrow.prg 16374 2011-02-25 02:43:16Z vouchcac $
 */

/*
 * Harbour Project source code:
 *
 * Copyright 2010 Carlos Bacco 
 * www - http://harbour-project.org
 *
 */

#include "hbqtgui.ch"
#include "hbtrace.ch"
#include "common.ch"

STATIC qApp
STATIC oWnd

STATIC qSlots

STATIC oDA
STATIC oSize
STATIC aStru1
STATIC nCX1
STATIC nCY1

STATIC oColorC
STATIC oColorN
STATIC oColorD
STATIC oColorLY
STATIC oColorLN

PROCEDURE Main()
   LOCAL tb1, mo1, lay1, lay2, bt1, bt2, bt3, hd1, i

   SET DATE ANSI
   SET CENTURY ON

   oColorN := QColor( 100,   0,100 )
   oColorD := QColor( 150, 100,  0 )
   oColorLY:= QColor(   0, 150,  0 )
   oColorLN:= QColor( 200,   0,  0 )

   oWnd := QMainWindow()
   oWnd:resize(640,460 )

   oDA := QWidget()
   oWnd:setCentralWidget( oDA )
   lay1 := QVBoxLayout( oDA )

   DBUseArea( .T., NIL, "../../../tests/test.dbf", "T1", .F., .F. )
   aStru1 := DBStruct()
   nCX1 := 0
   nCY1 := 0
   tb1 := QTableView()
   mo1 := HBQAbstractItemModel( {| t, r, x, y| my_browse( 1, aStru1, t, r, x, y ) } )
   tb1:setModel( mo1 )

   tb1:itemDelegate():connect( "commitData(QWidget*)", ;
                        {| w | my_save( w, 1, aStru1, @nCX1, @nCY1 ) } )
   tb1:selectionModel():connect( "currentChanged(QModelIndex,QModelIndex)", ;
                        {| n | my_select( n, @nCX1, @nCY1 ) } )

   hd1 := tb1:horizontalHeader()
   FOR i := 1 To Len( aStru1 )
      hd1:resizeSection( i - 1, aStru1[ i, 3 ] * 6 + 60 )
   NEXT
   tb1:verticalHeader():setDefaultSectionSize( 24 )

   oSize := QSize(50,24)

   lay1:addWidget( tb1 )

   lay2 := QHBoxLayout()
   lay1:addlayout( lay2 )

   ( bt1 := QPushButton() ):SetText( "Dummy 1" )
   ( bt2 := QPushButton() ):SetText( "Dummy 2" )
   ( bt3 := QPushButton() ):SetText( "Dummy 3" )

   lay2:addWidget( bt1 )
   lay2:addStretch()
   lay2:addWidget( bt2 )
   lay2:addWidget( bt3 )

   oWnd:Show()
   QApplication():exec()

   RETURN

STATIC PROCEDURE my_save( qWidget, nArea, aStru, nCX, nCY )
   LOCAL cData := qWidget:text()

   DBSelectArea( nArea )
   DBGoto( nCY + 1 )

   SWITCH aStru[ nCX + 1, 2 ]
   CASE "C"
      FieldPut( nCX + 1, AllTrim( cData ) )
      EXIT
   CASE "N"
      FieldPut( nCX + 1, Val( cData ) )
      EXIT
   CASE "L"
      FieldPut( nCX + 1, Left( cData, 1 ) $ "YyTt" )
      EXIT
   CASE "D"
      FieldPut( nCX + 1, CToD( cData ) )
      EXIT
   ENDSWITCH
   RETURN

STATIC PROCEDURE my_select( qModelIndex, nCX, nCY  )

   nCX := qModelIndex:column()
   nCY := qModelIndex:row()
   RETURN

STATIC FUNCTION my_browse( nArea, aStru, t, role, x, y )
   DBSelectArea( nArea )

   SWITCH t
   CASE HBQT_QAIM_flags
      RETURN Qt_ItemIsEnabled + Qt_ItemIsSelectable + Qt_ItemIsEditable;

   CASE HBQT_QAIM_data

      SWITCH role
      CASE Qt_DisplayRole
         DBGoto( y + 1 )
         SWITCH aStru[ x + 1, 2 ]
         CASE "C"
            RETURN AllTrim( FieldGet( x + 1 ) )
         CASE "N"
            RETURN hb_NToS( FieldGet( x + 1 ) )
         CASE "L"
            RETURN IIf( FieldGet( x + 1 ), "Yes", "No" )
         CASE "D"
            RETURN DToC( FieldGet( x + 1 ) )
         ENDSWITCH
         RETURN "?"

      CASE Qt_EditRole /* Here we can specify different formats for editing*/
         DBGoto( y + 1 )
         SWITCH aStru[ x + 1, 2 ]
         CASE "C"
            RETURN AllTrim( FieldGet( x + 1 ) )
         CASE "N"
            RETURN hb_NToS( FieldGet( x + 1 ) )
         CASE "L"
            RETURN IIf( FieldGet( x + 1 ), "Y", "N" )
         CASE "D"
            RETURN DToC( FieldGet( x + 1 ) )
         ENDSWITCH
         RETURN "?"

      CASE Qt_ForegroundRole
         SWITCH aStru[ x + 1, 2 ]
         CASE "N"
            RETURN oColorN
         CASE "L"
            DBGoto( y + 1 )
            RETURN IIf( FieldGet( x + 1 ), oColorLY, oColorLN )
         CASE "D"
            RETURN oColorD
         ENDSWITCH
         RETURN NIL

      CASE Qt_BackgroundRole
         RETURN NIL

      CASE Qt_TextAlignmentRole
         SWITCH aStru[ x + 1, 2 ]
         CASE "C"
            RETURN Qt_AlignVCenter + Qt_AlignLeft
         CASE "N"
            RETURN Qt_AlignVCenter + Qt_AlignRight
         ENDSWITCH
         RETURN Qt_AlignCenter
      ENDSWITCH
      RETURN NIL

   CASE HBQT_QAIM_headerData
      SWITCH role
      CASE Qt_DisplayRole
         IF x == Qt_Horizontal
            RETURN aStru[ y + 1, 1 ]
         ELSE
            RETURN hb_NToS( y + 1 )
         ENDIF

      CASE Qt_TextAlignmentRole
         IF x == Qt_Horizontal
            RETURN Qt_AlignCenter
         ELSE
            RETURN Qt_AlignVCenter + Qt_AlignRight
         ENDIF

      CASE Qt_SizeHintRole
         RETURN oSize
      ENDSWITCH
      RETURN NIL

   CASE HBQT_QAIM_rowCount
      RETURN LastRec()

   CASE HBQT_QAIM_columnCount
      RETURN Len( aStru )
   ENDSWITCH

   RETURN NIL

/*
 * $Id: marbrow.prg 2011-03-17 09:00:16Z CarozoDeQuilmes $
 */

/*
 * Marinas-GUI Project source code:
 *
 * Copyright 2009-2011 CarozoDeQuilmes and Bruno Luciani
 * www - http://www.marinas-gui.org
 *
 */

#include "marinas-gui.ch"

Function main()

   SET DATE ANSI
   SET CENTURY ON

   DBUseArea( .T., NIL, "../../../tests/test.dbf", "T1", .F., .F. )

   CREATE WINDOW Sample
     ROW 0
     COL 0
     WIDTH 640
     HEIGHT 460
     CAPTION "Marinas-GUI Sample"
     MAIN .T.

      CREATE BROWSE myBrowse
        ROW 10
        COL 10
        WIDTH 620
        HEIGHT 412
        WORKAREA "T1"
        NAVIGATEBY "CELL"
      END BROWSE

      CREATE BUTTON Button1
        ROW 427
        COL 10
        CAPTION "Dummy 1"
      END BUTTON

      CREATE BUTTON Button2
        ROW 427
        COL 460
        CAPTION "Dummy 2"
      END BUTTON

      CREATE BUTTON Button3
        ROW 427
        COL 550
        CAPTION "Dummy 3"
      END BUTTON

   END WINDOW

   mg_Do( "Sample" , "center" )
   mg_Do( "Sample" , "activate" )

   dbSelectArea( "T1" )
   dbCloseArea()

Return .T.



Why? Because much of the logic for the controls and application are encapsulated into Marinas-GUI - this simplifies learning and coding.
¿Porqué? porque la logica principal de los controles y de la aplicacion esta dentro de Marinas-GUI, esto simplifica la comprension y codificacion de nuestros programas.



Marinas-GUI Version 03.06 and
Marinas-IDE Version 05.06 and
LEX Files Version 02.06


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
last update: April 27
2017
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




A Harbour/QT framework to make multiplatform programs

(©) Copyright 2009-2017 by Fernando Santolin (aka CarozoDeQuilmes)
CarozoDeQuilmes@gmail.com

2009-2017 Beta tester and full English translator: Bruno Luciani
Bruno.Luciani@gmail.com

2014-2015 Final English corrector: David Worboys
DavidWorboys@hotmail.com

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

www.marinas-gui.org


www.marinas-gui.org  

Previous topic  First topic  Next topic