void JXSearchTextDialog::SetObjects ( JXInputField* searchInput, JXStringHistoryMenu* prevSearchMenu, JXTextCheckbox* ignoreCaseCB, JXTextCheckbox* entireWordCB, JXTextCheckbox* wrapSearchCB, JXTextCheckbox* searchIsRegexCB, JXTextCheckbox* singleLineCB, JXInputField* replaceInput, JXStringHistoryMenu* prevReplaceMenu, JXTextCheckbox* replaceIsRegexCB, JXTextCheckbox* preserveCaseCB, JXTextCheckbox* stayOpenCB, JXTextCheckbox* retainFocusCB, JXSearchTextButton* findFwdButton, JXSearchTextButton* findBackButton, JXTextButton* replaceButton, JXSearchTextButton* replaceFindFwdButton, JXSearchTextButton* replaceFindBackButton, JXSearchTextButton* replaceAllFwdButton, JXSearchTextButton* replaceAllBackButton, JXTextButton* replaceAllInSelButton, JXTextButton* closeButton, JXTextButton* helpButton, JXTextButton* qRefButton ) { JXWindow* window = searchInput->GetWindow(); window->SetTitle("Search text"); window->SetCloseAction(JXWindow::kDeactivateDirector); window->PlaceAsDialogWindow(); window->LockCurrentMinSize(); window->ShouldFocusWhenShow(kJTrue); ListenTo(window); itsSearchInput = searchInput; itsPrevSearchMenu = prevSearchMenu; itsIgnoreCaseCB = ignoreCaseCB; itsEntireWordCB = entireWordCB; itsWrapSearchCB = wrapSearchCB; itsSearchIsRegexCB = searchIsRegexCB; itsSingleLineCB = singleLineCB; itsReplaceInput = replaceInput; itsPrevReplaceMenu = prevReplaceMenu; itsReplaceIsRegexCB = replaceIsRegexCB; itsPreserveCaseCB = preserveCaseCB; itsStayOpenCB = stayOpenCB; itsRetainFocusCB = retainFocusCB; itsFindFwdButton = findFwdButton; itsFindBackButton = findBackButton; itsReplaceButton = replaceButton; itsReplaceFindFwdButton = replaceFindFwdButton; itsReplaceFindBackButton = replaceFindBackButton; itsReplaceAllFwdButton = replaceAllFwdButton; itsReplaceAllBackButton = replaceAllBackButton; itsReplaceAllInSelButton = replaceAllInSelButton; itsCloseButton = closeButton; itsHelpButton = helpButton; itsQRefButton = qRefButton; SetFont(JGetMonospaceFontName(), kJDefaultMonoFontSize); // decor const JRect wFrame = window->GetFrame(); const JRect soFrame = itsStayOpenCB->GetFrame(); JXDownRect* line = new JXDownRect(window, JXWidget::kFixedLeft, JXWidget::kFixedTop, soFrame.left, soFrame.top-6, wFrame.right-10-soFrame.left, 2); assert( line != NULL ); line->SetBorderWidth(1); // shortcuts itsCloseButton->SetShortcuts("#W^["); itsIgnoreCaseCB->SetShortcuts("#I"); itsWrapSearchCB->SetShortcuts("#S"); itsEntireWordCB->SetShortcuts("#E"); itsSearchIsRegexCB->SetShortcuts("#X"); itsSingleLineCB->SetShortcuts("#T"); itsPreserveCaseCB->SetShortcuts("#P"); if (JXMenu::GetDefaultStyle() == JXMenu::kMacintoshStyle) { itsFindFwdButton->SetShortcuts("#G"); itsFindFwdButton->SetHint("Return / Meta-G"); itsFindBackButton->SetHint("Shift-Return / Meta-Shift-G"); itsReplaceButton->SetShortcuts("#R#="); itsReplaceButton->SetHint("Meta-R / Meta-="); itsReplaceFindFwdButton->SetShortcuts("#L"); itsReplaceFindFwdButton->SetHint("Meta-L"); itsReplaceFindBackButton->SetHint("Meta-Shift-L"); } else { itsFindFwdButton->SetShortcuts("^G"); itsFindFwdButton->SetHint("Return / Ctrl-G"); itsFindBackButton->SetHint("Shift-Return / Ctrl-Shift-G"); itsReplaceButton->SetShortcuts("#R^="); itsReplaceButton->SetHint("Meta-R / Ctrl-="); itsReplaceFindFwdButton->SetShortcuts("^L"); itsReplaceFindFwdButton->SetHint("Ctrl-L"); itsReplaceFindBackButton->SetHint("Ctrl-Shift-L"); } JXKeyModifiers modifiers(GetDisplay()); window->InstallShortcut(itsFindFwdButton, JXCtrl('M'), modifiers); modifiers.SetState(kJXShiftKeyIndex, kJTrue); window->InstallShortcut(itsFindBackButton, JXCtrl('M'), modifiers); modifiers.SetState(kJXMetaKeyIndex, kJTrue); itsReplaceIsRegexCB->SetShortcuts("#X"); // trick to underline x window->ClearShortcuts(itsReplaceIsRegexCB); window->InstallShortcut(itsReplaceIsRegexCB, 'x', modifiers); window->InstallShortcut(itsReplaceIsRegexCB, 'X', modifiers); if (JXMenu::GetDefaultStyle() != JXMenu::kMacintoshStyle) { modifiers.SetState(kJXMetaKeyIndex, kJFalse); modifiers.SetState(kJXControlKeyIndex, kJTrue); } window->InstallShortcut(itsFindBackButton, 'g', modifiers); window->InstallShortcut(itsFindBackButton, 'G', modifiers); window->InstallShortcut(itsReplaceFindBackButton, 'l', modifiers); window->InstallShortcut(itsReplaceFindBackButton, 'L', modifiers); // broadcasters ListenTo(itsFindFwdButton); ListenTo(itsFindBackButton); ListenTo(itsReplaceButton); ListenTo(itsReplaceFindFwdButton); ListenTo(itsReplaceFindBackButton); ListenTo(itsReplaceAllFwdButton); ListenTo(itsReplaceAllBackButton); ListenTo(itsReplaceAllInSelButton); ListenTo(itsHelpButton); ListenTo(itsQRefButton); ListenTo(itsCloseButton); ListenTo(itsPrevSearchMenu); ListenTo(itsPrevReplaceMenu); itsIgnoreCaseCB->SetState(kJTrue); itsWrapSearchCB->SetState(kJTrue); itsStayOpenCB->SetState(kJTrue); itsRetainFocusCB->SetState(kJTrue); // listen after setting value ListenTo(itsStayOpenCB); // XSearch data itsSearchInput->ShouldBroadcastAllTextChanged(kJTrue); ListenTo(itsSearchInput); ListenTo(itsSearchIsRegexCB); ListenTo(itsSingleLineCB); itsReplaceInput->ShouldBroadcastAllTextChanged(kJTrue); ListenTo(itsReplaceInput); ListenTo(itsReplaceIsRegexCB); ListenTo(itsPreserveCaseCB); ListenTo(itsWrapSearchCB); ListenTo(itsEntireWordCB); ListenTo(itsIgnoreCaseCB); }
void CBSearchTextDialog::BuildWindow() { // begin JXLayout JXWindow* window = jnew JXWindow(this, 450,470, ""); assert( window != NULL ); JXStaticText* replaceLabel = jnew JXStaticText(JGetString("replaceLabel::CBSearchTextDialog::JXLayout"), window, JXWidget::kHElastic, JXWidget::kFixedTop, 20,101, 220,20); assert( replaceLabel != NULL ); replaceLabel->SetToLabel(); JXStaticText* searchLabel = jnew JXStaticText(JGetString("searchLabel::CBSearchTextDialog::JXLayout"), window, JXWidget::kHElastic, JXWidget::kFixedTop, 20,31, 220,20); assert( searchLabel != NULL ); searchLabel->SetToLabel(); JXInputField* searchInput = jnew JXInputField(kJTrue, kJFalse, window, JXWidget::kHElastic, JXWidget::kFixedTop, 20,50, 220,40); assert( searchInput != NULL ); JXInputField* replaceInput = jnew JXInputField(kJTrue, kJFalse, window, JXWidget::kHElastic, JXWidget::kFixedTop, 20,120, 220,40); assert( replaceInput != NULL ); JXTextButton* closeButton = jnew JXTextButton(JGetString("closeButton::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedBottom, 320,440, 80,20); assert( closeButton != NULL ); JXTextCheckbox* ignoreCaseCB = jnew JXTextCheckbox(JGetString("ignoreCaseCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,180, 130,20); assert( ignoreCaseCB != NULL ); JXTextCheckbox* wrapSearchCB = jnew JXTextCheckbox(JGetString("wrapSearchCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,240, 130,20); assert( wrapSearchCB != NULL ); JXTextButton* replaceButton = jnew JXTextButton(JGetString("replaceButton::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 300,50, 140,20); assert( replaceButton != NULL ); JXTextCheckbox* entireWordCB = jnew JXTextCheckbox(JGetString("entireWordCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,210, 130,20); assert( entireWordCB != NULL ); JXStringHistoryMenu* prevReplaceMenu = jnew JXStringHistoryMenu(kHistoryLength, "", window, JXWidget::kFixedRight, JXWidget::kFixedTop, 250,130, 30,20); assert( prevReplaceMenu != NULL ); JXStringHistoryMenu* prevSearchMenu = jnew JXStringHistoryMenu(kHistoryLength, "", window, JXWidget::kFixedRight, JXWidget::kFixedTop, 250,60, 30,20); assert( prevSearchMenu != NULL ); JXTextButton* helpButton = jnew JXTextButton(JGetString("helpButton::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedBottom, 60,440, 80,20); assert( helpButton != NULL ); helpButton->SetShortcuts(JGetString("helpButton::CBSearchTextDialog::shortcuts::JXLayout")); JXTextCheckbox* searchIsRegexCB = jnew JXTextCheckbox(JGetString("searchIsRegexCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 160,180, 150,20); assert( searchIsRegexCB != NULL ); JXTextCheckbox* replaceIsRegexCB = jnew JXTextCheckbox(JGetString("replaceIsRegexCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 320,180, 110,20); assert( replaceIsRegexCB != NULL ); JXTextCheckbox* singleLineCB = jnew JXTextCheckbox(JGetString("singleLineCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 160,210, 150,20); assert( singleLineCB != NULL ); JXTextCheckbox* preserveCaseCB = jnew JXTextCheckbox(JGetString("preserveCaseCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 320,210, 110,20); assert( preserveCaseCB != NULL ); JXTextButton* qRefButton = jnew JXTextButton(JGetString("qRefButton::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedBottom, 190,440, 80,20); assert( qRefButton != NULL ); itsMultifileCB = jnew JXTextCheckbox(JGetString("itsMultifileCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,360, 100,20); assert( itsMultifileCB != NULL ); itsMultifileCB->SetShortcuts(JGetString("itsMultifileCB::CBSearchTextDialog::shortcuts::JXLayout")); JXScrollbarSet* scrollbarSet = jnew JXScrollbarSet(window, JXWidget::kHElastic, JXWidget::kVElastic, 140,360, 300,60); assert( scrollbarSet != NULL ); JXStaticText* findLabel = jnew JXStaticText(JGetString("findLabel::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 320,20, 100,20); assert( findLabel != NULL ); findLabel->SetToLabel(kJTrue); JXSearchTextButton* findBackButton = jnew JXSearchTextButton(kJFalse, window, JXWidget::kFixedRight, JXWidget::kFixedTop, 300,20, 20,20); assert( findBackButton != NULL ); JXSearchTextButton* findFwdButton = jnew JXSearchTextButton(kJTrue, window, JXWidget::kFixedRight, JXWidget::kFixedTop, 420,20, 20,20); assert( findFwdButton != NULL ); JXStaticText* replaceFindLabel = jnew JXStaticText(JGetString("replaceFindLabel::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 320,80, 100,20); assert( replaceFindLabel != NULL ); replaceFindLabel->SetToLabel(kJTrue); JXSearchTextButton* replaceFindBackButton = jnew JXSearchTextButton(kJFalse, window, JXWidget::kFixedRight, JXWidget::kFixedTop, 300,80, 20,20); assert( replaceFindBackButton != NULL ); JXSearchTextButton* replaceFindFwdButton = jnew JXSearchTextButton(kJTrue, window, JXWidget::kFixedRight, JXWidget::kFixedTop, 420,80, 20,20); assert( replaceFindFwdButton != NULL ); JXStaticText* replaceAllLabel = jnew JXStaticText(JGetString("replaceAllLabel::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 320,110, 100,20); assert( replaceAllLabel != NULL ); replaceAllLabel->SetToLabel(kJTrue); JXSearchTextButton* replaceAllBackButton = jnew JXSearchTextButton(kJFalse, window, JXWidget::kFixedRight, JXWidget::kFixedTop, 300,110, 20,20); assert( replaceAllBackButton != NULL ); JXSearchTextButton* replaceAllFwdButton = jnew JXSearchTextButton(kJTrue, window, JXWidget::kFixedRight, JXWidget::kFixedTop, 420,110, 20,20); assert( replaceAllFwdButton != NULL ); JXTextButton* replaceAllInSelButton = jnew JXTextButton(JGetString("replaceAllInSelButton::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 300,140, 140,20); assert( replaceAllInSelButton != NULL ); JXTextCheckbox* stayOpenCB = jnew JXTextCheckbox(JGetString("stayOpenCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 160,240, 150,20); assert( stayOpenCB != NULL ); JXTextCheckbox* retainFocusCB = jnew JXTextCheckbox(JGetString("retainFocusCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 320,240, 110,20); assert( retainFocusCB != NULL ); itsFileListMenu = jnew JXTextMenu(JGetString("itsFileListMenu::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 30,390, 90,30); assert( itsFileListMenu != NULL ); itsSearchDirCB = jnew JXTextCheckbox(JGetString("itsSearchDirCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,270, 130,20); assert( itsSearchDirCB != NULL ); itsSearchDirCB->SetShortcuts(JGetString("itsSearchDirCB::CBSearchTextDialog::shortcuts::JXLayout")); itsDirInput = jnew JXPathInput(window, JXWidget::kHElastic, JXWidget::kFixedTop, 150,270, 190,20); assert( itsDirInput != NULL ); JXStaticText* filterLabel = jnew JXStaticText(JGetString("filterLabel::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 50,300, 100,20); assert( filterLabel != NULL ); filterLabel->SetToLabel(); itsDirHistory = jnew CBSearchPathHistoryMenu(kHistoryLength, "", window, JXWidget::kFixedRight, JXWidget::kFixedTop, 340,270, 30,20); assert( itsDirHistory != NULL ); itsFileFilterInput = jnew JXInputField(window, JXWidget::kHElastic, JXWidget::kFixedTop, 150,300, 190,20); assert( itsFileFilterInput != NULL ); itsFileFilterHistory = jnew CBSearchFilterHistoryMenu(kHistoryLength, "", window, JXWidget::kFixedRight, JXWidget::kFixedTop, 340,300, 30,20); assert( itsFileFilterHistory != NULL ); itsRecurseDirCB = jnew JXTextCheckbox(JGetString("itsRecurseDirCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 40,330, 215,20); assert( itsRecurseDirCB != NULL ); itsChooseDirButton = jnew JXTextButton(JGetString("itsChooseDirButton::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 380,270, 60,20); assert( itsChooseDirButton != NULL ); itsInvertFileFilterCB = jnew JXTextCheckbox(JGetString("itsInvertFileFilterCB::CBSearchTextDialog::JXLayout"), window, JXWidget::kFixedRight, JXWidget::kFixedTop, 380,300, 60,20); assert( itsInvertFileFilterCB != NULL ); itsPathFilterInput = jnew JXInputField(window, JXWidget::kHElastic, JXWidget::kFixedTop, 255,330, 155,20); assert( itsPathFilterInput != NULL ); itsPathFilterHistory = jnew CBSearchFilterHistoryMenu(kHistoryLength, "", window, JXWidget::kFixedRight, JXWidget::kFixedTop, 410,330, 30,20); assert( itsPathFilterHistory != NULL ); // end JXLayout SetObjects(searchInput, prevSearchMenu, ignoreCaseCB, entireWordCB, wrapSearchCB, searchIsRegexCB, singleLineCB, replaceInput, prevReplaceMenu, replaceIsRegexCB, preserveCaseCB, stayOpenCB, retainFocusCB, findFwdButton, findBackButton, replaceButton, replaceFindFwdButton, replaceFindBackButton, replaceAllFwdButton, replaceAllBackButton, replaceAllInSelButton, closeButton, helpButton, qRefButton); ListenTo(itsSearchDirCB); ListenTo(itsDirInput); ListenTo(itsMultifileCB); itsFileList = jnew JXFileListTable(scrollbarSet, scrollbarSet->GetScrollEnclosure(), JXWidget::kHElastic, JXWidget::kVElastic, 0,0, 10,10); assert( itsFileList != NULL ); itsFileList->FitToEnclosure(); itsFileList->ShouldAcceptFileDrop(); itsFileList->BackspaceShouldRemoveSelectedFiles(); ListenTo(itsFileList); itsFileListMenu->SetMenuItems(kFileListMenuStr, "CBSearchTextDialog"); ListenTo(itsFileListMenu); ListenTo(itsChooseDirButton); ListenTo(itsDirHistory); ListenTo(itsFileFilterHistory); ListenTo(itsPathFilterHistory); const JFont& font = window->GetFontManager()->GetDefaultMonospaceFont(); itsDirInput->ShouldAllowInvalidPath(); itsDirHistory->SetDefaultFont(font, kJTrue); itsFileFilterInput->SetDefaultFont(font); itsFileFilterHistory->SetDefaultFont(font, kJTrue); itsPathFilterInput->SetDefaultFont(font); itsPathFilterHistory->SetDefaultFont(font, kJTrue); itsRecurseDirCB->SetState(kJTrue); UpdateBasePath(); ListenTo(CBGetDocumentManager()); CBPrefsManager* prefsMgr = CBGetPrefsManager(); JPrefObject::ReadPrefs(); JString fontName; JSize fontSize; prefsMgr->GetDefaultFont(&fontName, &fontSize); SetFont(fontName, fontSize); searchInput->SetCharacterInWordFunction(CBMIsCharacterInWord); replaceInput->SetCharacterInWordFunction(CBMIsCharacterInWord); // create hidden JXDocument so Meta-# shortcuts work JXDocumentMenu* fileListMenu = jnew JXDocumentMenu("", window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 0,-20, 10,10); assert( fileListMenu != NULL ); // decor const JRect wFrame = window->GetFrame(); const JRect cbFrame = itsSearchDirCB->GetFrame(); JXDownRect* line = jnew JXDownRect(window, JXWidget::kFixedLeft, JXWidget::kFixedTop, cbFrame.left, cbFrame.top-6, wFrame.right-10-cbFrame.left, 2); assert( line != NULL ); line->SetBorderWidth(1); }