Diff Вы: nobody
Вход

Differences From Artifact [00b8c05415]:

To Artifact [2d06ac6e06]:


    72     72   }
    73     73   
    74     74   SelfScript.self['macrosГлобальный поиск'] = function() {
    75     75       
    76     76       var w = GetTextWindow();
    77     77       if (!w) return false;
    78     78       
    79         -    var es = GetExtSearch();
           79  +    var es = GetExtSearchGlobal();
    80     80   
    81     81       var selText = w.GetSelectedText();
    82     82       if (selText == '')
    83     83           selText = w.GetWordUnderCursor();
    84     84       
    85     85       es.isGlobalFind = true;
    86     86       es.isInCurrentMdConteinerFind = false;
................................................................................
   103    103       //будет открыта внешняя обработка, занчит ищем глобально только по этой обработке. 
   104    104       //открыт cf файл или же cf базы данных и мы находимся в текстовом модуле определенной 
   105    105       //конфигурации, значит искать будет по текущей контейнеру. 
   106    106       
   107    107       var w = GetTextWindow();
   108    108       if (!w) return false;
   109    109       
   110         -    var es = GetExtSearch();
          110  +    var es = GetExtSearchGlobal();
   111    111   
   112    112       var selText = w.GetSelectedText();
   113    113       if (selText == '')
   114    114           selText = w.GetWordUnderCursor();
   115    115       
   116    116       es.isGlobalFind = true;
   117    117       es.isInCurrentMdConteinerFind = true;
................................................................................
   128    128           
   129    129       return true;
   130    130   }
   131    131   
   132    132   
   133    133   
   134    134   SelfScript.self['macrosОтменить глобальный поиск'] = function() {
   135         -    var es = GetExtSearch();
          135  +    var es = GetExtSearchGlobal();
   136    136       if (es.startGlobalSearch){
   137    137           es.startGlobalSearch = false;
   138    138       } 
   139    139   }
   140    140   
   141    141   SelfScript.self['macrosОткрыть окно поиска'] = function() {
   142    142       GetExtSearch().show();
................................................................................
   209    209               'WholeWords'    : false, // Поиск слова целиком.
   210    210               'SearchHistory' : v8New('ValueList'), // История поиска.
   211    211               'HistoryDepth'  : 15, // Количество элементов истории поиска.
   212    212               'TreeView'      : false // Группировать результаты поиска по методам.            
   213    213           }
   214    214       },
   215    215   
   216         -    construct : function () {
   217         -    
          216  +    construct : function (isExtend) {
          217  +        
          218  +        if (isExtend == undefined) isExtend = false;
   218    219           this._super("scripts\\extSearch.results.ssf");
   219    220                   
   220    221           this.form.КлючСохраненияПоложенияОкна = "extSearch.js"
   221    222           this.results = this.form.Controls.SearchResults.Value;
   222    223           this.results.Columns.Add('_method');
   223    224           this.results.Columns.Add('groupsCache');
   224    225           this.results.Columns.Add('_object');
................................................................................
   235    236               'Proc': this.form.Controls.PicProc.Picture
   236    237           }
   237    238           
   238    239           this.SearchDocRowFont = v8New('Font', undefined, undefined, true);
   239    240           this.isGlobalFind = false;
   240    241           
   241    242           this.SetControlsVisible();
   242         -        
   243         -        ExtSearch._instance = this;
          243  +        if (!isExtend) ExtSearch._instance = this;
   244    244       
   245    245       },
   246    246       
   247    247       setSimpleQuery : function (query) {
   248    248           this.form.Query = query;
   249    249           this.form.IsRegExp = false;
   250    250           this.form.CaseSensetive = false;
................................................................................
   320    320                       activeWndResRow = docRow;
   321    321               }
   322    322           })(windows.mdiView.enumChilds());
   323    323           
   324    324           this.showSearchResult(activeWndResRow, fromHotKey);
   325    325       },
   326    326   
   327         -    searchByUuid: function(row) {
   328         -        mdObj = findMdObj(this.currentMdContainer, row.UUID);
   329         -        var docRow = null;
   330         -        if (mdObj){
   331         -        
   332         -            var obj = this.getWindowObject({
   333         -                                mdObj:mdObj,
   334         -                                mdProp:row.mdProp,
   335         -                                title:row.title});
   336         -            docRow = this.search(obj, this.re);
   337         -        }
   338         -        return docRow;
   339         -    },
   340         -    
   341         -    searchInMetadata : function(fromHotKey){
   342         -
   343         -        var md = null;
   344         -        if (this.isInCurrentMdConteinerFind ) {
   345         -            var activeWindow = this.watcher.getActiveTextWindow();
   346         -            if (!activeWindow) { 
   347         -            } else {
   348         -                var activeView = activeWindow.GetView();
   349         -                if (!activeView) {
   350         -                } else {
   351         -                    if (activeView.mdObj && activeView.mdProp) {
   352         -                        md = activeView.mdObj.container;    
   353         -                    }
   354         -                } 
   355         -            }
   356         -        }
   357         -        
   358         -        
   359         -        if (!md) {
   360         -            md = metadata.current;   
   361         -        }
   362         -        if (!md) return;
   363         -
   364         -        this.currentMdContainer = md;
   365         -        this.clearSearchResults();
   366         -        this.re = this.buildSearchRegExpObject();
   367         -        if (!this.re) return;
   368         -        
   369         -        this.curCaption = windows.caption; //а вдруг, еще кто-то не пользуется configCaption... 
   370         -        
   371         -        this.startGlobalSearch = true;
   372         -        if (!this.vtMD){
   373         -            this.vtMD = {};
   374         -        }
   375         -        this.readMdToVt(this.currentMdContainer);
   376         -        
   377         -        this.curId = 0;
   378         -        
   379         -        events.connect(Designer, "onIdle", this);
   380         -       
   381         -        //this.showSearchResult(docRow, fromHotKey);
   382         -        //windows.caption = curCaption;
   383         -    },
   384         -    
   385         -    onIdle:function(){
   386         -        if (!this.startGlobalSearch) {
   387         -            windows.caption = this.curCaption;
   388         -            events.disconnect(Designer, "onIdle", this);
   389         -            this.showSearchResult(docRow, false);
   390         -            return;
   391         -        }
   392         -        var currentId = this.currentMdContainer.rootObject.id;
   393         -        if (this.vtMD[currentId].length<1) {
   394         -            this.startGlobalSearch = false;
   395         -            events.disconnect(Designer, "onIdle", this);
   396         -            return;
   397         -        }
   398         -        
   399         -        var count = 0;
   400         -        var docRow = null;
   401         -        while (count < 25){
   402         -            if (this.curId<this.vtMD[currentId].length){
   403         -                docRow = this.searchByUuid(this.vtMD[currentId][this.curId]);
   404         -                windows.caption = this.vtMD[currentId][this.curId].mdName;
   405         -            } else {
   406         -                this.startGlobalSearch = false;
   407         -                break;
   408         -            }
   409         -            this.curId ++;
   410         -            count++;
   411         -        }
   412         -        this.showSearchResult(null, false);
   413         -        
   414         -    },
   415         -    
   416         -    readMdToVt:function(MdContainer){
   417         -        var currentId = MdContainer.rootObject.id; 
   418         -        if (!this.vtMD[currentId]){
   419         -            var docRow = null; 
   420         -            this.vtMD[currentId] = [];
   421         -            var es = this;
   422         -            //Реквизиты пропустим
   423         -            var ignoredMdClass = {
   424         -                "Реквизиты":"",
   425         -                "Макеты" : "" ,
   426         -                "ОбщиеКартинки" : "" ,
   427         -                "Элементы стиля" : "" ,
   428         -                "Подсистемы" : "" ,
   429         -                "Языки" : "" ,
   430         -                "Стили" : "" ,
   431         -                "Интерфейсы" : "" ,
   432         -                "ПараметрыСеанса" : "" ,
   433         -                "Роли" : "" ,
   434         -                "ОбщиеМакеты" : "" ,
   435         -                "КритерииОтбора" : "" ,
   436         -                "ОбщиеРеквизиты" : "" ,
   437         -                "ТабличныеЧасти" : "" ,
   438         -                "Параметры" : "" 
   439         -                };
   440         -                
   441         -            var sort = 0; //Для сортировки модулей функций по порядку обхода, а не по алфавиту.
   442         -            
   443         -            (function (mdObj){
   444         -                if (!es.startGlobalSearch) {return} 
   445         -                
   446         -                var mdc = mdObj.mdclass;
   447         -            
   448         -                function getMdName(mdObj) {                             
   449         -                    if (mdObj.parent && mdObj.parent.mdClass.name(1) != 'Конфигурация')
   450         -                        return getMdName(mdObj.parent) + '.' + mdObj.mdClass.name(1) + ' ' + mdObj.name;
   451         -                    var cname = mdObj.mdClass.name(1);
   452         -                    return  (cname ? cname + ' ' : '') + mdObj.name;
   453         -                }
   454         -                var mdName = getMdName(mdObj)
   455         -                
   456         -                for(var i = 0, c = mdc.propertiesCount; i < c; i++){
   457         -                    var mdProp = mdc.propertyAt(i);
   458         -                    var mdPropName = mdc.propertyAt(i).name(1);
   459         -
   460         -                    if (mdObj.isPropModule(mdProp.id)){
   461         -                        var row = {UUID : mdObj.id}
   462         -                        row.mdProp = mdProp;
   463         -                        row.mdName = mdName;
   464         -                        
   465         -                        sort++;
   466         -                        strSort = "000000"+sort;
   467         -                        strSort = strSort.substr(strSort.length-5);
   468         -                        title = ''+strSort+' '+mdName + ': ' + mdPropName;
   469         -                        
   470         -                        row.title = title;
   471         -                        
   472         -                        es.vtMD[currentId].push(row);
   473         -                    }
   474         -                }
   475         -                // Перебираем классы потомков (например у Документа это Реквизиты, ТабличныеЧасти, Формы)
   476         -                for(var i = 0; i < mdc.childsClassesCount; i++)
   477         -                {
   478         -                    var childMdClass = mdc.childClassAt(i)
   479         -                    
   480         -                    if (!(ignoredMdClass[childMdClass.name(1, true)]==undefined)){
   481         -                        continue;
   482         -                    }
   483         -                    
   484         -                    // Для остального переберем потомков этого класса.
   485         -                    for(var chldidx = 0, c = mdObj.childObjectsCount(i); chldidx < c; chldidx++){
   486         -                        var childObject = mdObj.childObject(i, chldidx);
   487         -                        arguments.callee(childObject);
   488         -                    }
   489         -                }
   490         -            })(MdContainer.rootObject)
   491         -            
   492         -        }
   493         -    },
   494         -    
   495    327       searchActiveDoc : function (fromHotKey) {
   496    328           
   497    329           this.clearSearchResults();
   498    330           
   499    331           var activeWindow = this.watcher.getActiveTextWindow();
   500    332           if (!activeWindow) return;
   501    333                
................................................................................
   502    334           var re = this.buildSearchRegExpObject();
   503    335           if (!re) return;
   504    336   
   505    337           var obj = this.getWindowObject(activeWindow.GetView());
   506    338           if (!obj) return;
   507    339           
   508    340           var docRow = this.search(obj, re);
   509         -        this.isGlobalFind = false;
   510    341           
   511    342           this.showSearchResult(docRow, fromHotKey);
   512    343       },
   513    344   
   514    345       buildSearchRegExpObject : function () {
   515    346       
   516    347           var pattern = this.form.Query;
................................................................................
   597    428           {
   598    429               this.results.Rows.Delete(docRow);
   599    430               docRow = null;
   600    431           }
   601    432           
   602    433           return docRow;
   603    434       },
   604         -    
   605         -    showSearchResult: function (docRow, fromHotKey) {
   606         -        
          435  +
          436  +    showResult: function(docRow, fromHotKey){
   607    437           this.results.Rows.Sort('FoundLine', false);
   608         -        
   609         -        this.expandTree();
   610         -        
   611    438           // Запомним строку поиска в истории.
   612    439           this.addToHistory(this.form.Query);
   613         -        
   614         -        if (this.results.Rows.Count() == 0) 
   615         -        {
   616         -            if(!this.isGlobalFind){
   617         -                DoMessageBox('Совпадений не найдено!');
   618         -            }
   619         -            return;
   620         -        }
   621         -                
          440  +
   622    441           if (fromHotKey == true)
   623    442           { 
   624    443               // Для того чтобы курсор не прыгал при поиске текущего слова, 
   625    444               // тут бы еще добавить чтобы активизировалась именно текущая строка
   626    445               this.form.Open();
   627    446               this.form.CurrentControl=this.form.Controls.SearchResults;
   628    447               if (docRow) 
................................................................................
   635    454           else if (docRow)
   636    455           {
   637    456               if (this.form.TreeView)
   638    457                   this.goToLine(docRow.Rows.Get(0).Rows.Get(0));
   639    458               else
   640    459                   this.goToLine(docRow.Rows.Get(0));        
   641    460           }
   642         -        //this.SetControlsVisible();    
          461  +
          462  +    },
          463  +    
          464  +    showSearchResult: function (docRow, fromHotKey) {
          465  +        
          466  +        this.showResult(docRow, fromHotKey);
          467  +        this.expandTree();
          468  +        
          469  +        if (this.results.Rows.Count() == 0) 
          470  +        {
          471  +            DoMessageBox('Совпадений не найдено!');
          472  +            return;
          473  +        }
          474  +
          475  +        this.SetControlsVisible();    
   643    476       },
   644    477       
   645    478       getRowForTheCurrentLine: function(docRow) {
   646    479           var twnd = docRow._object.activate();
   647    480           return docRow.Rows.Find(twnd.GetCaretPos().beginRow, "LineNo", true);
   648    481       },
   649    482   
................................................................................
   851    684   
   852    685       CmdBar_BtNext : function (control) {
   853    686           this.moveRowCursor(true);
   854    687       },
   855    688       
   856    689       Query_OnChange : function (control) {
   857    690           if (this.form.Query != '')
   858         -            if (!this.isGlobalFind){ // Если глобальный поиск, тогда автоматом не будем искать. 
   859    691                   this.searchActiveDoc();
   860         -            }
   861    692       },
   862    693   
   863    694       Query_StartListChoice : function (control, defaultHandler) {
   864    695           control.val.ChoiceList = this.form.SearchHistory;
   865    696       },
   866    697   
   867    698       BtSearch_Click : function (control) {
   868    699   
   869    700           if (this.form.Query == '')
   870    701           {
   871    702               DoMessageBox('Не задана строка поиска');
   872    703               return;
   873    704           }
   874         -        if (this.isGlobalFind) {
   875         -            this.searchInMetadata(true);
   876         -        } else {
   877         -            this.searchActiveDoc();
   878         -        }
   879    705           
          706  +        this.searchActiveDoc();
   880    707       },
   881    708   
   882    709       CmdBarOptions_BtAbout : function (control) {
   883    710           RunApp('http://snegopat.ru/scripts/wiki?name=extSearch.js');
   884    711       },
   885    712   
   886    713       SearchResults_Selection : function (control, selectedRow, selectedCol, defaultHandler) {
................................................................................
  1016    843   
  1017    844           var buttons = this.form.Controls.CmdBar.Buttons;
  1018    845           buttons.ExpandAll.Enabled = this.form.TreeView;
  1019    846           buttons.Actions.Buttons.ExpandAll.Enabled = this.form.TreeView;
  1020    847           buttons.CollapseAll.Enabled = this.form.TreeView;
  1021    848           buttons.Actions.Buttons.CollapseAll.Enabled = this.form.TreeView;
  1022    849   
  1023         -        if (this.isGlobalFind){
  1024         -            this.form.caption = "Расширенный поиск в модуле (глобальный)";
  1025         -        } else {
  1026         -            this.form.caption = "Расширенный поиск в модуле";
  1027         -
  1028         -        }
  1029         -
          850  +        this.form.caption = "Расширенный поиск в модуле";
  1030    851       }
  1031    852     
  1032    853   }); // end of ExtSearch class
          854  +
          855  +ExtSearchGlobal = ExtSearch.extend({
          856  +
          857  +    settingsRootPath : SelfScript.uniqueName+"Global", // тест, пускай у нас и настройки будут глобальными. 
          858  +    
          859  +    settings : {
          860  +        pflSnegopat : {
          861  +            'IsRegExp'      : false, // Поиск регулярными выражениями.
          862  +            'CaseSensetive' : false, // Учитывать регистр при поиске.
          863  +            'WholeWords'    : false, // Поиск слова целиком.
          864  +            'SearchHistory' : v8New('ValueList'), // История поиска.
          865  +            'HistoryDepth'  : 15, // Количество элементов истории поиска.
          866  +            'TreeView'      : false // Группировать результаты поиска по методам.            
          867  +        }
          868  +    },
          869  +
          870  +    construct : function () {
          871  +    
          872  +        this._super(true);
          873  +
          874  +        this._instance = null;
          875  +
          876  +        this.form.КлючСохраненияПоложенияОкна = "extGlobalSearch.js";
          877  +
          878  +        this.isGlobalFind = true;
          879  +        
          880  +        this.SetControlsVisible();
          881  +
          882  +        ExtSearchGlobal._instance = this;
          883  +    },
          884  +
          885  +    searchByUuid: function(row) {
          886  +        mdObj = findMdObj(this.currentMdContainer, row.UUID);
          887  +        var docRow = null;
          888  +        if (mdObj){
          889  +        
          890  +            var obj = this.getWindowObject({
          891  +                                mdObj:mdObj,
          892  +                                mdProp:row.mdProp,
          893  +                                title:row.title});
          894  +            docRow = this.search(obj, this.re);
          895  +        }
          896  +        return docRow;
          897  +    },
          898  +    
          899  +    searchInMetadata : function(fromHotKey){
          900  +
          901  +        var md = null;
          902  +        if (this.isInCurrentMdConteinerFind ) {
          903  +            var activeWindow = this.watcher.getActiveTextWindow();
          904  +            if (!activeWindow) { 
          905  +            } else {
          906  +                var activeView = activeWindow.GetView();
          907  +                if (!activeView) {
          908  +                } else {
          909  +                    if (activeView.mdObj && activeView.mdProp) {
          910  +                        md = activeView.mdObj.container;    
          911  +                    }
          912  +                } 
          913  +            }
          914  +        }
          915  +        
          916  +        
          917  +        if (!md) {
          918  +            md = metadata.current;   
          919  +        }
          920  +        if (!md) return;
          921  +
          922  +        this.currentMdContainer = md;
          923  +        this.clearSearchResults();
          924  +        this.re = this.buildSearchRegExpObject();
          925  +        if (!this.re) return;
          926  +        
          927  +        this.curCaption = windows.caption; //а вдруг, еще кто-то не пользуется configCaption... 
          928  +        
          929  +        this.startGlobalSearch = true;
          930  +        if (!this.vtMD){
          931  +            this.vtMD = {};
          932  +        }
          933  +        this.readMdToVt(this.currentMdContainer);
          934  +        
          935  +        this.curId = 0;
          936  +        
          937  +        events.connect(Designer, "onIdle", this);
          938  +       
          939  +        //this.showSearchResult(docRow, fromHotKey);
          940  +        //windows.caption = curCaption;
          941  +    },
          942  +    
          943  +    onIdle:function(){
          944  +        if (!this.startGlobalSearch) {
          945  +            windows.caption = this.curCaption;
          946  +            events.disconnect(Designer, "onIdle", this);
          947  +            this.showSearchResult(docRow, false);
          948  +            return;
          949  +        }
          950  +        var currentId = this.currentMdContainer.rootObject.id;
          951  +        if (this.vtMD[currentId].length<1) {
          952  +            this.startGlobalSearch = false;
          953  +            events.disconnect(Designer, "onIdle", this);
          954  +            return;
          955  +        }
          956  +        
          957  +        var count = 0;
          958  +        var docRow = null;
          959  +        while (count < 25){
          960  +            if (this.curId<this.vtMD[currentId].length){
          961  +                docRow = this.searchByUuid(this.vtMD[currentId][this.curId]);
          962  +                windows.caption = this.vtMD[currentId][this.curId].mdName;
          963  +            } else {
          964  +                this.startGlobalSearch = false;
          965  +                break;
          966  +            }
          967  +            this.curId ++;
          968  +            count++;
          969  +        }
          970  +        this.showSearchResult(null, false);
          971  +        
          972  +    },
          973  +    
          974  +    readMdToVt:function(MdContainer){
          975  +        var currentId = MdContainer.rootObject.id; 
          976  +        if (!this.vtMD[currentId]){
          977  +            var docRow = null; 
          978  +            this.vtMD[currentId] = [];
          979  +            var es = this;
          980  +            //Реквизиты пропустим
          981  +            var ignoredMdClass = {
          982  +                "Реквизиты":"",
          983  +                "Макеты" : "" ,
          984  +                "ОбщиеКартинки" : "" ,
          985  +                "Элементы стиля" : "" ,
          986  +                "Подсистемы" : "" ,
          987  +                "Языки" : "" ,
          988  +                "Стили" : "" ,
          989  +                "Интерфейсы" : "" ,
          990  +                "ПараметрыСеанса" : "" ,
          991  +                "Роли" : "" ,
          992  +                "ОбщиеМакеты" : "" ,
          993  +                "КритерииОтбора" : "" ,
          994  +                "ОбщиеРеквизиты" : "" ,
          995  +                "ТабличныеЧасти" : "" ,
          996  +                "Параметры" : "" 
          997  +                };
          998  +                
          999  +            var sort = 0; //Для сортировки модулей функций по порядку обхода, а не по алфавиту.
         1000  +            
         1001  +            (function (mdObj){
         1002  +                if (!es.startGlobalSearch) {return} 
         1003  +                
         1004  +                var mdc = mdObj.mdclass;
         1005  +            
         1006  +                function getMdName(mdObj) {                             
         1007  +                    if (mdObj.parent && mdObj.parent.mdClass.name(1) != 'Конфигурация')
         1008  +                        return getMdName(mdObj.parent) + '.' + mdObj.mdClass.name(1) + ' ' + mdObj.name;
         1009  +                    var cname = mdObj.mdClass.name(1);
         1010  +                    return  (cname ? cname + ' ' : '') + mdObj.name;
         1011  +                }
         1012  +                var mdName = getMdName(mdObj)
         1013  +                
         1014  +                for(var i = 0, c = mdc.propertiesCount; i < c; i++){
         1015  +                    var mdProp = mdc.propertyAt(i);
         1016  +                    var mdPropName = mdc.propertyAt(i).name(1);
         1017  +
         1018  +                    if (mdObj.isPropModule(mdProp.id)){
         1019  +                        var row = {UUID : mdObj.id}
         1020  +                        row.mdProp = mdProp;
         1021  +                        row.mdName = mdName;
         1022  +                        
         1023  +                        sort++;
         1024  +                        strSort = "000000"+sort;
         1025  +                        strSort = strSort.substr(strSort.length-5);
         1026  +                        title = ''+strSort+' '+mdName + ': ' + mdPropName;
         1027  +                        
         1028  +                        row.title = title;
         1029  +                        
         1030  +                        es.vtMD[currentId].push(row);
         1031  +                    }
         1032  +                }
         1033  +                // Перебираем классы потомков (например у Документа это Реквизиты, ТабличныеЧасти, Формы)
         1034  +                for(var i = 0; i < mdc.childsClassesCount; i++)
         1035  +                {
         1036  +                    var childMdClass = mdc.childClassAt(i)
         1037  +                    
         1038  +                    if (!(ignoredMdClass[childMdClass.name(1, true)]==undefined)){
         1039  +                        continue;
         1040  +                    }
         1041  +                    
         1042  +                    // Для остального переберем потомков этого класса.
         1043  +                    for(var chldidx = 0, c = mdObj.childObjectsCount(i); chldidx < c; chldidx++){
         1044  +                        var childObject = mdObj.childObject(i, chldidx);
         1045  +                        arguments.callee(childObject);
         1046  +                    }
         1047  +                }
         1048  +            })(MdContainer.rootObject)
         1049  +            
         1050  +        }
         1051  +    },
         1052  +    
         1053  +
         1054  +    Query_OnChange : function(Control){
         1055  +
         1056  +        return;
         1057  +
         1058  +    },
         1059  +
         1060  +    BtSearch_Click : function (control) {
         1061  +
         1062  +        if (this.form.Query == '')
         1063  +        {
         1064  +            DoMessageBox('Не задана строка поиска');
         1065  +            return;
         1066  +        }
         1067  +
         1068  +        this.searchInMetadata(true);
         1069  +    },
         1070  +
         1071  +
         1072  +    SetControlsVisible : function(){
         1073  +        this._super();
         1074  +        if (this.isGlobalFind){
         1075  +            this.form.caption = "Расширенный поиск в модуле (глобальный)";
         1076  +        }
         1077  +    }, 
         1078  +
         1079  +    showSearchResult: function (docRow, fromHotKey) {
         1080  +        this.showResult(docRow, fromHotKey);
         1081  +        this.expandTree();
         1082  +    }
         1083  +
         1084  +
         1085  +})
  1033   1086   
  1034   1087   ////} ExtSearch
  1035   1088   
  1036   1089   ////////////////////////////////////////////////////////////////////////////////////////
  1037   1090   ////{ Вспомогательные объекты.
  1038   1091   ////
  1039   1092   
................................................................................
  1142   1195   ////
  1143   1196   function GetExtSearch() {
  1144   1197       if (!ExtSearch._instance)
  1145   1198           new ExtSearch();
  1146   1199       
  1147   1200       return ExtSearch._instance;
  1148   1201   }
         1202  +
         1203  +function GetExtSearchGlobal() {
         1204  +    if (!ExtSearchGlobal._instance)
         1205  +        new ExtSearchGlobal();
         1206  +    
         1207  +    return ExtSearchGlobal._instance;
         1208  +}
         1209  +
  1149   1210   
  1150   1211   events.connect(Designer, "beforeExitApp", GetExtSearch());
         1212  +events.connect(Designer, "beforeExitApp", GetExtSearchGlobal());
  1151   1213   ////}