Unimplemented Feature of KHexEdit:
----------------------------------

+ <Action name="insert_file" />

+ Zugriffsrechte (Größe)
+ Transcoder
+ bitstream (navigating on bit-level)

Nicht so wichtig:
* Einstellung Anzeige voller Pfad in Titel
* Einstellung Anzeige a-f/A-F
* Einstellung Anzeige Offset Hex/Dez
* Suchleiste
* <Action name="paste_into_new_window" />

Erledigt:
- Zugriffsrechte (Verändern)
- Rückgängig/Wiederherstellen
- Speichern
- revert
- Dokumentenliste
- Letzte Dateien
- Bookmarks
- Drucken
- Binärfilter
- Zeichenkettenextraktion
- Exportieren
- copy_as_text

Done before review:
------------------------
* add bookmarkable to kpiecetablebytearray
* switch licensing
* see why documents don't get removed on close of view -> close for views, not document
* make drag'n'drop work properly again
* complete change notifications
* reset changebuffer if history gets cut
* make filter work on selection
* user documentation in docbook format
* complete i18n (@-stuff)
* fix paste controller and readonly modes

Fixed after 0.1 Beta 1:
-----------------------
* cursor problems

Fixed after 0.1 Beta 2:
-----------------------
* version control ignored readonly status
* adaption of filter parameter edit to char coding changes
* operation box in replace dialog last in tab order
* enable extract strings tool and add copy
* encoders now takes abtractmodel, so a view can be given
* encoders now use current view settings
* add export functionality to libkakao (simple modelencoderfilesystemexporter use encoder)
* make printing support only selection
* value column editing mess, with cursor jumping away on partial edit and ungrouped changes
* operations like filter can set an own description of their action (undo/redo)
* entering 00 in value column does not finish the editing
* tripple click should only select the current line
* clicking in a column if the bytearray is empty does not place the cursor where expected
* after tripple click double click uses wrong index
* word select mode crashes if the mouse gets behind the end
* ensure screen refreshed during blocking processes:
  printing, string search, loading, filter, statistic collection, replacing, copy as
* fix doubled strings in clipboard on copy of extracted strings
* have tools remember for which view they were used and are uptodate
* initial state for statistic table
* fix hardcoded colors
* export (and save/saveas?) did not check if file could be and was successfully written
* filter button does not get activated if first selection and then parameter inserted
* limit zoom range to prevent crash on too large font sizes
* workaround QDockViews non-existing control of the initial layout
* removed bookmark possible behind end, fixed initially enabled bookmark actions
* translation of encoder names working now
* fix crash on align at end
* fix replace problem (undo replace puts the last removed piece as first one)
* catch revert signal to get out of valueeditor if in

Fixed after 0.1.0:
------------------
* all inserts, like from clipboard or tools, in overwrite mode did not place the cursor at the end of the inserted
* undo of a remove from the end of a piece added garbage to the content
* undo of the remove of the end of a piece inserted this two times
* overwriting in the value column blocked after first digit entered
* fixed: changemetrics of groups were not reverted if needed, so e.g. cursor could move into wrong direction

Done for 0.2:
-------------
* turned into AbstractTool: bytetable, info, stringsextract, filter, poddecoder, versionview
* use KXMLGUIClient, not KXmlGuiWindow, if possible, so we can plug controller to any client
* renamed KAbstractDocument*Synchronizer* to AbstractModel*Synchronizer*
* turned poddecoder into two-column table, added int64 and utf-8

merged to 871403: connected-models 851103:871380
besides:
* program.cpp
* libkakao/core/CMakeLists.txt
* libkakao/core/io/network
* libkakao/core/system/kdocumentsyncmanager.*
* libkakao/controllers/documentsystem/connector
* libkakao/controllers/CMakeLists.txt
* libkakao/controllers/io/setremote
* libkakao/controllers/io/offer
* libkakao/controllers/document/users
* oktetakakao/io/CMakeLists.txt
* oktetakakao/io/network

* added first primitive monitor to the view for the status bar
* refactored KByteaArrayView into AbstractByteArrayView and ByteArrayColumnView
* renamed KDataCursor into ByteArrayTableCursor
* renamed KDataRanges into ByteArrayTableRanges
* made KByteArrayDisplay a complete layer to the used view
* ported all controllers and tools to use KByteArrayDisplay, not the byteArray widget
* added: ByteArrayRowView
* added: ByteArrayJanusView, can toggle between a row and a column based view
* ByteArrayJanusView used by KByteArrayDisplay
* added: controller to toggle between a row and a column view mode
* renamed some classes in okteta/core from K* to *, KWordBufferService to WordByteArrayService
* added: ability to close documents by a close button on tabs
* added: urls dropped next to other tabs will be loaded

