private void addVehicleButton_Click(object sender, EventArgs e)
        {
            VehiclePropertiesDialog vehPropDlg = new VehiclePropertiesDialog();

            if (vehPropDlg.ShowDialog() == DialogResult.OK)
            {
                Directory.SetCurrentDirectory(Utils.CURRENT_FOLDER);

                string newVehiclePath = Utils.VEHICLE_FOLDER + vehPropDlg.VehicleName;
                string newVehicleFramesPath = newVehiclePath + Utils.FRAMES_FOLDER;

                Directory.CreateDirectory(newVehiclePath);
                Directory.CreateDirectory(newVehicleFramesPath);

                int currentFrameID = 0;

                foreach (string framePath in vehPropDlg.framesPathList)
                {
                    File.Copy(framePath, newVehicleFramesPath + currentFrameID + Utils.BITMAP_EXTENSION);
                    currentFrameID++;
                }

                if (vehPropDlg.vehiclePreviewPath != null)
                    File.Copy(vehPropDlg.vehiclePreviewPath, newVehiclePath + Utils.VEHICLE_PREVIEW);

                FileStream stream = new FileStream(newVehiclePath + Utils.VEHICLE_INFO_PATH, FileMode.Create, FileAccess.Write);

                /*
                 * The order is:
                 * accel
                 * maxspd
                 * manevrability
                 * armor
                 * hitpoints
                */

                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleAcceleration);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleMaxSpeed);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleManevrability);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleArmor);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleHitPoints);

                stream.Close();
                stream = null;

                vehicleListBox.Items.Add(vehPropDlg.VehicleName);

                if (vehicleListBox.Items.Count == 1)
                    vehicleListBox.SelectedIndex = 0;
            }
        }
        private void editVehicleButton_Click(object sender, EventArgs e)
        {
            Directory.SetCurrentDirectory(Utils.CURRENT_FOLDER);

            VehiclePropertiesDialog vehPropDlg = new VehiclePropertiesDialog();

            string currentVehicleFolder = Utils.VEHICLE_FOLDER + vehicleListBox.SelectedItem.ToString();
            string frameFolder = currentVehicleFolder + Utils.FRAMES_FOLDER;
            string tempFrameFolder = frameFolder + Utils.TEMP_FOLDER;

            bool renameCurrentVehicleFolder = false;

            FileStream stream = new FileStream(currentVehicleFolder + Utils.VEHICLE_INFO_PATH, FileMode.Open, FileAccess.ReadWrite);

            vehPropDlg.VehicleName = vehicleListBox.SelectedItem.ToString();
            vehPropDlg.VehicleAcceleration = Utils.readUint16LittleEndian(stream);
            vehPropDlg.VehicleMaxSpeed = Utils.readUint16LittleEndian(stream);
            vehPropDlg.VehicleManevrability = Utils.readUint16LittleEndian(stream);
            vehPropDlg.VehicleArmor = Utils.readUint16LittleEndian(stream);
            vehPropDlg.VehicleHitPoints = Utils.readUint16LittleEndian(stream);

            Directory.CreateDirectory(tempFrameFolder);

            foreach (string framePath in Directory.GetFiles(frameFolder))
                File.Copy(framePath, framePath.Insert(framePath.LastIndexOf('\\'), Utils.TEMP_FOLDER), true);

            for (int currentFrameID = 0; currentFrameID < Utils.VEHICLE_DIRECTIONS; currentFrameID++)
                vehPropDlg.framesPathList.Add(tempFrameFolder + currentFrameID + Utils.BITMAP_EXTENSION);

            vehPropDlg.vehiclePreviewPath = currentVehicleFolder + Utils.VEHICLE_PREVIEW;

            if (vehPropDlg.ShowDialog() == DialogResult.OK)
            {
                Directory.SetCurrentDirectory(Utils.CURRENT_FOLDER);

                if (vehPropDlg.vehiclePreviewPath.CompareTo(currentVehicleFolder + Utils.VEHICLE_PREVIEW) != 0)
                    File.Copy(vehPropDlg.vehiclePreviewPath, currentVehicleFolder + Utils.VEHICLE_PREVIEW, true);

                foreach (string framePath in Directory.GetFiles(frameFolder))
                    File.Delete(framePath);

                int currentFrameID = 0;

                foreach (string framePath in vehPropDlg.framesPathList)
                {
                    File.Copy(framePath, frameFolder + currentFrameID + Utils.BITMAP_EXTENSION);
                    currentFrameID++;
                }

                stream.Seek(0, SeekOrigin.Begin);

                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleAcceleration);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleMaxSpeed);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleManevrability);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleArmor);
                Utils.writeUint16LittleEndian(stream, vehPropDlg.VehicleHitPoints);

                if (vehPropDlg.VehicleName.CompareTo(vehicleListBox.SelectedItem.ToString()) != 0)
                    renameCurrentVehicleFolder = true;

                vehicleListBox_SelectedIndexChanged(null, null);
            }

            Directory.SetCurrentDirectory(Utils.CURRENT_FOLDER);

            Directory.Delete(tempFrameFolder, true);

            stream.Close();
            stream = null;

            if (renameCurrentVehicleFolder)
            {
                try
                {
                    Directory.Move(currentVehicleFolder, Utils.VEHICLE_FOLDER + vehPropDlg.VehicleName);

                    int ind = vehicleListBox.SelectedIndex;
                    vehicleListBox.Items.RemoveAt(ind);
                    vehicleListBox.Items.Insert(ind, vehPropDlg.VehicleName);
                    vehicleListBox.SelectedIndex = ind;
                }
                catch (IOException)
                {
                    MessageBox.Show(Utils.ERROR_RENAMING, Utils.APP_NAME,
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }