Sophie

Sophie

distrib > Fedora > 13 > i386 > media > os > by-pkgid > 250e020a3fb38cfdd6b735a6d8486ee2 > files > 35

rkward-0.5.2-2.fc13.i686.rpm

The following list of TODO-items is NOT complete!
Also, plans change frequently. If something is listed for a specific release, that's no more than a rough plan.
All in all, this TODO list is mostly for internal purposes, and many parts may not necessarily be intellegible to anybody but the authors.

Advertizing:
	- start being a bit bolder about RKWard (descriptions, startup notification, etc.)

Bugs outside RKWard:
	- KDE 4
		- KPageDialog does not take all pages into acount when calculating minimum size
			- known workarounds:
				http://article.gmane.org/gmane.comp.kde.cvs/700027
				http://kdepim.sourcearchive.com/documentation/4.1.80/kleopatra_2conf_2configuredialog_8cpp-source.html
		- why is the icon style only honored for mainToolBar (in KXMLGUIBuilder)? It looks like this is done on purpose, but why???
			- http://lists.kde.org/?l=kde-core-devel&m=103307809508725&w=2

Bugs:
	- "cannot create html package index" when installing package as a regular user (due to R.home ("doc") not writable)
	- There is definitely a memory leak in handling output!
		- Produce lots and lots of output -> watch mem usage grow
		- Probably the RKConsole is to blame (run outside console -> no significant increase)
			- Maybe the kate-part needs to be reset (syntax parse tree) every once in a while?
	- rnorm () and friends auto-print value only once. R_Visible is 0 on subsequent calls (what in the world is going on, here?)
	- RKEditorDataFrame:
		- sometimes the current cell indicator (the box around the current cell) gets lost.
			- Navigation and editing is still fine
			- seems to happen more often with larger data frames
			- more precisely: seems to happen after scrolling
			- no idea, why this happens
	- Quitting via q() in the R console will often lead to a segfault during shutdown

Compilation / technical
	- Incorporate FreeBSD patches http://www.freshports.org/math/rkward/files.php?message_id=200609172111.k8HLBiob081349@repoman.freebsd.org
	- cleanup DISABLE_RKWINDOWCATCHER (either get rid of it, or do it right)
	- eventually the whole RData-structure should be made to use QList-types