Fixed after 0.2 Beta 1:
-----------------------
* added some icons to actions previously without
* offset numbers are cleared or added if lines are removed or added
* source code encoder always used data starting at offset 0, not from the selection
* correctly calculate dirty ranges also for multiple undo/redo
* update recently used files also with those from url drop and commandline parameter
* Menus for Export and Copy As could not be added to the toolbar
* only activate tools that are really visible 
* for extracted strings show tooltips with full length (for now simply done for all strings)

Fixed after 0.2 Beta 2:
-----------------------
* make info tool update info on change of file type and url
* readonly in status bar does not get updated, because view did not forward document signal
* disable menu entries for "Replace" and "Insert pattern" if view is readonly
* do not hide "Insert pattern" dialog on readonly view, but block Ok button
* no change signal was emitted on first change after disk synch
* block Goto button in Goto dialog if there is no view
* Insert button of byte table tool disabled if view is readonly

Fixed after 0.2 RC 1:
---------------------
* mininumSizeHint does not get larger than 100x100

Fixed after 0.2.0:
------------------
* removed Print from toolbar, added Save As instead
* fixed: enable filtering only if view is not readonly
* fixed: disable copy for strings if all are deselected (workaround Qt bug)
* fixed: set all listviews in tools to autoresize to content

Done for 0.3:
-------------
* added a ToggleButton, to be used for the statusbar
* standalone readonly statusbar controller
* ZoomSlider, working directly on a model
* zoom statusbar controller, using the ZoomSlider (unused due to space problems in the status bar)
* turned value and char coding displays in the statusbar into active selections  (hidden due to space problems in the status bar)
* added a filesystem browser tool
* added a documents management tool
* added a controller to switch between view by Alt + ->/<-
* turned the overwrite mode display in the status bar into active display
* added a bookmarks tool
* added name property to bookmarks
* added popup editor for the name of bookmarks on creation
* added option to edit the name of a bookmark to the bookmark tool
* reworked Bookmarkable to simulate a list interface, including a wrapping iterator with an abstract adapter
* turned Goto, Search and Replace utils into kind of tools/controllers (first step, needs more refinement)
* added a checksum calculator tool (using also QCA2, but got just MD5 and SHA-1 from it for now, hm)
* renamed Resize style to Dynamic layout

Fixed after 0.3 Beta 1:
-----------------------
* fixed: ensure unsigned values if calculating modsum
* fixed: make modsum algorithms endianness aware (controlled by parameter endianess)
* fixed: make change of selection also emitted on mouse move with pressed button

Fixed after 0.3 Beta 2:
-----------------------
* bookmark is not painted correctly if cursor moves from it
* minimumsize of status bar no longer limited to sum of size of embedded widgets, using new class Statusbar/StatusBarLayout

Fixed after 0.3 RC 1:
---------------------
* search/replace did not respect ignorecase
* selecting a format in the popup of the kbytearraylinedit format chooser now moves the cursor to the lineedit
  also done for KGotoOffsetDialog with a similar widget setup
* delayed filebrowser init to speedup appearance of the mainwindow
* search/replace/goto dialogs had a bad focus on start

Fixed after 0.3.0:
------------------
* possibly outdated offcursor bitmap was painted if view is unfocused

Fixed after 0.3.1:
------------------
* tooltip for bookmark was not calculated by view offset, instead always from 0,0
* removed unneeded prefix lib from the OktetaPart
* show more digits for float and double data types in pod table, as much as decimal precision is given

Fixed after 0.3.2:
------------------
* do not crash if inserting from empty clipboard
* doing a edit in the value column did not trigger the modifiedChanged signal
* on a close of modified documents the behaviour for the success of the save was inverted

