00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "vdr_remote.h"
00028 #include "mytaskbaricon.h"
00029
00030 BEGIN_EVENT_TABLE( vdr_remoteFrame, wxFrame )
00031 EVT_MENU( wxID_EXIT, vdr_remoteFrame::OnQuit )
00032 EVT_MENU( wxID_ABOUT, vdr_remoteFrame::OnAbout )
00033 EVT_MENU(wxID_PREFERENCES,vdr_remoteFrame::OnBtnPrefs)
00034 EVT_BUTTON(wxID_PREFERENCES,vdr_remoteFrame::OnBtnPrefs)
00035 EVT_MENU_RANGE(Button_OK, Button_User9, vdr_remoteFrame::OnAccelerator)
00036 EVT_COMMAND_RANGE(Button_OK, Button_User9, wxEVT_COMMAND_BUTTON_CLICKED,vdr_remoteFrame::OnAccelerator)
00037 EVT_SOCKET(Vdr_Socket, vdr_remoteFrame::OnSocketEvent)
00038 EVT_CHECKBOX(Button_StayOnTop, vdr_remoteFrame::ToggleStayOnTop)
00039 EVT_ICONIZE(vdr_remoteFrame::OnIconize)
00040 EVT_MENU(Button_GetDiskStat, vdr_remoteFrame::GetDiskStat )
00041 EVT_MENU(wxID_HELP, vdr_remoteFrame::ShowHelpDlg )
00042
00043
00044 END_EVENT_TABLE()
00045
00046 IMPLEMENT_APP(vdr_remoteapp)
00047
00048
00049 vdr_remoteFrame *frame =NULL;
00050
00051 bool
00052 vdr_remoteapp::OnInit()
00053 {
00054
00055 SetAppName(wxT("vdr_remote"));
00056 frame = new vdr_remoteFrame( wxT( "vdr_remote" ), wxPoint(50,50), wxSize(450,340),(long) wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN | wxWANTS_CHARS);
00057 #ifdef __WXMSW__
00058 frame->SetIcon(wxIcon(wxT("vdr_remote_icon.ico"),wxBITMAP_TYPE_ICO));
00059 #else
00060 frame->SetIcon(wxICON(vdr_remote_icon));
00061 #endif
00062
00063
00064 frame->Show(TRUE);
00065 SetTopWindow(frame);
00066
00067 return TRUE;
00068 }
00069 vdr_remoteFrame::~vdr_remoteFrame()
00070 {
00071 if (my_tb_icon) delete my_tb_icon;
00072 if (my_prefs) delete my_prefs;
00073 }
00074
00075 vdr_remoteFrame::vdr_remoteFrame( const wxString& title, const wxPoint& pos, const wxSize& size, const long& style)
00076 : wxFrame((wxFrame *)NULL, -1, title, pos, size,style)
00077 {
00078 my_prefs = new wxConfig();
00079 my_tb_icon = new MyTaskbarIcon();
00080 #ifdef __WXMSW__
00081 my_tb_icon->SetIcon(wxIcon(wxT("vdr_remote_icon.ico"),wxBITMAP_TYPE_ICO), wxT("vdr_remote"));
00082 #else
00083 my_tb_icon->SetIcon(wxICON(vdr_remote_icon), wxT("vdr_remote"));
00084 #endif
00085
00086 LoadPreferences();
00087 socket_data_needed = false;
00088 vdr_client = new wxSocketClient ();
00089 vdr_client->SetEventHandler(*this,Vdr_Socket);
00090 vdr_client->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG | wxSOCKET_CONNECTION_FLAG);
00091 vdr_client->Notify(true);
00092
00093 connection_is_alive =false;
00094 num_connection_failures = 0;
00095 socket_data_available = false;
00096
00097 wxAcceleratorEntry entries[44];
00098 entries[0].Set(wxACCEL_NORMAL, WXK_RETURN, Button_OK);
00099 entries[1].Set(wxACCEL_NORMAL, WXK_BACK, Button_Back);
00100 entries[2].Set(wxACCEL_NORMAL, WXK_F1, Button_Red);
00101 entries[3].Set(wxACCEL_NORMAL, WXK_F2, Button_Green);
00102 entries[4].Set(wxACCEL_NORMAL, WXK_F3, Button_Yellow);
00103 entries[5].Set(wxACCEL_NORMAL, WXK_F4, Button_Blue);
00104 entries[6].Set(wxACCEL_NORMAL, (int) '1', Button_1);
00105 entries[7].Set(wxACCEL_NORMAL, (int) '2', Button_2);
00106 entries[8].Set(wxACCEL_NORMAL, (int) '3', Button_3);
00107 entries[9].Set(wxACCEL_NORMAL, (int) '4', Button_4);
00108 entries[10].Set(wxACCEL_NORMAL, (int) '5', Button_5);
00109 entries[11].Set(wxACCEL_NORMAL, (int) '6', Button_6);
00110 entries[12].Set(wxACCEL_NORMAL, (int) '7', Button_7);
00111 entries[13].Set(wxACCEL_NORMAL, (int) '8', Button_8);
00112 entries[14].Set(wxACCEL_NORMAL, (int) '9', Button_9);
00113 entries[15].Set(wxACCEL_NORMAL, (int) '0', Button_0);
00114 entries[16].Set(wxACCEL_NORMAL, WXK_LEFT, Button_Left);
00115 entries[17].Set(wxACCEL_NORMAL, WXK_RIGHT, Button_Right);
00116 entries[18].Set(wxACCEL_NORMAL, WXK_UP, Button_Up);
00117 entries[19].Set(wxACCEL_NORMAL, WXK_DOWN, Button_Down);
00118 entries[20].Set(wxACCEL_NORMAL, (int) ',', Button_ChDo);
00119 entries[21].Set(wxACCEL_NORMAL, (int) '.', Button_ChUp);
00120 entries[22].Set(wxACCEL_SHIFT, (int) 'Q', Button_Power);
00121 entries[23].Set(wxACCEL_NORMAL, (int) '+', Button_Volup);
00122 entries[24].Set(wxACCEL_NORMAL, (int) '-', Button_Voldown);
00123 entries[25].Set(wxACCEL_NORMAL, (int) 'm', Button_Menu);
00124 entries[26].Set(wxACCEL_NORMAL, (int) 's', Button_Mute);
00125 entries[27].Set(wxACCEL_NORMAL, (int) 'k', Button_Play);
00126 entries[28].Set(wxACCEL_NORMAL, (int) 'j', Button_Rew);
00127 entries[29].Set(wxACCEL_NORMAL, (int) 'l', Button_Ffwd);
00128 entries[30].Set(wxACCEL_NORMAL, (int) 'o', Button_Stop);
00129 entries[31].Set(wxACCEL_NORMAL, (int) 'u', Button_Pause);
00130 entries[32].Set(wxACCEL_SHIFT, (int) 'R', Button_Rec);
00131 entries[33].Set(wxACCEL_NORMAL, (int) 'n', Button_Next);
00132 entries[34].Set(wxACCEL_NORMAL, (int) 'p', Button_Prev);
00133 entries[35].Set(wxACCEL_CTRL, (int) '1', Button_User1);
00134 entries[36].Set(wxACCEL_CTRL, (int) '2', Button_User2);
00135 entries[37].Set(wxACCEL_CTRL, (int) '3', Button_User3);
00136 entries[38].Set(wxACCEL_CTRL, (int) '4', Button_User4);
00137 entries[39].Set(wxACCEL_CTRL, (int) '5', Button_User5);
00138 entries[40].Set(wxACCEL_CTRL, (int) '6', Button_User6);
00139 entries[41].Set(wxACCEL_CTRL, (int) '7', Button_User7);
00140 entries[42].Set(wxACCEL_CTRL, (int) '8', Button_User8);
00141 entries[43].Set(wxACCEL_CTRL, (int) '9', Button_User9);
00142
00143 wxAcceleratorTable accel(44, entries);
00144 this->SetAcceleratorTable(accel);
00145
00146 main_panel = new wxPanel(this);
00147 main_panel->SetFocus();
00148 main_panel->SetBackgroundColour(wxColour(225,225,225));
00149
00150
00151 wxBoxSizer *whole_win = new wxBoxSizer (wxVERTICAL);
00152 main_panel->SetSizer(whole_win);
00153
00154 wxFlexGridSizer* numeric_box = new wxFlexGridSizer(3,4,2);
00155 AddNumberButtons(numeric_box);
00156 whole_win->Add(numeric_box);
00157 whole_win->AddSpacer(8);
00158
00159 wxFlexGridSizer *col_box = new wxFlexGridSizer (4,1,2);
00160 AddColourButtons(col_box);
00161 whole_win->Add(col_box);
00162 whole_win->AddSpacer(8);
00163
00164 wxFlexGridSizer *menu_box = new wxFlexGridSizer(3,4,2);
00165 AddMenuButtons(menu_box);
00166 whole_win->Add(menu_box);
00167 whole_win->AddSpacer(8);
00168
00169 if (show_player_buttons)
00170 {
00171 wxFlexGridSizer *player_box = new wxFlexGridSizer (4,2,2);
00172 AddPlayerButtons(player_box);
00173 whole_win->Add(player_box);
00174 whole_win->AddSpacer(8);
00175 }
00176
00177 wxFlexGridSizer *extended_keys_box = new wxFlexGridSizer (4,2,2);
00178 AddExtendedButtons(extended_keys_box);
00179 whole_win->Add(extended_keys_box);
00180 whole_win->AddSpacer(8);
00181
00182 if (show_user_buttons)
00183 {
00184 wxFlexGridSizer *userbuttons_box = new wxFlexGridSizer (3,2,2);
00185 AddUserButtons(userbuttons_box);
00186 whole_win->Add(userbuttons_box);
00187 whole_win->AddSpacer(8);
00188 }
00189
00190 wxBoxSizer *toggles_box = new wxBoxSizer(wxVERTICAL);
00191 wxCheckBox * cb_stay_on_top = new wxCheckBox(main_panel, Button_StayOnTop, wxT("Stay on top"), wxPoint(-1,-1),wxSize(-1,-1),0);
00192 cb_stay_on_top->SetValue(false);
00193 cb_stay_on_top->SetToolTip(_("Always stay on top of other windows"));
00194 toggles_box->Add(cb_stay_on_top);
00195 whole_win->Add(toggles_box);
00196 whole_win->AddSpacer(8);
00197
00198
00199
00200
00201
00202 if (show_socket_viewer)
00203 {
00204 socket_viewer = new wxTextCtrl (main_panel, Socket_Viewer,_(""),wxPoint(-1,-1),wxSize(140,120),wxTE_MULTILINE | wxTE_READONLY);
00205 whole_win->Add(socket_viewer);
00206 }
00207
00208 wxMenu *menuFile = new wxMenu;
00209 menuFile->Append( wxID_ABOUT, wxT( "&About..." ) );
00210 menuFile->AppendSeparator();
00211 menuFile->Append(wxID_PREFERENCES,wxT("&Preferences..."));
00212 menuFile->AppendSeparator();
00213 menuFile->Append( wxID_EXIT, wxT( "E&xit" ) );
00214
00215 wxMenu *menuExtras = new wxMenu;
00216 menuExtras->Append(Button_GetDiskStat,wxT("Show vdr &Disk Status..."));
00217
00218 wxMenu *menuHelp = new wxMenu;
00219 menuHelp->Append(wxID_HELP,wxT("vdr_remote Usage"));
00220
00221 wxMenuBar *menuBar = new wxMenuBar;
00222 menuBar->Append( menuFile, wxT( "&File" ));
00223 menuBar->Append(menuExtras, wxT("&Extras"));
00224 menuBar->Append(menuHelp, wxT("&Help"));
00225 SetMenuBar( menuBar );
00226 CreateStatusBar();
00227 SetStatusText( wxT( "Welcome to vdr_remote!" ) );
00228 whole_win->Fit(this);
00229 main_panel->SetFocus();
00230 key_ok->SetFocus();
00231
00232 }
00233
00234 void vdr_remoteFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) )
00235 {
00236 Disconnect();
00237 if (my_prefs) delete my_prefs;
00238 if (vdr_client) delete vdr_client;
00239 if (my_tb_icon) delete my_tb_icon;
00240 if (my_socket_buffer) delete my_socket_buffer;
00241 Close(TRUE);
00242 }
00243
00244
00245 void vdr_remoteFrame::OnAccelerator(wxCommandEvent& event)
00246 {
00247
00248 switch (event.GetId())
00249 {
00250 case Button_ChUp:
00251 SendMessage("chan +");
00252 break;
00253 case Button_ChDo:
00254 SendMessage("chan -");
00255 break;
00256 case Button_0:
00257 SendMessage("HITK 0");
00258 break;
00259 case Button_1:
00260 SendMessage("HITK 1");
00261 break;
00262 case Button_2:
00263 SendMessage("HITK 2");
00264 break;
00265 case Button_3:
00266 SendMessage("HITK 3");
00267 break;
00268 case Button_4:
00269 SendMessage("HITK 4");
00270 break;
00271 case Button_5:
00272 SendMessage("HITK 5");
00273 break;
00274 case Button_6:
00275 SendMessage("HITK 6");
00276 break;
00277 case Button_7:
00278 SendMessage("HITK 7");
00279 break;
00280 case Button_8:
00281 SendMessage("HITK 8");
00282 break;
00283 case Button_9:
00284 SendMessage("HITK 9");
00285 break;
00286 case Button_Menu:
00287 socket_data_needed = true;
00288 SendMessage("HITK menu");
00289 break;
00290 case Button_Back:
00291 SendMessage("HITK back");
00292 break;
00293 case Button_Red:
00294 SendMessage("HITK red");
00295 break;
00296 case Button_Green:
00297 SendMessage("HITK green");
00298 break;
00299 case Button_Yellow:
00300 SendMessage("HITK yellow");
00301 break;
00302 case Button_Blue:
00303 SendMessage("HITK blue");
00304 break;
00305 case Button_Power:
00306 SendMessage("HITK power");
00307 break;
00308 case Button_OK:
00309 SendMessage("HITK ok");
00310 break;
00311 case Button_Right:
00312 SendMessage("HITK Right");
00313 break;
00314 case Button_Left:
00315 SendMessage("HITK Left");
00316 break;
00317 case Button_Up:
00318 SendMessage("HITK up");
00319 break;
00320 case Button_Down:
00321 SendMessage("HITK down");
00322 break;
00323 case Button_Mute:
00324 SendMessage("volu mute");
00325 break;
00326 case Button_Voldown:
00327 SendMessage("hitk volume-");
00328 break;
00329 case Button_Volup:
00330 SendMessage("hitk volume+");
00331 break;
00332 case Button_Prev:
00333 SendMessage("HITK Prev");
00334 break;
00335 case Button_Next:
00336 SendMessage("HITK next");
00337 break;
00338 case Button_Rec:
00339 SendMessage("HITK Record");
00340 break;
00341 case Button_Stop:
00342 SendMessage("HITK Stop");
00343 break;
00344 case Button_Rew:
00345 SendMessage("HITK FastRew");
00346 break;
00347 case Button_Ffwd:
00348 SendMessage("HITK FastFwd");
00349 break;
00350 case Button_Pause:
00351 SendMessage("HITK pause");
00352 break;
00353 case Button_Play:
00354 SendMessage("HITK play");
00355 break;
00356 case Button_Schedule:
00357 SendMessage("HITK schedule");
00358 break;
00359 case Button_Audio:
00360 SendMessage("HITK audio");
00361 break;
00362 case Button_Info:
00363 SendMessage("HITK info");
00364 break;
00365 case Button_Recordings:
00366 SendMessage("HITK recordings");
00367 break;
00368 case Button_Timers:
00369 SendMessage("HITK timers");
00370 break;
00371 case Button_Commands:
00372 SendMessage("HITK commands");
00373 break;
00374 case Button_Setup:
00375 SendMessage("HITK setup");
00376 break;
00377 case Button_Channels:
00378 SendMessage("HITK channels");
00379 break;
00380 case Button_User1:
00381 SendMessage("HITK User1");
00382 break;
00383 case Button_User2:
00384 SendMessage("HITK User2");
00385 break;
00386 case Button_User3:
00387 SendMessage("HITK User3");
00388 break;
00389 case Button_User4:
00390 SendMessage("HITK User4");
00391 break;
00392 case Button_User5:
00393 SendMessage("HITK User5");
00394 break;
00395 case Button_User6:
00396 SendMessage("HITK User6");
00397 break;
00398 case Button_User7:
00399 SendMessage("HITK User7");
00400 break;
00401 case Button_User8:
00402 SendMessage("HITK User8");
00403 break;
00404 case Button_User9:
00405 SendMessage("HITK User9");
00406 break;
00407 default:
00408 break;
00409 }
00410 if (show_socket_viewer )
00411 {
00412
00413
00414 vdr_client->WaitForRead(0,170);
00415 }
00416 Disconnect();
00417 key_ok->SetFocus();
00418 }