?? efem.cpp
字號:
/* *****************************E2基站定位 0.1版*************************************************************Written by Letterb @scnu_cs_052008/1/18Email: boy.letterb@yahoo.com.cn or letterb@tom.com感謝netsnakecq(Bin Li <glen.redlion@gmail.com>)的開源使用lasly的sdk和ilove3d的更新include********************************letterb******************************************/#define QT_NO_DRAGANDDROP#define QT_NO_PROPERTIES#include <E2_EZX_ZSingleCaptureDlg.h>#include <E2_EZX_ZApplication.h>#include <E2_EZX_ZKbMainWidget.h>#include <E2_EZX_ZMessageDlg.h>#include <E2_EZX_ZLabel.h>#include <E2_EZX_ZScrollPanel.h>#include <E2_EZX_ZSoftKey.h>#include <E2_EZX_ZFormContainer.h>#include <E2_EZX_ZSingleSelectDlg.h>#include <E2_EZX_ZOptionsMenu.h>#include <qpainter.h>#include <qlabel.h>#include <stdio.h>#include <stdlib.h>#include <qfile.h>#include <qtextcodec.h>#include <qlayout.h>#include <string.h>#include <time.h>#include<netinet/in.h>#include <unistd.h>#include <qtimer.h>#include "getadd.h"extern "C" int TAPI_CLIENT_Init(int *pi,int j);extern "C" void TAPI_CLIENT_Fini(void);extern "C" int TAPI_NETWORK_GetCurrentNetworkId(char *mcc,char *mnc);extern "C" int TAPI_NETWORK_GetLocalAreaId(unsigned int *area,int *tac);//QString ChineseAndEnglish(const char*ChineseString);//change string to utf-8QTextCodec* gbk_codec = QTextCodec::codecForName("UTF-8");
QString ChineseAndEnglish(const char*ChineseString)
{
return gbk_codec->toUnicode(ChineseString);
} class MyZKbMain : public ZKbMainWidget{ Q_OBJECT////////////////// public: struct settings //設置結構體 { int findneartype; }settings; ZScrollPanel *zsv; ZLabel* infolabel ; ZSoftKey* softKey; public: MyZKbMain(char * currentpath):ZKbMainWidget((ZHeader::HEADER_TYPE)3,NULL , "ZMainWidget" , 0){ QVBoxLayout* layout = getVBoxLayout(); setMainWidgetTitle(ChineseAndEnglish("基站定位")); zsv = new ZScrollPanel(this , NULL , 0, (ZSkinService::WidgetClsID)4); QString info="Loading..."; infolabel = new ZLabel(info, this, "ZLabel", 0, (ZSkinService::WidgetClsID)4); infolabel->setPreferredWidth(240); infolabel->setAutoResize(true ); int height = heightForWidth(240); zsv->addChild(infolabel , 10 , height); layout->addWidget(zsv); /////////// QRect rect; softKey = new ZSoftKey(NULL , this , this); ZOptionsMenu* menu = new ZOptionsMenu(rect, softKey, NULL , 0 ,(ZSkinService::WidgetClsID)2 ); menu->insertItem(ChineseAndEnglish("修改/添加") , NULL , NULL , true , 0 , 0 ); menu->insertItem(ChineseAndEnglish("設置") , NULL , NULL , true , 1 , 1 ); menu->insertItem(ChineseAndEnglish("關于") , NULL , NULL , true , 2 , 2 ); menu->connectItem(0, this, SLOT(slot_edit()));
menu->connectItem(1, this, SLOT(slot_nearsettings())); menu->connectItem(2, this, SLOT(slot_about())); softKey->setOptMenu(ZSoftKey::LEFT, menu); softKey->setText(ZSoftKey::LEFT, ChineseAndEnglish("選項"), (ZSoftKey::TEXT_PRIORITY)0); softKey->setText(ZSoftKey::RIGHT, ChineseAndEnglish("退出"), (ZSoftKey::TEXT_PRIORITY)0); setSoftKey(softKey); softKey->setClickedSlot(ZSoftKey::RIGHT, this, SLOT(close())); // softKey->setClickedSlot(ZSoftKey::LEFT, this, SLOT(slot_about()));// startTimer(1000); ini_soft();// slotTimeout(); QTimer::singleShot(time_out_time, this, SLOT(slotTimeout())); //使用定時器}public : QString AppPath; char area_db[256]; char usr_area_db[256]; char efem_ini[256]; int time_out_time; char info_tmp[1000]; char cur_local_id[100];public : bool CaptureDlg(char* title , char* content,QString & result,int type); int showSingleSelect(char *title,char *content,QStringList list,int checkid); int showQ(char *title, char *content, int type); int ini_soft(); ~MyZKbMain();public slots: void slotTimeout(); virtual void keyReleaseEvent(QKeyEvent* k); void slot_about(); void slot_edit(); void slot_nearsettings();};void MyZKbMain::slot_nearsettings() //設置菜單{ QStringList list; list+=ChineseAndEnglish("禁止"); list+=ChineseAndEnglish("在原數據庫內查找"); list+=ChineseAndEnglish("在用戶數據庫內查找"); int res; res=showSingleSelect("查找設置","如果找不到時采用的最接近查找方式",list,settings.findneartype); if(res!=-1) { settings.findneartype=res; FILE *fp=fopen(efem_ini,"wb"); if(fp) { fwrite(&settings,sizeof settings,1,fp); fclose(fp); } memset(cur_local_id,0,sizeof cur_local_id); //重設當前基站id }}void MyZKbMain::slot_about() //關于{ showQ("E2基站定位", "Written by Letterb\nEmail: boy.letterb@yahoo.com.cn\n版本:0.1\n\n感謝netsnakecq(Bin Li <glen.redlion@gmail.com>)的開源\n\n感謝ayukowa的提醒\n\nThanks Lasly\n\n謝謝使用!", 2);}void MyZKbMain::slot_edit() //修改/添加{ QString result; char newadd[500]; char context[500]; sprintf(context,"請為 %s\n輸入基站地址",cur_local_id); if(!CaptureDlg("設置當前基站",context,result,2)) return; else { char oldline[1000]; memset(oldline,0,sizeof oldline); strcpy(newadd,result.utf8()); char newlocaline[1000]; sprintf(newlocaline,"%s;-1;%s",cur_local_id,newadd); if(isexist(usr_area_db,cur_local_id,oldline)) { oldline[strlen(oldline)-1]=0; printf("sfsdfs=%s",oldline); cancel_line(usr_area_db,oldline); } strcat(newlocaline,"\n"); append_to_file(usr_area_db,newlocaline);// append_to_file(usr_area_db,"\n"); char tmpinfo[2000]; sprintf(tmpinfo,"\n\n基站:\n%s\n\n您的大致位置:\n%s",cur_local_id,newadd); infolabel->setText(ChineseAndEnglish(tmpinfo)); infolabel->setPreferredWidth(220); infolabel->setAutoResize(true ); } return;}int MyZKbMain::showQ(char *title, char *content, int type)
{
ZMessageDlg *showq=new ZMessageDlg(ChineseAndEnglish(title), ChineseAndEnglish(content), (ZMessageDlg::MessageDlgType)type , 0 , this , "showQ" , true , 0);
showq->exec();
int ret=showq->tmp[32]; printf("result=%d\n",ret);
delete showq;
return ret;
}
void MyZKbMain::keyReleaseEvent(QKeyEvent* k) //未用{ // char info_tmp[1000]; switch (k->key()) { case 52: break; } return QWidget::keyReleaseEvent(k);}int MyZKbMain::ini_soft() //初始化{ AppPath = qApp->argv()[0]; AppPath.truncate( AppPath.findRev("/") + 1 ); sprintf(area_db,"%sarea.db",AppPath.latin1 ()); sprintf(usr_area_db,"%susr_area.db",AppPath.latin1 ()); sprintf(efem_ini,"%sefem.ini",AppPath.latin1 ()); FILE *fp; fp=fopen(efem_ini,"rb"); if(fp) { fread(&settings,sizeof settings,1,fp); fclose(fp); } time_out_time=1000; int pi,j;// int tapihandle = TAPI_CLIENT_Init(&pi,j); memset(cur_local_id,0,sizeof cur_local_id); return 0;}MyZKbMain::~MyZKbMain(){// TAPI_CLIENT_Fini();}void MyZKbMain::slotTimeout() //定時器,每隔一秒檢測一次{ static int countor=0; int i=0,pi=0,j=0,tac=0; unsigned int area=0,lac=0,cid=0; char mcc[20],mnc[20]; int tapihandle = TAPI_CLIENT_Init(&pi,j); //初始化 int netrerurn = TAPI_NETWORK_GetCurrentNetworkId(mcc,mnc); //獲取網絡標識 int areareturn = TAPI_NETWORK_GetLocalAreaId(&area,&tac); //獲取基站信息 int ok= 0; area = htonl(area); //分析基站id lac = area >> 16; cid = area & 0x0000ffff; char tmpid[100]; sprintf(tmpid ,"%s;%s;%d;%d",mcc,mnc,lac,cid); if(!strcmp(tmpid,cur_local_id)) //檢測是否和當前基站id相同 { printf("id no changes!\n"); //如果相同 } else //如果不同 {printf("id changes!\n");/* infolabel->setText(ChineseAndEnglish(tmpid)); infolabel->setPreferredWidth(220); infolabel->setAutoResize(true );*/ char tmpinfo[2000]; char curadd[500]; strcpy(cur_local_id,tmpid); if(!getlocaladd(usr_area_db,cur_local_id,curadd)) //搜索用戶數據庫 { if(!getlocaladd(area_db,cur_local_id,curadd)) //搜索原數據庫 { switch (settings.findneartype) //查找離當前基站最近的基站 { case 1: findnearadd(area_db,cur_local_id,curadd); //從原數據庫里面查找 sprintf(tmpinfo,"發現新基站:\n%s\n附近基站:\n%s",cur_local_id,curadd); break; case 2: findnearadd(usr_area_db,cur_local_id,curadd); //從用戶數據庫里面查找 sprintf(tmpinfo,"發現新基站:\n%s\n附近基站:\n%s",cur_local_id,curadd); break; default : sprintf(tmpinfo,"發現新基站:\n%s",cur_local_id); break; }// sprintf(tmpinfo,"基站:\n%s\n您的大致位置:\n%s",cur_local_id,curadd); } else { sprintf(tmpinfo,"\n\n基站:\n%s\n\n您的大致位置:\n%s",cur_local_id,curadd); } } else { sprintf(tmpinfo,"\n\n基站:\n%s\n\n您的大致位置:\n%s",cur_local_id,curadd); } infolabel->setText(ChineseAndEnglish(tmpinfo)); infolabel->setPreferredWidth(220); infolabel->setAutoResize(true ); } TAPI_CLIENT_Fini(); //完成 QTimer::singleShot(time_out_time, this, SLOT(slotTimeout()));}int MyZKbMain::showSingleSelect(char *title,char *content,QStringList list,int checkid){ int result=-1; ZSingleSelectDlg *dlg=new ZSingleSelectDlg(ChineseAndEnglish(title), ChineseAndEnglish(content), NULL, "sss", true, 0, 0); dlg->addItemsList(list); if(checkid!=-1) { ZListBox* listbox=dlg->getListBox();
listbox->checkItem(checkid, true); } dlg->exec(); if(dlg->tmp[32]) { result=dlg->getCheckedItemIndex(); } delete dlg; return result;}bool MyZKbMain::CaptureDlg(char* title , char* content,QString & result,int type){// QString result;//(QWidget*, char const*, bool, unsigned); ZSingleCaptureDlg* dlg = new ZSingleCaptureDlg(ChineseAndEnglish(title), ChineseAndEnglish(content), (ZSingleCaptureDlg::CaptureDlgType)type, this, "ZSingleCaptureDlg", true, 0, 0); dlg->exec(); int ret=dlg->tmp[32]; if(ret ) { result=dlg->getResultText(); delete dlg; return 1; } delete dlg; return 0;}int main( int argc, char **argv ){ ZApplication* a = new ZApplication( argc, argv ); MyZKbMain*zmain=new MyZKbMain(argv[1]); a->setMainWidget( zmain ); zmain->show(); a->exec(); delete zmain; delete a; return argc;}#include"efem.moc"
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -