/// <summary>
        /// Funkcija upisuje u FileSystem.bin datoteku podatke o kreiranom fajlu u vidu jednog zapisa u MFT tabeli
        /// MFT = Master File Table
        /// Prepisuje prvu liniju binarne datoteke, zapim upisuje novi zapis, potom prepisuje ostatak sadrzaja datoteke
        /// </summary>
        /// <returns>Funkcija vraca true/false u zavisnosti od toga da li je bilo moguće upisati podatke u datoteku</returns>
        internal bool WriteToMFT()
        {
            byte[] content = File.ReadAllBytes("FileSystem.bin");

            string mftRecord = "file~" + FileId.ToString()
                               + "~" + FileName
                               + "~" + FilePath
                               + "~" + DateCreated.ToString()
                               + "~" + InitialSize.ToString()
                               + "~" + NumberOfBlocks.ToString();

            if (content.Length + mftRecord.Length + 1 > FileSystem.freeSpace)
            {
                Console.WriteLine("Greska - nije moguce dodati datoteku jer je memorija fajl sistema popunjena.");
                return(false);
            }

            BinaryWriter writer1 = new BinaryWriter(new FileStream("FileSystem.bin", FileMode.Truncate));

            for (int i = 0; i < 51; i++)
            {
                writer1.Write(content[i]);
            }
            writer1.Close();

            StreamWriter writer2 = new StreamWriter(new FileStream("FileSystem.bin", FileMode.Append));

            writer2.Write(mftRecord + '\n');
            writer2.Close();

            BinaryWriter writer3 = new BinaryWriter(new FileStream("FileSystem.bin", FileMode.Append));

            for (int i = 51; i < content.Length; i++)
            {
                writer3.Write(content[i]);
            }
            writer3.Close();

            return(true);
        }
