コード例 #1
0
ファイル: ConvertProcessor.cs プロジェクト: vehar/tex-conv
        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;
                };
            }
            ;
        }
コード例 #2
0
ファイル: ImageViewForm.cs プロジェクト: vehar/tex-conv
        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;
        }