// EMERGENT GAME TECHNOLOGIES PROPRIETARY INFORMATION // // This software is supplied under the terms of a license agreement or // nondisclosure agreement with Emergent Game Technologies and may not // be copied or disclosed except in accordance with the terms of that // agreement. // // Copyright (c) 1996-2007 Emergent Game Technologies. // All Rights Reserved. // // Emergent Game Technologies, Chapel Hill, North Carolina 27517 // http://www.emergent.net using System; using System.Collections; using System.Diagnostics; using System.Drawing; using System.IO; using System.Windows.Forms; using Emergent.Gamebryo.SceneDesigner.Framework; using Emergent.Gamebryo.SceneDesigner.PluginAPI; using Emergent.Gamebryo.SceneDesigner.PluginAPI.StandardServices; using Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Dialogs; using Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Utility; using Message = Emergent.Gamebryo.SceneDesigner.PluginAPI.Message; namespace Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Panels { public class PalettePanel : Form { #region Private Data internal static readonly Color m_cOrphanColor = Color.Blue; //string m_currentPath; MPalette m_currentPalette; string m_currentCategory; MEntity m_currentEntity; ArrayList m_comboDrawHints; ISelectionService m_selectionService; ISettingsService m_settingsService; IUICommandService m_uiCommandService; ICommandPanelService m_commandPanelService; private IEntityPathService m_entityPathService; private ICommandService m_commandService; //bool m_bIsSyncingUI; bool m_bIsSyncingDropDown; bool m_bIsSyncingListView; bool m_bIsSyncingPaletteManagerToDropDown; bool m_bIsSyncingPaletteManagerToListView; private const string m_listSettingName = "PalettePanel.LargeIconView"; private const string m_saveIndicatorText = " (modified)"; //internal static readonly Color m_cDirtyColor = Color.Red; #endregion private System.Windows.Forms.ComboBox m_cbPalettePath; private System.Windows.Forms.ListView m_lvPalettes; private System.Windows.Forms.ImageList m_ilViewIcons; private System.Windows.Forms.ImageList m_ilViewIconsSmall; private System.Windows.Forms.ToolBarButton m_tbbImportPalette; private System.Windows.Forms.ToolBarButton m_tbbNewPalette; private System.Windows.Forms.ToolBarButton m_tbbNewTemplate; private System.Windows.Forms.ToolBarButton m_tbbCloneFromEntity; private System.Windows.Forms.ToolBarButton m_tbbMoveCopyRename; private System.Windows.Forms.ToolBarButton m_tbbDeleteTemplate; private System.Windows.Forms.ToolBarButton m_tbbAddArtAssets; private System.Windows.Forms.ToolBarButton m_tbbSeparator2; private System.Windows.Forms.ToolBarButton m_tbbLargeIcons; private System.Windows.Forms.ToolBarButton m_tbbSmallIcons; private System.Windows.Forms.ToolBar m_tbToolBar; private System.Windows.Forms.ContextMenu m_contextMenu; private System.Windows.Forms.MenuItem m_menuMoveRename; private System.Windows.Forms.MenuItem m_menuCopy; private System.Windows.Forms.MenuItem m_menuDelete; private System.Windows.Forms.Panel m_pnlPlaceHolder; private System.Windows.Forms.Timer m_timer; //private System.Windows.Forms.CheckBox checkBox1; private System.ComponentModel.IContainer components = null; private System.Windows.Forms.ToolBarButton m_tbbRenamePalette; private System.Windows.Forms.ToolBarButton m_tbbDeletePalette; private System.Windows.Forms.ToolBarButton m_tbbSeparator1; private System.Windows.Forms.ImageList m_ilToolbarImages; private System.Windows.Forms.ToolTip m_ttToolTip; private System.Windows.Forms.MenuItem m_menuSelectInScene; private System.Windows.Forms.MenuItem m_menuProperties; private MenuItem menuItem1; private MenuItem m_menuBatchCreate; private MenuItem m_menuEditNifProperty; private int m_iLastDirtyPaletteCount = int.MaxValue; public PalettePanel() { // This call is required by the Windows Form Designer. InitializeComponent(); m_currentPalette = null; m_currentCategory = ""; SettingsService.RegisterSettingsObject( m_listSettingName, true, SettingsCategory.PerUser); UICommandService.BindCommands(this); FW.EventManager.PaletteAdded += new MEventManager.__Delegate_PaletteAdded( EventManager_PaletteAdded); FW.EventManager.PaletteRemoved += new MEventManager.__Delegate_PaletteRemoved( EventManager_PaletteRemoved); FW.EventManager.ActivePaletteChanged += new MEventManager.__Delegate_ActivePaletteChanged( EventManager_ActivePaletteChanged); FW.EventManager.PaletteActiveEntityChanged += new MEventManager.__Delegate_PaletteActiveEntityChanged( EventManager_PaletteActiveEntityChanged); FW.EventManager.EntityAddedToScene += new MEventManager.__Delegate_EntityAddedToScene( EventManager_EntityAddedToPalette); FW.EventManager.EntityRemovedFromScene += new MEventManager.__Delegate_EntityRemovedFromScene( EventManager_EntityRemovedFromPalette); // FW.EventManager.EntityAddedToPalette += // new MEventManager.__Delegate_EntityAddedToPalette( // EventManager_EntityAddedToPalette); // // FW.EventManager.EntityRemovedFromPalette += // new MEventManager.__Delegate_EntityRemovedFromPalette( // EventManager_EntityRemovedFromPalette); } private enum ItemType { Palette, Category, Template } private class ComboDrawHint { public ItemType Type; public int indent; public string CategoryName; public MPalette Palette; } private MFramework FW { get { return MFramework.Instance; } } private ISelectionService SelectionService { get { if (m_selectionService == null) { ServiceProvider sp = ServiceProvider.Instance; m_selectionService = sp.GetService(typeof(ISelectionService)) as ISelectionService; } return m_selectionService; } } private ISettingsService SettingsService { get { if (m_settingsService == null) { ServiceProvider sp = ServiceProvider.Instance; m_settingsService = sp.GetService(typeof(ISettingsService)) as ISettingsService; } return m_settingsService; } } private IUICommandService UICommandService { get { if (m_uiCommandService == null) { ServiceProvider sp = ServiceProvider.Instance; m_uiCommandService = sp.GetService(typeof(IUICommandService)) as IUICommandService; } return m_uiCommandService; } } private ICommandPanelService CommandPanelService { get { if (m_commandPanelService == null) { ServiceProvider sp = ServiceProvider.Instance; m_commandPanelService = sp.GetService(typeof(ICommandPanelService)) as ICommandPanelService; } return m_commandPanelService; } } private ICommandService CommandService { get { if (m_commandService == null) { ServiceProvider sp = ServiceProvider.Instance; m_commandService = sp.GetService(typeof(ICommandService)) as ICommandService; } return m_commandService; } } private IEntityPathService EntityPathService { get { if (m_entityPathService == null) { ServiceProvider sp = ServiceProvider.Instance; m_entityPathService = sp.GetService(typeof(IEntityPathService)) as IEntityPathService; } return m_entityPathService; } } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PalettePanel)); this.m_cbPalettePath = new System.Windows.Forms.ComboBox(); this.m_lvPalettes = new System.Windows.Forms.ListView(); this.m_ilViewIcons = new System.Windows.Forms.ImageList(this.components); this.m_ilViewIconsSmall = new System.Windows.Forms.ImageList(this.components); this.m_tbToolBar = new System.Windows.Forms.ToolBar(); this.m_tbbImportPalette = new System.Windows.Forms.ToolBarButton(); this.m_tbbNewPalette = new System.Windows.Forms.ToolBarButton(); this.m_tbbRenamePalette = new System.Windows.Forms.ToolBarButton(); this.m_tbbDeletePalette = new System.Windows.Forms.ToolBarButton(); this.m_tbbSeparator1 = new System.Windows.Forms.ToolBarButton(); this.m_tbbNewTemplate = new System.Windows.Forms.ToolBarButton(); this.m_tbbCloneFromEntity = new System.Windows.Forms.ToolBarButton(); this.m_tbbMoveCopyRename = new System.Windows.Forms.ToolBarButton(); this.m_tbbDeleteTemplate = new System.Windows.Forms.ToolBarButton(); this.m_tbbAddArtAssets = new System.Windows.Forms.ToolBarButton(); this.m_tbbSeparator2 = new System.Windows.Forms.ToolBarButton(); this.m_tbbLargeIcons = new System.Windows.Forms.ToolBarButton(); this.m_tbbSmallIcons = new System.Windows.Forms.ToolBarButton(); this.m_ilToolbarImages = new System.Windows.Forms.ImageList(this.components); this.m_contextMenu = new System.Windows.Forms.ContextMenu(); this.m_menuMoveRename = new System.Windows.Forms.MenuItem(); this.m_menuCopy = new System.Windows.Forms.MenuItem(); this.m_menuDelete = new System.Windows.Forms.MenuItem(); this.m_menuSelectInScene = new System.Windows.Forms.MenuItem(); this.m_menuProperties = new System.Windows.Forms.MenuItem(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.m_menuBatchCreate = new System.Windows.Forms.MenuItem(); this.m_pnlPlaceHolder = new System.Windows.Forms.Panel(); this.m_timer = new System.Windows.Forms.Timer(this.components); this.m_ttToolTip = new System.Windows.Forms.ToolTip(this.components); this.m_menuEditNifProperty = new System.Windows.Forms.MenuItem(); this.m_pnlPlaceHolder.SuspendLayout(); this.SuspendLayout(); // // m_cbPalettePath // this.m_cbPalettePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.m_cbPalettePath.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; this.m_cbPalettePath.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.m_cbPalettePath.Location = new System.Drawing.Point(10, 0); this.m_cbPalettePath.Name = "m_cbPalettePath"; this.m_cbPalettePath.Size = new System.Drawing.Size(597, 22); this.m_cbPalettePath.TabIndex = 1; this.m_cbPalettePath.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.m_cbPalettePath_DrawItem); this.m_cbPalettePath.SelectionChangeCommitted += new System.EventHandler(this.m_cbPalettePath_SelectionChangeCommitted); // // m_lvPalettes // this.m_lvPalettes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.m_lvPalettes.HideSelection = false; this.m_lvPalettes.LargeImageList = this.m_ilViewIcons; this.m_lvPalettes.Location = new System.Drawing.Point(10, 26); this.m_lvPalettes.MultiSelect = false; this.m_lvPalettes.Name = "m_lvPalettes"; this.m_lvPalettes.Size = new System.Drawing.Size(597, 333); this.m_lvPalettes.SmallImageList = this.m_ilViewIconsSmall; this.m_lvPalettes.Sorting = System.Windows.Forms.SortOrder.Ascending; this.m_lvPalettes.TabIndex = 0; this.m_lvPalettes.UseCompatibleStateImageBehavior = false; this.m_lvPalettes.ItemActivate += new System.EventHandler(this.m_lvPalettes_ItemActivate); this.m_lvPalettes.SelectedIndexChanged += new System.EventHandler(this.m_lvPalettes_SelectedIndexChanged); this.m_lvPalettes.MouseUp += new System.Windows.Forms.MouseEventHandler(this.m_lvPalettes_MouseUp); this.m_lvPalettes.KeyDown += new System.Windows.Forms.KeyEventHandler(this.m_lvPalettes_KeyDown); // // m_ilViewIcons // this.m_ilViewIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("m_ilViewIcons.ImageStream"))); this.m_ilViewIcons.TransparentColor = System.Drawing.Color.Transparent; this.m_ilViewIcons.Images.SetKeyName(0, ""); this.m_ilViewIcons.Images.SetKeyName(1, ""); this.m_ilViewIcons.Images.SetKeyName(2, ""); // // m_ilViewIconsSmall // this.m_ilViewIconsSmall.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("m_ilViewIconsSmall.ImageStream"))); this.m_ilViewIconsSmall.TransparentColor = System.Drawing.Color.Transparent; this.m_ilViewIconsSmall.Images.SetKeyName(0, ""); this.m_ilViewIconsSmall.Images.SetKeyName(1, ""); this.m_ilViewIconsSmall.Images.SetKeyName(2, ""); // // m_tbToolBar // this.m_tbToolBar.Appearance = System.Windows.Forms.ToolBarAppearance.Flat; this.m_tbToolBar.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { this.m_tbbImportPalette, this.m_tbbNewPalette, this.m_tbbRenamePalette, this.m_tbbDeletePalette, this.m_tbbSeparator1, this.m_tbbNewTemplate, this.m_tbbCloneFromEntity, this.m_tbbMoveCopyRename, this.m_tbbDeleteTemplate, this.m_tbbAddArtAssets, this.m_tbbSeparator2, this.m_tbbLargeIcons, this.m_tbbSmallIcons}); this.m_tbToolBar.Divider = false; this.m_tbToolBar.DropDownArrows = true; this.m_tbToolBar.ImageList = this.m_ilToolbarImages; this.m_tbToolBar.Location = new System.Drawing.Point(0, 0); this.m_tbToolBar.Name = "m_tbToolBar"; this.m_tbToolBar.ShowToolTips = true; this.m_tbToolBar.Size = new System.Drawing.Size(616, 26); this.m_tbToolBar.TabIndex = 0; this.m_tbToolBar.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.m_tbToolBar_ButtonClick); // // m_tbbImportPalette // this.m_tbbImportPalette.ImageIndex = 0; this.m_tbbImportPalette.Name = "m_tbbImportPalette"; this.m_tbbImportPalette.ToolTipText = "Import Palette"; // // m_tbbNewPalette // this.m_tbbNewPalette.ImageIndex = 1; this.m_tbbNewPalette.Name = "m_tbbNewPalette"; this.m_tbbNewPalette.ToolTipText = "New Palette"; // // m_tbbRenamePalette // this.m_tbbRenamePalette.ImageIndex = 2; this.m_tbbRenamePalette.Name = "m_tbbRenamePalette"; this.m_tbbRenamePalette.ToolTipText = "Rename Palette"; // // m_tbbDeletePalette // this.m_tbbDeletePalette.ImageIndex = 3; this.m_tbbDeletePalette.Name = "m_tbbDeletePalette"; this.m_tbbDeletePalette.ToolTipText = "Delete Palette"; // // m_tbbSeparator1 // this.m_tbbSeparator1.Name = "m_tbbSeparator1"; this.m_tbbSeparator1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // m_tbbNewTemplate // this.m_tbbNewTemplate.ImageIndex = 4; this.m_tbbNewTemplate.Name = "m_tbbNewTemplate"; this.m_tbbNewTemplate.ToolTipText = "New Template"; // // m_tbbCloneFromEntity // this.m_tbbCloneFromEntity.ImageIndex = 5; this.m_tbbCloneFromEntity.Name = "m_tbbCloneFromEntity"; this.m_tbbCloneFromEntity.ToolTipText = "Clone Scene Entity As New Template"; // // m_tbbMoveCopyRename // this.m_tbbMoveCopyRename.ImageIndex = 6; this.m_tbbMoveCopyRename.Name = "m_tbbMoveCopyRename"; this.m_tbbMoveCopyRename.ToolTipText = "Move, Copy, or Rename Template"; // // m_tbbDeleteTemplate // this.m_tbbDeleteTemplate.ImageIndex = 7; this.m_tbbDeleteTemplate.Name = "m_tbbDeleteTemplate"; this.m_tbbDeleteTemplate.ToolTipText = "Delete Template"; // // m_tbbAddArtAssets // this.m_tbbAddArtAssets.ImageIndex = 8; this.m_tbbAddArtAssets.Name = "m_tbbAddArtAssets"; this.m_tbbAddArtAssets.ToolTipText = "Add Art Assets As Templates"; // // m_tbbSeparator2 // this.m_tbbSeparator2.Name = "m_tbbSeparator2"; this.m_tbbSeparator2.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // m_tbbLargeIcons // this.m_tbbLargeIcons.ImageIndex = 9; this.m_tbbLargeIcons.Name = "m_tbbLargeIcons"; this.m_tbbLargeIcons.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton; this.m_tbbLargeIcons.ToolTipText = "Large Icons"; // // m_tbbSmallIcons // this.m_tbbSmallIcons.ImageIndex = 10; this.m_tbbSmallIcons.Name = "m_tbbSmallIcons"; this.m_tbbSmallIcons.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton; this.m_tbbSmallIcons.ToolTipText = "Small Icons"; // // m_ilToolbarImages // this.m_ilToolbarImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("m_ilToolbarImages.ImageStream"))); this.m_ilToolbarImages.TransparentColor = System.Drawing.Color.Fuchsia; this.m_ilToolbarImages.Images.SetKeyName(0, ""); this.m_ilToolbarImages.Images.SetKeyName(1, ""); this.m_ilToolbarImages.Images.SetKeyName(2, ""); this.m_ilToolbarImages.Images.SetKeyName(3, ""); this.m_ilToolbarImages.Images.SetKeyName(4, ""); this.m_ilToolbarImages.Images.SetKeyName(5, ""); this.m_ilToolbarImages.Images.SetKeyName(6, ""); this.m_ilToolbarImages.Images.SetKeyName(7, ""); this.m_ilToolbarImages.Images.SetKeyName(8, ""); this.m_ilToolbarImages.Images.SetKeyName(9, ""); this.m_ilToolbarImages.Images.SetKeyName(10, ""); // // m_contextMenu // this.m_contextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.m_menuMoveRename, this.m_menuCopy, this.m_menuDelete, this.m_menuSelectInScene, this.m_menuProperties, this.menuItem1, this.m_menuBatchCreate, this.m_menuEditNifProperty}); // // m_menuMoveRename // this.m_menuMoveRename.Index = 0; this.m_menuMoveRename.Text = "&Move/Rename..."; this.m_menuMoveRename.Click += new System.EventHandler(this.m_menuMoveRename_Click); // // m_menuCopy // this.m_menuCopy.Index = 1; this.m_menuCopy.Text = "&Copy..."; this.m_menuCopy.Click += new System.EventHandler(this.m_menuCopy_Click); // // m_menuDelete // this.m_menuDelete.Index = 2; this.m_menuDelete.Text = "&Delete..."; this.m_menuDelete.Click += new System.EventHandler(this.m_menuDelete_Click); // // m_menuSelectInScene // this.m_menuSelectInScene.Index = 3; this.m_menuSelectInScene.Text = "Select In Scene"; this.m_menuSelectInScene.Click += new System.EventHandler(this.m_menuSelectInScene_Click); // // m_menuProperties // this.m_menuProperties.Index = 4; this.m_menuProperties.Text = "Properties"; this.m_menuProperties.Click += new System.EventHandler(this.m_menuProperties_Click); // // menuItem1 // this.menuItem1.Index = 5; this.menuItem1.Text = "ReImport"; this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click); // // m_menuBatchCreate // this.m_menuBatchCreate.Index = 6; this.m_menuBatchCreate.Text = "BatchCreate"; this.m_menuBatchCreate.Click += new System.EventHandler(this.m_menuBatchCreate_Click); // // m_pnlPlaceHolder // this.m_pnlPlaceHolder.BackColor = System.Drawing.SystemColors.Control; this.m_pnlPlaceHolder.Controls.Add(this.m_lvPalettes); this.m_pnlPlaceHolder.Controls.Add(this.m_cbPalettePath); this.m_pnlPlaceHolder.Dock = System.Windows.Forms.DockStyle.Fill; this.m_pnlPlaceHolder.Location = new System.Drawing.Point(0, 26); this.m_pnlPlaceHolder.Name = "m_pnlPlaceHolder"; this.m_pnlPlaceHolder.Size = new System.Drawing.Size(616, 372); this.m_pnlPlaceHolder.TabIndex = 1; // // m_timer // this.m_timer.Interval = 1000; this.m_timer.Tick += new System.EventHandler(this.m_timer_Tick); // // m_menuEditNifProperty // this.m_menuEditNifProperty.Index = 7; this.m_menuEditNifProperty.Text = "Edit Nif Property"; this.m_menuEditNifProperty.Click += new System.EventHandler(this.m_menuEditNifProperty_Click); // // PalettePanel // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.AutoScroll = true; this.ClientSize = new System.Drawing.Size(616, 398); this.Controls.Add(this.m_pnlPlaceHolder); this.Controls.Add(this.m_tbToolBar); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "PalettePanel"; this.Text = "Palettes"; this.Load += new System.EventHandler(this.PalettePanel_Load); this.m_pnlPlaceHolder.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion #region Winforms handlers private void PalettePanel_Load(object sender, System.EventArgs e) { SyncUI(); bool largeIconView = (bool) SettingsService.GetSettingsObject( m_listSettingName, SettingsCategory.PerUser); if (largeIconView) { m_btnLargeIconView_Click(this, e); } else { m_btnSmallIconView_Click(this, e); } m_timer.Start(); } private void m_btnImportPalette_Click(object sender, System.EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "Palette files (*.pal) |*.pal"; dlg.CheckFileExists = true; //We cannot import multiple files at once, because //import order can be important. dlg.Multiselect = true; if (dlg.ShowDialog() == DialogResult.OK) { IMessageService messageService = ServiceProvider.Instance.GetService( typeof(IMessageService)) as IMessageService; messageService.ClearMessages(MessageChannelType.Conflicts); PaletteUtilities.ImportPalettes(dlg.FileNames); } } private void m_lvPalettes_ItemActivate(object sender, System.EventArgs e) { if (!m_bIsSyncingListView) { ListView.SelectedListViewItemCollection selectedItems = m_lvPalettes.SelectedItems; if (selectedItems.Count > 0) { ListViewItem item = selectedItems[0]; ItemType itemType = (ItemType) item.Tag; switch(itemType) { case ItemType.Palette: { m_currentPalette = FW.PaletteManager.GetPaletteByName(item.Text); m_currentEntity = null; break; } case ItemType.Category: { string strItemText = item.Text.Substring(1); if (strItemText.Equals("..")) { if (m_currentCategory.Equals(string.Empty)) { m_currentPalette = null; } else { m_currentCategory = PaletteUtilities.ParentCategory( m_currentCategory); } } else { if (m_currentCategory.Equals(string.Empty)) { m_currentCategory = strItemText; } else { m_currentCategory = string.Format("{0}.{1}", m_currentCategory, strItemText); } } m_currentEntity = null; break; } case ItemType.Template: { UICommand command = UICommandService.GetCommand( "CreateInteractionMode"); if (command != null) { command.DoClick(this, null); } break; } default: { break; } } } SyncPaletteManagerToListView(); SyncUI(); } } private void m_lvPalettes_SelectedIndexChanged(object sender, System.EventArgs e) { if (!m_bIsSyncingListView) { ListView.SelectedListViewItemCollection selectedItems = m_lvPalettes.SelectedItems; if (selectedItems.Count > 0) { ListViewItem item = selectedItems[0]; ItemType itemType = (ItemType) item.Tag; switch (itemType) { case ItemType.Template: { m_currentEntity = m_currentPalette.GetEntityByName( AppendPaletteNameAndCategory(item.Text, m_currentPalette, m_currentCategory)); if (m_currentEntity == null) { //try to find it without the palette name if (m_currentCategory == string.Empty) { m_currentEntity = m_currentPalette.GetEntityByName( item.Text); } else { m_currentEntity = m_currentPalette.GetEntityByName( m_currentCategory + "." + item.Text); } } MTemplatePreviewer.Instance.SetScene(m_currentEntity); break; } default: { if (m_currentPalette != null) { m_currentEntity = null; } break; } } } else { m_currentEntity = null; } //We shouldn't need to sync the dropdown, //since changing the selection shouldn't effect what's in //the combo. We still need to sync the Palette manager SyncPaletteManagerToListView(); } } private string AppendPaletteNameAndCategory(string entityName, MPalette palette, string category) { string retVal = entityName; if (!category.Equals(string.Empty)) { retVal = string.Format("{0}.{1}", category, retVal); } retVal = string.Format("[{0}]{1}", palette.Name, retVal); return retVal; } private void m_cbPalettePath_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { e.DrawBackground(); e.DrawFocusRectangle(); Font drawFont = e.Font; Color textColor = e.ForeColor; if (e.Index > -1) { ComboDrawHint hint = m_comboDrawHints[e.Index] as ComboDrawHint; if ( hint.Palette != null) { if (hint.Palette.DontSave) { textColor = m_cOrphanColor; } } if((e.State & DrawItemState.ComboBoxEdit) == DrawItemState.ComboBoxEdit) { string text = "Null String"; //string saveIndicator = string.Empty; if (hint.Type == ItemType.Palette || hint.Type == ItemType.Category) { //if } switch (hint.Type) { case ItemType.Palette: { string saveIndicator = string.Empty; if (//!hint.Palette.DontSave && hint.Palette != null && hint.Palette.Scene.Dirty) { drawFont = new Font(drawFont, FontStyle.Bold); saveIndicator = m_saveIndicatorText; } text = string.Format(" [{0}]{1}", m_cbPalettePath.Items[e.Index].ToString(), saveIndicator); break; } case ItemType.Category: { string saveIndicator = string.Empty; if (//!m_currentPalette.DontSave && m_currentPalette.Scene.Dirty) { drawFont = new Font(drawFont, FontStyle.Bold); saveIndicator = m_saveIndicatorText; } text = string.Format(" [{0}].{1}{2}", m_currentPalette.Name, m_currentCategory, saveIndicator); break; } default: { text = "Error, bad item type!"; break; } } e.Graphics.DrawString( text, drawFont, new SolidBrush(textColor), 0, e.Bounds.Top); } else { Image image = m_ilViewIconsSmall.Images[(int) hint.Type]; Size imageSize = m_ilViewIconsSmall.ImageSize; int indent = e.Bounds.Left + hint.indent; string saveIndicator = string.Empty; switch (hint.Type) { case ItemType.Palette: { if (hint.Palette != null && hint.Palette.Scene.Dirty) { saveIndicator = m_saveIndicatorText; drawFont = new Font(drawFont, FontStyle.Bold); } break; } default: { saveIndicator = string.Empty; break; } } if (hint.Type == ItemType.Palette || hint.Type == ItemType.Category) e.Graphics.DrawImage(image, indent, e.Bounds.Top); e.Graphics.DrawString( m_cbPalettePath.Items[e.Index].ToString() + saveIndicator, drawFont, new SolidBrush(textColor), indent + imageSize.Width, e.Bounds.Top); } } } private void m_cbPalettePath_SelectionChangeCommitted(object sender, System.EventArgs e) { int index = m_cbPalettePath.SelectedIndex; ComboDrawHint hint = m_comboDrawHints[index] as ComboDrawHint; m_currentEntity = null; switch (hint.Type) { case ItemType.Palette: { m_currentPalette = hint.Palette; m_currentCategory = string.Empty; break; } case ItemType.Category: { m_currentCategory = hint.CategoryName; break; } default: { return; } } //SyncListView(); SyncPaletteManagerToDropDown(); SyncUI(); } private void m_btnMakeTemplateFromSelected_Click(object sender, System.EventArgs e) { //The UI enabler should ensure that this never gets clicked unless //there is one and only one entity slected MEntity entity = SelectionService.GetSelectedEntities()[0]; AddNewTemplateDlg dlg = new AddNewTemplateDlg(); dlg.TemplateName = entity.Name; dlg.SelectedPalette = m_currentPalette; dlg.Category = m_currentCategory; if (dlg.ShowDialog() == DialogResult.OK) { MEntity existingTemplate = m_currentPalette.GetEntityByName(dlg.TemplateName); if (existingTemplate != null) { //string existingCategory = m_currentPalette } MEntity newTemplate = entity.Clone(dlg.TemplateName, false); newTemplate.MasterEntity = null; newTemplate.TemplateID = Guid.NewGuid(); dlg.SelectedPalette.AddEntity(newTemplate, dlg.Category, true); dlg.SelectedPalette.ActiveEntity = newTemplate; if(FW.PaletteManager.ActivePalette != dlg.SelectedPalette) { FW.PaletteManager.ActivePalette = dlg.SelectedPalette; } CommandPanelService.ShowPanel("Template Properties", true); } } private void m_btnSmallIconView_Click(object sender, System.EventArgs e) { m_tbbSmallIcons.Enabled = false; m_tbbLargeIcons.Enabled = true; m_tbbSmallIcons.Pushed = true; m_tbbLargeIcons.Pushed = false; SettingsService.SetSettingsObject(m_listSettingName, false, SettingsCategory.PerUser); m_lvPalettes.View = View.List; } private void m_btnLargeIconView_Click(object sender, System.EventArgs e) { m_tbbSmallIcons.Enabled = true; m_tbbLargeIcons.Enabled = false; m_tbbSmallIcons.Pushed = false; m_tbbLargeIcons.Pushed = true; SettingsService.SetSettingsObject(m_listSettingName, true, SettingsCategory.PerUser); m_lvPalettes.View = View.LargeIcon; } private void m_btnNewPalette_Click(object sender, System.EventArgs e) { ArrayList paletteNames = new ArrayList(); foreach (MPalette palette in FW.PaletteManager.GetPalettes()) { paletteNames.Add(palette.Name); } AddNewPaletteDlg dlg = new AddNewPaletteDlg( paletteNames.ToArray(typeof(string)) as string[]); if (dlg.ShowDialog() == DialogResult.OK) { MPalette newPalette = new MPalette(dlg.PaletteName, 0); newPalette.Scene.Dirty = true; FW.PaletteManager.AddPalette(newPalette); FW.PaletteManager.ActivePalette = newPalette; } } private void m_btnMoveTemplate_Click(object sender, System.EventArgs e) { MoveCopyRename(false); } private void MoveCopyRename(bool bCheckCopyBox) { AddNewTemplateDlg dlg = new AddNewTemplateDlg(); dlg.CopyOptionChecked = bCheckCopyBox; dlg.SelectedPalette = m_currentPalette; dlg.Category = m_currentCategory; dlg.TemplateName = PaletteUtilities.SimpleName(m_currentEntity.Name); dlg.Text = "Copy, Move or Rename Template..."; dlg.ShowCopyOption = true; if (dlg.ShowDialog() == DialogResult.OK) { MPalette oldPalette = m_currentPalette; string oldCategory = m_currentCategory; MEntity oldEntity = m_currentEntity; MPalette newPalette = dlg.SelectedPalette; string newCategory = dlg.Category; string newName; if (newCategory != string.Empty) { newName = string.Format("[{0}]{1}.{2}", newPalette.Name, newCategory, dlg.TemplateName); } else { newName = string.Format("[{0}]{1}", newPalette.Name, dlg.TemplateName); } if (dlg.CopyOptionChecked) { CommandService.BeginUndoFrame( string.Format("Copied template '[{0}]{1}'", oldPalette.Name, oldEntity.Name)); } else { CommandService.BeginUndoFrame( string.Format("Moved/Renamed template '[{0}]{1}'", oldPalette.Name, oldEntity.Name)); } if (!dlg.CopyOptionChecked) { oldPalette.RemoveEntity(oldEntity, true); oldEntity.Name = newName; newPalette.AddEntity(oldEntity, string.Empty, true); } else { MEntity newEntity = oldEntity.Clone(newName, false); newEntity.TemplateID = Guid.NewGuid(); newPalette.AddEntity(newEntity, string.Empty, true); newPalette.ActiveEntity = newEntity; m_currentEntity = newEntity; } if (dlg.CopyOptionChecked) { FW.PaletteManager.ActivePalette = newPalette; } newPalette.ResetEntityNames(); if (!dlg.CopyOptionChecked) { newPalette.ActiveEntity = oldEntity; m_currentEntity = oldEntity; } m_currentCategory = newCategory; m_currentPalette = newPalette; SyncUI(); if (dlg.CopyOptionChecked) { CommandPanelService.ShowPanel("Template Properties", true); } CommandService.EndUndoFrame(true); } } private void m_btnDeleteTemplate_Click(object sender, System.EventArgs e) { MEntity templateToDelete = m_currentEntity; MEntity[] dependantEntities = FW.Scene.GetDependentEntities(templateToDelete); if (dependantEntities.Length > 0) { MessageBox.Show( "Entities in the scene depend on the selected template.\n" + "It will not be deleted.", "Cannot Delete Template"); } else { foreach(MPalette palette in FW.PaletteManager.GetPalettes()) { MEntity[] dependantPaletteEntities = palette.Scene.GetDependentEntities(templateToDelete); if (dependantPaletteEntities.Length > 0) { string warningText = string.Format( "Entities in Palette \"{0}\" depend on the " + "selected template", palette.Name); MessageBox.Show(warningText, "Delete template..."); return; } } m_currentPalette.RemoveEntity(m_currentEntity, true); m_currentPalette.ActiveEntity = null; } } private void m_lvPalettes_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { switch (e.KeyData) { case Keys.Delete: { if (m_tbbDeleteTemplate.Enabled) { m_btnDeleteTemplate_Click(sender, e); } break; } } } private void m_btnNewTemplate_Click(object sender, System.EventArgs e) { AddNewTemplateDlg dlg = new AddNewTemplateDlg(); dlg.SelectedPalette = m_currentPalette; dlg.Category = m_currentCategory; if (dlg.ShowDialog() == DialogResult.OK) { string fullTemplateName = AppendPaletteNameAndCategory(dlg.TemplateName, FW.PaletteManager.ActivePalette, dlg.Category); MEntity newEntity = MEntity.CreateGeneralEntity(fullTemplateName); //category name is already included dlg.SelectedPalette.AddEntity(newEntity, string.Empty, true); FW.PaletteManager.ActivePalette = dlg.SelectedPalette; FW.PaletteManager.ActivePalette.ActiveEntity = newEntity; CommandPanelService.ShowPanel("Template Properties", true); } } private void m_btnRenamePaletteClick(object sender, System.EventArgs e) { MPaletteManager paletteManager = FW.PaletteManager; ArrayList paletteNames = new ArrayList(); foreach (MPalette palette in paletteManager.GetPalettes()) { paletteNames.Add(palette.Name); } paletteNames.Add("Unsaved Scene Templates"); AddNewPaletteDlg dlg = new AddNewPaletteDlg( paletteNames.ToArray(typeof(string)) as string[]); //AddNewPaletteDlg dlg = new AddNewPaletteDlg(); dlg.Text = "Rename Palette"; string selectedPaletteName; if (m_currentPalette != null) { selectedPaletteName = m_currentPalette.Name; } else { selectedPaletteName = m_lvPalettes.SelectedItems[0].Text; } dlg.PaletteName = selectedPaletteName; if (dlg.ShowDialog() == DialogResult.OK && !dlg.PaletteName.Equals(selectedPaletteName)) { MPalette palette = paletteManager.GetPaletteByName( selectedPaletteName); RenamePalette(palette, dlg.PaletteName); } } private void m_btnDeletePaletteClick(object sender, ToolBarButtonClickEventArgs e) { MPaletteManager paletteManager = FW.PaletteManager; string selectedPaletteName; if (m_currentPalette != null) { selectedPaletteName = m_currentPalette.Name; } else { selectedPaletteName = m_lvPalettes.SelectedItems[0].Text; } MPalette palette = paletteManager.GetPaletteByName( selectedPaletteName); MEntity[] templates = palette.GetEntities(); foreach(MEntity template in templates) { MEntity[] dependantEntities = FW.Scene.GetDependentEntities(template); if (dependantEntities.Length > 0) { MessageBox.Show( "Entities in the scene depend on templates in the" + " selected palette.\n It will not be deleted.", "Cannot Delete Palette"); return; } } DialogResult result = MessageBox.Show(string.Format("Deleting a palette " + "is NOT undoable, are you sure you would like delete '{0}'?", palette.Name), "Delete Palette?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result == DialogResult.Yes) { DeletePalette(palette); } } private void m_tbToolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { ToolBarButton[] buttons = { m_tbbImportPalette, m_tbbNewPalette, m_tbbNewTemplate, m_tbbCloneFromEntity, m_tbbMoveCopyRename, m_tbbDeleteTemplate, m_tbbAddArtAssets, m_tbbLargeIcons, m_tbbSmallIcons, m_tbbRenamePalette, m_tbbDeletePalette }; switch (Array.IndexOf(buttons, e.Button)) { case 0: //Import Palette { m_btnImportPalette_Click(sender, e); break; } case 1: //New Palette { m_btnNewPalette_Click(sender, e); break; } case 2: //New Template { m_btnNewTemplate_Click(sender, e); break; } case 3: //Clone From Entity { m_btnMakeTemplateFromSelected_Click(sender, e); break; } case 4: //Move/Copy/Rename { m_btnMoveTemplate_Click(sender, e); break; } case 5: //Delete Template { m_btnDeleteTemplate_Click(sender, e); break; } case 6: //Add art assets { UICommandService.GetCommand( "CreateTemplateFromFiles").DoClick(sender, e); break; } case 7: //LargeIcons { m_btnLargeIconView_Click(sender, e); break; } case 8: //Small Icons { m_btnSmallIconView_Click(sender, e); break; } case 9: //Rename Palette { m_btnRenamePaletteClick(sender, e); break; } case 10: //Delete Palette { m_btnDeletePaletteClick(sender, e); break; } default: { throw new InvalidOperationException( "An invalid ToolBar Button index was encountered"); } } } private void m_lvPalettes_MouseUp(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Right) == MouseButtons.Right) { if (m_lvPalettes.SelectedItems.Count > 0) { ListViewItem item = m_lvPalettes.SelectedItems[0]; ItemType itemType = (ItemType) item.Tag; switch (itemType) { case ItemType.Template: { m_contextMenu.Show(m_lvPalettes, new Point(e.X, e.Y)); break; } default: { break; } } } } } private void m_menuMoveRename_Click(object sender, System.EventArgs e) { MoveCopyRename(false); } private void m_menuCopy_Click(object sender, System.EventArgs e) { MoveCopyRename(true); } private void m_menuDelete_Click(object sender, System.EventArgs e) { m_btnDeleteTemplate_Click(sender, e); } private void m_menuSelectInScene_Click(object sender, System.EventArgs e) { MScene mainScene = MFramework.Instance.Scene; ArrayList selectionList = new ArrayList(); MEntity entityToFind = m_currentEntity; MEntity[] dependantEntities = mainScene.GetDependentEntities(entityToFind); foreach (MEntity entity in dependantEntities) { if (mainScene.IsEntityInScene(entity)) { selectionList.Add(entity); } } if (selectionList.Count > 0) { //081231 add by 和萌 //清除选择列表 ISelectionService selectionService = ServiceProvider.Instance.GetService( typeof(ISelectionService)) as ISelectionService; selectionService.ClearSelectedEntities(); selectionService.AddEntitiesToSelection( selectionList.ToArray(typeof(MEntity)) as MEntity[]); } } private void m_menuProperties_Click(object sender, System.EventArgs e) { ICommandPanelService panelService = ServiceProvider.Instance.GetService( typeof(ICommandPanelService)) as ICommandPanelService; Form panel = panelService.GetPanel("Template Properties"); if (panel != null) { panelService.ShowPanel("Template Properties", true); } } #endregion #region UI element refresh code private void SyncUI() { //if (!m_bIsSyncingPaletteManager) { SyncListView(); SyncDropDown(); } } private void SyncPaletteManagerToListView() { if(!m_bIsSyncingListView) { m_bIsSyncingPaletteManagerToListView = true; DoPaletteSync(); m_bIsSyncingPaletteManagerToListView = false; } } /// /// Called only by the SyncPaletteManager* methods /// Do not call directly /// private void DoPaletteSync() { MPalette oldPalette = FW.PaletteManager.ActivePalette; if (m_currentPalette != oldPalette) { FW.PaletteManager.ActivePalette = m_currentPalette; } if (FW.PaletteManager.ActivePalette != null) { MEntity oldTemplate = FW.PaletteManager.ActivePalette.ActiveEntity; if (m_currentEntity != oldTemplate) { FW.PaletteManager.ActivePalette.ActiveEntity = m_currentEntity; } } } private void SyncPaletteManagerToDropDown() { if(!m_bIsSyncingDropDown) { m_bIsSyncingPaletteManagerToDropDown = true; DoPaletteSync(); m_bIsSyncingPaletteManagerToDropDown = false; } } private void SyncListView() { if (!m_bIsSyncingPaletteManagerToListView) { m_bIsSyncingListView = true; if (m_currentPalette == null) { RefreshListViewTopLevel(); } else { m_lvPalettes.Items.Clear(); string[] categories = PaletteUtilities.BuildSubcategories(m_currentPalette, m_currentCategory); ListViewItem upDirectoryItem = m_lvPalettes.Items.Add( " ..", (int) ItemType.Category); upDirectoryItem.Tag = ItemType.Category; foreach (string subCategory in categories) { ListViewItem item = m_lvPalettes.Items.Add(" " + PaletteUtilities.SimpleName(subCategory), (int) ItemType.Category); item.Tag = ItemType.Category; } MEntity[] currentEntities = BuildEntitiesInCategory(m_currentPalette, m_currentCategory); foreach (MEntity entity in currentEntities) { ListViewItem item = m_lvPalettes.Items.Add( PaletteUtilities.SimpleName(entity.Name), (int) ItemType.Template); item.Tag = ItemType.Template; if (entity == m_currentEntity) { item.Selected = true; } } } m_bIsSyncingListView = false; } } private void RefreshListViewTopLevel() { m_lvPalettes.Items.Clear(); MFramework fw = MFramework.Instance; MPalette[] palettes = fw.PaletteManager.GetPalettes(); foreach (MPalette palette in palettes) { ListViewItem item = m_lvPalettes.Items.Add(palette.Name , 0); if (palette.Scene.Dirty) { item.Font = new Font(item.Font, FontStyle.Bold); } if (palette.DontSave) { item.ForeColor = m_cOrphanColor; } item.Tag = ItemType.Palette; } } private void SyncDropDown() { if (!m_bIsSyncingPaletteManagerToDropDown) { m_bIsSyncingDropDown = true; MPalette[] palettes = FW.PaletteManager.GetPalettes(); m_cbPalettePath.Items.Clear(); ArrayList hints = new ArrayList(); int indexToSelect = 0; //Add "Root" Level m_cbPalettePath.Items.Add("All Palettes"); ComboDrawHint rootHint = new ComboDrawHint(); rootHint.Type = ItemType.Palette; rootHint.Palette = null; hints.Add(rootHint); int itemCounter = 1; foreach (MPalette palette in palettes) { m_cbPalettePath.Items.Add(palette.Name); ComboDrawHint hint = new ComboDrawHint(); hint.Type = ItemType.Palette; hint.indent = rootHint.indent + 5; hint.Palette = palette; hints.Add(hint); itemCounter++; if (palette == m_currentPalette) { indexToSelect = itemCounter - 1; int currentIndent = hint.indent; if (!m_currentCategory.Equals(string.Empty)) { string[] categories = m_currentCategory.Split('.'); ArrayList localCategory = new ArrayList(); foreach (string category in categories) { localCategory.Add(category); m_cbPalettePath.Items.Add(category); ComboDrawHint categoryHint = new ComboDrawHint(); categoryHint.Type = ItemType.Category; currentIndent += 5; categoryHint.indent = currentIndent; categoryHint.CategoryName = PaletteUtilities.FullCategoryName( localCategory.ToArray(typeof(string)) as string[]); categoryHint.Palette = palette; hints.Add(categoryHint); itemCounter++; indexToSelect = itemCounter - 1; } } } } m_comboDrawHints = hints; m_cbPalettePath.SelectedIndex = indexToSelect; m_bIsSyncingDropDown = false; m_ttToolTip.SetToolTip(m_cbPalettePath, string.Format("Palette Folder: {0}", FW.PaletteManager.PaletteFolder)); } } #endregion #region Framework Utilities private MEntity[] BuildEntitiesInCategory(MPalette palette, string category) { ArrayList entityList = new ArrayList(); MEntity[] entities = palette.GetEntities(); foreach (MEntity entity in entities) { string entityCategory = MPalette.StripPaletteName( palette.GetEntityCategory(entity)); if (category.Equals(entityCategory)) { entityList.Add(entity); } } return entityList.ToArray(typeof(MEntity)) as MEntity[]; } #endregion #region Utility Methods private void DeletePalette(MPalette palette) { //string palettePath = // MFramework.Instance.PaletteManager.PaletteFolder + // palette.Name + ".pal"; //FileInfo fi = new FileInfo(palettePath); //if (fi.Exists) //{ // if ((fi.Attributes & FileAttributes.ReadOnly) == // FileAttributes.ReadOnly) // { // DialogResult result = // MessageBox.Show("Palette file is read only,\n" + // " are you sure you want to delete it?", // "Delete Palette?", MessageBoxButtons.YesNo, // MessageBoxIcon.Question); // if (result == DialogResult.Yes) // { // fi.Attributes = // fi.Attributes & ~FileAttributes.ReadOnly; // } // else // { // return; // } // } // fi.Delete(); //} //MFramework.Instance.PaletteManager.RemovePalette(palette); } private void RenamePalette(MPalette palette, string name) { //string paletteFolder = FW.PaletteManager.PaletteFolder; //string oldPalettePath = paletteFolder + palette.Name + ".pal"; //string newPalettePath = paletteFolder + name + ".pal"; //bool bSamePath = false; //if (oldPalettePath.ToUpper().Equals(newPalettePath.ToUpper())) //{ // bSamePath = true; //} //FileInfo fiNew = new FileInfo(newPalettePath); //FileInfo fiOld = new FileInfo(oldPalettePath); //if (!bSamePath && fiNew.Exists) //{ // MessageBox.Show("A palette with the requested name, \"" + // name + "\", already exists.", "Cannot Rename Palette", // MessageBoxButtons.OK, MessageBoxIcon.Error); // return; //} //if (fiOld.Exists) //{ // if ((fiOld.Attributes & FileAttributes.ReadOnly) == // FileAttributes.ReadOnly) // { // DialogResult result = // MessageBox.Show("The \"" + palette.Name + // "\" palette file is read only. Are you sure you " + // "want to rename it?", "Rename Palette?", // MessageBoxButtons.YesNo, MessageBoxIcon.Question); // if (result == DialogResult.No) // { // return; // } // } // fiOld.Attributes = fiOld.Attributes & ~FileAttributes.ReadOnly; //} //if (palette.Scene.Dirty || palette.DontSave) //{ // MFramework.Instance.PaletteManager.SavePalette( // palette, oldPalettePath, "GSA"); //} //try //{ // if (bSamePath) // { // string tempPalettePath = paletteFolder + // "____temp____.pal"; // fiOld.CopyTo(tempPalettePath, false); // fiOld.Delete(); // FileInfo fiTemp = new FileInfo(tempPalettePath); // Debug.Assert(fiTemp.Exists, "Unable to create temp " + // "palette file!"); // fiTemp.CopyTo(newPalettePath, false); // fiTemp.Delete(); // } // else // { // fiOld.CopyTo(newPalettePath, false); // fiOld.Delete(); // } //} //catch (IOException) //{ // throw; //} //FW.PaletteManager.RemovePalette(palette); //MPalette newPalette = // MFramework.Instance.PaletteManager.LoadPalette(newPalettePath); //PaletteUtilities.CheckForDuplicateTemplates(newPalette, // MFramework.Instance.PaletteManager.GetPalettes()); //FW.PaletteManager.AddPalette(newPalette); } #endregion #region Framework Event Handlers private void EventManager_PaletteAdded(MPalette pmPalette) { SyncUI(); } private void EventManager_PaletteRemoved(MPalette pmPalette) { SyncUI(); } private void EventManager_ActivePaletteChanged( MPalette pmActivePalette, MPalette pmOldActivePalette) { if (m_currentPalette != pmActivePalette) { m_currentPalette = pmActivePalette; m_currentCategory = string.Empty; if (pmActivePalette != null) { m_currentEntity = pmActivePalette.ActiveEntity; if (m_currentEntity != null) { m_currentCategory = MPalette.StripPaletteName( m_currentPalette.GetEntityCategory( m_currentEntity)); } } else { m_currentEntity = null; } SyncUI(); } } private void EventManager_PaletteActiveEntityChanged( MPalette pmPalette, MEntity pmOldActiveEntity) { //m_currentEntity = null; if (pmPalette == m_currentPalette) { m_currentEntity = m_currentPalette.ActiveEntity; if (m_currentEntity != null) { m_currentCategory = MPalette.StripPaletteName( m_currentPalette.GetEntityCategory(m_currentEntity)); } else { //m_currentCategory = ""; } SyncUI(); } } private void EventManager_EntityAddedToPalette(MScene pmScene, MEntity pmEntity) { if (m_currentPalette != null && m_currentPalette.Scene == pmScene) { SyncUI(); } } private void EventManager_EntityRemovedFromPalette(MScene pmScene, MEntity pmEntity, bool bResolveDependencies) { if (m_currentPalette != null && m_currentPalette.Scene == pmScene) { SyncUI(); } } #endregion [UICommandHandler("Idle")] private void OnIdle(object sender, EventArgs args) { //Only enable "From selected entities" if there is a selection bool bPaletteIsActive = FW.PaletteManager.ActivePalette != null; bool bPaletteIsActiveAndSavable = bPaletteIsActive && !FW.PaletteManager.ActivePalette.DontSave; bool bSaveablePalettesExist = false; bool bPaletteisSelected = m_currentPalette == null && m_lvPalettes.SelectedItems.Count != 0; MPalette[] palettes = FW.PaletteManager.GetPalettes(); foreach(MPalette palette in palettes) { if (!palette.DontSave) { bSaveablePalettesExist = true; break; } } bool bTemplateIsActive = bPaletteIsActive && (FW.PaletteManager.ActivePalette.ActiveEntity != null); m_tbbMoveCopyRename.Enabled = bTemplateIsActive && bSaveablePalettesExist; m_tbbDeleteTemplate.Enabled = bTemplateIsActive && bPaletteIsActiveAndSavable; m_tbbCloneFromEntity.Enabled = bPaletteIsActiveAndSavable && SelectionService.GetSelectedEntities().Length == 1; m_tbbNewTemplate.Enabled = bPaletteIsActiveAndSavable; m_tbbAddArtAssets.Enabled = bPaletteIsActiveAndSavable; m_tbbDeletePalette.Enabled = bPaletteIsActive || bPaletteisSelected; m_tbbRenamePalette.Enabled = bPaletteIsActive || bPaletteisSelected; } [UICommandValidator("CreateTemplateFromFiles")] private void OnValidateCreateTemplateFromFiles(object sender, UIState state) { bool bPaletteIsActive = FW.PaletteManager.ActivePalette != null; bool bPaletteIsActiveAndSavable = bPaletteIsActive && !FW.PaletteManager.ActivePalette.DontSave; state.Enabled = bPaletteIsActiveAndSavable; } [UICommandHandler("CreateTemplateFromFiles")] private void OnCreateTemplateFromFiles(object pmObject, EventArgs pmEventArgs) { OpenFileDialog pmOpenFileDialog = new OpenFileDialog(); pmOpenFileDialog.Title = "Choose Art Assets to Add to Palette"; pmOpenFileDialog.Filter = "All Files (*.*)|*.*"; pmOpenFileDialog.Multiselect = true; if (pmOpenFileDialog.ShowDialog() == DialogResult.OK) { AddNewTemplateDlg pmTemplateDialog = new AddNewTemplateDlg(); pmTemplateDialog.SelectedPalette = m_currentPalette; pmTemplateDialog.Category = m_currentCategory; pmTemplateDialog.ShowCopyOption = false; pmTemplateDialog.TemplateName = "[Multiple Templates]"; pmTemplateDialog.TemplateNameEnabled = false; if (pmTemplateDialog.ShowDialog() == DialogResult.OK) { CommandService.BeginUndoFrame( "Add art assets to palette"); MPalette pmPalette = pmTemplateDialog.SelectedPalette; string strCategory = pmTemplateDialog.Category; MEntity pmNewTemplate = null; foreach (string strFileName in pmOpenFileDialog.FileNames) { pmNewTemplate = MPalette.CreateTemplateFromFile( strFileName); if (pmNewTemplate != null) { string fullTemplateName = AppendPaletteNameAndCategory( pmNewTemplate.Name, FW.PaletteManager.ActivePalette, pmTemplateDialog.Category); pmNewTemplate.Name = fullTemplateName; // Add the new template to the palette. pmPalette.AddEntity(pmNewTemplate, string.Empty, true); } } FW.PaletteManager.ActivePalette = pmPalette; pmPalette.ActiveEntity = pmNewTemplate; m_currentCategory = strCategory; m_currentEntity = pmNewTemplate; m_currentPalette = pmPalette; SyncUI(); CommandService.EndUndoFrame(true); } } } private void m_timer_Tick(object sender, System.EventArgs e) { MFramework fw = MFramework.Instance; if (!m_cbPalettePath.DroppedDown) { m_cbPalettePath.Invalidate(); } { //See if a refresh should be triggered int iDirtyPaletteCount = 0; foreach (MPalette palette in fw.PaletteManager.GetPalettes()) { if (palette.Scene.Dirty) { iDirtyPaletteCount++; } } if (iDirtyPaletteCount != m_iLastDirtyPaletteCount) { SyncListView(); m_iLastDirtyPaletteCount = iDirtyPaletteCount; } } } private void menuItem1_Click(object sender, EventArgs e) { MFramework.Instance.Scene.ReImportFile(m_currentEntity); } private void m_menuBatchCreate_Click(object sender, EventArgs e) { PaletteBatchTool form = new PaletteBatchTool(); form.Show(); } private void m_menuEditNifProperty_Click(object sender, EventArgs e) { // 编辑 nif 属性 MEntity pmDesEntity = MFramework.Instance.PaletteManager.ActivePalette.ActiveEntity; NifPropertyEditor form = new NifPropertyEditor(pmDesEntity); form.Show(); } } }