Exemplo n.º 2
0
        public override void DoWindowContents(Rect inRect)
        {
            if (first)
            {
                Log.Message(InitialSize.ToString());
                Log.Message(windowRect.ToString());
            }

            // set up rects
            Rect pickerRect     = new Rect(inRect.xMin, inRect.yMin, _pickerSize, _pickerSize);
            Rect hueRect        = new Rect(pickerRect.xMax + _margin, inRect.yMin, _sliderWidth, _pickerSize);
            Rect alphaRect      = new Rect(hueRect.xMax + _margin, inRect.yMin, _sliderWidth, _pickerSize);
            Rect previewRect    = new Rect(alphaRect.xMax + _margin, inRect.yMin, _previewSize, _previewSize);
            Rect previewOldRect = new Rect(previewRect.xMax, inRect.yMin, _previewSize, _previewSize);
            Rect doneRect       = new Rect(alphaRect.xMax + _margin, inRect.yMax - _fieldHeight, _previewSize * 2, _fieldHeight);
            Rect setRect        = new Rect(alphaRect.xMax + _margin, inRect.yMax - 2 * _fieldHeight - _margin, _previewSize - _margin / 2, _fieldHeight);
            Rect cancelRect     = new Rect(setRect.xMax + _margin, setRect.yMin, _previewSize - _margin / 2, _fieldHeight);
            Rect hexRect        = new Rect(alphaRect.xMax + _margin, inRect.yMax - 3 * _fieldHeight - 2 * _margin, _previewSize * 2, _fieldHeight);

            // draw transparency backgrounds
            GUI.DrawTexture(pickerRect, PickerAlphaBG);
            GUI.DrawTexture(alphaRect, SliderAlphaBG);
            GUI.DrawTexture(previewRect, PreviewAlphaBG);
            GUI.DrawTexture(previewOldRect, PreviewAlphaBG);

            // draw picker foregrounds
            GUI.DrawTexture(pickerRect, ColourPickerBG);
            GUI.DrawTexture(hueRect, HuePickerBG);
            GUI.DrawTexture(alphaRect, AlphaPickerBG);
            GUI.DrawTexture(previewRect, TempPreviewBG);
            GUI.DrawTexture(previewOldRect, PreviewBG);

            // draw slider handles
            // TODO: get HSV from RGB for init of handles.
            Rect hueHandleRect    = new Rect(hueRect.xMin - 3f, hueRect.yMin + _huePosition - _handleSize / 2, _sliderWidth + 6f, _handleSize);
            Rect alphaHandleRect  = new Rect(alphaRect.xMin - 3f, alphaRect.yMin + _alphaPosition - _handleSize / 2, _sliderWidth + 6f, _handleSize);
            Rect pickerHandleRect = new Rect(pickerRect.xMin + _position.x - _handleSize / 2, pickerRect.yMin + _position.y - _handleSize / 2, _handleSize, _handleSize);

            GUI.DrawTexture(hueHandleRect, TempPreviewBG);
            GUI.DrawTexture(alphaHandleRect, TempPreviewBG);
            GUI.DrawTexture(pickerHandleRect, TempPreviewBG);

            GUI.color = Color.gray;
            Widgets.DrawBox(hueHandleRect);
            Widgets.DrawBox(alphaHandleRect);
            Widgets.DrawBox(pickerHandleRect);
            GUI.color = Color.white;

            // reset active control on mouseup
            if (Input.GetMouseButtonUp(0))
            {
                _activeControl = controls.none;
            }

            // colourpicker interaction
            if (Mouse.IsOver(pickerRect))
            {
                if (Input.GetMouseButtonDown(0))
                {
                    _activeControl = controls.colourPicker;
                }
                if (_activeControl == controls.colourPicker)
                {
                    Vector2 MousePosition  = Event.current.mousePosition;
                    Vector2 PositionInRect = MousePosition - new Vector2(pickerRect.xMin, pickerRect.yMin);

                    PickerAction(PositionInRect);
                }
            }

            // hue picker interaction
            if (Mouse.IsOver(hueRect))
            {
                if (Input.GetMouseButtonDown(0))
                {
                    _activeControl = controls.huePicker;
                }
                if (Event.current.type == EventType.ScrollWheel)
                {
                    H           -= Event.current.delta.y * UnitsPerPixel;
                    _huePosition = Mathf.Clamp(_huePosition + Event.current.delta.y, 0f, _pickerSize);
                    Event.current.Use();
                }
                if (_activeControl == controls.huePicker)
                {
                    float MousePosition  = Event.current.mousePosition.y;
                    float PositionInRect = MousePosition - hueRect.yMin;

                    HueAction(PositionInRect);
                }
            }

            // alpha picker interaction
            if (Mouse.IsOver(alphaRect))
            {
                if (Input.GetMouseButtonDown(0))
                {
                    _activeControl = controls.alphaPicker;
                }
                if (Event.current.type == EventType.ScrollWheel)
                {
                    A -= Event.current.delta.y * UnitsPerPixel;
                    _alphaPosition = Mathf.Clamp(_alphaPosition + Event.current.delta.y, 0f, _pickerSize);
                    Event.current.Use();
                }
                if (_activeControl == controls.alphaPicker)
                {
                    float MousePosition  = Event.current.mousePosition.y;
                    float PositionInRect = MousePosition - alphaRect.yMin;

                    AlphaAction(PositionInRect);
                }
            }

            // buttons and text field
            // for some reason scrolling sometimes changes text size
            Text.Font = GameFont.Small;
            if (Widgets.ButtonText(doneRect, "OK"))
            {
                SetColor();
                Close();
            }
            if (Widgets.ButtonText(setRect, "Apply"))
            {
                SetColor();
            }
            if (Widgets.ButtonText(cancelRect, "Cancel"))
            {
                Close();
            }

            if (_hexIn != _hexOut)
            {
                Color inputColor = tempColour;
                if (TryGetColorFromHex(_hexIn, out inputColor))
                {
                    tempColour = inputColor;
                    NotifyRGBUpdated();
                }
                else
                {
                    GUI.color = Color.red;
                }
            }
            _hexIn    = Widgets.TextField(hexRect, _hexIn);
            GUI.color = Color.white;
        }