Skip to content

tutorial Panel de un único control con mas de un boton

IngenieroGeomatico edited this page Aug 16, 2023 · 1 revision

Para entender esta sección, primero hay que saber Cómo crear un control. Una vez se tiene el conocimiento sobre los controles, se va a explicar cómo crear un panel de un único control a través del siguiente ejemplo:

1./ Se añade el CSS necesario para asignar el estilo al panel

  <style type="text/css">
    html,
    body {
      margin: 0;
      padding: 0;
      height: 100%;
      overflow: hidden;
    }

    .g-herramienta .m-tools:before {
      content: "\1F3F3";
      font-size: 22px;
      font-family: none
    }


    /* Opening & closing buttons */
    .m-panel.m-plugin-herramienta.collapsed {
      height: 40px;
    }


    .opened .g-cartografia-flecha-izquierda {
      position: absolute !important;
      right: -286px !important;
      color: #71a7d3 !important;
      background-color: #fff !important;
    }


    /* Contenedor del plugin */
    .m-control.m-container.m-herramienta {
      width: 250px;
      display: flex !important;
      flex-direction: column;
      overflow-x: hidden;
      padding: 0px;

    }


    /* Título */
    .m-herramienta-header {
      background-color: #71a7d3;
      color: white;
      display: block;
      font-size: 15px;
      height: 40px;
      line-height: 40px;
      padding: 0 5px;
      text-align: center;
      width: 100%;
    }

    /* Contenedor botones controles */
    .m-herramienta-previews {
      display: flex;
      justify-content: center;
      align-items: center;
      gap: 10px;
      background-color: white;
      width: 100%;
      padding: 15px 0;

      border-bottom: 1px solid #adadad;
    }

    /* Botones controles */
    button {
      -webkit-font-smoothing: antialiased;
      border: 0;
      background: none;
      cursor: pointer;


    }

    button::before {
      content: "🏷" !important;
      font-size: 22px;
      font-family: none;
    }


    .btn1::before {
      content: "\1F3F4" !important;
      font-size: 22px;
      font-family: none
    }

    .btn2::before {
      content: "\1F3F2" !important;
      font-size: 22px;
      font-family: none
    }

    .btn3::before {
      content: "\1F3F1" !important;
      font-size: 22px;
      font-family: none
    }
  </style>

2./ Se crea un objeto panel y se añade al mapa

    const mapajs = M.map({
      container: 'mapjs',
      zoom: 2,
      maxZoom: 20,
      minZoom: 0,
    });

    const panelExtra = new M.ui.Panel('toolsExtra', {
      "collapsible": true,
      "className": 'g-herramienta',
      "collapsedButtonClass": 'm-tools',
      "position": M.ui.position.TL
    });


    mapajs.addPanels([panelExtra]);

3./ Se crea el control y se le añade el contenido que se mostrará en el panel

      const control = new M.Control(new M.impl.Control(), 'ControlPrueba');



    control.createView = (map) => {


      const contenedor = document.createElement('div');

      const htmlPanel =
        `
        <div aria-label="Plugin View Management" role="menuitem" id="div-contenedor-herramienta" class="m-control m-container m-herramienta">
            <header 
                role="heading" 
                tabindex="0" 
                id="m-herramienta-title"
                class="m-herramienta-header">
                  Título
            </header>
            <section 
                id="m-herramienta-previews"
                class="m-herramienta-previews">
                <button id='btn1' class="button-herramienta btn1" onclick="myFunction1()"></button>
                <button id='btn2' class="button-herramienta btn2" onclick="myFunction2()"></button>
                <button id='btn3' class="button-herramienta btn3" onclick="myFunction3()"></button>
            </section>
            <div id="m-herramienta-contents"></div>
        </div>
      `
      contenedor.innerHTML += htmlPanel;


      return contenedor;
    }

4./ Se añade la funcionalidad y se añade el control al panel

    function myFunction1() {
      alert('Nombre del control: ' + control.name)
    }

    function myFunction2() {
      M.dialog.info('Nombre del control: ' + control.name);
    }

    function myFunction3() {
      M.toast.info('Nombre del control: ' + control.name);
    }

    M.utils.draggabillyPlugin(panelExtra, '#m-herramienta-title');
    panelExtra.addControls(control);

1.INICIO
   1.1. Componentes de la API-CNIG
   1.2. Documentación y Puntos de acceso
   1.3. Primeros pasos
   1.4. Diagrama API CNIG

2. MAPA
2.1. Capas

 ■ 2.1.1. Fuentes
   • 2.1.1.1. Capas vectoriales
     + Vector
     + WFS
     + GeoJSON
     + KML
     + MVT
     + OGCAPIFeatures
     + MBTilesVector
     + GenericVector
     + MapLibre
   • 2.1.1.2. Capas ráster
     + WMS
     + WMTS
     + TMS
     + XYZ
     + OSM
     + MBTiles
     + GenericRaster
     + GeoTIFF
   • 2.1.1.3. Capas rápidas
   • 2.1.1.4. Grupo de capas

 ■ 2.1.2. Simbolización
   • 2.1.2.1. Genérica
     + Puntos
     + Líneas
     + Polígonos
   • 2.1.2.2. Básica
     + Puntos
     + Líneas
     + Polígonos
   • 2.1.2.3. Avanzada
     + Coropletas
     + Proporcional
     + Categorías
     + Estadísticos
     + Mapas de Calor
     + Cluster
     + Línea de flujo
     + Composición

 ■ 2.1.3. Filtros

2.3.-Plugins

  > Creación de plugin en cliente

  » Tutorial de creación de un plugin

2.4. Paneles

  » Creación de panel desde cero sin controles

  » Tutorial Panel de un único control

  » Tutorial Panel de un único control con más de un botón

  » Tutorial Panel con más de un control

2.5. Eventos

  » Gestión de eventos
  » Gestión de eventos en controles personalizados

    2.6. Internacionalización

    2.7. Configuración

    2.8. Acceso librerías base

3. UTILIDADES

4. PROXY

5. API REST
 5.1. Parametrización API-REST
 5.2. Base de Datos API-REST
 5.3. API REST Actions
 5.4. Servicio de correos electrónicos
 5.5. Capas rápidas

6. PARAMETRIZACIÓN VISUALIZADORES

7. SOLUCIÓN DE PROBLEMAS

8. PROCESO DE VERSIONADO

9. GUÍA DE DESARROLLO
  > Guía para el desarrollo de API-CNIG
  » Tutorial desarrollo del núcleo de API-CNIG - (Cliente)
  > Guía de desarrollo de componentes
  » Tutorial desarrollo del núcleo de API-CNIG - (Servidor)
  > Guía de desarrollo de plugins
  » Tutorial desarrollo de plugins ya creados
  » Tutorial desarrollo de nuevos plugins
  > Guía de desarrollo de visualizadores con React

  > Compilación proyecto API-CNIG

Clone this wiki locally