/// <summary>
        /// コンストラクタ(複数)
        /// </summary>
        public TagEditDialog()
        {
            InitializeComponent();

            buttonConvertZip.Enabled = false;
            btnRename.Enabled        = false;

            FileInfoList = new List <TagEditFileInfo>();

            this._mode = EnumMode.MULTI;


            SourceGrid.RowInfo[] rows = LinearAudioPlayer.GridController.getSelectRowsInfo();
            foreach (SourceGrid.RowInfo r in rows)
            {
                TagEditFileInfo tefi = new TagEditFileInfo();

                GridItemInfo gi = (GridItemInfo)LinearAudioPlayer.GridController.getRowGridItem(r.Index);

                tefi.Id         = gi.Id;
                tefi.TargetPath = gi.Option;

                if (String.IsNullOrEmpty(tefi.TargetPath))
                {
                    // オーディオファイル
                    tefi.FilePath = gi.FilePath;
                }
                else
                {
                    // 圧縮ファイル
                    tefi.FilePath        = Path.Combine(LinearGlobal.TempDirectory, gi.Option);
                    tefi.ArchiveFilePath = gi.FilePath;
                }

                FileInfoList.Add(tefi);
            }
        }
        /// <summary>
        /// タグ編集情報を設定する。
        /// </summary>
        /// <param name="id"></param>
        public void setTagEditInfo(long id)
        {
            FileInfoList = new List <TagEditFileInfo>();
            TagEditFileInfo tagEdit = new TagEditFileInfo();

            // 初期化
            picArtwork.Image = null;


            tagEdit.Id = id;

            object result = SQLiteManager.Instance.executeQueryOneRecord(
                SQLResource.SQL019, new SQLiteParameter("Id", id));

            if (System.DBNull.Value != result)
            {
                IList <object> record = (IList <object>)result;

                tagEdit.FilePath   = record[0].ToString();
                tagEdit.TargetPath = record[1].ToString();

                tagEdit.ArchiveFilePath = "";

                if (!String.IsNullOrEmpty(tagEdit.TargetPath))
                {
                    // 圧縮ファイルの場合は存在するか確認し、なかったら解凍する
                    tagEdit.ArchiveFilePath = tagEdit.FilePath;
                    tagEdit.FilePath        = Path.Combine(LinearGlobal.TempDirectory, tagEdit.TargetPath);
                    if (!File.Exists(tagEdit.FilePath))
                    {
                        SevenZipManager.Instance.extract(tagEdit.ArchiveFilePath,
                                                         tagEdit.TargetPath,
                                                         LinearGlobal.TempDirectory);
                    }
                }

                gi          = new GridItemInfo();
                gi.Id       = tagEdit.Id;
                gi.FilePath = tagEdit.FilePath;
                gi.Tag      = tagEdit.ArchiveFilePath;
                gi.Option   = tagEdit.TargetPath;
                // タグ取得
                LinearAudioPlayer.PlayController.getTag(gi);


                // 設定
                buttonConvertZip.Enabled = false;
                btnRename.Enabled        = false;
                this._mode          = EnumMode.SINGLE;
                txtFilePath.Text    = gi.FilePath;
                txtArchivePath.Text = tagEdit.ArchiveFilePath;

                initalData();


                textSearch.Text = gi.Album;

                // GoogleImageローテート用
                bg_album  = txtAlbum.Text;
                bg_artist = txtArtist.Text;
                bg_title  = txtTitle.Text;

                picArtwork.InitialImage   = Image.FromFile(LinearGlobal.StyleDirectory + "\\loading.gif");
                picArtwork.LoadCompleted += new AsyncCompletedEventHandler(picArtwork_LoadCompleted);
                isArtworkLoadComplete     = false;

                if (!String.IsNullOrEmpty(tagEdit.ArchiveFilePath) && !".zip".Equals(Path.GetExtension(tagEdit.ArchiveFilePath).ToLower()))
                {
                    buttonConvertZip.Enabled = true;
                }
                if (!String.IsNullOrEmpty(tagEdit.ArchiveFilePath))
                {
                    btnRename.Enabled = true;
                }

                FileInfoList.Add(tagEdit);

                if (gi.Picture == null || gi.IsNoPicture)
                {
                    Action getPcitureAction = () =>
                    {
                        LinearAudioPlayer.PlayController.getPicture(gi);


                        Action uiAction = () =>
                        {
                            if (this.IsHandleCreated)
                            {
                                ArtworkLoad(gi);
                            }
                        };
                        if (this.IsHandleCreated)
                        {
                            this.BeginInvoke(uiAction);
                        }
                    };
                    LinearAudioPlayer.WorkerThread.EnqueueTask(getPcitureAction);
                }
                else
                {
                    isArtworkLoadComplete    = true;
                    lblArtworkType.Text      = "FILE";
                    picArtwork.Image         = gi.Picture;
                    checkArtworkSave.Checked = true;
                    beforeCheckArtwork       = true;
                }
            }
        }
        /// <summary>
        /// ZIP変換する。
        /// </summary>
        /// <returns></returns>
        private bool convertZip()
        {
            // Todo: ファイルからまとめてZIP圧縮をサポートする。

            bool result = false;

            try
            {
                TagEditFileInfo fileInfo = _fileInfoList[0];

                string oldArchiveFilePath = fileInfo.ArchiveFilePath;

                string newArchiveFilePath = oldArchiveFilePath.Replace(Path.GetExtension(oldArchiveFilePath), ".zip");

                if (File.Exists(fileInfo.ArchiveFilePath))
                {
                    // アーカイブファイル内一覧取得
                    IList <string> targetPathList = SevenZipManager.Instance.getFileNames(oldArchiveFilePath);

                    // アーカイブを解凍する
                    SevenZipManager.Instance.extract(oldArchiveFilePath,
                                                     Path.Combine(LinearGlobal.TempDirectory, "conv"));

                    // ZIPで再圧縮
                    SevenZipManager.Instance.compress(newArchiveFilePath, targetPathList, Path.Combine(LinearGlobal.TempDirectory, "conv"));

                    // DB更新
                    updateDB(oldArchiveFilePath, newArchiveFilePath);

                    // フォーム内変数更新
                    foreach (TagEditFileInfo tefi in _fileInfoList)
                    {
                        tefi.ArchiveFilePath = newArchiveFilePath;
                    }

                    // グリッド更新
                    int i = 1;
                    while (i <= LinearAudioPlayer.GridController.Grid.Rows.Count - 1)
                    {
                        if (oldArchiveFilePath.Equals(LinearAudioPlayer.GridController.getValue(i, (int)GridController.EnuGrid.FILEPATH)))
                        {
                            LinearAudioPlayer.GridController
                            .Grid[i, (int)GridController.EnuGrid.FILEPATH].Value
                                = newArchiveFilePath;
                        }
                        i++;
                    }

                    // ファイルを削除
                    FileUtils.moveRecycleBin(oldArchiveFilePath);
                }

                txtArchivePath.Text = newArchiveFilePath;

                result = true;
            }
            catch (Exception ex)
            {
                MessageUtils.showMessage(MessageBoxIcon.Error,
                                         MessageResource.E0003 + "\n" + ex.Message);
            }

            return(result);
        }