/*---------------------------------------------------------------------------------------------- Set the values for the dialog controls based ----------------------------------------------------------------------------------------------*/ void TeStylesDlg::SetDialogValues() { // Fill list combobox. StrApp staTemp; ::SendMessage(m_hwndList, CB_RESETCONTENT, 0, 0); staTemp.Load(kstidTesdListBasic); ::SendMessage(m_hwndList, CB_ADDSTRING, 0, (LPARAM)staTemp.Chars()); // 0 staTemp.Load(kstidTesdListAll); ::SendMessage(m_hwndList, CB_ADDSTRING, 0, (LPARAM)staTemp.Chars()); // 1 staTemp.Load(kstidTesdListCustom); ::SendMessage(m_hwndList, CB_ADDSTRING, 0, (LPARAM)staTemp.Chars()); // 2 // Select the value in the combo box that represents the selected level. int nSelect; if (m_nCustomStyleLevel == 0) nSelect = ksttBasic; else if (m_nCustomStyleLevel > 10) nSelect = ksttAll; else nSelect = ksttCustom; ::SendMessage(m_hwndList, CB_SETCURSEL, nSelect, 0); SuperClass::SetDialogValues(); }
void AppendOffsetInfo(StrApp & strDesc, int mpOffset, bool & fFirst) { if (mpOffset && mpOffset != knNinch) { StrApp strFmt; if (mpOffset < 0) strFmt.Load(kstidLoweredFmt); else strFmt.Load(kstidRaisedFmt); StrApp strAmt; StrAppBuf strb; AfUtil::MakeMsrStr (abs(mpOffset) , knpt, &strb); StrApp strT; strT.Format(strFmt.Chars(), strb.Chars()); AppendDescPart(strDesc, strT, fFirst); } }
/*---------------------------------------------------------------------------------------------- Return the what's-this help string for the Date Dialog ellipsis button. @param pt not used. @param pptss Address of a pointer to an ITsString COM object for returning the help string. @return true. ----------------------------------------------------------------------------------------------*/ bool AfDeFeEdBoxBut::DeButton::GetHelpStrFromPt(Point pt, ITsString ** pptss) { AssertPtr(pptss); StrApp str; str.Load(kstidEllipsisBtnDateWhatsThisHelp); // No context help available ITsStrFactoryPtr qtsf; qtsf.CreateInstance(CLSID_TsStrFactory); StrUni stu(str); CheckHr(qtsf->MakeString(stu.Bstr(), m_pdee->UserWs(), pptss)); return true; }
// Append to strDesc appropriate info about underline if any. void AppendUnderlineInfo(StrApp & strDesc, COLORREF clrUnder, int unt, bool & fFirst) { StrApp strColor; if (clrUnder != (COLORREF)knNinch) strColor.Load(g_ct.GetColorRid(g_ct.GetIndexFromColor(clrUnder))); StrApp strFmt; switch (unt) { case kuntDotted: strFmt.Load(kstidDottedUnderFmt); break; case kuntDashed: strFmt.Load(kstidDashedUnderFmt); break; case kuntStrikethrough: strFmt.Load(kstidStrikethroughUnderFmt); break; case kuntSingle: strFmt.Load(kstidSingleUnderFmt); break; case kuntDouble: strFmt.Load(kstidDoubleUnderFmt); break; default: return; } StrApp strT; strT.Format(strFmt.Chars(), strColor.Chars()); AppendDescPart(strDesc, strT, fFirst); }
/*---------------------------------------------------------------------------------------------- Set up the crawler to work on a given database. @param stuServerName - name of the database server @param stuDatabase - name of the database @param pstrmLog - pointer to the log stream (may be NULL) @param padvi3 - pointer to the progress report object (defaults to NULL) ----------------------------------------------------------------------------------------------*/ bool DbStringCrawler::Init(StrUni stuServerName, StrUni stuDatabase, IStream * pstrmLog, IAdvInd3 * padvi3) { m_qstrmLog = pstrmLog; m_stuServerName = stuServerName; m_stuDatabase = stuDatabase; m_qadvi3 = padvi3; try { m_qode.CreateInstance(CLSID_OleDbEncap); // Get the IStream pointer for logging. NULL returned if no log file. StrUni stuMasterDb(L"master"); CheckHr(m_qode->Init(m_stuServerName.Bstr(), stuMasterDb.Bstr(), m_qstrmLog, koltMsgBox, koltvForever)); CreateCommand(); } catch (...) { // Cannot connect to master database. StrApp strMsg; strMsg.Load(kstidCannotGetMasterDb); ::MessageBox(NULL, strMsg.Chars(), m_strProgDlgTitle.Chars(), MB_OK | MB_ICONERROR); return false; } if (m_qadvi3) m_qadvi3->SetRange(0, 100); #ifndef NO_AFMAINWINDOW if (!m_fDontCloseMainWnd) { m_fNeedRelaunch = true; // In closing the final window, FwTool is going to call // AfApp::DecExportedObjects() which would normally post a quit message to // the application if there is only one window open. We don't want it to // quit yet, so we need to temporarily add an extra count until we get our // new window open. AfApp::Papp()->IncExportedObjects(); // Now close the current database with all its windows. AfApp::Papp()->CloseDbAndWindows(m_stuDatabase.Chars(), m_stuServerName.Chars(), false); // Give users time to log off, then force them off anyway: ComBool fDisconnected; try { IDisconnectDbPtr qdscdb; qdscdb.CreateInstance(CLSID_FwDisconnect); // Set up strings needed for disconnection: StrUni stuReason(kstidReasonDisconnectStrCrawl); // Get our own name: DWORD nBufSize = MAX_COMPUTERNAME_LENGTH + 1; achar rgchBuffer[MAX_COMPUTERNAME_LENGTH + 1]; GetComputerName(rgchBuffer, &nBufSize); StrUni stuComputer(rgchBuffer); StrUni stuFmt(kstidRemoteReasonStrCrawl); StrUni stuExternal; stuExternal.Format(stuFmt.Chars(), stuComputer.Chars()); qdscdb->Init(m_stuDatabase.Bstr(), stuServerName.Bstr(), stuReason.Bstr(), stuExternal.Bstr(), (ComBool)false, NULL, 0); qdscdb->DisconnectAll(&fDisconnected); } catch (...) { fDisconnected = false; } if (!fDisconnected) { // User canceled, or it was impossible to disconnect people. This will leave us in // possibly a funny state, and nothing will be changed, but at least we'll open up // a new window on the app. return false; } } #endif return true; }
/*---------------------------------------------------------------------------------------------- Set the values for the dialog controls based on the style styi. @param vwsProj Union of the current Vernacular and Analysis encodings for the project. ----------------------------------------------------------------------------------------------*/ void FmtGenDlg::SetDialogValues(StyleInfo & styi, Vector<int> & vwsProj) { // During SetDialogValues we never need to handle loss of focus in the name control, // because if anything needed to be done about updating that, it was done during // GetDialogValues, which is always called before SetDialogValues. We need to suppress it // because during this call the current style index and the current value of the control // may not agree: the purpose of this method is to update the control from the new style. // The normal loss-of-focus code is trying to synchronize in the opposite direction, and // can cause problems, for example, when we are disabling the control. For example: // - Disabling the window causes it to lose focus if it previously had focus. // - There is a kill focus event that tries to make the contents of the box agree with // the name of the current style. // - when this method is called, the old style is still the current one, so if we // already changed the text in the box, we wind up trying to rename the old style // to the name of the 'provided' style and produce a name conflict error. try { m_vwsProj = vwsProj; StrApp strDesc; m_fSuppressLossOfFocus = true; StrApp strName = styi.m_stuName; StrApp strTemp; // Temporary string. bool fProtectedStyle = m_pafsd->IsStyleProtected(styi.m_stuName); // Name edit box. ::SetDlgItemText(m_hwnd, kctidFgEdName, strName.Chars()); // Diable the control for styles originally provided by FieldWorks. ::EnableWindow(m_hwndName, !fProtectedStyle); // Style type ltext. switch (styi.m_st) { case kstParagraph: strTemp.Load(kstidParagraph); break; case kstCharacter: strTemp.Load(kstidCharacter); break; default: Assert(false); // Should not happen. } ::SetWindowText(m_hwndType, strTemp.Chars()); // Update the "next" and "basedOn" comboboxes LoadNextStyleCombobox(styi); SetNextStyleComboboxValue(styi); LoadBasedOnStyleCombobox(styi); SetBasedOnStyleComboboxValue(styi); // ENHANCE LarryW(JohnT): When shortcut is implemented initialize the value instead. ::EnableWindow(m_hwndShortcut, false); // Disables it. // ************************************** m_vesi.Clear(); strDesc = m_pafsd->GetNameOfStyle(styi.m_hvoBasedOn); strDesc.Append(" + "); ITsTextProps * pttp = styi.m_qttp; if (pttp) { StrApp strT; StrAppBuf strb; // a temp, used for making strings with units // Add default font info bool fFirstPart = true; SmartBstr sbstr; CheckHr(pttp->GetStrPropValue(ktptFontFamily, &sbstr)); StrUni stuFont(sbstr.Chars()); AppendDescPart(strDesc, FwStyledText::FontStringMarkupToUi(false, stuFont), fFirstPart); int val, var; CheckHr(pttp->GetIntPropValues(ktptFontSize, &var, &val)); if (var != -1) { AfUtil::MakeMsrStr (val , knpt, &strb); AppendDescPart(strDesc, strb, fFirstPart); } CheckHr(pttp->GetIntPropValues(ktptBold, &var, &val)); if (val == kttvForceOn || val == kttvInvert) AppendDescPart(strDesc, kstidBold, fFirstPart); CheckHr(pttp->GetIntPropValues(ktptItalic, &var, &val)); if (val == kttvForceOn || val == kttvInvert) AppendDescPart(strDesc, kstidItalic, fFirstPart); CheckHr(pttp->GetIntPropValues(ktptSuperscript, &var, &val)); if (val == kssvSuper) AppendDescPart(strDesc, kstidFfdSuperscript, fFirstPart); else if (val == kssvSub) AppendDescPart(strDesc, kstidFfdSubscript, fFirstPart); AppendTextIs(strDesc, (COLORREF)ReadValOrNinch(pttp, ktptForeColor), (COLORREF)ReadValOrNinch(pttp, ktptBackColor), fFirstPart); AppendUnderlineInfo(strDesc, (COLORREF)ReadValOrNinch(pttp, ktptUnderColor), ReadValOrNinch(pttp, ktptUnderline), fFirstPart); AppendOffsetInfo(strDesc, ReadValOrNinch(pttp, ktptOffset), fFirstPart); // Add info about other tabs int nDir = ReadValOrNinch(pttp, ktptRightToLeft); AddIf(strDesc, nDir == 0, kstidLeftToRight, fFirstPart); AddIf(strDesc, nDir == 1, kstidRightToLeft, fFirstPart); static const Keyval rgkeyvals[] = { {ktalLeading, kstidFpAlignLead}, {ktalLeft, kstidFpAlignLeft}, {ktalCenter, kstidFpAlignCenter}, {ktalRight, kstidFpAlignRight}, {ktalTrailing, kstidFpAlignTrail}, {ktalJustify, kstidFpAlignJustify}, //TODO: support when in use. {0, 0} }; AddFromList(strDesc, ReadValOrNinch(pttp, ktptAlign), rgkeyvals, fFirstPart); int nLeadIndent = ReadValOrNinch(pttp, ktptLeadingIndent); int nTrailIndent = ReadValOrNinch(pttp, ktptTrailingIndent); int nFirstIndent = ReadValOrNinch(pttp, ktptFirstIndent); if (nLeadIndent != knNinch || nTrailIndent != knNinch || nFirstIndent != knNinch) { AppendDescPart(strDesc, kstidIndentColon, fFirstPart); AppendMeasurement(strDesc, nLeadIndent, m_nMsrSys, kstidLeadingFmt); if (nFirstIndent != knNinch) { if (nFirstIndent < 0) AppendMeasurement(strDesc, -nFirstIndent, m_nMsrSys, kstidHangingFmt); else AppendMeasurement(strDesc, nFirstIndent, m_nMsrSys, kstidFirstLineFmt); } AppendMeasurement(strDesc, nTrailIndent, m_nMsrSys, kstidTrailingFmt); } // line spacing CheckHr(pttp->GetIntPropValues(ktptLineHeight, &var, &val)); StrApp strSpacing; StrApp strFmt; if (var == ktpvMilliPoint) { if (val < 0) strFmt.Load(kstidFpLsExactFmt); else strFmt.Load(kstidFpLsAtLeastFmt); StrAppBuf strb; AfUtil::MakeMsrStr (val , knpt, &strb); strSpacing.Format(strFmt.Chars(), strb.Chars()); } else if (var == ktpvRelative) { if (val >= kdenTextPropRel * 2) strSpacing.Load(kstidFpLsDouble); else if (val >= kdenTextPropRel * 3 / 2) strSpacing.Load(kstidFpLs15Lines); else strSpacing.Load(kstidFpLsSingle); } if (strSpacing.Length() != 0) { strFmt.Load(kstidLineSpacingFmt); strT.Format(strFmt.Chars(), strSpacing.Chars()); AppendDescPart(strDesc, strT, fFirstPart); } int mpBefore = ReadValOrNinch(pttp, ktptSpaceBefore); int mpAfter = ReadValOrNinch(pttp, ktptSpaceAfter); if (mpBefore != knNinch || mpAfter != knNinch) { AppendDescPart(strDesc, kstidSpace, fFirstPart); AppendMeasurement(strDesc, mpBefore, knpt, kstidBeforeFmt); AppendMeasurement(strDesc, mpAfter, knpt, kstidAfterFmt); } int bulnum = ReadValOrNinch(pttp, ktptBulNumScheme); AddIf(strDesc, bulnum >= kvbnBulletBase && bulnum < kvbnBulletMax, kstidBulleted, fFirstPart); AddIf(strDesc, bulnum >= kvbnNumberBase && bulnum < kvbnNumberMax, kstidNumbered, fFirstPart); int mpBTop = ReadValOrNinch(pttp, ktptBorderTop); int mpBB = ReadValOrNinch(pttp, ktptBorderBottom); int mpBL = ReadValOrNinch(pttp, ktptBorderLeading); int mpBTr = ReadValOrNinch(pttp, ktptBorderTrailing); if (mpBTop != knNinch || mpBB != knNinch || mpBL != knNinch || mpBTr != knNinch) { AppendDescPart(strDesc, kstidBorderColon, fFirstPart); int clrBorder = ReadValOrNinch(pttp, ktptBorderColor); bool fFirstBorder = true; if (clrBorder != knNinch) { StrApp strClr; strClr.Load(g_ct.GetColorRid(g_ct.GetIndexFromColor(clrBorder))); strDesc.Append(strClr.Chars()); fFirstBorder = false; } AppendBorderInfo(strDesc, mpBTop, kstidTopBdrFmt, fFirstBorder); AppendBorderInfo(strDesc, mpBB, kstidBottomBdrFmt, fFirstBorder); AppendBorderInfo(strDesc, mpBL, kstidLeadingBdrFmt, fFirstBorder); AppendBorderInfo(strDesc, mpBTr, kstidTrailingBdrFmt, fFirstBorder); } // Add info about writing-system overrides of font info. Vector<int> vwsSoFar; // Get the appropropriate writing system factory. ILgWritingSystemFactoryPtr qwsf; AssertPtr(m_pafsd); m_pafsd->GetLgWritingSystemFactory(&qwsf); AssertPtr(qwsf); //- IWritingSystemPtr qws; // Each iteration of this loop processes information about one writing system. SmartBstr sbstrCharStyles; CheckHr(pttp->GetStrPropValue(kspWsStyle, &sbstrCharStyles)); if (sbstrCharStyles.Length()) { FwStyledText::DecodeFontPropsString(sbstrCharStyles, m_vesi, vwsSoFar); SmartBstr sbstrWs; StrApp strWs; int wsUser; CheckHr(qwsf->get_UserWs(&wsUser)); SmartBstr sbstrAbbr; for (int iesi = 0; iesi < m_vesi.Size(); iesi++) { WsStyleInfo & esi = m_vesi[iesi]; if (vwsSoFar[iesi] == 0) continue; // Ignore writing system set to 0. fFirstPart = true; StrApp strT; StrApp strT2; strT.Format(_T("\n")); // Use the abbreviation in the user ws if it exists. // else try for an abbreviation in each ws in m_vwsProj in turn, // else use the ICU locale name as a last resort. IWritingSystemPtr qws; CheckHr(qwsf->GetStrFromWs(vwsSoFar[iesi], &sbstrWs)); CheckHr(qwsf->get_Engine(sbstrWs, &qws)); CheckHr(qws->get_Abbr(wsUser, &sbstrAbbr)); if (sbstrAbbr.Length() == 0) { for (int iws = 0; iws < m_vwsProj.Size(); ++iws) { CheckHr(qws->get_Abbr(m_vwsProj[iws], &sbstrAbbr)); if (sbstrAbbr.Length() != 0) break; } } if (sbstrAbbr.Length() == 0) strWs.Assign(sbstrWs.Chars(), sbstrWs.Length()); else strWs.Assign(sbstrAbbr.Chars(), sbstrAbbr.Length()); strT2.Format(_T("%s: "), strWs.Chars()); if (strT2 == _T("___: ")) strT2.Load(kctidFgUnknown); strT.Append(strT2); strDesc.Append (strT); AppendDescPart(strDesc, FwStyledText::FontStringMarkupToUi(false, esi.m_stuFontFamily), fFirstPart); if (esi.m_mpSize != knNinch) { AfUtil::MakeMsrStr (esi.m_mpSize , knpt, &strb); AppendDescPart(strDesc, strb, fFirstPart); } if (esi.m_fBold == kttvForceOn || esi.m_fBold == kttvInvert) AppendDescPart(strDesc, kstidBold, fFirstPart); if (esi.m_fItalic == kttvForceOn || esi.m_fItalic == kttvInvert) AppendDescPart(strDesc, kstidItalic, fFirstPart); if (esi.m_ssv == kssvSuper) AppendDescPart(strDesc, kstidFfdSuperscript, fFirstPart); else if (esi.m_ssv == kssvSub) AppendDescPart(strDesc, kstidFfdSubscript, fFirstPart); AppendTextIs(strDesc, esi.m_clrFore, esi.m_clrBack, fFirstPart); AppendUnderlineInfo(strDesc, esi.m_clrUnder, esi.m_unt, fFirstPart); AppendOffsetInfo(strDesc, esi.m_mpOffset, fFirstPart); } // 'for' loop } } ::SetDlgItemText(m_hwnd, kctidFgDescription, strDesc.Chars()); // ************************************** } catch(...) { m_fSuppressLossOfFocus = false; throw; } m_fSuppressLossOfFocus = false; } //:> FmtGenDlg::SetDialogValues.