1The following list of TODO-items is NOT complete!
2Also, plans change frequently. If something is listed for a specific release, that's no more than a rough plan.
3All in all, this TODO list is mostly for internal purposes, and many parts may not necessarily be intellegible to anybody but the authors.
4
5KF5 port:
6Things to do:
7- Grep for "KF5 TODO"
8Things to test at the end:
9- Everthing concerning loading / saving, from recent files, scripts, workspace, etc.
10  - Moved installations, moved workspaces.
11Knwon issues to fix:
12- ???
13
14Minor layout stuff to fix in plugins:
15- Barplot: "Display values" should be checkable frame
16- Sort data: optionset should simply use vertical stacking, or fix the horizontal alignment
17
18Upcoming porting efforts: Port from QtScript to QJSEngine:
19- Unforunately, QJSEngine lacks support for pre-compiled JS (QScriptProgram), ATM (Qt 5.5). We'll need some other optimization.
20- Idea: Use _one_ engine for each plugin, _including_ any embedded plugins. Wrap existing JS code into a closure, exporting only the "primary" functions as properties of an object.
21  - Then, the scriptbackend will call plugin_a.preprocess(), etc.
22  - The scriptbackend knows which of the plugins it is currently dealing with, and thus can trivially relay all getValue()-calls as appropriate.
23- Same approach for UI scripting.
24
25Port from QtWebKit to QtWebEngine
26- Should be mostly unproblematic
27  - Gah, QWebEngine does not compile with MinGW! Need some entirely custom solution, instead? https://github.com/GreatTux/CefMinGWQt
28- Somewhat unfortunate that QWebElement will be gone. We might be using this to amend the context menu, e.g. for copying one section to clipboard / deleting one section, etc.
29  - Could perhaps be done by catching contextmenu event in JS, instead, then send to frontend, somehow.
30
31New features in R 3.1.0 to make use of / support:
32
33- A new browser command s has been added, to “step into” function calls.
34- A new browser command f has been added, to “finish” the current loop or function.
35
36Simple stuff to do soon:
37	- RKConsole: Show a notice (with "don't show again"-box, of course) when first using Ctrl+C shortcut
38
39i18n-Thoughts:
40  + Notes:
41    - Is it a problem to sync KDE_LANG and LANGUAGE? Should that also be set for the backend?
42    - Lifetime of RKMessageCatalogs? Should probably be destructable, at least when reloading pluginmaps. Should be possible to implement in a sane ways
43      using QSharedPointer magic.
44    - Don't forget to write documentation
45      - Also general documentation for JS-functions is missing!
46    - What should be the policy regarding installing translations (80% criterion)
47    - i18n'ed plugins vs. automated tests
48      - Sure, we can run automated tests under C locale. But it would be nice to have an additional check that translations don't cause
49        any obvious problems.
50        - At least we could check for errors
51        - Perhaps a special diff of the generated R commands, where all quoted strings and comments are stripped?
52
53MacOS:
54  - Avoiding mis-placment of certain menu-entries: QAction::menuRole()
55
56Bugs outside RKWard:
57	- KDE 4
58		- why is the icon style only honored for mainToolBar (in KXMLGUIBuilder)? It looks like this is done on purpose, but why???
59			- http://lists.kde.org/?l=kde-core-devel&m=103307809508725&w=2
60
61Bugs:
62	- XMLGUI:
63		- The edit menu is broken in the main window, but not detached windows (for script editor, console)
64			- Ok in KDE 4.3.4 / Linux
65			- Broken in KDE 4.4.1 / Windows
66			- Apparently it is the *switching* of parts that is the problem. For the very first part, the GUI is ok, after that all DefineGroups seem to be forgotten
67	- There is definitely a memory leak in handling output!
68		- Produce lots and lots of output -> watch mem usage grow
69		- Probably the RKConsole is to blame (run outside console -> no significant increase)
70			- Maybe the kate-part needs to be reset (syntax parse tree) every once in a while?
71	- RKEditorDataFrame:
72		- sometimes the current cell indicator (the box around the current cell) gets lost.
73			- Navigation and editing is still fine
74			- seems to happen more often with larger data frames
75			- more precisely: seems to happen after scrolling
76			- no idea, why this happens
77		- The editor is prone to race conditions of the type:
78			- 1. user edits something in the editor
79			- 2. before the edit has been synced to the backend, a different command touches the data
80			- The editor should keep track of which / how many synchronisation commands are still outstanding.
81			- If an edited object was touched while sync commands are still outstanding, complain and let the user handle the situation
82	- options ("pager") is currently broken in RKWard. May not be a problem, but we offer a GUI to configure it in Settings->Configure RKWard...
83
84Compilation / technical
85	- Incorporate FreeBSD patches http://www.freshports.org/math/rkward/files.php?message_id=200609172111.k8HLBiob081349@repoman.freebsd.org
86	- eventually the whole RData-structure should be made to use QList-types
87
88R backend:
89	- tcl/tk can evaluate all sorts of R stuff, even if there is no "command". It would help, if we simply defined a "default" command to be active at such times.
90
91UI-stuff
92	- find/create a set of menu icons (https://sourceforge.net/mailarchive/message.php?msg_id=37891606)
93	- "First-run wizard"
94		- pre-install R packages
95		- notify if r-base-html package is not installed
96	- Snippets library
97		- pre-defined snippets to base scripts on
98		- custom snippets
99		- can be categorized by keywords / search
100	- RKEditorDataFrame
101		- undo/redo
102		- deletion of multiple columns in one step
103		- when pasting a large array, rows should not be added one by one. Suggested algorithm:
104			- if we find out we've already pasted 100 rows, first check, how many more are to come and add this many both to the variable and to the R workspace. Can potentially avoid *lots* of work
105	- Twintable/RKEditorDataFrame
106		- merge the two classes
107		- more efficient syncing: fetch only the values actually needed instead of the whole table. How?
108		- make configurable:
109			- invalid color (global and per variable)
110			- unused color (global and per variable)
111			- default alignment (per var type)
112			- default precision
113			- display of factor level labels (global and per variable)
114				- might default to "only for factors"
115			- delay of factor-level popup
116		- highlighting of value ranges
117	- Create an editor for single vectors/factors, or rework RKEditorDataFrame to handle those as well
118	- Package management dialog
119		- auto-updating functionality (every x days, every new session, never; see https://sourceforge.net/mailarchive/message.php?msg_id=37960665)
120		- What about the checkBuilt-option to old.packages()
121	- RObjectListView
122		- double click action should be configurable: View, Edit, insert name into current script, insert name into console, nothing
123	- RKConsole:
124		- is tab completion for file names still crashy?
125			- currently, problem seems to be inside KUrlCompletion
126		- Fix pasting at other positions than line end
127		- Prevent cursor from venturing into lines other than the last line
128		- Allow multi-line command editing?
129	- Script editor:
130		- code completion
131			- probably we can trim down the completion widget by providing custom headerData()? (Low priority)
132		- placement of menu options?
133		- new action "Source file"
134		- deal better with overlapping blocks in the script editor (brush merging?)
135	- RKConsole / Script editor:
136		- highlight only valid function names
137	- RKVarslot:
138		- when adding vars to a multi varslot, these should become selected (so you can removed them again with a single click)
139	- RKVarselector:
140		- pop-up-able selectors (maybe more generic, not only for varselectors): Like a "Browse" button
141	- RKCommandLog:
142		- optionally keep a file log!
143	- find out how to save toolbar states properly in parts-GUI
144		- also setting the toolbar state for all windows with that toolbar
145	- from Ralf:
146		- show first few values of vectors/scalars in tool-tip in workspace browser
147	- Graphics Device List window
148		- (see http://sourceforge.net/mailarchive/message.php?msg_id=37825223)
149		- par (no.readonly=TRUE) and par () to fetch available parameters and determine read-only state
150		- device list would only be fetched when opening the window, not kept up to date?
151		- access to graphics device plugins
152	- Help system
153		- find a good way to open R help pages in the same window
154	- Working directory
155		- show current wd in <browser>, somewhere
156	- Settings UI:
157		- see https://mail.kde.org/pipermail/rkward-devel/2007-March/001139.html
158		- R-Backend-Settings:
159			- the options should gain a "use default" checkbox to cope with changing R option defaults
160			- tooltips for the options on "R-Backend" tab about the internal R-function call
161	- project/session handling: files, workspace, current working directory.
162	- file system browser tab
163		- a way to inline pdf/ps/jpg/png files like in KDevelop?
164	- Quitting:
165		- instead of closing windows one by one, and asking to save changes if necessary, first list all windows that might need to be saved, let the user chose to save them, then close all windows without further questions.
166	- Vignettes:
167		- any means of fetching a description of the package before installing?
168		- Add a vignettes browser to the help menu
169		- Add context menu with vignettes to package environments in object browser
170			- likely, package environments should try to fetch vignettes, when "updating"
171
172Internal stuff:
173	- RCommand deletion
174		- dealing synchronously with commands (e.g. via a modal RKProgressControl) would be so much easier, if the commands would not be deleted quite as soon!
175	- rklocalesupport:
176		- does locale switching / detection work? Does Qt have something, yet?
177	- Handling fonts:
178		- http://sourceforge.net/mailarchive/forum.php?thread_id=31631211&forum_id=12970
179	RKVariable:
180		- True Support for Logicals
181		- In the current design, RKVariable would not handle storage mode changes from outside well at all
182	RCommandReceiver:
183		- add virtual rCommandStarted () function, so receivers can find out, when their command becomes active
184	REmbedInternal:
185		- probably we do not need na_double at all (just any NaN) => less confusion
186	Detecting object modifications inside R:
187		- left TODO:
188			- detection hole:
189				x is 1
190				user does
191				rm (x); x <- function () {}
192				(object list remains the same, watch was not active, but symbol changed)
193				- will need to put an extra notification inside .rk.watch.globalenv ()? Will that get run?
194	- RExpressionObject as an abstraction for R-Expressions (i.e. manually edited expressions).
195		- It will be possible to "store" these in the RObjectList and select them just like any other object
196		- RKVarslot will allow editing the selected value by hand (or just typing the name in)
197			- How to do this nicely UI wise?
198	- RThread:
199		- Detection of commands that run for a suspiciously long time
200			- Show "do you want to cancel ..." option after configurable amount of time
201	- Object editing / modification tracking:
202		- functions to set double/int/string-vectors directly. Use in paste-operations
203	- error-handling/raising in .rk.do.call
204	- I've changed the simple RInterface::issueCommand (QString, ...) command to return a pointer to the RCommand created. This will allow for lots of small cleanups. Do them.
205		- well, on second thought, it might be better to rely more on RCommand::id () instead of pointers. Why? The id is unique (until integer overflow). The pointer may be reused after a delete -> potential problem when trying to cancel command which is actually already deleted (and potentially other cases)
206		- let's set this back for a while
207	- .rk.get.available.packages ()
208		- use external (file) storage for cache to save mem
209	- Always save workplace layout to a file, never to config. Even for the "global" option.
210	- all RKComponents:
211		- in the documentation we call the return value of value() the "default property". Why not simply define a "default property" for each component, instead of reimplementing value()?
212
213General code:
214	- get rid of all the superflous dependencies: http://lists.debian.org/debian-devel/2005/12/msg00439.html
215	- remove classes/files:
216		- RKGlobals
217			- static members should be moved to the respective classes. Much cleaner!
218	- remove all the passing around of KGlobal::config() as a parameter
219	- grep sources for "KDE4"
220
221R plugins:
222	- distribution plugins (probabilities and quantiles)
223		- probably all these could use an option "Store result (to name) / Print result / print and store"
224	- plugin help files:
225		- It would be nice to add the <id="..."> fetaure like <settings id=".."> in the technical section too. Also may be add something like <tag=".."> for the tags or variable which can be in italics, grey color.
226		- Find a way to make help searchable, preferentially within the R help search window
227	- import plugins:
228		- standardized? checkbox to open imported object for editing
229			- would be nice, if this box could be affected (default) by a global setting
230	- Generalized preview:
231		- E.g. for data import plugins
232	- Ability to pre-select some default values with a single option
233	- Spinbox:
234		- find a solution for "pending changes". Currently, if the user enters a value, manually, then presses submit, the old value will be used (the new value is only set, when the focus changes to another widget). Probably the RKSpinbox should emit signals for "pending" and "ready". The plugin spinbox should listen to those and not be satisfied as long as a change is pending. Maybe mark the spinbox in yellow, while a change is pending.
235		- options min_inclusive / max_inclusive for real number spinboxes (defaulting to true)
236	- use SVG device for graphics output
237	- X11->Export:
238		- provide SVG export option
239	- provide context menu / other UI to export to different formats / edit
240	- plugins (general)
241		- ODS filter (try to find someone to implement one in R)
242	- formula-widget:
243		- use smart sorting, esp. of generated string
244		- add labels, add "up to level" option
245		- add constant term option
246
247API documentation:
248	- add page containing a rough overview of general architecture
249	- RCommandStack
250
251Configuration:
252	- additional console/log options:
253		- color highlighting for warnings/errors
254	- additional R engine options:
255		- stack size (commandline arg --map-ppsize)
256		- disable html help
257	- new dataeditor options:
258		- see comments on RKEditorDataFrame
259