private void EditLabelStyle(RuleModel rule) { PointRuleModel pr = rule as PointRuleModel; LineRuleModel lr = rule as LineRuleModel; AreaRuleModel ar = rule as AreaRuleModel; UserControl uc = null; /* * if (m_owner.SelectedClass == null) * { * MessageBox.Show(Strings.NoFeatureClassAssigned); * return; * }*/ var previewScale = 0.0; if (_parentScaleRange.MinScale.HasValue) { previewScale = _parentScaleRange.MinScale.Value; } ILayerStylePreviewable prev = new LayerStylePreviewable(_edSvc.EditedResourceID, previewScale, 80, 40, "PNG", //NOXLATE rule.Index); //TODO: This is obviously a mess and could do with some future cleanup, but the idea here should be //easy to understand. Each primitive basic style (that's not a label) has 3 actions. // - Commit (When user clicks OK on dialog) // - Rollback (When user clicks Cancel on dialog) // - Edit Commit (When user invokes refresh) //Those that support GETLEGENDIMAGE-based previews will be passed an edit commit action. Invoking the //edit commit action will update the session-based layer with this edit-copy rule, allowing for the changes //to be reflected when we do the GETLEGENDIMAGE call // //Labels are exempt as those previews can be sufficiently simulated with System.Drawing API var vl = (IVectorLayerDefinition)_editedLayer.SubLayer; ClassDefinition clsDef = GetLayerClass(); Action commit = null; Action rollback = null; ITextSymbol labelToEdit = null; if (pr != null) { labelToEdit = pr.GetLabelStyle(); } else if (lr != null) { labelToEdit = lr.GetLabelStyle(); } else if (ar != null) { labelToEdit = ar.GetLabelStyle(); } m_origLabel = labelToEdit; m_editLabel = (labelToEdit == null) ? null : (ITextSymbol)labelToEdit.Clone(); uc = new FontStyleEditor(_edSvc, clsDef, vl.ResourceId); ((FontStyleEditor)uc).Item = m_editLabel; if (uc != null) { EditorTemplateForm dlg = new EditorTemplateForm(); dlg.ItemPanel.Controls.Add(uc); uc.Dock = DockStyle.Fill; dlg.RefreshSize(); var res = dlg.ShowDialog(this); if (res == DialogResult.OK) { if (commit != null) { commit.Invoke(); } ITextSymbol editedLabel = ((FontStyleEditor)uc).Item; if (pr != null) { pr.SetLabelStyle(editedLabel); _edSvc.HasChanged(); } else if (lr != null) { lr.SetLabelStyle(editedLabel); _edSvc.HasChanged(); } else if (ar != null) { ar.SetLabelStyle(editedLabel); _edSvc.HasChanged(); } } else if (res == DialogResult.Cancel) { if (rollback != null) { rollback.Invoke(); } } } }