Done for 0.4:
-------------
* added a framework for inline dialogs
* ported goto dialog to inline dialog
* added a select range tool using editing of values in an inline dialog
* created toplevel folder libs to collect the neutral utility libs
* moved libframesprinter to libs
* made AbstractColumnRenderer independent of ColumnsView and reuse in print plugin
* renamed Kakao to Kasten and moved it to libs
* made all three modules of Kasten dynamic libraries and install header to ${}/kasten
* made the Okteta Kastem modules dynamic libraries, too, including public headers in ${}/kasten
* turned OktetaPart to use the Kasten classes
* turned OktetaPart into a KParts::ReadWritePart
* added Close All action
* added MultiViewArea and a split controller
* added a modified flag for the status bar
* turned Section into template<N,S>NumberRange
* added simple data types like Byte, ByteSize, Address, AddressRange, Line, LinePosition, LineRange, LinePositionRange
* renamed Kasten::KByteArrayDisplay to Kasten::ByteArrayView, and some Kasten::KByteArray* classes to Kasten::ByteArray*
* changed some parameter views to use QFormLayout
* added/improved tooltips to/for all tool views
* QtDesigner plugin for ByteArray*View
* renamed ResizeStyle to LayoutStyle in API
* added AbstractToolWidget
* splitted KByteArrayLineEdit into Okteta::ByteArrayComboBox and Okteta::AddressComboBox and added a history function (thus combobox)
* added shared pimpl class to AbstractModel, AbstractModelSynchronizer, AbstractViewArea and their respective subclasses
* added shared pimpl class to Abstract*Job, AbstractModelStreamEncoder, AbstractModelExporter and their respective subclasses
* added insert tool for full byte sequence 0-255
* added templates for binary filters
* added templates for checksum/hashsum algorithm
* added AbstractModelDataGenerator + config + controller
* ported InsertPatternController and InsertSequenceController to AbstractModelDataGenerator and added general InsertController
* added ability to AbstractDocumentFactory to create from QMimeData
* extended CreatorController to also create new document from clipboard and generators
* new: on drop of data to shell that is not a url list create a new byte array from it
* changed  PieceTableByteArrayModel to use QByteArray for the initial data instead of char* and int and home-made memory management
* added Base64 encoder
* middle click on tab now triggers a request to close it
* paste on empty shell or next to tabs is treated like a drop of selection clipboard
* renamed Revert to Disk to Reload (disk might have changed)
* Warn on "Reload from disk" if there are modifications to the working copy
* splitted SyncState into LocalSyncState and RemoteSyncState
* (re-)added Marking to the ByteArrayViews
* Strings tool now marks the strings instead of selecting it
* POD-Table marks the bytes used for the currently selected type
* added separate handler for dialogs with user to Kasten Core

Fixed after 0.4 Beta 1:
-----------------------
* bytearray lineedit mixed up the used coding

Fixed after 0.4 Beta 2:
-----------------------
* if value in POD table is edited, marking of the bytes does no longer disappear
* disabled storing of bookmarks in separate global XBEL file again, needs more thinking
* current coding from the view was not used in the Values stream encoder

Fixed after 0.4 RC 1:
---------------------
* Decoding Table tool crashed the program if the last view marked was removed in the background
* set editors in Decoding Table to readonly if view is readonly
* opening editor for char type in Structure tool didn't use existing value

Done for 0.5:
-------------
* moved mouse input handling into own controller classes
* added streamencoder for Base32 (classic, Base32Hex, z-base-32)
* added streamencoder for Base85 (Ascii85 for now)
* added streamencoder for Uuencoding (historical, Base64, Xxencoding)
* added streamencoder for S-Record (16,24,32-bit address size)
* added streamencoder for Intel Hex
* added Terminal tool
* added property remoteClipboardMimeType to AbstractModelStreamEncoder (clipboard does not know inheritance)
* export dialog uses remoteMimeType for selecting the file to export to

Next to work on:
----------------------------------
Important:
* find good promotion terms, like "Okteta, Queen of Bytes", "Rules your Bytes", perhaps Chess-connected (array)
* querying of changed byte range for pod editing
* generator editors need to remember used settings
* get maxEnums out of Designer combobox
* implement find whole words only!
* improve resize of status bar with priority-based limiting of shown items, use perhaps SqueezedLabel for Selection
* width calculation for resize seems to need to include some margins
* QActionGroups are cleared on setupGui, e.g. if toolbar gets edited
* search previous does not work in a row, as the cursor is exactly after a full match
* find/replace dialogs and ByteArrayComboBox need to handle change charcodec, but what to do with than invalid characters already entered?
* fix input of non-arabic digits
* query which mimetype in QMimeData to use, if octetstream not available but several
Less important:
* some more unit tests
* fix wrong font width calculation for offset and selection in statusbar
* do not show Paste from clipboard if not possible (at end or overwrite at line end), also for other tools
* do not show Cut if in Overwrite mode
* cursor does not get redone on color change
* on tripple click turn into selecting just whole lines if button kept pressed
* ask artists for own icon
* scroll on drag in first and last line

Later on:
---------
* DecodingTable/Structure tool: differ between invalid value and unavailable
* bookmarks storing
* stream encoders/generators/etc. should have access to the data if parameters depend on current data
* extend Export method to set default file extension and list filter
* add StackedViews and two-view-only layout
* max size of bytearrays (e.g. 8.bit, 16-bit, 32-bit, 64-bit), also defines shown offset width
* think about making the ByteArray* things interface only to the AbstractModel
  for this improve template functions findDocument with multiple interfaces given
* make offset 64-Bit, in the whole Api, best by using own datatype/define/typedef
* add change description factory, as always attaching complete rendered strings to a change bloats memory, also breaks on language change
* fix all the mouse pointer changes in the bytearray views
* try to merge both bytearray views into one
* add dialogplugins to DocumentSyncManager for the interaction
* show parameter field disabled, if there are no parameters
* selecting an operation/algorithm should move focus to parameter field (cmp. format input)
  or execute button if there are no parameters
