source: svn/trunk/zasc/app_c/DST_WinChannelEdit.c @ 40

Last change on this file since 40 was 29, checked in by phkim, 10 years ago
  1. phkim
  2. app
  3. 변경 내용
    • 채널 편집 기능 활성화
    • 프로그램ID, RF 기능을 Major, Minor 로 변경
    • Skip_list 저장 위치를 TVCT_SUB 아래로 변경
    • define 이름 변경 -> SUPPORT_CHANNEL_EDIT
File size: 10.3 KB
Line 
1#include "DST_WinManager.h"
2#include "DST_ChannelTune.h"
3#include "DST_SignalMonitor.h"
4#include "DST_DataStrings.h"
5#include "DST_OSDImage.h"
6#include "DST_UserInterface.h"
7#include "DST_DB.h"
8#include "DST_MemoryDB.h"
9
10#if SUPPORT_CHANNEL_EDIT
11
12#define CE_LIST         5
13
14#define RF_W            30
15#define CH_NO_W         61
16#define CH_NAME_W       112
17#define ADD_W           53
18
19#if 0
20____CChannelEditWin___()
21#endif
22
23
24//class CChannelEditWin : public CWindow
25//{
26//private:
27        static int CChannelEditWin_totalNum;
28        static ChannelMap *CChannelEditWin_chMap;
29
30        static DS_U16 CChannelEditWin_g_nPos;
31        static DS_U16 CChannelEditWin_g_nTop;
32        static DS_U16 CChannelEditWin_select;
33        static DS_U16 CChannelEditWin_listNum;
34//public:
35void CChannelEditWin_InitValues();
36void CChannelEditWin_setSize(CWindow *this);
37
38//      CChannelEditWin(SWinEventMsg event):CWindow(event)
39        void CChannelEditWin_Constructor(CWindow *this, SWinEventMsg event)
40        {
41                this->SetWinName(this,  "ChannelEdit");
42                CChannelEditWin_InitValues();
43                CChannelEditWin_setSize(this);
44                this->SetTimeOut(this, 100);
45        }
46
47        void CChannelEditWin_Destructor(CWindow *this)
48        {
49                if(CChannelEditWin_chMap) DST_OS_Free(&CChannelEditWin_chMap);
50        }
51       
52        void CChannelEditWin_setSize(CWindow *this)
53        {
54                this->rect.w = DST_GetImageWidth(newcon2_gui_channeledit_back);
55                this->rect.h = DST_GetImageHeight(newcon2_gui_channeledit_back);
56                this->rect.x = (DST_GetScreenWidth() - this->rect.w) / 2;
57                this->rect.y = (DST_GetScreenHeight()- this->rect.h) / 2;
58
59        }       
60
61        void CChannelEditWin_InitValues()
62        {
63                int i = 0;
64                CChannelEditWin_totalNum = 0;
65                if(CChannelEditWin_chMap) DST_OS_Free(&CChannelEditWin_chMap);
66                CChannelEditWin_chMap = 0;
67                CChannelEditWin_chMap = DST_DB_GetChannelMapForChEdit(&CChannelEditWin_totalNum);
68                CChannelEditWin_g_nTop = 0;
69                CChannelEditWin_g_nPos = 0;
70                CChannelEditWin_select = 0;
71                CChannelEditWin_listNum = 8;
72                if (CChannelEditWin_totalNum < CChannelEditWin_listNum) CChannelEditWin_listNum = CChannelEditWin_totalNum;
73
74                for( i=0;i<CChannelEditWin_totalNum;i++)
75                {
76                        if(DST_EEPROM_GetRF() == CChannelEditWin_chMap[i].rf && DST_EEPROM_GetProgramNumber() == CChannelEditWin_chMap[i].number )
77                        {
78                                ItemDecrease(CChannelEditWin_totalNum, CChannelEditWin_listNum, &CChannelEditWin_g_nTop, &CChannelEditWin_select, &CChannelEditWin_g_nPos,CChannelEditWin_totalNum - i );
79                                DST_UI_ChannelTune(CChannelEditWin_chMap[CChannelEditWin_select].rf,CChannelEditWin_chMap[CChannelEditWin_select].number);
80                                break;
81                        }
82                }
83               
84                DST_UI_ChannelTune(CChannelEditWin_chMap[CChannelEditWin_select].rf,CChannelEditWin_chMap[CChannelEditWin_select].number);
85        }
86
87        void CChannelEditWin_SetValues(int minor, DS_U16 major, bool bAdd)
88        {
89                DST_DB_SetSkipChannel(major, minor, bAdd);
90//              DST_DB_MakeSkipChannel();
91        }
92       
93        bool CChannelEditWin_CompareValues(int minor, DS_U16 major)
94        {
95                bool result = false;
96                int i = 0;
97                for( i=0;i<DB_SKIP_LIST_MAX;i++)
98                {
99                        if(db_skip_list[i].minor == minor && db_skip_list[i].major == major)
100                                result = true;
101                }
102                return result;
103        }
104
105//      virtual void Focus(bool bVal)
106        void CChannelEditWin_Focus(CWindow *this, bool bVal)
107        {
108                this->RegisterAllKey(this);
109                this->RegisterKey(this, VK_PWR, false, 0, 0);
110                this->RegisterKey(this, VK_SIGNAL_METER, false, 0, 0);
111                this->RegisterKey(this, VK_ZOOM, false, 0, 0);
112                this->RegisterKey(this, VK_CC, false, 0, 0);
113                this->RegisterKey(this, VK_EPG, false, 0, 0);
114        }
115
116       
117//      virtual void Show(WinID id)
118        void CChannelEditWin_ShowWindow(CWindow *this, WinID id)
119        {
120                switch(id)
121                {
122                        case WIN_DEBUG_SQL:
123                        case WIN_DEBUG_SQL_SUB:
124                        case WIN_ENGINEER_MODE:
125                        case WIN_FREQUENCY_SETTING:
126                        case WIN_EWS:
127                        case WIN_DIRECT_TUNE:
128                        case WIN_VOLUME:
129                        case WIN_VOLUME_MUTE:
130                        case WIN_SIGNAL_METER:
131                        case WIN_CLOSED_CAPTION_HOT:
132                        case WIN_AUDIO_HOT:
133                        case WIN_DISPLAY_MODE_HOT:
134                        case WIN_FACTORY_RESET:
135                        case WIN_FACTORY_RESET_ASK:
136                        case WIN_INFOR_BANNER:
137                        case WIN_MAIN_MENU:
138                        case WIN_POWER_DOWN_CAUTION:
139                        case WIN_SUB_MENU_2DEPTH:
140                        case WIN_SUB_MENU_3DEPTH:
141                        case WIN_SUB_MENU_4DEPTH:
142                        case WIN_AUTO_SEARCH:
143                        case WIN_MANUAL_SEARCH:
144                        case WIN_PROGRAM_GUIDE:
145                                this->Close(this);
146                                break;
147                        default:
148                                break;
149                }
150        }
151       
152         //³×ºñ°ÔÀÌ¼Ç ±×¸®±â
153        void CChannelEditWin_DrawNavigation(CWindow *this)
154        {
155                DS_U16  final[20];
156                this->setFontStyle(this, 20,0xFF8C8C8C,this->FontGetVerAlign(this),ALIGN_LEFT);
157
158                memset(final,0,sizeof(final));
159                strcpy16(final, pz_Edit_Menu[OSD_Lang]);
160                str2uni(&final[strlen16(final)], (char *)" : ");
161                strcpy16(&final[strlen16(final)], pz_Edit_Exit[OSD_Lang]);
162                this->DrawTextUni(this, 17, 340, 142, 29, final, &(this->font));
163
164                memset(final,0,sizeof(final));
165                strcpy16(final, pz_Edit_OK[OSD_Lang]);
166                str2uni(&final[strlen16(final)], (char *)" : ");
167                strcpy16(&final[strlen16(final)], pz_Edit_Select[OSD_Lang]);
168                this->DrawTextUni(this, 170, 340, 142, 29, final, &(this->font));
169
170        }
171
172        void CChannelEditWin_DrawTitle(CWindow *this)
173        {
174                this->setFontStyle(this, 19,0xFFC8C8C8,ALIGN_MIDDLE,ALIGN_CENTER);
175                this->DrawTextUni(this, 16, 12, 116, 29, pz_Edit_ChannelNumber[OSD_Lang], &(this->font));
176                this->DrawTextUni(this, 142, 12, 212, 29, pz_Edit_ChannelName[OSD_Lang], &(this->font));
177                this->DrawTextUni(this, 364, 12, 47, 29, pz_Edit_RF[OSD_Lang], &(this->font));
178                this->DrawTextUni(this, 420, 12, 60, 29, pz_Edit_ADD[OSD_Lang], &(this->font));
179        }
180
181        void CChannelEditWin_DrawItems(CWindow *this, int index,int y_Constant, int y_Multiplier, int width, int nFontSize)
182        {
183                char num[5] = {0,};
184               
185                this->setFontStyle(this, 19,0xFFC8C8C8,ALIGN_MIDDLE,ALIGN_CENTER);
186
187                this->DrawText(this, 16, 43+index*y_Multiplier, 124, 29, CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].num, &(this->font));
188
189                this->DrawTextUTF8(this, 142, 43+index*y_Multiplier, 219, 29, CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].name, &(this->font));
190
191                sprintf(num, "%d",DST_GetFrequencyNumberbyIndex(CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].rf));
192
193                this->DrawText(this, 364, 43+index*y_Multiplier, 53, 29, num, &(this->font));
194
195                this->DrawImage(this, 417, 43+index*y_Multiplier, newcon2_gui_channeledit_button_check_empty, false);
196
197                if(!CChannelEditWin_CompareValues(CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].minor, CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].major))
198                        this->DrawImage(this, 417, 43+index*y_Multiplier, newcon2_gui_channeledit_button_check, false);
199                else
200                        this->DrawImage(this, 417, 43+index*y_Multiplier, newcon2_gui_channeledit_button_check_empty, false);
201                if(CChannelEditWin_select == index+CChannelEditWin_g_nTop)
202                {
203                        if(!CChannelEditWin_CompareValues(CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].minor,CChannelEditWin_chMap[index+CChannelEditWin_g_nTop].major))
204                                this->DrawImage(this, 417, 43+index*y_Multiplier, newcon2_gui_channeledit_button_check_cursor, false);
205                        else
206                                this->DrawImage(this, 417, 43+index*y_Multiplier, newcon2_gui_channeledit_button_check_cursor_empty, false);
207                }
208        }
209
210        void CChannelEditWin_DrawScrollBar3(CWindow *this, int x, int y, int h, int total_count, int page_count, int page_start)
211        {
212                if (total_count <= page_count) return;
213                int nScrollPosition = total_count - page_count;
214//              DST_Printf("nScrollPosition : %d h/nScrollPosition : %d/%d == %d y+page_start*ScrollHeight = %d\n",nScrollPosition,h,nScrollPosition ,ScrollHeight,y+page_start*ScrollHeight);
215                this->DrawImage(this, x,y+(page_start*h)/nScrollPosition,newcon2_gui_scroll_button,true);
216        }
217       
218        void CChannelEditWin_Draw(CWindow *this)
219        {
220                int i = 0;
221                this->DrawImage(this, 0,0, newcon2_gui_channeledit_back, false);
222                CChannelEditWin_DrawTitle(this);
223                CChannelEditWin_DrawScrollBar3(this, 489, 30, 294, CChannelEditWin_totalNum, CChannelEditWin_listNum, CChannelEditWin_g_nTop);
224
225                CChannelEditWin_DrawNavigation(this);
226                for( i=0;i<CChannelEditWin_listNum;i++)
227                        CChannelEditWin_DrawItems(this, i, 195, 36, 85, 20);
228        }
229       
230//      virtual void Show(void)
231        void CChannelEditWin_Show(CWindow *this)
232        {
233                CChannelEditWin_Draw(this);
234                this->DoFocus(this, true);
235        }       
236
237//      virtual void OnMessage(SWinEventMsg event)
238        void CChannelEditWin_OnMessage(CWindow *this, SWinEventMsg event)
239        {
240                switch (event.cmd)
241                {
242                        case WM_POWER_OFF:
243                                this->Close(this);
244                                break;
245                               
246                        case WM_CT_MSG:
247                                switch (event.data32[0])
248                                {
249                                        case CT_CHMAP_UPDATE:
250                                                CChannelEditWin_InitValues();
251                                                this->Show(this);
252                                                break;                                 
253                                }
254                                break;
255                        default: break;
256                }
257        }
258
259//      virtual void KeyInput(DS_U8 key, bool /*bRepeat*/)
260        void CChannelEditWin_KeyInput(CWindow *this, DS_U8 key, bool bRepeat)
261        {
262                switch (key)
263                {
264                        case VK_MENU:
265                        case VK_CANCEL:
266                        case VK_PREV:
267                        case VK_PREV_MENU:
268                        case VK_PREV_CH:
269                                if (this->GetParentWinID(this)) DST_CreateWin(this->GetParentWinID(this), 0, 0, 0, 0, 0);
270                                this->Close(this);
271                                break;
272                        case VK_UP:
273                        case VK_DN:
274                                if(key == VK_DN)
275                                        ItemIncrease(CChannelEditWin_totalNum, CChannelEditWin_listNum, &CChannelEditWin_g_nTop, &CChannelEditWin_select, &CChannelEditWin_g_nPos, 1);
276                                else
277                                        ItemDecrease(CChannelEditWin_totalNum, CChannelEditWin_listNum, &CChannelEditWin_g_nTop, &CChannelEditWin_select, &CChannelEditWin_g_nPos, 1);
278
279                                DST_UI_ChannelTune(CChannelEditWin_chMap[CChannelEditWin_select].rf,CChannelEditWin_chMap[CChannelEditWin_select].number);
280                                CChannelEditWin_Draw(this);
281                                break;
282//                      case VK_CH_UP:
283//                      case VK_CH_DN:
284//                              if(key == VK_CH_DN)
285//                                      ItemIncrease(mainItemNum, mainListNum, &g_nTop, &mainSelect, &g_nPos, listNum);
286//                              else
287//                                      ItemDecrease(mainItemNum, mainListNum, &g_nTop, &mainSelect, &g_nPos, listNum);
288//                              //DST_UI_ChannelTune(chMap[select].number);
289//                              Draw();
290//                              break;
291                        case VK_OK:
292                                CChannelEditWin_SetValues(CChannelEditWin_chMap[CChannelEditWin_select].minor , CChannelEditWin_chMap[CChannelEditWin_select].major, CChannelEditWin_CompareValues(CChannelEditWin_chMap[CChannelEditWin_select].minor, CChannelEditWin_chMap[CChannelEditWin_select].major)?false:true);
293                                CChannelEditWin_Draw(this);
294
295                                break;
296                        default:
297                                break;
298
299                }
300        }
301//};
302
303void DST_CreateChannelEditWin(SWinEventMsg event)
304{
305        if (DST_DB_PresentChMap() == false) return;
306
307        CWindow*pWin = NewCWindow(event);
308        pWin->Destructor        = CChannelEditWin_Destructor;
309        pWin->KeyInput          = CChannelEditWin_KeyInput;
310        pWin->OnMessage         = CChannelEditWin_OnMessage;
311        pWin->Focus                     = CChannelEditWin_Focus;
312        pWin->ShowWindow        = CChannelEditWin_ShowWindow;
313        pWin->Show                      = CChannelEditWin_Show;
314        // »ý¼ºÀÚ È£Ãâ
315        CChannelEditWin_Constructor(pWin, event);
316        // À©µµ¿ì ¸Þ´ÏÀú¿¡ µî·Ï
317        DST_AddWin((WinID)(event.data[0]), pWin);
318
319}
320#endif
321
Note: See TracBrowser for help on using the repository browser.