UI-stuff
	- find/create a set of menu icons (https://sourceforge.net/mailarchive/message.php?msg_id=37891606)
	- "First-run wizard"
		- pre-install R packages
		- notify if r-base-html package is not installed
	- Snippets library
		- pre-defined snippets to base scripts on
		- custom snippets
		- can be categorized by keywords / search
	- Check for existence of php binary on startup, not only when loading a plugin
	- RKEditorDataFrame
		- undo/redo
			- KDE4
		- deletion of multiple columns in one step
		- when pasting a large array, rows should not be added one by one. Suggested algorithm:
			- 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
	- Twintable/RKEditorDataFrame
		- merge the two classes
		- more efficient syncing: fetch only the values actually needed instead of the whole table. How?
		- make configurable:
			- invalid color (global and per variable)
			- unused color (global and per variable)
			- default alignment (per var type)
			- default precision
			- display of factor level labels (global and per variable)
				- might default to "only for factors"
			- delay of factor-level popup
		- highlighting of value ranges
	- Create an editor for single vectors/factors, or rework RKEditorDataFrame to handle those as well
	- Rework package management dialog
		- the UI should probably be simplified somehow. But how? All in a single list with "filter"? Ask for ideas/look at other apps
			- this will be very hard to do with the current Qt. We'd really need several checkboxes *within* a QListViewItem. Tackle this when/after porting to Qt4
		- add option to remove packages
		- smooth handling of updating packages installed in different repositories
		- auto-updating functionality (every x days, every new session, never; see https://sourceforge.net/mailarchive/message.php?msg_id=37960665)
	- RObjectListView
		- double click action should be configurable: View, Edit, insert name into current script, insert name into console, nothing
		- context menu action "detach" for package environments (probably with a warning, at least for base packages)
	- RKConsole:
		- is tab completion for file names still crashy?
			- currently, problem seems to be inside KUrlCompletion
		- one additional newline character printed with every line
		- Console should start a command chain when submitting a batch of pasted commands
		- Better yet, the commands might be autosplit in the backend. Need to think about how to design this correctly, though
		- Allow pasting at other positions than line end
		- Prevent cursor from venturing into lines other than the last line
		- When inside a string, should offer tab-completion for system paths (will maybe have to wait for KDE4, when we get better clues, what context we are currently in)
		- Allow multi-line command editing?
	- Script editor:
		- code completion
			- probably we can trim down the completion widget by providing custom headerData()? (Low priority)
		- placement of menu options?
		- new action "Source file"
		- deal better with overlapping blocks in the script editor (brush merging?)
	- RKConsole / Script editor:
		- highlight only valid function names
	- RKHelpSerachWindow:
		- call .rk.get.installed.packages, and update package selection drop down on every show, but not on startup? Really? Maybe both.
	- RKVarslot:
		- when adding vars to a multi varslot, these should become selected (so you can removed them again with a single click)
	- RKVarselector:
		- pop-up-able selectors (maybe more generic, not only for varselectors): Like a "Browse" button
	- RKCommandLog:
		- optionally keep a file log!
	- hot-key/permanent icon to cancel current command / hold processing. Perhaps in the busy/idle indicator?
	- find out how to save toolbar states properly in parts-GUI
		- also setting the toolbar state for all windows with that toolbar
	- David's usability items
	- from Ralf:
		- show first few values of vectors/scalars in tool-tip in workspace browser
	- Debugging functionality
		- ideally the whole thing: setting breakpoints, etc.
		- realistically, maybe we can override browser () or do_browser with something nicer
	- Preview of plots
		- Maybe use a button (along the submit / close / etc. buttons instead)?
		- The preview window should be a specialized RKCaughtWindow
			- It should show info on state (up to date / updating / error / etc).
	- Graphics Device List window
		- (see http://sourceforge.net/mailarchive/message.php?msg_id=37825223)
		- par (no.readonly=TRUE) and par () to fetch available parameters and determine read-only state
		- device list would only be fetched when opening the window, not kept up to date?
		- access to graphics device plugins
	- Help system
		- find a good way to open R help pages in the same window
		- open link in new tab, etc.
	- Working directory
		- show current wd in <browser>, somewhere
	- Settings UI:
		- see http://sourceforge.net/mailarchive/forum.php?thread_name=200703230304.43023.kapatp%40gmail.com&forum_name=rkward-devel
		- R-Backend-Settings:
			- the options should gain a "use default" checkbox to cope with changing R option defaults
			- tooltips for the options on "R-Backend" tab about the internal R-function call
		- option for a default CRAN mirror, so as not to load the tcl/tk interface everytime
			- may be have a drop down menu for the available mirrors instead of tcl/tk which can be fetched just once
	- UI geometry:
		- see https://sourceforge.net/mailarchive/forum.php?thread_name=200704181922.07780.michellang%40gmail.com&forum_name=rkward-devel
		- save size/proportions of R script file, R console, Workspace browser...
		- save attach/detach status of the windows
	- project/session handling: files, workspace, current working directory.
	- file system browser tab
		- a way to inline pdf/ps/jpg/png files like in KDevelop?
	- provide a menu action / shortcut to switch to the directory of the current script file.
	- Quitting:
		- 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.
	- Vignettes:
		- any means of fetching a description of the package before installing?
		- Add a vignettes browser to the help menu
		- Add context menu with vignettes to package environments in object browser
			- likely, package environments should try to fetch vignettes, when "updating"
	- rcontrolwindow:
		- this does not really need to be a top-level tool window any more. Since it's rarely used, it might be hidden somewhere.

Internal stuff:
	- rklocalesupport:
		- does locale switching / detection work? Does Qt have something, yet?
	- Workspace browser / code completion
		- we might make this a bit less pro-active:
			- only objects directly on the search path need to be fetched at once
			- children of these objects do not need to be investigated until we first try to access a child of the object.
			- i.e. RContainerobject::children() should handle fetching the child structure (numChildren() should probably be populated pro-actively).
			- isParentOf() should not be affected, as this can only be true for a child object that has previously been investigated
			- need to make sure, completions are not blocking
	- Handling fonts:
		- http://sourceforge.net/mailarchive/forum.php?thread_id=31631211&forum_id=12970
	- Look at package odfWeave, and find out, how to use this
		- replace remaining direct HTML fragments in plugins with wrapper calls
	- should we override bindingIsActive()?
	RKVariable:
		- True Support for Logicals
		- In the current design, RKVariable would not handle storage mode changes from outside well at all
		- use QIntDict instead of string-map for value-labels / factor levels? Qt4: QHash
	- call toplevel handlers for user/console commands?
	RCommandReceiver:
		- add virtual rCommandStarted () function, so receivers can find out, when their command becomes active
	REmbedInternal:
		- probably we do not need na_double at all (just any NaN) => less confusion
	Detecting object modifications inside R:
		- left TODO:
			- detection hole:
				x is 1
				user does
				rm (x); x <- function () {}
				(object list remains the same, watch was not active, but symbol changed)
				- will need to put an extra notification inside .rk.watch.globalenv ()? Will that get run?
	- RExpressionObject as an abstraction for R-Expressions (i.e. manually edited expressions).
		- It will be possible to "store" these in the RObjectList and select them just like any other object
		- RKVarslot will allow editing the selected value by hand (or just typing the name in)
			- How to do this nicely UI wise?
	- RThread:
		- Detection of commands that run for a suspiciously long time
			- Show "do you want to cancel ..." option after configurable amount of time
	- use R_DirtyImage to determine, whether workspace needs to be saved
	- in REmbedInternal, add extractTemporaryStrings (), for strings that do not have to be copied
	- Object editing / modification tracking:
		- functions to set double/int/string-vectors directly. Use in paste-operations
	- error-handling/raising in .rk.do.call
	- 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.
		- 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)
		- let's set this back for a while
	- give informative feedback on syntax errors (line numbers, etc.)!
	- .rk.get.available.packages ()
		- use external (file) storage for cache to save mem
	- can the mutex be made non-recursive? I think so, but don't recall
	- the whole idea of having a single mutex for everything is flawed. We should use several specialized ones
	- When saving workplace layout, save it relative to the workspace file. Allows to move the workspace, easier
		- KURL::relativeUrl()
		- How to deal with workplaces saved in the config (and not bound to a workspace file?)
	- all RKComponents:
		- 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()?

General code:
	- use constBegin (), constEnd ()
	- get rid of all the superflous dependencies: http://lists.debian.org/debian-devel/2005/12/msg00439.html
	- remove classes/files:
		- RKGlobals
			- static members should be moved to the respective classes. Much cleaner!
	- remove all the passing around of KGlobal::config() as a parameter
	- grep sources for "KDE4"

R plugins:
	- distribution plugins (probabilities and quantiles)
		- probably all these could use an option "Store result (to name) / Print result / print and store"
		- when changing this, they should first be changed to use common base functionality:
			- the tail, log, and print options would be in a single embedded plugin
			- a common PHP file would be included that generates uniform code (a small set of options would be needed to define the parts that are different across distributions)
			- something similar should be done for the plots
	- plugin help files:
		- 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.
		- Find a way to make help searchable, preferentially within the R help search window
	- import plugins:
		- standardized? checkbox to open imported object for editing
			- would be nice, if this box could be affected (default) by a global setting
	- Generalized preview:
		- E.g. for data import plugins
	- Ability to pre-select some default values with a single option
	- Spinbox:
		- 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.
		- options min_inclusive / max_inclusive for real number spinboxes (defaulting to true)
	- use SVG device for graphics output
	- X11->Export:
		- provide SVG export option
	- provide context menu / other UI to export to different formats / edit
	- PHP-backend:
		- http://de3.php.net/manual/en/function.call-user-func.php seems to be faster than eval
		- find out why an error in the backend often leads to a subsequent crash
		- it might be possible to create only one "master" PHP process, and fork off child processes as needed from that (pcntl_fork() in PHP).
			- Do some timing, on how much faster this would actually be
			- The main drawback is that communication could no longer go via stdin/out, but some other mechanism would be needed. This would also mean ditching KProcess, and using perhaps QTcpServer/Socket.
	- plugins (general)
		- ODS filter (try to find someone to implement one in R)
	- formula-widget:
		- use smart sorting, esp. of generated string
		- add labels, add "up to level" option
		- add constant term option
	- multi-object option group:
		- provide the set of enclosed options for each of the selected variables
		- will provide dynamic properties based on which variables are selected in the source
		- how to determine default values?

Documentation:
	- add an example to show rkward-specific commands (rk.print, rk.graph)

API documentation:
	- add page containing a rough overview of general architecture
	- RCommandStack

Configuration:
	- additional console/log options:
		- color highlighting for warnings/errors
	- additional R engine options:
		- stack size (commandline arg --map-ppsize)
		- disable html help
	- new dataeditor options:
		- see comments on RKEditorDataFrame


################## Some internal notes below ##############

################## menu structure file/workspace ###########
File
	New
		Dataset
		Script File
	Open R Script File
	Open Recent (Script File)
	Save/Load R Objects
		Save
			...
		Load
			...
	Save
	Save As
	Reload
	Print
	Quit

Workspace
	Open Workspace
	Open Recent (Workspace)
	Save Workspace
	Save Workspace As
	Configure Packages (redundant)

How should this be changed? Maybe:

File
	New
		Dataset
		Script File
	Open R Script File
	Open Recent (Script File)
	Open Workspace
	Open Recent (Workspace)
	Import (previously Load R Objects)
	Export (previously Save R Objects)
	Save
	Save As
	Save Workspace
	Save Workspace As
	Reload
	Print
	Quit


################## cryptic notes ######################

translation of plugins and help files (no, this is not good, yet. Not modular, order gets messed up, context information is lacking. We need a dedicated simple parser that will understand the files it deals with, and extracts the strings with relevant context info).
in Makefil.am:
# experimental: extract all messages. Probably it would make sense to split this up, however, perhaps per .pluginmap, or per directory!
messages:
	extractrc `find . -name \*.rkh` --tag=title --tag=summary --tag=usage --tag=section --tag=related --tag=technical > messages.cpp
	extractattr `find . -name \*.rkh` --attr=section,title --attr=section,shorttitle >> messages.cpp
	extractattr `find . -name \*.pluginmap` --attr=component,label --attr=menu,label --attr=entry,label >> messages.cpp
	extractrc `find . -name \*.xml` --tag=text >> messages.cpp
	extractattr `find . -name \*.xml` --attr=dialog,label --attr=wizard,label --attr=tab,label --attr=page,label --attr=frame,label --attr=varselector,label --attr=varslot,label --attr=radio,label --attr=dropdown,label --attr=option,label --attr=checkbox,label --attr=spinbox,label --attr=browser,label --attr=saveobject,label --attr=formula,label >> messages.cpp