/* -----[ FormPlane의 생성자입니다. ]----- */ public FormPlane() { InitializeComponent(); /** api에서 공항 목록, 항공사 목록 불러오기 **/ airlines = apiLeave.getAirlineList(); airports = apiLeave.getAirportList(); /** 출발 공항, 도착 공항 버튼들 채우고, 최소화한 상태로 초기화 **/ fillAirportButtons(); fillAirlineButtons(); DisablePanel(pnlDetails); pnlDetails.Width = 0; pnlDetails.BringToFront(); /** FormPlane의 결과 화면 초기화 * [초기값] * 출발공항 : 김포 * 도착공항 : 제주 * 가는날/오는날 : 오늘 * 항공사 : 대한항공 **/ currentAirLine.항공사명 = "대한항공"; updateChecker = new ResultContentState(); updateResultArea(ResultContentState.Dep_Old | ResultContentState.Arr_Old | ResultContentState.returnDate_Old | ResultContentState.leaveDate_Old | ResultContentState.airline_Old); }
/* 항공사 이름 버튼의 클릭에 대한 동작 */ private void btnAirlineName_Click(object sender, EventArgs e) { /** 버튼 활성화 **/ Button btn = sender as Button; ActivateButton(tpnlAirlines, btn); /** 항공사 업데이트 여부르 판단 * 결과 화면의 항공사 정보와 다른 항공사를 선택했을 경우 * 업데이트 플래그 추가 **/ if (currentAirLine.항공사명 != btn.Text) { updateChecker |= ResultContentState.airline_Old; } }
/* 공항 이름 버튼의 클릭에 대한 동작 */ private void btnAirportName_Click(object sender, EventArgs e) { /**결과 화면 상단의 문자열에서 출발 공항과 도착 공항의 이름을 추출 **/ string l_Dep = btnLeaveInfo.Text.Substring(0, 2), r_Dep = btnReturnInfo.Text.Substring(0, 2); /** 출발지/도착지의 업데이트 여부를 판단 * 1. 지금 누른 버튼이 출발공항일 때 * - 결과 화면의 출발지와 다른 버튼을 눌렀을 경우 * - 업데이트 플래그 추가 * 2. 도착공항일 때 * - 결과 화면의 도착지와 다른 버튼을 눌렀을 경우 * - 업데이트 플래그 추가 **/ Button btn = sender as Button; if (isButtonActivated(btnOptions_Departure)) //"출발지" 버튼이 활성화되어 있는 상태면 { ActivateButton(tpnlDepAirports, btn); if (l_Dep != btn.Text) { updateChecker |= ResultContentState.Dep_Old; } /** TextBox에 공항 이름 추가, 색상 검정으로 변경 **/ txtDepAirport_Name.Text = btn.Text; txtDepAirport_Name.ForeColor = Color.Black; } else { ActivateButton(tpnlArrAirports, btn); if (r_Dep != btn.Text) { updateChecker |= ResultContentState.Arr_Old; } /** TextBox에 공항 이름 추가, 색상 검정으로 변경 **/ txtArrAirport_Name.Text = btn.Text; txtArrAirport_Name.ForeColor = Color.Black; } }
/* -----[ 결과 화면의 조작 및 업데이트에 관련된 함수입니다. ]----- */ /* 결과 화면 영역의 내용을 사용자가 설정한 대로 업데이트하는 함수 */ private void updateResultArea(ResultContentState contentState) { //결과 화면 상단부의 항공권 조건 정보를 표시 btnLeaveInfo.Text = txtDepAirport_Name.Text + " -> " + txtArrAirport_Name.Text + "\n\n" + dtpLeaveDate.Value.ToString("yyyy 년 M 월 d 일"); btnReturnInfo.Text = txtArrAirport_Name.Text + " -> " + txtDepAirport_Name.Text + "\n\n" + dtpReturnDate.Value.ToString("yyyy 년 M 월 d 일"); //최신 상태인 경우 if (contentState == ResultContentState.upToDate) { return; // 0 } //출발지 정보 업데이트가 필요한 상태일 경우 if (contentState.HasFlag(ResultContentState.Dep_Old)) // 1 { apiLeave.depAirportId = apiReturn.arrAirportId = airports.Find(x => x.공항이름.Contains(txtDepAirport_Name.Text)).공항ID; } //도착지 정보 업데이트가 필요한 상태일 경우 if (contentState.HasFlag(ResultContentState.Arr_Old)) // 2 { apiLeave.arrAirportId = apiReturn.depAirportId = airports.Find(x => x.공항이름.Contains(txtArrAirport_Name.Text)).공항ID; } //출발 날짜 정보 업데이트가 필요한 상태일 경우 if (contentState.HasFlag(ResultContentState.leaveDate_Old)) // 4 { apiLeave.depPlandTime = dtpLeaveDate.Value.ToString("yyyyMMdd"); } //귀환 날짜 정보 업데이트가 필요한 상태일 경우 if (contentState.HasFlag(ResultContentState.returnDate_Old)) // 8 { apiReturn.depPlandTime = dtpReturnDate.Value.ToString("yyyyMMdd"); } //항공사 정보 업데이트가 필요한 상태일 경우 if (contentState.HasFlag(ResultContentState.airline_Old)) // 16 { foreach (Button btn in tpnlAirlines.Controls) { if (isButtonActivated(btn)) { currentAirLine.항공사명 = btn.Text; leaves.Clear(); returns.Clear(); break; } } } //1. 날짜, 공항, 항공사 업데이트가 아예 필요 없을 때 //2. 날짜, 공항 목록 업데이트가 아예 필요 없고, 항공사만 업데이트 해야할 때 //3. 다 업데이트 해야할 때 if (currentAirLine.항공사명 == "< 전체 선택하기 >") { foreach (Airline al in airlines) { apiLeave.airlineId = apiReturn.airlineId = al.항공사ID; leaves.AddRange(apiLeave.getFlightInfo().ToList()); returns.AddRange(apiReturn.getFlightInfo().ToList()); } } else { apiLeave.airlineId = apiReturn.airlineId = airlines.Find(x => x.항공사명.Equals(currentAirLine.항공사명)).항공사ID; leaves = apiLeave.getFlightInfo().ToList(); returns = apiReturn.getFlightInfo().ToList(); } fillListView(lvwLeaveFlights, leaves); fillListView(lvwReturnFlights, returns); btnLeaveTotal.Text = "총 " + (lvwLeaveFlights.Items[0].Text != "항공편 없음" ? lvwLeaveFlights.Items.Count : 0) + " 개의 결과"; btnReturnTotal.Text = "총 " + (lvwLeaveFlights.Items[0].Text != "항공편 없음" ? lvwReturnFlights.Items.Count : 0) + " 개의 결과"; return; }