ultimatepp/uppsrc/ide/Navigator.cpp
cxl 0a45b27f8d theide: Navigator finetuning
git-svn-id: svn://ultimatepp.org/upp/trunk@1164 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2009-05-12 12:23:40 +00:00

136 lines
3.1 KiB
C++

#include "ide.h"
void AssistEditor::SyncNavigator()
{
if(IsNavigator()) {
browser.Load();
SyncCursor();
}
navigatorframe.Show(navigator);
}
void AssistEditor::SyncCursor()
{
String k = "(" + GetKeyDesc(IdeKeys::AK_SEARCHCODE().key[0]) + ") ";
browser.search.NullText(String("Find ") + k);
browser.search.Tip(IsNull(browser.search) ? String() : "Clear " + k);
// browser.clear.Tip(String("Clear (") + k);
if(IsNavigator()) {
int ii = GetCursorLine();
String coderef;
while(ii >= 0 && IsNull(coderef))
coderef = GetAnnotation(ii--);
browser.Goto(coderef, theide->editfile);
}
}
void AssistEditor::SelectionChanged()
{
CodeEditor::SelectionChanged();
SyncCursor();
SyncParamInfo();
}
void AssistEditor::BrowserGotoNF()
{
Value scope = browser.scope.GetKey(); // do not scroll browser.item erratically
int scopesc = browser.scope.GetScroll();
String item = browser.item.GetKey();
int itemsc = browser.item.GetScroll();
String cref = browser.GetCodeRef();
if(assist_active && !(theide && theide->SwapSIf(cref)))
theide->IdeGotoCodeRef(cref);
if(scope == browser.scope.GetKey()) {
browser.scope.ScrollTo(scopesc);
browser.scope.ScrollIntoCursor();
if(item == browser.item.GetKey()) {
browser.item.ScrollTo(itemsc);
browser.item.ScrollIntoCursor();
}
}
}
void AssistEditor::BrowserGoto()
{
BrowserGotoNF();
SetFocus();
}
void AssistEditor::GotoBrowserScope()
{
if(browser.scope.IsCursor()) {
Value x = browser.scope.Get(2);
if(IsNumber(x)) {
int file = (int)x;
theide->EditFile(GetCppFile(file));
return;
}
}
if(browser.item.GetCount()) {
browser.item.GoBegin();
BrowserGoto();
}
}
void AssistEditor::Navigator(bool nav)
{
navigator = nav;
navigatorframe.Show(navigator);
if(IsNavigator()) {
scope_item.Show();
browser.ClearSearch();
SetFocus();
}
SyncNavigator();
SyncCursor();
}
void AssistEditor::SerializeNavigator(Stream& s)
{
int version = 1;
s / version;
s % navigatorframe;
s % navigator;
if(version >= 1)
s % scope_item;
Navigator(navigator);
}
void Ide::ToggleNavigator()
{
editor.Navigator(!editor.navigator);
}
void Ide::SearchCode()
{
if(!editor.navigator)
editor.Navigator(true);
if(editor.browser.search.HasFocus() && editor.browser.IsSearch())
editor.browser.ClearSearch();
else {
String id = editor.GetI().ToString();
if(!IsNull(id)) {
editor.browser.search <<= Filter(id, SearchItemFilter);
editor.browser.search.SetSelection();
editor.browser.Load();
editor.browser.scope.GoBegin();
}
editor.browser.search.SetFocus();
}
}
void Ide::SwitchHeader() {
int c = filelist.GetCursor();
if(c < 0) return;
String currfile = filelist[c];
const char *ext = GetFileExtPos(currfile);
if(!stricmp(ext, ".h") || !stricmp(ext, ".hpp")
|| !stricmp(ext, ".lay") || !stricmp(ext, ".iml")) {
int f = filelist.Find(ForceExt(currfile, ".cpp"));
if(f < 0) f = filelist.Find(ForceExt(currfile, ".c"));
if(f < 0) f = filelist.Find(ForceExt(currfile, ".cc"));
if(f >= 0) filelist.SetCursor(f);
}
}