private static void thread_routine(object reference) { List <ListViewItem> pool = reference as List <ListViewItem>; bool do_cancel = false; lock ( m_form ){ do_cancel = m_cancel; }; while (!do_cancel && (0 < pool.Count)) { bool mod_flag = true; bool do_mod = false; ListViewItem li = pool.First(); conv_core.cImageFile src_img = li.Tag as conv_core.cImageFile; if (src_img.enabled) { int coverted = 0; foreach (ColumnHeader hdr in m_form.m_formats) { if (!(li.SubItems[hdr.Index].Tag as conv_core.cImageFile).enabled) { li.SubItems[hdr.Index].BackColor = MainForm.cell_back_disabled; coverted++; continue; } ; conv_core.cFormat fmt = hdr.Tag as conv_core.cFormat; ListViewItem.ListViewSubItem lsi = li.SubItems[hdr.Index]; if (fmt.convert(src_img, lsi.Tag as conv_core.cImageFile)) { lsi.BackColor = Color.LightGreen; coverted++; } else { lsi.BackColor = Color.LightPink; }; } ; if (m_form.m_formats.Count == coverted) { li.BackColor = MainForm.cell_back_done; if (mod_flag && (src_img.crc != src_img.new_crc)) { do_mod = true; } ; src_img.crc = src_img.new_crc; } else if (src_img.crc == src_img.new_crc) { li.BackColor = MainForm.cell_back_error; } ; src_img.close(); } ; pool.RemoveAt(0); lock ( m_form ){ m_form.Invoke(new Action(() => { m_form.pb_progress.PerformStep(); })); if (mod_flag && do_mod) { m_form.Invoke(new Action(() => { m_form.t_mod.Enabled = true; })); mod_flag = false; } ; do_cancel = m_cancel; }; } ; }
public void set_imagelist(ListViewItem li) { conv_core.cImageFile src_img = li.Tag as conv_core.cImageFile; conv_core.cFormat src_fmt = conv_core.workbench.file_format(src_img.path); if (!src_img.open()) { return; } ; ToolStripButton img_btn = new ToolStripButton(src_fmt.name, null, null, src_fmt.name); ToolStripButton diff_btn = new ToolStripButton(src_fmt.name, null, null, src_fmt.name); diff_btn.Width = img_btn.Width = 23; diff_btn.Height = img_btn.Height = 22; diff_btn.DisplayStyle = img_btn.DisplayStyle = ToolStripItemDisplayStyle.Text; diff_btn.CheckOnClick = img_btn.CheckOnClick = true; img_btn.Click += views_handler; diff_btn.Click += diffs_handler; build_image(src_img, src_fmt, img_btn); diff_btn.Tag = img_btn.Tag; ts_views.Items.Add(img_btn); ts_diffs.Items.Add(diff_btn); for (int id = 1; li.SubItems.Count > id; id++) { conv_core.cImageFile img = li.SubItems[id].Tag as conv_core.cImageFile; conv_core.cFormat fmt = conv_core.workbench.file_format(img.path); img_btn = new ToolStripButton(fmt.name, null, null, fmt.name); diff_btn = new ToolStripButton(fmt.name, null, null, fmt.name); diff_btn.Width = img_btn.Width = 23; diff_btn.Height = img_btn.Height = 22; diff_btn.DisplayStyle = img_btn.DisplayStyle = ToolStripItemDisplayStyle.Text; diff_btn.CheckOnClick = img_btn.CheckOnClick = true; img_btn.Click += views_handler; diff_btn.Click += diffs_handler; if (!img.open()) { if (fmt.convert(src_img, img)) { img.open(); } else { break; }; } ; build_image(img, fmt, img_btn); diff_btn.Tag = img_btn.Tag; img.close(); ts_views.Items.Add(img_btn); ts_diffs.Items.Add(diff_btn); } ; m_view = new Bitmap(src_img.width, src_img.height, PixelFormat.Format32bppArgb); src_img.close(); Graphics gr = Graphics.FromImage(m_view); gr.Clear(Color.FromArgb(0x00FF, 0, 0, 0)); gr.Dispose(); img_view.Width = m_view.Width; img_view.Height = m_view.Height; m_current_diff = ts_diffs.Items[0].Tag as Bitmap; m_current_view = ts_views.Items[0].Tag as Bitmap; (ts_views.Items[0] as ToolStripButton).Checked = true; (ts_diffs.Items[0] as ToolStripButton).Checked = true; }