Refactored CodeNavigator, fixed wrong speed package icon problem in package list

git-svn-id: svn://ultimatepp.org/upp/trunk@1115 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2009-05-01 12:16:18 +00:00
parent f2fdc946c2
commit 729c010e74
14 changed files with 102 additions and 100 deletions

View file

@ -78,7 +78,7 @@ private:
struct NullFrameClass : public CtrlFrame {
virtual void FrameLayout(Rect& r);
virtual void FramePaint(Draw& draw, const Rect& r);
virtual void FramePaint(Draw& w, const Rect& r);
virtual void FrameAddSize(Size& sz);
};
@ -873,7 +873,7 @@ public:
virtual void ClearModify();
virtual bool IsModified() const;
virtual void Paint(Draw& draw);
virtual void Paint(Draw& w);
virtual int OverPaint() const;
virtual void CancelMode();

View file

@ -107,8 +107,6 @@ public:
Callback2<int, PasteClip&> WhenDropInsert;
Callback1<PasteClip&> WhenDrop;
// depracated - use WhenSel
Callback WhenSelection;
Callback WhenEnterItem;

View file

@ -40,14 +40,12 @@ AssistEditor::AssistEditor()
int cy = EditField::GetStdHeight();
int c2 = cy + 2;
scopepane.Add(browser.search_scope.HSizePos(0, 4 * cy + 2).TopPos(0, cy));
scopepane.Add(browser.scope.SizePos());
itempane.Add(browser.search.HSizePos(0, 5 * cy + 2).TopPos(0, cy));
for(int i = 0; i < 4; i++)
scopepane.Add(browser.rangebutton[i].RightPos((3 - i) * cy, cy).TopPos(0, cy));
scopepane.Add(browser.scope.HSizePos().VSizePos(c2, 0));
itempane.Add(browser.search_item.HSizePos(0, cy + 2).TopPos(0, cy));
itempane.Add(browser.rangebutton[i].RightPos((4 - i) * cy, cy).TopPos(0, cy));
itempane.Add(browser.sort.RightPos(0, cy).TopPos(0, cy));
itempane.Add(browser.item.HSizePos().VSizePos(c2, c2));
itempane.Add(browser.search.HSizePos().BottomPos(0, cy));
itempane.Add(browser.item.HSizePos().VSizePos(c2, 0));
scope_item.Vert(scopepane, itempane);
scope_item.SetPos(3000);
navigatorpane.Add(scope_item);
@ -59,7 +57,7 @@ AssistEditor::AssistEditor()
browser.WhenClear = THISBACK(SyncCursor);
browser.NameStart();
navigator = NAV_BROWSER;
navigator = true;
WhenAnnotationMove = THISBACK(SyncAnnotationPopup);
WhenAnnotationClick = THISBACK1(EditAnnotation, true);
@ -556,11 +554,18 @@ bool AssistEditor::Key(dword key, int count)
{
if(browser.Key(key, count))
return true;
if((key == K_ESCAPE || key == K_ENTER) && (browser.search.HasFocus() ||
browser.search_item.HasFocus() || browser.search_scope.HasFocus())) {
SetFocus();
SyncCursor();
return true;
if(browser.search.HasFocus()) {
if(key == K_ENTER) {
browser.search.Clear();
GotoBrowserScope();
return true;
}
if(key == K_ESCAPE) {
browser.search.Clear();
SetFocus();
SyncCursor();
return true;
}
}
if(popup.IsOpen()) {

View file

@ -117,7 +117,6 @@ struct CodeBrowser {
ArrayCtrl scope;
ArrayCtrl item;
EditString search_scope;
EditString search_item;
EditString search;
FrameRight<Button> clear;
int range;

View file

@ -1,4 +1,4 @@
description "TheIDE - code browser and Topic++";
description "TheIDE - code browser and Topic++\377";
uses
CppBase,

View file

@ -34,20 +34,6 @@ bool HasItem(const Array<CppItem>& n, const String& m)
return false;
}
bool HasItem(int file, const String& m)
{
if(IsNull(m))
return true;
int q = CodeBase().Find("");
if(q < 0)
return false;
const Array<CppItem>& n = CodeBase()[q];
for(int i = 0; i < n.GetCount(); i++)
if(n[i].file == file && n[i].uname.StartsWith(m))
return true;
return false;
}
struct ScopeLess {
bool operator()(const String& a, const String& b) const {
if((*a == '<') != (*b == '<'))
@ -70,6 +56,11 @@ String CodeBrowser::GetPm()
return pm;
}
String GetFileText(const String& s)
{
return '<' + GetFileName(GetFileFolder(s)) + '/' + GetFileName(s) + '>';
}
void CodeBrowser::Load()
{
String find = ToUpper((String)~search);
@ -78,38 +69,43 @@ void CodeBrowser::Load()
Vector<String> txt;
Vector<Value> ndx;
Index<int> fi;
Index<String> fs;
for(int i = 0; i < CodeBase().GetCount(); i++) {
String s = CodeBase().GetKey(i);
const Array<CppItem>& n = CodeBase()[i];
if(s.GetCount()) {
if(s.GetCount())
if(MatchCib(s, match) && (MatchCib(s, find) || HasItem(n, find)) && MatchPm(n, pm)) {
txt.Add(s);
ndx.Add(s);
}
}
else {
int i = 0;
while(i < n.GetCount()) {
int f = n[i].file;
if(fi.Find(f) < 0 && MatchPm(f, pm))
fi.Add(f);
i++;
for(int i = 0; i < n.GetCount(); i++) {
int f = n[i].file;
if(fi.Find(f) < 0) {
fi.Add(f);
String s = GetFileText(GetCppFile(f));
if(s.StartsWith(pm) && MatchCib(s, match) &&
(IsNull(find) || MatchCib(s, find) || s.GetCount() == 0 && n[i].uname.StartsWith(find))) {
txt.Add(s);
ndx.Add(f);
fs.Add(s);
}
}
}
}
if(find.GetCount()) {
txt.Add("<globals>");
ndx.Add(Null);
}
else
for(int i = 0; i < fi.GetCount(); i++) {
String s = GetCppFile(fi[i]);
s = '<' + GetFileName(GetFileFolder(s)) + '/' + GetFileName(s) + '>';
if(MatchCib(s, match)) {
const Workspace& wspc = GetIdeWorkspace();
for(int i = 0; i < wspc.GetCount(); i++) {
String pn = wspc[i];
const Package& p = wspc.GetPackage(i);
for(int j = 0; j < p.GetCount(); j++) {
String s = GetFileText(AppendFileName(pn, p[j]));
if(fs.Find(s) < 0 && (IsNull(find) || MatchCib(s, find)) && MatchCib(s, match)) {
int f = GetCppFileIndex(SourcePath(pn, p[j]));
txt.Add(s);
ndx.Add(fi[i]);
ndx.Add(f);
fs.Add(s);
}
}
}
IndexSort(txt, ndx, ScopeLess());
Value key = scope.GetKey();
int sc = scope.GetCursorSc();
@ -164,7 +160,6 @@ void GatherMethods(const String& type, VectorMap<String, bool>& inherited, bool
void CodeBrowser::LoadScope()
{
String find = ToUpper((String)~search);
String match = ToUpper((String)~search_item);
Value key = item.GetKey();
int sc = item.GetCursorSc();
item.Clear();
@ -174,7 +169,6 @@ void CodeBrowser::LoadScope()
int file = IsNumber(x) ? (int)x : -1;
String scope = file < 0 ? String(x) : String();
int q = CodeBase().Find(scope);
bool all = scope.GetCount() && MatchCib(scope, find);
if(q >= 0) {
const Array<CppItem>& n = CodeBase()[q];
VectorMap<String, bool> inherited;
@ -184,8 +178,7 @@ void CodeBrowser::LoadScope()
for(int i = 0; i < n.GetCount(); i = file < 0 ? FindNext(n, i) : i + 1) {
CppItemInfo m;
(CppItem&) m = n[i];
if((file < 0 || m.file == file) && m.uname.StartsWith(match) &&
(all || m.uname.StartsWith(find)) && set.Find(m.qitem) < 0) {
if((file < 0 || m.file == file) && m.uname.StartsWith(find) && set.Find(m.qitem) < 0) {
set.Add(m.qitem);
int q = inherited.Find(m.qitem);
if(q >= 0) {
@ -238,11 +231,14 @@ int SearchItemFilter(int c)
void CodeBrowser::Goto(const String& coderef, const String& rfile)
{
if(IsNull(coderef))
if(IsNull(coderef)) {
item.KillCursor();
scope.FindSetCursor(GetFileText(rfile), 1);
return;
}
else
if(coderef != GetCodeRef()) {
if(!IsNull(search_item) || !IsNull(search_scope)) {
if(!IsNull(search_scope)) {
Load();
LoadScope();
}
@ -262,7 +258,7 @@ void CodeBrowser::Goto(const String& coderef, const String& rfile)
void CodeBrowser::Search()
{
Load();
if(!scope.IsCursor())
if(!scope.IsCursor() || !item.IsCursor())
scope.SetCursor(0);
}
@ -270,11 +266,10 @@ bool CodeBrowser::Key(dword key, int count)
{
clear.Enable(IsSearch());
if(key == K_UP || key == K_DOWN) {
if(search.HasFocus() || search_item.HasFocus()) {
EditString& es = search.HasFocus() ? search : search_item;
if(search.HasFocus()) {
int l, h;
es.GetSelection(l, h);
Value v = ~es;
search.GetSelection(l, h);
Value v = ~search;
if(item.IsCursor())
item.Key(key, count);
else
@ -283,9 +278,9 @@ bool CodeBrowser::Key(dword key, int count)
else
item.GoBegin();
WhenKeyItem();
es <<= v;
es.SetFocus();
es.SetSelection(l, h);
search <<= v;
search.SetFocus();
search.SetSelection(l, h);
return true;
}
if(search_scope.HasFocus()) {
@ -298,14 +293,14 @@ bool CodeBrowser::Key(dword key, int count)
bool CodeBrowser::IsSearch() const
{
return !IsNull(search) || !IsNull(search_item) || !IsNull(search);
return !IsNull(search) || !IsNull(search_scope);
}
void CodeBrowser::ClearSearch()
{
if(!IsSearch())
return;
search_scope <<= search_item <<= search <<= Null;
search_scope <<= search <<= Null;
Load();
WhenClear();
}
@ -331,9 +326,6 @@ CodeBrowser::CodeBrowser()
item.AddColumn("Item").SetDisplay(display).Margin(2);
item.NoHeader();
item.SetLineCy(BrowserFont().Info().GetHeight() + 3);
search_item.SetFilter(SearchItemFilter);
search_item.NullText("Search in scope ");
search_item <<= THISBACK(LoadScope);
search.NullText("Find ");
search.SetFilter(SearchItemFilter);
search <<= THISBACK(Search);

View file

@ -50,7 +50,6 @@ LAYOUT(ReferenceDlgLayout, 748, 392)
ITEM(Label, dv___0, SetLabel(t_("Reference")).LeftPosZ(8, 56).TopPosZ(4, 19))
ITEM(EditString, reference, HSizePosZ(68, 8).TopPosZ(4, 19))
UNTYPED(search_scope, LeftPosZ(8, 188).TopPosZ(32, 19))
UNTYPED(search_item, LeftPosZ(200, 188).TopPosZ(32, 19))
UNTYPED(search, RightPosZ(8, 188).TopPosZ(32, 19))
ITEM(Button, classlist, SetLabel(t_("Insert all types")).LeftPosZ(8, 88).BottomPosZ(8, 24))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(76, 64).BottomPosZ(8, 24))

View file

@ -4,7 +4,7 @@
#include "ide\Common/init"
#include "PdfDraw/init"
#include "RichEdit/init"
#define BLITZ_INDEX__ F6E4212E192F89F940FE740C750E7BAB0
#define BLITZ_INDEX__ F2537F6B53052F02128DF7C703BAF12C1
#include "TopicI.icpp"
#undef BLITZ_INDEX__
#endif

View file

@ -108,11 +108,11 @@ IMAGE_BEGIN(Package)
IMAGE_PACKED(Package, "\2\20\0\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
IMAGE_BEGIN(FastPackage)
IMAGE_SCAN("Ë…\0\0\0")
IMAGE_SCAN("Ɔ\0\0\0ƒ\377\0\377\1\0\0\0")
IMAGE_SCAN("Â…\0\0\0ÀÀÀ\1\0\0\377\0\0\0\1\377\0\377ƒ\0\0\0")
IMAGE_SCAN("Â\1\0\0\0ƒ\377\377\377\2\0\0\0ÀÀÀ\0\0\377\0\0\0ƒ\377\0\377\1\0\0\0")
IMAGE_SCAN("Â\2\0\0\0\377\377\377\0\377\377\1\0\0\0\0\0\377\1\0\377\377\0\0\0\1\377\0\377ƒ\0\0\0")
IMAGE_SCAN("Â\2\0\0\0\377\377\377\0\377\377\2\0\0\0\0\0\377\0\377\377\0\0\0\2\377\0\377\0\0\0Â")
IMAGE_SCAN("Ɔ\0\0\0ƒ\0Ô\377\1\0\0\0")
IMAGE_SCAN("Â…\0\0\0ÀÀÀ\1\0\0\377\0\0\0\1\0Ô\377ƒ\0\0\0")
IMAGE_SCAN("Â\1\0\0\0ƒ\377\377\377\2\0\0\0ÀÀÀ\0\0\377\0\0\0ƒ\0Ô\377\1\0\0\0")
IMAGE_SCAN("Â\2\0\0\0\377\377\377\0\377\377\1\0\0\0\0\0\377\1\0\377\377\0\0\0\1\0Ô\377ƒ\0\0\0")
IMAGE_SCAN("Â\2\0\0\0\377\377\377\0\377\377\2\0\0\0\0\0\377\0\377\377\0\0\0\2\0Ô\377\0\0\0Â")
IMAGE_SCAN("Á†\0\0\0\0\377\377\1\0\377\0…\0\0\0Á")
IMAGE_SCAN("Á\1\0\0\0„ÀÀÀ\2\0\0\0\0\377\377\0\377\0\1\0\0\0ƒÀÀÀ\1\0\0\0Á")
IMAGE_SCAN("Á\1\0\0\0„ÀÀÀ\1\0\0\0\0\377\0\2\377\377\0\0\0\0ƒÀÀÀ\1\0\0\0Á")

View file

@ -2,7 +2,7 @@
void AssistEditor::SyncNavigator()
{
if(navigator == NAV_BROWSER) {
if(IsNavigator()) {
browser.Load();
SyncCursor();
}
@ -14,7 +14,7 @@ void AssistEditor::SyncCursor()
String k = GetKeyDesc(IdeKeys::AK_SEARCHCODE().key[0]) + ") ";
browser.search.NullText(String("Find (") + k);
browser.clear.Tip(String("Clear (") + k);
if(navigator == NAV_BROWSER) {
if(IsNavigator()) {
int ii = GetCursorLine();
String coderef;
while(ii >= 0 && IsNull(coderef))
@ -59,20 +59,29 @@ void AssistEditor::BrowserGoto()
void AssistEditor::GotoBrowserScope()
{
browser.item.GoBegin();
BrowserGoto();
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(int nav)
void AssistEditor::Navigator(bool nav)
{
navigator = nav;
navigatorframe.Show(navigator);
if(navigator == NAV_BROWSER) {
if(IsNavigator()) {
scope_item.Show();
browser.ClearSearch();
}
if(navigator)
SetFocus();
}
SyncNavigator();
SyncCursor();
}
@ -88,15 +97,15 @@ void AssistEditor::SerializeNavigator(Stream& s)
Navigator(navigator);
}
void Ide::ToggleNavigator(int nav)
void Ide::ToggleNavigator()
{
editor.Navigator(editor.GetNavigator() == nav ? 0 : nav);
editor.Navigator(!editor.navigator);
}
void Ide::SearchCode()
{
if(editor.navigator != AssistEditor::NAV_BROWSER)
editor.Navigator(AssistEditor::NAV_BROWSER);
if(!editor.navigator)
editor.Navigator(true);
if(editor.browser.search.HasFocus() && editor.browser.IsSearch())
editor.browser.ClearSearch();
else

View file

@ -42,10 +42,13 @@ void WorkspaceWork::ScanWorkspace() {
filelist.Clear();
package.Clear();
Vector<String> pks;
for(int i = 0; i < wspc.package.GetCount(); i++)
Vector<bool> speed;
for(int i = 0; i < wspc.package.GetCount(); i++) {
pks.Add(wspc.package.GetKey(i));
speed.Add(wspc.GetPackage(i).optimize_speed);
}
if(sort)
Sort(pks.Begin() + 1, pks.End(), StdLess<String>());
IndexSort(pks.Begin() + 1, pks.End(), speed.Begin() + 1, StdLess<String>());
for(int i = 0; i < wspc.package.GetCount(); i++) {
String pk = pks[i];
Font fnt = ListFont();
@ -57,7 +60,7 @@ void WorkspaceWork::ScanWorkspace() {
if(pi.italic)
fnt.Italic();
package.Add(pk,
wspc.GetPackage(i).optimize_speed ? IdeCommonImg::FastPackage() : IdeImg::Package(),
speed[i] ? IdeCommonImg::FastPackage() : IdeImg::Package(),
fnt, Nvl(pi.ink, SColorText()), false, 0, Null, SColorMark);
}
if(!organizer) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Before After
Before After

View file

@ -377,11 +377,8 @@ struct AssistEditor : CodeEditor {
void BrowserGoto();
void BrowserGotoNF();
enum { NAV_NONE = 0, NAV_BROWSER = 2 };
int GetNavigator() const { return navigator; }
bool IsBrowser() const { return navigator == NAV_BROWSER; }
void Navigator(int navigator);
bool IsNavigator() const { return navigator; }
void Navigator(bool navigator);
bool GetAnnotationRefs(Vector<String>& tl, String& coderef, int q = -1);
bool GetAnnotationRef(String& t, String& coderef, int q = -1);
@ -866,7 +863,7 @@ public:
void OpenTopic(const String& topic, const String& createafter, bool before);
void OpenTopic(const String& topic);
void OpenATopic();
void ToggleNavigator(int nav);
void ToggleNavigator();
void SearchCode();
void Goto();
void GotoGlobal();

View file

@ -470,8 +470,8 @@ void Ide::DebugMenu(Bar& menu)
}
void Ide::BrowseMenu(Bar& menu) {
menu.AddMenu(AK_NAVIGATOR, IdeImg::Navigator(), THISBACK1(ToggleNavigator, (int)AssistEditor::NAV_BROWSER))
.Check(editor.IsBrowser());
menu.AddMenu(AK_NAVIGATOR, IdeImg::Navigator(), THISBACK(ToggleNavigator))
.Check(editor.IsNavigator());
menu.Add(AK_SEARCHCODE, THISBACK(SearchCode));
menu.Add(!designer, AK_GOTO, THISBACK(Goto));
menu.Add(AK_GOTOGLOBAL, THISBACK(GotoGlobal));