// ---------------------------------------------------------------------------- void clKeyboardManager::GetAllAccelerators(MenuItemDataMap_t& accels) const // ---------------------------------------------------------------------------- { accels.clear(); accels.insert(m_menuTable.begin(), m_menuTable.end()); accels.insert(m_globalTable.begin(), m_globalTable.end()); }
// ---------------------------------------------------------------------------- MenuItemDataMap_t clKeyboardManager::DoLoadDefaultAccelerators() // ---------------------------------------------------------------------------- { MenuItemDataMap_t entries; wxFileName fnDefaultOldSettings(wxStandardPaths::Get().GetTempDir(), _T("keyMnuAccels.conf")); wxString personality = Manager::Get()->GetPersonalityManager()->GetPersonality(); fnDefaultOldSettings.SetName(personality + _T(".") + fnDefaultOldSettings.GetName()); if(fnDefaultOldSettings.FileExists()) { wxString content; if(not ReadFileContent(fnDefaultOldSettings, content)) { return entries; } wxArrayString lines = ::wxStringTokenize(content, _T("\r\n"), wxTOKEN_STRTOK); for(size_t i = 0; i < lines.GetCount(); ++i) { wxArrayString parts = ::wxStringTokenize(lines.Item(i), _T("|"), wxTOKEN_RET_EMPTY); //-if(parts.GetCount() < 3) continue; //(pecan 2019/04/27) if(parts.GetCount() < 2) continue; MenuItemData binding; binding.resourceID = parts.Item(0); binding.parentMenu = parts.Item(1); if (parts.GetCount() > 2) //(pecan 2019/04/27) binding.action = parts.Item(2); if(parts.GetCount() == 4) { binding.accel = parts.Item(3); } entries.insert(std::make_pair(binding.resourceID, binding)); } } return entries; }
// ---------------------------------------------------------------------------- void clKeyboardManager::Update(wxFrame* frame) // ---------------------------------------------------------------------------- { // Since we keep the accelerators with their original resource ID in the form of string // we need to convert the map into a different integer with integer as the resource ID // Note that we place the items from the m_menuTable first and then we add the globals // this is because menu entries takes precedence over global accelerators MenuItemDataMap_t accels = m_menuTable; accels.insert(m_globalTable.begin(), m_globalTable.end()); MenuItemDataIntMap_t intAccels; DoConvertToIntMap(accels, intAccels); if(!frame) { // update all frames wxFrame* topFrame = dynamic_cast<wxFrame*>(wxTheApp->GetTopWindow()); CHECK_PTR_RET(topFrame); FrameList_t frames; DoGetFrames(topFrame, frames); for(FrameList_t::iterator iter = frames.begin(); iter != frames.end(); ++iter) { DoUpdateFrame(*iter, intAccels); } } else { // update only the requested frame DoUpdateFrame(frame, intAccels); } }
void AccelTableDlg::PopulateTable(const wxString& filter) { m_dvListCtrl->DeleteAllItems(); MenuItemDataMap_t filteredMap; if(filter.IsEmpty()) { filteredMap = m_accelMap; } else { for(MenuItemDataMap_t::iterator iter = m_accelMap.begin(); iter != m_accelMap.end(); ++iter) { if(!IsMatchesFilter(filter, iter->second)) continue; filteredMap.insert(std::make_pair(iter->first, iter->second)); } } if(filteredMap.empty()) return; // Add core entries for(MenuItemDataMap_t::const_iterator iter = filteredMap.begin(); iter != filteredMap.end(); ++iter) { const MenuItemData& mid = iter->second; wxVector<wxVariant> cols; wxString parentMenu = mid.parentMenu.BeforeFirst(':'); if(parentMenu.IsEmpty()) { parentMenu = "<Global>"; } cols.push_back(parentMenu); // Parent menu cols.push_back(mid.action.AfterLast(':')); // Action description cols.push_back(mid.accel); // shortcut m_dvListCtrl->AppendItem(cols, (wxUIntPtr) new AccelItemData(mid)); } m_dvListCtrl->GetColumn(0)->SetSortable(true); m_dvListCtrl->GetColumn(1)->SetSortable(true); m_dvListCtrl->GetColumn(2)->SetSortable(true); }