public ObjectSaveAsDialog(IStorageManager storageManager)
        {
            m_StorageManager = storageManager;
            m_Dlg = new ModalDialog();

            m_Dlg.MinHeight = 200;
            m_Dlg.MinWidth = 300;
            m_Dlg.Height = 400;
            m_Dlg.Width = 500;
            m_Dlg.Caption = Localization.SaveAsDialog_Caption;
            m_Dlg.DialogOk += new EventHandler<DialogResultArgs>(Dlg_DialogOk);
            m_Dlg.DialogClosed += new EventHandler<DialogResultArgs>(m_Dlg_DialogClosed);

            Grid LayoutRoot = new Grid();
            LayoutRoot.ColumnDefinitions.Add(new ColumnDefinition());
            LayoutRoot.ColumnDefinitions.Add(new ColumnDefinition());

            m_List = new ObjectDescriptionListControl();
            m_List.SelectionChanged += new EventHandler<SelectionChangedEventArgs<ObjectStorageFileDescription>>(m_List_SelectionChanged);
            m_List.ObjectSelected += new EventHandler<CustomEventArgs<ObjectStorageFileDescription>>(m_List_ObjectSelected);
            m_List.DeleteButtonClick += new EventHandler<CustomEventArgs<ObjectStorageFileDescription>>(m_List_DeleteButtonClick);
            m_List.DeleteAllButtonClick += new EventHandler<CustomEventArgs<ObjectStorageFileDescription>>(m_List_DeleteAllButtonClick);
            LayoutRoot.Children.Add(m_List);

            GridSplitter splitter_Vert = new GridSplitter();
            splitter_Vert.IsTabStop = false;
            LayoutRoot.Children.Add(splitter_Vert);
            Grid.SetColumn(splitter_Vert, 0);
            splitter_Vert.Background = new SolidColorBrush(Colors.Transparent);
            splitter_Vert.HorizontalAlignment = HorizontalAlignment.Right;
            splitter_Vert.VerticalAlignment = VerticalAlignment.Stretch;
            splitter_Vert.Width = 3;

            m_Description = new ObjectDescriptionControl() { Margin = new Thickness(5, 0, 0, 0) };
            m_Description.EndEdit += new EventHandler(m_Description_EndEdit);
            LayoutRoot.Children.Add(m_Description);
            Grid.SetColumn(m_Description, 1);

            m_Dlg.Content = LayoutRoot;

            if (m_StorageManager != null)
            {
                m_StorageManager.InvokeCompleted -= new EventHandler<DataLoaderEventArgs>(m_StorageManager_ActionCompleted);
                m_StorageManager.InvokeCompleted += new EventHandler<DataLoaderEventArgs>(m_StorageManager_ActionCompleted);
            }
        }
		protected virtual void ShowValueDeliveryDialog(CellInfo cell)
		{
			if (m_CSDescr != null && cell != null && cell.IsUpdateable)
			{
				// Если в кэше есть изменения, то нужно спросить об их сохранении
				if (UseChangesCashe && PivotGrid.LocalChanges.Count > 0)
				{
					MessageBox.Show(Localization.PivotGrid_SaveCachedChanges, Localization.MessageBox_Warning, MessageBoxButton.OK);
					return;
				}

				ModalDialog dlg = new ModalDialog();
				dlg.MinHeight = 300;
				dlg.MinWidth = 400;
				dlg.Height = 500;
				dlg.Width = 600;
				dlg.Caption = Localization.ValueDeliveryDialog_Caption;
				dlg.DialogOk += new EventHandler<DialogResultArgs>(ValueDeliveryDialog_OkButtonClick);

				ValueDeliveryControl DeliveryControl = new ValueDeliveryControl();
				DeliveryControl.CubeName = m_CSDescr.CubeName;
				DeliveryControl.ConnectionID = m_CSDescr.Connection.ConnectionID;
				DeliveryControl.LoadMembers += new EventHandler<QueryEventArgs>(DeliveryControl_LoadMembers);
				DeliveryControl.Initialize(cell);
				dlg.Content = DeliveryControl;

				ShowDialog(dlg);
			}
		}
		protected virtual void ShowValueCopyDialog(CellInfo cell)
		{
			if (m_CSDescr != null && cell != null && cell.IsUpdateable)
			{
				// Если в кэше есть изменения, то нужно спросить об их сохранении
				if (UseChangesCashe && PivotGrid.LocalChanges.Count > 0)
				{
					MessageBox.Show(Localization.PivotGrid_SaveCachedChanges, Localization.MessageBox_Warning, MessageBoxButton.OK);
					return;
				}

				IDictionary<String, MemberWrap> slice = new Dictionary<String, MemberWrap>();
				IDictionary<String, MemberInfo> tuple = cell.GetTuple();
				foreach (String hierarchyUniqueName in tuple.Keys)
				{
					slice.Add(hierarchyUniqueName, new MemberWrap(tuple[hierarchyUniqueName]));
				}

				ModalDialog dlg = new ModalDialog();
				dlg.MinHeight = 300;
				dlg.MinWidth = 400;
				dlg.Height = 500;
				dlg.Width = 600;
				dlg.Caption = Localization.ValueCopyDialog_Caption;
				dlg.DialogOk += new EventHandler<DialogResultArgs>(ValueCopyDialog_OkButtonClick);

				ValueCopyControl CopyControl = new ValueCopyControl();
				CopyControl.CubeName = m_CSDescr.CubeName;
				CopyControl.ConnectionID = m_CSDescr.Connection.ConnectionID;
				CopyControl.LoadMetaData += new EventHandler(ValueCopyControl_LoadMetaData);
				CopyControl.GetOlapDataLoader += new EventHandler<GetIDataLoaderArgs>(CopyControl_GetMetadataLoader);
				CopyControl.LogManager = this.LogManager;
				CopyControl.Initialize(slice, cell.Value);
				dlg.Content = CopyControl;

				ShowDialog(dlg);
			}
		}
		void CellsControl_PerformControlAction(object sender, ControlActionEventArgs<CellInfo> e)
		{
			switch (e.Action)
			{
				case ControlActionType.ShowMDX:
					UpdateEntry entry = new UpdateEntry(e.UserData);
					try
					{
						if (e.UserData != null)
							entry.OldValue = e.UserData.CellDescr.Value.Value.ToString();
					}
					catch { }

					UpdateEntry change = PivotGrid.LocalChanges.FindChange(e.UserData);
					if (change != null)
					{
						entry.NewValue = change.NewValue;
					}

					ShowDataSourceInfo(GetDataSourceInfo(entry));
					break;
				case ControlActionType.ShowProperties:
					ModalDialog dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK };
					CellPropertiesControl properties = new CellPropertiesControl();
					properties.Initialize(e.UserData);
					dlg.Content = properties;
					dlg.Caption = Localization.CellPropertiesDialog_Caption;
					Panel panel = GetRootPanel(this);
					if (panel != null)
					{
						panel.Children.Add(dlg.Dialog.PopUpControl);
					}
					ShowDialog(dlg);
					break;
				case ControlActionType.ValueDelivery:
					ShowValueDeliveryDialog(e.UserData);
					break;
				case ControlActionType.ValueCopy:
					ShowValueCopyDialog(e.UserData);
					break;
				case ControlActionType.Copy:
					CopyCellsToClipboard(e.UserData);
					break;
				case ControlActionType.Paste:
					PasteCellsFromClipboard(e.UserData);
					break;
				case ControlActionType.DrillThrough:
					DrillThroughCell(e.UserData);
					break;
				case ControlActionType.DataReorganizationType_None:
					ChangeDataReorganizationType(DataReorganizationTypes.None);
					break;
				case ControlActionType.DataReorganizationType_HitchToParent:
					ChangeDataReorganizationType(DataReorganizationTypes.LinkToParent);
					break;
				case ControlActionType.DataReorganizationType_MergeNeighbors:
					ChangeDataReorganizationType(DataReorganizationTypes.MergeNeighbors);
					break;
			}
		}
		/// <summary>
		/// Открывает диалог и обрабатывает блокировку подсказки для элементов сводной таблицы
		/// </summary>
		/// <param name="dlg"></param>
		void ShowDialog(ModalDialog dlg)
		{
			if (dlg != null)
			{
				// На время убираем контекстное меню сводной таблицы
				PivotGrid.UseContextMenu = false;
				// На время убираем всплывающую подсказку
				PivotGrid.TooltipManager.IsPaused = true;
				dlg.Show();
				dlg.DialogClosed -= new EventHandler<DialogResultArgs>(ModalDialog_DialogClosed);
				dlg.DialogClosed += new EventHandler<DialogResultArgs>(ModalDialog_DialogClosed);
			}
		}
		void ShowMemberAttributes(MemberData member)
		{
			if (member != null)
			{
				ModalDialog dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK };
				MemberPropertiesControl properties = new MemberPropertiesControl();
				properties.Initialize(member);
				dlg.Content = properties;
				dlg.Caption = Localization.CustomPropertiesDialog_Caption;
				Panel panel = GetRootPanel(this);
				if (panel != null)
				{
					panel.Children.Add(dlg.Dialog.PopUpControl);
				}
				ShowDialog(dlg);
			}
		}
 void MembersArea_PerformControlAction(object sender, ControlActionEventArgs<MemberInfo> e)
 {
     switch (e.Action)
     {
         case ControlActionType.ShowMDX:
             GetDataSourceInfo(null);
             break;
         case ControlActionType.ShowProperties:
             ModalDialog dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK };
             MemberPropertiesControl properties = new MemberPropertiesControl();
             properties.Initialize(e.UserData);
             dlg.Content = properties;
             dlg.Caption = Localization.MemberPropertiesDialog_Caption;
             Panel panel = GetRootPanel(this);
             if (panel != null)
             {
                 panel.Children.Add(dlg.Dialog.PopUpControl);
             }
             // На время убираем контекстное меню сводной таблицы
             dlg.DialogClosed += new EventHandler<DialogResultArgs>(Dlg_DialogClosed);
             PivotGrid.UseContextMenu = false;
             dlg.Show();
             break;
         case ControlActionType.ShowAttributes:
             ShowMemberAttributes(e.UserData);
             break;
     }
 }
		void MembersArea_PerformControlAction(object sender, ControlActionEventArgs<MemberControl> e)
		{
			ModalDialog dlg;
			MemberInfo info = e.UserData != null ? e.UserData.Member : null;
			switch (e.Action)
			{
				case ControlActionType.ShowMDX:
					ShowDataSourceInfo(GetDataSourceInfo(null));
					break;
				case ControlActionType.ShowProperties:
					dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK };
					MemberPropertiesControl properties = new MemberPropertiesControl();
					properties.Initialize(info);
					dlg.Content = properties;
					dlg.Caption = Localization.MemberPropertiesDialog_Caption;
					Panel panel = GetRootPanel(this);
					if (panel != null)
					{
						panel.Children.Add(dlg.Dialog.PopUpControl);
					}
					ShowDialog(dlg);
					break;
				case ControlActionType.ShowAttributes:
					ShowMemberAttributes(info);
					break;
				case ControlActionType.SortingByProperty:
					ShowSortPropertiesDialog(PivotTableSortTypes.SortByProperty, e.UserData);
					break;
				case ControlActionType.SortingAxisByMeasure:
					ShowSortPropertiesDialog(PivotTableSortTypes.SortAxisByMeasure, e.UserData);
					break;
				case ControlActionType.SortingByValue:
					ShowSortPropertiesDialog(PivotTableSortTypes.SortByValue, e.UserData);
					break;
				case ControlActionType.ClearAxisSorting:
					if (m_CellSetProvider != null)
					{
						if (e.UserData is ColumnMemberControl)
						{
							if (PivotGrid.AxisIsRotated == false)
								m_CellSetProvider.ClearSort(0);
							else
								m_CellSetProvider.ClearSort(1);
						}
						if (e.UserData is RowMemberControl)
						{
							if (PivotGrid.AxisIsRotated == false)
								m_CellSetProvider.ClearSort(1);
							else
								m_CellSetProvider.ClearSort(0);
						}
					}
					bool refreshed = false;
					if (DataManager != null)
					{
						if (DataManager.Axis0_MeasuresSort != null || DataManager.Axis1_MeasuresSort != null)
						{
							SetAxisByMeasureSort(e.UserData, null);
							refreshed = true;
							RunServiceCommand(ServiceCommandType.Refresh);
						}
					}

					if (!refreshed)
					{
						try
						{
							IsWaiting = true;
							PivotGrid.Initialize(m_CellSetProvider);
						}
						finally
						{
							IsWaiting = false;
						}
					}
					break;
				case ControlActionType.DataReorganizationType_None:
					ChangeDataReorganizationType(DataReorganizationTypes.None);
					break;
				case ControlActionType.DataReorganizationType_HitchToParent:
					ChangeDataReorganizationType(DataReorganizationTypes.LinkToParent);
					break;
				case ControlActionType.DataReorganizationType_MergeNeighbors:
					ChangeDataReorganizationType(DataReorganizationTypes.MergeNeighbors);
					break;
			}
		}
        private void btnChangeCustomImage_Click(object sender, RoutedEventArgs e)
        {
            if (m_ChangeCustomImageDialog == null)
            {
                m_ChangeCustomImageDialog = new ModalDialog() { Width = 600, Height = 300, DialogStyle = ModalDialogStyles.OKCancel };
                m_ChangeCustomImageDialog.Caption = Localization.ImageChoiceDialog_Caption;
                m_ChangeCustomImageDialog.DialogOk += new EventHandler<DialogResultArgs>(m_ChangeCustomImageDialog_DialogOk);
            }

            if (m_ImageChoice == null)
            {
                m_ImageChoice = new ImageChoiceControl();
                m_ChangeCustomImageDialog.Content = m_ImageChoice;
            }

            m_ImageChoice.Initialize();
            m_ChangeCustomImageDialog.Show();
        }
        void m_CalculatedMemberEditor_Click(object sender, RoutedEventArgs e)
        {
            if (m_CalculatedMemberEditorModalDialog == null)
            {
                m_CalculatedMemberEditorModalDialog = new ModalDialog();
                m_CalculatedMemberEditorModalDialog.BeforeClosed += new EventHandler<DialogResultArgs>(dlg_BeforeClosed);
                m_CalculatedMemberEditorModalDialog.DialogClosed += new EventHandler<DialogResultArgs>(dlg_DialogClosed);
                m_CalculatedMemberEditorModalDialog.DialogOk += new EventHandler<DialogResultArgs>(dlg_DialogOk);
                m_CalculatedMemberEditorModalDialog.Caption = Localization.CalcMemberEditor_DialogCaption;
                m_CalculatedMemberEditorModalDialog.MinHeight = 300;
                m_CalculatedMemberEditorModalDialog.MinWidth = 300;
                m_CalculatedMemberEditorModalDialog.Height = 500;
                m_CalculatedMemberEditorModalDialog.Width = 600;
            }

            if (m_CalculatedItemsEditor == null)
            {
                m_CalculatedItemsEditor = new CalculationsEditor();
                m_CalculatedItemsEditor.EditEnd += (s, args) => { m_CalculatedMemberEditorModalDialog.ListenKeys(true); };
                m_CalculatedItemsEditor.EditStart += (s, args) => { m_CalculatedMemberEditorModalDialog.ListenKeys(false); };
                m_CalculatedMemberEditorModalDialog.Content = m_CalculatedItemsEditor;
                m_CalculatedItemsEditor.CubeBrowser.OlapDataLoader = GetOlapDataLoader();
            }
            if(m_CalculatedItemsEditor.CubeBrowser.Connection != Connection)
                m_CalculatedItemsEditor.CubeBrowser.Connection = Connection;
            if(m_CalculatedItemsEditor.CubeBrowser.CubeName != CubeName)
                m_CalculatedItemsEditor.CubeBrowser.CubeName = CubeName;
            if(m_CalculatedItemsEditor.CubeBrowser.SubCube != SubCube)
                m_CalculatedItemsEditor.CubeBrowser.SubCube = SubCube;

            Dictionary<String, CalculationInfoBase> members = new Dictionary<string, CalculationInfoBase>();
            foreach (CalcMemberInfo info in CalculatedMembers)
            {
                CalcMemberInfo cloned = info.Clone() as CalcMemberInfo;
                if (cloned != null && !members.ContainsKey(cloned.Name))
                    members.Add(cloned.Name, cloned);
            }

            Dictionary<String, CalculationInfoBase> sets = new Dictionary<string, CalculationInfoBase>();
            foreach (CalculatedNamedSetInfo info in CalculatedNamedSets)
            {
                CalculatedNamedSetInfo cloned = info.Clone() as CalculatedNamedSetInfo;
                if (cloned != null && !sets.ContainsKey(cloned.Name))
                    sets.Add(cloned.Name, cloned);
            }

            m_CalculatedItemsEditor.Initialize(members, sets, m_ServerExplorer.CubeBrowser.CubeInfo, m_ServerExplorer.CubeBrowser.CurrentMeasureGroupName);
            m_CalculatedMemberEditorModalDialog.Show();
        }
        //public event EventHandler<GetIDataLoaderArgs> GetMetadataLoader;
        //public event EventHandler<GetIDataLoaderArgs> GetMembersLoader;
 
        //void Raise_GetMetadataLoader(GetIDataLoaderArgs args)
        //{
        //    EventHandler<GetIDataLoaderArgs> handler = this.GetMetadataLoader;
        //    if (handler != null)
        //    {
        //        handler(this, args);
        //    }
        //}

        //void Raise_GetMembersLoader(GetIDataLoaderArgs args)
        //{
        //    EventHandler<GetIDataLoaderArgs> handler = this.GetMembersLoader;
        //    if (handler != null)
        //    {
        //        handler(this, args);
        //    }
        //}

        void FilteredItem_ShowFilter(object sender, EventArgs e)
        {
            ModalDialog dialog = null;

            Composite_FilterWrapper composite_wrapper = null;
            FilteredItemControl item = sender as FilteredItemControl;
            if (item != null)
            {
                if (m_FilterDialogs.ContainsKey(item))
                {
                    dialog = m_FilterDialogs[item];
                }

                Hierarchy_AreaItemControl hierarchy_Item = item as Hierarchy_AreaItemControl;
                Level_AreaItemControl level_Item = item as Level_AreaItemControl;
                if (hierarchy_Item != null)
                {
                    composite_wrapper = hierarchy_Item.FilteredWrapper.CompositeFilter;
                }

                if (level_Item != null)
                {
                    composite_wrapper = level_Item.FilteredWrapper.CompositeFilter;
                }

                if (dialog == null)
                {
                    if (hierarchy_Item != null || level_Item != null)
                    {
                        String hierarchy_UniqueName = String.Empty;
                        String level_UniqueName = String.Empty;

                        if (hierarchy_Item != null)
                        {
                            hierarchy_UniqueName = hierarchy_Item.Hierarchy.UniqueName;
                        }

                        if (level_Item != null)
                        {
                            level_UniqueName = level_Item.Level.UniqueName;
                            hierarchy_UniqueName = level_Item.Level.HierarchyUniqueName;
                        }

                        dialog = new ModalDialog();
                        FilterBuilderControl filterControl = new FilterBuilderControl();
                        filterControl.ChoiceControl.CubeName = m_ServerExplorer.CurrentCubeName;
                        filterControl.ChoiceControl.SubCube = SubCube;
                        filterControl.ChoiceControl.Connection = Connection;
                        filterControl.ChoiceControl.HierarchyUniqueName = hierarchy_UniqueName;
                        filterControl.ChoiceControl.LogManager = LogManager;
                        filterControl.ChoiceControl.StartLevelUniqueName = level_UniqueName;
                        filterControl.ChoiceControl.MultiSelect = true;

                        filterControl.ChoiceControl.OlapDataLoader = GetOlapDataLoader();
                        filterControl.CubeInfo = m_ServerExplorer.CubeBrowser.CubeInfo;

                        dialog.Caption = Localization.FilterBuilder_Caption + "...";
                        dialog.Content = filterControl;
                        dialog.Tag = item;
                        dialog.Width = 650;
                        dialog.Height = 500;
                        dialog.DialogClosed += new EventHandler<DialogResultArgs>(dialog_DialogClosed);

                        m_FilterDialogs[item] = dialog;
                    }
                }
            }

            if (dialog != null)
            {
                FilterBuilderControl filterControl = dialog.Content as FilterBuilderControl;
                if (filterControl != null)
                {
                    filterControl.ChoiceControl.CubeName = m_ServerExplorer.CurrentCubeName;

                    if(item.Area == m_ColumnsAreaContainer || 
                        item.Area == m_RowsAreaContainer)
                        filterControl.UseFilterControl = true;
                    else
                        filterControl.UseFilterControl = false;

                    filterControl.Initialize(composite_wrapper);
                }
                
                dialog.Show();
            }
        }
        void CellsControl_PerformControlAction(object sender, ControlActionEventArgs<CellInfo> e)
        {
            switch (e.Action)
            {
                case ControlActionType.ShowMDX:
                    UpdateEntry entry = new UpdateEntry(e.UserData);
                    try
                    {
                        entry.OldValue = e.UserData.CellDescr.Value.Value.ToString();
                    }
                    catch { }

                    UpdateEntry change = PivotGrid.LocalChanges.FindChange(e.UserData);
                    if (change != null)
                    {
                        entry.NewValue = change.NewValue;
                    }

                    GetDataSourceInfo(entry);
                    break;
                case ControlActionType.ShowProperties:
                    ModalDialog dlg = new ModalDialog() {Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK };
                    CellPropertiesControl properties = new CellPropertiesControl();
                    properties.Initialize(e.UserData);
                    dlg.Content = properties;
                    dlg.Caption = Localization.CellPropertiesDialog_Caption;
                    Panel panel = GetRootPanel(this);
                    if (panel != null)
                    {
                        panel.Children.Add(dlg.Dialog.PopUpControl);
                    }
                    // На время убираем контекстное меню сводной таблицы
                    dlg.DialogClosed += new EventHandler<DialogResultArgs>(Dlg_DialogClosed);
                    PivotGrid.UseContextMenu = false;
                    dlg.Show();
                    break;
                case ControlActionType.ValueDelivery:
                    ShowValueDeliveryDialog(e.UserData);
                    break;
                case ControlActionType.ValueCopy:
                    ShowValueCopyDialog(e.UserData);
                    break;
                case ControlActionType.Copy:
                    CopyCellsToClipboard(e.UserData);
                    break;
                case ControlActionType.Paste:
                    PasteCellsFromClipboard(e.UserData);
                    break;
                case ControlActionType.DrillThrough:
                    DrillThroughCell(e.UserData);
                    break;
            }
        }
 void ShowMemberAttributes(MemberData member)
 {
     if (member != null)
     {
         ModalDialog dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK };
         MemberPropertiesControl properties = new MemberPropertiesControl();
         properties.Initialize(member);
         dlg.Content = properties;
         dlg.Caption = Localization.CustomPropertiesDialog_Caption;
         Panel panel = GetRootPanel(this);
         if (panel != null)
         {
             panel.Children.Add(dlg.Dialog.PopUpControl);
         }
         // На время убираем контекстное меню сводной таблицы
         dlg.DialogClosed += new EventHandler<DialogResultArgs>(Dlg_DialogClosed);
         PivotGrid.UseContextMenu = false;
         dlg.Show();
     }
 }
        void ShowDrillthroughResult(CellInfo cell, DataTableWrapper tableWrapper)
        {
            if (tableWrapper != null)
            {
                if (m_DrillthroughDialog == null)
                {
                    m_DrillthroughDialog = new ModalDialog() { Width = 600, Height = 500, DialogStyle = ModalDialogStyles.OK };
                    m_DrillthroughDialog.Caption = Localization.DrillthroughDialog_Caption;
                    m_DrillthroughDialog.DialogClosed += new EventHandler<DialogResultArgs>(Dlg_DialogClosed);
                }
                //RanetDataGrid grid = new RanetDataGrid();
                //grid.Initialize(tableWrapper);

                DrillThroughControl grid = new DrillThroughControl();
                grid.Initialize(cell, tableWrapper);
                m_DrillthroughDialog.Content = grid;
                Panel panel = GetRootPanel(this);
                if (panel != null && !panel.Children.Contains(m_DrillthroughDialog.Dialog.PopUpControl))
                {
                    panel.Children.Add(m_DrillthroughDialog.Dialog.PopUpControl);
                }
                // На время убираем контекстное меню сводной таблицы
                PivotGrid.UseContextMenu = false;
                m_DrillthroughDialog.Show();
            }
        }
		void ShowDataSourceInfo(DataSourceInfoArgs args)
		{
			ModalDialog dlg = new ModalDialog();
			dlg.Caption = Localization.DataSourceInfoDialog_Caption;
			dlg.MinHeight = 300;
			dlg.MinWidth = 400;
			dlg.Height = 400;
			dlg.Width = 500;

			DataSourceInfoControl DSInfo = new DataSourceInfoControl();
			dlg.Content = DSInfo;
			DSInfo.UpdateScriptVisibility = PivotGrid.CanEdit;
			DSInfo.Initialize(args);

			ShowDialog(dlg);
		}
        void m_PreviewButton_Click(object sender, RoutedEventArgs e)
        {
            ModalDialog dlg = new ModalDialog();
            dlg.MinHeight = 300;
            dlg.MinWidth = 400;
            dlg.Height = 500;
            dlg.Width = 600;
            dlg.Caption = Localization.ValueCopyDialog_Caption;
            dlg.DialogOk += new EventHandler<DialogResultArgs>(ValueCopyDialog_OkButtonClick);

            ValueCopyControl CopyControl = new ValueCopyControl();
            CopyControl.CubeName = CubeName;
            CopyControl.ConnectionID = Connection;
            CopyControl.GetOlapDataLoader += new EventHandler<GetIDataLoaderArgs>(CopyControl_GetOlapDataLoader);
            CopyControl.LogManager = this.LogManager;
            CopyControl.Initialize(m_CopyControl.GetCopySettings());
            dlg.Content = CopyControl;

            dlg.Show();
        }
		void ConditionsDesignerButton_Click(object sender, RoutedEventArgs e)
		{
			if (m_ConditionsDesignerDialog == null)
			{
				m_ConditionsDesignerDialog = new ModalDialog() { Width = 700, Height = 600, DialogStyle = ModalDialogStyles.OKCancel };
				m_ConditionsDesignerDialog.Caption = Localization.CellsConditionsDesignerDialog_Caption;
				m_ConditionsDesignerDialog.DialogOk += new EventHandler<DialogResultArgs>(m_ConditionsDesignerDialog_DialogOk);
			}

			if (m_CustomCellConditionsEditor == null)
			{
				m_CustomCellConditionsEditor = new CustomCellConditionsEditor();
				m_CustomCellConditionsEditor.StorageManager = StorageManager;
				m_CustomCellConditionsEditor.LogManager = LogManager;
				m_ConditionsDesignerDialog.Content = m_CustomCellConditionsEditor;
				m_CustomCellConditionsEditor.SaveStyles += new EventHandler<CustomEventArgs<ObjectDescription>>(m_CustomCellConditionsEditor_SaveStyles);
				m_CustomCellConditionsEditor.LoadStyles += new EventHandler<CustomEventArgs<ObjectStorageFileDescription>>(m_CustomCellConditionsEditor_LoadStyles);
			}

			m_CustomCellConditionsEditor.Initialize(CustomCellsConditions != null ? CustomCellsConditions.ToList<CellConditionsDescriptor>() : new List<CellConditionsDescriptor>());
			ShowDialog(m_ConditionsDesignerDialog);
		}
		void ShowDrillthroughResult(CellInfo cell, DataTableWrapper tableWrapper)
		{
			if (tableWrapper != null)
			{
				if (m_DrillthroughDialog == null)
				{
					m_DrillthroughDialog = new ModalDialog() { Width = 600, Height = 500, DialogStyle = ModalDialogStyles.OK };
					m_DrillthroughDialog.Caption = Localization.DrillthroughDialog_Caption;
				}
				//RanetDataGrid grid = new RanetDataGrid();
				//grid.Initialize(tableWrapper);

				DrillThroughControl grid = new DrillThroughControl();
				grid.Initialize(cell, tableWrapper);
				m_DrillthroughDialog.Content = grid;
				Panel panel = GetRootPanel(this);
				if (panel != null && !panel.Children.Contains(m_DrillthroughDialog.Dialog.PopUpControl))
				{
					panel.Children.Add(m_DrillthroughDialog.Dialog.PopUpControl);
				}
				ShowDialog(m_DrillthroughDialog);
			}
		}
		void ShowSortPropertiesDialog(PivotTableSortTypes sortType, MemberControl member)
		{
			ModalDialog dlg;
			SortPropertiesControl sortControl;
			if (sortType == PivotTableSortTypes.SortByValue)
			{
				// Сортировку по значению делаем отдельным диалогом чтобы не думать о сохранении размеров
				if (m_SortByValueDialog == null)
				{
					m_SortByValueDialog = new ModalDialog() { Width = 500, Height = 400, MinHeight = 250, MinWidth = 180, DialogStyle = ModalDialogStyles.OKCancel };
					m_SortByValueDialog.Caption = Localization.SortingSettingsDialog_Caption;
					m_SortByValueDialog.DialogOk += new EventHandler<DialogResultArgs>(SortProperties_DialogOk);
					Panel panel1 = GetRootPanel(this);
					if (panel1 != null)
					{
						panel1.Children.Add(m_SortByValueDialog.Dialog.PopUpControl);
					}
				}

				if (m_SortByValueSettingsControl == null)
				{
					m_SortByValueSettingsControl = new SortPropertiesControl();
					m_SortByValueSettingsControl.CubeName = m_CSDescr != null ? m_CSDescr.CubeName : String.Empty;
					m_SortByValueSettingsControl.ConnectionID = m_CSDescr != null ? m_CSDescr.Connection.ConnectionID : String.Empty;
					m_SortByValueSettingsControl.GetOlapDataLoader += new EventHandler<GetIDataLoaderArgs>(CopyControl_GetMetadataLoader);
					m_SortByValueSettingsControl.LogManager = this.LogManager;

					m_SortByValueSettingsControl.LoadMeasures += new EventHandler<CustomEventArgs<EventArgs>>(m_SortSettingsControl_LoadMeasures);
					m_SortByValueDialog.Content = m_SortByValueSettingsControl;
				}
				sortControl = m_SortByValueSettingsControl;
				dlg = m_SortByValueDialog;
			}
			else
			{
				if (m_SortDialog == null)
				{
					m_SortDialog = new ModalDialog() { Width = 400, Height = 250, MinHeight = 215, MinWidth = 180, DialogStyle = ModalDialogStyles.OKCancel };
					m_SortDialog.Caption = Localization.SortingSettingsDialog_Caption;
					m_SortDialog.DialogOk += new EventHandler<DialogResultArgs>(SortProperties_DialogOk);
					Panel panel1 = GetRootPanel(this);
					if (panel1 != null)
					{
						panel1.Children.Add(m_SortDialog.Dialog.PopUpControl);
					}
				}

				if (m_SortSettingsControl == null)
				{
					m_SortSettingsControl = new SortPropertiesControl();
					m_SortSettingsControl.CubeName = m_CSDescr != null ? m_CSDescr.CubeName : String.Empty;
					m_SortSettingsControl.ConnectionID = m_CSDescr != null ? m_CSDescr.Connection.ConnectionID : String.Empty;
					m_SortSettingsControl.GetOlapDataLoader += new EventHandler<GetIDataLoaderArgs>(CopyControl_GetMetadataLoader);
					m_SortSettingsControl.LogManager = this.LogManager;

					m_SortSettingsControl.LoadMeasures += new EventHandler<CustomEventArgs<EventArgs>>(m_SortSettingsControl_LoadMeasures);
					m_SortDialog.Content = m_SortSettingsControl;
				}
				sortControl = m_SortSettingsControl;
				dlg = m_SortDialog;
			}

			if (dlg == null || sortControl == null)
				return;

			dlg.Tag = sortControl;
			sortControl.Tag = member;

			SortDescriptor sort = null;
			switch (sortType)
			{
				case PivotTableSortTypes.SortByProperty:
					if (m_CellSetProvider != null &&
									member != null &&
									member.Member != null)
					{
						sort = GetAxisPropertySort(member);
					}
					break;
				case PivotTableSortTypes.SortAxisByMeasure:
					sort = GetAxisByMeasureSort(member);
					break;
				case PivotTableSortTypes.SortByValue:
					// Получаем сортировку для противоположной оси. Если это сортировка по значению, то проверяем чтобы это была сортировка для данного элемента. Если нет, то создается новый дескриптор
					if (member is ColumnMemberControl || member is RowMemberControl)
					{
						var value_sort = GetAxisSort(member is ColumnMemberControl ? AreaType.RowsArea : AreaType.ColumnsArea) as SortByValueDescriptor;
						if (value_sort != null && member != null && member.Member != null && value_sort.CompareByTuple(member.Member.GetAxisTuple()))
						{
							sort = value_sort;
						}
					}

					if (sort == null)
					{
						sort = new SortByValueDescriptor();
						if (member != null && member.Member != null)
						{
							(sort as SortByValueDescriptor).Tuple = member.Member.GetAxisTuple();
						}
					}
					break;
			}

			sortControl.Initialize(sortType, sort);
			ShowDialog(dlg);
		}
        void ShowDataSourceInfo(DataSourceInfoArgs args)
        {
            if (args != null)
            {
                ModalDialog dlg = new ModalDialog();
                dlg.Caption = Localization.DataSourceInfoDialog_Caption;
                dlg.MinHeight = 300;
                dlg.MinWidth = 400;
                dlg.Height = 400;
                dlg.Width = 500;

                DataSourceInfoControl DSInfo = new DataSourceInfoControl();
                dlg.Content = DSInfo;
                DSInfo.UpdateScriptVisibility = PivotGrid.CanEdit;
                DSInfo.Initialize(args);

                // На время убираем контекстное меню сводной таблицы
                dlg.DialogClosed += new EventHandler<DialogResultArgs>(Dlg_DialogClosed);
                PivotGrid.UseContextMenu = false;

                dlg.Show();
            }
        }