// Event handlers void m_afterObjectAdded_Fire(int eventFlag, MmEventTime time, object pSource, ref object pExtra) { if (received) { return; } if (copypast) // Skip all add-events in a paste scope { return; } else { if (paste) { MMBase.SendMessage("paste", m_document); copypast = true; // resets in the m_afterObjectChanged_Fire via SendMessage() return; } } string _what = "", _extra = ""; objectAdded = true; foreach (MMBase _parent in DocumentStorage.m_parent) { _parent.onAfterObjectAddedBase(new MMEventArgs(pSource, _what, _extra, this)); } }
public static void Unsubscribe(MMBase aParent) { if (!m_parent.Contains(aParent)) { return; } m_parent.Remove(aParent); }
public static void Subscribe(MMBase aParent) { if (m_parent.Contains(aParent)) { return; } m_parent.Add(aParent); }
void m_afterObjectChanged_Fire(int eventFlag, MmEventTime time, object pSource, ref object pExtra) { if (received) { return; } if (extracase == "deleteimage") { extracase = ""; // отбиваем таймер удаления картинки } // TODO при добавлении связи может быть _what "AutoRoute"! И выходит исключение string _what = "", _extra = ""; if (pExtra is Array) { Array _pExtraAsArray = pExtra as Array; if (_pExtraAsArray.GetLength(0) > 0 && eventFlag == DocumentStorage.EventObjectModified) { _what = _pExtraAsArray.GetValue(0).ToString().ToLower(); } if (_pExtraAsArray.GetLength(0) > 1) { _extra = _pExtraAsArray.GetValue(1).ToString(); } } // TODO если выбран не топик, не граница и не связь, то выбран фоновой объект! if (_what == "collapsed" || _what == "selection") { return; } //if (paste && _what == "oneimage") //{ // extraTopic = null; // return; //} if (objectAdded) { if (_what != "offset") // все оффсетные события нахер { objectAdded = false; } return; } string sMessage = MMBase.SynergyMessage(m_document); //// Message sent from m_beforeObjectChanged_Fire when image deleted //if (sMessage == "deleteimage" && _what != "oneimage") //{ // MMBase.SendMessage("", m_document); // _what = "oneimage"; // pSource = extraTopic; //} //extraTopic = null; if (paste && sMessage != "paste") // отбиваем все пасты, которые не от копипаста или драгдропа ТОПИКОВ { paste = false; } if (paste && _what == "offset") { return; } //if (paste && !_topic.IsCentralTopic) // учитываем только paste, который пришел от message // return; if (_extra == SUtils.SYNERGYNAMESPACE) // отбиваются synergy-изменения в атрибутах объекта { return; } Topic _topic = pSource as Topic; if (_what == "custom" && _topic != null) // TODO (addins only?) addins: Synergy, Numbering, Rollup(Gantt) { if (_topic.IsCentralTopic && _extra == SUtils.SYNERGYMESSAGE) //SendMessage went off { if (sMessage == "paste") // SendMessage was emited from m_afterObjectAdded_Fire at starting paste copied objects { // so, paste events now is ended, we can process pasted objects foreach (MMBase _parent in DocumentStorage.m_parent) { _parent.onAfterPasteBase(new MMEventArgs(pSource, _what, _extra, this)); } paste = false; copypast = false; } //else if (sMessage == "received") // SendMessage was emited from ReceiveChanges // received = false; // прием закончен m_document.CentralTopic.get_Attributes(SUtils.SYNERGYMESSAGE).DeleteAll(); _topic = null; return; } if (_extra == SUtils.SYNERGYNAMESPACE && rollup) // all subtopics already skipped, rollup operation finished { rollup = false; _topic = null; return; } } if (rollup) // skip all rollup subtopics, change only parent { _topic = null; return; } if (_what == "task") // TODO впадает в цикл, если изменять Duration, Effort и ресурсы через панель Task Info { if (Changes.SaveChanges._topicxml == MMUtils.getCleanTopicXML(_topic.Xml)) { _topic = null; return; } } if (_topic != null) { // TODO надо как-то уловить последний оффсет для них и процессировать if ((_topic.IsFloatingTopic || _topic.IsCalloutTopic) && _what == "offset") { _topic = null; return; // number of offsets = number of floating topics in the map } if (_what == "task" && _extra == "") { // если при запуске карты выбран топик с задачей, то почему-то сразу срабатывает событие на task _topic = null; return; } //if (_what == "task" && _topic.Task.IsEmpty) // return; // при запуске карты может быть такое, если выбрано несколько топиков, один из который задача if (_extra == SUtils.numberinguri) { _what = "numbering"; } _extra = Changes.PortraitGet.TopicPortrait(_topic, ref _what, _extra, mc_MapFolderPath); //System.Windows.Forms.Clipboard.SetText(_extra); if (_extra == SUtils.rollupuri) { System.Windows.Forms.MessageBox.Show("'Комбинировать информацию о задании' пока не поддерживается, другие пользователи не получат это изменение", MMUtils.GetString("maps.synergywarning.caption")); return; } if (_extra == "queue") { System.Windows.Forms.MessageBox.Show("Произведенное изменение пока не поддерживается в Synergy, другие пользователи не получат это изменение", MMUtils.GetString("maps.synergywarning.caption")); return; } } foreach (MMBase _parent in DocumentStorage.m_parent) { _parent.onAfterObjectChangedBase(new MMEventArgs(pSource, _what, _extra, this)); } }