diff --git a/uppsrc/ide/SelectPkg.cpp b/uppsrc/ide/SelectPkg.cpp index 6ebbedb98..188b1f24f 100644 --- a/uppsrc/ide/SelectPkg.cpp +++ b/uppsrc/ide/SelectPkg.cpp @@ -104,7 +104,6 @@ inline bool PackageLess(String a, String b) return a < b; }; - struct SelectPackageDlg : public WithListLayout { virtual bool Key(dword key, int count); @@ -162,6 +161,10 @@ struct SelectPackageDlg : public WithListLayout { void SyncBase(String initvars); void SyncList(); static bool Pless(const SelectPackageDlg::PkInfo& a, const SelectPackageDlg::PkInfo& b); + + Vector GetSvnDirs(); + void SyncSvnDir(const String& dir); + void SyncSvnDirs(); }; bool SelectPackageDlg::Key(dword key, int count) @@ -267,7 +270,7 @@ SelectPackageDlg::SelectPackageDlg(const char *title, bool selectvars_, bool mai all = !main; progress.Hide(); brief <<= THISBACK(SyncBrief); - search.NullText("Search", StdFont().Italic(), SColorDisabled()); + search.NullText("Search (Ctrl+Q)", StdFont().Italic(), SColorDisabled()); search <<= THISBACK(SyncList); search.SetFilter(CharFilterDefaultToUpperAscii); SyncBrief(); @@ -345,6 +348,30 @@ void SelectPackageDlg::OnNew() { StoreToGlobal(dlg, "NewPackage"); } +Vector SelectPackageDlg::GetSvnDirs() +{ + Vector r; + Vector dirs = SplitDirs(GetVar("UPP")); + for(int i = 0; i < dirs.GetCount(); i++) { + String d = NormalizePath(dirs[i]); + if(IsSvnDir(d)) + r.Add(d); + } + return r; +} + +void SelectPackageDlg::SyncSvnDir(const String& dir) +{ + SvnSyncDirs(Vector() << dir); + Load(); +} + +void SelectPackageDlg::SyncSvnDirs() +{ + SvnSyncDirs(GetSvnDirs()); + Load(); +} + void SelectPackageDlg::ToolBase(Bar& bar) { bar.Add("New assembly", THISBACK(OnBaseAdd)) @@ -353,6 +380,13 @@ void SelectPackageDlg::ToolBase(Bar& bar) .Key(K_CTRL_ENTER); bar.Add(base.IsCursor(), "Remove assembly", THISBACK(OnBaseRemove)) .Key(K_CTRL_DELETE); + Vector d = GetSvnDirs(); + if(d.GetCount()) { + bar.Separator(); + for(int i = 0; i < d.GetCount(); i++) + bar.Add("Synchronize " + d[i], IdeImg::svn_dir(), THISBACK1(SyncSvnDir, d[i])); + bar.Add("Synchronize everything..", IdeImg::svn(), THISBACK(SyncSvnDirs)); + } } void SelectPackageDlg::OnBaseAdd() @@ -395,8 +429,7 @@ void SelectPackageDlg::OnBaseRemove() void SelectPackageDlg::Load() { update = msecs(); - if(selectvars) - { + if(selectvars) { list.Enable(base.IsCursor()); if(!base.IsCursor()) return; diff --git a/uppsrc/ide/icon.ico b/uppsrc/ide/icon.ico index 3fbfb8a58..29582d7ea 100644 Binary files a/uppsrc/ide/icon.ico and b/uppsrc/ide/icon.ico differ diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index b56e7ef69..4fcefa033 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -490,6 +490,7 @@ struct AssistEditor : CodeEditor { void DirSel(EditField& f, FrameRight