PotoHEX functionality

When we run the app for the first time we will see "+" open tab with 4 options:
1. "New" Creates a new file of 256 bytes size filled with zeros and opens a tab representing its data.
2. "Open" Pops up a "File" dialog to open the desired file on users' iOS device
3. "Purchases" Opens the "Purchases" tab where users can take out a subscription to remove the demo mode restrictions.
4. "About" Opens the "About" tab with copyright notes and licenses of used libraries.

Working with tabs.
Long pressing on a tab and dragging it allows reorders tabs.
Moving a tab to a basket that appears during the tab dragging removes the tab. The file associated with the tab will not be removed. In fact, the application has no functionality to remove files. The Standard "File" application is responsible for it.

Viewing a document.
The screen is divided into two parts. The first part is a file data table, the second is the file property sheet. The space occupied by the file data table and the file property sheet (or their relative arrangement) can be tuned by dragging (or double-tapping) the delimiter handle between them.

The file data table consists of 3 columns: "Offset", "Bytes", and "Dump". Each row in the table represents a file data range of the given row size. The "Offset" column shows a numeric offset from the beginning of the file for the row. The "Bytes" row shows a byte representation of the range. The "Bytes" row header shows the byte offset for the data in the row. The "Dump" column shows a text representation of the range in the given encoding. Users can change the width of each column and the height of its header by dragging its header.

Users can zoom in/out of the file data table by standard gestures.
Users can scroll the file data in the table by standard gestures.

Tapping on the "Offset" column header changes the numeric representation of the offset from hexadecimal to decimal and vice versa.

Tapping on the "Offset" column shows the popup window to quickly scroll to desired file offset. There are 3 options: "Begin" to jump to the beginning of the file, "End" to jump to the end of the file, and "custom offset" to jump to a manually specified offset value. After jumping the application enter editor mode at the selected offset.

Editing a document.
Tapping on the "Bytes" or "Dump" column at desired location enters editor mode. In this mode, users can replace bytes/characters at the position pointed by the flashing cursor rectangle. Users can insert bytes/characters at the cursor position by switching "Insert Mode" at the bottom menu of the file data table.
By tapping the "Paste" button in the menu users can place/insert data in the clipboard at the cursor position. This button is enabled if only the clipboard is not empty.
"Undo"/"Redo" have typical functionality.

Working with selection.
Long pressing on the "Bytes" or "Dump" column at desired location enters selection editor mode. In this mode, users can select a region by dragging selection handles. If the selection is not empty there are a set of menu options to work with it:
"Copy Selected Bytes" - copies bytes of the selected region into the clipboard.
"Copy Selected String" - interprets bytes of the selected region as a string in the given encoding and copies it into the clipboard.
"Fill Selection" - pops up a window for entering a value to fill the selected region.
"Cut Selection" - removes the selected region from the file. It also causes decreasing the file size by the region size.
"Clear Selection" - clears the selection and quits working with selection mode.

File Property Sheet functionality.
Tapping on the "File Name" row enables the file name editing mode.
Tapping on the "Size" row enables the file size editing mode.
Tapping on the "Encoding" row opens the available encodings tree/table. The current encoding used to represent the file data as a set of characters in the "Dump" column will be selected. Selecting the desired encoding in the table will cause immediate update characters in the "Dump" column. On the right side of each row on the encoding table users can see a quick view of data in encoding described by it. This data is taken starting at the current cursor position (in editor mode), the beginning of the selected region (if exists and is not empty), or from the beginning of the file. The "Grouped" switch enables/disabled grouping encodings by a language or a specific group. The "Find" field helps find the desired encoding by substring that it contains.
Tapping on the "Row Width" row allows selecting the desired row size in bytes in the file data table. There are 4 options: 4, 8, 16, and 32 bytes.
Tapping on the "Export" row opens the standard iOS dialog for exporting the current file.
The "Selection" section allows the setting of the selected region by specifying begin and end (or size) parameters of it.