/* * GenerateCharacter.cs * Copyright (c) 2007-2009 kbinani * * This file is part of LipSync. * * LipSync is free software; you can redistribute it and/or * modify it under the terms of the BSD License. * * LipSync is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; using Boare.Lib.AppUtil; namespace LipSync { public partial class GenerateCharacter : Form, IMultiLanguageControl { //Character3 m_table_group.Character; private TimeTableGroup m_table_group; private bool m_setTrans = false; // 透過色を設定している時に立つフラグ bool m_loading = true; string m_last_path = ""; PictureBox m_dlg_picture; string m_selected_path; string m_last_image_folder = ""; ExtensibleDialogs.OpenFileDialog m_heavy_dialog; bool m_abort_thread = false; public GenerateCharacter( TimeTableGroup table_group ) { InitializeComponent(); ApplyLanguage(); ApplyFont( AppManager.Config.Font.GetFont() ); //m_table_group.Character = (Character3)character.Clone(); m_table_group = (TimeTableGroup)table_group.Clone(); this.menuFileOpen.Enabled = false; columnTag.Width = 50; columnTitle.Width = 130; #if DEBUG menuEditDebugEditVersionInfo.Visible = true; #endif } public GenerateCharacter( Character3 character ) { m_table_group = new TimeTableGroup( character.Name, 0, character ); m_table_group.list.Clear(); for ( int i = 0; i < character.Count; i++ ) { m_table_group.list.Add( new TimeTable( character[i].title, 0, TimeTableType.character, null ) ); } InitializeComponent(); ApplyLanguage(); ApplyFont( AppManager.Config.Font.GetFont() ); this.menuFileOpen.Enabled = true; columnTag.Width = 50; columnTitle.Width = 130; #if DEBUG menuEditDebugEditVersionInfo.Visible = true; #endif } public void ApplyLanguage() { this.lblTitle.Text = _( "Title" ); this.lblTag.Text = _( "Tag" ); this.columnTag.Text = _( "Tag" ); this.columnTitle.Text = _( "Title" ); this.btnUp.Text = _( "Up" ); this.btnDown.Text = _( "Down" ); this.btnAdd.Text = _( "Add" ); this.btnOK.Text = _( "OK" ); this.btnCancel.Text = _( "Cancel" ); this.menuSetImage.Text = _( "Select image file" ); this.menuTransparent.Text = _( "Select transparent color" ); this.menuFile.Text = _( "File" ) + "(&F)"; this.menuFileOpen.Text = _( "Open" ) + "(&O)"; this.menuFileSave.Text = _( "Save" ) + "(&S)"; this.label2.Text = _( "Character name" ); this.Text = _( "Edit character" ); this.menuEditTitle.Text = _( "Change title" ); this.menuDelete.Text = _( "Delete" ); this.groupBox1.Text = _( "Selected image" ); this.menuFileImport.Text = _( "Import" ) + "(&I)"; this.menuFileImportRsi.Text = _( "Open *.rsi" ) + "(&R)"; this.menuFileExport.Text = _( "Export" ) + "(&E)"; this.menuFileExportRsi.Text = _( "Save as *.rsi" ) + "(&R)"; this.menuFileExportXml.Text = _( "Save as XML" ) + "(&X)"; try { this.openLsc.Filter = _( "LipSync Character Config(*.lsc)|*.lsc" ) + "|" + _( "All Files(*.*)|*.*" ); } catch { this.openLsc.Filter = "LipSync Character Config(*.lsc)|*.lsc|All Files(*.*)|*.*"; } try { this.saveLsc.Filter = _( "LipSync Character Config(*.lsc)|*.lsc" ) + "|" + _( "All Files(*.*)|*.*" ); } catch { this.saveLsc.Filter = "LipSync Character Config(*.lsc)|*.lsc|All Files(*.*)|*.*"; } this.menuReset.Text = _( "Reset image" ); try { this.openRsi.Filter = _( "RipSync Image(*.rsi)|*.rsi" ) + "|" + _( "All Files(*.*)|*.*" ); } catch { this.openRsi.Filter = "RipSync Image(*.rsi)|*.rsi|All Files(*.*)|*.*"; } try { this.saveRsi.Filter = _( "RipSync Image(*.rsi)|*.rsi" ) + "|" + _( "All Files(*.*)|*.*" ); } catch { this.saveRsi.Filter = "RipSync Image(*.rsi)|*.rsi|All Files(*.*)|*.*" ; } this.menuEdit.Text = _( "Edit" ) + "(&E)"; this.menuEditAdd.Text = _( "Add" ); this.menuEditDelete.Text = _( "Delete" ); this.menuEditDown.Text = _( "Down" ); this.menuEditEditTitle.Text = _( "Change title" ); this.menuEditReset.Text = _( "Reset image" ); this.menuEditSetImage.Text = _( "Set image" ); this.menuEditTransparent.Text = _( "Select transparent color" ); this.menuEditUp.Text = _( "Up" ); } public void ApplyFont( Font font ) { this.Font = font; foreach ( Control c in this.Controls ) { Boare.Lib.AppUtil.Misc.ApplyFontRecurse( c, font ); } } public static string _( string s ) { return Messaging.GetMessage( s ); } public TimeTableGroup EditedResult { get { return m_table_group; } } /*public Character3 EditedResult { get { return m_table_group.Character; } }*/ public string LastPath { get { return m_last_path; } set { m_last_path = value; } } private void picturePreview_DoubleClick( object sender, EventArgs e ) { SetImage(); } private void menuFileSave_Click( object sender, EventArgs e ) { try { saveLsc.Filter = _( "LipSync Character Config(*.lsc)|*.lsc" ) + "|" + _( "All Files(*.*)|*.*" ); } catch { saveLsc.Filter = "LipSync Character Config(*.lsc)|*.lsc|All Files(*.*)|*.*"; } if ( saveLsc.ShowDialog() == DialogResult.OK ) { m_last_path = saveLsc.FileName; using ( FileStream fs = new FileStream( saveLsc.FileName, FileMode.Create ) ) { m_table_group.Character.Write( fs ); } } } private void menuFileOpen_Click( object sender, EventArgs e ) { bool dialog_result = false; string f1 = _( "LipSync Character Config(*.lsc)|*.lsc" ); string f2 = _( "LipSync Character Config(content.xml)|content.xml" ); string f3 = _( "All Files(*.*)|*.*" ); string filter = f1 + "|" + f2 + "|" + f3; string def_filter = "LipSync Character Config(*.lsc)|*.lsc|LipSync Character Config(content.xml)|content.xml|All Files(*.*)|*.*"; //string path = ""; if ( AppManager.Config.UseHeavyDialogInOpeningCharacterSettings ) { Panel p = new Panel(); p.BorderStyle = BorderStyle.Fixed3D; m_dlg_picture = new PictureBox(); p.Controls.Add( m_dlg_picture ); m_dlg_picture.Dock = DockStyle.Fill; m_dlg_picture.SizeMode = PictureBoxSizeMode.Zoom; // filterの有効性をまずチェック try { OpenFileDialog d = new OpenFileDialog(); d.Filter = filter; } catch { filter = def_filter; } m_heavy_dialog = new ExtensibleDialogs.OpenFileDialog( p ); m_heavy_dialog.DefaultExt = "lsc"; m_heavy_dialog.FileName = m_last_path; m_heavy_dialog.Filter = filter; m_heavy_dialog.SelectionChanged += new ExtensibleDialogs.OpenFileDialog.SelectionChangedHandler( dlg_SelectionChanged ); m_heavy_dialog.FolderChanged += new ExtensibleDialogs.OpenFileDialog.FolderChangedHandler( dlg_FolderChanged ); m_abort_thread = false; bgWork.RunWorkerAsync( m_last_path ); if ( m_heavy_dialog.ShowDialog() == DialogResult.OK ) { dialog_result = true; } else { dialog_result = false; } m_abort_thread = true; } else { try { openLsc.Filter = filter; } catch { openLsc.Filter = def_filter; } openLsc.FileName = m_last_path; if ( openLsc.ShowDialog() == DialogResult.OK ) { dialog_result = true; } else { dialog_result = false; } m_selected_path = openLsc.FileName; } if ( dialog_result ) { Bitmap preview; FileStream fs = null; try { if ( Path.GetFileName( m_selected_path ).ToLower() == "content.xml" ) { m_table_group.Character = Character3.FromXml( m_selected_path ); } else { fs = new FileStream( m_selected_path, FileMode.Open ); BinaryFormatter bf = new BinaryFormatter(); m_table_group.Character = (Character3)bf.Deserialize( fs ); fs.Close(); } } catch ( Exception ex1 ) { #if DEBUG MessageBox.Show( "GenerateCharacter.menuFileOpen_Click; ex1=" + ex1.ToString() ); #endif if ( fs != null ) { fs.Close(); } try { LipSync.Character t = LipSync.Character.FromFile( m_selected_path ); m_table_group.Character = new Character3( t ); } catch ( Exception ex3 ) { #if DEBUG MessageBox.Show( "GenerateCharacter.menuFileOpen_Click; ex3=" + ex3.ToString() ); #endif MessageBox.Show( _( "Failed file reading" ) ); return; } } if ( m_table_group.Character != null ) { picturePreview.Image = m_table_group.Character.DefaultFace; } update(); m_last_path = m_selected_path; } } private void bgWork_DoWork( object sender, DoWorkEventArgs e ) { #if DEBUG Common.DebugWriteLine( "bgWork_DoWork; start..." ); #endif string file = (string)e.Argument; if ( file == "" ) { #if DEBUG Common.DebugWriteLine( "bgWork_DoWork; ...complete" ); #endif return; } string folder; if ( Directory.Exists( file ) ) { folder = file; } else { folder = Path.GetDirectoryName( file ); } if ( !Directory.Exists( folder ) ) { #if DEBUG Common.DebugWriteLine( "bgWork_DoWork; ...complete" ); #endif return; } string[] file_lsc = Directory.GetFiles( folder, "*.lsc", SearchOption.TopDirectoryOnly ); string[] file_xml = Directory.GetFiles( folder, "content.xml", SearchOption.TopDirectoryOnly ); List files = new List( file_lsc ); files.AddRange( file_xml ); //m_dictionaty.Clear(); foreach ( string f in files ) { if ( m_abort_thread ) { break; } CharacterConfigCollection.Register( f ); } m_abort_thread = false; #if DEBUG Common.DebugWriteLine( "bgWork_DoWork; ...complete" ); #endif } void dlg_FolderChanged( string path ) { #if DEBUG Common.DebugWriteLine( "dlg_FolderChanged; path=" + path ); #endif if ( bgWork.IsBusy ) { m_abort_thread = true; while ( bgWork.IsBusy ) { Application.DoEvents(); } } m_abort_thread = false; bgWork.RunWorkerAsync( path ); } void dlg_SelectionChanged( string path ) { if ( !File.Exists( path ) ) { return; } m_selected_path = path; string file = Path.GetFileName( path ); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; if ( CharacterConfigCollection.IsRegistered( path ) ) { Image img = CharacterConfigCollection.GetPreviewImage( path ); if ( img != null ) { m_dlg_picture.Image = img; } else { m_dlg_picture.Image = new Bitmap( m_dlg_picture.Width, m_dlg_picture.Height ); using ( Graphics g = Graphics.FromImage( m_dlg_picture.Image ) ) { g.DrawString( "preview unavailable", new Font( "Arial", 11 ), Brushes.Black, new RectangleF( 0, 0, m_dlg_picture.Width, m_dlg_picture.Height ), sf ); } } } else { m_dlg_picture.Image = new Bitmap( m_dlg_picture.Width, m_dlg_picture.Height ); using ( Graphics g = Graphics.FromImage( m_dlg_picture.Image ) ) { g.DrawString( "loading ...", new Font( "Arial", 11 ), Brushes.Black, new RectangleF( 0, 0, m_dlg_picture.Width, m_dlg_picture.Height ), sf ); } } } /// /// 現在のm_table_group.Characterの内容を、listView1に適用します /// private void update() { if ( m_table_group.Character == null ) { return; } m_loading = true; textBox1.Text = m_table_group.Character.Name; string title = SelectedTitle; // 登録する. listView1.Items.Clear(); for ( int i = 0; i < m_table_group.Character.Count; i++ ) { ListViewItem adding = new ListViewItem( new string[] { m_table_group.Character[i].title, m_table_group.Character[i].tag } ); adding.Checked = m_table_group.Character[i].IsDefault; // AddしてからCheckedを変更すると,イベントが発生してめんどい. listView1.Items.Add( adding ); } if ( title != "" ) { for( int i = 0; i < listView1.Items.Count; i++ ){ if ( listView1.Items[i].Text == title ) { listView1.Items[i].EnsureVisible(); break; } } } this.Invalidate(); m_loading = false; } private void btnOK_Click( object sender, EventArgs e ) { this.DialogResult = DialogResult.OK; } private void textBox1_TextChanged( object sender, EventArgs e ) { m_table_group.Character.Name = textBox1.Text; } private void btnAdd_Click( object sender, EventArgs e ) { Add(); } private void menuSetImage_Click( object sender, EventArgs e ) { SetImage(); } private void GenerateCharacter_DragDrop( object sender, DragEventArgs e ) { #if DEBUG Common.DebugWriteLine( "GenerateCharacter_DragDrop" ); #endif if ( e.Data.GetDataPresent( DataFormats.FileDrop ) ) { object data = e.Data.GetData( DataFormats.FileDrop ); if ( data is string[] ) { string[] filename = (string[])data; for ( int i = 0; i < filename.Length; i++ ) { Image img = Common.ImageFromFile( filename[i] ); string title = Path.GetFileNameWithoutExtension( filename[i] ); #if DEBUG Common.DebugWriteLine( " filename[i]=" + filename[i] ); Common.DebugWriteLine( " title=" + title ); #endif if ( title != "" ) { #if DEBUG Common.DebugWriteLine( " SetImage..." ); #endif if ( m_table_group.Character[title] != null ) { m_table_group.Character.SetImage( img, title ); picturePreview.Image = img; int width = Math.Max( m_table_group.Character.Size.Width, img.Width ); int height = Math.Max( m_table_group.Character.Size.Height, img.Height ); #if DEBUG Common.DebugWriteLine( " Character3+Size..set()" ); #endif m_table_group.Character.Size = new Size( width, height ); } else { m_table_group.Character.Add( new ImageEntry( title, null, "", false, m_table_group.Character.Count ) ); m_table_group.Character.SetImage( img, title ); m_table_group.list.Add( new TimeTable( title, 0, TimeTableType.character, null ) ); int width = Math.Max( m_table_group.Character.Size.Width, img.Width ); int height = Math.Max( m_table_group.Character.Size.Height, img.Height ); m_table_group.Character.Size = new Size( width, height ); listView1.Items.Add( new ListViewItem( new string[] { title, "" } ) ); listView1.Items[listView1.Items.Count - 1].Selected = true; } } } this.Invalidate(); } } } private void GenerateCharacter_DragEnter( object sender, DragEventArgs e ) { e.Effect = DragDropEffects.All; } private void menuTransparent_Click( object sender, EventArgs e ) { Transparent(); } /// /// listView1にて現在選択されているアイテムの名前を取得します /// private string SelectedTitle { get { for( int i = 0; i < listView1.Items.Count; i++ ) { if( listView1.Items[i].Selected ) { return listView1.Items[i].Text; } } return ""; } } private void pictureBox1_MouseClick( object sender, MouseEventArgs e ) { if ( m_setTrans ) { int x = e.X; int y = e.Y; string title = SelectedTitle; Image img = null; for ( int i = 0; i < m_table_group.Character.Count; i++ ) { if ( m_table_group.Character[i].title == title ) { m_table_group.Character[i].GetImage( m_table_group.Character.Size ); } } if ( img != null ) { if ( x <= img.Width && y <= img.Height ) { Bitmap bmp = new Bitmap( img ); Color tmp = bmp.GetPixel( x, y ); bmp.MakeTransparent( tmp ); m_table_group.Character.SetImage( bmp, title ); if ( picturePreview.Image != null ) { picturePreview.Image.Dispose(); } picturePreview.Image = (Image)bmp.Clone(); bmp.Dispose(); update(); picturePreview.Invalidate(); } } picturePreview.Cursor = Cursors.Arrow; m_setTrans = false; } } private void txtTag_TextChanged( object sender, EventArgs e ) { if ( txtTag.Enabled ) { string title = SelectedTitle; ImageEntry t = m_table_group.Character[title]; if ( t != null ) { t.tag = txtTag.Text; for ( int i = 0; i < listView1.Items.Count; i++ ) { if ( listView1.Items[i].Text == m_table_group.Character[title].title ) { listView1.Items[i].SubItems[1].Text = txtTag.Text; return; } } } } } private void menuEditTitle_Click( object sender, EventArgs e ) { Title(); } private void menuDelete_Click( object sender, EventArgs e ) { Delete(); } private void listView1_SelectedIndexChanged( object sender, EventArgs e ) { string title = SelectedTitle; if ( title == "" ) { List draw = new List(); foreach ( ListViewItem item in listView1.Items ) { if ( item.Checked ) { ImageEntry ie = m_table_group.Character[item.Text]; if ( ie != null ) { draw.Add( ie.Z ); } } } picturePreview.Image = m_table_group.Character.Face( draw.ToArray() ); return; } ImageEntry ie2 = m_table_group.Character[title]; if ( ie2 != null ) { int index = ie2.Z; picturePreview.Image = m_table_group.Character.Face( new int[] { index } ); lblThisTitle.Text = m_table_group.Character[title].title; txtTag.Enabled = false; txtTag.Text = m_table_group.Character[title].tag; if ( 0 <= index && index < 9 ) { txtTag.Text += "(" + _( "NOT editable" ) + ")"; txtTag.Enabled = false; } else { txtTag.Enabled = true; } this.Invalidate(); } } private void mstripImage_Opening( object sender, CancelEventArgs e ) { string title = SelectedTitle; if ( title == "" ) { menuDelete.Enabled = false; menuEditTitle.Enabled = false; menuSetImage.Enabled = false; menuTransparent.Enabled = false; } else { int index = m_table_group.Character[title].Z; if ( 9 <= index ) { menuDelete.Enabled = true; menuEditTitle.Enabled = true; } else { menuDelete.Enabled = false; menuEditTitle.Enabled = false; } menuSetImage.Enabled = true; menuTransparent.Enabled = true; } } private void listView1_ItemChecked( object sender, ItemCheckedEventArgs e ) { if ( m_loading ) { return; } int changed_item = e.Item.Index; string title = listView1.Items[changed_item].Text; #if DEBUG Common.DebugWriteLine( "listView1_ItemChecked; title=" + title ); #endif string tag = m_table_group.Character[title].tag; m_table_group.Character[title].IsDefault = e.Item.Checked; if ( tag != "" && e.Item.Checked ) { for ( int i = 0; i < listView1.Items.Count; i++ ) { string temp_title = listView1.Items[i].Text; string temp_tag = m_table_group.Character[temp_title].tag; if ( temp_tag == tag && temp_title != title ) { m_table_group.Character[temp_title].IsDefault = false; listView1.Items[i].Checked = false; } } } if ( SelectedTitle == "" ) { List draw = new List(); foreach ( ListViewItem item in listView1.Items ) { if ( item.Checked ) { int index = m_table_group.Character[item.Text].Z; if( index >= 0 ) { draw.Add( index ); } } } picturePreview.Image = m_table_group.Character.Face( draw.ToArray() ); } this.Invalidate(); //update(); //ここで呼ぶと、永久再帰呼び出しでStackOverFlowする } private void GenerateCharacter_Load( object sender, EventArgs e ) { update(); } private void btnUp_Click( object sender, EventArgs e ) { Up(); } private void btnDown_Click( object sender, EventArgs e ) { Down(); } private void menuReset_Click( object sender, EventArgs e ) { Reset(); } private void menuFileImportRsi_Click( object sender, EventArgs e ) { if( openRsi.ShowDialog() == DialogResult.OK ){ CharacterEx character_ex = RsiReader.Read( openRsi.FileName ); if ( character_ex.character != null ) { m_table_group.Character = (Character3)character_ex.character.Clone(); update(); } } } private void menuFileExportRsi_Click( object sender, EventArgs e ) { if ( saveRsi.ShowDialog() == DialogResult.OK ) { RsiWriter.Write( m_table_group.Character, saveRsi.FileName ); } } private void bgWork_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e ) { bgWork.CancelAsync(); } private void menuEditSetImage_Click( object sender, EventArgs e ) { SetImage(); } private void menuEditTransparent_Click( object sender, EventArgs e ) { Transparent(); } #region Core of EditHandle private void Add() { using ( InputBox ib = new InputBox( _( "Title of image" ), _( "Input the title of image" ) ) ) { if ( ib.ShowDialog() == DialogResult.OK ) { string new_title = ib.rText; bool found = false; foreach ( ImageEntry ie in m_table_group.Character ) { if ( ie.title == new_title ) { found = true; break; } } if ( !found ) { m_table_group.Character.Add( new ImageEntry( ib.rText, null, "", false, m_table_group.Character.Count ) ); m_table_group.list.Add( new TimeTable( ib.rText, 0, TimeTableType.character, null ) ); listView1.Items.Add( new ListViewItem( new string[] { ib.rText, "" } ) ); listView1.Items[listView1.Items.Count - 1].Selected = true; } else { MessageBox.Show( _( "This image title has been already registered" ), _( "Error" ) ); } } } update(); } private void Up() { #if DEBUG Common.DebugWriteLine( "Up()" ); #endif string selected_title = SelectedTitle; int selected_index = -1; for ( int i = 0; i < listView1.Items.Count; i++ ) { if ( listView1.Items[i].Text == selected_title ) { selected_index = i; break; } } if ( selected_index >= 1 ) { string upper_title = listView1.Items[selected_index - 1].Text; ListViewItem b = (ListViewItem)listView1.Items[selected_index].Clone(); listView1.Items[selected_index] = (ListViewItem)listView1.Items[selected_index - 1].Clone(); listView1.Items[selected_index - 1] = b; listView1.Items[selected_index].Selected = false; listView1.Items[selected_index - 1].Selected = false; int upper_z = m_table_group.Character[upper_title].Z; int selected_z = m_table_group.Character[selected_title].Z; #if DEBUG Common.DebugWriteLine( " selected_title=" + selected_title ); Common.DebugWriteLine( " upper_title=" + upper_title ); #endif m_table_group.Character[selected_title].Z = upper_z; m_table_group.Character[upper_title].Z = selected_z; update(); listView1.Items[selected_index - 1].Selected = true; listView1.Items[selected_index - 1].EnsureVisible(); TimeTable ttable_upper = (TimeTable)m_table_group[selected_index - 1].Clone(); m_table_group[selected_index - 1] = (TimeTable)m_table_group[selected_index].Clone(); m_table_group[selected_index] = ttable_upper; } #if DEBUG Common.DebugWriteLine( "-------------------------------" ); #endif } private void Down() { #if DEBUG Common.DebugWriteLine( "Down()" ); #endif string selected_title = SelectedTitle; int selected_index = -1; for ( int i = 0; i < listView1.Items.Count; i++ ) { if ( listView1.Items[i].Text == selected_title ) { selected_index = i; break; } } if ( selected_index >= 0 && selected_index < listView1.Items.Count - 1 ) { string lower_title = listView1.Items[selected_index + 1].Text; ListViewItem b = (ListViewItem)listView1.Items[selected_index].Clone(); listView1.Items[selected_index] = (ListViewItem)listView1.Items[selected_index + 1].Clone(); listView1.Items[selected_index + 1] = b; listView1.Items[selected_index].Selected = false; listView1.Items[selected_index + 1].Selected = false; int lower_z = m_table_group.Character[lower_title].Z; int selected_z = m_table_group.Character[selected_title].Z; #if DEBUG Common.DebugWriteLine( " selected_title=" + selected_title ); Common.DebugWriteLine( " lower_title=" + lower_title ); #endif m_table_group.Character[lower_title].Z = selected_z; m_table_group.Character[selected_title].Z = lower_z; update(); listView1.Items[selected_index + 1].Selected = true; listView1.Items[selected_index + 1].EnsureVisible(); TimeTable ttable_lower = (TimeTable)m_table_group.list[selected_index + 1].Clone(); m_table_group.list[selected_index + 1] = (TimeTable)m_table_group.list[selected_index].Clone(); m_table_group.list[selected_index] = ttable_lower; } #if DEBUG Common.DebugWriteLine( "-------------------------------" ); #endif } private void SetImage() { string title = SelectedTitle; if ( title != "" ) { openImage.FileName = ""; if ( m_last_image_folder != "" ) { openImage.InitialDirectory = m_last_image_folder; } if ( openImage.ShowDialog() == DialogResult.OK ) { Image img = Common.ImageFromFile( openImage.FileName ); m_table_group.Character.SetImage( img, title ); picturePreview.Image = img; if ( img != null ) { int width = Math.Max( m_table_group.Character.Size.Width, img.Width ); int height = Math.Max( m_table_group.Character.Size.Height, img.Height ); m_table_group.Character.Size = new Size( width, height ); } this.Invalidate(); m_last_image_folder = Path.GetDirectoryName( openImage.FileName ); } else { m_last_image_folder = openImage.InitialDirectory; } } } private void Transparent() { if ( SelectedTitle != "" ) { m_setTrans = true; picturePreview.Cursor = Cursors.Cross; } } private void Reset() { string title = SelectedTitle; if ( title != "" ) { m_table_group.Character[title].ResetImage(); picturePreview.Image = null; } } private void Delete() { string title = SelectedTitle; if ( title == "" ) { return; } m_table_group.Character.Remove( title ); for ( int i = 0; i < m_table_group.list.Count; i++ ) { if ( m_table_group.list[i].Text == title ) { m_table_group.list.RemoveAt( i ); break; } } UpdateZOrder(); picturePreview.Image = null; update(); } /// /// m_table_group.listの順序を元に、m_table_group.Characterのzオーダーを新たに幡番する /// private void UpdateZOrder() { for ( int i = 0; i < m_table_group.list.Count; i++ ) { foreach ( ImageEntry ie in m_table_group.Character ) { if ( ie.title == m_table_group.list[i].Text ) { ie.Z = i; break; } } } } private void Title() { string title = SelectedTitle; if ( title == "" ) { return; } string edited_title = ""; using ( InputBox ib = new InputBox( _( "Change title" ), _( "Input new title" ) ) ) { ib.rText = title; if ( ib.ShowDialog() == DialogResult.OK ) { edited_title = ib.rText; foreach ( ImageEntry ie in m_table_group.Character ) { if ( title == ie.title ) { ie.title = edited_title; break; } } for ( int i = 0; i < m_table_group.list.Count; i++ ) { if ( title == m_table_group.list[i].Text ) { m_table_group.list[i].Text = edited_title; break; } } } } update(); } #endregion private void menuEditDelete_Click( object sender, EventArgs e ) { Delete(); } private void menuEditReset_Click( object sender, EventArgs e ) { Reset(); } private void menuEditEditTitle_Click( object sender, EventArgs e ) { Title(); } private void menuEditUp_Click( object sender, EventArgs e ) { Up(); } private void menuEditDown_Click( object sender, EventArgs e ) { Down(); } private void menuEditAdd_Click( object sender, EventArgs e ) { Add(); } private void menuEditDebugEditVersionInfo_Click( object sender, EventArgs e ) { #if DEBUG using ( InputBox ib = new InputBox( "", "input author" ) ) { if ( ib.ShowDialog() == DialogResult.OK ) { m_table_group.Character.Author = ib.rText; } } using ( InputBox ib = new InputBox( "", "input version" ) ) { if ( ib.ShowDialog() == DialogResult.OK ) { m_table_group.Character.Version = ib.rText; } } #endif } private void menuFileExportXml_Click( object sender, EventArgs e ) { saveLsc.FileName = m_last_path; string f1 = _( "LipSync Character Config(content.xml)|content.xml" ); string f2 = _( "All Files(*.*)|*.*" ); string filter = f1 + "|" + f2; string def_filter = "LipSync Character Config(content.xml)|content.xml|All Files(*.*)|*.*"; try { saveLsc.Filter = filter; } catch { saveLsc.Filter = def_filter; } if ( saveLsc.ShowDialog() == DialogResult.OK ) { this.m_table_group.Character.WriteXml( saveLsc.FileName ); m_last_path = saveLsc.FileName; } } } }