/// <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); }
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; }