void CManilla2DConfigTabsDlg::UpdateListControlFromNewWidgetVector()
{
    m_bPopulatingListControl = true;
    int selectedIndex = GetSelectedItemIndex();

    m_mainListControl.DeleteAllItems();

    CHeaderCtrl* pListHeaderCtrl = m_mainListControl.GetHeaderCtrl();

    if(pListHeaderCtrl != NULL)
    {
        int headerItemCount = pListHeaderCtrl->GetItemCount();

        if(headerItemCount != 1)
        {
            // remove all items
            for(int i=headerItemCount; i > 0; i--)
            {
                pListHeaderCtrl->DeleteItem(i);
            }

            CRect lcRect;
            m_mainListControl.GetClientRect(&lcRect);
            m_mainListControl.InsertColumn(0, _T("Item Name"), LVCFMT_LEFT, lcRect.Width());
        }
    }

    for(size_t i=0; i<m_newWidgetVector.size(); i++)
    {
        LPCTSTR p(m_newWidgetVector[i].name);

        m_mainListControl.InsertItem(i, p);
        
        m_mainListControl.SetCheck(i, m_newWidgetVector[i].enabled);
    }

    if((selectedIndex >= 0) && (selectedIndex < m_mainListControl.GetItemCount()))
    {
        m_mainListControl.SetItemState(selectedIndex, LVIS_SELECTED, LVIS_SELECTED);
    }

    OnNMClickMainListControl(NULL, NULL);
    m_mainListControl.SetFocus();
    m_bPopulatingListControl = false;
}
Beispiel #2
0
void CBlockProperties::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
{
  float distance;
  char nodeName[NODES_ABBRNAME_LENGTH + 1];
  long deadheadTime;
  int  rcode2;
  int  pos;

  POSITION position = pListCtrlLIST->GetFirstSelectedItemPosition();
//
//  Determine the selection(s)
//
  if(position == NULL)
  {
    return;
  }
//
//  Display the trip
//
  LVCOLUMN LVC;
  int nItem = pListCtrlLIST->GetNextSelectedItem(position);
  int nI = pListCtrlLIST->GetItemData(nItem);
//
//  Get the trip
//
  TRIPSKey0.recordID = m_pRELIEFPOINTS[nI].TRIPSrecordID;
  btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0);
//
//  Show the route, service, direction, and pattern
//
  char routeNumberAndName[ROUTES_NUMBER_LENGTH + 3 + ROUTES_NAME_LENGTH + 1];
  char serviceName[SERVICES_NAME_LENGTH + 1];
  char directionName[DIRECTIONS_LONGNAME_LENGTH + 1];
  char patternName[PATTERNNAMES_NAME_LENGTH + 1];

  ROUTESKey0.recordID = TRIPS.ROUTESrecordID;
  btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0);
  strncpy(routeNumberAndName, ROUTES.number, ROUTES_NUMBER_LENGTH);
  trim(routeNumberAndName, ROUTES_NUMBER_LENGTH);
  strcat(routeNumberAndName, " - ");
  strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH);
  trim(tempString, ROUTES_NAME_LENGTH);
  strcat(routeNumberAndName, tempString);

  SERVICESKey0.recordID = TRIPS.SERVICESrecordID;
  btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0);
  strncpy(serviceName, SERVICES.name, SERVICES_NAME_LENGTH);
  trim(serviceName, SERVICES_NAME_LENGTH);

  DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[TRIPS.directionIndex];
  btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0);
  strncpy(directionName, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH);
  trim(directionName, DIRECTIONS_LONGNAME_LENGTH);

  PATTERNNAMESKey0.recordID = TRIPS.PATTERNNAMESrecordID;
  btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0);
  strncpy(patternName, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH);
  trim(patternName, PATTERNNAMES_NAME_LENGTH);

  sprintf(tempString, "Trip info: %s %s %s on pattern %s",
        serviceName, directionName, routeNumberAndName, patternName);
  pStaticTRIPINFO->SetWindowText(tempString);

//
//  Clear out the previous ListCtrl
//
  pListCtrlTRIPDATA->DeleteAllItems();

  CHeaderCtrl* pCtrl = pListCtrlTRIPDATA->GetHeaderCtrl();

  if(pCtrl != NULL)
  {
    int nCount = pCtrl->GetItemCount();
    for(nI = 0; nI < nCount; nI++)
    {
      pCtrl->DeleteItem(0);
    }
  }
//
//  Set up the list control
//
  GenerateTripDef GTResults;
  GetConnectionTimeDef GCTData;

  int numNodes = GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID,
        TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID,
        TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, &GTResults);

  pos = 0;
