void CBEditTextPrefsDialog::UpdateSettings() { CBTextEditor* te = itsDoc->GetTextEditor(); JString fontName; JSize fontSize; itsFontMenu->GetFont(&fontName, &fontSize); const JBoolean fontChanged = JI2B( fontName != te->GetDefaultFont().GetName() || fontSize != te->GetDefaultFont().GetSize() ); JFloat vScrollScale = 1.0; if (fontChanged) { const JFontManager* fontMgr = te->GetFontManager(); const JFloat h1 = te->GetDefaultFont().GetLineHeight(); const JFloat h2 = fontMgr->GetFont(fontName, fontSize).GetLineHeight(); vScrollScale = h2 / h1; } JInteger tabCharCount; JBoolean ok = itsTabCharCountInput->GetValue(&tabCharCount); assert( ok ); JInteger crmLineWidth; ok = itsCRMLineWidthInput->GetValue(&crmLineWidth); assert( ok ); JInteger undoDepth; ok = itsUndoDepthInput->GetValue(&undoDepth); assert( ok ); JInteger rightMargin; ok = itsRightMarginInput->GetValue(&rightMargin); assert( ok ); CBPrefsManager* prefsMgr = CBGetPrefsManager(); const JBoolean textColorChanged = JNegate( itsColor[ CBPrefsManager::kTextColorIndex-1 ] == prefsMgr->GetColor(CBPrefsManager::kTextColorIndex)); // set colors before RecalcStyles() so stylers update themselves prefsMgr->SetDefaultFont(fontName, fontSize); for (JIndex j=1; j<=CBPrefsManager::kColorCount; j++) { prefsMgr->SetColor(j, itsColor[j-1]); } JPtrArray<CBTextDocument>* docList = (CBGetDocumentManager())->GetTextDocList(); const JSize docCount = docList->GetElementCount(); JProgressDisplay* pg = JNewPG(); pg->FixedLengthProcessBeginning(docCount, "Updating preferences...", kJFalse, kJFalse); for (JIndex i=1; i<=docCount; i++) { CBTextDocument* doc = docList->NthElement(i); doc->ShouldMakeBackupFile(itsCreateBackupCB->IsChecked()); doc->ShouldMakeNewBackupEveryOpen(!itsOnlyBackupIfNoneCB->IsChecked()); doc->ShouldAllocateTitleSpace(itsExtraSpaceWindTitleCB->IsChecked()); doc->ShouldOpenComplFileOnTop(itsOpenComplFileOnTopCB->IsChecked()); te = doc->GetTextEditor(); if (itsEmulatorIndex != itsOrigEmulatorIndex) { JTEKeyHandler* handler; CBInstallEmulator(kMenuIndexToEmulator[ itsEmulatorIndex-1 ], te, &handler); } te->ShouldAutoIndent(itsAutoIndentCB->IsChecked()); te->CBShouldAllowDragAndDrop(itsUseDNDCB->IsChecked()); te->ShouldMoveToFrontOfText(itsLeftToFrontOfTextCB->IsChecked()); te->ShouldBalanceWhileTyping(itsBalanceWhileTypingCB->IsChecked()); te->ShouldScrollToBalance(itsScrollToBalanceCB->IsChecked()); te->ShouldBeepWhenTypeUnbalanced(itsBeepWhenTypeUnbalancedCB->IsChecked()); te->TabShouldBeSmart(itsSmartTabCB->IsChecked()); te->TabShouldInsertSpaces(itsTabToSpacesCB->IsChecked()); if (fontChanged) { JXScrollbar *hScrollbar, *vScrollbar; const JBoolean ok = te->GetScrollbars(&hScrollbar, &vScrollbar); assert( ok ); vScrollbar->PrepareForScaledMaxValue(vScrollScale); te->SetFont(fontName, fontSize, tabCharCount); } else { te->SetTabCharCount(tabCharCount); } te->SetCRMLineWidth(crmLineWidth); te->SetUndoDepth(undoDepth); te->SetRightMarginWidth(itsRightMarginCB->IsChecked(), rightMargin); te->SetDefaultFontStyle(itsColor [ CBPrefsManager::kTextColorIndex-1 ]); te->SetBackColor(itsColor [ CBPrefsManager::kBackColorIndex-1 ]); te->SetFocusColor(itsColor [ CBPrefsManager::kBackColorIndex-1 ]); te->SetCaretColor(itsColor [ CBPrefsManager::kCaretColorIndex-1 ]); te->SetSelectionColor(itsColor [ CBPrefsManager::kSelColorIndex-1 ]); te->SetSelectionOutlineColor(itsColor [ CBPrefsManager::kSelLineColorIndex-1 ]); te->SetRightMarginColor(itsColor [ CBPrefsManager::kRightMarginColorIndex-1 ]); if (textColorChanged) { te->RecalcStyles(); } // force update of insertion font JIndex caretIndex; if (te->GetCaretLocation(&caretIndex)) { te->SetCaretLocation(caretIndex); } pg->IncrementProgress(); } CBFnMenuUpdater* updater = CBGetFnMenuUpdater(); updater->ShouldSortFnNames(itsSortFnMenuCB->IsChecked()); updater->ShouldIncludeNamespace(itsNSInFnMenuCB->IsChecked()); updater->ShouldPackFnNames(itsPackFnMenuCB->IsChecked()); JXTEBase::SetPartialWordModifier( (JXTEBase::PartialWordModifier) itsPWModRG->GetSelectedItem()); JXTEBase::ShouldUseWindowsHomeEnd(itsHomeEndCB->IsChecked()); CBTextEditor::CaretShouldFollowScroll(itsScrollCaretCB->IsChecked()); JTextEditor::ShouldCopyWhenSelect(itsCopyWhenSelectCB->IsChecked()); JXTEBase::MiddleButtonShouldPaste(itsMiddleButtonPasteCB->IsChecked()); CBSearchTextDialog* dlog = CBGetSearchTextDialog(); dlog->SetFont(fontName, fontSize); itsDoc->JPrefObject::WritePrefs(); if (itsEmulatorIndex != itsOrigEmulatorIndex) { prefsMgr->SetEmulator(kMenuIndexToEmulator[ itsEmulatorIndex-1 ]); } CBMWriteSharedPrefs(kJTrue); pg->ProcessFinished(); jdelete pg; }
CBTextEditor::CBTextEditor ( CBTextDocument* document, const JCharacter* fileName, JXMenuBar* menuBar, CBTELineIndexInput* lineInput, CBTEColIndexInput* colInput, JXScrollbarSet* scrollbarSet, JXContainer* enclosure, const HSizingOption hSizing, const VSizingOption vSizing, const JCoordinate x, const JCoordinate y, const JCoordinate w, const JCoordinate h ) : JXTEBase(kFullEditor, kJTrue, kJFalse, scrollbarSet, enclosure, hSizing, vSizing, x,y, w,h), itsLastModifiers(GetDisplay()) { itsDoc = document; ListenTo(itsDoc); UpdateWritable(fileName); itsLineInput = lineInput; itsLineInput->SetTE(this, colInput); itsColInput = colInput; itsColInput->SetTE(this); itsTokenStartList = JTEStyler::NewTokenStartList(); itsBalanceWhileTypingFlag = kJTrue; itsScrollToBalanceFlag = kJTrue; itsBeepWhenTypeUnbalancedFlag = kJTrue; itsSmartTabFlag = kJTrue; // create edit menu JXTextMenu* editMenu = AppendEditMenu(menuBar, kJTrue, kJTrue, kJTrue, kJTrue, kJTrue, kJTrue, kJFalse, kJFalse); const JSize editCount = editMenu->GetItemCount(); editMenu->ShowSeparatorAfter(editCount); itsExecScriptCmdIndex = editCount + 1; editMenu->AppendItem(kExecScriptStr, JXMenu::kPlainType, NULL, kExecScriptNMShortcutStr, kExecScriptAction); editMenu->SetItemImage(itsExecScriptCmdIndex, jx_run_script); editMenu->AppendItem(kExecScriptSubmenuStr); CreateScriptMenu(editMenu, editCount + 2); // create search menu JXTextMenu* searchMenu = AppendSearchReplaceMenu(menuBar); itsFirstSearchMenuItem = searchMenu->GetItemCount() + 1; searchMenu->ShowSeparatorAfter(itsFirstSearchMenuItem-1); searchMenu->AppendMenuItems(kSearchMenuStr, "CBTextEditor"); ListenTo(searchMenu); searchMenu->SetItemImage(itsFirstSearchMenuItem + kBalanceCmd, jcc_balance_braces); searchMenu->SetItemImage(itsFirstSearchMenuItem + kViewManPageCmd, jcc_view_man_page); // create menus when needed itsFnMenu = NULL; itsCompletionMenu = NULL; itsContextMenu = NULL; // font CBPrefsManager* prefsMgr = CBGetPrefsManager(); JString fontName; JSize fontSize; prefsMgr->GetDefaultFont(&fontName, &fontSize); SetFont(fontName, fontSize, kDefTabCharCount); // colors SetDefaultFontStyle(prefsMgr->GetColor(CBPrefsManager::kTextColorIndex)); SetBackColor(prefsMgr->GetColor(CBPrefsManager::kBackColorIndex)); SetFocusColor(GetBackColor()); SetCaretColor(prefsMgr->GetColor(CBPrefsManager::kCaretColorIndex)); SetSelectionColor(prefsMgr->GetColor(CBPrefsManager::kSelColorIndex)); SetSelectionOutlineColor(prefsMgr->GetColor(CBPrefsManager::kSelLineColorIndex)); // right margin itsDrawRightMarginFlag = kJFalse; itsRightMarginWidth = 80; itsRightMarginColor = prefsMgr->GetColor(CBPrefsManager::kRightMarginColorIndex); SetWhitespaceColor(itsRightMarginColor); // misc setup ShouldBroadcastCaretLocationChanged(kJTrue); UpdateTabHandling(); ListenTo(this); (scrollbarSet->GetVScrollbar())->SetScrollDelay(0); UseMultipleUndo(); SetLastSaveLocation(); ShouldAutoIndent(kJTrue); CBShouldAllowDragAndDrop(kJTrue); // new users expect it ShouldMoveToFrontOfText(kJTrue); itsLineInput->ShareEditMenu(this); itsColInput->ShareEditMenu(this); SetCharacterInWordFunction(CBMIsCharacterInWord); JTEKeyHandler* handler; CBInstallEmulator((CBGetPrefsManager())->GetEmulator(), this, &handler); }