* move search ignoreCase and whole words into ByteArrayService, and reenable Whole words only in Search Tool
* make status bar tools more flat, e.g. see how the zoom tool of KOffice is done
* for close all and exit make a collective list of unsaved in one dialog instead of single requests
* add border to BookmarkEditPopup, perhaps like that of QMenu
* add direction to tool views, so that e.g. the file info tool view puts the icon left to the data in vertical mode
* see how Tool and Document menus can be turned into KActionMenu (and add clear() call to KActionMenu)
* see how the cursor and the value editor could be turned into tool+view
* fix info and string docker (all with update function) to just work on update, react to change of data origin
* add option for offset and char comments to Source code encoder (cmp #163204)
* Support for Drop, both Import into and Open, also not just url, but also data
* snippets tool which can be used to put data aside (variant of clipboard)
* rework import and paste as:
    <!Menu name="import" append="open_merge">
      <text context="@title:menu">Import</text>
      <!- -Action name="import_clipboard" /- ->
      <ActionList name="import_list" />
    </Menu>
    <Menu name="paste_as" append="edit_paste_merge">
"Paste as" is like "Insert from Clipboard as", means it comes from a source
See "Insert", is generated as well as from a source, so perhaps join there?
      <text>Paste As</text>
      <ActionList name="paste_as_list" />
    </Menu>
* Make tabs click proxies
* make tabs movable between areas (like QDockWidgets)
* Better handling of file errors:
  exact problem descriptions,
  options to solve problem (e.g. make file readable)
* add proper support for blocking processes like printing, string search, loading or filter:
  show progress, allow cancelling, block only related model
* input of offset or data should detect type by prefixes like 0x or such,
  by new variant Auto, e.g. for search/replace/goto
* test handling of readonly files
* more explicit titels for undo/redo actions (range, data), also paste, drag, and cut
* add support for memory mapped files (includes enabling overwrite controller again)
* think about turning insert pattern & Co. into a tool
* add close button-on-hovering to Documents browser, also make unsynced button clickable
* session support: full storing and restoring of view/model state
* add support for more commandline options
* complete work on input controllers for the bytearray view
* add some generic virtual QVariant data( const QModelIndex& index, int role ) const to AbstractModel
* rename AbstractDocument into AbstractObjectModel
* add AbstractTool, ToolManager and ToolManagerControl
* make controllers with one action generic, turn into tool&view
  and have description/factory a xmlgui creator interface
* Prepare libframesprint for inclusion into kdelibs
* add profiles with loaded tools and their positions (environments)
* templates
* + and - operates on whole selections
* better selection by mouse using the offset column 
* syntax highlighting
* support for formated bytearray formats, load/save as well as import/export
* shellwindow:
  * hovering of drag about tab changes to tab
  * dropping next to tab creates new data object by the drop data
* copy also for all tables, e.g. statistic
* mouse shadow cursor, shows where cursor would be positioned, also useful for drops (for drops already done)
* option to split in regular sections, than show only one section or all with a line between,
  similar to page modi of Okular (so page=section)
* make all jobs (searching, filter operations, ...) cancellable, e.g. using ESC
* add versions to view model, to be synched with the data model (if created later, create prior versions on demand)
* make status bar entries non-readonly, e.g. for offset->goto, selection,...
* search for other ideas in Inkscape
* make bookmarks program-wide, switch doc if needed.
* hovering drag over bookmark in tool should select it
* a "painting" cursor tool which stamps a pattern, chosen from a selection
* option to paint foreground/background of color dependent on value (0-white, 255-black)
* overview with pixels for bytes each in color of bytetext
* store bookmarks for usage on further opening, similar to Okular's memory
* bookmarks to load vs. bookmarks/marked regions in loaded documents? lokal vs. global perhaps? search inside.
* in-place saving instead of new-and-delete-old (ZFS Snpashots work blockbased, so only changed blocks get snapshotted)
* for processes show estimated rest time
* goto tool shows shadow cursor to see where current would go
* goto, search, replace and similar tools could be triggered by calls for handlers,
  so a click on the offset status would trigger the goto tool
  (or better do in-place/by-model editing, e.g. offset status would mean editing number?)
* all KDE inputs should show state with colors (invalid, okay)
* think about how per-user focus can be done
* show local information in window if we have focus, otherwise use KNotification
* multisection bytearrays
* move data to a new base address
* checksum calculation and insertion/appending
* byte order swapping
* splitting data files

Future plans:
-------------
* a binary diff editor widget in the Okteta libs
* binary diff editor widget based parts
