mirror of
https://git.femboyfinancial.jp/james/lipsync.git
synced 2024-11-26 04:12:00 -08:00
932 lines
38 KiB
C#
932 lines
38 KiB
C#
/*
|
||
* 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<string> files = new List<string>( 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 );
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 現在のm_table_group.Characterの内容を、listView1に適用します
|
||
/// </summary>
|
||
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();
|
||
}
|
||
|
||
/// <summary>
|
||
/// listView1にて現在選択されているアイテムの名前を取得します
|
||
/// </summary>
|
||
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<int> draw = new List<int>();
|
||
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<int> draw = new List<int>();
|
||
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();
|
||
}
|
||
|
||
/// <summary>
|
||
/// m_table_group.listの順序を元に、m_table_group.Characterのzオーダーを新たに幡番する
|
||
/// </summary>
|
||
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;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|