Index: CfgStore.js ================================================================== --- CfgStore.js +++ CfgStore.js @@ -45,10 +45,31 @@ if(isEventConnected) events.disconnect(windows, "onDoModal", SelfScript.self, "hookCaptureCfgStoreWindow") if(view) view.activate(); + }catch(e) + { + Message("Ошибка : " + e.description) + } + + return true; +} + +SelfScript.self['macrosПоместить объект в хранилище'] = function() { + + try{ //иногда вылетают странные исключения :( при работе с элементами форм + view = windows.getActiveView(); + if (!view || !view.mdObj || view.mdObj.container != metadata.current) return false; + + + res1 = view.mdObj.activateInTree(); + + isEventConnected = true + + res = stdcommands.CfgStore.StoreIntoCfgStore.send() // true если успешно + }catch(e) { Message("Ошибка : " + e.description) } Index: Libs/ScriptForm.js ================================================================== --- Libs/ScriptForm.js +++ Libs/ScriptForm.js @@ -143,15 +143,22 @@ loadSettings : function () { if (!this.hasSettings()) return false; + + if (!this._defaultSettings) { + this._defaultSettings = {}; + for(var prop in this.settings) { + this._defaultSettings[prop] = this.settings[prop]; + } + } var sm = stdlib.require('SettingsManagement.js').SettingsManagement; - for (var pflType in this.settings) + for (var pflType in this._defaultSettings) { - var defaults = this.settings[pflType]; + var defaults = this._defaultSettings[pflType]; // Имя ключа = строка - имя значения перечисления. Выполняя строку получаем необходимое значение. var pflTypeValue = eval(pflType); var settings = sm.CreateManager(this.settingsRootPath, defaults, pflTypeValue); settings.LoadSettings(); Index: SessionManager.js ================================================================== --- SessionManager.js +++ SessionManager.js @@ -49,10 +49,22 @@ var sm = GetSessionManager(); sm.sessionTreeClear(); return true; } + +SelfScript.self['macrosОткрыть настройку'] = function() { + + var sms = GetSessionManagerSettings(); + sms.show(true); + sms = null; + var sm = GetSessionManager(); + sm.reloadSettings(); + return true; +} + + /* Возвращает название макроса по умолчанию - вызывается, когда пользователь дважды щелкает мышью по названию скрипта в окне Снегопата. */ function getDefaultMacros() { return 'Восстановить последнюю сессию'; } @@ -66,14 +78,17 @@ settingsRootPath : SelfScript.uniqueName, settings : { pflBase : { - 'SessionsHistory' : "", //Таблица значений. - 'SassionSaved' : v8New('ValueList'), - 'AutoSave' : false, // Автосохранение сессии. - 'HistoryDepth' : 15 // Количество элементов истории сессий. + 'SessionsHistory' : "", //Таблица значений + 'SassionSaved' : "", + 'AutoSave' : true, // Автосохранение сессии. + 'HistoryDepth' : 15, // Количество элементов истории сессий. + 'AutoRestore' : true, + 'MarksSave' : true, + 'MarksRestore' : true } }, construct : function (isExtend) { @@ -110,22 +125,29 @@ this.SessionTree.Columns.Add("sortkey"); this.SessionTree.Columns.Add("curLine"); } try{ + this.SessionTree.Columns.Add("curLine"); } catch(e){ } }, restoreSession:function(sessionName){ var sessionsHistory = this.SessionTree; + if (sessionsHistory.Rows.Count()==0){ return ; } + if (sessionName==undefined) sessionName = "" + + if (!this.form.AutoRestore) { + return; + } if (sessionName.length>0){ for (var i = 0; i<sessionsHistory.Rows.Count(); i++){ session = sessionsHistory.Rows.Get(i); if (session.Name == sessionName){ @@ -237,10 +259,16 @@ newRow.prop = item.prop; newRow.name = item.name; newRow.curLine = item.curLine; } + + // Не позволяем истории расти более заданной глубины. + while (this.SessionTree.Rows.Count() > this.form.HistoryDepth){ + currRow = this.SessionTree.Rows.Get(0); + this.SessionTree.Rows.Delete(currRow); + } this.form.SessionsHistory = ValueToStringInternal(this.SessionTree); }, saveSettings:function(){ this.form.SessionsHistory = ValueToStringInternal(this.SessionTree); this._super(); @@ -247,12 +275,15 @@ }, beforeExitApp:function(){ this.watcher.onTimer(1); this.watcher.stopWatch(); - - this.saveSession(); + + if (this.form.AutoSave){ + this.saveSession(); + } + this.saveSettings(); }, expandTree : function (collapse) { var tree = this.form.Controls.SessionsList; @@ -353,14 +384,86 @@ }, sessionTreeClear:function(){ this.SessionTree.Rows.Clear(); + }, + reloadSettings:function(){ + this.loadSettings(); } +}) + +//////////////////////////////////////////////////////////////////////////////////////// +////{ SessionManagerSettings - Настройки менеджера сессий. +//// +SessionManagerSettings = ScriptForm.extend({ + + settingsRootPath : SelfScript.uniqueName, + + settings : { + pflBase : { + 'SessionsHistory' : "", //Таблица значений + 'SassionSaved' : "", + 'AutoSave' : false, // Автосохранение сессии. + 'HistoryDepth' : 15, // Количество элементов истории сессий. + 'AutoRestore' : true, + 'MarksSave' : true, + 'MarksRestore' : true + + } + }, + + construct : function () { + + this._super("scripts\\SessionManager.settings.ssf"); + + this.loadSettings(); + + SessionManagerSettings._instance = this; + + }, + loadSettings:function(){ + this._super(); + try{ + this.SessionTree = ValueFromStringInternal(this.form.SessionsHistory); + } catch(e){ + this.SessionTree = v8New("ValueTree"); + this.SessionTree.Columns.Add("Name"); + this.SessionTree.Columns.Add("path"); + this.SessionTree.Columns.Add("uuid"); + this.SessionTree.Columns.Add("prop"); + this.SessionTree.Columns.Add("rootId"); + this.SessionTree.Columns.Add("sortkey"); + this.SessionTree.Columns.Add("curLine"); + } + + try{ + + this.SessionTree.Columns.Add("curLine"); + } catch(e){ } + + }, + + saveSettings:function(){ + this.form.SessionsHistory = ValueToStringInternal(this.SessionTree); + this._super(); + }, + + Ok_Click:function(Button){ + this.saveSettings(); + this.form.Close(); + }, + + Close_Click:function(Button){ + this.form.Close(); + } + }) + + //////////////////////////////////////////////////////////////////////////////////////// ////{ TextWindowsWatcher - отслеживает активизацию текстовых окон и запоминает последнее. //// @@ -588,10 +691,17 @@ if (!SessionManager._instance) new SessionManager(); return SessionManager._instance; } + +function GetSessionManagerSettings() { + if (!SessionManagerSettings._instance) + new SessionManagerSettings(); + + return SessionManagerSettings._instance; +} function onTimer(Id) { se = GetSessionManager(); se.restoreSession(); ADDED SessionManager.settings.ssf Index: SessionManager.settings.ssf ================================================================== --- SessionManager.settings.ssf +++ SessionManager.settings.ssf cannot compute difference between binary files Index: SessionManager.ssf ================================================================== --- SessionManager.ssf +++ SessionManager.ssf cannot compute difference between binary files