private void toolBtnDump_Click(object sender, EventArgs e)
        {
            if (DoingSomeJob.Working)
            {
                MessageBox.Show("Please wait... Still working in background!", "UO:KR Uop Dumper", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                ThreadArgs.MyThreadDelegate mtdParse = delegate(object args)
                {
                    ThreadArgs      theArgs = (ThreadArgs)args;
                    StupidInterface theForm = (StupidInterface)theArgs.Args[0];
                    string          thePath = (string)theArgs.Args[1];
                    string          theFile = (string)theArgs.Args[2];

                    UopManager upIstance = UopManager.getIstance();

                    try
                    {
                        string pathandfile = thePath + @"\" + theFile;

                        if (!Directory.Exists(thePath))
                        {
                            Directory.CreateDirectory(thePath);
                        }

                        using (StreamWriter swFile = new StreamWriter(pathandfile, false))
                        {
                            swFile.Write(UopManager.getIstance().UopFile.ToString());
                        }

                        theForm.SetTextArea("Completed information dump.");
                    }
                    catch
                    {
                        theForm.SetTextArea("ERROR while writing information dump.");
                    }
                    finally
                    {
                        theForm.DisableOtherIcon(false);
                        theForm.SetLoadIcon(true);
                        DoingSomeJob.Working = false;
                    }
                };

                DoingSomeJob.Working = true;

                string sPath = Application.StartupPath + StaticData.DUMPINFO_DIR;
                string sFile = Utility.GetFileName(UopManager.getIstance().UopPath) + ".txt";

                SetTextArea("Dumping UOP file to \"" + sPath + "\\" + sFile + "\" ...");
                this.SetDisableIcon(true);
                this.SetLoadIcon(false);

                System.Threading.Thread tRun = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(mtdParse));
                tRun.Start(new ThreadArgs(new object[] { this, sPath, sFile }));
            }
        }
        private void CommonSave(string sFile, bool bFix)
        {
            if (DoingSomeJob.Working)
            {
                MessageBox.Show("Please wait... Still working in background!", "UO:KR Uop Dumper", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                ThreadArgs.MyThreadDelegate mtdParse = delegate(object args)
                {
                    ThreadArgs      theArgs = (ThreadArgs)args;
                    StupidInterface theForm = (StupidInterface)theArgs.Args[0];
                    string          theFile = (string)theArgs.Args[1];
                    bool            theFix  = (bool)theArgs.Args[2];

                    UopManager upIstance = UopManager.getIstance();

                    if (theFix)
                    {
                        upIstance.FixOffsets(0, 0);
                    }

                    bool bResult = upIstance.Write(theFile);

                    if (bResult)
                    {
                        theForm.SetTextArea("Done saving UOP file.");

                        if (!upIstance.UopPath.Equals(theFile, StringComparison.OrdinalIgnoreCase))
                        {
                            upIstance.UopPath = theFile;
                        }
                    }
                    else
                    {
                        theForm.SetTextArea("ERROR while saving file \"" + theFile + "\" !!!");
                    }

                    theForm.DisableOtherIcon(false);
                    theForm.SetLoadIcon(true);
                    DoingSomeJob.Working = false;
                };

                DoingSomeJob.Working = true;
                SetTextArea("Saving UOP file to \"" + sFile + "\" ...");
                this.SetDisableIcon(true);
                this.SetLoadIcon(false);

                System.Threading.Thread tRun = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(mtdParse));
                tRun.Start(new ThreadArgs(new object[] { this, sFile, bFix }));
            }
        }
        private void LoadUOP(string theNewFile)
        {
            ThreadArgs.MyThreadDelegate mtdParse = delegate(object args)
            {
                ThreadArgs      theArgs = (ThreadArgs)args;
                StupidInterface theForm = (StupidInterface)theArgs.Args[0];
                string          theFile = (string)theArgs.Args[1];

                UopManager upIstance = UopManager.getIstance(true);
                upIstance.UopPath = theFile;

                bool bResult = upIstance.Load();

                if (bResult)
                {
                    theForm.SetTextArea("Done parsing.");
                }
                else
                {
                    theForm.SetTextArea("ERROR while parsing file \"" + theFile + "\" !!!");
                }

                if (bResult)
                {
                    theForm.SetNodes();
                    theForm.DisableOtherIcon(false);
                }

                theForm.SetLoadIcon(true);
                DoingSomeJob.Working = false;
            };

            DoingSomeJob.Working = true;
            this.SetTextArea("Parsing file \"" + theNewFile + "\" ...");

            this.SetDisableIcon(true);
            this.SetLoadIcon(false);

            System.Threading.Thread tRun = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(mtdParse));
            tRun.Start(new ThreadArgs(new object[] { this, theNewFile }));
        }
        private void CommonDump(ShowPanels spType, object oCast)
        {
            if (DoingSomeJob.Working)
            {
                MessageBox.Show("Please wait... Still working in background!", "UO:KR Uop Dumper", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                ThreadArgs.MyThreadDelegate mtdParse = delegate(object args)
                {
                    ThreadArgs      theArgs   = (ThreadArgs)args;
                    StupidInterface theForm   = (StupidInterface)theArgs.Args[0];
                    string          thePath   = (string)theArgs.Args[1];
                    ShowPanels      theType   = (ShowPanels)theArgs.Args[2];
                    object          theObject = theArgs.Args[3];

                    UopManager upIstance  = UopManager.getIstance();
                    string     baseName   = Path.GetFileNameWithoutExtension(upIstance.UopPath);
                    string     resultName = "";

                    try
                    {
                        if (!Directory.Exists(thePath))
                        {
                            Directory.CreateDirectory(thePath);
                        }

                        int i = 0, j = 0;

                        switch (spType)
                        {
                        case ShowPanels.RootNode:
                        {
                            UOPFile toDump = (UOPFile)theObject;
                            foreach (UOPIndexBlockHeader dumpTemp1 in toDump.m_Content)
                            {
                                foreach (UOPPairData dumpTemp2 in dumpTemp1.m_ListData)
                                {
                                    using (FileStream fsWrite = File.Create(thePath + @"\" + String.Format(StaticData.UNPACK_NAMEPATTERN, baseName, i, j, dumpTemp2.First.IsCompressed ? StaticData.UNPACK_EXT_COMP : StaticData.UNPACK_EXT_UCOMP)))
                                    {
                                        using (BinaryWriter bwWrite = new BinaryWriter(fsWrite))
                                        {
                                            bwWrite.Write(dumpTemp2.Second.Extract(dumpTemp2.First.IsCompressed, dumpTemp2.First.m_LenghtUncompressed));
                                        }
                                    }

                                    j++;
                                }

                                i++;
                                j = 0;
                            }

                            resultName = "the UOP file.";
                        } break;

                        case ShowPanels.DataNode:
                        {
                            UOPIndexBlockHeader toDump = (UOPIndexBlockHeader)theObject;
                            foreach (UOPIndexBlockHeader dumpTemp1 in upIstance.UopFile.m_Content)
                            {
                                if (dumpTemp1.Equals(toDump))
                                {
                                    break;
                                }

                                i++;
                            }

                            foreach (UOPPairData dumpTemp2 in toDump.m_ListData)
                            {
                                using (FileStream fsWrite = File.Create(thePath + @"\" + String.Format(StaticData.UNPACK_NAMEPATTERN, baseName, i, j, dumpTemp2.First.IsCompressed ? StaticData.UNPACK_EXT_COMP : StaticData.UNPACK_EXT_UCOMP)))
                                {
                                    using (BinaryWriter bwWrite = new BinaryWriter(fsWrite))
                                    {
                                        bwWrite.Write(dumpTemp2.Second.Extract(dumpTemp2.First.IsCompressed, dumpTemp2.First.m_LenghtUncompressed));
                                    }
                                }

                                j++;
                            }

                            resultName = "the Header Block " + i.ToString() + ".";
                        } break;

                        case ShowPanels.SingleHeader:
                        {
                            UOPPairData toDump = (UOPPairData)theObject; bool bBreakLoop = false;
                            foreach (UOPIndexBlockHeader dumpTemp1 in upIstance.UopFile.m_Content)
                            {
                                foreach (UOPPairData dumpTemp2 in dumpTemp1.m_ListData)
                                {
                                    bBreakLoop = dumpTemp2.Equals(toDump);
                                    if (bBreakLoop)
                                    {
                                        break;
                                    }

                                    j++;
                                }

                                if (bBreakLoop)
                                {
                                    break;
                                }

                                i++;
                                j = 0;
                            }

                            using (FileStream fsWrite = File.Create(thePath + @"\" + String.Format(StaticData.UNPACK_NAMEPATTERN, baseName, i, j, toDump.First.IsCompressed ? StaticData.UNPACK_EXT_COMP : StaticData.UNPACK_EXT_UCOMP)))
                            {
                                using (BinaryWriter bwWrite = new BinaryWriter(fsWrite))
                                {
                                    bwWrite.Write(toDump.Second.Extract(toDump.First.IsCompressed, toDump.First.m_LenghtUncompressed));
                                }
                            }

                            resultName = "the Index " + j.ToString() + ".";
                        } break;
                        }

                        GC.Collect();
                        theForm.SetTextArea("Completed unpacking for " + resultName);
                    }
                    catch
                    {
                        theForm.SetTextArea("ERROR while unpacking selected data.");
                    }
                    finally
                    {
                        theForm.DisableOtherIcon(false);
                        theForm.SetLoadIcon(true);
                        DoingSomeJob.Working = false;
                    }
                };

                DoingSomeJob.Working = true;
                SetTextArea("Unpacking seleceted data to \"" + Application.StartupPath + StaticData.UNPACK_DIR + "\" ...");
                this.SetDisableIcon(true);
                this.SetLoadIcon(false);

                System.Threading.Thread tRun = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(mtdParse));
                tRun.Start(new ThreadArgs(new object[] { this, Application.StartupPath + StaticData.UNPACK_DIR, spType, oCast }));
            }
        }