//
//  Is this a pullout?
//
  long POTime = NO_TIME;
  
  if(TRIPS.standard.POGNODESrecordID != NO_RECORD)
  {
    GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID;
    GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID;
    GCTData.fromROUTESrecordID = TRIPS.ROUTESrecordID;
    GCTData.fromSERVICESrecordID = TRIPS.SERVICESrecordID;
    GCTData.toROUTESrecordID = TRIPS.ROUTESrecordID;
    GCTData.toSERVICESrecordID = TRIPS.SERVICESrecordID;
    GCTData.fromNODESrecordID = TRIPS.standard.POGNODESrecordID;
    GCTData.toNODESrecordID = GTResults.firstNODESrecordID;
    GCTData.timeOfDay = GTResults.firstNodeTime;
    deadheadTime = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance);
    distance = (float)fabs((double)distance);
    if(deadheadTime != NO_TIME)
    {
      POTime = GTResults.firstNodeTime - deadheadTime;
      NODESKey0.recordID = TRIPS.standard.POGNODESrecordID;
      btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0);
      strncpy(nodeName, NODES.abbrName, NODES_ABBRNAME_LENGTH);
      trim(nodeName, NODES_ABBRNAME_LENGTH);
      LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
      LVC.fmt = LVCFMT_LEFT;
      LVC.cx = 50;
      LVC.pszText = nodeName;
      pListCtrlTRIPDATA->InsertColumn(pos, &LVC);
      pos++;
    }
  }
//
//  Set the header to the pattern of the trip
//
  PATTERNSKey2.ROUTESrecordID = TRIPS.ROUTESrecordID;
  PATTERNSKey2.SERVICESrecordID = TRIPS.SERVICESrecordID;
  PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID;
  PATTERNSKey2.directionIndex = TRIPS.directionIndex;
  PATTERNSKey2.nodeSequence = NO_RECORD;
  rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2);
  while(rcode2 == 0 &&
        PATTERNS.ROUTESrecordID == TRIPS.ROUTESrecordID &&
        PATTERNS.SERVICESrecordID == TRIPS.SERVICESrecordID &&
        PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID &&
        PATTERNS.directionIndex == TRIPS.directionIndex)
  {
    if(!(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP))
    {
      NODESKey0.recordID = PATTERNS.NODESrecordID;
      btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0);
      strncpy(nodeName, NODES.abbrName, NODES_ABBRNAME_LENGTH);
      trim(nodeName, NODES_ABBRNAME_LENGTH);
      LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
      LVC.fmt = LVCFMT_LEFT;
      LVC.cx = 50;
      LVC.pszText = nodeName;
      pListCtrlTRIPDATA->InsertColumn(pos, &LVC);
      pos++;
    }
    rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2);
  }
//  
//  Is this a pull-in?
//
  long PITime = NO_TIME;
  if(TRIPS.standard.PIGNODESrecordID != NO_RECORD)
  {
    GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID;
    GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID;
    GCTData.fromROUTESrecordID = TRIPS.ROUTESrecordID;
    GCTData.fromSERVICESrecordID = TRIPS.SERVICESrecordID;
    GCTData.toROUTESrecordID = TRIPS.ROUTESrecordID;
    GCTData.toSERVICESrecordID = TRIPS.SERVICESrecordID;
    GCTData.fromNODESrecordID = GTResults.lastNODESrecordID;
    GCTData.toNODESrecordID = TRIPS.standard.PIGNODESrecordID;
    GCTData.timeOfDay = GTResults.lastNodeTime;
    deadheadTime = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance);
    distance = (float)fabs((double)distance);
    if(deadheadTime != NO_TIME)
    {
      PITime = GTResults.lastNodeTime + deadheadTime;
      NODESKey0.recordID = TRIPS.standard.PIGNODESrecordID;
      btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0);
      strncpy(nodeName, NODES.abbrName, NODES_ABBRNAME_LENGTH);
      trim(nodeName, NODES_ABBRNAME_LENGTH);
      LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
      LVC.fmt = LVCFMT_LEFT;
      LVC.cx = 50;
      LVC.pszText = nodeName;
      pListCtrlTRIPDATA->InsertColumn(pos, &LVC);
    }
  }
//
//  Display the times
//
  LVITEM LVI;

  LVI.iItem = 0;
  LVI.mask = LVIF_TEXT;
  pos = 0;
//
//  POT?
//
  if(POTime != NO_TIME)
  {
    LVI.iSubItem = pos;
    strcpy(tempString, Tchar(POTime));
    LVI.pszText = tempString;
    pListCtrlTRIPDATA->InsertItem(&LVI);
    pos++;
  }
//
//  Do the trip times
//
  strcpy(tempString, Tchar(GTResults.tripTimes[0]));
  LVI.pszText = tempString;
  LVI.iSubItem = pos;
  if(pos == 0)
    pListCtrlTRIPDATA->InsertItem(&LVI);
  else
  {
    pListCtrlTRIPDATA->SetItem(&LVI);
  }
  pos++;
  for(nI = 1; nI < numNodes; nI++)
  {  
    LVI.iSubItem = pos;
    strcpy(tempString, Tchar(GTResults.tripTimes[nI]));
    LVI.pszText = tempString;
    pListCtrlTRIPDATA->SetItem(&LVI);
    pos++;
  }
//
//  PIT?
//
  if(PITime != NO_TIME)
  {
    LVI.iSubItem = pos;
    strcpy(tempString, Tchar(PITime));
    LVI.pszText = tempString;
    pListCtrlTRIPDATA->SetItem(&LVI);
  }

	*pResult = 0;
}