void AbbreviationPlugin::InitDefaults() { // check to see if there are any abbreviations configured AbbreviationJSONEntry jsonData; if ( !m_config.ReadItem(&jsonData) ) { // merge the data from the old configuration AbbreviationEntry data; m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data); jsonData.SetAutoInsert( data.GetAutoInsert() ); jsonData.SetEntries( data.GetEntries() ); m_config.WriteItem( &jsonData ); } // search for the old item if (jsonData.GetEntries().empty()) { // fill some default abbreviations JSONElement::wxStringMap_t entries; entries[wxT("main")] = wxT("int main(int argc, char **argv) {\n |\n}\n"); entries[wxT("while")] = wxT("while ( | ) {\n \n}\n"); entries[wxT("dowhile")] = wxT("do {\n \n} while ( | );\n"); entries[wxT("for_size")] = wxT("for ( size_t i=0; i<|; ++i ) { \n}\n"); entries[wxT("for_int")] = wxT("for ( int i=0; i<|; ++i ) { \n}\n"); jsonData.SetEntries(entries); m_config.WriteItem( &jsonData ); } }
void AbbreviationPlugin::OnAbbreviations(wxCommandEvent& e) { IEditor *editor = m_mgr->GetActiveEditor(); if (!editor) { return; } AbbreviationJSONEntry jsonData; if ( !m_config.ReadItem( &jsonData ) ) { // merge the data from the old configuration AbbreviationEntry data; m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data); jsonData.SetAutoInsert( data.GetAutoInsert() ); jsonData.SetEntries( data.GetEntries() ); m_config.WriteItem( &jsonData ); } wxString wordAtCaret = editor->GetWordAtCaret(); bool autoInsert = (jsonData.IsAutoInsert() && wordAtCaret.IsEmpty() == false); if ( autoInsert ){ autoInsert = InsertExpansion(wordAtCaret); } if ( !autoInsert ) { static wxBitmap bmp = LoadBitmapFile(wxT("abbrev.png")) ; if (bmp.IsOk()) { editor->RegisterImageForKind(wxT("Abbreviation"), bmp); std::vector<TagEntryPtr> tags; // search for the old item const JSONElement::wxStringMap_t& entries = jsonData.GetEntries(); JSONElement::wxStringMap_t::const_iterator iter = entries.begin(); for (; iter != entries.end(); ++iter) { TagEntryPtr t(new TagEntry()); t->SetName(iter->first); t->SetKind(wxT("Abbreviation")); tags.push_back(t); } editor->ShowCompletionBox(tags, editor->GetWordAtCaret(), false, this); } } }
void AbbreviationPlugin::OnAbbreviations(wxCommandEvent& e) { IEditor* editor = m_mgr->GetActiveEditor(); if(!editor) { return; } AbbreviationJSONEntry jsonData; if(!m_config.ReadItem(&jsonData)) { // merge the data from the old configuration AbbreviationEntry data; m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data); jsonData.SetAutoInsert(data.GetAutoInsert()); jsonData.SetEntries(data.GetEntries()); m_config.WriteItem(&jsonData); } wxString wordAtCaret = editor->GetWordAtCaret(); bool autoInsert = (jsonData.IsAutoInsert() && wordAtCaret.IsEmpty() == false); if(autoInsert) { autoInsert = InsertExpansion(wordAtCaret); } if(!autoInsert) { static wxBitmap bmp = LoadBitmapFile(wxT("abbrev.png")); if(bmp.IsOk()) { wxCodeCompletionBoxEntry::Vec_t ccEntries; wxCodeCompletionBox::BmpVec_t bitmaps; bitmaps.push_back(bmp); // search for the old item const JSONElement::wxStringMap_t& entries = jsonData.GetEntries(); JSONElement::wxStringMap_t::const_iterator iter = entries.begin(); for(; iter != entries.end(); ++iter) { ccEntries.push_back(wxCodeCompletionBoxEntry::New(iter->first, 0)); } wxCodeCompletionBoxManager::Get().ShowCompletionBox( editor->GetCtrl(), ccEntries, bitmaps, wxCodeCompletionBox::kNone, wxNOT_FOUND, this); } } }
bool AbbreviationPlugin::InsertExpansion(const wxString& abbreviation) { // get the active editor IEditor *editor = m_mgr->GetActiveEditor(); if (!editor || !abbreviation) return false; // hide the completion box if (editor->IsCompletionBoxShown()) { editor->HideCompletionBox(); } // search for abbreviation that matches str // prepate list of abbreviations AbbreviationJSONEntry jsonData; if ( !m_config.ReadItem(&jsonData) ) { // merge the data from the old configuration AbbreviationEntry data; m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data); jsonData.SetAutoInsert( data.GetAutoInsert() ); jsonData.SetEntries( data.GetEntries() ); m_config.WriteItem( &jsonData ); } // search for the old item const JSONElement::wxStringMap_t& entries = jsonData.GetEntries(); JSONElement::wxStringMap_t::const_iterator iter = entries.find(abbreviation); if (iter != entries.end()) { wxString text = iter->second; int selStart = editor->WordStartPos(editor->GetCurrentPosition(), true); int selEnd = editor->WordEndPos(editor->GetCurrentPosition(), true); int curPos = editor->GetCurrentPosition(); int typedWordLen = curPos - selStart; if (typedWordLen < 0) { typedWordLen = 0; } // format the text to insert bool appendEol(false); if (text.EndsWith(wxT("\r")) || text.EndsWith(wxT("\n"))) { appendEol = true; } text = editor->FormatTextKeepIndent(text, selStart, Format_Text_Save_Empty_Lines); // remove the first line indenation that might have been placed by CL text.Trim(false).Trim(); if (appendEol) { wxString eol; switch (editor->GetEOL()) { case 1: eol = wxT("\r"); break; case 0: eol = wxT("\r\n"); break; case 2: eol = wxT("\n"); break; } text << eol; } //-------------------------------------------- // replace any place holders //-------------------------------------------- wxString project; text = MacroManager::Instance()->Expand(text, m_mgr, editor->GetProjectName()); // locate the caret int where = text.Find(wxT("|")); if (where == wxNOT_FOUND) { where = text.length(); } // remove the pipe (|) character text.Replace(wxT("|"), wxT("")); if (selEnd - selStart >= 0) { editor->SelectText(selStart, selEnd - selStart); editor->ReplaceSelection(text); editor->SetCaretAt(curPos + where - typedWordLen); } return true; } else return false; }