📄 uidlg.cpp
字号:
}
};
if(id == SOURCE_BRIEFCASE){
// check if source is enabled
if( strcmp(cs->getConfigSourcesParameter("briefcase","sync"), "none") != 0 ){
// start sync with this source
lstSources.setState(SOURCE_BRIEFCASE, ITEM_STATE_TO_SYNC);
setFirstSourceToSync(SOURCE_BRIEFCASE);
refreshSourcePane(SOURCE_MAIL);
StartSync(_T("manual briefcase"));
}
else{
// ask if to enable source
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_TEXT_ENABLE_SYNC_FOR); s1+=" ";
s2.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_BRIEFCASE); s1+=s2;
s2.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_TEXT_ITEMS_LOWER); s2+="?";
s1+=s2;
int retMsgBox =TimedMessageBox(GetSafeHwnd(), s1, getLocalizationUtils()->getLocalizationString(IDS_FUNAMBOL_ALERT),
MB_YESNO | MB_ICONQUESTION | MB_SETFOREGROUND, 10 * 1000);
if(retMsgBox == IDYES){
refreshPane = true;
cs->setConfigSourcesParameter("briefcase","sync","two-way");
getRegConfig()->setDirty(CS_DIRTY_SOURCE_BRIEFCASE);
getRegConfig()->saveDirty();
}
}
};
#if defined(WIN32_PLATFORM_PSPC)
if(id == SOURCE_NOTES){
// check if source is enabled
if( strcmp(cs->getConfigSourcesParameter("note","sync"), "none") != 0 ){
// start sync with this source
lstSources.setState(SOURCE_NOTES, ITEM_STATE_TO_SYNC);
setFirstSourceToSync(SOURCE_NOTES);
refreshSourcePane(SOURCE_MAIL);
StartSync(_T("manual note"));
}
else{
// ask if to enable source
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_TEXT_ENABLE_SYNC_FOR); s1+=" ";
s2.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_NOTES); s1+=s2;
s2.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_TEXT_ITEMS_LOWER); s2+="?";
s1+=s2;
int retMsgBox =TimedMessageBox(GetSafeHwnd(), s1, getLocalizationUtils()->getLocalizationString(IDS_FUNAMBOL_ALERT),
MB_YESNO | MB_ICONQUESTION | MB_SETFOREGROUND, 10 * 1000);
if(retMsgBox == IDYES){
refreshPane = true;
cs->setConfigSourcesParameter("note","sync","two-way");
getRegConfig()->setDirty(CS_DIRTY_SOURCE_NOTES);
getRegConfig()->saveDirty();
}
}
};
#endif
if(refreshPane){
refreshSourcePane(id);
}
}
catch(...){
LOG.error("uiDlg: error while selecting source");
}
lstSources.UpdateWindow();
}
void CuiDlg::StartSync(CString param){
CString s1;
int check = checkStartSync();
int ret;
bSyncCanceled = false;
// check credentials
ClientSettings* cs = getRegConfig();
CString user;
CString password;
user = cs->getAccessConfig().getUsername();
password = cs->getAccessConfig().getPassword();
if( user.IsEmpty() || password.IsEmpty()){
HwndFunctions::closePreviousMsgBox();
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_ERROR_ENTER_CREDENTIALS);
TimedMessageBox(GetSafeHwnd(), s1, getLocalizationUtils()->getLocalizationString(IDS_FUNAMBOL_ALERT), MB_OK | MB_ICONHAND, INFINITE);
OnStartsyncEnded(0,0); // signal sync ended
OnMenuComm();
return; // we return from this so we don't lock the panes
}
else
if (!isServerConfigured()) {
HwndFunctions::closePreviousMsgBox();
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_TEXT_SET_FUNAMBOL_URL);
TimedMessageBox(GetSafeHwnd(), s1, getLocalizationUtils()->getLocalizationString(IDS_FUNAMBOL_ALERT), MB_OK | MB_ICONHAND, INFINITE);
OnStartsyncEnded(0,0); // signal sync ended
OnMenuComm();
return; // we return from this so we don't lock the panes
} else if(check == 0) {
// maybe the user deleted the mail account
// so we refresh the mail and if there is no source to be synced, we return
if(! isSyncEnabled())
return; // no sync will be performed
ret = startProgram(SYNCAPP, param); // start sync process
if ( (ret == 0) || (ret == -5) )
{
HwndFunctions::closePreviousMsgBox();
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_TEXT_STARTSYNC_NOT_FOUND);
TimedMessageBox(GetSafeHwnd(), s1,getLocalizationUtils()->getLocalizationString(IDS_FUNAMBOL_ALERT), MB_OK | MB_ICONHAND, INFINITE);
OnStartsyncEnded(0,0); // signal sync ended
return; // we return from this so we don't lock the panes
}
else
{
dlgCommandBar.nToolBarId = IDM_STOP;
#if defined WIN32_PLATFORM_WFSP
#if (_WIN32_WCE < 0x500)
CreateMenuBar(IDR_MENUBAR_STOP);
#endif
#endif
if(!SHCreateMenuBar(&dlgCommandBar)){
TRACE(_T("Cannot create command bar!"));
return ;
}
}
};
lstSources.SetItemState(-1, LVIS_SELECTED, LVIF_STATE);
// lock panes so they cannot be selected
lockPanes();
}
void CuiDlg::lockPanes(){
lstSources.lockList();
}
void CuiDlg::unlockPanes(){
lstSources.unlockList();
}
BOOL CuiDlg::PreTranslateMessage(MSG* pMsg){
#if defined(WIN32_PLATFORM_PSPC)
// This msg is received to close the plugin from some task-manager applications
// like "X-Button" (included in HTC Touch).
if(pMsg->message == WM_COMMAND) {
if (pMsg->wParam == 0x0001) {
OnClose();
return TRUE;
}
}
#endif
bool bProcessed =false;
if( ( (pMsg->message == WM_KEYDOWN) || (pMsg->message == WM_KEYUP) ||
((pMsg->message == WM_LBUTTONDOWN) && (pMsg->hwnd == lstSources.GetSafeHwnd())) ) // click in source list
&& (lstSources.getIsLocked()) ){
bProcessed = true;
return TRUE;
};
if(pMsg->message == WM_KEYDOWN){
if(pMsg->wParam == VK_RETURN){
bProcessed = true;
SelectSource(lstSources.GetNextItem(-1, LVNI_SELECTED ));
}
};
if(bProcessed)
return TRUE;
else
return CDialog::PreTranslateMessage(pMsg);
}
void CuiDlg::CancelSync(){
OnMenuStop();
}
/**
* Refresh all the canceled states, so it set all the global variables.
* don't put if {} else if {}
*/
void CuiDlg::refreshCanceledState(){
if(lstSources.getState(SOURCE_MAIL) == ITEM_STATE_TO_SYNC)
syncSourceMailState = SYNCSOURCE_STATE_CANCELED;
if(lstSources.getState(SOURCE_CONTACTS) == ITEM_STATE_TO_SYNC)
syncSourceContactState = SYNCSOURCE_STATE_CANCELED;
if(lstSources.getState(SOURCE_CALENDAR) == ITEM_STATE_TO_SYNC)
syncSourceCalendarState = SYNCSOURCE_STATE_CANCELED;
if(lstSources.getState(SOURCE_TASKS) == ITEM_STATE_TO_SYNC)
syncSourceTaskState = SYNCSOURCE_STATE_CANCELED;
if(lstSources.getState(SOURCE_BRIEFCASE) == ITEM_STATE_TO_SYNC)
syncSourceBriefcaseState = SYNCSOURCE_STATE_CANCELED;
if(lstSources.getState(SOURCE_NOTES) == ITEM_STATE_TO_SYNC)
syncSourceNoteState = SYNCSOURCE_STATE_CANCELED;
}
// source id as wParam, state as lParam
LRESULT CuiDlg::OnMsgSourceState( WPARAM wParam, LPARAM lParam){
if (wParam == SOURCE_MAIL) {
syncSourceMailState = lParam;
} else if (wParam == SOURCE_CONTACTS) {
syncSourceContactState = lParam;
} else if (wParam == SOURCE_CALENDAR) {
syncSourceCalendarState = lParam;
} else if (wParam == SOURCE_TASKS) {
syncSourceTaskState = lParam;
} else if (wParam == SOURCE_BRIEFCASE) {
syncSourceBriefcaseState = lParam;
} else if (wParam == SOURCE_NOTES) {
syncSourceNoteState = lParam;
}
return 0;
}
void CuiDlg::setFirstSourceToSync(){
CArray<int> sources;
bool found = false;
sources.Add(SOURCE_MAIL); sources.Add(SOURCE_CONTACTS);
sources.Add(SOURCE_CALENDAR); sources.Add(SOURCE_TASKS);
#if defined(WIN32_PLATFORM_PSPC)
sources.Add(SOURCE_NOTES);
#endif
sources.Add(SOURCE_BRIEFCASE);
for(int i=0; (i<sources.GetCount()) && (!found); i++){
if(lstSources.isEnabledItem(sources[i])){
firstSourceId = sources[i];
found = true;
}
}
}
LRESULT CuiDlg::OnMsgEndingSource( WPARAM , LPARAM ){
// sync source ended event
CString s1;
lastItem = currentItem;
currentItem = 0;
if(sourceEnds & (int)pow(2.0, currentSource) ){
// done receiving
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_DONE_RECEIVING);
lstSources.setText(currentSource, s1);
}
else{
// done sending
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_DONE_SENDING);
lstSources.setText(currentSource, s1);
// set the bit for the current source to know that for it we have received a Sync Source Ended event
sourceEnds |= (int) pow(2.0, currentSource);
// reset nr of mails
nMailsToSync =0;
}
lstSources.setIsSyncing(currentSource, false);
return 0;
}
//
LRESULT CuiDlg::OnMsgConnecting( WPARAM , LPARAM ){
CString s1;
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_CONNECTING);
if(firstSourceId == -1){
setFirstSourceToSync();
}
// check if we have a valid first source
if(firstSourceId != -1){
lstSources.SetCurSelItem(lstSources.idToIndex(firstSourceId));
lstSources.setText(firstSourceId, s1);
lstSources.startAnim(firstSourceId);
}
return 0;
}
// 'Ending...' sync message
LRESULT CuiDlg::OnMsgEndingSync( WPARAM , LPARAM ){
CString s1;
s1.LoadString(getLocalizationUtils()->getLocaleResource(), IDS_ENDING);
lstSources.setText(currentSource, s1);
lstSources.startAnim(currentSource);
return 0;
}
LRESULT CuiDlg::OnMsgPopup(WPARAM wParam, LPARAM lParam){
CString button1;
CString button2;
CString button3;
CString swap;
CString msg;
CString buttonval;
msg.LoadString(getLocalizationUtils()->getLocaleResource(), lParam);
buttonval.LoadString(getLocalizationUtils()->getLocaleResource(), (UINT)wParam);
int b1 =buttonval.Find(L"*");
int b2 =buttonval.Find(L"*",b1+1);
if ( b1 == -1 && b2 == -1){
button1 = buttonval;
button2 = L"";
}else if ( b2 == -1 ){ //just 2 buttons
button1 = buttonval.Left(b1);
button2 = buttonval.Right(buttonval.GetLength() - b1 -1);
button3 = L"";
} else { //3 buttons
button1 = buttonval.Left(b1);
swap = buttonval.Right(buttonval.GetLength() - b1 -1);
int s = swap.Find(L"*");
button3 = swap.Right(swap.GetLength() - s -1);
button2 = swap.Left(s);
}
return CMessageBox(msg, button1, button2, button3);
//return 1;
}
void CuiDlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int id = lstSources.indexToId(pNMListView->iItem);
// if item is disabled we do not change icon
if(lstSources.isEnabledItem(id)){
// Only interested in state changes
if (pNMListView->uChanged & LVIF_STATE)
if (pNMListView->uNewState & LVIS_FOCUSED)
{
// new selection
lstSources.setIcon(id, AfxGetApp()->LoadIcon(IDI_ARROWS22A));
}
else if (pNMListView->uOldState & LVIS_FOCUSED)
{
// deselection
lstSources.resetSourceIcon(id);
}
}
lstSources.InvalidatePane(id);
*pResult = 0;
}
// context menu handlers
void CuiDlg::OnContextMenuSync(){
// TODO: implementation
}
void CuiDlg::OnContextMenuSettings(){
// TODO: implementation
}
void CuiDlg::OnToolsDeviceinfo()
{
CDeviceInfo wndDeviceInfo;
isInSettings = true;
INT_PTR result = wndDeviceInfo.DoModal();
isInSettings = false;
if(bSyncStarted){
CreateMenuBar(IDM_STOP);
}
}
void CuiDlg::EnableSyncButton(bool bEnable){
HWND hwndMB = SHFindMenuBar (this->GetSafeHwnd());
TBBUTTONINFO tbi;
if (!hwndMB)
return;
memset (&tbi, 0, sizeof (tbi));
tbi.cbSize = sizeof (tbi);
tbi.dwMask = TBIF_STATE;
::SendMessage (hwndMB, TB_GETBUTTONINFO,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -