void SQLCommandPanel::SaveSqlHistory() { wxArrayString sqls = ParseSql( m_scintillaSQL->GetText() ); if ( sqls.IsEmpty() ) return; DbExplorerSettings s; clConfig conf(DBE_CONFIG_FILE); conf.ReadItem( &s ); const wxArrayString &history = s.GetSqlHistory(); // Append the current history to the new sqls (exclude dups) for(size_t i=0; i<history.GetCount(); ++i) { if ( sqls.Index(history.Item(i) ) == wxNOT_FOUND ) { sqls.Add( history.Item(i) ); } } // Truncate the buffer while( sqls.GetCount() > 15 ) { sqls.RemoveAt(sqls.GetCount()-1); } s.SetSqlHistory( sqls ); conf.WriteItem( &s ); }
void SQLCommandPanel::OnHistoryToolClicked(wxAuiToolBarEvent& event) { wxAuiToolBar* auibar = dynamic_cast<wxAuiToolBar*>(event.GetEventObject()); if ( auibar ) { clAuiToolStickness ts(auibar, event.GetToolId()); wxRect rect = auibar->GetToolRect(event.GetId()); wxPoint pt = auibar->ClientToScreen(rect.GetBottomLeft()); pt = ScreenToClient(pt); DbExplorerSettings settings; clConfig conf(DBE_CONFIG_FILE); conf.ReadItem(&settings); settings.GetRecentFiles(); wxArrayString sqls = settings.GetSqlHistory(); wxMenu menu; for(size_t i=0; i<sqls.GetCount(); ++i) { menu.Append(wxID_HIGHEST+i, sqls.Item(i)); } int pos = GetPopupMenuSelectionFromUser(menu, pt); if ( pos == wxID_NONE ) return; size_t index = pos - wxID_HIGHEST; if ( index > sqls.GetCount() ) return; m_scintillaSQL->SetText( sqls.Item(index) ); CallAfter( &SQLCommandPanel::ExecuteSql ); } }