⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uidlg.cpp

📁 funambol window mobile客户端源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        }
    };

    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 + -