?? configframe.cpp~
字號:
#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include "wx/tokenzr.h"#include "PicPanel.h"#include "ConfigFrame.h"#include "wx/artprov.h"#include "wx/listctrl.h"#include "wx/checkbox.h"#include "wx/brush.h"#include "wx/dc.h"#include "wx/dcclient.h"#include "mainstore.xpm"#include "ab.xpm"#include "a.xpm"#include "bb.xpm"#include "b.xpm"#include "cb.xpm"#include "c.xpm"#include "db.xpm"#include "d.xpm"#include "eb.xpm"#include "e.xpm"#include "fb.xpm"#include "f.xpm"#include "gb.xpm"#include "g.xpm"#include "hb.xpm"#include "h.xpm"#include "ib.xpm"#include "i.xpm"#include "jb.xpm"#include "j.xpm"#include "kb.xpm"#include "k.xpm"#include "lb.xpm"#include "l.xpm"#include "mb.xpm"#include "m.xpm"#include "nb.xpm"#include "n.xpm"#include "ob.xpm"#include "o.xpm"#include "pb.xpm"#include "p.xpm"const int ID_LOGIN =143;const int ID_RESTART =144;const int ID_SHUTDOWN =145;const int ID_NET =146;const int ID_IPLISTCHANGE = 147;const int ID_CHECKBOX1 =148;const int ID_CHECKBOX2 =149;const int ID_LISTFILE =150;const int listmenu_start = 1006;const int listmenu_stop = 1007;MYSQL * myData ;int curSel; char urlName[16][255];unsigned int winNum[16];typedef struct { unsigned int code; //命令編號,該字段指明報文的類型 char m_strText[128]; //邏輯機號}TRequest;TRequest pRequest[16];BEGIN_EVENT_TABLE(ConfigFrame, wxFrame) EVT_PAINT(ConfigFrame::OnPaint) EVT_BUTTON (ID_LOGIN, ConfigFrame::OnMyButtons) EVT_BUTTON (ID_RESTART, ConfigFrame::OnMyButtons) EVT_BUTTON (ID_SHUTDOWN, ConfigFrame::OnMyButtons) EVT_BUTTON (ID_NET, ConfigFrame::OnMyButtons) EVT_COMBOBOX(ID_IPLISTCHANGE, ConfigFrame::OnSelectIPList) EVT_CHECKBOX(ID_CHECKBOX1, ConfigFrame::OnCheckBox) EVT_CHECKBOX(ID_CHECKBOX2, ConfigFrame::OnCheckBox) EVT_LIST_ITEM_SELECTED(ID_LISTFILE, ConfigFrame::OnListFile) EVT_LIST_ITEM_DESELECTED(ID_LISTFILE, ConfigFrame::OnListFileUnsel) EVT_LIST_ITEM_RIGHT_CLICK(ID_LISTFILE,ConfigFrame::OnRightClickOnList) EVT_MENU(listmenu_start,ConfigFrame::OnMenuSelect) EVT_MENU(listmenu_stop,ConfigFrame::OnMenuSelect) EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, ConfigFrame::OnSelChanged)END_EVENT_TABLE()wxString ConvertFromStrs(const char *raw){ wxString str; wxCSConv conv(_("gb2312")); return wxString(raw,conv);}int Minnumber(int x,int y){ return x>y?y:x; }int Maxnumber(int x,int y){ return x>y?x:y; }ConfigFrame::ConfigFrame(wxFrame *frame, const wxPoint& point, const wxSize& size, long style) : wxFrame(frame, -1, _(""),point,size,style), m_treeCtrl(NULL){ curSel = -1; memset(&pRequest,0,sizeof(pRequest)); wxPanel* bg_panel = new wxPanel(this,-1,point,size); wxBitmap headbitmap(mainstore_xpm); headPanel = new PicPanel(bg_panel,wxPoint(0,0), wxSize(1024,768),headbitmap); m_treeCtrl = new MyTreeCtrl(headPanel, TreeTest_Ctrl, wxPoint(635,75), wxSize(341,610), wxTR_DEFAULT_STYLE); m_treeCtrl->SetWindowStyle(m_treeCtrl->GetWindowStyle() ^ wxTR_NO_LINES); m_treeCtrl->SetBackgroundColour(wxColor(192,191,251)); // 列表控件 listCtrlReport = new wxListCtrl( headPanel , ID_LISTFILE, wxPoint(45,141), wxSize(562, 544), wxLC_ICON); // 圖象列表 wxImageList *imageList = new wxImageList(106, 80, true, 1); wxBitmap listicon0(ab_xpm); wxBitmap listicon1(bb_xpm); wxBitmap listicon2(cb_xpm); wxBitmap listicon3(db_xpm); wxBitmap listicon4(eb_xpm); wxBitmap listicon5(fb_xpm); wxBitmap listicon6(gb_xpm); wxBitmap listicon7(hb_xpm); wxBitmap listicon8(ib_xpm); wxBitmap listicon9(jb_xpm); wxBitmap listicon10(kb_xpm); wxBitmap listicon11(lb_xpm); wxBitmap listicon12(mb_xpm); wxBitmap listicon13(mb_xpm); wxBitmap listicon14(ob_xpm); wxBitmap listicon15(pb_xpm); wxBitmap listicon16(a_xpm); wxBitmap listicon17(b_xpm); wxBitmap listicon18(c_xpm); wxBitmap listicon19(d_xpm); wxBitmap listicon20(e_xpm); wxBitmap listicon21(f_xpm); wxBitmap listicon22(g_xpm); wxBitmap listicon23(h_xpm); wxBitmap listicon24(i_xpm); wxBitmap listicon25(j_xpm); wxBitmap listicon26(k_xpm); wxBitmap listicon27(l_xpm); wxBitmap listicon28(m_xpm); wxBitmap listicon29(n_xpm); wxBitmap listicon30(o_xpm); wxBitmap listicon31(p_xpm); imageList->Add(listicon0); imageList->Add(listicon1); imageList->Add(listicon2); imageList->Add(listicon3); imageList->Add(listicon4); imageList->Add(listicon5); imageList->Add(listicon6); imageList->Add(listicon7); imageList->Add(listicon8); imageList->Add(listicon9); imageList->Add(listicon10); imageList->Add(listicon11); imageList->Add(listicon12); imageList->Add(listicon13); imageList->Add(listicon14); imageList->Add(listicon15); imageList->Add(listicon16); imageList->Add(listicon17); imageList->Add(listicon18); imageList->Add(listicon19); imageList->Add(listicon20); imageList->Add(listicon21); imageList->Add(listicon22); imageList->Add(listicon23); imageList->Add(listicon24); imageList->Add(listicon25); imageList->Add(listicon26); imageList->Add(listicon27); imageList->Add(listicon28); imageList->Add(listicon29); imageList->Add(listicon30); imageList->Add(listicon31); listCtrlReport->SetImageList(imageList, wxIMAGE_LIST_NORMAL); //listCtrlReport->SetImageList(imageList, wxIMAGE_LIST_SMALL); //listCtrlReport->SetBackgroundColour(wxColor(241,243,250)); m_radioHAlign = new wxCheckBox(headPanel, ID_CHECKBOX1, _T(""), wxPoint(108,68), wxDefaultSize); m_radioVAlign = new wxCheckBox(headPanel, ID_CHECKBOX2, _T(""), wxPoint(299,68), wxDefaultSize); m_radioHAlign->SetValue(1); m_radioVAlign->SetValue(0); m_radioHAlign->SetBackgroundColour(wxColor(241,243,250)); m_radioVAlign->SetBackgroundColour(wxColor(241,243,250)); button1 = new wxButton(headPanel,ID_LOGIN,_T("登錄界面"),wxPoint(36,716),wxSize(150,30)); button2 = new wxButton(headPanel,ID_NET,_T("網(wǎng)絡(luò)配置"),wxPoint(296,716),wxSize(150,30)); button3 = new wxButton(headPanel,ID_RESTART,_T("重啟系統(tǒng)"),wxPoint(571,716),wxSize(150,30)); button4 = new wxButton(headPanel,ID_SHUTDOWN,_T("關(guān)閉系統(tǒng)"),wxPoint(831,716),wxSize(150,30)); m_panel = new wxPanel(bg_panel,-1,wxPoint(35,60),wxSize(944,636)); m_panel->SetBackgroundColour(wxColor(241,243,250)); loginPage = new LoginPanel(m_panel,wxDefaultPosition, wxDefaultSize,0); loginPage->SetBackgroundColour(wxColor(241,243,250)); networkPage = new NetworkPanel(m_panel,wxDefaultPosition, wxDefaultSize,0); networkPage->SetBackgroundColour(wxColor(241,243,250)); m_sizerFrame = new wxBoxSizer(wxVERTICAL); m_sizerFrame->Add(loginPage, 0, wxEXPAND); m_sizerFrame->Add(networkPage, 1, wxEXPAND); ShowLoginPage(); m_panel->SetSizer(m_sizerFrame); }void ConfigFrame::OnSelChanged(wxTreeEvent& event){ wxTreeItemId id = event.GetItem(); MyTreeItemData *iData = (MyTreeItemData *)m_treeCtrl->GetItemData(id); wxString desc = iData->GetDesc(); if(desc.Contains(_T("rtsp://"))) { wxString url,chan,devid,devname; wxString str= odc2->GetValue(); if(str.Contains(_T("服務(wù)器IP地址"))) { wxMessageBox(_T("請選擇服務(wù)器IP地址!"),_T("警告"),wxOK|wxCENTRE,this,460,300); return; } wxStringTokenizer tkz(desc, wxT(",")); int i = 0; while ( tkz.HasMoreTokens() ) { wxString token = tkz.GetNextToken(); if(i==0) url = token; if(i==1) chan = token; if(i==2) devid = token; if(i==3) devname = token; i++; } long val; chan.ToLong(&val); wxString strDev,strTemp; strTemp.Printf(wxT("[第 %ld 路]"),val+1); strDev = devname + strTemp; listCtrlReport->SetItemText(curSel,strDev); winNum[curSel] = val+1; memset(urlName[curSel],0,128); strcpy(urlName[curSel],(const char *)url.mb_str(wxConvUTF8)); }}void ConfigFrame::InitIPList(){ curSel = -1; memset(urlName,0,sizeof(urlName)); memset(winNum , 0, sizeof(winNum)); listCtrlReport->DeleteAllItems(); m_arrItems.Clear(); m_arrItems.Add( wxT("服務(wù)器IP地址列表...") ); MYSQL_ROW row ; MYSQL_RES * res; int devCount; char szSQL[256]; memset(szSQL,0,sizeof(szSQL)); strcpy(szSQL,"select server_ip from serveriplist where server_code=2"); if ( ! mysql_query( myData, szSQL ) ) { res = mysql_store_result( myData ) ; devCount = (int) mysql_num_rows( res ) ; while ( (row = mysql_fetch_row( res )) ) { wxString str; str = ConvertFromStrs(row[0]); m_arrItems.Add(str); } if(res) mysql_free_result(res); } odc2 = new wxOwnerDrawnComboBox(headPanel,ID_IPLISTCHANGE,wxEmptyString, wxPoint(200,97), wxDefaultSize, m_arrItems, wxNO_BORDER | wxCB_READONLY //(long)0 // ); odc2->SetSelection(0); odc2->SetBackgroundColour(wxColor(241,243,250));}void ConfigFrame::OnListFile(wxListEvent &event){ long selItem = event.GetIndex(); //listCtrlReport->SetItemImage(selItem,2); curSel = selItem;}void ConfigFrame::OnRightClickOnList(wxListEvent &event){ int ItemId = event.GetIndex(); //wxPoint pt = mouseevt.GetPosition(); if(ItemId >= 0 && curSel >=0){ wxString listtitle; listtitle << wxT(" 操作菜單 "); wxMenu listmenu(listtitle); listmenu.AppendSeparator(); listmenu.Append(listmenu_start,wxT("全部輸出")); listmenu.Append(listmenu_stop,wxT("單路輸出")); PopupMenu(&listmenu); }}void ConfigFrame::OnListFileUnsel(wxListEvent &event){ long selItem = event.GetIndex(); curSel = -1;}void ConfigFrame::OnPaint(wxPaintEvent& event){}void ConfigFrame::OnMenuSelect(wxCommandEvent &event){ struct sockaddr_in client_addr; int listenfd; char retStr[255]; memset(retStr,0,sizeof(retStr)); memset(&client_addr, 0, sizeof(client_addr)); //包括socket通訊和寫數(shù)據(jù)庫 switch(event.GetId()) { case listmenu_start: //全部輸出 { listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd < 0) { return; } client_addr.sin_family = AF_INET; client_addr.sin_port = htons(4999); wxString str= odc2->GetValue(); inet_aton((const char *)str.mb_str(wxConvUTF8), &client_addr.sin_addr); if(connect(listenfd, (struct sockaddr*)&client_addr, sizeof(struct sockaddr)) == -1) { close(listenfd); return; } if(send(listenfd,(char *)&pRequest[curSel],sizeof(TRequest),0) > 0) { recv(listenfd,retStr,sizeof(retStr),0); if(strstr(retStr,"Success")!=NULL) { char szSQL[1024]; memset(szSQL,0,sizeof(szSQL)); sprintf(szSQL,"insert into serverinfolist"); mysql_query( myData, szSQL ); } } if(listenfd) close(listenfd); break; } case listmenu_stop: //單路輸出 { break; } default: break; }}void ConfigFrame::OnMyButtons(wxCommandEvent &event){ switch(event.GetId()) { case ID_LOGIN: { ShowLoginPage(); break; } case ID_RESTART: { system("init 6"); break; } case ID_SHUTDOWN: { system("init 0"); break; } case ID_NET: { ShowNetworkPage(); break; } default: break; }}void ConfigFrame::OnSelectIPList(wxCommandEvent &event){ switch(event.GetId()) { case ID_IPLISTCHANGE: { //初始化操作 memset(&pRequest,0,sizeof(pRequest)); curSel = -1; listCtrlReport->DeleteAllItems(); wxString str= odc2->GetValue(); if(!str.Contains(_T("服務(wù)器IP地址"))) { MYSQL_ROW row ; MYSQL_RES * res; int devCount; char szSQL[256]; wxString strName; memset(szSQL,0,sizeof(szSQL)); if(m_radioHAlign->GetValue() == 1) sprintf(szSQL,"select * from serverinfolist where server_type='2' and server_ip='%s' order by pid",(const char *)str.mb_str(wxConvUTF8)); else sprintf(szSQL,"select url,device,port,by2 from serverinfolist where server_type='3' and server_ip='%s' order by pid",(const char *)str.mb_str(wxConvUTF8)); for(int i=1;i<17;i++) { listCtrlReport->InsertItem(i,wxString::Format(_T("%d"), i),0); } if ( ! mysql_query( myData, szSQL ) ) { res = mysql_store_result( myData ) ; devCount = (int) mysql_num_rows( res ) ; while ( (row = mysql_fetch_row( res )) ) { strName.Printf(wxT("[第 %d 路]"),atoi(row[4])); listCtrlReport->SetItemText(atoi(row[3]),ConvertFromStrs(row[1]) + strName); memset(&pRequest[atoi(row[2]) -1],0,sizeof(TRequest)); pRequest[atoi(row[2]) -1].code = atoi(row[2]); strcpy(pRequest[atoi(row[2]) -1].m_strText,row[0]); } if(res) mysql_free_result(res); } }else { curSel = -1; memset(&pRequest,0,sizeof(pRequest)); listCtrlReport->DeleteAllItems(); } break; } default: break; }}void ConfigFrame::OnCheckBox(wxCommandEvent &event){ switch(event.GetId()) { case ID_CHECKBOX1: { if(m_radioHAlign->IsChecked()) { m_radioHAlign->SetValue(1); m_radioVAlign->SetValue(0); }else { m_radioHAlign->SetValue(0); m_radioVAlign->SetValue(1); } break; } case ID_CHECKBOX2: { if(m_radioVAlign->IsChecked()) { m_radioVAlign->SetValue(1); m_radioHAlign->SetValue(0); }else { m_radioVAlign->SetValue(0); m_radioHAlign->SetValue(1); } break; } default: break; }}ConfigFrame::~ConfigFrame(){}void ConfigFrame::ShowListPage(){ m_sizerFrame->Show(loginPage,0,0); m_sizerFrame->Show(networkPage,0,0); m_sizerFrame->Layout(); m_panel->Show(0);}void ConfigFrame::ShowLoginPage(){ m_sizerFrame->Show(loginPage,1,0); m_sizerFrame->Show(networkPage,0,0); m_sizerFrame->Layout(); m_panel->Show(1); loginPage->pEdit3->Clear();}void ConfigFrame::ShowNetworkPage(){ m_sizerFrame->Show(loginPage,0,0); m_sizerFrame->Show(networkPage,1,0); m_sizerFrame->Layout(); m_panel->Show(1);}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -