Comunidad Gambas-es
Mostrar información sobre un paquete Debian - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: Mostrar información sobre un paquete Debian (/thread-1614.html)



Mostrar información sobre un paquete Debian - Shell - 20-02-2024

Buenas!.

Necesita mejoras. Lógicamente que el nombre del paquete se pueda variar, un formulario personalizado, o hacerlo desde línea de comando.
En este caso solicito información sobre el paquete "Oregano", en el mismo código.

[Imagen: QZTtrTP.png]

Creamos una aplicación QT y pegamos el código, los objetos se crean directamente desde el código.

Código:
' Gambas class file

Private acontArchivo1 As String[]
Private contenedorprincipal As Panel
Private esdescripcion As Boolean

Public Sub Form_Open()

  Dim contenido As String
  Dim linea As String
  Dim frase1 As String
  Dim frase2 As String
  Dim posicion As Integer

  'Solicitamos información sobre el paquete oregano.
  Shell "apt show oregano" To contenido
  acontArchivo1 = Split(contenido, gb.NewLine, "", True)
  esdescripcion = False

  With Me
    .Arrangement = Arrange.Horizontal
    .Spacing = True
    .H = 0
  End With

  contenedorprincipal = New Panel(Me)
  With contenedorprincipal
    .Arrangement = Arrange.Vertical
    .Expand = True
    .Margin = True
  End With

  For Each linea In acontArchivo1
    posicion = InStr(linea, ":")
    If posicion > 0 And Not esdescripcion Then
      frase1 = String.Mid(linea, 1, posicion - 1)
      frase2 = String.Mid(linea, posicion + 1)
      If frase1 <> "Description" Then
        ConstruirBloque(frase1, frase2)
      Else
        esdescripcion = True
        frase2 = ""
      Endif
    Else
      If esdescripcion Then frase2 &= linea & gb.NewLine
    Endif
  Next

  If esdescripcion Then ConstruirBloque(frase1, frase2)
  esdescripcion = False

End

Public Sub ConstruirBloque(encabezado As String, contenido As String)

  'TODO: En caso de ser dependencias puede que se deba crear un TextArea para que se muestre mejor la información para estas

  Dim contenedor As Panel
  Dim etiqueta As Label
  Dim cajadetexto As TextBox
  Dim cajatextarea As TextArea

  contenedor = New Panel(contenedorprincipal)
  With contenedor
    .Arrangement = Arrange.Horizontal
    .Spacing = True
    .H = 25
    Me.H += .H
  End With

  If Not esdescripcion Then

    etiqueta = New Label(contenedor)
    With etiqueta
      .W = 180
      .H = 20
      .Alignment = Align.Right
      .Font = Font["MonoSpace,Bold"]
      .Text = encabezado
    End With

    cajadetexto = New TextBox(contenedor)
    With cajadetexto
      .H = 20
      .Text = contenido
      .Expand = True
    End With
  Else
    etiqueta = New Label(contenedor)
    With etiqueta
      .W = 140
      .H = 20
      .Alignment = Align.Left
      .Font = Font["MonoSpace,Bold"]
      .Text = encabezado
    End With
    cajatextarea = New TextArea(contenedorprincipal)
    With cajatextarea
      .H = 100
      .Text = contenido
      .ScrollBar = Scroll.Vertical
      .Expand = True
      .Pos = 0
      Me.H += .H
    End With

  Endif

End

Saludos