void GotoFileList::UpdateList(const bool reloadAll) { const FileEntry* selEntry = GetSelectedAction(); const int topLine = GetFirstVisibleLine(); int selection = -1; const unsigned int startItem = reloadAll ? 0 : m_items.size(); // Insert new items if (m_searchText.empty()) { // Copy all actions to items m_items.resize(m_actions.size()); for (unsigned int i = startItem; i < m_actions.size(); ++i) { m_items[i].file_entry = m_actions[i]; m_items[i].hlChars.clear(); } } else { // Copy matching actions to items for (unsigned int i = m_actionCount; i < m_actions.size(); ++i) { if (m_tempEntry->path.empty() || m_actions[i]->path != m_tempEntry->path) AddFileIfMatching(m_searchText, m_actions[i]); } } // Sort the items if (startItem) { sort(m_items.begin() + startItem, m_items.end()); inplace_merge(m_items.begin(), m_items.begin() + startItem, m_items.end()); } else sort(m_items.begin(), m_items.end()); // Keep same selection if (selEntry) { for (unsigned int i = 0; i < m_items.size(); ++i) { if (m_items[i].file_entry == selEntry) { selection = i; break; } } } // Refresh and redraw listCtrl Freeze(); SetItemCount(m_items.size()); SetSelection(selection); if (selection == -1) ScrollToLine(topLine); else if (!IsVisible(selection)) ScrollToLine(selection); RefreshAll(); Thaw(); m_actionCount = m_actions.size(); }
void MiniStyledTextCtrl::MakeVisible(int from, int length) { ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("editor")); bool doscroll = cfg->ReadBool(_T("/mini_doc/sync_to_main_doc"), true); if (doscroll) ScrollToLine(from - (LinesOnScreen()-length)/2); }
// make this item visible void wxSymbolListCtrl::EnsureVisible(int item) { if (item != wxNOT_FOUND && item >= m_minSymbolValue && item <= m_maxSymbolValue) { ScrollToLine(SymbolValueToLineNumber(item)); } }
bool wxVScrolledWindow::ScrollPages(int pages) { bool didSomething = false; while ( pages ) { int line; if ( pages > 0 ) { line = GetVisibleEnd(); if ( line ) line--; pages--; } else // pages < 0 { line = FindFirstFromBottom(GetVisibleBegin()); pages++; } didSomething = ScrollToLine(line); } return didSomething; }
bool wxVScrolledWindow::ScrollLines(int lines) { lines += m_lineFirst; if ( lines < 0 ) lines = 0; return ScrollToLine(lines); }
bool wxSymbolListCtrl::DoSetCurrent(int current) { wxASSERT_MSG( current == wxNOT_FOUND || (current >= m_minSymbolValue && current <= m_maxSymbolValue), _T("wxSymbolListCtrl::DoSetCurrent(): invalid symbol value") ); if ( current == m_current ) { // nothing to do return false; } if ( m_current != wxNOT_FOUND ) RefreshLine(SymbolValueToLineNumber(m_current)); m_current = current; if ( m_current != wxNOT_FOUND ) { int lineNo = SymbolValueToLineNumber(m_current); // if the line is not visible at all, we scroll it into view but we // don't need to refresh it -- it will be redrawn anyhow if ( !IsVisible(lineNo) ) { ScrollToLine(lineNo); } else // line is at least partly visible { // it is, indeed, only partly visible, so scroll it into view to // make it entirely visible while ( unsigned(lineNo) == GetLastVisibleLine() && ScrollToLine(GetVisibleBegin()+1) ) ; // but in any case refresh it as even if it was only partly visible // before we need to redraw it entirely as its background changed RefreshLine(lineNo); } } return true; }
/// outputs text by appending and scrolling to the output line void OutputText(LPCTSTR pszText) { CStringA cszaText(pszText); SetReadOnly(false); AppendText(cszaText.GetString(), cszaText.GetLength()); SetReadOnly(true); ScrollToLine(GetLineCount()); }
void wxVScrolledWindow::OnScroll(wxScrollWinEvent& event) { size_t lineFirstNew; const wxEventType evtType = event.GetEventType(); if ( evtType == wxEVT_SCROLLWIN_TOP ) { lineFirstNew = 0; } else if ( evtType == wxEVT_SCROLLWIN_BOTTOM ) { lineFirstNew = m_lineMax; } else if ( evtType == wxEVT_SCROLLWIN_LINEUP ) { lineFirstNew = m_lineFirst ? m_lineFirst - 1 : 0; } else if ( evtType == wxEVT_SCROLLWIN_LINEDOWN ) { lineFirstNew = m_lineFirst + 1; } else if ( evtType == wxEVT_SCROLLWIN_PAGEUP ) { lineFirstNew = FindFirstFromBottom(m_lineFirst); } else if ( evtType == wxEVT_SCROLLWIN_PAGEDOWN ) { lineFirstNew = GetVisibleEnd(); if ( lineFirstNew ) lineFirstNew--; } else if ( evtType == wxEVT_SCROLLWIN_THUMBRELEASE ) { lineFirstNew = event.GetPosition(); } else if ( evtType == wxEVT_SCROLLWIN_THUMBTRACK ) { lineFirstNew = event.GetPosition(); } else // unknown scroll event? { wxFAIL_MSG( _T("unknown scroll event type?") ); return; } ScrollToLine(lineFirstNew); #ifdef __WXMAC__ Update(); #endif // __WXMAC__ }
bool wxVListBox::DoSetCurrent(int current) { wxASSERT_MSG( current == wxNOT_FOUND || (current >= 0 && (size_t)current < GetItemCount()), _T("wxVListBox::DoSetCurrent(): invalid item index") ); if ( current == m_current ) { // nothing to do return false; } if ( m_current != wxNOT_FOUND ) RefreshLine(m_current); m_current = current; if ( m_current != wxNOT_FOUND ) { // if the line is not visible at all, we scroll it into view but we // don't need to refresh it -- it will be redrawn anyhow if ( !IsVisible(m_current) ) { ScrollToLine(m_current); } else // line is at least partly visible { // it is, indeed, only partly visible, so scroll it into view to // make it entirely visible while ( (size_t)m_current == GetLastVisibleLine() && ScrollToLine(GetVisibleBegin()+1) ) ; // but in any case refresh it as even if it was only partly visible // before we need to redraw it entirely as its background changed RefreshLine(m_current); } } return true; }
void LuaSrcView::SetErrMark(int line) { if (actual_err_mark_line_ != -1) { GetCtrl().MarkerDelete(actual_err_mark_line_, MARKER_ERROR); } actual_err_mark_line_ = line; if (line != -1) { int h; ScrollToLine(line,h,TRUE); actual_err_mark_line_ = line; GetCtrl().MarkerAdd(line, MARKER_ERROR); } }
// initialise control from current min/max values void wxSymbolListCtrl::SetupCtrl(bool scrollToSelection) { wxSize sz = GetClientSize(); m_symbolsPerLine = sz.x/(m_cellSize.x+m_ptMargins.x); int noLines = (1 + SymbolValueToLineNumber(m_maxSymbolValue)); SetLineCount(noLines); Refresh(); if (scrollToSelection && m_current != wxNOT_FOUND && m_current >= m_minSymbolValue && m_current <= m_maxSymbolValue) { ScrollToLine(SymbolValueToLineNumber(m_current)); } }
// // Handle the wxEVT_LEFT_DOWN event // void KeyView::OnLeftDown(wxMouseEvent & event) { // Only check if for tree view if (mViewType != ViewByTree) { // Allow further processing (important for focus handling) event.Skip(); return; } // Get the mouse position when the button was pressed wxPoint pos = event.GetPosition(); // And see if it was on a line within the view int line = HitTest(pos); // It was on a line if (line != wxNOT_FOUND) { KeyNode *node = mLines[line]; // Toggle the open state if this is a parent node if (node->isparent) { // Toggle state node->isopen = !node->isopen; // Don't want the view to scroll vertically, so remember the current // top line. size_t topline = GetVisibleBegin(); // Refresh the view now that the number of lines have changed RefreshLines(); // Reset the original top line ScrollToLine(topline); // And make sure current line is still selected SelectNode(LineToIndex(line)); } } // Allow further processing (important for focus handling) event.Skip(); }
void wxRemotelyScrolledTreeCtrl::OnScroll(wxScrollWinEvent& event) { int orient = event.GetOrientation(); if (orient == wxHORIZONTAL) { event.Skip(); return; } ecScrolledWindow* scrollWin = GetScrolledWindow(); if (!scrollWin) return; int x, y; scrollWin->GetViewStart(& x, & y); ScrollToLine(-1, y); }
void CScrolledTreeCtrl::OnScroll(wxScrollWinEvent & event) { wxLogVerbose(wxT(" CScrolledTreeCtrl::OnScroll")); int orient = event.GetOrientation(); if (orient == wxHORIZONTAL) { event.Skip(); return; } wxScrolledWindow *scrollWin = GetScrolledWindow(); if (!scrollWin) return; int x, y; scrollWin->GetViewStart(&x, &y); wxLogVerbose(wxT(" CScrolledTreeCtrl -> ScrollToLine()")); ScrollToLine(-1, y); }
void LuaSrcView::SetPointer(int line, bool scroll) { const int P= MARKER_POINTER; if (actual_pointer_line_ != -1) { int tmp_line= actual_pointer_line_; GetCtrl().MarkerDelete(actual_pointer_line_, P); actual_pointer_line_ = -1; // EraseMark(tmp_line); // zmazanie starej strza³ki } actual_pointer_line_ = line; if (line != -1) { int h; ScrollToLine(line,h,TRUE); GetCtrl().MarkerAdd(line, P); } }
void wxVScrolledWindow::SetLineCount(size_t count) { // save the number of lines m_lineMax = count; // and our estimate for their total height m_heightTotal = EstimateTotalHeight(); // recalculate the scrollbars parameters if ( count ) { m_lineFirst = 1; // make sure it is != 0 ScrollToLine(0); } else // no items { RemoveScrollbar(); } }
void GotoFileList::Find(const wxString& searchtext, const std::map<wxString,wxString>& triggers) { m_tempEntry->Clear(); if (searchtext.empty()) { // Remove highlights m_searchText.clear(); SetSelection(-1); // de-select ScrollToLine(0); UpdateList(true); return; } // Convert to lower case for case insensitive search m_searchText = searchtext.Lower(); // Find all matching filenames m_items.clear(); std::vector<unsigned int> hlChars; for (unsigned int i = 0; i < m_actions.size(); ++i) AddFileIfMatching(m_searchText, m_actions[i]); sort(m_items.begin(), m_items.end()); // Check if we have a matching trigger int selection = FindMatchesAndSelection(triggers); // Update display Freeze(); SetItemCount(m_items.size()); if (m_items.empty()) SetSelection(-1); // deselect else if (selection != wxNOT_FOUND) SetSelection(selection); else SetSelection(0); RefreshAll(); Thaw(); }
void ScrollToHere(LPEDIT lp) { ScrollToLine(lp, lp->nCurFragment) ; ScrollToHPos(lp, HPosHere(lp)) ; }
// // Handle the wxEVT_KEY_DOWN event // void KeyView::OnKeyDown(wxKeyEvent & event) { int line = GetSelection(); int keycode = event.GetKeyCode(); switch (keycode) { // The LEFT key moves selection to parent or collapses selected // node if it is expanded. case WXK_LEFT: { // Nothing selected...nothing to do if (line == wxNOT_FOUND) { // Allow further processing event.Skip(); break; } KeyNode *node = mLines[line]; // Collapse the node if it is open if (node->isopen) { // No longer open node->isopen = false; // Don't want the view to scroll vertically, so remember the current // top line. size_t topline = GetVisibleBegin(); // Refresh the view now that the number of lines have changed RefreshLines(); // Reset the original top line ScrollToLine(topline); // And make sure current line is still selected SelectNode(LineToIndex(line)); } else { // Move selection to the parent of this node for (int i = line - 1; i >= 0; i--) { // Found the parent if (mLines[i]->depth < node->depth) { // So select it SelectNode(LineToIndex(i)); break; } } } // Further processing of the event is not wanted // (we didn't call event.Skip() } break; // The RIGHT key moves the selection to the first child or expands // the node if it is a parent. case WXK_RIGHT: { // Nothing selected...nothing to do if (line == wxNOT_FOUND) { // Allow further processing event.Skip(); break; } KeyNode *node = mLines[line]; // Only want parent nodes if (node->isparent) { // It is open so move select to first child if (node->isopen) { // But only if there is one if (line < (int) mLines.GetCount() - 1) { SelectNode(LineToIndex(line + 1)); } } else { // Node is now open node->isopen = true; // Don't want the view to scroll vertically, so remember the current // top line. size_t topline = GetVisibleBegin(); // Refresh the view now that the number of lines have changed RefreshLines(); // Reset the original top line ScrollToLine(topline); // And make sure current line is still selected SelectNode(LineToIndex(line)); } } // Further processing of the event is not wanted // (we didn't call event.Skip() } break; // Move selection to next node whose 1st character matches // the keycode default: { int cnt = (int) mLines.GetCount(); bool found = false; // Search the entire list if not is currently selected if (line == wxNOT_FOUND) { line = cnt; } else { // Search from the node following the current one for (int i = line + 1; i < cnt; i++) { wxString label; // Get the string to search based on view type if (mViewType == ViewByTree) { label = GetLabel(LineToIndex(i)); } else if (mViewType == ViewByName) { label = GetFullLabel(LineToIndex(i)); } else if (mViewType == ViewByKey) { label = GetKey(LineToIndex(i)); } // Move selection if they match if (label.Left(1).IsSameAs(keycode, false)) { SelectNode(LineToIndex(i)); found = true; break; } } } // A match wasn't found if (!found) { // So scan from the start of the list to the current node for (int i = 0; i < line; i++) { wxString label; // Get the string to search based on view type if (mViewType == ViewByTree) { label = GetLabel(LineToIndex(i)); } else if (mViewType == ViewByName) { label = GetFullLabel(LineToIndex(i)); } else if (mViewType == ViewByKey) { label = GetKey(LineToIndex(i)); } // Move selection if they match if (label.Left(1).IsSameAs(keycode, false)) { SelectNode(LineToIndex(i)); found = true; break; } } } // A node wasn't found so allow further processing if (!found) { event.Skip(); } // Otherwise, further processing of the event is not wanted // (we didn't call event.Skip() } } }
void MiniStyledTextCtrl::MakePositionVisible(int from, int length) { if (doScrollToPosition_) ScrollToLine(from - (LinesOnScreen()-length)/2); }