/**
   * Create GotoPanel
   *
   * @param Preferences global preferences
   * @param MainTab reference to MainTable
   * @param DetailsPanel reference to DetailsPanel
   * @param Vector cacheDB
   */
  public GotoPanel(Navigate nav) {
    myNavigation = nav;
    pref = Global.getPref();
    profile = Global.getProfile();
    mainT = Global.mainTab;
    detP = mainT.detP;
    cacheDB = profile.cacheDB;

    // Button
    ButtonP.addNext(
        btnGPS = new mButton(MyLocale.getMsg(1504, "Start")),
        CellConstants.DONTSTRETCH,
        (CellConstants.DONTFILL | CellConstants.WEST));
    ButtonP.addNext(
        btnCenter = new mButton(MyLocale.getMsg(309, "Centre")),
        CellConstants.DONTSTRETCH,
        (CellConstants.DONTFILL | CellConstants.WEST));
    ButtonP.addLast(
        btnSave = new mButton(MyLocale.getMsg(311, "Create Waypoint")),
        CellConstants.DONTSTRETCH,
        (CellConstants.DONTFILL | CellConstants.WEST));
    // ButtonP.addLast(btnMap = new mButton(MyLocale.getMsg(1506,"Map")),CellConstants.DONTSTRETCH,
    // (CellConstants.DONTFILL|CellConstants.WEST));

    // Format selection for coords
    // context menu
    mnuContextFormt = new Menu();
    currFormatSel = 1; // default to d° m.m
    mnuContextFormt.addItem(miCooformat[0] = new MenuItem("d.d°"));
    miCooformat[0].modifiers &= ~MenuItem.Checked;
    mnuContextFormt.addItem(miCooformat[1] = new MenuItem("d°m.m\'"));
    miCooformat[1].modifiers |= MenuItem.Checked; // default
    mnuContextFormt.addItem(miCooformat[2] = new MenuItem("d°m\'s\""));
    miCooformat[2].modifiers &= ~MenuItem.Checked;
    mnuContextFormt.addItems(TransformCoordinates.getProjectedSystemNames());

    // Create context menu for compass rose: select luminary for orientation
    mnuContextRose = new Menu();
    for (int i = 0; i < SkyOrientation.LUMINARY_NAMES.length; i++) {
      mnuContextRose.addItem(miLuminary[i] = new MenuItem(SkyOrientation.getLuminaryName(i)));
      if (i == myNavigation.luminary) miLuminary[i].modifiers |= MenuItem.Checked;
      else miLuminary[i].modifiers &= MenuItem.Checked;
    }

    // Coords
    CoordsP.addNext(
        lblGPS = new mLabel("GPS: "),
        CellConstants.DONTSTRETCH,
        (CellConstants.DONTFILL | CellConstants.WEST));
    lblGPS.backGround = RED;
    lblGPS.setMenu(mnuContextFormt);
    lblGPS.modifyAll(ControlConstants.WantHoldDown, 0);

    lblPosition =
        new mLabel(myNavigation.gpsPos.toString(CoordsScreen.getLocalSystem(currFormatSel)));
    lblPosition.anchor = CellConstants.CENTER;
    lblPosition.setMenu(mnuContextFormt);
    lblPosition.modifyAll(ControlConstants.WantHoldDown, 0);
    CoordsP.addLast(
        lblPosition, CellConstants.HSTRETCH, (CellConstants.HFILL | CellConstants.WEST));

    CoordsP.addNext(
        lblDST = new mLabel(MyLocale.getMsg(1500, "DST:")),
        CellConstants.DONTSTRETCH,
        (CellConstants.DONTFILL | CellConstants.WEST));
    lblDST.backGround = new Color(0, 0, 255);
    lblDST.setMenu(mnuContextFormt);
    lblDST.modifyAll(ControlConstants.WantHoldDown, 0);

    CoordsP.addLast(
        btnGoto = new mButton(getGotoBtnText()),
        CellConstants.HSTRETCH,
        (CellConstants.HFILL | CellConstants.WEST));

    // Rose for bearing
    // compassRose = new GotoRose("rose.png");
    compassRose = new GotoRose();
    icRose = new ImageControl(compassRose);
    icRose.setMenu(mnuContextRose);
    icRose.modifyAll(
        ControlConstants.WantHoldDown,
        0); // this is necessary in order to make PenHold on a PDA work as right click
    roseP.addLast(
        icRose, CellConstants.DONTSTRETCH, (CellConstants.DONTFILL | CellConstants.NORTH));

    mnuContextRose.addItem(new MenuItem("", MenuItem.Separator, null));
    mnuContextRose.addItem(miNorthCentered = new MenuItem(MyLocale.getMsg(1503, "North Centered")));
    if (compassRose.isNorthCentered()) miNorthCentered.modifiers |= MenuItem.Checked;
    else miNorthCentered.modifiers &= MenuItem.Checked;

    // add Panels
    HeadP.addLast(ButtonP, CellConstants.HSTRETCH, CellConstants.DONTFILL | CellConstants.WEST)
        .setTag(SPAN, new Dimension(2, 1));
    HeadP.addLast(CoordsP, CellConstants.HSTRETCH, CellConstants.HFILL | CellConstants.NORTH)
        .setTag(SPAN, new Dimension(2, 1));
    this.addNext(HeadP, CellConstants.HSTRETCH, CellConstants.WEST)
        .setTag(SPAN, new Dimension(2, 1));
    this.addLast(
            btnMap = new mButton(MyLocale.getMsg(1506, "Map") + " "),
            CellConstants.HSTRETCH,
            CellConstants.VFILL | CellConstants.RIGHT)
        .setTag(SPAN, new Dimension(2, 1));
    this.addLast(roseP, CellConstants.DONTSTRETCH, CellConstants.DONTFILL | CellConstants.WEST)
        .setTag(SPAN, new Dimension(2, 1));
    btnMap.backGround = GREEN;
  }
  // Set the colors of the filter buttons according to which filters are active
  private void setColors() {
    // Panel 1 - Bearing & Distance
    if (inpDist.getText().length() > 0
        || !(chkNW.state
            && chkNNW.state
            && chkN.state
            && chkNNE.state
            && chkNE.state
            && chkENE.state
            && chkE.state
            && chkESE.state
            && chkSE.state
            && chkSSE.state
            && chkS.state
            && chkSSW.state
            && chkSW.state
            && chkWSW.state
            && chkW.state
            && chkWNW.state)) btnBearing.backGround = COLOR_FILTERACTIVE;
    else btnBearing.backGround = COLOR_FILTERINACTIVE;
    if (!(chkNW.state
        || chkNNW.state
        || chkN.state
        || chkNNE.state
        || chkNE.state
        || chkENE.state
        || chkE.state
        || chkESE.state
        || chkSE.state
        || chkSSE.state
        || chkS.state
        || chkSSW.state
        || chkSW.state
        || chkWSW.state
        || chkW.state
        || chkWNW.state)) btnBearing.backGround = COLOR_FILTERALL;
    btnBearing.repaint();

    // Panel 2 - Cache attributes
    if (!(chkArchived.state
        && chkAvailable.state
        && chkFound.state
        && chkOwned.state
        && chkNotArchived.state
        && chkNotAvailable.state
        && chkNotFound.state
        && chkNotOwned.state
        && chcStatus.getText().equals(""))) btnAttributes.backGround = COLOR_FILTERACTIVE;
    else btnAttributes.backGround = COLOR_FILTERINACTIVE;
    if ((chkArchived.state == false && chkNotArchived.state == false)
        || (chkAvailable.state == false && chkNotAvailable.state == false)
        || (chkFound.state == false && chkNotFound.state == false)
        || (chkOwned.state == false && chkNotOwned.state == false))
      btnAttributes.backGround = COLOR_FILTERALL;
    btnAttributes.repaint();

    // Panel 3 - Cache ratings
    if (inpDiff.getText().length() > 0 || inpTerr.getText().length() > 0)
      btnRatings.backGround = COLOR_FILTERACTIVE;
    else btnRatings.backGround = COLOR_FILTERINACTIVE;
    btnRatings.repaint();

    // Panel 5 - Addi Waypoints
    if (chkParking.state
        || chkStage.state
        || chkQuestion.state
        || chkFinal.state
        || chkTrailhead.state
        || chkReference.state) { // At least one tick
      btnAddi.backGround = COLOR_FILTERACTIVE;
      addiWptChk.state = true;
      if (chkParking.state
          && chkStage.state
          && chkQuestion.state
          && chkFinal.state
          && chkTrailhead.state
          && chkReference.state) { // All ticked?
        addiWptChk.bgColor = Color.White;
        btnAddi.backGround = COLOR_FILTERINACTIVE;
      } else {
        addiWptChk.bgColor = Color.LightGray;
      }
    } else { // All not ticked
      btnAddi.backGround = COLOR_FILTERACTIVE;
      addiWptChk.bgColor = Color.White;
      addiWptChk.state = false;
    }
    btnAddi.repaint();

    // Panel 4 - Cache types
    boolean allAddis =
        (chkParking.state
            && chkStage.state
            && chkQuestion.state
            && chkFinal.state
            && chkTrailhead.state
            && chkReference.state);
    if (!(chkTrad.state
        && chkMulti.state
        && chkVirtual.state
        && chkLetter.state
        && chkEvent.state
        && chkWebcam.state
        && chkMystery.state
        && chkEarth.state
        && chkLocless.state
        && chkMega.state
        && chkCito.state
        && chkWherigo.state
        && chkCustom.state
        && allAddis)) btnTypes.backGround = COLOR_FILTERACTIVE;
    else btnTypes.backGround = COLOR_FILTERINACTIVE;
    if (!(chkTrad.state
        || chkMulti.state
        || chkVirtual.state
        || chkLetter.state
        || chkEvent.state
        || chkWebcam.state
        || chkMystery.state
        || chkEarth.state
        || chkLocless.state
        || chkMega.state
        || chkCustom.state
        || chkParking.state
        || chkStage.state
        || chkQuestion.state
        || chkFinal.state
        || chkTrailhead.state
        || chkCito.state
        || chkWherigo.state
        || chkReference.state)) btnTypes.backGround = COLOR_FILTERALL;
    btnTypes.repaint();

    // Panel 6 - Cache container
    if (!(chkMicro.state
        && chkSmall.state
        && chkRegular.state
        && chkLarge.state
        && chkVeryLarge.state
        && chkOther.state)) btnContainer.backGround = COLOR_FILTERACTIVE;
    else btnContainer.backGround = COLOR_FILTERINACTIVE;
    if (!(chkMicro.state
        || chkSmall.state
        || chkRegular.state
        || chkLarge.state
        || chkVeryLarge.state
        || chkOther.state)) btnContainer.backGround = COLOR_FILTERALL;
    btnContainer.repaint();

    // Panel 7 - Search

    // Panel 8 - Cache attributes
    if (attV.selectionMaskYes == 0l && attV.selectionMaskNo == 0l)
      btnCacheAttributes.backGround = COLOR_FILTERINACTIVE;
    else btnCacheAttributes.backGround = COLOR_FILTERACTIVE;
    btnCacheAttributes.repaint();
  }