diff options
-rw-r--r-- | basctl/source/basicide/baside2b.cxx | 56 | ||||
-rw-r--r-- | basic/source/classes/codecompletecache.cxx | 2 | ||||
-rw-r--r-- | basic/source/classes/sbxmod.cxx | 5 | ||||
-rw-r--r-- | basic/source/comp/parser.cxx | 1 | ||||
-rw-r--r-- | basic/source/comp/token.cxx | 21 | ||||
-rw-r--r-- | basic/source/inc/token.hxx | 1 | ||||
-rw-r--r-- | cui/source/options/optbasic.cxx | 14 | ||||
-rw-r--r-- | cui/source/options/optbasic.hxx | 2 | ||||
-rw-r--r-- | cui/uiconfig/ui/optbasicidepage.ui | 5 | ||||
-rw-r--r-- | include/basic/sbmod.hxx | 1 | ||||
-rw-r--r-- | officecfg/registry/schema/org/openoffice/Office/BasicIDE.xcs | 4 |
11 files changed, 87 insertions, 25 deletions
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx index 0b0448196bb2..90f49a5bedae 100644 --- a/basctl/source/basicide/baside2b.cxx +++ b/basctl/source/basicide/baside2b.cxx @@ -536,8 +536,7 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt ) HandleProcedureCompletition(); } - if( rKEvt.GetKeyCode().GetCode() == KEY_POINT && - (CodeCompleteOptions::IsCodeCompleteOn() || CodeCompleteOptions::IsExtendedTypeDeclaration()) ) + if( rKEvt.GetKeyCode().GetCode() == KEY_POINT && CodeCompleteOptions::IsCodeCompleteOn() ) { HandleCodeCompletition(); } @@ -602,9 +601,13 @@ void EditorWindow::HandleAutoCorrect() OUString sStr = aLine.copy(r.nBegin, r.nEnd - r.nBegin); if( !sStr.isEmpty() ) { - //capitalize first letter and replace sStr = sStr.toAsciiLowerCase(); - sStr = sStr.replaceAt( 0, 1, OUString(sStr[0]).toAsciiUpperCase() ); + if( !rModulWindow.GetSbModule()->GetKeywordCase(sStr).isEmpty() ) + // if it is a keyword, get its correct case + sStr = rModulWindow.GetSbModule()->GetKeywordCase(sStr); + else + // else capitalize first letter/select the correct one, and replace + sStr = sStr.replaceAt( 0, 1, OUString(sStr[0]).toAsciiUpperCase() ); TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sStr.getLength() ); TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex())); @@ -690,13 +693,17 @@ void EditorWindow::HandleProcedureCompletition() return;// no sub/function keyword or there is no identifier OUString sText("\nEnd "); + aSel = GetEditView()->GetSelection(); if( sProcType.equalsIgnoreAsciiCase("function") ) sText += OUString( "Function\n" ); if( sProcType.equalsIgnoreAsciiCase("sub") ) sText += OUString( "Sub\n" ); if( nLine+1 == pEditEngine->GetParagraphCount() ) + { pEditView->InsertText( sText );//append to the end + GetEditView()->SetSelection(aSel); + } else { for( sal_uLong i = nLine+1; i < pEditEngine->GetParagraphCount(); ++i ) @@ -714,7 +721,8 @@ void EditorWindow::HandleProcedureCompletition() { if( sStr.equalsIgnoreAsciiCase("sub") || sStr.equalsIgnoreAsciiCase("function") ) { - pEditView->InsertText( sText ); + pEditView->InsertText( sText );//append to the end + GetEditView()->SetSelection(aSel); break; } if( sStr.equalsIgnoreAsciiCase("end") ) @@ -735,15 +743,16 @@ void EditorWindow::HandleCodeCompletition() std::vector< OUString > aVect; //vector to hold the base variable+methods for the nested reflection HighlightPortions aPortions; + aLine = aLine.copy(0, aSel.GetEnd().GetIndex()); aHighlighter.getHighlightPortions( nLine, aLine, aPortions ); if( aPortions.size() > 0 ) {//use the syntax highlighter to grab out nested reflection calls, eg. aVar.aMethod("aa").aOtherMethod .. - for( auto aIt = aPortions.crbegin(); aIt != aPortions.crend(); ++aIt ) + for( HighlightPortions::reverse_iterator aIt = aPortions.rbegin(); aIt != aPortions.rend(); ++aIt ) { HighlightPortion r = *aIt; - if( r.tokenType == 2 ) // a whitespace: stop; if there is no ws, it goes to the beginning of the line + if( r.tokenType == TT_WHITESPACE ) // a whitespace: stop; if there is no ws, it goes to the beginning of the line break; - if( r.tokenType == 1 || r.tokenType == 9 ) // extract the identifers(methods, base variable) + if( r.tokenType == TT_IDENTIFIER || r.tokenType == TT_KEYWORDS ) // extract the identifers(methods, base variable) /* an example: Dim aLocVar2 as com.sun.star.beans.PropertyValue * here, aLocVar2.Name, and PropertyValue's Name field is treated as a keyword(?!) * */ @@ -2609,19 +2618,43 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt ) case KEY_ESCAPE: // hide, do nothing HideAndRestoreFocus(); break; + case KEY_RIGHT: + { + TextSelection aTextSelection( GetParentEditView()->GetSelection() ); + if( aTextSelection.GetEnd().GetPara() != pCodeCompleteWindow->GetTextSelection().GetEnd().GetPara() ) + { + HideAndRestoreFocus(); + } + break; + } + case KEY_LEFT: + { + TextSelection aTextSelection( GetParentEditView()->GetSelection() ); + if( aTextSelection.GetStart().GetIndex()-1 < pCodeCompleteWindow->GetTextSelection().GetStart().GetIndex() ) + {//leave the cursor where it is + pCodeCompleteWindow->Hide(); + pCodeCompleteWindow->pParent->GrabFocus(); + } + break; + } case KEY_TAB: + { + TextPaM aTextEnd( GetParentEditView()->CursorEndOfLine(pCodeCompleteWindow->GetTextSelection().GetEnd()) ); + TextSelection aTextSelection( pCodeCompleteWindow->GetTextSelection().GetStart(), aTextEnd ); + OUString sTypedText = pCodeCompleteWindow->pParent->GetEditEngine()->GetText(aTextSelection); if( !aFuncBuffer.isEmpty() ) { sal_uInt16 nInd = GetSelectEntryPos(); - if( nInd+1 != LISTBOX_ENTRY_NOTFOUND ) + if( nInd != LISTBOX_ENTRY_NOTFOUND ) {//if there is something selected bool bFound = false; if( nInd == GetEntryCount() ) nInd = 0; - for( sal_uInt16 i = nInd+1; i != GetEntryCount(); ++i ) + for( sal_uInt16 i = nInd; i != GetEntryCount(); ++i ) { OUString sEntry = (OUString) GetEntry(i); - if( sEntry.startsWithIgnoreAsciiCase( aFuncBuffer.toString() ) ) + if( sEntry.startsWithIgnoreAsciiCase( aFuncBuffer.toString() ) + && (aFuncBuffer.toString() != sTypedText) && (i != nInd) ) { SelectEntry( sEntry ); bFound = true; @@ -2638,6 +2671,7 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt ) } } break; + } case KEY_SPACE: HideAndRestoreFocus(); break; diff --git a/basic/source/classes/codecompletecache.cxx b/basic/source/classes/codecompletecache.cxx index 172954331cf4..999c3241eb50 100644 --- a/basic/source/classes/codecompletecache.cxx +++ b/basic/source/classes/codecompletecache.cxx @@ -29,7 +29,7 @@ namespace CodeCompleteOptions::CodeCompleteOptions() { - bIsAutoCorrectKeywordsOn = officecfg::Office::BasicIDE::Autocomplete::AutoCorrectKeywords::get(); + bIsAutoCorrectKeywordsOn = officecfg::Office::BasicIDE::Autocomplete::AutoCorrect::get(); bIsAutoCloseParenthesisOn = officecfg::Office::BasicIDE::Autocomplete::AutocloseParenthesis::get(); bIsAutoCloseQuotesOn = officecfg::Office::BasicIDE::Autocomplete::AutocloseDoubleQuotes::get(); bIsProcedureAutoCompleteOn = officecfg::Office::BasicIDE::Autocomplete::AutocloseProc::get(); diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx index 053c13ed5ede..a3fa77931e1c 100644 --- a/basic/source/classes/sbxmod.cxx +++ b/basic/source/classes/sbxmod.cxx @@ -1832,6 +1832,11 @@ SbxArrayRef SbModule::GetMethods() return pMethods; } +OUString SbModule::GetKeywordCase( const OUString& sKeyword ) const +{ + return SbiParser::GetKeywordCase( sKeyword ); +} + bool SbModule::HasExeCode() { // And empty Image always has the Global Chain set up diff --git a/basic/source/comp/parser.cxx b/basic/source/comp/parser.cxx index e24f89b020a8..680f4dcd40cc 100644 --- a/basic/source/comp/parser.cxx +++ b/basic/source/comp/parser.cxx @@ -155,7 +155,6 @@ SbiParser::SbiParser( StarBASIC* pb, SbModule* pm ) } - // part of the runtime-library? SbiSymDef* SbiParser::CheckRTLForSym( const OUString& rSym, SbxDataType eType ) { diff --git a/basic/source/comp/token.cxx b/basic/source/comp/token.cxx index 57614271c857..a2df363308f6 100644 --- a/basic/source/comp/token.cxx +++ b/basic/source/comp/token.cxx @@ -547,4 +547,25 @@ bool SbiTokenizer::MayBeLabel( bool bNeedsColon ) } } + +OUString SbiTokenizer::GetKeywordCase( const OUString& sKeyword ) +{ + if( !nToken ) + { + TokenTable *tp; + for( nToken = 0, tp = pTokTable; tp->t; nToken++, tp++ ) + {} + } + TokenTable* tp = pTokTable; + for( short i = 0; i < nToken; i++, tp++ ) + { + OUString sStr = OStringToOUString(tp->s, RTL_TEXTENCODING_ASCII_US); + if( sStr.equalsIgnoreAsciiCase(sKeyword) ) + { + return sStr; + } + } + return OUString(""); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basic/source/inc/token.hxx b/basic/source/inc/token.hxx index 0ce9cf443f58..cf127bc798f2 100644 --- a/basic/source/inc/token.hxx +++ b/basic/source/inc/token.hxx @@ -167,6 +167,7 @@ public: { return t >= FIRSTKWD && t <= LASTKWD; } static bool IsExtra( SbiToken t ) { return t >= FIRSTEXTRA; } + static OUString GetKeywordCase( const OUString& sKeyword ); }; diff --git a/cui/source/options/optbasic.cxx b/cui/source/options/optbasic.cxx index 93d8fc58c3e2..717f526854d2 100644 --- a/cui/source/options/optbasic.cxx +++ b/cui/source/options/optbasic.cxx @@ -39,7 +39,7 @@ SvxBasicIDEOptionsPage::SvxBasicIDEOptionsPage( Window* pParent, const SfxItemSe get(pAutocloseProcChk, "autoclose_proc"); get(pAutocloseParenChk, "autoclose_paren"); get(pAutocloseQuotesChk, "autoclose_quotes"); - get(pAutoCorrectKeywordsChk, "autocorrect_keywords"); + get(pAutoCorrectChk, "autocorrect"); get(pUseExtendedTypesChk, "extendedtypes_enable"); LoadConfig(); @@ -57,13 +57,13 @@ void SvxBasicIDEOptionsPage::LoadConfig() bool bCodeCompleteOn = officecfg::Office::BasicIDE::Autocomplete::CodeComplete::get(); bool bParenClose = officecfg::Office::BasicIDE::Autocomplete::AutocloseParenthesis::get(); bool bQuoteClose = officecfg::Office::BasicIDE::Autocomplete::AutocloseDoubleQuotes::get(); - bool bCorrect = officecfg::Office::BasicIDE::Autocomplete::AutoCorrectKeywords::get(); + bool bCorrect = officecfg::Office::BasicIDE::Autocomplete::AutoCorrect::get(); pCodeCompleteChk->Check( bCodeCompleteOn ); pAutocloseProcChk->Check( bProcClose ); pAutocloseQuotesChk->Check( bQuoteClose ); pAutocloseParenChk->Check( bParenClose ); - pAutoCorrectKeywordsChk->Check( bCorrect ); + pAutoCorrectChk->Check( bCorrect ); pUseExtendedTypesChk->Check( bExtended ); } @@ -75,7 +75,7 @@ void SvxBasicIDEOptionsPage::SaveConfig() officecfg::Office::BasicIDE::Autocomplete::UseExtended::set( pUseExtendedTypesChk->IsChecked(), batch ); officecfg::Office::BasicIDE::Autocomplete::AutocloseParenthesis::set( pAutocloseParenChk->IsChecked(), batch ); officecfg::Office::BasicIDE::Autocomplete::AutocloseDoubleQuotes::set( pAutocloseQuotesChk->IsChecked(), batch ); - officecfg::Office::BasicIDE::Autocomplete::AutoCorrectKeywords::set( pAutoCorrectKeywordsChk->IsChecked(), batch ); + officecfg::Office::BasicIDE::Autocomplete::AutoCorrect::set( pAutoCorrectChk->IsChecked(), batch ); batch->commit(); } @@ -123,10 +123,10 @@ sal_Bool SvxBasicIDEOptionsPage::FillItemSet( SfxItemSet& /*rCoreSet*/ ) bModified = sal_True; } - if( pAutoCorrectKeywordsChk->IsChecked() != pAutoCorrectKeywordsChk->GetSavedValue() ) + if( pAutoCorrectChk->IsChecked() != pAutoCorrectChk->GetSavedValue() ) { boost::shared_ptr< comphelper::ConfigurationChanges > batch( comphelper::ConfigurationChanges::create() ); - officecfg::Office::BasicIDE::Autocomplete::AutoCorrectKeywords::set( pAutoCorrectKeywordsChk->IsChecked(), batch ); + officecfg::Office::BasicIDE::Autocomplete::AutoCorrect::set( pAutoCorrectChk->IsChecked(), batch ); batch->commit(); bModified = sal_True; } @@ -145,7 +145,7 @@ void SvxBasicIDEOptionsPage::Reset( const SfxItemSet& /*rSet*/ ) pAutocloseParenChk->SaveValue(); - pAutoCorrectKeywordsChk->SaveValue(); + pAutoCorrectChk->SaveValue(); pUseExtendedTypesChk->SaveValue(); } diff --git a/cui/source/options/optbasic.hxx b/cui/source/options/optbasic.hxx index 4265f57fc419..2ca482024e1f 100644 --- a/cui/source/options/optbasic.hxx +++ b/cui/source/options/optbasic.hxx @@ -31,7 +31,7 @@ private: CheckBox* pAutocloseProcChk; CheckBox* pAutocloseParenChk; CheckBox* pAutocloseQuotesChk; - CheckBox* pAutoCorrectKeywordsChk; + CheckBox* pAutoCorrectChk; CheckBox* pUseExtendedTypesChk; void LoadConfig(); diff --git a/cui/uiconfig/ui/optbasicidepage.ui b/cui/uiconfig/ui/optbasicidepage.ui index 3dde65f43dea..5785ca69beb3 100644 --- a/cui/uiconfig/ui/optbasicidepage.ui +++ b/cui/uiconfig/ui/optbasicidepage.ui @@ -126,11 +126,12 @@ </packing> </child> <child> - <object class="GtkCheckButton" id="autocorrect_keywords"> - <property name="label" translatable="yes">Autocorrect Keywords</property> + <object class="GtkCheckButton" id="autocorrect"> + <property name="label" translatable="yes">Autocorrection</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="relief">none</property> <property name="xalign">0</property> <property name="draw_indicator">True</property> </object> diff --git a/include/basic/sbmod.hxx b/include/basic/sbmod.hxx index 543a199b6c04..cdeeddf3267b 100644 --- a/include/basic/sbmod.hxx +++ b/include/basic/sbmod.hxx @@ -136,6 +136,7 @@ public: bool createCOMWrapperForIface( ::com::sun::star::uno::Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject ); void GetCodeCompleteDataFromParse(CodeCompleteDataCache& aCache); SbxArrayRef GetMethods(); + OUString GetKeywordCase( const OUString& sKeyword ) const; }; SV_DECL_IMPL_REF(SbModule) diff --git a/officecfg/registry/schema/org/openoffice/Office/BasicIDE.xcs b/officecfg/registry/schema/org/openoffice/Office/BasicIDE.xcs index 7aecd133a193..2d8ffc48d616 100644 --- a/officecfg/registry/schema/org/openoffice/Office/BasicIDE.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/BasicIDE.xcs @@ -56,9 +56,9 @@ </info> <value>false</value> </prop> - <prop oor:name="AutoCorrectKeywords" oor:type="xs:boolean" oor:nillable="false"> + <prop oor:name="AutoCorrect" oor:type="xs:boolean" oor:nillable="false"> <info> - <desc>Sets the auto correction of keywords on/off. Default is false.</desc> + <desc>Sets the auto correction of keywords, variables, etc. on/off. Default is false.</desc> </info> <value>false</value> </prop> |