rkward-0.6.1/0000755000175000017500000000000012124351133012353 5ustar thomasthomasrkward-0.6.1/CMakeLists.txt0000644000175000017500000000132612124345420015117 0ustar thomasthomasPROJECT(rkward) CMAKE_MINIMUM_REQUIRED(VERSION 2.4) # KDElibs seems to need 2.6, though IF(NOT CMAKE_VERBOSE_MAKEFILE) SET (FORCE_PRETTY_MAKEFILE ON) ENDIF(NOT CMAKE_VERBOSE_MAKEFILE) SET(KDE_MIN_VERSION 3.9.7) # KDE 4.0rc2 FIND_PACKAGE(KDE4 REQUIRED) IF(FORCE_PRETTY_MAKEFILE) SET(CMAKE_VERBOSE_MAKEFILE OFF) ENDIF(FORCE_PRETTY_MAKEFILE) ADD_DEFINITIONS(${QT_DEFINITIONS} ${KDE4_DEFINITIONS} -DQT_NO_CAST_TO_ASCII) #uncomment the line below to save ~250-350kB in object size #ADD_DEFINITIONS(-DRKWARD_NO_TRACE) LINK_DIRECTORIES(${KDE4_LIB_DIR}) ADD_SUBDIRECTORY(rkward) ADD_SUBDIRECTORY(po) ADD_SUBDIRECTORY(doc) ADD_SUBDIRECTORY(tests) # TODO: figure out how to make source distributions (with REAMDE files, etc.) rkward-0.6.1/ChangeLog0000644000175000017500000016132112124345410014132 0ustar thomasthomas--- Version 0.6.1 - Apr-02-2013 - Add option to force-close a graphics window - Add plugin for subsetting data.frames by rows or columns - On the Windows platform, add an new (experimental) binary startup wrapper (rkward.exe) - Revert to building R packages form source on Mac OS X by default (controllable via compile-time option) - Fixed: lattice plots would not be added to the plot history, correctly, for some versions of lattice - Fix crash when trying to print, and neither okular, nor kpdf are available - Added support for loaded namespaces that are not attached to a loaded package - Pluginmaps can specify their "priority". Pluginmaps with low priority will not be added automatically, when found. - Pluginmaps can other pluginmaps based on their id (for cross-package inclusion) - Added new element for dynamic version checks within a plugin (R and RKWard versions, only, so far) - Add guard against accidental usage of the standard distributed pluginmaps in a later version of RKWard (installed in parallel) - Easier (de-)activation of RKWard plugin maps using checkboxes (Settings->Configure RKWard->Plugins) - Broken or quirky .pluginmap files are reported to the user, completely broken maps are disabled, automatically - Implement basic dependency handling for plugins / pluginmaps - Added support for the upcoming R 3.0.0 TODO: Check for any more regressions, before release - Added logic element to switch between several target properties (or fixed values) based on the value of a condition property - Sort plugin gains option to sort data.frames by more than one column at a time, and options for type conversion - Add in-application debug message viewer (targetted at (plugin) developers) - Add setting to customize initial working directory - Windows only: Add UI-checkbox for R's "internet2"-option - New functions getString(), getList() and getBoolean() for fetching data in plugin scripts - Boolean properties now return a numeric, not labelled representation of their value, by default. es should be unaffected. TODO: when announcing release, link to explanation mail. - Added GUI element for entering a set of options for an arbitrary number of items - Reduce CPU usage of pluings while idle - Fix conversion from Numeric to Factor in the data editor - In the data.frame editor, columns containing invalid values are now highlighted in red - Fixed: If none of the previous plugin maps could be found on startup, re-add the default - Added GUI element for entering matrix or vector data in plugins - Improve key handling while editing factor levels in a data.frame - Added utiltity function rk.flush.output() - RKWard is now categorized as Science/Math/Numerical Analysis in its .desktop file - Fixed: Yet another fix for hard-to-read function argument hints - Fixed: Device history was not working with more recent versions of ggplot2 - Fixed: Option to include suggested packages in install was mis-labelled "install dependencies" - rk.set.output.html.file() gains argument to allow addition of custom content to the html header --- Version 0.6.0 - Oct-24-2012 - Fixed: Entering "0" as propabilities (quantiles) vector in distribution plugins would cause error message - Preview device windows will display some status information (most importantly, warnings or errors) - Most plot plugins gain options to control margins and tick label orientation - Added option for installing packages from source (implicitly enabled on Unixoid platforms) - Fixed: Wrong handling of carriage returns ('\r') in the console window - Fixed: Spinboxes had wrong initial values - Omit comments on missing function calls in dialog code windows (e.g., if prepare() is unused, there's no "## Prepare" in the output either) - Output markup is now more XHTML compliant and easier to parse - Also save cursor position, folding, etc. for scripts. Note: Implementation details may be subject to change. - New function rk.list.labels() to retrieve column labels in a data.frame - rk.get.label() will now return an empty string ("") instead of NULL, in case no label is assigned - Fixed: Changed configuration settings would not be saved for script editor - Fixed: One character missing in R commands on lines longer than 4096 characters - Fixed: "Next"-button in wizards would remain enabled while settings are missing on a page - Fixed: Dynamic pages in a wizard would cause a layout bug on the first page - Do not offer to restore individual removed columns of a data.frame opened for editing - Fixed: Plot history and graphical menus broken in some cases with R 2.15.0 - Fixed: If the rkward package was loaded in a plain R session, q() and quit() still work - combined all Wilcoxon/Mann-Whitney-tests in one plugin (from previously two separate plugins) - Added polyserial/polychoric correlations to correlation matrix plugin - Added more compression options to the "Save objects as R code" plugin - Added MacPorts support, see README.MacPorts and bundle build script in the macports folder - Added dynamically generated table-of-contents menu to output document - Fixed: Would not show output of system() commands to stderr on the console (on Unix-like systems) - Allow some markup inside elements in plugins, and auto-add breaks only for duplicate newlines. - Reorganized t-test plugin, and add support for single sample t-tests - Box plot plugin gains more options for adding means - Fixed: Function argument hints for the second half of the parameter list would not be quoted, correctly - Improve keypress handling issues in the R Console, when the cursor or a selection is outside the editable range - Fixed: Failure to open workspaces with non-latin1 filenames from the command line - Fixed: Saving / restoring workplace layout would fail when saving to directories with unusual characters - Only install translations which are at least 80% complete (not counting strings in plugins, which are not yet translatable) - When asking for workspace file to open, use appropriate file filter - When configured to ask for workspace to open on startup, don't prompt to save, first - Fixed: potential crash when clicking "Select all updates" in the package installation dialog - Fixed: potential crash in object name completion under certain conditions - Simplified the "Sort Data" plugin, and added a help page - Fixed: On Windows, detached windows would sometimes be positioned with the menubar outside the upper screen edge - Added GUI support for inspecting the call stack during debugging - The backend executable is no longer linked against KDE libraries - Objects, which are not acceptable in a varslot, will still be shown, there, with a warning --- Version 0.5.7 - Oct-23-2011 - Fixed: Would not system-defined text color for argument hints - Do not treat arrays (which are not a matrix) as hierarchical named objects in the object browser - Do not analyse more than 100000 name child-objects per object (avoids hangs on such extreme data) - Fixed: Problems with using mclapply() inside RKWard - Offer to add a new library location, automatically, if location selected for installation is not writable - Reworked package installation / update dialog - Fixed: Integrated help browser would not update navigation history when following page internal links - Documentation on writing RKWard plugins is now accessible, locally - The file filter for R script files is now configurable, and includes *.Rhistory, by default - More obvious coloring of variable entry fields requiring user input in plugins - Default size of the code display in plugin dialogs has been increased - Removed support for downloading plugins using GHNS - Added support for RKWard plugins shipped inside R packages - Fixed: PDFs and many other types of documents linked from help pages would not be opened, correctly - Added support R 2.14.x - Removed option to set options("printcmd") - New option to run arbitrary (setup) commands in each session - Added new pseudo graphics device "rk.printer.device" to provide printing via the KDE printer dialog - Fixed: Printing was broken when kprinter is not available - Support the results list new help.search() in R 2.14.x, which includes vignettes and demos - rk.edit.files() and rk.show.files() gain parameter "prompt", which can be used to suppress user prompt - Added function rk.demo(), which is similar to demo(), but opens the example script in a script editor window - Fixed: Some plugin dialogs would not become visible, or be shown in very small size, with some window managers - Fixed: Potential crash when using context menus with "focus follows mouse" window activation policy - Added shortcut Ctrl+Enter to insert a line break and submit from a script editor - Reduce CPU usage while idle - Bar plot, dot chart, pie chart, and Pareto plot plugins gain more tabulation options - rk.results() now prints rownames, where appropriate - "frame" elements in plugins can now be made checkable - Disabling or hiding a plugin component makes it non-required, implicitly - Box plot gains option to dogde grouped boxes - Simplify internal handling of system() and system2() output - Simplify code produced by several plugins - Fixed: Occasional duplication of first letter of keyword, when using "Copy lines to output" from the console window --- Version 0.5.6 - May-30-2011 - Fixed: Would crash when searching for a term with quotes in the help search window - Add simple man page for command line options - Fixed: Potential crash when creating plots from a tcl/tk based GUI - Fix compilation on FreeBSD - Replace the R console's "Copy selection cleaned" action with "Copy commands, only", which will omit any non-command regions in the copy - Add "Copy lines to output" action to copy highlighted lines from the R console or script editors to the output window - R commands and their output can be "carbon copied" to the output window - On Windows, RKWard will detect, and offer to disable "native" file system dialogs - Object browsers that show only the global environment now hide the ".GlobalEnv" item - Fixed: Function argument hints would not be shown in some corner cases - Added function rk.print.code() to write highlighted R code to the output window - Box plot plugin gains support for grouped outcome data - Fixed: Pressing Ctrl+C would not reset syntactically incomplete commands in the R console - Crosstabs N to 1 plugin gains options to compute proportions and margins (thanks to Andrés Necochea) - Added convenience R function rk.list() to allow simplification of plugin code - Added stack-based window switching using Ctrl+(Shift)+Tab; this replaces the old "Next Window" and "Previous Window" actions - Fixed: Graphics device windows would disappear when trying to attach them to the main window with some versions of Qt - Fixed: tcl/tk widgets would lock up after running commands in the R Console - Provide a template for bug reports, containing standardized information on the RKWard setup in Help->Report Bug... - When loading a (local) workspace, change the working directory to the directory of the workspace (configurable) - Include the sidebar position of tool windows when saving / restoring the workplace layout - "Pending jobs" tool window is not longer shown in the bottom sidebar by default - Support removing individual tool windows from the sidebars, completely - Add an action to interrupt all (current and pending) commands - Fixed: When saving the workplace while closing the session, the workplace layout would not always be saved correctly - File browser context menu gains many more KDE standard actions (KDE 4.3 and above, only) - Auxiliary binaries rkward.bin and rkward.rbackend are no longer installed into /usr[/local]/bin/ on Unix - Fixed: Object name completion would abort early in the script editor with KDE 4.4 - Support function argument hinting for R primitives - Support package namespaces in object name completion and workspace browser - Support S4 slots in object name completion and workspace browser - More correct handling of quotes in object name completion - Support plot history for ggplot2 plots - Be less pro-active about fetching structure information on R objects in the workspace - Allow to browse arbitrarily deeply nested environments in the object browser --- Version 0.5.5 - Mar-15-2011 - Fixed: Crash when several environments on the search path have the same name - Re-organize the default toolbar actions of the main window - Detached windows are now restored in detached state when restoring the workplace layout - Workplace layout is now saved in a separate file, instead of in a hidden object inside the .RData file - Added R functions rk.save.workplace() and rk.restore.workplace() to save / restore a set of document windows - RKWard now tries to detect, when a workspace has been moved to a new directory, and adjust the paths restored script editor windows, accordingly - Fixed: Potential crashes when changing length of a data.frame that is currently opened for editing from R code - All pages in the package installation dialog now support sorting and keyboard search - Fixed: Converting from factor to string in the data editor set values to numeric, internally - Allow entering factor labels instead of only numbers, when editing factors in the data editor - Display logical values as "TRUE" and "FALSE" in data editor, and accept "T"/"TRUE"/"F"/"FALSE" in addition to "0"/"1" while editing - Add support for R functions loadhistory(), savehistory(), history(), and timestamp () - Do not load .RData file from current directory by default (configurable) - Fixed: On Windows, a wrong locale for LC_NUMERIC would be applied, resulting in malfunction of pdf() and postscript() - Fixed: Did not use system configured background color in data editor - Fixed: New columns would be always be added to the right, instead of to the left, in the data editor - Fixed: Would crash when trying to edit 0 row data.frame - Fixed: Output generated by external processes (system()) was not shown on the console - Fixed: Converting a variable to factor in the editor would drop existing levels, silently, and lead to NAs - Fixed: Cursor would keep jumping to the end, when typing a filename in the filename selection field in plugins - Fixed: Submit button would not become enabled in "Basic Statistics" plugin - Moved automated testing framework moved to a dedicated R package "rkwardtests", and added documentation - Support pasting to the middle of the current command line in the R Console - Better handling of script-editor commands while the R Console is busy - Correct interleaving of multi-line commands and the corresponding output in the R Console - Fixed: Portions of multi-line commands entered on the R Console would be run twice under some circumstances - Fixed: Lockups or crashes when using packages RGtk2 or rJava on the X11 platform - Fixed: R task callback handlers were not called - GUI frontend and R backend now run in separate processes - Re-write of large portions of the R embedding code - Fixed: Did not respect system settings for tooltip background color in some styles - Fixed: Installation would continue, seemingly successfully, even if R support libraries could not be installed - Fixed: Function argument hints would sometimes persist after closing a script window - Fixed: Would fail to analyse structure of ReferenceClass-objects - Fixed: "Vector" mode in "Paste special" action did not work correctly - Attempt to save workspace on crashes - Also try to relay SIGABRT and SIGILL to the proper signal handlers - Removed the remainder of the PHP scripting backend - Fixed: Would crash on tcl/tk events in some cases --- Version 0.5.4 - Oct-04-2010 - Fixed: Running user commands would crash with R 2.12.0 - Added full-featured plot history for the onscreen graphics device - Fixed: Potential crash when editing data-frame with duplicate column names - Added option to specify default onscreen graphics dimensions - Fixed: Graphics windows used to assume a minimum size of 640*480 pixels, even if a smaller size was specified - Added option to disable function argument hinting - New functions rk.show.message() and rk.show.question() for user interaction from R code - New options for scripting GUI logic in plugins - The current object of an active data editor can be referenced in plugins - Fixed: Placement of several menu items was broken - again - with KDE 4.4 and above - Allow sorting of results in help search window - Fixed: CPU usage would go to 100% for no good reason under certain circumstances - The save-object selector in plugins now allows to save as part of a data.frame / list - Fixed: On some systems, dev.off() would spawn two new graphics windows - Support row names in the data.frame-editor - Fixed: When starting with an empty table, RKWard would sometimes claim that this object has been removed - Fixed: Would crash when trying to configure toolbars under certain circumstances (workaround for bug in kdelibs) - Fixed: Crash while analysing some objects returned by XML::xmlParseTree() for invalid XML - Fixed: Error while installing packages with R 2.11.0, when archiving packages in a non-existing directory - Added option to autosave script files (enabled by default) - The tabbar in the main window now shows a context menu with options to close/detach a window - The tabs in the main window can now be re-ordered by dragging with the mouse (left click if compiled with Qt 4.5 or above, middle click for earlier versions) - Added alternating row backgrounds in data.frame-editor --- Version 0.5.3 - Apr-30-2010 - Fixed: Windows->Activate->Window left / right actions were always disabled - File browser window saves settings on exit - Several windows-specific bugs were fixed - Plugin dialogs are shown with a larger initial size - Add close buttons to each tab in the main document view area (not available in KDE 4.0) - Make "print", "export as HTML", "dynamic word wrap", and "increase/descress font size" available for the console window - Use a native menu, instead of the default TclTk-menu - Fixed: Newly created variables were not properly updated when closing and re-opening the editor - Added "paste special" action to script editor and console for pasting R vectors and matrices from spreadsheets - Fix order of menus for detached windows - File->Open R Script File now allows to specify the character encoding to use - Fixed: No entries were added the recent script/workspaces actions after "save as" - Initialize the output file with an appropriate encoding specification - Add SVG support to export (graphics) plugin - Add basic settings format settings for graphics output - Convert all plugins to use ECMAscript instead of PHP; RKWard no longer depends on PHP - Fixed: Frequent crashes while running automated plugintests - Fixed: Filenames without extension would not be shown in file dialogs - Fixed: Calling "fix(my.fun)" would remove comments - Fixed: Removing "@CRAN@" from the repositories would break package installation --- Version 0.5.2 - Oct-26-2009 - Add Stata data file import plugin (by Michael Ash) - All directly accessible plugins now have at least one automated test - Add support for the dynamic help server introduced in R 2.10.0 - Assorted minor fixes and improvements to several plugins - Fix deadlock while handling some Tcl events - Plugin dialogs close automatically after submitting (by default) - Fetching object structure is much faster for very large data.frames - Fix crash when loading certain packages on Windows - Fix some potential path issues on Windows - "Analysis" menu was restructured, slightly - Debug output (previously sent to stderr) is now written to a temporary file - On plugin help pages, display a link to invoke the plugin - Tolerate missing libraries in testing framework - Double-clicking an item in the workspace browser now opens an object viewer, or (if possible) editor - Safeguard against removal of essential packages via the GUI - Add context menu action to unload packages in the workspace browser window - Add shortcut to the load / unload packages dialog also in the workspace menu and the workspace browser context menu - Make toolbar buttons configurable - Fixed: Console window would sometimes remain in partially active state after piping commands --- Version 0.5.1 - Aug-04-2009 - Support compilation on Windows - Add framework for automated plugin testing, and some first plugin tests - New command line option "--evaluate " mostly for the purpose of automated testing - Remove support for R 2.6.x and earlier - Add basic checks for a correct installation of the RKWard resource files - Remove "What to expect" dialog at startup - Make keyboard shorcuts configurable - Add option to add only single line commands from script editor to the console history - Add action to change working directory to that of the current script file - Fixed: No warning was shown, when an open script file was changed on disk, externally - Fixed: Opening most file types (e.g. PDF) from the help browser was broken - Fixed: Make built-in editor work again for file.edit () - More plugins now write a header to the output window - Add convenience function "makeHeaderCode()" for use inside plugins - Adjust some icons - Plugins can be invoked from R code (mostly for internal purposes) - Add "Run again" link for plugin generated output - Fixed: All objects in .Globalenv would be revisited if a single object was added / removed - Fixed: Screen device in rkward was not seen as interactive by R --- Version 0.5.0d - May-10-2009 - Fixed: Container of detached windows would sometimes remain after reattaching - Fixed: Global toolbar style was not honored - Fixed: Auto-scroll missing in progress dialogs and data editor - Fix jumping toolbar - Fixed: Several harmless warnings were silenced - Fixed: Argument hints would always stay on top regardless of focus - Fix crash when reaching bottom of command history in context sensitive search - Fix crash while inserting rows in a data.frame with string variables --- Version 0.5.0c - Mar-30-2009 - Fix assorted installation problems - Updated translations: German, Spanish - Fix immediate crash issue with R 2.9.0 (requires recompilation against R 2.9) - Fixed some shortcut problems with KDElibs 4.2.x - Fixed: Several icons would not be loaded - Fix device window capturing Qt 4.4.3 (possibly other versions were broken as well) - Fix device window capturing with R 2.8.0 - Extended boxplot plugin - Support data.frames in barplot plugin - New set of plugins: Item Response Theory (by Meik Michalke) --- Version 0.5.0b - Apr-20-2008 - Support compilation with R 2.7 - New plugin: Hodrick-Prescott Filter - Fix a problem with plugin help pages not loading correctly - Better resize handling in progress and R input (readline()) dialogs - Somewhat better handling of the R event loop (esp. when calling "require(not_yet_installed_package)") --- Version 0.5.0a - Jan-23-2008 - Fixed: no objects were selectable in most varslots - Compilation: check for minimum kdelibs version during cmake stage --- Version 0.5.0 - Jan-21-2008 - add support for a focus-follows-mouse activation behavior of the MDI windows (Settings->General) - ability to mark arbitrary "blocks" in script editor and run them with a shortcut - make sure that R only handles SIGSEV, when the R thread is active. Should give better backtraces and less hangs - object viewer was redesigned to use space better, and only fetch the print-representation when needed - more icons added - data.frame editor can be set to read-only mode - code completion in script editor shows icons for the different object types - settings dialog is now shown in "page tree" mode - port to KDE 4 ---- KDE 3 versions --- Version 0.4.9c - Mar-18-2010 - Backport all plugin changes and additions up to RKWard 0.5.2 - Add support for the dynamic help server introduced in R 2.10.0 - Backport some improvements in event handling - Fix deadlock while handling some Tcl events - Fix: Warn before saving file that was modified on disk, externally - Fix: Do not try to open mimetypes other than text/html directly in the help browser. - Fixed: Screen device in rkward was not seen as interactive by R --- Version 0.4.9b - May-10-2009 - Workaround: Deactivate all filemanagement shortcuts in the File Browser. These would sometimes trigger when they should not. - Fix crash while inserting rows in a data.frame with string variables - Fix immediate crash issue with R 2.9.0 (requires recompilation against R 2.9) - Fix device window capturing with R 2.8.0 - Extended boxplot plugin - Support data.frames in barplot plugin - New set of plugins: Item Response Theory (by Meik Michalke) --- Version 0.4.9a - Apr-20-2008 - Support from compilation with R 2.7 - New plugin: Hodrick-Prescott Filter - Fixed some lockups during startup --- Version 0.4.9 - Jan-14-2008 - Improved user interface for CSV import plugin - Support drawing grids in histogram and stripchart plots - New plugin: Levene test - New plugin: Jarque-Bera test (by Germán Márquez Mejía) - Fixed: Crosstabs plugin produces better output - Fixed: use.value.labels option was wrong in SPSS import plugin - Fixed: SPSS tables would only be imported to the workspace, when the edit option was checked - Fixed: correct installation of rkward.desktop file - Use the KDE default fixed spacing font for command log and object viewer --- Version 0.4.8a - Nov-11-2007 - More reliable C stack limit detection on some systems - Fixed: Console accepted pasted input while a command is running - Fixed: Analysis->Moments->Moment plugin did not use the order-parameter - Fixed: Crash on simple assignments in globalenv() with R < 2.4.0 - Fixed: Meta information (labels) did not get shown correctly in the data editor - Add command line option "--debugger" for debugging purposes - Fixed: Pressing the add button in a varslot with no object selected could crash RKWard --- Version 0.4.8 - Oct-03-2007 - New plugins: pie chart, dot chart, crosstabulation, two time-series tests, and basic linear regression - barplot plugin allow specification of custom labels - commands run through the console from the script editor will now be added to the command history (this can be turned off in the settings) - fixed: promise objects (created by delayedAssign()) directly in globalenv() would be forced early - make wrapper script work, when konsole is not installed - correct syntax highlighting for ::: and NA_integer_ and others - silence some GCC 4.2 warnings - fixed: crash when editing a data.frame with logicals (logicals are still mishandled, but less severe) - fixed: would not work with R 2.6 - new translation: Simplified Chinese (contributed by Roy Qu) - more compilation fixes for GCC 4.3 - object viewer also shows summary information, gains an update button, and MDI integration - CLT plugins allow drawing grid - add max.print option to R-Backend settings dialog - syntax highlighting is minimally faster for long outputs - graphics export plugin gains option for EPS compatibility - fixed: inserting / removing rows in the data editor in the presence of invalid fields in later rows would lead to a crash - fix some internal problems with enabledness/disabledness of plugin components - some complex plotting plugins now start up noticeably faster - fixed: sometimes detecting created X11() windows would fail, esp. under high load - create the workspace browser only when it is first shown - support for including files and snippets in xml files - all file selection line edits gain filename-completion - add a basic file selector window - show the focus indication (thin red border) also for detached windows - tool windows can be closed and detached in the same way as regular windows - fix a crash with detached tool windows - add command line option --disable-stack-check for systems where R C stack checking is buggy - the modifier "not" for boolean properties returns a (negated) boolean sub-propery instead of just a string - add possibility to blacklist packages from fetching structure information. Package GO is blacklisted by default. - when fetching the structure of "promise" R objects, don't keep them in memory - optimize the function to retrieve the structure of R objects (for display in the object browser, and completion) - Messages, warnings, and errors for plugin commands are shown in the output, instead of in a dialog --- Version 0.4.7a - May-07-2007 - add sanity check for the detected stack limits - fixed: one some systems rkward would crash or not compile due to missing fortran symbols - fixed: starting the scatterplot plugin in wizard mode would crash rkward - tab-completion in the console will do partial completion, if all potential completions have a common start - fixed: file-name completion would always assume the home directory as the current directory - update turkish translation - compilation fix for FreeBSD (thanks to Thierry Thomas) - fixed: when executing commands line by line from the script editor, line breaks would be omitted --- Version 0.4.7 - Apr-11-2007 - some fixes for GCC 4.3 - fixed: the presence of user objects called "missing", "assign", or "get" would confuse some RKWard internals - several existing plugins have been improved in various ways - use maximum permissible width in the object viewer - fix a crash that occurred during startup under some circumstances - when flushing the output, also delete all graphs - add support for a "technical details" section in plugin help files - add option to enable / disable single options of a radio or dropdown control in plugins - t-test plugin now also allows to calculate a paired test - show current working directory in the statusbar - add run selection action to all HTML windows - add custom icons for run line/selection/all - make sure not to run parts of an incomplete user command. It would lead to all sorts of subtle problems - if an incomplete command was piped through the console, the console does not become blocked for piping - make "run current line" advance the cursor to next line after running - warnings and errors are highlighted in command log / console (warnings only for R >= 2.5.x) - plugin generated commands are run in a local() environment, allowing for more concise code - also support filename completion in the console (mode of completion is determined by heuristic means) - initial support for R's Sys.setlocale(), and encoding of CHARSXPs - in help files, a short title for sections (for the navigation bar) can be defined - the currently active window is now highlighted using a thin red border - fixed: changing the type of a column in the data editor was broken - fixed: quitting while a plugin was still active would sometimes crash rkward - new shortcuts for window navigation: next/previous window, activate console, activate command log, etc. - new functions rk.describe.alternative () and rk.print.literal () for use in plugins - new plugin: Phillips-Perron test - new plugin: Mood test - new plugins: CLT plots for most distributions - new plugins: variance tests (F test (var.test), Bartlett test, Fligner test) - new plugin: generic plot - new plugin: Add grid to plot - new plugin: pareto chart - new plugin: stem-and-leaf plot - make readline dialog store last size and position - new plugins: outlier tests (chisq.out.test, dixon.test, grubbs.test, outlier) - support R's mechanism for checking the C stack limits (only with R 2.3.x or greater, and not on all platforms) - new plugins: support of all tests from moments package - several new help pages - better error handling in PHP backend - fixed: depending on some buffer sizes, plugins could get stuck while generating code - fixed: plugin browser type="dir" would not work correctly - import SPSS and import CSV plugins gain option to open object for editing, automatically (checked by default) - warn when opening very large objects (with more than 250000 fields; this limit is configurable) - add a "copy" tag to facilitate writing plugins with both dialog and wizard interfaces - fixed: graph previews would stop working when the interface is switched from dialog to wizard or vice versa - new options for plugin dialogs: Configure whether code display is shown by default, and at what size --- Version 0.4.6 - Feb-15-2007 - make sure any LC_ALL environment setting will not be applied by SCIM plugin (if installed on the system) - fix crash after changing storage type of an object in the data editor - single line input fields in plugins no longer accept new-lines - support for calculating p-values in correlation matrix plugin - fixed: pressing F8 in the console would remove input focus from the console - pressing tab changes focus while in a single line text input field - fix several small problems with detached windows - fix a problem with keeping the list of objects up to date - improvements to spinbox: step size is adjusted dynamically, and no arbitrary limits in real mode - fixed problem with specifying y axis limits in several plugins - simplified CSV import plugin - new plugin: import SPSS files - new documentation pages: console - various improvements to existing distribution and distribution plot plugins - new plugins: distribution plots: beta, binomial, cauchy, exponential, gamma, geometric, hypergeometric, logistics, lognormal, negative binomail, tukey, uniform, weibull, wilcoxon - fixed: installing packages as root would not work, when $R_HOME is not defined - new plugin element to select name of an R object to save to - new plugin: Ansari-Bradley two-sample test - place internal objects .rk.rkreply and .rk.available.packages.cache into rkward package environment - support for preview functionality in graphing plugins - new plugin: barplot - new plugin: export contents of an X11 device to several different file formats - plugins can now be context sensitive (e.g. work on a particular x11 device) - new plugin: Wilcoxon Rank Sum test and Wilcoxon Exact Rank Sum test - new plugin: scatterplot matrix - new plugin: correlation matrix plot - safer destruction of R backend on quitting - fix compilation for the upcoming R 2.5.0 - show full error message for syntax errors (only if compiled with R 2.4.0 or newer) - more correct auto-printing of values for user commands (only if compiled with R 2.4.0 or newer) - more correct handling of user commands consisting of several statements (only if compiled with R 2.4.0 or newer) - add ability to search command history context sensitively - add possibility to use dropdown lists in plugins --- Version 0.4.5 - Jan-21-2007 - change shortcuts for Open/Save Workspace to Ctrl+Shift+O/S to avoid clash with Open/Save Script File - remove "Configure Packages" option from Workspace menu, as it is also in Settings menu - fixed: non-local workspaces would not be loaded - fixed: specifying a workspace to load on the command line would only work for full urls - new Console RMB actions: "copy selection cleaned" and "run selection" - added a basic help system, and some introductory help pages - added plugin for skewness and kurtosis - added several plugins for distribution analysis - added plugins for stripchart & density plot - enhancements to existing plot plugins - added refresh output and flush output as toolbar actions - removed the "output" menu; entries were moved to "Edit" and "View" - always show all top level menus - code generated for most plugins cleaned and simplified - new function rk.results () for use in plugins - fix: the output window would not refresh changed plot images (unless closed and reopened) - fix several minor issues as identified by the "krazy" source code checker - allow varslots to request objects of specified dimensionality and length - fixed: integer spinboxes with starting values greater than 1 would get unreasonable change steps - fix compilation with some versions of KDE / GCC - small improvements to syntax highlighting definition - in console, make cursor go to empty next line after pressing enter, before there is output (more like in the real console) - add "run selection" option to command log - script editor commands are piped through the console (by default; this is configurable) - assorted cleanups --- Version 0.4.2 - Dec-04-2006 - code generated by scatterplot plugin is simplified somewhat - add comment headers to the sections of commands produced by plugins - if a user command results in the output html file to be modified, auto-refresh output - add RMB menu to script editor windows - add options "clear" and "configure" in the console RMB menu, and the command log RMB menu - add option to save workplace layout not per workspace, but at the end of the session - add options ("printcmd") to settings - fix help menu for detached windows - R X11 device windows are now managed by rkward, with the following initial features: - R X11 device windows: attach to / detach from workplace (they start detached) - R X11 device windows: toggle between normal resize mode and (settable) fixed size with scrollbars - R X11 device windows: menu options to copy / print / duplicate / save / activate devices - fixed: selecting Window->Close in a detached window would only close the internal view, not the window - when detaching a window, give it a more reasonable size - do not open the same script url twice (instead the corresponding window is raised on the second attempt) - fixed: when closing a detached script editor window, you would not be asked to save changes (if any) - fixed: occasional crash when re-attaching a script editor window - new translations: Greek, Catalan - updated translations: German, French - added basic plot facility for ECDF (Empirical Cumulative Distribution Function) (menu plots) - added ptukey and qtukey (Studentized Range Distribution (Tukey)) (menu distributions) - spelling corrections in distributions menu - reorganized "Descriptive Statistics" plugin to use tabs for better usability - added constant for mad in descriptive statistics plugin - fix bug in rk.get.label () - in script editor, do not provide symbol name completion while in comments - properly support active bindings in globalenv () - if not started in a tty, spawn a konsole. R will go into non-interactive mode otherwise --- Version 0.4.1 - Nov-05-2006 - allow specification of title/subtitle in plot options plugin (currently used by boxplot, and histogram) - fix bug in beta probabilities plugin - fix (some?) compilation problems with KDE 3.2 - when packages have been newly installed, show them in the load / unload packages tab immediately - fix to plugin input lines sizing, and visibility of scrollbars - on startup, show window maximized if no size stored (i.e. very first startup) - prevent infinite recursion when parsing structure of environments - fix for compilation on 64bit architectures - remove misleading "About KDE" dialog, and replace report Bug dialog with correct information - don't crash when closing a detached window - function argument hinting in the console and script editor - as you type completion of R symbol names in the script editor - tab completion of R symbol names in the console - added R function rk.edit (x) to open object x for editing in rkward - fixed: an empty table created before the object list was updated (esp. at startup) would be thought to have been removed in the workspace - object data changed in the console (or by other means) is updated to the editor automatically, if the object is opened for editing - fixed: back / forward buttons would sometimes remain after closing a help window - fix some focus problems - provide close buttons in tab bar --- Version 0.4.0 - Oct-17-2006 - many new distribution plugins - all distribution plugins now use a free-text field, allowing you to enter a vector of probabilties / quantiles - another fix to cancelling during readline () calls - invalid values are stored in a separate attribute instead of changing the storage mode back and forth - storage mode for RKWard meta data was changed - RMB option to search help on objects from packages in object browser - show tooltip information on objects in object browser - do not crash on call to "browser ()" - the object browser is updated automatically when needed - allow some more configuration in object browser - include all package environments in object list - use more efficient data passing to synchronize object list - add (ugly) items for functions and lists to object browser - internal cleanups (partially to make porting to KDE4/Qt4 easier) - when saving/loading the workspace, save / restore all windows (not just data editors) - remember workspace url after save as - fix a long standing (but hard to trigger) crash while closing data editor window - fix "Open R Script File" filename ending filter - add mismatching brace detection to syntax highlighting - yet another crash on more than 100 rows bug fixed - RKWard should now be fully UTF-8 aware. All characters are passed to and from R reliably --- Version 0.3.7 - Sep-17-2006 - added Turkish translation - avoid lockups when cancelling a readline () - show output context (if any) when the backend asks for input via readline () - link against libRblas.so if it is found in the R libs dir (needed for some compiles of R 2.4.0) - remove whitespace from start and end of plugin generated commands and do not evaluate empty commands - do not raise the command log more than once for a given command producing continuous output - small improvements to command history in console - deal better with commands producing large amounts of output - small fixes in several plugins - package installation/update: semi-automate package installation in response to "require ()" calls - package installation/update: the online list of available packages is cached up to one hour (and only as long as the relevant options are unchanged) - package installation/update: give better progress indication - package installation/update: package dependencies are handled correctly when installating new packages - package installation/update: packages can be installed to custom library locations - fix spurious line breaks in output in command log and console - Improved syntax highlighting defintion including code folding - fix compilation with GCC 4.1 - don't crash on more than 100 rows of data in the editor (off by 2 bug in storage allocation) - correctly initialize the internal NaN representation (would sometimes be initialized to 0, resulting in 0s not to be shown in the editor) - engine status bar label ("R engine busy/idle") now changes background color according to state - honor DESTDIR setting while installing rkward R package, and add configure option --with-r-libdir - only link against -lRlapack, if that is available - commands producing lots of output would sometimes be impossible to interrupt. Fixed - show command output immediately in command log - remember location where R script/workspace files were last opened, and start file-selection dialogs there - sometimes the last level in the factor levels editor got lost. Fixed --- Version 0.3.6 - Apr-23-2006 - several fixes to the distributions plugins - remove debian dir from source distribution again - remove one level of menu nesting for save/load R Objects plugins - check for and handle some strange R parse errors that could crash rkward - make Ctrl+C copy work in the code window of plugins - use KDE standard icons in object lists (need to be replaced by customized icons in the long run) - don't try to show higher numeric precision than is actually available - fix bug in scatterplot plugin - remove configure options --with-r-share and --with-r-doc (obsoleted by improved wrapper script) - allow deletion of several rows at once in the data.frame editor and fix some bugs regarding deletion of rows - prevent R-Object listviews (Varselector, Workspace Browser) from growing excessively wide - make Ctrl+V work in the console - middle mouse pastes selection, not global clipboard in the console, as expected - clean up output of require (quietly=FALSE) - some fixes for R 2.3.0 - pressing Cancel in readline ("R backend requests information") dialog interrupts the command - process R X11 events while modal dialogs (such as "R backend requests information") are shown - allow empty input in readline ("R backend requests information") dialog - make Ctrl+C/copy work in output and help windows --- Version 0.3.5 - Apr-16-2006 - give back focus to the script editor after running line/selection/all - reworded exit dialog box - show info message, if retrieving context help fails - pressing Ctrl+C in the console resets a partial command, if any - added syntax highlighting in the console - configure: if not overriden, and $KDEDIR is not set, assume --prefix=`kde-config --prefix` instead of /usr/local/kde/ - remove some GUI clutter for Script File editor - rename "Command File" to "Script File" - rename "Command Stack" window to "Pending Jobs" - backspace or del clear cells in data.frame editor - reworked factor levels editor - in trailing rows/columns of the data.frame editor, change background color, when selected - explicitely set LC_NUMERIC to "C" at startup. R does not work correctly with other settings of LC_NUMERIC - many new plugins by Stefan Roediger - clean up R temporary files on shutdown - when switching between dialog and wizard interfaces, GUI settings are copied - fix crash with objects with quotes in their names - add options to show help-search and R help index to Help menu - complete rework of plugins code - plugins can embed other plugins - code display (for plugins) gets updated reliably - avoid leftover PHP processes if rkward crashes or gets killed - autodetection of R_HOME and related variables during configure - fix status bar - handle non-existing and non-local URLs (links) in help window - use a shell wrapper around rkward to do some setup just like R. This should fix a number of minor quirks - configure: use single configure option for location of R_HOME, and add check for libR.so - yet more code cleanups - keep main window caption up to date - update tab caption for command editor if filename changes (i.e. saved as) - indicate if a document in a command editor is modified (unsaved) --- Version 0.3.4 - Nov-08-2005 - assorted bugfixes - include debian-dir in source distribution - real time display of command output in the console - automatically scroll command log to the bottom when new lines are added - less verbose output in command log (removed "issuing command", etc.) - use KXMLGUI for placing plugins in the menu (mostly an internal change, but menu placement should remain sane, when active window changes, now) - help-, output-, and editor-views can be detached to separate windows - allow to bypass startup dialog - back/forward navigation in help pages - can print help pages and output - better handling of errors while installing packages - limit number of lines to display in console and command log (user setting) - remove menu clutter from help window, and output window - avoid adding incomplete (multi-line) Console commands to the Command Log - Settings->Command Log->show/raise window working again - allow loading/saving of command history (console commands) - add (meaningful) context menu for console - allow interrupting current command running in the console via Ctrl+C - add "Command stack" window for advanced control of R backend (cancel commands, pause chain, view stack) - modifiy rkward.desktop to always start rkward in a terminal. The backend sometimes behaves strangely, if this is not done. - use available.packages instead of CRAN.packages (deprecated in R 2.2.0) - fix installation of standard_plugins.pluginmap - allow configuration of many R options in Settings->R backend - updated French translation - make "up"-button work in R-backend repository settings - more code cleanups --- Version 0.3.3 - Oct-06-2005 - honor debug-level setting everywhere - reworked handling of output from R (no more file-sinks) - fix display of warning messages (behavior does not match plain R, yet, but is mostly sane) - option to change list of package repositories - option to archive downloaded packages - assorted bugfixes - provide context/function help for the console - output-window has been switched to KPart-infrastructure - command-editor has been switched to KPart-infrastructure completely - data-editor uses KPart-infrastructure (better integration) - override standard callbacks used by R for ReadConsole, ShowFiles, EditFile(s), ChooseFile, Suicide, CleanUp. No more reliance on stdin - some cleanups of dead code - plugins can now be placed in different menus - keep list of components/plugins and menu-hierarchy in (few) .pluginmap files instead of parsing directory structure - improved handling of tcltk windows - new icon - decrease default debug level - don't crash when objects change their type from vector to list/data.frame, etc. - graph-creation no longer relies on (removable) R objects (can graph after loading a workspace) --- Version 0.3.2 - Apr-27-2005 - overloaded require works properly with character.only=FALSE - several API documentation improvement - hidden objects get shown/hidden according to configuration setting - settings dialog honors KDE-button order - R's x11 windows now handle their events (x11-device is now usable) - fixed bug in the output (no update on empty output) - paste in the console is properly handled - r console and command log divorced - console can handle incomplete statements (allowing multi-line input) - fixed silly crash on incomplete statements - updated spanish translation - new plugin (graph) - reworked the interface to use kparts properly --- Version 0.3.1 - Mar-26-2005 - added the possibility to unable widget in plugins. - added a new plugin (basic statistics) - added icons in the object browser - using IDEAI dock mode style - new, console-like widget to enter commands manually. - added a class to show html help in an mdi child - added a new dock to search R help - many changes in labels - fixed: bug that prevented RKWard to build on some systems - added R functions to show graphs in the html output and to print objects (using E. Lecoutre's R2HTML) - use a KHTML part to show output (instead of the qt widget) --- Version 0.3.0 - Nov-12-2004 - added french and italian translations - added toolbars and some icons - some small i18n fixes - rework of user interface (now using KMDI and IDEAl mode) - compilation fix for R 2.0 - added basic per variable formatting options in the data editor (alignment, precision) - fixed: cell last edited did not react to single mouse click - fixed: switched to line below after a new row was automatically added - fixed: cursor right did not move to next cell when editing last (active) column - while editing, tab-key moves to next cell --- Version 0.2.9 - Sep-22-2004 - use KDialog::marginHint () and KDialog::spacingHint () in plugins - fixed a crash in the formula widget - converted plugin element to QWidgets (in preparation for more extensive rework of plugin elements) - almost complete rework of data editor - added edit support for factors - added support for editing factor levels - data editor stores data more efficiently - renaming columns in a data.frame does not change their position in the frame - recursively remove children of removed objects (fixes one of probably many memory leaks) - wait for backend-thread to terminate on exit. Avoids crashes when closing RKWard - do not crash if loading the "rkward" R package fails, but rather display a nice error-message --- Version 0.2.8 - Sep-09-2004 - override for require () to show install-packages dialog, if required package is not installed. - Dialog to load/unload packages, update and install packages from CRAN - added capability to cancel commands (not properly integrated in the GUI, yet) - basic name checking for objects added or renamed by the user - remove uneccessary blank are below menu in R-Console window - fix R process busy/idle display - show error message if loading workspace fails - do not ask for save, if workspace is empty - results of user-commands get printed if not invisible (i.e. just like in a regular R session) - provide at least basic feedback on syntax errors - added communication channel from R-backend to RKWard. Initial features: - checking for errors setting up the connection - simple rk.sync for synchronisation of objects modified in the R workspace - rk.get.tempfile.name for generation of a suitable temporary file (e.g. for storing images) - allows for in-place execution of commands or scheduling of commands in the regular stack - auto addition of rows/columns when typing on last row/column - allow deletion of rows without losing meta-data --- Version 0.2.7 - Sep-02-2004 - several compilation fixes for KDE/Qt < 3.2.x (and maybe some new ones were introduced?) - slight reorganization of menus - added menu option to close all editor windows - some improvements in the editing behavior for the table. Some quirks still present - renamed windows - fixed some typos - set initial minimum sizes for object browser and object viewer windows - don't show all windows on startup - ask whether to save current workspace before loading a new one - added command-line option to set, which components to show debug-messages for - added option(s) to show/raise watch-window when new commands get displayed - formula-widget handles multiple table situation correctly - RKVarselector and RKObjectBrowser use a common base class for the list view - RKVarselector and dependent widgets get updated when objects get added/removed/modified - prevent conversion to factors when creating data.frames for now - variables can be added/removed correctly in the data.frame editor. Those changes are propagated to the RObjectBrowser automatically - synchronisation from the GUI to the R-workspace is done immediately - added ability to spawn separate command-editor window(s) with load/save/print/etc. - command-editor part in the watch-window keeps keyboard focus (most of the time) --- Version 0.2.6a - Aug-30-2004 - synchronize edited objects before "View"ing them - fix small typo - quick-and-dirty fix for problem with objects in a new table (e.g. "my.data") never getting synced --- Version 0.2.6 - Aug-29-2004 - added error-handling to workspace saving - ask whether to save workspace on application quit - added menu-entries to clear output-window and watch-log - don't duplicate menu-entries when plugins get re-scanned - place "Analyse"-menu left of help-menu - converted plugins to rely entirely on R for formatting, i.e. the printout ()-section contains pure R-code only - wizard-interface is set as default for plugins - added access to kate-config dialog in the command-editor part of the interface watch - added configuration settings for which types of commands to show in the interface watch - added a nice startup-dialog instead of creating an emtpy table unconditionally - limit size of upper-half in the data.frame editor - added convenience R-library: used to streamline communication with R - fix against data being synced over and over again --- Version 0.2.5 - Aug-24-2004 --- - added simple viewer for R-objects - added simple browser for objects in the R-workspace - allow deletion of columns/objects (finally) - allow editing and using several objects/tables - added command-line parameter "debug-level" - interpret command-line parameter "file" - save and restore size of the main window correctly - use internal representation of object-tree in the R-workspace - store meta-information (labels, etc.) as R-attributes - keep track of whether the windows (watch, output) are open - new method of access to objects in R: getIntVector - use some "global" static pointers instead of passing them around (e.g. for the r-interface) - reorganized sources: now using subdirectories for most components --- Version 0.2.2 - Aug-15-2004 --- - added an improved kate syntax-highlighting definition for R - output-formatting is done in R instead of PHP - added a formula widget for use in plugins (not entirely finished, yet) - fixed some small compilation problems - added spinbox widget for use in plugins - use coloring for "unsatisfied" plugin widgets instead of the "Problems" display - added support for wizard-like plugins - same plugin can be opened several times at once - use katepart for plugin code view, too --- Version 0.2.1 - Aug-08-2004 --- - added "don't show again" setting to initial warning - added correlation matrix plugin - ask for R_HOME-setting if not availalbe at startup - allow direct (read) access of vectors in R - support for selection of multiple variables at once - use a katepart as the command-editor (provides basic syntax-highlighting) - plugins can use a tabbook-layout - display status of R-process in the statusbar - R-backend allows chains of commands that are guaranteed to be run without other intermitting commands - run R in a separate thread --- Version 0.2.0 - Aug-01-2004 --- - Use a PHP-backend for the plugins - Run R embedded (currently synchronous) - Some changes in plugin-creation - Use pretty HTML-output - got rid of ui-files - added descriptive statistics plugin - lots of small changes I didn't document properly --- Version 0.1.0 - Nov-19-2002 --- - Initial features: - A simple backend-interface communicating with R via stdin/stdout - Asynchronous command stack - A simple window for watching communication with R - Ability to issue commands manually - Editor window including meta information on the variables - Copy-and-Paste with some quirks - highlighting of invalid data - load/save of R-workspace (load only works for RKWard data) - Automatic generation of menu-structure and plugin-dialogs from XML-files - Supported plugin widgets: textfield, variable-selector, variable-slot, radiobuttons - independent samples t-test plugin rkward-0.6.1/README0000644000175000017500000000070312124345417013243 0ustar thomasthomasImportant note ================== RKward will not function correctly unless installed properly. In particular, you will not see some important menus otherwise. Please see INSTALL for details. Getting help / getting involved ================== For contact information, please refer to the rkward website: http://rkward.sourceforge.net You may also post all sorts of questions to the main mailing list: rkward-devel AT lists DOT sourceforge DOT net rkward-0.6.1/doc/0000755000175000017500000000000012124351133013120 5ustar thomasthomasrkward-0.6.1/doc/CMakeLists.txt0000644000175000017500000000007312124345420015662 0ustar thomasthomasADD_SUBDIRECTORY (rkward) ADD_SUBDIRECTORY (rkwardplugins) rkward-0.6.1/doc/rkwardplugins/0000755000175000017500000000000012124345420016016 5ustar thomasthomasrkward-0.6.1/doc/rkwardplugins/CMakeLists.txt0000644000175000017500000000062312124345420020557 0ustar thomasthomas# NOTE: KDE4_CREATE_HANDBOOK does not support multiple docbooks inside one directory. That's why this is separate. KDE4_CREATE_HANDBOOK (index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en) ADD_CUSTOM_TARGET (webdocs COMMAND meinproc4 --stylesheet ${DATA_INSTALL_DIR}/ksgmltools2/customization/kde-web.xsl ${CMAKE_CURRENT_SOURCE_DIR}/index.docbook WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) rkward-0.6.1/doc/rkwardplugins/t_test_plugin_example.png0000644000175000017500000016256112124345420023132 0ustar thomasthomasPNG  IHDRT`sBITO pHYs:duhtEXtFensterklasserkward7U>tEXtTitelTwo Variable t-Test`x] IDATxwXGg!MtQAPa7k&Q{lbOcK,i^[cA+ѯyxvggeH{))b@ @ t=$4Tvo8ٳ@fDk>&0&H |4a2N`nðOuwsg0@M c};WwD٦]%Wzo2]ʫ{vO2=?ÄBAQqq``7΁gO*ATtA am!6]ǼI~O3] d{Fqtl$$/.ED%Yq!ıQ'ѣGMl/ X,mذa i{S~+%Eu999eggS*Z[[K*XYY 3ڿSoTx.;s]t;gNvvݩkS뚚nݺ51>nj ꟣Tk@p?.=k΅ҟFF|$ÛLli"Jqyc& _~݌JD͙3oנc=sv۷ߏEHA˙Ycƌ{7ҥvϑ";JpԦ6>Zlc&Bqqqׯ_o֑욚[aayJRJex|O>J$b1** ([8pdaw---}_a Em쒐qOۧ$' {环oK._~ޏ']|E^rJ@/:uڸa79rÆ =tת]aM^|@#>~%i•!ĒIk]Q@Ҩ`!JLF6XuX0h ͦ͛mf͞)+?P(iO :6 B.\}G_Q.\8zĉ5VHmMCBKvlnF$ s0|7_|0)&7Ol[vYwg!\nIIIV<Լr߾{}W>BD$JLjD" Afax[7oaܺuk)._ufx~ֶy%HQtI.\t_|)J1_/G`%ZeJA!99I~1o޼;w(Qu=xL۶^xPku:GGE]rQEX`_#ɺ Wj Ē&JS%D~p]+Ql%$ڟ~:٬tרFiIgW}F 64AJiMC%Z 'TVi̱mm|:A 9{V$kE'On_R iXaÆw\, 4Q1[ibnuʫDžLz~Knnn<,+Wooo++W*KP(t: H(;ŤhEE%NPw\2ݷo>}gϞxS$+oX2z̘ :!g^Y^F(@3UD%U\w@Oɣ(;6uu5oJʊҚJm!E޾)9EK +GWӨ蛒|kP@[9;_kh:LL![P^+}sޞE '@Ȩ+,, mrs&ݻR&\zz?}tǎӷo~^ΝеkW@uu=z󓥥Ç]~t \]]oݎU%rOsrr(Jljff?9rUa۷o9{NޒĄȕNY@ΧND$)K7nlfFׂ #""~gj$22 1̖>>DyHF@DD#!ı!\PrKVV,8RuBPŋT eҟZ[vhnKWeWO8>s2RiqCDr_ uvr yi4:M[@exzmp;KKKYFcX<O"P( :A&oo_\*fet:AEekuɟ*dxk*`0: RA^ZK*Aeil6YH$U5FFXM. }QJrql.DLQ*U)DRզwT^)--}bmmP *** uvpphN !MC($7"IĊn_ƸBPT"U;ʄB=Ųe34piD Ӄ <=YBBp#^ƈB 0 Jb(JPL&NRl H|rmz$f#P#Bc ?[Ah4>MG}ކK|YGL+ke %g^e5|5]ql%l^WX㓇NJUKo;BbF>@BKd 7Sw}SqR @b<0}!8FwX-zr*n[]sdSwq<)ZȩB*>8EQDot{ %0#Jgi@]#B v;BBF$FwK 02.XsU HvA^E0H$K$VVVc "N1 cۢ0 J;UUF;F]}, |\7EB *%o@6\4b_{4Z6ԌPALt+unQna5nYX[_j}b1suskQE *ѱA:.7w͖  ~KW 46QrM;R*E6݀&wlæ$<zjDBŀ7cY[[f,HTQQdS?PYUQ"Q`&HZn{;;;*|?UUA=Co[֊b 77ښ V{wP~,4 ڮ_/bqqqN+A\7f͜),Ν6 J!pP7.))/G=<<0 B v y261֫;H -v<И懦BԹC>x ϯJU[-Uzz'ǎGrss f^СO9Q6^,w7 |a`89;# 믿৷ntFBᶭ[g+grg|}sʒџvqϟUUU ڥs.?3F[m1cKgΘeGLrOt_E5diZޑ^0-ct{0UK/J $y$|He Yo~<^݃5lڎNvz,NgP(mۊD"KKK*h c:yTt:+NWTT|6iԩ֮}޽Uuܜ]s87_?dȐ]v?م(UI}z?EArƄK.-^`mm #Ǵ|;o#cccOÀ aBU7%VV ׎YY~hW!KB˴4'';G>fu5V ~Y]`;i i\ooozyyCBBJKKq_G9棻PM@pp]`ׯ0[#*[,ڵmɓ~ӧO۷k|EQB`(JP%c@Ayu-[ݿw߮_cvm7 HJ(n C#WC4m4P.v5/1lIc QMD`dE(8qcف 6LS9;;!bgg׷oo_tܹs<==+Wdffzzz\RAȪUm6~8ハq͚6mjjjΞ= \pN>2F3k׮[tIPPwww VO7~eii]w]V2K//cǏttt|Qn9={oo'S'Aunee|rxD P)"G(CKCb4>u&嗐Á9Q\T*[nmm5E3Br8ef%I@>nmDa{x<iL=<4˗[ ( IDAT:sf~hf+8j?u? { p!kBrMKLInD% ƢU+:';7y4K --->۷B۷k2>iLN:M&|ZϸX aBԄLh@sj[PJ[e]\<<y.qkuuub؈f]bꮒQN㻋)_B`Bl<6J -G JFϥ *wUA !-BF5a: @=6 Z=.-%#DT*M6EEEto]nd^90  TZھ{_LhE@  -GB_DR4DҪU+.kmmaS]uj xٵ/B*_KA* a|Oy|ӴEq}o#!PQ}BB6 A0EE Z}!JMBzQe5BH `.(*HZfđA`N@ &҇Y q[!) A)"H"Xؘ! \5q0 iqk}]FAgҒ@pF)^,|wT*A#Xf tsaA5qp4 B^!z%|>Ȑ!|>_U5hs\P?i>Z6ehUP9ᣪT*AA@1L*nݺJ]qgd̛7gϠ^K-U4^BT63SN 2DG1QiY$GGG0PRxxM"H[hzPZZP(׈%rn9PT/0eXrD\z_c~&n1rdbRƎ}p8* ~][7ixw2u-&IygϞq=zOǎuqv9{ Q Qhn}zA EQ>U o_Ϸg0mڴ pٳgm󲳳ҫ* wѿ_NRcx0|Ĉ$H2|pҰCv=v(~:}>|}K QH ?n\.OZVVOw۷'oܸẍ#>yҸ@ B~ҥ=>F;۷XbŰCbbv#ꢣG NHL?`Çҫc/v[n%Ńvڵm^J .nǎ}||K癳8&_zyC US:t~Fmܰ2rգܱ딑u)B 1Dw>~hر;t^pYVVfޏF=7Wn,))ٳ{eK7))ʕK.XYY+WyڵҩS'kJ?t셋| ȋ/n߶RZ[[vS2000sAjcsQa'~+f_}5hPYXP@ !AfF}yauuu2*xiFqqqqY*11tejJRggg E]'G'%&=zpԨQxMr~jHYZZJ(.*mvsw/(Ǐ|`iǎ3{Ѡ%@GChڶm֮Y;tVm7}W>>\V95rT[#c9Ӧ͜13+3@--..>udhh_~11;SS <z "b <wVkc?3h̬ "Wvw5sfϠ˖-œ͙;w|>_Օ+#mll>4KyskV-T_M,%?0/kOOO6+2f'*522Ru~5xժAWZbsڵnݴ/FB~TNx5{Mxoݎ}_|_G?'$;A(n-SyD 6(JPU6 suuu3gN||u;w{1 ,?AlCHB|\B2HֻwMM 9 G>g\^.\8]n)mb:|>:YFϞAgϞsww/((0aÇ;vn322B00kzz|}>*Kܳ?zHq\ hei+wNS\*H$HݧD, Ѐ &}x77@@@W/{xx5:5Eѻwomm믿:wwRVA4yRb&oii/?hdtʕwQz~H3CdYL&S*fffR͛7oڷoJ=u`vA 0Xܹs"#W߹W[[$<&''@>}d߾{ƯfffDFFcm۶OW^m,ׯ{w@ 2hPF'>tPIIqZٳڟW^H@~Ĥ &A AoDNX}DGo֭СN<ϟ?oڴ<^ڵ  (..Yv5~u]X|ժkM޹sŋx }!nǎ9 eeeKٳm۶ۃkUw?Wݻw߼y̙۷ox7oJݾUUU[n=ua !}B7wwH$uE|cXjd n_I{>?!4 (,(p}eegXYBQ15 *;;ۻ|Aa "ыC ~^QvcTm9,-?Nvk}2^("QbY46mkk@~{7bv @ QO00QvZ^m K4Óma΋0A 1]Tu`R(sss''gFmiid2)U+`ݾM[^^W[ 0 >_% ,6۷S'[[ۦ`-k fX, ]C篂}fmc~YҢ~߹ >Ԑ@跖 |kWXTd2h1e|~)]PPK11 <'2oHaa[at F߮%Q@ڔ?-,,5 4',,,PUVXDHA9%<*n!he1@Z"MYN6? L&Sb)( q<ͮ<p,AyÎ Y(7%4OS hR]Q^l$C*KLȲWA{ la=A"@  ڗ&1#~CsC1DUAR}H3z2ZTZ\\)Qaa)ĦhO< Aq%ݮ"_oư &)aR'kjq%V(j85"Z$ W?ERwm,QHby:ARU/׼@ԋ!!Ge1u !E^P~OI?`,RGp4@ (?)o?/}4O?;Z 3i/ͺ_bX$ښ5NPQ9JA0H,J$6 Si4F 09h@Ҋĉ\]] B<9rƍڵ۱crWW{z |Û'%Lw.Uo鿕yۧk'9Oݽ<‚F#2Q ɤh\u$db1KDb@]v*✟_4T7uԟڵfϞU]]|iaݻw;~~:qℐ`NÇ۳gϨQ#;w9rG\.wΜAA=ϟcJ1sʕ7n^zuikf)`„]O^VVWyRC90q℠AAAK,“IaX6r<:T*jAmhl:@ Al6C:篪N,TCRXhggWUUdȏ(Xÿ KRKg<>[OacG\vͯSG޿_! ޙXEϬ3\Աch<>G哊 ~:=<..ܹsBpӦMx2>& *f^cefͶdeՔ   @r'Hr6JQ 5BeES++*Y,[.H5} 4j'=zرc|K? Ɨ"--- Ƅ ڵkd2ǍlK.Ke-{mظQ"oܸy׮]YYYd|3gLIIcsZ>AܺusĈx$vww7o^\\c'gO_[ֲKIQG~>F T_QcP ]cwb1<= K4(,Ɣ"~4+$5{o޺%ټy} ͙LT3$v̬̬gO6yaT*u˖-{d_uptDQTÓ"*(-Fl/׃p߼+ZZmc{U{nd" :ĔRUX(n߾#;'ype!Nwǿ[aWXB#WFtcG t۽+&55U # :22Z‡D(jeeueK'+ѺW{1*WO A^jϞ8sHH/.}wÊH圯Ln߮iS322drB{"#۴i*C7FEzFǖq ᣼ocGo0\9|/ ?\|n޽K.eboߎO/(t@ Fa\**d5kϟ;O6lrt4TSSjoY#̖± (p>{ᅴ ˜;ߥsɓ{{ 'pܹsf @ԽRBPrb8#=w>*'f@ ?y{)c|;fv!D'_]d&+\Tx` %%sLY+@Z7778t{ָ떙9z':;s󦧧W^^!s_}e]]iӇ /-+Cڵz=@(zyzyݑ[?&;'pxZ3+Ici`>@wǠѭ@+s{899 dM#hN9s<)x BQ4ŒM0433Ųs.X(sV^uot1f%%% ܃*2@ & 6|¢WxifE'O@8*48"+AW.^.MII3ftqq1cFrRkׯ-^[n`^]v%$$ɒ-_[`e Më)i*+Hugl`W^pdffMhڨe(U"J{"7zigXǏ슉ݧޯO{~***ڳgOaaa׭[3<5>.N$j4hPtt'OxY>/N<-/0B'LCu`@va‚3fEF jX^J ߽{O{xw\rţG߿{0`}F0 Jٱ(@R'''u2o?6wY/dffeff=xPSB LujL^wB 1+/ if<&**O⢢K].Zлcŋ߰AlEmf͞M'e͝G^z^m۶UkgLLRbR@@@@Pwk0decc-HڴqVJ\bcc{W={z ĉRRRD"=,,ȑo޼9|Ph. ڸq۷obqqq1)2oNNNppҥK_Lcwޥ=8N |׷o332z4O *?-NOk桨#+uW-REլg8Sz! Dvvv rAZ:1>^aJ}s.uU"sss=<<Μ9 }M'lٲϞ=5p֭bbvr8ϟ?8q~Z弓&MG ޺uK||9 IDAT|mmɓ' >Ꮲs$b1@ J4:]+(w^m SUHPTƌ[l`Ѻ,bX,:]jg:wIҢb.<44BpB0L/?JJ 9)k3p($--3v]}i4y˧^T2(2_jJFuRCBB$WYׅ^˧=3=8X,* 3׮R鰣!9*QT[[[.[: 5o޼flmm'˵>tA:qaH%[L Ϯ*#Džh5<2@a@ 6ӫ^JreU:VN◭`doݹcGh"InJ@ `M-dYJu@HͰ.mTr~u]T[i.-tF&hAPlll۴qegؖL&S<&)}}2,ab^=MB{ }Au@Ч@P)ˉjo&A 7FA4 A)j @H Ba,KBx%-t޷nA| UjŐlCCOѫ((BA0:!kA"i awܖ޹OJByg_ Y쁠97Lj`^}$SV>!Z @ bB ?BaK__^]?>}xa䒅VW&HXfXnV04e`UAmaFAFϥf >*;#cY[vlS2RqĞ,3,A3+gg}kSV>r'zh #1wSczK@ +qjE})9o_Ϝf}ұC{Ay߿?Bҥˋ/4ݱico-1{_L])rƔ/dӐ@ i @0c(p珘R7T9YZIHHK)+w_UQ6{)Wndz-,:w˼~[|Nnm@ 1`˟`OdǍ,M=뇅dAAA nݾjkz|P)߽m>ߘѻݻ[d .r` @O0LӢ Q)9={6pww"r33?8z$ 툡ߞ"%Jϵm %Y$))V@ CO1 733 (TUTy¤h^gU|9!}C?]dyA]=бfΦfˮ cO3~|LFhN@ ]+Q ///<< Jy<^ii麨gͦ5-@ i >.g._PHt#@ ,msb{|ͺ8u}غ@ i -`ic'a, k|]GE1 Cardxƶ@ ,|гA1vn3+: SVQJǏ;{p `R/F_i`H`ZS;{z|Zb`ٻw@ AIynRxܤɲS+++KKKKKKYL$R1L4O]gEq4\"&dbnQ~@? `=C.$0S/ت9O!%5ïrhfPJRq&4EvfƲs kʥʶ)`HSUV#FiUuK{4id>BBv2n/^&Mҥd~0@V1@EWcLocY,T*UDq9B \_{qi6b_R%sKԤ/&oS(ۦM5-N?QYY9)S| غeP 8}欭mϠH{G ?ܰa3gQ;cv{N2=#P@Z0)g|᪆`***T8 !kfL䖗{O6߇Cþ=]x #1wSU)ֺ2,.VaADzˁ Dr;|b؇Sݦ!: p&8 BJb|lc]S]ع%}/6lف';xϪS5 rR}~9Љ\8uS)8[6=qJFǴJio׹T^sKɋ׎oIޱico-1{_Lb|uzWAذzAok:gצ[&LL[wn]HRGT&]LHÇ_xa߾ J2UZIs&=Cr.i+kk:ON\bI,1)>OpnjzX.WV, qڶ37g; 5~UdEV 3>F ?ׯ]Kf.2Sgrvq5H~x/eڌl ]D{ܵ?ݻV,ULɣlUbܝ{-,?)秧kH={.Y;999D,@ u"ɦ> Bќð?]k޽4(dJRaf&H4HbD"FJ89+@d*mwPNY*eU 6u[JQ{GG-4-.\pBDF\nQ+'ڵk=<<,/_bݺ:A^4寍dHXes@P'T%&itH^JFlZXՐаG}Sr^X \E^U3o?3eé)ǏOI7c*++iolѣ >\] 'O=y…#FcxvӧϠ@ )/,T*ŝ?.}ʢ呛֭fُ*râ93]dyA]חnPf!y)-Zimc3},]0Gx'޾yhyFɫr'C4B*!.c 5sͶiÒ5ٙa=׭\{~削ӧĉ^~5u4c@ HB|\NN7X'4p^>~X϶`ۦ.],ojnĨ1?O@EvfH$z|aAuQM"fv!<2IsB,Z={6Fn-I1*uԌQ3c>a Q @$eR$>3mA!ń@ a0~޾ ^o_(*'Ak}@ǑO R/cI@ r f[YI_JEQ ׶0_[`2?y˜\d2g8@l) b]muTE+Z\uhպlvZDZUn ̻{88ca&3I>yixR{_ߒS~3h*B> CR4hii٤eФT*HԜ'!Ԋ0/,-}ҒM>^4FpK&;:soj5F(TR0 Mn xjEu͢eڶy<~>V{XSWt3>߿ mu |܊2OHeB}?zwQrZn߾Ch^.BD>i+zti,b'KԐԚGb²Qot{Gl*Ҕ2*/O9a~eҚO1Oxe[WZZRfkj͙5BmߖQz#{Q\\gT?ؚ@{I޸s+K '89h-J/w>x_@ ([68~c.d_p)kUTXx^.~"MN.nn.nn`*_zeYWXy{SUA+INeN.H<8;7rrY{?veek-96 ||KVRI`PZS߮^VU62jDCriJ,K;;;S:n߾{]7)߆[7%rp<׷!t-˻iJumYdE|G͙/W.[nĄe^*1vX6[svUa# KBm5Q,NX9$A8xďBχ5[i;3&?)LMI>zIleU^V~IXXX|w% w֯ZP}c.[Zad2;=S"L&/q!бдL&3%򬬂>}lB6.dΝ7wY $ ;ՋQlH;1?SI=?@kׅ)uY`kg~CNOg?.<׏Nlݸ~ќOo2tdUv"d'egoNZ660lԛ[6$!)Iw;1 YdI_Y{XiRi*:~ .!tdǎNfd^L=T*ssC@+}!L-3r>,//;^QU0e%';dsgϚXz~R&V!#vm,oh>X@~e~~eT! 6യk"un B5Œ sGhOҚQ6P*Zp^Vfzxْ?P(b{ۓ$}fs?|uŒ+*ʃCvfboJ1{ފE%а_~}Hof̞d_i:;Nx^<3qthU޶]!$-LD{VXz엟t)k3<TC;Ӹ)?5i^J?ݿwgeHDVeiTb+u[z>Hfh|' J$?ji)NJ:ZTEÇ;JFSdFG;88MJ  㵱_#"ʚǻqFkK $ʄuL\nt( nR!7VCǴm9~Jlc%*z ^8 G|T:1DV R,!BVm\#!iշ}CҪC4@#86ϜoԞJXEOz):>A:C1rvsyaB&>k1L2ۥK@S-BA=2l[νwC;Q?ޝ;شD0w7MZ-W(|}}jZxw0Pk(7V+zzMJB!;njn5ZNS $ M6e_ExzyJ-Pj}GG͡:yud7s3OOd_~Ldb?#ITɓۏ9_4 y}"F|~eE׀$:y]O/wzc/(x4aʴOg4OpM)R ,,,,,\ܹZx9{o䰇~s-e3(nj=ZƝ[Y]X< TVXZ+++o?*Vvv^^VVV͖)BȌ ~5{w RTTDŨׂn޼^uacvkRdSu X )ɧR/J 1aYJLľ];$e#ٵm߸m{O.bKKJ&X|Ɋ FiJN;`wZr޼o+:aB6 q7]TߘٟnھO:9Ee+mU?&"IR(tusUUL$ E=V3j!w&(}ɴIw< IDAT Xb++Մ)ƿhgoNp|oG]8gsǰ+C~ ~0tĕKٽzc kWdUU ޲!q d\0LTr.b~0\L/  &}vN<4VO5փ!t>0!]~LGX,P$[ݵ! M妕2T*={ 􉎍޸}6A=ѢvvvMU6eb=-5ڸ|.JjJ+a?wH$(}mai kݪ  V=fbm){wn?O6 GywWZ@;cSۦK])M|8iܙq 1~RSTP@խ8w L|!fx~}￟ضmuk5^zkEEUV/YlMT6ZH PHGn3kW++*vob1?O5\~&ƒes[sڬi7!)). N.Q"EQE<ܲaZEo9ܾUk <ǧaޚrRzd!o !4t*pvq=7+,ӌ3Ϝ9̽^^ӧǞ>}}$0%4Z~[|۷:w`*̜fLXQQ$7֔Ofdۇ=lyY^>My-?_ "vCc~Fw{cpSEo9?4%n?1o E,wxUSNJWhIdq籁;~A2:_=-(2Gs/\]]n[z䤰0JKReHL7wn\1qKƏWPBƩժts!ptrJ>s&(8XsZ[;[xxYag**#=_dUeMQ?[2uΜT*6-6((0//woỀ/a_llHl|tPp !Bt7RfΟ?/!!a„!!!LAtk=x|A]꠻9h`Z*ZV(%ͷB!ϯIצMaaw ,2Y=}t"Q6mfQJϏ[ BIz{{WVTN%B,Z]QQz=G{ϥeV 揟c͎w0H!54[5O)]֧o׎I~>ֈk)J*`B8Zmkg'JLEDv Ivv€@WW\Cܼ̅B!IlwyZǶj]ۭ~ZWsJ*)_+m‹';>gFJ_eee>:'իqMF׈kl~`d([ŧJKy ={xW7g/)%vlҲ,kF64wxGB!}[O;771Ǖ< Ŏ7sqO1f7rG?q 9do^5l7{@T:sf2ViG|.1 ^ճS78Qo)vآӫ1m ٲaWVTƴ𬬨͉+!1Y4r_ad{-'=MZgT*uh}gWgN,/מ^oUu}!jaȦyd$= >׎NaB.zJĄN.~>Xf矾pyD.ƥvS_{c[?~{p庍4|۫.IyY9׷}vplpf$/])>rI7gRW.3~@!G};;[pV:t=oޓ  ~֭E+Vksp.LQaWRzg(Y#yػqYΗDm޸fKSTu}!jH`{[:~n[ﻎVDVV^L;| p>eImy|0~)l``p g=b¾Pڻs[I4vf|'{oCvq 3jISC-L&{q 2y,*wLBW3&5?Ssvuk& 8k7m{g̸ΌĆ$iQHDtXXZrd WuݴUsn^󌟂ud񬪪#\.rBԥxvR$޸]޳ו˗rs_q&?ϻᑆ5oN]9Ykw}8iJGg8jC_WwįjiW )#%EDnFNuPDcd$n#ߵm Ɇy9{wnyVVffNq qso{1RyhbQl<rwp\=v`{Jr>&>u2,_lcbk"VOݴn͸@.8\,J_ xb"xH'؏{ݧ̩=7{7YCy8m-NѤuZ~g4?#CjޚRz~g"iLX$EBaK?b~1dTXWCM`@OoշPtk/;;+clȌr>ꐼ籁bpX4?&&5sgN.3&O|wEs?e|2k'Sw1׼.]bcC;t2=qNhWy<^\IH^%n=/#?3Ԟ^oϜ<#KC_Jq塯IH^A!#"lXD8gߙ E, E[SZOĠyxZ>uԨQ#;u8bp]#F ܹӰa?6l֬Fԛ oR)#"§Oe(S݈ХK#߼y yݻ+/Q#"}鬲O$>{n$PVH5ebY/ MQ*TJ%MQo䤰PBy/PRe{9Iaq+;= oТ{zݹqEkT!.mqZ u8B8Z5WBppPzz_.888?࠿daaqcǎÏ0gΜYf:88ѝKP7 ̙3|V6b;wo?~X.~q7n0abppH$ĵ"8!!Bˏ?ef\7#Ql]%:¯n?.uCwyJ8;;[>3+@wqd"M>p3c?@ͽ-AB@boׯ fmc#G^~=tfW_yzy&7sG=;LTf1 zƎ;q䖭[وb++ՔS{]&omv'L5rүGBMC7\"IV+T*???ZR㓞^^n#3OS`B)caa=͛?`}Nb(X,V*k\]\ ;ta~:q_25eW:]vU,yzzjʥWF2{KT7S݈F >O~U??m۶Y=DwTԗ_8qΝ;z]L,6Ո̋bihXRQUORDb&D&5 D+XLNYm+1"ȹ2DR]ӿ>ŋ͛PرcG|Yff?5ϛ7w޽zzyyY[[k}dsY3DҡC>[z'UTT!F|N1/kҥo֭+Ӝ='>>_ҥKB*cobB-Uz4՚g4?nq'5UAMN Q*?">ښiG~O U)eW !Tg*ڥ|Z4OO/R?߽{g%_Lِഴ/ 2 ;{3|8_t>T*UFzZ1GwUU+ =rX""z9eY3 y2-&ZEBMi+^ګ7 BI]+lٲ7n8::kf)K/([m޼,Jm=>~w2D=#.YV GoݣskcgNmwSXfsgUqSsVB=fw{j*Ng0zZZySh ;uVS=AWW!L,>}~Z`=Q'+ViC-9ǶeT7w@4DvMxqlB;]!sc/DZǰoOc7o JΝ_Q_rCBB233؈J9sdd2 ݾ}ۙоl <$?cǎc?LO(*x{{<[AA᧟ξtr@'eLh=($W0e 㚀~IRT,rtr:t^}lؐҒoc5ۦ$tFsMlCNlk7Y "+54wX:a{I1]Kk/ B2C6n֛ Ydw]Šwr۶SNxⒷz/_*--efɒA6}5|b!?Fg;7 hFuaXiq1`w{u ỏ ?NW{t{5n\j}#;wk?tHM {yP^? M0{X\4C-d|=w  1F7[EEc>.d8'+:ƭGii"{Ekzq`tNNDP)5E?|} %7l߼aC*'bJexKi f/X;i\qIVVu_Wxk+=On~~ZԞht*!T01,ֹa Zv}rY/O6$%̙;v93g4ܩ;w~??Ȉqoa.^'͍g>K/:lD•N;9:Ü?:VV]tNJoEiLb~׺[DIь`\*.|M}:c6_)44D7vڶk1qjaƍ㏧vuue4z$ҥ$I6d;uԕKV3}|M9)õ:o2콤]6l d!;q䱣c.[wN06/0dknqI)CGlX^|u%Ο/=['dUU&Ž[{G5MKJN)1aՆ__=nRf<)HUTPp] }WH:u7Fϡ%} %k(=;VVO>ȉdc6bkNoU@HGx-i~jv!dZIٺuY3\V?׿?%#332"nilHLLS}\9*…۵k׽{7a:wpђ~}s-Xg_~X IRR$BHQ j5 _s²gt̼YE;oƤ~y| C:^}:8سЉh֕YkwF32O{7vq!VPQQ6DF3^K =!(f<{ϳXw@q\ IDATk/\bI^_ֹ̚O37f};NUS̋?7RfCy)?DT}yuO5>##M^:eW_Md}Ok6BfDdqT$PjҬ|BM yFMN Q(?JGt}VЦXޭVyRX S-Z>GU)t_ 9v>V~~qU)-.6wB-? ZSZm\|k%rsrJˢJ6 7<3zc"6vm۵\ۗHOCkZ BJ >MVBMUCSe@=x<}6:tdI:k i=*ᅱmhXS}-W TLem}>ƕV)uI7!((j.#-j =k,~~ҲҦ*e cgk%2tmmS`'ىy5MekiD%BV:Ǣ(iJE4I$I߯!dIBM.2wqP$ F&CgAFAQL&㑤]6VV|@RUTVS4- $bH$ge)$ ;jzZ<Z.PJeB! ldrlllv!dnAOGV~k}!>jϏYUZiah*EUUO+))V.,Bn$>2')R]\Ӵ˻\od2/,ɴcbG"P Ot >j bb"ɀ"04Mq,+2ؖ)L& 7,f(,,4Ri=4ڥ72|z!dN TTT)2nYkJ$''pRZXP hyaǎkB3!s(=M_4EYV"@QQњ4EUR+J)5#(..\e7! H&L1qD6/]O~7v:j(6_,,,?a|xD7GsKb{9#nFVV#BȌH \BFWar9 Æi=*r;ȅ+**:?g ^;O> @ªgg~:䜰*AoR+VOM3!aV+V>}f\`BB€N:kn#GnƷ:যӬ:jV4( `kcgm۶5B!M{'::SpÇ=z}RSSǏ߮]>(55ҡCo6lؐ婕9~xkkΝps΍3gٳFD!3ao"̋ K<)nE@۶,\HF0DFF^|9''KI9FD<^3ovMcƌZx|@a6SBfDAABv-v14u_=povP3Ɩ b)?Hԯ_zimm'66,-ЫW]/{77oejҧOߍ7 ݻFD!3`bBȜx<]YYYD Sʊr)e - **lmL_OKK{W`Q7o:UvW|||NNk ͍}Ѣы/9s֮x /,69sNһwԼyBfN~!vuuM9{vBVVQjw o!)ϥxX[I:w\m]\\|>^z&Yb`T B5oA>s6 P)gddTVTx{{MCZ!GVxBDmAA׮JQjomeU,siBtIl"$iem)::9Wd*5BX,b>o$:Bi35]zc!SC|>Ɔi6$IS&vA!T+c+Be \Bz]L!BY6!Bx/9܆B 5^UB01>ˋiobm!B=ŸQB!Z1a)B͈(Uj5MQ$'I!j&yft&yzB5 EQ2;icem-T*UEEETJQH$& B#9k5Z0t0<!MVWTTx{{[ -U R^1A[oL}kkkvBu5^9Ғ@R(JWy@@iiZ6waB-.TaW@M%%%>>j\bkzS((J[RR­fL&:UL֐5J"0]dT* ݻw8.\Zoib˃ M>k̪*nIFDq)I2\լR23 Gwf,'BQU97||2pР¢"T*ݻw>7xR,J'<}||uHTT˽{>lKPljZm۵ LO .-)i* #2235BNs?sU.ΕGՉT4E1$#yyϥ8; viJX2--!22rر-xJ& C:6N9BȜlll||| 8s`PdgWTxyyy{MKZ!W^kW۳go3aǎjC I~~׮^K=JUO$Oc/BiؙpTPKAQ\.NN@RUTTHrP(& BH?d>_e?2<`V+|}} \^U.ch 2;VVVBψ:FO`Fc?.9겲``ˊ Ei(B!+/H .++U.,BVlGEM%%%27R)|p+4da^d*B&}Լ֚ !ꇻ(r$"aEH22YAB.DdddڽҥK<wދ/n30Htfl+AN<--/ለH **jݸ!S(޿/&fչ an.s}9yy{e㲝\^zo߱ANNL:eBoڽ{l촴4cv]2tЉnzK2]].\(W*srGԭ.pkE<v8T no|BY$Iwl5H6aNZR) E呤n'䤥K@Ϟ='L aÆq3***w Ld/>7V*|'-|s;.\HMUa\jջMtHH۾+V,􊍝u̸K.y~ +++y-ɓ̙-<==كgd$44tǎ"jB-@8qc$J}**;+k /<_7<;)(BRUӯ{xzM!%%ZT<2EJ=?Pfw츇@Њ?Jرcߟ3gKPcgov󦋋 dy[Y绸i5f.X}+}eA=;@ pvv_suvJVA<2QaJrsnڵk3۴i8D ԩ{METOujb ÐAk`谲?N lnaaP*yxxxzy[YYM!gV DnokgC$A0dHѾ! H=.[lll \\e%Eyښi !4+B>g>^% ;>VB)xv!lcM/M+5Bj.&$AT?dBFC_A4//c{BT/!:M}u,VBiA$EQ.Bi#^xBmV3$T5}:@ l^#j0OB&bL<~,p=vGn$7zBOeU%[iT*~Iع 4eȘĶ.+"1>b0RVURgcmKROJ2''GR &.)B=3jDggk(zp2gI"+++kkˈZ,/) OOPո/BHIIMdNml&`-90 0_.5:QYYYHhhEyZm/ʊOOϴ7xV " ojM /QVgef%PKA<6]cG`!C¼1;JJE"QY>?Z+))g$NlwqM]o@2e)CEY[8ޟZmU]:jֺƭX De &!d 1 I'srs9vP+$SSSű"w2lpl7u@|/>>ֽ{ە"Hjkk%s~Iҷ|:ǎ?W[Ph 7z?ᄏfjiH|`666OpmTBEE::&:uɤRuuu'==MR_eIl6ٹW^-ĦGku/777"< SNސFQ IDAT9{ffɥp8,!ޕ'WS]2j;88џBfؗlo9r4lRͮ*kiSmmN@khiѾw\fm۶m޼yn}6Y[MʘΙ3gToiEEEs?;uTu/ VXZVVfaaq[6?zhsfѣlac|||wcǎ%$:x 7o޼^СC#"",--\e>}/3_AkO),,C.^Axַo=]V}׷6,++` kfk7E YYY6lZl/7TTm?,bmfϙ-HٲeKZZg}dm߱˗}5k7|s#B 8Ɏ?Odq*GmTFDޣF6* SSSG}ˌ w60< z.d ~b zMMZ+Y,UK:,X[S]-W;.hӦMB0h:;[2 TZ_QWרk[O6W콙3h{wZ ԎuFH"U+hij6lHwqWϞ%,lٚ5y$3X]=RcMD ݺ,\"TSA?OL=lmmX9SOsEA@yy1, =iOD,pY~e54͛L&S__,Fޮ ,..z]&aan޴Bmg\m5o{ϾW:\Scc*V=~ַ@QQ5?~bcӽ2eem}𯗧ElmX=i)J)'[eZ]U% e&٦UUU^zKFH444t1ĩH  Ͱq)cc6n,.*~װ1.kiisJE:u5150m4hvѣ.*Pt}ƪILo捍ܼuŋvpm[6`iiig̡ڼy۰aC7mZvءlqwv?J-%akd233"!z4X,I@=g `tڵYEy9mƿ㲄Bwe1 ===M--c>fA IKSvF66B*"`IJ qQQ1Nanf6Yg̦DĆS[ :rUA( 3l8mX,f[,:GiDk`26=@&HyAujS:xy-⊊VzO5ռÛBȯG#Om0;w,ͭoUUUzz@p?tؼy>>*t }|g-T{=.^46?[jdeMB!Лx?O=^Wվ}R^hijzxp+W.]?kƵT_\񇟦L?8;__,]YUU`5V~ha_B7Cm$mȳ W3Ϩ [.֍rNt}'T#?jo_B!)LŚZoQL`2ʴjфB!fq8ڟTY3 Lx,[̽W`ܣA5H$<##cLa,`0t_oo2>E!p;w nܒ#IR[GNQTcnMoqIM%m.ͮk.uX4L&SOO^{iEB!(.*:37oI:@SSSS'FY=JBº:EkR->þ\.277[*+.ďB!tuuMMoC q \_9_҅?BEZZZJ6A*"\EB!nF,hj!g<!BNB!:3B!eߋB!8B!0@x!B==!BuB!|8B!!PM>E!@Xhg`&Z s H#3! ,@زf5+oHSX"mm!B)_{>' ['{)nO5 2Ν4Z\y<M-N*$._4Qc>u%HD|7}\{ Tԩ ֭yys6L6RWW`0BpqUUS-$?SS sK>CKV]mU˗.-Z`P!C-Xpe ={vc'N8&:¥˿ݻmWRsrrrO''KwqfU!By999:::}LM[[;'75JKԋ=zyeeECn[kI'$m׮ɤIOw t>x<,kkkKA8y5D!jKJlb`@{XZrzgE8Ҧvrpt 11`fffnn.}ym۷lʸǟΙַ5ãXyΖVVҗI)_|t]EBv[?obX bwHnII%þ&k&ܫ?ҹsg҈J_8c\qQ@Q{{牉җzzfNIIi!B򲲢 uuuE7 A}8ܞ.54N8""¥ѣ /] }0 vѣ_~ 555`fnF +ɓK Ju13榨RUBvM(ʶ)ʆ} ܽhG^8>5t M}oݾ}/{M#p8񢝝0k^vSfgg+ϓu/3`}Bo T0B!{Z͙ѽ{uu -1©۰,'LLM۴MڷwoDxXsȹgacQQQvn+ B | R+[%!BoH,NMI~ $I0$IqrqfMMސbk;!Bv$ɴԔ'O"!$| ]}<~͓Ǐ{4|?B!n""en.]7}mI?kEYY{7B!"X$ ?!⪊R꧲AJ0\XW'B!P;f `PЯx56.BV3l#v+B!h*I_7v%Ekzzy.) *2w ʿz5ڢ!BX$vh_ѭ[ÇƊy<#??%AEle@HW A͝O"QΙ3B!P4E5XeB!G5M:m;*^.E!PGӜɾE!&_B!M xx(jĈ&&7u{y`t `'B!;%m*hÇovJDr|4ãz}^mQCBOͽ_En^+KZ^"?Ҳρ@D99HW"j}׍Slμy=[^ᣞ7PI(̙A^<(UA!R;w ^WvNpt'#G D__v{_iPѴ@`ӏ֮n"ՌPt[vvSR"k*y%K֯gp8N?ظ+Bg?9yV&7o)XϟߊB!ha_ ߇`tiig멝|P:jLGhRRiP42Yƣ-g02Y#B $@í~}-+նeTu8PIT'%K"#@BRRD(|ICʧOU57aj Eo7pB@q_Ծȳ湫l6D%;+A^FFÇIy/Pʫ!M @@P㽖 ^0<9YNB!n0ԹxHC_o5|irpXiSٳO, S/4PxF:K#S@M'D B)2#~U_ej!Cn21BIP]WWm{%K"<= BB BB܎Wv^chAA<*eٮ\ɵpwvXM89aE?..g϶9e!Bkn? ú{uM zl CohM 3SS5VMOE!z%dJndqaFX,yfnZ,G$hjq9dΐ@!B3a?B!ԞJ_P?!hTlQ8B!!PM>/e޽SZ*C8C jvq K7V۶Rx}{6ZvGE~hWտ\[5ܬYTԬOWPdQIEj=KX[4&TBѕ.!"z3Dk}@ PoYwJWþm >}kۮB}|ۮB&4^.zKXH;-X3֯=:=TR[/RW֟i<0PyAu}wW{]dܩ Z1?}SFՉ$jԽN.URIf Pɯ*=еgoM_OT+﹑fcOKe|x5N˖S76_NN5(s˛k^NT^,-37o~U"ݥHR a"##T:v4(}u_[ 9s^ cG? $)u>*͚5G}?C7_W䔵\rzP&y15窧rG}8: `ڗΞ5V+}N *qqnsERF/Eñce׹NNlSS˛k^VΝ}iRMI(= P~TkYp1sNкﭬ/Xx* |a񪵅ee>}zo^8ٙdRsH<<>KH5d$&oCCCgrr?vD rʲa=bh/&T=RdĨ{oѣEl.+矻\S6U` j򴯿"6?̱ |xtSSP&'\i~=) '-kk˥Kg̠navv-(׭./**mo%#zz=l튱v݌>.m+vc*x^]W3ܕtI.cly@yqz!EadH5'p_m>~'L&O7-/09vv C{)ҦT:;;KŏjGqUmߠAd_=7$IDj{eiB͛'LHQndY,xSbk/edDlO[\p={^^B*##Io mni+yb-ٽ~ў];*++檞Ycu\ڎ 3m7 v62EIia!HÇHh*cc37o.UTH׭lVA?dKڂhіǓܲڄὌ`k@P\t[:J[8YCO^VP2*[Ѓ>_!I$Y>O~c6G Œ_i(Cڔ9!z^^ J44~>PpyRRyT4H{)ҦT"##J^[5ƞ u&߹k7I]4.ߤˑwW򫎖#B[_cz 7/#oy5knݾӬyblKI3~ttqX89;HKꚚ"oܰ?ʊnn0LXl1U5x))奤o(븺tzܞ=,pŪU_IDC=izzy}7ߘ8񇨼<-ڂ4 5 r9_Ѣ-1e*8a\?3 fGh}ϟ@r^[wj׮zTw7=*_nUk=L B,! eMd/{]\ߔ,Gp~η4hS6^e0rdƆ GXJS\޴\rdi/EڔJ$&$ٿniл*v>زiӋii ϧ7cƓ  }ֹ>IKkn Ϟ>78%*ݳ{W^nnrrҼibc9΀PyA|||ܾ-}Qozّ=yY_B$o%%&&U۷,WPO'pURF;]hzT0kN}__*t„UViZݫW٭[K1=:}Z^r2/99q4*(,.fw"xd ڂt~63Szcb ݤO[ZFш̥̉˦YyXlVP#$ui$ 4MUM;ogwEY%_XT)jUr8mJ%'ܥh8vl]~ټyj\+D5/G'{N*W])sުDG$hҽɥ^y?oF~8 N>}Ŋ@O^|:qS9vus+x++jqG>pPee_e_,4y2l} > ~}s { o䳕YLb8N*Sjfffǎqjg՚[7o;v@ww ,\;il cooM ˥K_hv-> ͙4};wlmjٲe˔/e֬C&??hx*3֮}'smAݾ8??}?? Zރ&lm}hkMѶTdhF wK?M|G╯7{H7?g);clߌ ~:zm޼# M\rȑFF#GjMo8^޴h/EV}|^)y5mP;ҜE0kkk^M U%fS8|@hOOо{#Â6}A5*儱Xm=W4z}!A OM:v vrt{㓾^6Y3e ~4s֭L'n<bF.wxyACOagww(q#q [U%BWHHRfdS͍XQuѐ!En$z͚3kr%:ݽSk&Npdzg[͜Ieaݺ=YbTǠ f'>-5UB!jξDDxXn)  KE4}0315USB!=Lܭ,=E7oެ-?S$%IȑZZ>L& !BHi C!jSBC!jGB"zSiV2Y-xXM7iӄXOT]G_~ީJߨYd<^}А%G TR5k_ b!:,ɧuO{y rvqQj'QM%ϯewtk}6:uZRzeþH;puIrjv*|ۭBv9 1*DXVnuf&T÷|0zԨHtc|0|ɓ'}!NgnuAAN+~Æ5S:9$&J_J Dؤ['*/WCg?;wewt:*ccMgbt„Bi0+t޹*:MQ/Vy$9r!u aiҢ[֙G[Pտ>4^.z6l ʂTW+﹑fcOK먠7+ !vM%)U7xvd \cCa2쓾7lXdd:> B!TkÞ? Ǯ{iЭ[,OU~l]{<~h 耀i_;{J}_իWs>]zZꙜI6JI ǎ-rEu4kN~jjP~RR]Jr:<1m"##"@kfe)Rw $kv%)TˍƎuOJr>sFznʿQwz%VHmPMn@&JRLYveO'dB#6w#QM_}󍁁/ZzMN2uȐ@H5dҤ&@hh(l_vڻ7<|߿&OO):\Q=y ǎ-OaII ɓ"<*0ckkX$YՏiMM=ɓ]X\Y#z:#8vv./*ST// SRP5k-.Uh xtp'clW'T`@hT%]2U#:;;K !PGE5pP."+?VWOzB$DG@^T02"ٽyP\\ =fff`6Jiiez_iiEAWih}PϵmG'Ogyذ;w$7Ufn\.?dHRt8U%}ӧJzI O 3m7 v62hie}C !I s1߾j)疻+IIK\F2+ fddXZZ):!EJy,hh`ɔ7t-?m֬<׽=zH낂:|o߾n}bpppxa^^D,V~z?OLln` FذpVzzj+/%S߾$޽g?th$id y7&!*/yQ{EW)%EOL.W"045;vp-$bB攪8K[gOC$.\xjlqAd Meokkavxt9,%)il ~tn컉 v-Bcrd[|PM6mIN:$ ߄ ݻrsjjjSҔ_pAJ޹} ǎ77OCo;}}[SytWTܸURt8U;Qt=-kk?WKOOQё03֮}7hci*:[r2xoM_VzxY:tx<V˖,[ւI͙4};wl_-V⻉$J;flӹskڥ9})SIݻ=zdMܳƾgΜ~B?ߏ9{IJ\f#8t&i)9)ɢB!Y;|0a_o ,\$|xתk##ҪA!R#@1LHȍڭ[4yl^^^nn. 6SEZyb\x<`{19yyY9T~ݏo޲u?ʦOLHkQB!Sh{sppdҤӧN&%%I0.^8TK}gO -6HK{p|*3f<*))M[TwB!U4y@C-e.hd9\pE i4KXYYp*}%<{< ͝1}GQiӧX>022Bviӧ7Y4B!Ps<""<̺5ǣb%fS8|@hQ'LLMWygj_|Zr:y,QKn!2VrJx0# $$NX`ܒEM"ő#G4 &Ap܌/KvyueB!LV}+$%O^{ƙ,H(QwC!zfVTThjq_B)++KYly!B>diy0_o}c]{wc4l&`C|8B!$٧OW"T ]]=;n>7,̍MLV^'dS&I!BW;882̗/bA 0Cʲuʊ KKϸqo*[6hiΝBB!:X\UYiccH. H(Ųqw`cǍ[p\+͚B!:&X\Q^ތnTW{IDATAD]]\oذȈ(!Bz=qthJO'6*!B52ӂh߯^Mwk٠uvvVB!ё$Y]Sd ?V=_KSdVmT"B!PGVPP2=#Cyj̚3GWOO6`goF%"BuX%%%eP[/)-UM$.]ܾ=xw[B!aUVU7 RQb7ºkz#5mtB!a>}^g릭䓶nݻu366nj /X+<#BQqI 0н0?_, ~ݒKKnoeϜ;B!:~n4좂j'X\VZ;N (.*jPB!ڝ2 H]]]QAATO:'$d435/}$B!RL !u I>AJ[-B!AC!@dB!~|B!1HB!A`!B M| 3B!g˶r)ecB!P2D",$Rb1`B!P&׿N YYBuu} B!Ԯ|ko]{&%Z>_.嫥^B!nUUUvdcc vvv\*t$ ޾Zڄ|L:M-B!jceDqaa&&&@5dzq&,׾/iiӍB!Pke gr\>GnBBBgH ։YC턚C #B3,(j`oo +rnd&uHB!ZD X,H**+ $!BE,%$$ {0@$kkv B!Pm>Xldl<ۻD,b09/B!jbX,ykHb !B=d0m-i]IENDB`rkward-0.6.1/doc/rkwardplugins/index.docbook0000644000175000017500000072303312124345420020477 0ustar thomasthomas RKWard'> R'> .pluginmap'> ]> Introduction to Writing Plugins for RKWard Thomas Friedrichsmeier
rkward-devel AT lists DOT sourceforge DOT net
Meik Michalke
rkward-devel AT lists DOT sourceforge DOT net
2006 2007 2008 2010 2011 2012 2013 Thomas Friedrichsmeier &FDLNotice; 2012-11-28 0.6.1.00 This is a guide to writing plugins for &rkward;. KDE R rkward plugins
Introduction Documentation as of &rkward; release 0.6.1. This document describes how to write your own plugins. Note, that at the time of this writing, some of the concepts are not yet set it stone. Therefore, this document should be regarded as an introduction to the current approach, and as a basis for discussion. All sorts of comments are welcome. The documentation has grown quite large over time. Don't let that scare you. We recommend reading through the four basic steps (as outlined, below), to get a basic idea of how things work. After that you may want to skim the table of contents to see which advanced topics could be of relevance to you. For questions and comments, please write to the &rkward; development mailing list. You do not need to read this in order to use &rkward;. This document is about extending &rkward;. It is targeted at advanced users, or people willing to help improve &rkward;. Writing a standard plugin is basically a four-step process: Placing a new Action in the menu hierarchy Describing the looks and behavior of the plugin GUI Defining, how R-code is to be generated from the settings, the user makes in the GUI Adding a help page to your plugin Those will be dealt with in turn. Some advanced concepts may be used in those four steps, but are dealt with in separate chapters, to keep things simple: GUI logic Embedding Plugins into Plugins Useful concepts for creating many series of similar plugins Also, none of the chapters shows all options, but rather only the basic concepts. A complete reference of options is provided separately. Preliminaries: What are plugins in &rkward;? How do they work? Of course the first question you might have is: What portions of &rkward; functionality is realized using plugins? Or: What can plugins do? One way to answer this is: Deselect all &pluginmap; files under SettingsConfigure &rkward;Plugins, and see what's missing. A slightly more helpful answer: Most actual statistics functions accessible via the GUI are realized using plugins. Also, you can create fairly flexible GUIs for all kinds of operations using plugins. The basic paradigm behind &rkward; plugins is the one we'll walk you through in this document: An XML file describes what the GUI looks like. An additional JavaScript file is used to generate &r; syntax from the GUI settings. That is, plugins do not really have to perform any statistical calculations. Rather plugins generate the &r; syntax needed to run those calculations. The &r; syntax is then sent to the &r; backend for evaluation, and typically a result is shown in the output window. Read on in the next chapters to see how this is done. Creating menu entries When you create a new plugin, you need to tell &rkward; about it. So the first thing to do, is to write a &pluginmap; file (or modify an existing one). The format of &pluginmap; is XML. I'll walk you through an example (also of course, be sure you have &rkward; configured to load your &pluginmap; -- SettingsConfigure &rkward;Plugins): After reading this chapter, have a look at the rkwarddev package as well. It provides some &r; functions to create most of &rkward;'s XML tags for you. <!DOCTYPE rkpluginmap> The doctype is not really interpreted, but set it to "rkpluginmap" anyway. <document base_prefix="" namespace="myplugins" id="mypluginmap"> The base_prefix attribute can be used, if all your plugins reside in a common directory. Basically, then you can omit that directory from the filenames specified below. It safe to leave this at "". As you will see below, all plugins get a unique identifier, id. The namespace is a way to organize those IDs, and make it less likely to create a duplicate identifier accidentally. Internally, basically the namespace and then a :: gets prepended to all the identifiers you specify in this &pluginmap;. In general, if you intend to distribute your plugins in an R package, it is a good idea to use the package name as namespace parameter. Plugins shipped with the official &rkward; distribution have namespace="rkward". The id attribute is optional, but specifying an id for your &pluginmap; makes it possible for other people to make their &pluginmap;s load your &pluginmap;, automatically (see the section on dependencies). <components> Components? Aren't we talking about plugins? Yes, but in the future, plugins will be no more than a special class of components. What we do here, then, is to register all components/plugins with &rkward;. Let's look at an example entry: <component type="standard" id="t_test_two_vars" file="t_test_two_vars.xml" label="Two Variable t-Test" /> First the type attribute: Leave this to "standard" for now. Further types are not yet implemented. The id we've already hinted at. Each component has to be given a unique (in its namespace) identifier. Pick one that is easily recognizable. Avoid spaces and any special characters. Those are not banned, so far, but might have special meanings. With the file attribute, you specify where the description of the actual plugin itself is located. This is relative to the directory the &pluginmap; file is in, and the base_prefix above. Finally, give the component a label. This label will be shown whereever the plugin is placed in the menu (or in the future perhaps in other places as well). Typically a &pluginmap; file will contain several components, so here are a few more: <component type="standard" id="unimplemented_test" file="means/unimplemented.xml" /> <component type="standard" id="fictional_t_test" file="means/ttests/fictional.xml" label="This is a fictional t-test" /> <component type="standard" id="descriptive" file="descriptive.xml" label="Descriptive Statistics" /> <component type="standard" id="corr_matrix" file="corr_matrix.xml" label="Correlation Matrix" /> <component type="standard" id="simple_anova" file="simple_anova.xml" label="Simple Anova" /> </components> Ok, this was the first step. &rkward; now knows those plugins exist. But how to invoke them? They need to be placed in a menu hierarchy: <hierarchy> <menu id="analysis" label="Analysis" index="4"> Right below the <hierarchy> tag, you start describing, in which <menu> your plugins should go. With the above line, you basically say, that your plugin should be in the Analysis menu (not necessarily directly there, but in a submenu). The Analysis menu is standard in &rkward;, so it does not actually have to be created from scratch. However, if it did not exist yet, using the label attribute you'd give it its name. The index attribute says, that the menu (if newly created) should be placed at the fourth position in the menubar. Finally, the id once again identifies this <menu>. This is needed, so several &pluginmap; files can place their plugins in the same menus. They do this by looking for a <menu> with the given id. If the ID does not yet exist, a new menu will be created. Otherwise the entries will be added to the existing menu. <menu id="means" label="Means" index="1"> Basically the same thing here: Now we define a submenu to the Analysis menu. It is to be called Means. <menu id="ttests" label="t-Tests"> And a final level in the menu hierarchy: A submenu of the submenu Means. Note, that if you omit the index parameter, the new entry will be placed below any already existing ones. <entry component="t_test_two_vars" /> Now, finally, this is the menu we want to place the plugin in. The <entry> tag signals, this actually is the real thing, instead of another submenu. The component attribute refers to the id you gave the plugin/component above. <entry component="fictional_t_test" /> </menu> <entry component="fictional_t_test" /> </menu> <menu id="frequency" label="Frequency" index="2"/> In case you have lost track: This is another submenu to the Analysis menu. See the screenshot below. We'll skip some of what's not visible, marked with [...]. [...] </menu> <entry component="corr_matrix" index="4"/> <entry component="descriptive" index="3"/> <entry component="simple_anova" index="5"/> </menu> These are the final entries visible in the screenshots below. Note, that you don't need to define the entries in the order they should have in the menu. Use the index attribute instead. <menu id="plots" label="Plots" index="5"> [...] </menu> Of course you can also place your plugins in menus other than Analysis. <menu id="file" label="File" index="0"> [...] </menu> Even in standard-menus such as File. All you need is the correct id. </hierarchy> </document> That's how to do it. And this screenshot shows the result: Menu hierarchy created by the code shown above Menu hierarchy created by the code shown above Confused? The easiest way to get started is probably taking some of the existing &pluginmap; files shipped with the distribution, and modifying them to your needs. Also, if you need help, don't hesitate to write to the development mailing list. Defining the GUI Defining a dialog In the previous chapter you've seen how to register a plugin with &rkward;. The most important ingredient was specifying the path to an XML file with a description of what the plugin actually looks like. In this chapter you'll learn how to create this XML file. After reading this chapter, have a look at the rkwarddev package as well. It provides some &r; functions to create most of &rkward;'s XML tags for you. Once again we'll walk you through an example. The example is a (slightly simplified) version of the two variable t-Test. <!DOCTYPE rkplugin> The doctype is not really interpreted, yet. Set it to rkplugin, anyway. <document> <code file="t_test_two_vars.js"/> All plugins generate some code. Currently the only way to do so is using JS, as detailed in the next chapter. This defines, where to look for the JS code. The filename is relative to the directory the plugin XML is in. <help file="t_test_two_vars.rkh"/> It is usually a good idea to also provide a help page for your plugin. The filename of that help page is given, here, relative to the directory, the plugin XML is in. Writing help pages is documented here. If you do not provide a help file, omit this line. <dialog label="Two Variable t-Test"> As you know, plugins may have either a dialog or a wizard interface or both. Here we start definining a dialog interface. the label attribute specifies the caption of the dialog. <tabbook> <tab label="Basic settings"> GUI elements can be organized using a tabbook. Here we define a tabbook as the first element in the dialog. Use <tabbook>[...]</tabbook> to define the tabbook and then for each page in the tabbook use <tab>[...]</tab>. The label attribute in the <tab> element allows you to specify a caption for that page of the tabbook. <row id="main_settings_row"> The <row> and <column> tags specify the layout of the GUI elements. Here you say, that you'd like to place some elements side-by-side (left to right). The id attribute is not strictly necessary, but we'll use it later on, when adding a wizard interface to our plugin. The first element to place in the row, is: <varselector id="vars"/> Using this simple tag you create a list from which the user can select variables. You have to specify an id for this element, so &rkward; knows how to find it. You may NOT use a dot (.) in the id string. <column> Next, we nest a <column> inside the row. I.e. the following elements will be place above each other (top-to-bottom), and all will be to the right of the <varselector>. <varslot types="number" id="x" source="vars" required="true" label="compare"/> <varslot types="number" id="y" source="vars" required="true" label="against"/> These elements are the counterpart to the <varselector>. They represent slots into which the user can put variables. You will note that the source is set to the same value as the id of the <varselector>. This means, the <varslot>s will each take their variables from the varselector. The <varslot>s also have to be given an id. They may have a label, and they may be set to required. This means that the Submit button will not be enabled until the <varslot> holds a valid value. Finally the type attribute is not interpreted yet, but it will be used to take care that only the correct types of variables will be allowed in the <varslot>. <radio id="hypothesis" label="using test hypothesis"> <option value="two.sided" label="Two-sided"/> <option value="greater" label="First is greater"/> <option value="less" label="Second is greater"/> </radio> Here, you define a group of <radio> exclusive buttons. The group has a label and an id. Each <option> (button) has a label and is assigned a value. This is the value the <radio> element will return when the option is selected. </column> </row> </tab> Each tag has to be closed. We've put all the elements we wanted (the two <varslots> and the <radio>) in the <column>. We put all elements we wanted (the <varselector> and the <column> with those elements) in the <row>. And we've put all the elements we wanted into the first page in the <tabbook>. We're not yet done defining the <tabbook> (more pages to come), and of course there's more to come in the <dialog>, too. But this screenshot is basically what we've done so far: t-Test plugin t-Test plugin Note that we have not specified the Submit, Close, etc. buttons or the code view. Those elements get generated automatically. But of course we still have to define the second page of the <tabbook>: <tab label="Options"> <checkbox id="varequal" label="assume equal variances" value=", var.equal=TRUE"/> By default elements will be placed top-to-bottom like in a <column>. Since that is what we want here, we don't have to explicitly state a <row> or <column> layout. The first element we define is a checkbox. Just like the <radio><option>s, the checkbox has a label and a value. The value is what gets returned, if the checkbox is checked. Of course the checkbox also needs an id. <frame label="Confidence Interval" id="frame_conf_int"> Here's yet another layout element: In order to signal that the two elements below belong together, we draw a <frame> (box). That frame may have a label (caption). Since the frame is just a passive layout element, it does not need an id, we still define one here, as we'll refer to it later, when defining an additional wizard interface. <checkbox id="confint" label="print confidence interval" value="1" checked="true"/> <spinbox type="real" id="conflevel" label="confidence level" min="0" max="1" initial="0.95"/> </frame> Inside the <frame> we place another <checkbox> (using checked="true", we signal that checkbox should be checked by default), and a <spinbox>. The spinbox allows the user to select a value between "min" and "max" with the default/initial value "0.95". Setting the type to "real" signals that real numbers are accepted as opposed to type="integer" which would accept integers only. It is also possible, and often preferable, to make the <frame> itself checkable, instead of adding a <checkbox> inside. See the reference for details. This is not done here, for illustrational purposes. </tab> </tabbook> </dialog> That's all for the second page of the <tabbook>, all pages in the <tabbook> and all elements in the <dialog>. We're finished defining what the dialog looks like. </document> Finally we close the <document> tag, and that's it. The GUI is defined. You can save the file now. But how does &r; syntax get generated from the GUI-settings? We'll deal with that in the next chapter. First, however, we'll look into adding a wizard interface, and some general considerations. Adding a wizard interface Actually we don't have to define an additional <wizard> interface, but here's how that would be done. To add a wizard interface, you'll add a <wizard> tag at the same level as the <dialog> tag: <wizard label="Two Variable t-Test"> <page id="firstpage"> <text>As a first step, select the two variables you want to compare against each other. And specify, which one you theorize to be greater. Select two-sided, if your theory does not tell you, which variable is greater.</text> <copy id="main_settings_row"/> </page> Some of this is pretty self explanatory: We add a <wizard> tag with a label for the wizard. Since a wizard can hold several pages that are shown one after another, we next define the first <page>, and put an explanatory <text> note in there. Then we use a <copy> tag. What this does, is really it saves us having to define yet again, what we already wrote for the <dialog>: The copy tag looks for another tag with the same id earlier in the XML. This happens to be defined in the <dialog> section, and is a <row> in which there are the <varselector>, <varslots> and the hypothesis <radio> control. All of this is copied 1:1 and inserted right at the <copy> element. Now to the second page: <page id="secondpage"> <text>Below are some advanced options. It's generally safe not to assume the variables have equal variances. An appropriate correction will be applied then. Chosing "assume equal variances" may increase test-strength, however.</text> <copy id="varequal"/> <text>Sometimes it's helpful to get an estimate of the confidence interval of the difference in means. Below you can specify whether one should be shown, and which confidence-level should be applied (95% corresponds to a 5% level of significance).</text> <copy id="frame_conf_int"/> </page> </wizard> Much of the same thing here. We add some texts, and in between that <copy> further sections from the dialog interface. You may of course make the wizard interface look very different to the plain dialog, and not use the <copy> tag at all. Be sure, however, to assign corresponding elements the same id in both interfaces. This is not only used to transfer settings from the dialog interface to the wizard interface and back, when the user switches interfaces (which does not yet happen in the current version of &rkward;), but also simplifies writing your code template (see below). Some considerations on GUI design This section contains some general considerations on which GUI elements to use where. If this is your first attempt of creating a plugin, feel free to skip over this section, as it isn't relevant to getting a basic GUI working. Come back here, later, to see, whether you can refine your plugin's GUI in some way or another. <radio> vs. <checkbox> vs. <dropdown> The three elements <radio>, <checkbox>, <dropdown>, all serve a similar function: To select one out of several options. Obviously, a checkbox only allows to chose between two options: checked or not checked, so you can't use it, if there are more than two options to chose from. But when to use which of the elements? Some rules of thumb: If you find yourself creating a <radio> or <dropdown> with only two options, ask yourself, whether the question is essentially a yes / no type of question. E.g. a choice between adjust results and do not adjust results, or between remove missing values and keep missing values. In this case a <checkbox> is the best choice: It uses little space, will have the least words of labels, and is easiest to read for the user. There are very few situations where you should chose a <radio> over a <checkbox>, when there are only two options. An example of that might be: Method of calculation: 'pearson'/'spearman'. Here, more methods might be thinkable, and they don't really form a pair of opposites. Chosing between a <radio> and a <dropdown> is mostly a question of space. The <dropdown> has the advantage of using little space, even if there are a lot of options to chose from. On the other hand, a <radio> has the advantage of making all possible choices visible to the user at once, without clicking on the dropdown arrow. Generally, if there are six or more options to chose from, a <dropdown> is preferable. If there are five or less options, a <radio> is the better choice. Generating R code from GUI settings Using JavaScript in RKWard plugins Now we have a GUI defined, but we still need to generate some &r; code from that. For that, we need another text file, code.js, located in the same directory as the description.xml. You may or may not be familiar with JavaScript (or, to be technically precise: ECMA-script). Documentation on JS can be found in abundance, both in printed form, and on the internet (e.g.: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide). But for most purposes you will not need to know much about JS at all, as we'll only use some very basic features. After reading this chapter, have a look at the rkwarddev package as well. It provides some &r; functions to create JavaScript code commonly used in &rkward;. It can also autodetect variables used in a plugin XML file and create basic JavaScript code from that for you to start with. For the two variable t-test, the code.js file looks as follows (with comments in between): preprocess() function preprocess () { } The JS file is organized into three separate functions: preprocess(), calculate(), and printout(). This is because not all code is needed at all stages. Currently the preprocess-function is not really used in many places (typically you will omit it altogether). calculate() function calculate () { echo ('res <- t.test (x=' + getString ("x") + ', y=' + getString ("y") + ', hypothesis="' + getString ("hypothesis") + '"' + getString ("varequal")); var conflevel = getString ("conflevel"); if (conflevel != "0.95") echo (', conf.level=' + conflevel); echo (')\n'); } This function generates the actual R syntax to be run from the GUI settings. Let's look at this in detail: The code to be used is generated using echo() statement. Looking at the echo() statement step by step, the first part of it is res <- t.test ( as plain text. Next we need to fill in the value, the user selected as the first variable. We fetch this using getString ("x"), and append it to the string to be echoed. This prints out the value of the GUI-element with id="x": our first <checkbox>. Next, we append a ', ', and do the same to fetch the value of the element "y" - the second <checkbox>. For the hypothesis (the <radio> group), and the equal variances <checkbox>, the procedure is very similar. Note that instead of concatenating the output snippets with +, you can also use several echo() statments. Everything is printed on a single line. To produce a line break in the generated code, insert a "\n" in the echoed string. In theory, you can even produce many lines with a single echo-statement, but please keep it to one line (or less) of generated code per echo(). Besides getString(), there are also functions getBoolean(), which will try to return the value as a logical (suitable for using in an if()-statement), and getList(), which will try to return list-like data in a JS Array(). We will show examples of those, later. When looking at existing plugins, you will also find plenty of plugins using getValue(), instead of getString(), and in fact the two are almost identical. However using getString(), getBoolean() and getList() is the recommended practice since version 0.6.1. It gets a little more tricky for the confidence level. For reasons of aesthetics, we don't want to explicitly specify the confidence level to use, if it corresponds to the default value. Hence, instead of printing the value unconditionally, we first fetch into a variable. Then we check, whether that variable differs from "0.95" and if so print out an additional argument. Finally, we echo a closing bracket and a line break: ")\n". That's all for the calculate function. printout() function printout () { echo ('rk.header ("Two Variable t-Test")\n'); echo ('rk.print (res)\n'); } And this was all there is to the printout function in most cases. rk.header() prints a standard headline for the results. You can also add some more information to this, if you like, e.g.: function printout () { makeHeaderCode ("Two Variable t-Test", new Array ("Assume equal variances", getString ("varequal"), "Confidence level", getString ("conflevel"))) echo ('rk.print (res)\n'); } rk.print() utilizes the R2HTML package to provide HTML formatted output. Another helpful function is rk.results(), which can also output different kinds of result tables. If in doubt, however, just use rk.print(), and be done with. makeHeaderCode() is a JS level helper function to create a call to rk.header() (just take a look at the generated code). In some cases you may want to call echo ('rk.header (...)') directly to print a header for your output. Note that internally, the output is just a plain HTML document at this point of time. Therefore you might be tempted to add custom HTML using rk.cat.output(). While this will work, please don't do this. The output format may change (e.g. to ODF) in the future, so it's best not to introduce HTML specific code. Rather keep things simple with rk.header(), rk.print(), rk.results(), and -- if needed -- rk.print.literal(). If those don't seem to satisfy your formatting needs, contact us on the mailing list for help. Congratulations! You created your first plugin. Read on in the next chapters for more advanced concepts. Conventions, policies, and background There are many ways to write &r; code for a certain task, and there are even more ways to generate this &r; code from JS. How exactly you do it, is left up to you. Still there are a number of considerations that you should follow, and background information you should understand. Understanding the <function>local()</function> environment More often than not you will have to create one or more temporary &r; objects in the code generated by your plugin. Normally, you do not want those to be placed in the user's workspace, potentially even overwriting user variables. Hence, all plugin generated code is run in a local() environment (see &r; help page on function local()). This means, all variables you create are temporary and will not be saved permanently. If the user explicitly asks for a variable to be saved, you will need to assign to that object using .GlobalEnv$objectname <- value. In general, do not use the <<- operator. It will not necessarily assign in .GlobalEnv. One important pitfall is using eval(). Here, you need to note that eval will by default use the current environment for evaluation, i.e. the local one. This will work well most of the times, but but not always. Thus, if you need to use eval(), you will probably want to specify the envir parameter: eval(..., envir=globalenv()). Code formatting The most important thing is for your generated &r; code to work. But please also keep an eye on formatting. Some considerations: Normal top-level &r; statements should be left aligned. Statements in a lower block should be indented with one tab (see example below). If you do very complex calculations, add a comment here and there, esp. to mark up logical sections. For example, generated code might look like this. The same code without indentation or comments would be pretty hard to read, despite its modest complexity: # first determine the wobble and rotation my.wobble <- wobble (x, y) my.rotation <- wobble.rotation (my.wobble, z) # boggling method needs to be chosen according to rotation if (my.rotation > wobble.rotation.limit (x)) { method <- "foo" result <- boggle.foo (my.wobble, my.rotation) } else { method <- "bar" result <- boggle.bar (my.wobble, my.rotation) } Dealing with complex options Many plugins can do more than one thing. For instance, the Descriptive Statistics plugin can compute mean, range, sum, product, median, length, etc. However, typically the user will only chose to have some of those calculations performed. In this case, please try to keep the generated code as simple as possible. It should only contain portions relevant to the options that are actually selected. To achieve this, here is an example of a common design patterns as you would use it (in JS; here, "domean", "domedian", and "dosd" would be <checkbox> elements): function calculate () { echo ('x <- <' + getString ("x") + ')\n'); echo ('results <- list ()\n'); if (getBoolean ("domean.state")) echo ("results$'Mean value' <- mean (x)\n"); if (getBoolean ("domedian.state")) echo ("results$'Median' <- median (x)\n"); if (getBoolean ("dosd.state")) echo ("results$'Standard deviation' <- sd (x)\n"); //... } Tips and tricks Here are a few assorted tricks which may make writing plugins less tedious: If you need the value of a GUI setting at several places in you plugin's code, consider assigning it to a variable in JS, and using that instead of fetching it again and again with getString()/getBoolean()/getList(). This is faster, more readable, and less typing all at the same time: function calculate () { var narm = ""; // na.rm=FALSE is the default in all functions below if (getBoolean ("remove_nas")) { $narm = ", na.rm=TRUE"; } // ... echo ("results$foo <- foo (x" + narm + ")\n"); echo ("results$bar <- bar (x" + narm + ")\n"); echo ("results$foobar <- foobar (x" + narm "\n"); // ... } Writing a help page When your plugin basically works, the time has come to provide a help page. While typically you will not want to explain all the underlying concepts in depth, you may want to add some more explanation for some of the options, and link to related plugins and &r; functions. After reading this chapter, have a look at the rkwarddev package as well. It provides some &r; functions to create most of &rkward;'s XML tags for you. It's also capable of creating basic help file skeletons from existing plugin XML files for you to start with. You may recall putting this inside your plugin XML (if you haven't put this in, do so now): <document> [...] <help file="filename.rkh" /> [...] </document> Where, obviously, you'd replace filename with a more appropriate name. Now it's time to create this .rkh file. Here is a self-descriptive example: <!DOCTYPE rkhelp> <document> <summary> In this section, you'll put some short, very basic information about what the plugin does. This section will always show up on the very top of the help page. </summary> <usage> The usage section may contain a little more practical information. It does not explain all the settings in detail (that's done in the "settings" section), however. To start a new paragraph, insert an empty line, as shown above. This line, in contrast, will be in the same paragraph. In all sections you can insert some simple HTML code, such as <b>bold</b> or <i>italic</i> text. Please keep formatting to the minimum needed, however. The usage section is always the second section shown in a help page. </usage> <section id="sectionid" title="Generic section" short_title="Generic"> If you need to, you can add additional sections between the usage and settings sections. However, usually, you will not need this while documenting plugins. The "id"-attribute provides an anchor point to jump to this section from the navigation menu. The "short_title" attribute provides a short title to use in the navigation bar. This is optional, by default the main "title" will be used both as a heading to the section, and as the link name in the navigation bar. In any section you may want to insert links to further information. You do this by adding <link href="URL">link name</link> Where URL could be an external link such as http://rkward.sourceforge.net . Several special URLs are supported in the help pages: <link href="rkward://page/path/page_id"/> This links to a top level rkward help page (not for a plugin). <link href="rkward://component/[namespace/]component_id"/> This links to the help page of another plugin. The [namespace/] part may be omitted (in this case, rkward is assumed as the standard namespace, e.g.: <link href="rkward://component/import_spss"/> or <link href="rkward://component/rkward/import_spss"/> are equivalent). The component_id is the same that you specified in the &pluginmap;. <link href="rkward://rhelp/rfunction"/> Links to the R help page on "rfunction". Note that the link names will be generated automatically for these types of links. </section> <settings> <caption id="id_of_tab_or_frame"/> <setting id="id_of_element"> Description of the GUI element identified by the given id </setting> <setting id="id_of_elementb" title="description"> Usually the title of the GUI element will be extracted from the XML definition of the plugin, automatically. However, for some GUI elements, this description may not be enough to identify them, reliably. In this case, you can add an explicit title using the "title" attribute. </setting> <setting id="id_of_elementc"> Description of the GUI element identified by "id_of_elementc" </setting> [...] </settings> <related> The related section typically just contains some links, such as: <ul> <li><link href="rkward://rhelp/mean"/></li> <li><link href="rkward://rhelp/median"/></li> <li><link href="rkward://component/related_component"/></li> </ul> </related> <technical> The technical section (optional, always last) may contain some technical details of the plugin implementation, which are of interest only to RKWard developers. This is particularly relevant for plugins that are designed to be embedded in many other plugins, and could detail, which options are available to customize the embedded plugin, and which code sections contain which R code. </technical> </document> Logic interactions between GUI elements GUI logic All the basic concepts of creating a plugin for &rkward; have been described in the previous chapters. Those basic concepts should be sufficient for many -- if not most -- cases. However, sometimes you want more control over how your plugin's GUI behaves. For instance, suppose you want to extend the t-test example used in this documentation to allow both: comparing a variable against another variable (as shown), and comparing a variable against a constant value. Now, one way of doing this would be to add a radio-control that switches between the two modes, and adding a spinbox to enter the constant value to compare against. Consider this simplified example: <!DOCTYPE rkplugin> <document> <code file="code.js"/> <dialog label="T-Test"> <row> <varselector id="vars"/> <column> <varslot id="x" types="number" source="vars" required="true" label="compare"/> <radio id="mode" label="Compare against"> <option value="variable" checked="true" label="another variable (select below)"/> <option value="constant" label="a constant value (set below)"/> </radio> <varslot id="y" types="number" source="vars" required="true" label="variable"/> <spinbox id="constant" initial="0" label="constant" /> </column> </row> </dialog> </document> So far so good, but there are a number of problems with this GUI. First, both the varslot and the spinbox are always shown, whereas only one of the two is really used. Worse, the varslot always requires a valid selection, even if you compare against a constant. Obviously, if we create a multi-purpose GUI like this, we want more flexibility. Enter: the <logic> section (inserted at the same level as <code>, <dialog>, or <wizard>). [...] <code file="code.js"/> <logic> <convert id="varmode" mode="equals" sources="mode.string" standard="variable" /> <connect client="y.visible" governor="varmode" /> <connect client="constant.visible" governor="varmode.not" /> </logic> <dialog label="T-Test"> [...] The first line inside the logic section is a <convert> tag. Basically, this provides a new boolean (on or off, true or false) property, which can be used later on. This property ("varmode") is true, whenever the upper radio button is selected and false whenever the lower radio button is selected. How is this done? First, under sources, the source properties to work on are listed (in this case only one each; you could list several as sources="mode.string;somethingelse", then "varmode" would only be true, if both "mode.string" and "somethingelse" are equal to the string "variable"). Note that in this case we don't just write "mode" (as we would in getString("mode"), but "mode.string". This is actually the internal way a radio control works: It has a property string, which holds its string value. getString("mode") is just a shorthand, and equivalent to getString("mode.string"). See the reference for all properties of the different GUI elements. Second, we set the mode of conversion to mode="equals". This means, we want to check, whether the source(s) is (are) equal to a certain value. Finally standard is the value to compare against, so with standard="variable", we check whether the property "mode.string" is equal to the string "variable" (the value of the upper radio option). If it is equal, then the property varmode is true, else it is false. Now to the real stuff: We <connect> the "varmode" property to y.visible, which controls whether the varslot "y" is shown or not. Note that any element which is made invisible is implicitly non-required. Thus, if the upper radio-option is selected, the varslot "y" is required, and visible. Else it is not required and hidden. For the spinbox, we want the exact reverse. Fortunately, we do not need another <convert> for this: Boolean properties can be negated very easily by appending the modifier "not", so we <connect> "varmode.not" to the spinbox's visibility property. In effect, either the varslot is shown and required, or the spinbox is shown and required - depending on which option is selected in the radio control. The GUI is changing itself according to the radio option. Try the example, if you like. For a complete list of properties, refer to the reference. One more property, however, is special in that all GUI elements have it: enabled. This is slightly less drastic that visible. It does not show/hide the GUI element, but only enables/disables it. Disabled elements are typically shown grayed out, and do not react to user input. Besides <convert> and <connect>, there are several further elements for use in the <logic> section. E.g. conditional constructs can also be implemented using the <switch>-element. Refer to the reference on logic elements for details. Scripted GUI logic While connecting properties as described above is often enough, sometimes it is more flexible or more convenient to use JS to script the GUI logic. In this way, the above example could be re-written as: [...] <code file="code.js"/> ' <logic> <script><![CDATA[ // ECMAScript code in this block // the top-level statement is only called once gui.addChangeCommand ("mode.string", "modeChanged ()"); // this function is called whenever the "mode" was changed modeChanged = function () { var varmode = (gui.getString ("mode.string") == "variable"); gui.setValue ("y.enabled", varmode); gui.setValue ("constant.enabled", !varmode); } ]]></script> </logic> <dialog label="T-Test"> [...] The first line of code tells &rkward; to call the function modeChanged() whenever the value of the id="mode" radio box changes. Inside this function, we define a helper-variable "varmode" which is true when the mode is "variable", false is it is "constant". Then we use gui.setValue() to set the and enabled properties of "y" and "constant", in just the same way as we did using <connect> statements, before. The scripted approach to GUI logic becomes particularly useful when you want to change the available option according to the type of object that the user has selected. See the reference for available functions. Note that the scripted approach to GUI logic can be mixed with <connect> and <convert>-statements if you like. Also note that the <script> tag allows to specify a script file name in addition to or as an alternative to inlining the script code. Typically, inlining the script code as shown above is most convenient, however. Embedding Plugins into Plugins Use cases for embedding When writing plugins, you will often find that you're creating a number of plugins that only differ in some respects, but have a lot more in common. For instance, for plotting, there are a number of generic &r; options that can be used with mostly all types of plots. Should you create a GUI and JS-template for those over and over again? Obviously that would be quite a hassle. Fortunately, you don't have to do that. Rather you create the common functionality once, and later you can embed it into several plugins. In fact it is possible to embed any plugin into any other plugin, even if the original author of the embedded plugin never thought, somebody would want to embed their plugin into another one. Embedding inside a dialog Ok, enough said. How does it work? Simple: Just use the <embed> tag. Here's a stripped down example: <dialog> <tabbook> <tab [...]> [...] </tab> <tab label="Plot Options"> <embed id="plotoptions" component="rkward::plot_options"/> </tab> <tab [...]> [...] </tab> </tabbook> </dialog> What happens here, is that the entire GUI or the plot options plugin (except of course for the standard elements like Submit button, etc.) is embedded right into your plugin (try it!). As you can see the syntax of the <embed>-tag is fairly simple. It takes an id as most elements. The parameter component specifies which plugin to embed, as defined in the &pluginmap; file ("rkward::plot_options" is the result of concatenating the namespace rkward, a separator ::, and the name of the component plot_options). Code generation when embedding So far so good, but what about the generated code? How are the code for the embedding and embedded plugin merged? In the embedding plugin's JS code, simply write something like this: function printout () { // ... echo ("myplotfunction ([...]" + getString ("plotoptions.code.printout"); + ")\n"); // ... } So essentially, we're fetching the code generated by the embedded plugin just like we're fetching any other GUI setting. Here the string "plotoptions.code.printout" can be deparsed to: The printout section of the generated code of the element with the id plotoptions (plotoptions is the ID we gave for the <embed> tag above). And yes, if you want advanced control, you can even fetch the values of individual GUI elements inside the embedded plugin (but not the other way around, as the embedded plugin does not know anything about its surroundings). Embedding inside a wizard If your plugin provides a wizard GUI, embedding works basically in the same way. You'll generally use: <wizard [...]> [...] <page id="page12"> [...] </page> <embed id="plotoptions" component="rkward::plot_options"/> <page id="page13"> [...] </page> [...] </wizard> If the embedded plugin provides a wizard interface, its pages will be inserted right between "page12" and "page13" of your plugin. If the embedded plugin provides a dialog interface only, a single new page will be added between your pages "page12" and "page13". The user will never notice. Less embedded embedding: Further Options button While embedding is cool, you should be careful not to overdo it. Too many functions inside a GUI just make it hard to find the relevant options. Of course, sometimes you may want to embed a great deal of options (like all the options to plot()), but as those are really optional, you don't want them prominently in your GUI. An alternative is to embed those options as a button: <dialog> <tabbook> [...] <tab label="Options"> [...] <embed id="plotoptions" component="rkward::plot_options" as_button="true" label="Specify plotting options"/> </tab> [...] </tabbook> </dialog> In this case, a single push button will be added to your plugin, labelled Specify plotting options. When you press that button, a separate dialog will come up, with all the options of the embedded plugin. Even while this embedded GUI is not visible most of the time, you can fetch its settings just as described above. Probably the button approach should only ever be used for plugins that can never be invalid (for missing/bad settings). Otherwise the user would not be able to submit the code, but might have a hard time finding out, the reason for that is hidden behind some button. Embedding/defining incomplete plugins Some plugins -- and as a matter of fact, the plot_options used as an example above, is one of them -- are not complete by themselves. They simply do not have the GUI elements to select some important values. They are meant to be used only embedded into other plugins. In how far is the plot_options plugin incomplete? Well, for some option settings, it needs to know the name of the objects/expressions for the x and y axes (actually it will do fine if it only has either, but it needs at least one to function properly). However, it does not have a mechansim of selecting those objects, or entering them any other way. So how does it know about them? In the logic section of the plot_options plugin there are two additional lines, not covered, yet: <logic> <external id="xvar" /> <external id="yvar" /> [...] </logic> This defines two additional properties in the plot_options plugin, whose sole purpose is to be connected to some (yet unknown) properties of the embedding plugin. In the plot_options plugin those two properties are simply used like any other, and for instance there are calls to getString("xvar") in the plot_options JS template. Now, for the incomplete plugin there is no way of knowing, where it will be embedded, and what the relevant settings in the embedding plugin will be called. So we need to add two additional lines in the embedding plugin's logic section as well: <logic> [...] <connect client="plotoptions.xvar" governor="xvarslot.available" /> <connect client="plotoptions.yvar" governor="yvarslot.available" /> </logic> This is nothing new in principle, we've covered <connect> statements in the chapter of GUI logic. You simply connect the values in two varlots (called "xvarslot" and "yvarslot" in this example) to the receiving external properties of the embedded plugin. That's it. Everything else is taken care of automatically. Dealing with many similar plugins Overview on different approaches Sometimes, you may wish to develop plugins for a series of similar functions. As an example, consider the distribution plots. These generate fairly similar code, and of course it's desirable to make the graphical interfaces look similar to each other. Finally large sections of the help files can be identical. Only a few parameters are different for each plugin. The naive approach to this is to develop one plugin, then basically copy and paste the entire contents of the .js, .xml, and .rkh files, then changing the few portions that are different. However, what if sometime later you find a spelling mistake that has been copied and pasted to all plugins? What if you want to add support for a new feature? You'd have to visit all plugins again, and change each single one. A tiresome and tedious process. A second approach would be to use embedding. However, in some cases this does not lend itself well to the problem at hand, mostly because the chunks you can embed are sometimes too large to be useful, and it places some constraints on the layout. For these cases, the concepts including .js files including .xml files and snippets can be very useful (but see the thoughts on when it is preferable to use embedding). One word of caution, before you begin reading, though: These concepts can help making it simpler to deal with many similar plugins, and can improve maintainability and readability of those plugins. However, overdoing it can easily lead to the reverse effect. Use with some caution. Using the JS include statement You can easily include one script file into another in &rkward; plugins. The value of this becomes immediately obvious, if some sections of your JS code are similar across plugins. You can simply define those sections in a separate .js file, and include this in all the plugin .js files. For example, as in: // this is a file called "common_functions.js" function doCommonStuff () { // perhaps fetch some options, etc. // ... echo ("# This is R code you want in several different plugins\n"); // ... } // this is one of your regular plugin .js files // include the common functions include ("common_functions.js"); function calculate () { // do something // ... // insert the common code doCommonStuff (); } Note that sometimes it's even more useful to reverse this, and define the skeleton of preprocess(), calculate(), and printout() functions is a common file, and make these call back for those part which are different across plugins. E.g.: // this is a file called "common_functions.js" function calculate () { // do some things which are the same in all plugins // ... // add in something that is different across plugins getSpecifics (); // ... } // this is one of your regular plugin .js files // include the common functions include ("common_functions.js"); // note: no calculate() function is defined in here. // it in the common_functions.js, instead. function getSpecifics () { // print some R code } One issue you should be aware of when using this technique is variable scoping. See the JS manual on variable scopes. This technique is heavily used in the distribution plot and distribution CLT plot plugins, so you may want to look there for examples. Including <literal role="extension">.xml</literal> files Basically the same feature of including files is also available for use in the .xml, &pluginmap; and .rkh files. At any place in these files you can place an <include> tag as shown below. The effect is that the entire contents of that XML file (to be precise: everything within the <document> tag of that file) is included verbatim at this point in the file. Note that you can only include another XML file. <document> [...] <include file="another_xml_file.xml"/> [...] </document> The attribute file is the filename relative to the directory the current file is located in. Using <snippets> While including files as shown in the previous section is fairly powerful, it become most useful when used in combination with <snippets>. Snippets are really smaller sections which you can insert at another point in the file. An example illustrates this best: <document> <snippets> <snippet id="note"> <frame> <text> This will be inserted at two places in the GUI </text> </frame> </snippet> </snippets> <dialog label="test"> <column> <insert snippet="note"/> [...] <insert snippet="note"/> </column> </dialog> </document> Hence, you define the snippet at one place at the top of the XML file, and then you <insert> it at any place(s) you wish. While this example is not too useful in itself, think about combining this with an <include>d .xml file. Note that you can also place snippets for the .rkh file in the same file. You'd simply <include> the file there as well, and <insert> the relevant snippet: <!-- This is a file called "common_snippets.xml" --> <document> <snippet id="common_options"> <spinbox id="something" [...]/> [...] </snippet> <snippet id="common_note"> <text>An important note for this type of plugin</text> </snippet> <snippet id="common_help"> <setting id="something">This does something</setting> [...] </snippet> </document> <!-- This is the .xml file of the plugin --> <document> <snippets> <!-- Import the common snippets --> <include file="common_snippets.xml"/> </snippets> <dialog label="test2"> <insert snippet="common_note"/> <spinbox id="something_plugin_specific" [...] /> <insert snippet="common_options"/> </dialog> </document> Similar to inclusion in JS, the reverse approach is often even more useful: <!-- This is a file called "common_layout.xml" --> <document> <column> <insert snippet="note"> [...] <insert snippet="plugin_parameters"> </column> [...] </document> <!-- This is the .xml file of the plugin --> <document> <snippets> <snippet id="note"> <text>The note used for this specific plugin</text> </snippet> <snippet id="plugin_parameters"> <frame label="Parameters specific to this plugin"> [...] </frame> </snippet> </snippets> <dialog label="test3"> <include file="common_layout.xml"/> </dialog> </document> Finally, it is also possible to <insert> snippets into other snippets, provided that: a) there is only one level of nesting, and b) the <snippets> section is placed at the top of the file (before a nested snippet is inserted); this is because <insert> statements are resolved from top to bottom. <include> and <snippets> vs. <embed> At first glance, <include> and <snippets> provides functionality rather similar to embedding: It allows to reuse some portions of code across plugins. So what's the difference between these approaches, and when should you use which? The key difference between these concepts is that embeddable plugins are a more tight bundle. They combine a complete GUI, code to generate &r; code from this, and a help page. In contrast, include and insert allow much more fine grained control, but at the price of less modularity. That is, a plugin embedding another plugin will typically not need to know much about the internal details of the embedded plugin. A prime example is the plot_options plugin. Plugins wishing to embed this do not necessarily need to know about all the options provided, or how they are provided. This is a good thing, as otherwise a change in the plot_options plugin might make it necessary to adjust all plugins embedding this (a lot). In contrast, include and insert really exposes all the internal details, and plugins using this will -- for example -- need to know the exact ids and perhaps even the type of the elements used. Hence the rule of thumb is this: include and insert are great if the relevant options are only needed for a clearly limited group of plugins. Embedded plugins are better, if the group of plugins it may be useful to is not clearly defined, and if the functionality can easily be modularized. Another rule of thumb: If you can put the common portions into a single chunk, then do so, and use embedding. If you need lots of small snippets to define the common portions -- well, use <snippets>. A final way to look at it: If all plugins provide highly similar functionality, includes and inserts are probably a good idea. If they merely share one or two common modules, embedding is likely better. Concepts for use in specialized plugins This chapter contains information on some topics that are useful only to certain classes of plugins. Plugins than produce a plot Creating a plot from a plugin is easy to do. However, there are a few sublte gotchas to avoid, and also some great generic functionality that you should be aware of. This section shows you the basic concepts, and concludes with a canonical example that you should follow whenever creating plot plugins. Drawing a plot to the output window In order to draw a plot to the output window, use rk.graph.on() directly before creating the plot, and rk.graph.off(), directly afterwards. This is similar to e.g. callling postscript() and dev.off() in a regular R session. Importantly, however, you must always call rk.graph.off() after calling rk.graph.on(). Otherwise the output file will be left in a broken state. To ensure rk.graph.off() really gets called, you should wrap all R commands between the two calls in try() statement. Never heard of that? Don't worry, it's easy. All you need to do is follow the pattern shown in example, below. Adding preview functionality A very useful feature for all plugins generating a plot/graph is to provide an automatically updating preview. To do so, you will need two things: Adding a <preview> checkbox to your GUI definition, and adjusting the generated code for the preview. Adding a <preview> checkbox is simple. Just place the following somewhere in your GUI. It will take care of all the behind-the-scenes magic of creating a preview device, updaing the preview whenever the setting have changed, etc. Example: <document> [...] <dialog [...]> [...] <preview id="preview"/> [...] </dialog> [...] </document> And that's it for the GUI definition. Adjusting the JS template is a little more work. You will have to create a new function called preview() in addition to the preprocess(), calculate(), etc. functions. This function should generate the code needed to produce the plot, and only that. Esp. no printing of headers, rk.graphics.on(), or similar calls. See the example, below for the typical pattern that you will use. Generic plot options You will have noticed that most plotting plugins in RKWard provide a wide range of generic options e.g. for customizing axis titles or figure margins. Adding these options to your plugin is easy. They are provided by an embeddable plugin called rkward::plot_options. Embed this in your plugin UI like this: <document> [...] <logic [...]> <connect client="plotoptions.xvar" governor="x.available"/> <set id="plotoptions.allow_type" to="true"/> <set id="plotoptions.allow_ylim" to="true"/> <set id="plotoptions.allow_xlim" to="false"/> <set id="plotoptions.allow_log" to="false"/> <set id="plotoptions.allow_grid" to="true"/> </logic> <dialog [...]> [...] <embed id="plotoptions" component="rkward::plot_options" as_button="true" label="Plot Options"/> [...] </dialog> [...] </document> This will add a button to your UI to bring up a window with plot options. The logic section is just an example. It allows you some control over the plot options plugin. Read more in the plot_options plugin's help page (linked from the help page of any plugin providing the generic options). Next you need to make sure that the code corresponding to your plot options is added to the generated code for your plot. To do so, fetch the properties code.preprocess, code.printout, and code.calculate from the embedded plot options plugin, and insert them into your code as shown in the example, below. A canonical example Here's an example .JS file that you should use as a template, whenever you create a plotting plugin: function preprocess () { // the "somepackage" is needed to create the plot ecoh ("require (somepackage)\n"); } function printout () { // all the real work is moved to a custom defined function doPrintout (), below doPrintout (true); // in this case, 'true' means: We want all the headers that should be printed in the output, not just the preview } function preview () { // we call all stages of the general code. Only the printout () function needs to be slightly different for the plot preview preprocess (); // calculate (); // in this example, the plugin has no calculate () function. doPrintout (false); // in this case, 'false' means: Create the plot, but not any headers or other output. } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If "full" is set to true, // it generates the full code, including headers. If full is set to false, only the essentials will // be generated. if (full) { echo ('rk.header ("An example plot")\n\n'); echo ('rk.graph.on ()\n'); } // only the following section will be generated for full==false // remember: everything between rk.graph.on() and rk.graph.off() should be wrapped inside a try() statement: echo ('try ({\n'); // insert any option-setting code that should be run before the actual plotting commands. // The code itself is provided by the embedded plot options plugin. printIndentedUnlessEmpty() takes care of pretty formatting. printIndentedUnlessEmpty ('\t', getString ("plotoptions.code.preprocess"), '', '\n'); // create the actual plot. plotoptions.code.printout provides the part of the generic plot options // that have to be added to the plotting call, itself. echo ('plot (5, 5' + getString ("plotoptions.code.printout") + ')\n'); // insert any option-setting code that should be run after the actual plot. printIndentedUnlessEmpty ('\t', getString ("plotoptions.code.calculate"), '\n'); echo ('})'\n); // the closure of the try() statement if (full) { echo ('rk.graph.off ()\n'); } } Context-dependent plugins So far we have assumed, all plugins are always meaningful, and all placed in the main menu. However, some plugins are meaningful only (or additionally) in a certain context. For instance a plugin to export the contents of an &r; X11 graphics device is obviously most useful, when placed in the menu of an X11 device, not in the main menubar. Also, such a plugin should know about the device number that it should operate on, without having to ask the user about this. We call such plugins context-dependent. Correspondingly, in the &pluginmap; file, they are not (or not only) placed in the main <hierarchy> but rather into a <context> element. So far only two different contexts are supported (more will come later): x11 and file import. We'll deal with those in turn. Even if you are only interested in the import context, please also read the section on the x11 context, as this is slightly more elaborate. X11 device context To use a plugin in the context of an x11 device - that is place it in the menu bar of the window you get when you call x11() in the console, first declare it as usual in the &pluginmap; file: <document [...]> <components> [...] <component id="my_x11_plugin" file="my_x11_plugin.xml" label="An X11 context plugin"/> [...] </components> However, you do not need to define it in the hierarchy (you can, if it is also meaningful as a top-level plugin): <hierarchy> [...] </hierarchy> Instead, add a definition of the "x11" context, and add it to the menus there: <context id="x11"> [...] <menu id="edit"> [...] <entry id="my_x11_plugin"/> </menu> </context> </document> In the logic section of the plugin xml, you can now declare two <external> properties: devnum and context. context (if declared) will be set to "x11" when the plugin is invoked in this context. devnum will be set to the number of the graphics device to operate on. And that's all. Import data context Before reading this section, please make sure to read the section on the X11 device context, as that explains the basic concepts. The "import" context is used to declare import file filter plugins. You simply place those in a context with id="import" in the &pluginmap; file. However, there is one additional twist when declaring these plugins: In order to offer a unified file selection dialog for all supported file types, you need to declare one additional bit of information on your component: <document [...]> <components> [...] <component id="my_xyz_import_plugin" file="my_xyz_import_plugin.xml" label="Import XYZ files"> <attribute id="format" value="*.xyz *.zyx" label="XYZ data files"/> </component> [...] </components> <hierarchy> [...] </hierarchy> <context id="import"> [...] <menu id="import"> [...] <entry id="my_xyz_import_plugin"/> </menu> </context> [...] </document> The attribute line simply says, that the associate filename extensions for XYZ files are *.xyz or *.zyx, and that the filter should be labelled XYZ data files in the file selection dialog. You can declare two <external> properties in your plugin. filename will be set to the selected file name, and context will be set to "import". Referencing the current object For many plugins it is desirable to work on the current object. For instance a sort plugin could pre-select the data.frame that is currently being edited for sorting. The name of the current object is available to plugins as a pre-defined property called current_object. You can connect to this property in the usual way. If no object is current, the property equates to an empty string. Currently the current_object can only be of class data.frame, but please do not rely on this, since this will be extended to other types of data in the future. If you are interested in data.frame objects, only, connect to the current_dataframe property, instead. Alternatively, you can enforce type requirements by using appropriate constraints on your <varslot>s, or by using GUI logic scripting. Repeating (a set of) options Sometimes you want to repeat a set of options for an arbitrary number of items. E.g. suppose you want to implement a plugin for sorting a data.frame. You may want to allow for sorting by an arbitrary number of columns (in case of ties among the first column(s)). This could simply be realized by allowing the user to select multiple variables in a <varslot> with multi="true". But if you want to extend this, e.g. allowing the user to specify for each variable whether it should be converted to character / numeric, or whether sorting should be ascending or descending, you need more flexibility. Other examples would be plotting multiple lines in one plot (allowing to select object, line style, line color, etc. for each line), or specifying a mapping for recoding from a set of old values to new values. Enter the <optionset>. Let's look at a simple example, first: <dialog [...]> [...] <optionset id="set" min_rows="1"> <content> <frame> <optiondisplay index="true"/> <row> <input id="firstname" label="Given name(s)" size="small"> <input id="lastname" label="Family name" size="small"> <radio id="gender" label="Gender"> <optioncolumn label="Male" value="m"/> <optioncolumn label="Female" value="f"/> </radio> </row> </frame> </content> <optioncolumn id="firstnames" label="Given name(s)" connect="firstname.text"> <optioncolumn id="lastnames" label="Family name" connect="lastname.text"> <optioncolumn id="gender" connect="gender.string"> </optionset> [...] </dialog> Here, we created a UI for specifying a number of persons (e.g. authors). The UI requires at least one entry (min_rows="1"). Inside the <optionset>-element, we begin by specifying the <content>, i.e. those elements that belong to the option set. You will be familiar with most elements inside the <content>. The <optiondisplay> is a special element for use in option sets. It lists the current items, allows the user to switch between items, to add or to remove entries. index="true" means that we want an extra column in the list, showing an index (number) of each item. Next we specify the variables of interest that we will want to read from the option set in our JS file. As we will be dealing with an arbitrary number of items, we cannot just read getString ("firstname") in JS. Rather, for each value of interest, we specify an <optioncolumn>. For the first optioncolumn in the example, <connect="firstname.text"> means that the content of the <input> element "firstname" is read for each item. <optioncolumn>s for which a label is given, will be shown in the <optiondisplay>, in a column by that label. In JS, we can now fetch the first names for all authors using getList("set.firstname"), getList("set.lastnames") for the family names, and getList("set.gender") for an array of "m"/"f" strings. Note that there are no restrictions on what you can place inside an <optionset>. You can even use embedded components. Just as with any other element, all you have to do is to collect the output variables of interest in an <optioncolumn>-specification. In the case of embedded plugins, this is often a section of the "code" property. E.g.: <dialog [...]> [...] <optionset id="set" min_rows="1"> <content> [...] <embed id="color" component="rkward::color_chooser" label="Color"/> </content> [...] <optioncolumn id="color_params" connect="color.code.printout"> </optionset> [...] </dialog> Of course you can also use UI logic inside an optionset. There are two options for doing this: You can do so by making connection (or scripting) in the main <logic> section of your plugin, as usual. However, you will access the UI elements in the contents region as (e.g.) "set.contents.firstname.XYZ". Note the prefix "set" (the id you have assigned to the set and "contents". Alternatively, you can add a separate <logic> section as a child element of your <optionset>. In this case, ids will be addressed relative to the contents region, e.g. "firstname.XYZ". Only the <script>-element is not allowed in the logic section of an optionset. If you want to use scripting, you will have to utilize the plugin's main <logic> section. When scripting logic in an optionset, all you can do is access the current content region. Thus, typically, it is only meaningful to connect elements inside the contents region to each other. Connecting a property outside the <optionset> to a property inside the content region, may be useful for initialization. However, modifying the contents region after initialzation will not apply to items that the user has already defined. Only to the currently selected item in the set. "Driven" optionsets So far we have considered an <optionset> that provides buttons for adding / removing items. However, in some cases, it is much more natural to select items outside the <optionset>, and only provide options for customizing some aspects of each item in an <optionset>. E.g. suppose you want to allow the user to plot several objects inside one plot. For each object, the user should be able to specify line color. You could solve this by placing a <varselector> and <varslot> inside the <content> area, allowing the user to select one item at a time. However, it will mean much less clicks for the user, if you use a <varslot multi="true"> outside the <optionset>, instead. Then you will connect this selection of objects to a so-called "driven" optionset. Here's how: <dialog [...]> <logic> <connect client="set.vars" governor="vars.available"/> <connect client="set.varnames" governor="vars.available.shortname"/> </logic> [...] <varselector id="varsel"/> <varslot id="vars" label="Objects to plot"/> <optionset id="set" keycolumn="var"> <content> <optiondisplay/> [...] <embed id="color" component="rkward::color_chooser" label="Line color"/> </content> [...] <optioncolumn id="vars" external="true"> <optioncolumn id="varnames" external="true" label="Variable"> <optioncolumn id="color_params" connect="color.code.printout"> </optionset> [...] </dialog> We'll start looking at the example at the bottom. You'll note that two <optioncolumn> specifications have external="true". This tells &rkward; that these are controlled from outside the <optionset>. Here, the sole purpose of the "varnames"-optioncolumn is to provide easy-to-read labels in the <optiondisplay> (it is connected to the "shortname" modifier of the property holding the selected objects). The purpose of the "vars"-optioncolumn is to serve as the "key" column, as specified by <optionset keycolumn="vars"...>. This means that for each entry in this list, the set will offer one set of options, and options are logically tied to these entries. This column is connected to the property holding the selected objects in the <varslot>. I.e. for each object that is selected there, the <optionset> will allow to specify line color. External column can also be connected to properties inside the <content> region. However, it is important to note that optioncolumns declared external="true" should never be modified from inside the <optionset>, and optioncolumns declared external="false" (the default) should never be modified from outside the <optionset>. Alternatives: When not to use optionsets Optionsets are a powerful tool, but they can sometimes do more harm than good, as they add considerable complexity, both from the perspective of a plugin developer, and from the perspective of a user. Thus, think twice, when using them. Here's some adivce: For some simple cases, the <matrix> element may provide a useful lightweight alternative. Don't make your plugin do too much. We gave the example of using an optionset for a plugin to draw several lines within one plot. But in general it is not a good idea to create a plugin that will produce individual plots for each item in an optionset. Rather make the plugin produce one plot, and the user can call it multiple times. If you don't expect more than two or three items in a set, consider repeating the options, manually, instead. Handling dependencies and compatibility issues &rkward; version compatibility We do our best to make sure that plugins developed for an old version of &rkward; will remain functional in later versions of &rkward;. However, the reverse is not always true as new features are been added. Since not all users are running the latest version of &rkward;, this means your plugin may not work for everybody. When you are aware of such compatibility issues, you should make sure to document this fact in your &pluginmap; file, using the <dependencies> element. The <dependencies> can either be specified as a direct child of the &pluginmap;'s <document> element, or as a child element of individual <component> definitions. In the first case, the dependencies apply to all plugins in the map. In the latter case only to the individual <component>(s). You can also mix top "global" and "specific" dependencies. In this case the "global" dependencies are added to those of the individual component. Let's look at a small example: <document ...> <dependencies rkward_min_version="0.5.0c" /> <components ...> <component id="myplugin" file="reduced_version_of_myplugin.xml" ...> <dependencies rkward_max_version="0.6.0z" /> </component> <component id="myplugin" file="fancy_version_of_myplugin.xml" ...> <dependencies rkward_min_version="0.6.1" /> </component> ... x </components ...> </document> In this example, all plugins are known to require at least version 0.5.0c of &rkward;. One plugin, with id="myplugin" is provided in two alternative variants. The first, stripped down, version will be used for &rkward; versions before 0.6.1. The latter utilizes features that are new in &rkward; 0.6.1, and will only be used from &rkward; 0.6.1 onwards. Providing alternative variants like this is a very user friendly way to make use of new features, while still keeping support for earlier versions of &rkward;. Alternative versions should share the same id (warnings will be produced, otherwise), and may only be defined within the same &pluginmap; file. Plugin which are not compatible with the running version of &rkward;, and which do not come with an alternative version will be ignored with a warning. Actually &rkward; 0.6.1 is the first version to interpret dependencies - and to report dependency errors - at all. Thus, contrary to what the example may suggest, specifying any earlier versions in the dependencies will not have any direct effect (but may still be a good idea for documentation purposes). Sometimes it will even be possible to handle version incompatibility issues inside a single &pluginmap; file, using the <dependency_check> element, described in the following section. &r; version compatibility Similar to rkward_min_version and rkward_max_version, the <dependencies> element allows specification of the attributes R_min_version and R_max_version. However, there are the following differences: Plugins which fail to meet the &r; version requirement are not currently skipped when reading a &pluginmap; file. The user can still call the plugin, and will not see any immediate warning (in future versions, a warning message will probably be shown) In consequence it is also not possible to define alternative versions of a plugin depending on the running version of &r;. However, it is often easy to achieve backwards compatibility as shown below. If you are aware of &r; compatibility issues, please consider using this method, instead of defining a dependency on a particular version of &r;. In many cases, it is easily possible to provide reduced functionality, if a certain feature is not available in the running version of &r;. Consider the following short example of a plugin .xml file: <dialog [...]> <logic> <dependency_check id="ris210" R_min_version="2.10.0"/> <connect client="compression.xz.enabled" governor="ris210"/> </logic> [...] <radio id="compression" label="Compression method"> <option label="None" value=""> <option label="gzip" value="gzip"> <option id="xz" label="xz" value="xz"> </radio> [...] </dialog> In this example the compression option "xz" will simply be disabled when the &r; runtime version is older than 2.10.0 (which did not support xz compression). The <dependency_check> element supports the same attributes as the <dependencies> element in &pluginmap; files. It creates a boolean property, which is true, if the specified dependencies are met, false otherwise. Dependencies on &r; packages Dependencies on specific &r; packages can be defined, but as of &rkward; 0.6.1, these dependencies are neither checked, nor installed / loaded, automatically. They are shown in the plugin help files, however. Here is an example definition: <dependencies> <package name="heisenberg" min_version="0.11-2" repository="http://rforge.r-project.org" /> </dependencies> Always make sure to add appropriate require() calls, if you plugin needs certain packages to be loaded. If you distribute your &pluginmap; as an &r; package, and all plugins depend on a particular package, then you should define that dependency on the &r; package level. Defining dependencies to &r; packages on the level of the &rkward; &pluginmap; is most useful, if only some of your plugins need the dependency, the dependency is not available from CRAN, or your &pluginmap; is not distributed as an &r; package. Dependencies on other &rkward; &pluginmap;s If your plugins depend on plugins defined in another &pluginmap; (that is not part of your package) you can define this dependency like this: <dependencies> <pluginmap name="heisenberg_plugins" url="http://eternalwondermaths.example.org/hsb" /> </dependencies> Currently will neither load, nor install, nor even warn about missing &pluginmap;s, but at least information on dependencies (and where to obtain them) will be shown on the plugin's help page. You do not have to (and you should not) declare dependencies on &pluginmap;s that are shipped with the offical &rkward; distribution, or on &pluginmap;s that are inside your own package. Further, if a required &pluginmap; is distributed as an &r; package, declare a dependency of the package (as shown in the previous section), rather than on the map. To make sure that required &pluginmap;s are actually loaded, use the <require>-tag (refer to the reference for details). An example To clarify how dependency definitions can be mixed, here's a combined example: <document ...> <dependencies rkward_min_version="0.5.0c"> <package name="heisenberg" min_version="0.11-2" repository="http://rforge.r-project.org" /> <package name="DreamsOfPi" min_version="0.2" /> <pluginmap name="heisenberg_plugins" url="http://eternalwondermaths.example.org/hsb" /> <dependencies> <require map="heisenberg::heisenberg_plugins"/> <components ...> <component id="myplugin" file="reduced_version_of_myplugin.xml" ...> <dependencies rkward_max_version="0.6.0z" /> </component> <component id="myplugin" file="fancy_version_of_myplugin.xml" ...> <dependencies rkward_min_version="0.6.1" /> </component> ... x </components ...> </document> Author, license and version information So you have written a set of plugins, and you are getting ready to share your work. To make sure users will know what your work is all about, under what terms they can use and distribute it, and whom they should contact about issues or ideas, you should add some information about your plugins. This can be done using the <about> element. It can be used in either the &pluginmap; or in individual plugin .xml files (in both cases as a direct child of the document tag). When specified in the &pluginmap; it will apply to all plugins. If <about> is specified in both places, the <about> information in the plugin .xml file will override that in the &pluginmap; file. You can also add an <about> element to .rkh-pages, which are not connected to a plugin, if there is a need for that. Here's an example &pluginmap; file with only a few explanations, below. In cases of doubt, more information may be available from the reference. <document namespace="rkward" id="SquaretheCircle_rkward" > <about name="Square the Circle" shortinfo="Squares the circle using Heisenberg compensation." version="0.1-3" releasedate="2011-09-19" url="http://eternalwondermaths.example.org/23/stc.html" license="GPL" category="Geometry" > <author given="E.A." family="Dölle" email="doelle@eternalwondermaths.example.org" role="aut" /> <author given="A." family="Assistant" email="alterego@eternalwondermaths.example.org" role="cre, ctb" /> </about> <dependencies> ... </dependencies> <components> ... </components> <hierarchy> ... </hierarchy> </document> Most of this should explain itself, so we’ll not discuss each and every tag element. But let’s look at some details that probably need some commentary for easier understanding. The category element in <about> can be defined rather freely, but should be meaningful, as it’s thought to be used to order plugins into groups. All other attributes in this opening tag are mandatory and must be filled with reasonable content. At least one <author> with a valid e-mail address and the role aut (author) must also be given. In case your plugin causes problems or someone would like to share its gratitude with you, it should be easy to contact someone who’s involved. For further information on other valid roles, like ctb for code contributors or cre for package maintenance, please refer to the R documentation on person(). Remember that you can use <include> and / or <insert> to repeat information across several .xml files (e.g. information on an author who was involved with several plugins). More information. You don't have to write this XML code by hand. If you use the function rk.plugin.skeleton() from the rkwarddev package and provide all necessary information via the about option, it will automatically create a &pluginmap; file with a working <about> section for you. Share your work with others External plugins As of version 0.5.5, &rkward; provides a comfortable way to install additional third party plugins which do not belong to the core package itself. We call these external plugins. They come in form of an &r; package and can be managed directly via the usual package management features of &r; and/or &rkward;. This section of the documentation describes how external plugins are to be packaged, so that &rkward; can use them. The plugin creation itself is of course identical to the previous sections. That is, you should probably first write a working plugin, and then check back here to learn how to distribute it. Since external plugins are a relatively young feature, details of this might probably change in future releases. You’re welcome to contribute your ideas to improve the process. These docs explain the details of external plugins so you can learn how they work. In addition to that, also have a look at the rkwarddev package, which was designed to automate a lot of the writing process. Why external plugins? The number of packages to extend the functionality of &r; is immense already, and climbing. On one hand, we want to encourage you to write plugins for even the most specialised tasks you need solved. On the other hand, the average user should not get lost in huge menu trees full of unknown statistical terms. Therefore it seemed reasonable to keep the plugin handling in &rkward; quite modular as well. The &rkward; team maintains its own public package repository at http://rkward.sf.net/R, designated to host your external plugins. As a rule of thumb, plugins that seem to serve a widely used purpose (e.g. t-Tests) should become part of the core package, while those who serve a rather limited group of people with special interests should be provided as an optional package. For you as a plugin author it’s best practice to just start with an external plugin. Structure of a plugin package For external plugins to install and work properly, they must follow some structural guidelines regarding their file hierarchy. File hierarchy Lets have a look at the prototypic file hierarchy of an elaborate plugin archive. You don’t have to include all of these directories and/or files for a plugin to work (read on to learn what’s absolutely necessary), consider this a best practice example: plugin_name/ inst/ rkward/ plugins/ plugin_name.xml plugin_name.js plugin_name.rkh ... tests/ testsuite_name/ RKTestStandards.sometest_name.rkcommands.R RKTestStandards.sometest_name.rkout ... testsuite.R plugin_name.pluginmap ... ChangeLog README AUTHORS LICENSE DESCRIPTION In this example, all occasions of plugin_name, testsuite_name and sometest_name are to be replaced with their correct names, accordingly. You don't have to create this file hierarchy by hand. If you use the function rk.plugin.skeleton() from the rkwarddev package, it will automatically create all necessary files and directories for you. Basic plugin components It is mandatory to include at least three files: a &pluginmap;, a plugin .xml description and a plugin .js file. That is, even the "plugins" directory is optional. It might just help to give your files some order, especially if you include more that one plugin/dialog in the archive, which is of course no problem. You can have as many directories for the actual plugin files as you see fit, they just have to resemble the &pluginmap;, respectively. It is also possible to even include several &pluginmap; files, if it fits your needs, but you should include them all in plugin_name.pluginmap then. Each &r; package must have a valid DESCRIPTION file, which is also crucial for &rkward; recognizing it as a plugin provider. Most of the information it carries is also needed in the plugin Meta-information and possibly dependencies, but in a different format (the &r; documentation explains the DESCRIPTION file in detail). In addition to the general contents of a DESCRIPTION file, make sure to also include the line Enhances: rkward. This will cause &rkward; to automatically scan the package for plugins if it is installed. An example DESCRIPTION file looks like this: Package: SquaretheCircle Type: Package Title: Square the circle Version: 0.1-3 Date: 2011-09-19 Author: E.A. Dölle <doelle@eternalwondermaths.example.org> Maintainer: A. Assistant <alterego@eternalwondermaths.example.org> Enhances: rkward Description: Squares the circle using Heisenberg compensation. License: GPL LazyLoad: yes URL: http://eternalwondermaths.example.org/23/stc.html Authors@R: c(person(given="E.A.", family="Dölle", role="aut", email="doelle@eternalwondermaths.example.org"), person(given="A.", family="Assistant", role=c("cre", "ctb"), email="alterego@eternalwondermaths.example.org")) You don't have to write this file by hand. If you use the function rk.plugin.skeleton() from the rkwarddev package and provide all necessary information via the about option, it will automatically create a working DESCRIPTION file for you. Additional information (optional) ChangeLog, README, AUTHORS, LICENSE should be self-explaining and are entirely optional. Actually, they won’t be interpreted by &rkward;, so they are rather meant to carry additional information that might be relevant e.g. for distributors. Most of their relevant content (author credits, licence terms etc.) will be included in the actual plugin files anyway, though (see the section on meta-information). Note that all of these files could also be placed somewhere in the "inst" directory, if you want them not only to be present in the source archive but the installed package as well. Automated plugin testing (optional) Another optional directory is "tests", which is meant to provide files needed for automated plugin testing. These tests are helpful to quickly check if your plugins still work with new versions of &r; or &rkward;. If you want to include tests, you should really restrain yourself to the naming scheme and hierarchy shown here. That is, tests should reside in a directory called tests, which includes a file testsuite.R and a folder with tests standards named after the appropriate test suite. You can, however, provide more than one test suite; in that case, if you don’t want to append them all in the one testsuite.R file, you can split them in e.g. one file for each test suite and create one testsuite.R with source() calls for each suite file. In either case, create separate subdirectories with test standards for each defined suite. The benefits of upholding to this structure is that plugin tests can be run simply by calling rktests.makplugintests() from the rkwardtests package without additional arguments. Have a look at the online documentation on Automated Plugin Testing for further details. Building the plugin package As explained earlier, external &rkward; plugins are in effect &r; packages, and therefore the packaging process is identical. In contrast to "real" &r; packages, a pure plugin package doesn't carry any further &r; code (although you can of course add &rkward; plugins to usual &r; packages as well, using the same methods explained here). This should make it even easier to create a functioning package, as long as you have a valid DESCRIPTION file and adhere to the file hierarchy explained in previous sections. The easiest way to actually build and test your plugin is to use the R command on the command line, for example: R SquaretheCircle R SquaretheCircle_0.1-3.tar.gz You don't have to build the package like this on the command line. If you use the function rk.build.package() from the rkwarddev package, it will build and/or check your plugin package for you. Plugin development with the <application>rkwarddev</application> package Overview Writing external plugins involves writing files in three languages (XML, JavaScript and R) and the creation of a standardized hierarchy of directories. To make this a lot easier for willing plugin developers, we're providing the rkwarddev package. It provides a number of simple &r; functions to create the XML code for all dialog elements like tabbooks, checkboxes, dropdownlists or filebrowsers, as well as functions to create JavaScript code and &rkward; help files to start with. The function rk.plugin.skeleton() creates the expected directory tree and all necessary files where they are supposed to be. This package is not installed by default, but has to be installed manually from &rkward;'s own repository. You can either do that by using the GUI interface (SettingsConfigure packages), or from any running &r; session: install.packages("rkwarddev", repos="http://rkward.sf.net/R") library(rkwarddev) rkwarddev depends on another small package called XiMpLe, which is a very simple XML parser and generator and also present in the same repository. The full documentation in PDF format can also be found there. A more detailed introduction to working with the package can be found in the rkwarddev vignette. Practical example To get you an idea how scripting a plugin looks like, compared to the direct approach you have seen in the previous chapters, we'll create the full t-test plugin once again -- this time only with the &r; functions of the rkwarddev package. The package will add a new GUI dialog to &rkward; under FileExportCreate &rkward; plugin skeleton. Like the name suggests, you can create plugin skeletons for further editing with it. This dialog itself was in turn generated by an rkwarddev script which you can find in the demo directory of the installed package and package sources, as an additional example. You can also run it by calling demo("skeleton_dialog") GUI description You will imediately notice that the workflow is considerably different: Contrary to writing the XML code directly, you do not begin with the <document> definition, but directly with the plugin elements you'd like to have in the dialog. You can assign each interface element -- be it checkboxes, dropdown menus, variable slots or anything else -- to individual &r; objects, and then combine these objects to the actual GUI. The package has functions for each XML tag that can be used to define the plugin GUI, and most of them even have the same name, only with the prefix rk.XML.*. For example, defining a <varselector> and two <varslot> elements for the "x" and "y" variable of the t-test example can be done by: variables <- rk.XML.varselector(id.name="vars") var.x <- rk.XML.varslot("compare", source=variables, types="number", required=TRUE, id.name="x") var.y <- rk.XML.varslot("against", source=variables, types="number", required=TRUE, id.name="y") The most interesting detail is probably source=variables: A prominent feature of the package is that all functions can generate automatic IDs, so you don't have to bother with either thinking of id values or remembering them to refer to a specific plugin element. You can simply give the &r; objects as reference, as all functions who need an ID from some other element can also read it from these objects. rk.XML.varselector() is a little special, as it usually has no specific content to make an ID from (it can, but only if you specify a label), so we have to set an ID name. But rk.XML.varslot() wouldn't need the id.name arguments here, so this would suffice: variables <- rk.XML.varselector(id.name="vars") var.x <- rk.XML.varslot("compare", source=variables, types="number", required=TRUE) var.y <- rk.XML.varslot("against", source=variables, types="number", required=TRUE) In order to recreate the example code to the point, you'd have to set all ID values manually. But since the package shall make our lives easier, from now on we will no longer care about that. If you want to see how the XML code of the defined element looks like if you exported it to a file, you can just call the object by its name. So, if you now called var.x in your &r; session, you should see something like this: <varslot id="vrsl_compare" label="compare" source="vars" types="number" required="true" /> Some tags are only useful in the context of others. Therefore, for instance, you won't find a function for the <option> tag. Instead, both radio buttons and dropdown lists are defined including their options as a named list, where the names represent the labels to be shown in the dialog, and their value is a named vector which can have two entries, val for the value of an option and the boolean chk to specify if this option is checked by default. test.hypothesis <- rk.XML.radio("using test hypothesis", options=list( "Two-sided"=c(val="two.sided"), "First is greater"=c(val="greater"), "Second is greater"=c(val="less") ) ) The result looks like this: <radio id="rad_usngtsth" label="using test hypothesis"> <option label="Two-sided" value="two.sided" /> <option label="First is greater" value="greater" /> <option label="Second is greater" value="less" /> </radio> All that's missing from the elements of the Basic settings tab is the checkbox for paired samples, and the structuring of all of these elements in rows and columns: check.paired <- rk.XML.cbox("Paired sample", value="1", un.value="0") basic.settings <- rk.XML.row(variables, rk.XML.col(var.x, var.y, test.hypothesis, check.paired)) rk.XML.cbox() is a rare exception where the function name does not contain the full tag name, to save some typing for this often used element. This is what basic.settings now contains: <row id="row_vTFSPP10TF"> <varselector id="vars" /> <column id="clm_vrsTFSPP10"> <varslot id="vrsl_compare" label="compare" source="vars" types="number" required="true" /> <varslot id="vrsl_against" label="against" source="vars" types="number" required="true" /> <radio id="rad_usngtsth" label="using test hypothesis"> <option label="Two-sided" value="two.sided" /> <option label="First is greater" value="greater" /> <option label="Second is greater" value="less" /> </radio> <checkbox id="chc_Pardsmpl" label="Paired sample" value="1" value_unchecked="0" /> </column> </row> In a similar manner, the next lines will create &r; objects for the elements of the Options tab, introducing functions for spinboxes, frames and stretch: check.eqvar <- rk.XML.cbox("assume equal variances", value="1", un.value="0") conf.level <- rk.XML.spinbox("confidence level", min=0, max=1, initial=0.95) check.conf <- rk.XML.cbox("print confidence interval", val="1", chk=TRUE) conf.frame <- rk.XML.frame(conf.level, check.conf, rk.XML.stretch(), label="Confidence Interval") Now all we need to do is to put the objects together in a tabbook, and place that in a dialog section: full.dialog <- rk.XML.dialog( label="Two Variable t-Test", rk.XML.tabbook(tabs=list("Basic settings"=basic.settings, "Options"=list(check.eqvar, conf.frame))) ) We can also create the wizard section with its two pages using the same objects, so their IDs will be extracted for the <copy> tags: full.wizard <- rk.XML.wizard( label="Two Variable t-Test", rk.XML.page( rk.XML.text("As a first step, select the two variables you want to compare against each other. And specify, which one you theorize to be greater. Select two-sided, if your theory does not tell you, which variable is greater."), rk.XML.copy(basic.settings)), rk.XML.page( rk.XML.text("Below are some advanced options. It's generally safe not to assume the variables have equal variances. An appropriate correction will be applied then. Chosing \"assume equal variances\" may increase test-strength, however."), rk.XML.copy(check.eqvar), rk.XML.text("Sometimes it's helpful to get an estimate of the confidence interval of the difference in means. Below you can specify whether one should be shown, and which confidence-level should be applied (95% corresponds to a 5% level of significance)."), rk.XML.copy(conf.frame))) That's it for the GUI. The global document will be combined in the end by rk.plugin.skeleton(). JavaScript code Until now, using the rkwarddev package might not seem to have helped so much. This is going to change right now. First of all, just like we didn't have to care about IDs for elements when defining the GUI layout, we don't have to care about JavaScript variable names in the next step. If you want more control, you can write plain JavaScript code and have it pasted to the generated file. But it's probably much more efficient to do it the rkwarddev way. Most notably you don't have to define any variable yourself, as rk.plugin.skeleton() can scan your XML code and automatically define all variables you will probably need -- for instance, you wouldn't bother to include a checkbox if you don't use its value or state afterwards. So we can start writing the actual &r; code generating JS immediately. The function rk.JS.scan() can also scan existing XML files for variables. The package has some functions for JS code constructs that are commonly used in &rkward; plugins, like the echo() function or if() {...} else {...} conditions. There are some differences between JS and R, e.g., for paste() in &r; you use the comma to concatenate character strings, whereas for echo() in JS you use +, and lines must end with a semicolon. By using the &r; functions, you can almost forget about these differences and keep writing &r; code. These functions can take different classes of input objects: Either plain text, &r; objects with XML code like above, or in turn results of some other JS functions of the package. In the end, you will always call rk.paste.JS(), which behaves similar to paste(), but depending on the input objects it will replace them with their XML ID, JavaScript variable name or even complete JavaScript code blocks. For the t-test example, we need two JS objects: One to calculate the results, and one to print them in the printout() function: JS.calc <- rk.paste.JS( echo("res <- t.test (x=", var.x, ", y=", var.y, ", hypothesis=\"", test.hypothesis, "\""), ite(id(check.paired), echo(", paired=TRUE")), ite(id("!", check.paired, " && ", check.eqvar), echo(", var.equal=TRUE")), ite(id(conf.level, " != \"0.95\""), echo(", conf.level=", conf.level)), echo(")\n"), level=2) JS.print <- rk.paste.JS(echo("rk.print (res)\n"), level=2) As you can see, rkwarddev also provides an &r; implementation of the echo() function. It returns exactly one character string with a valid JS version of itself. You might also notice that all of the &r; objects here are the ones we created earlier. They will automatically be replaced with their variable names, so this should be quite intuitive. Whenever you need just this replacement, the function id() can be used, which also will return exactly one character string from all the objects it was given (you could say it behaves like paste() with a very specific object substitution). The function name ite() is an abbreviation for if, then, else, and these three conditional statements are exactly what its three optional arguments are for -- although our example only uses two, so we're dealing with three if, then conditions here. Maybe it's best to just look at the above JS.calc object, which now contains a character string with this content: echo("res <- t.test (x=" + vrslCompare + ", y=" + vrslAgainst + ", hypothesis=\"" + radUsngtsth + "\""); if(chcPardsmpl) { echo(", paired=TRUE"); } else {} if(!chcPardsmpl && chcAssmqlvr) { echo(", var.equal=TRUE"); } else {} if(spnCnfdnclv != "0.95") { echo(", conf.level=" + spnCnfdnclv); } else {} echo(")\n"); Plugin map This section is very short: We don't need to write a &pluginmap; at all, as it can be generated automatically by rk.plugin.skeleton(). The menu hierarchy can be specified via the pluginmap option: [...] pluginmap=list( name="Two Variable t-Test", hierarchy=list("analysis", "means", "t-Test")) [...] Help page This section is very short as well: rk.plugin.skeleton() can't write a whole help page from the information it has. But it can scan the XML document also for elements which probably deserve a help page entry, and automatically create a help page template for our plugin. All we have to do afterwards is to write some lines for each listed section. The function rk.rkh.scan() can also scan existing XML files to create a help file skeleton. Generate the plugin files Now comes the final step, in which we'll hand over all generated objects to rk.plugin.skeleton(): plugin.dir <- rk.plugin.skeleton("t-Test", xml=list( dialog=full.dialog, wizard=full.wizard), js=list( results.header="\"Two Variable t-Test\"", calculate=JS.calc, printout=JS.print), pluginmap=list( name="Two Variable t-Test", hierarchy=list("analysis", "means", "t-Test")), load=TRUE, edit=TRUE, show=TRUE) The files will be created in a temporal directory by default. The last three options are not necessary, but very handy: load=TRUE will automatically add the new plugin to &rkward;s configuration (since it's in a temp dir and hence will cease to exist when &rkward; is closed, it will automatically be removed again by &rkward; during its next start), edit=TRUE will open all created files for editing in &rkward; editor tabs, and show=TRUE will attempt to directly launch the plugin, so you can examine what it looks like without a klick. You might consider adding overwrite=TRUE if you're about to run your script repeatedly (e.g. after changes to the code), as by default no files will be overwritten. The result object plugin.dir contains the path to the directory in which the plugin was created. This can be useful in combination with the function rk.build.package(), to build an actual &r; package to share your plugin with others -- e.g. by sending it to the &rkward; development team to be added to our plugin repository. The full script To recapitulate all of the above, here's the full script to create the working t-test example. Adding to the already explained code, it also loads the package if needed, and it uses the local() environment, so all the created objects will not end up in your current workspace (except for plugin.dir): require(rkwarddev) local({ variables <- rk.XML.varselector(id.name="vars") var.x <- rk.XML.varslot("compare", source=variables, types="number", required=TRUE) var.y <- rk.XML.varslot("against", source=variables, types="number", required=TRUE) test.hypothesis <- rk.XML.radio("using test hypothesis", options=list( "Two-sided"=c(val="two.sided"), "First is greater"=c(val="greater"), "Second is greater"=c(val="less") ) ) check.paired <- rk.XML.cbox("Paired sample", value="1", un.value="0") basic.settings <- rk.XML.row(variables, rk.XML.col(var.x, var.y, test.hypothesis, check.paired)) check.eqvar <- rk.XML.cbox("assume equal variances", value="1", un.value="0") conf.level <- rk.XML.spinbox("confidence level", min=0, max=1, initial=0.95) check.conf <- rk.XML.cbox("print confidence interval", val="1", chk=TRUE) conf.frame <- rk.XML.frame(conf.level, check.conf, rk.XML.stretch(), label="Confidence Interval") full.dialog <- rk.XML.dialog( label="Two Variable t-Test", rk.XML.tabbook(tabs=list("Basic settings"=basic.settings, "Options"=list(check.eqvar, conf.frame))) ) full.wizard <- rk.XML.wizard( label="Two Variable t-Test", rk.XML.page( rk.XML.text("As a first step, select the two variables you want to compare against each other. And specify, which one you theorize to be greater. Select two-sided, if your theory does not tell you, which variable is greater."), rk.XML.copy(basic.settings)), rk.XML.page( rk.XML.text("Below are some advanced options. It's generally safe not to assume the variables have equal variances. An appropriate correction will be applied then. Chosing \"assume equal variances\" may increase test-strength, however."), rk.XML.copy(check.eqvar), rk.XML.text("Sometimes it's helpful to get an estimate of the confidence interval of the difference in means. Below you can specify whether one should be shown, and which confidence-level should be applied (95% corresponds to a 5% level of significance)."), rk.XML.copy(conf.frame))) JS.calc <- rk.paste.JS( echo("res <- t.test (x=", var.x, ", y=", var.y, ", hypothesis=\"", test.hypothesis, "\""), ite(id(check.paired), echo(", paired=TRUE")), ite(id("!", check.paired, " && ", check.eqvar), echo(", var.equal=TRUE")), ite(id(conf.level, " != \"0.95\""), echo(", conf.level=", conf.level)), echo(")\n"), level=2) JS.print <- rk.paste.JS(echo("rk.print (res)\n"), level=2) plugin.dir <<- rk.plugin.skeleton("t-Test", xml=list( dialog=full.dialog, wizard=full.wizard), js=list( results.header="\"Two Variable t-Test\"", calculate=JS.calc, printout=JS.print), pluginmap=list( name="Two Variable t-Test", hierarchy=list("analysis", "means", "t-Test")), load=TRUE, edit=TRUE, show=TRUE, overwrite=TRUE) }) Reference Types of properties/Modifiers At some places in this introduction we've talked about properties of GUI elements or otherwise. In fact there are several different types of properties. Usually you do not need to worry about this, as you can use common sense to connect any property to any other property. However, internally, there are different types of properties. What this matters for, is when fetching some special values in the JS-template. In getString ("id")/getBoolean ("id")/getList ("id") statements you can also specify some so called modifiers like this: getString ("id.modifier"). This modifier will affect, in which way the value is printed. Read on for the list of properties, and the modifiers they each make available: String properties The most simple type of property, used to simply hold a piece of text. It does not provide any modifiers. If you attempt to fetch modified values from the JS template, it will return the usual value, and a warning will be written to the terminal you're running rkward from. Boolean properties Properties that can either be on or off, true or false. For instance the properties created by <convert>-tags, also the property accompanying a <checkbox> (see below). The following values will be returned according to the given modifier: No modifier ("") By default the property will return 1 if it is true, and 0 otherwise. The recommended way to fetch boolean values is using getBoolean(). Note that for getString(), the string "0" will be returned when teh property is false. This string would evaluate to true, not to false in JS. "labeled" Returns the string "true" when true, "false", when false, or whichever custom strings have been specified (typically in a <checkbox>). "true" Return the string as if the property was true, even if it is false "false" Return the string as if the property was false, even if it is true "not" This actually returns another Boolean property, which is the reverse of the current (i.e. false if true, true if false) "numeric" Obsolete, provided for backwards compatibility. Same as no modifier "". Return "1" if the property is true, or "0" if it is false. Integer properties A property designed to hold an integer value (but of course it still returns a numeric character string to the JS-template). It does not accept any modifiers. Used in <spinbox>es (see below) Real number properties A property designed to hold a real number value (but of course it still returns a numeric character string to the JS-template). Used in <spinbox>es (see below) No modifier ("") For getValue() / getString(), this returns the same as "formatted". In future versions, it will be possible to obtain a numeric represenation, instead. "formatted" Returns the formatted number (as a string). RObject properties A property designed a selection of one or more &r; objects. Used most prominently in varselectors and varslots. The following values will be returned according to the given modifier: No modifier ("") By default the property will the full name of the selected object. If more than one object is selected, the object names will be separated by line breaks ("\n"). "shortname" Like above, but returns only short name(s) for the object(s). For instance an object inside a list would only be given the name it has inside the list, without the name of the list. "label" Like above, but returns the &rkward; label(s) of the object(s) (if no label availabe, this is the same as shortname) String list properties This property holds a list of strings. No modifier ("") For getValue()/getString(), this returns all strings separated by "\n". Any "\n" characters in each item are escaped as literal "\n". However, the recommended usage is to fetch the value with getList(), instead, which will return an array of strings. "joined" Returns the list as a single string, with items joined by "\n". In contrast to no modifier (""), the individual strings are _not_ esacped. Code properties A property held by plugins that generated code. This is important for embedding plugins, in order to embed the code generated by the embedded plugin into the code generated by the embedding (top-level) plugin. The following values will be returned according to the given modifier: No modifier ("") Returns the full code, i.e. the sections "preprocess", "calculate", "printout", and (but not "preview") concatenated to one string. "preprocess" Returns only the preprocess section of the code "calculate" Returns only the calculate section of the code "printout" Returns only the printout section of the code "preview" Returns the preview section of the code General purpose elements to be used in any XML file (<literal role="extension">.xml</literal>, <literal role="extension">.rkh</literal>, &pluginmap;) <snippets> Allowed as a direct child of the <document> node and only there. Should be placed near the top of the file. See section on using snippets. Only one <snippets> element may be present. Optional, no attributes. <snippet> Defines a single snippet. Allowed only as a direct child of the <snippets/> element. Attributes: <id> An identifier string for the snippet. Required. <insert> Insert the contents of a <snippet>. Allowed anywhere. Attributes: <snippet> The identifier string of the snippet to insert. Required. <include> Include the contents of another XML file (everything inside the <document> element of that file). Allowed anywhere. Attributes: <file> The filename, relative to the directory, the current file is in. Required. Elements to be used in the XML description of the plugin Properties held by the elements are listed in a separate section. General elements <document> Needs to be present in each description.xml-file as the root-node. No special function. No attributes <about> Information about this plugin (author, licence, etc.). This element is allowed in both an individual plugin's .xml file, and in &pluginmap; files. Refer to the &pluginmap; file reference for reference details, the chapter on 'about' information for an introduction. <code> Defines where to look for the JS template to the plugin. Use only once per file, as a direct child of the document-tag. Attributes: file Filename of the JS template, relative to the directory the plugin-xml is in <help> Defines where to look for the help file for the plugin. Use only once per file, as a direct child of the document-tag. Attributes: file Filename of the help file, relative to the directory the plugin-xml is in <copy> Can be used as a child (direct or indirect) of the main layout elements, i.e. <dialog> and <wizard>. This is used to copy an entire block a xml elements 1:1. Attributes: id The ID to look for. The <copy> tag will look for a previous XML element that has been given the same ID, and copy it including all descendant elements. copy_element_tag_name In some few cases, you will want an almost literal copy, but change the tag-name of the element to copy. The most important example of this is, when you want to copy an entire <tab> from a dialog interface to the <page> of a wizard interface. In this case, you'd set coyp_elemnent_tag_name="page" to do this conversion automatically. Interface definitions <dialog> Defines a dialog-type interface. Place the GUI-definition inside this tag. Use only once per file, as a direct child of the document-tag. At least one of "dialog" or "wizard" tags is required for a plugin. Attributes: label Caption for the dialog recommended Should the dialog be used as the "recommended" interface (i.e. the interface that will be shown by default, unless the user has configured RKWard to default to a specific interface)? This attribute does not currently have an effect, as it is implicitly "true", unless the wizard is recommended. <wizard> Defines a wizard-type interface. Place the GUI-definition inside this tag. Use only once per file, as a direct child of the document-tag. At least one of "dialog" or "wizard" tags is required for a plugin. Accepts only <page> or <embed>-tags as direct children. Attributes: label Caption for the wizard recommended Should the wizard be used as the "recommended" interface (i.e. the interface that will be shown by default, unless the user has configured RKWard to default to a specific interface)? Optional, defaults to "false". Layout elements All elements in this section accept an attribute id="identifierstring". This attribute is optional for all elements. It can be used, for example, to hide/disable the entire layout element and all the elements contained therein (see chaper GUI logic). The id-string may not contain "." (dot) or ";" (semicolon), and should generally be limited to alphanumeric characters and the underscore ("_"). Only the additional attributes are listed. <page> Defines a new page inside a wizard. Only allowed as a direct child of a <wizard> element. <row> All direct children of a "row" tag will be placed left-to-right. <column> All direct children of a "column" tag will be placed top-to-bottom. <stretch> By default, elements in the GUI take up all the space that's available. For instance, if you have two columns side by side, the left one is packed with elements, but the right one only contains a lonely <radio>, the <radio> control will expand vertically, even though it does not really need the available space, and it will look ugly. In this case you really want to add a "blank" below the <radio>. For this, use the <stretch> element. It will simply use up some space. Don't overuse this element, usually it's a good idea for GUI elements to get all the available space, only sometimes will the layout become spaced out. The <stretch> element does not take any arguments, not even an "id". Also you can place no children inside the <stretch> element (in other words, you'll only ever use it as "<stretch/>") <frame> Draws a frame/box around its direct children. Can be used to visually group related options. Layout inside a frame is top-to-bottom, unless you place a <row> inside. Attributes: label Caption for the frame (optional) checkable Frames can be made checkable. In this case, all contained elements will be disabled when the frame is unchecked, and enabled, when it is checked. (optional, defaults to "false") checked For checkable frames only: Should the frame be checked by default? Defaults to "true". Not interpreted for non-checkable frames. <tabbook> Organizes elements in a tabbook. Accepts only <tab>-tags as direct children. <tab> Defines a page in a tabbook. Place the GUI-definition for the tab inside this tag. May be used only as a direct child of a <tabbook> tag. A <tabbook> should have at least two defined tabs. Attributes: label Caption for the tab page (required) <text> Shows the text enclosed in this tag in the GUI. Some simple HTML-style markup is supported (notably <b>, <i>, <p>, and <br/>). Please keep formatting to a minimum, however. Inserting a completely empty line adds a hard line break. Attributes: type Type of the text. One of "normal", "warning" or "error". This influences the look of the text (optional, defaults to normal) Active elements All elements in this section accept an attribute id="identifierstring". This attribute is required for all elements. Only the additional attributes are listed. The id-string may not contain "." (dots). <varselector> Provides a list of available objects from which the user can select one or more. Requires one or more <varslot>s as a counterpart to be useful. Attributes: label Label for the varselector (optional, defaults to "Select variable(s)") <varslot> Used in conjunction with a "varselector" to allow the user to select one or more variables. Attributes: label Label for the varslot (recommended, defaults to "Variable:") source The varselector to fetch the selection from (required, unless you connect manually) required Whether - for submitting the code - it is required that this varslot holds a valid value. See required-property (optional, defaults to false) multi Whether the varslot holds only one (default, "false"), or several objects min_vars Only meaningful if multi="true": Minimum number of vars to be selected for the selection to be considered valid (optional, defaults to "1") min_vars_if_any Only meaningful if multi="true": Some varslots may be considered valid, if, for instance, the varslot is either empty, or holds at least two values. This specifies how many variables have to be selected if any at all (2 in the example). (optional, defaults to "1") max_vars Only meaningful if multi="true": Maximum number of variables to select (optional, defaults to "0", which means no maximum) classes If you specify one or more &r; classnames (separated by spaces (" ")), here, the varslot will only accept objects belonging to those classes (otional, use with great care, the user should not be prevented from making valid choices, and &r; has a lot of different classes!) types If you specify one or more variables types (separated by spaced (" ")), here, the varslot will only accept objects of those types. Valid types are "unknown", "number", "string", "factor", "invalid". (Optional, use with great care, the user should not be prevented from making valid choices, and rkward does not always know the type of a variable) num_dimensions The number of dimensions, an object needs to have. "0" (the default) means, any number of dimensions is acceptable. (optional, defaults to "0") min_length The minimum length, an object needs to have in order to be acceptable. (optional, defaults to "0") max_length The maximum length, an object needs to have in order to be acceptable. (optional, defaults to the largest integer number representable on the system) <radio> Defines a group of radio-exclusive buttons (only one can be selected at a time). Requires at least two <option>-tags as direct children. No other tags are allowed as children. Attributes: label Label for the radio control (recommended, defaults to "Select one:") <dropdown> Defines a group of options of which one and only one can be selected at the same time, using a dropdown list. This is functionally equivalent to a <radio>, but looks different. Requires at least two <option>-tags as direct children. No other tags are allowed as children. Attributes: label Label for the dropdown list (recommended, defaults to "Select one:") <option> Can only be used as a direct child of a <radio> or <dropdown> element. Represents one selectable option in a radio control or dropdown list. Specifying the "id" parameter for the <option> elements is optional (and in fact it's recommended, not to set an "id", unless you plan to really use it to disable single options). Only the parent element (<radio> or <dropdown>) needs one. Attributes: label Label for the option (required) value The string value the parent element will return if this option is checked/selected (required) checked Whether the option should be checked/selected by default "true" or "false". Only one button in a <radio> may be set to checked="true". If no option is set to checked, the first option in the parent element will be checked/selected automatically. (optional, default to "false") <checkbox> Defines a checkbox, i.e. a single option that can either be set to on or off. Attributes: label Label for the checkbox (required) value The value the checkbox will return if checked (required) value_unchecked The value that will be returned if the checkbox is not checked (optional, defauls to "", i.e. an empty string) checked Whether the option should be checked by default "true" or "false" (optional, default to "false") <frame> The frame element is generally used as a pure layout element, and is listed in the section on layout elements. However, it can also be made checkable, thus acting like a simple checkbox at the same time. <input> Defines a free text input field. Attributes: label Label for the input field (required) initial Initial text of the text field (optional, defaults to "", i.e. an empty string) size One of "small", "medium", or "large". "large" defines a multi-line input field, "small", and "medium" are single line fields (optional, defaults to "medium") required Whether - for submitting the code - it is required that this input is not empty. See required-property (optional, defaults to false) <matrix> A table for entering matrix data (or vectors) in the GUI. This input element is not optimized for entering editing large amounts of data. While there is no strict limit on the size of a <matrix>, in general it should not exceed around ten rows / columns. If you expect larger data, allow users to select it as an R object (which may be a good idea as an alternative option, in almost every instance where you use a matrix element). Attributes: label Label for the table (required) mode One of "integer", "real", or "string". The type of data that will be accepted in the table (required) min Minimum acceptable value (for matrices of type "integer" or "real") (optional, defaults to the smallest representable value) max Maximum acceptable value (for matrices of type "integer" or "real") (optional, defaults to the largest representable value) allow_missings Whether missing (empty) values are allowed in the matrix. This is implied for matrices or mode "string" (optional, defaults to false). allow_user_resize_columns When set to true, the user can add columns by typing on the rightmost (inactive) cells (optional, defaults to true). allow_user_resize_rows When set to true, the user can add rows by typing on the bottommost (inactive) cells (optional, defaults to true). rows Number of rows in the matrix. Has no effect for allow_user_resize_rows="true". This can also be controlled by setting the "rows" property". (optional, defaults to 2). columns Number of columns in the matrix. Has no effect for allow_user_resize_columns="true". This can also be controlled by setting the "columns" property". (optional, defaults to 2). fixed_width Force the GUI element to stay at its initial width. Do not use in combindation with matrices, where the number of columns may change in any way. Useful, esp. when creating a vector input element (rows="1"). (optional, defaults to false). fixed_height Force the GUI element to stay at its initial height. Do not use in combindation with matrices, where the number of rows may change in any way. Useful, esp. when creating a vector input element (columns="1"). (optional, defaults to false). horiz_headers Strings to ues for the horiztonal header, separated by ";". (optional, defaults to column number). vert_headers Strings to ues for the vertical header, separated by ";". (optional, defaults to row number). <optionset> A UI for repeating a set of options for an arbitrary number of items (introduction to optionsets). Attributes: min_rows If specified, the set will be marked invalid, unless it has at least this number of rows (optional, integer). min_rows_if_any Like min_rows, but will only be tested, if there is at least one row (optional, integer). max_rows If specified, the set will be marked invalid, unless it has at most this number of rows (optional, integer). keycolumn Id of the column to act as keycolumn. An optionset with a (valid) keycolumn will act as a "driven" optionset. An optionset with no keycolumn will allow manual insertion / removal of items. The keycolumn must be marked as external. (optional, defaults to no keycolumn). Child-elements: <optioncolumn> Declares one optioncolumn of the set. For each value that you want to fetch from the optionset, you must declare a separate <optioncolumn>. Attributes: id The id of the optioncolumn (required, string). external Set to true, if the optioncolumn is controlled from outside the optionset (optional, boolean, defaults to false). label If given, the optioncolumn will be displayed in the <optiondisplay> in a column by that label (optional, string, defaults to not displayed). connect The property to connect this optioncolumn to, given as id inside the <content>-area. For external <optioncolumn>s, the corresponding value will be set to the externally set value. For regular (non-external) <optioncolumn>s, the corresponding row of the <optioncolumn>-property, will be set when the property changes inside the content-area. (optional, string, defaults to not connected). default Only for external columns: The value to assume for this column, if no value is known for an entry. Rarely useful. (Optional, defaults to empty string) <content> Declare the content / UI of the set. No attributes. All usual active, passive, and layout elements are allowed as childname elements. In addition, the following special child-element is allowed: <optiondisplay> Creates a display for showing / selecting / adding / removing items in an optionset. Allowed only inside the contents are of an optionset, and only once. Attributes: index Whether to show a column with a numberic index (1...n) in the optiondisplay. (optional, boolean, defaults to "true") <logic> Optional specification of UI logic to apply inside the contents region the optionset. See the reference on <logic> <browser> An element designed to select a single filename (or directory name). Note that this field will take any string, even though it is meant to be used for files, only: label Label for the browser (optional, defaults to "Enter filename") initial Initial text of the browser (optional, defaults to "", i.e. an empty string) type One of "file", "dir", or "savefile". To select an existing file, existing directory, or non-existing file, respectively (optional, defaults to "file") allow_urls Whether (non-local) urls can be selected (optional, defaults to "false") filter File type filter, e.g. ("*.txt *.csv" for .txt and .csv files. Try not to induce limits unless absolutely needed, though) (optional, defaults to "", i.e. all files) required Whether - for submitting the code - it is required that the field is not empty. Note that this does not necessarily mean, the selected filename is valid! See required-property (optional, defaults to true) <saveobject> An element designed to select the name of an &r; object to save to (i.e. generally not already existing, in contrast to a varslot): label Label for the input (optional, defaults to "Save to:") initial Initial text of the input (optional, defaults to "my.data") required Whether - for submitting the code - it is required that the field holds a permissible object name. See required-property (optional, defaults to true) checkable In many use cases, saving to an &r; object is optional. In these cases, a checkbox can be integrated into the saveobject-element using this attribute. When set to true, the saveobject will be activated / deactivated by the checkbox. See the active-property of saveobject (optional, defaults to false) checked For checkable saveobject-elements, only: Whether the control is checked/enabled by default (optional, defaults to false) <spinbox> A spinbox in which the user can select a numeric value, using either direct keyboard input or small up/down arrows. Attributes: label Label for the spinbox (recommend, default to "Enter value:") min The lowest value the user is allowed to enter in the spinbox (optional, defaults to the lowest value technically representable in the spinbox) max The largest value the user is allowed to enter in the spinbox (optional, defaults to the highest value technically representable in the spinbox) initial The initial value shown in the spinbox (optional, defaults to "0") type One of "real" or "integer". Whether the spinbox will accept real numbers or only integers (optional, defaults to "real") default_precision Only meaningful if the spinbox is of type="real". Specifies the default number of decimal places shown in the spinbox (only this many trailing zeros will be shown). When the user presses the up/down arrows, this decimal place will be changed. The user may still be able to enter values with a higher precision, however (see below) (optional, defaults to "2") max_precision The maximum number of digits that can be meaningfully represented (optional, defaults to "8") <formula> This advanced element allows the user to select a formula/set of interactions from selected variables. For instance for a GLM, this element can be used to allow the user to specify the interaction-terms in the model. Attributes: fixed_factors The ID of the varslot holding the selected fixed factors (required) dependent The ID of the varslot holding the selected dependent variable (required) <embed> Embed a different plugin into this one (see chapter on embedding). Attributes: component The registered name of the component to embed (see chapter on registering components (required) as_button If set to "true", only a pushbutton will be placed in the embedding GUI, the embedded GUI will only be shown (in a separate window) when the pushbutton is pressed (optional, default is "false") label Only meaningful if as_button="true": The label of the button (recommend, default is "Options") <preview> Checkbox to toggle preview functionality (see chapter on graph previews). Attributes: label Label of the box (optional, default is "Preview") Logic section <logic> The containing element for the logic section. All elements below are allowed only inside the <logic> element. The <logic> element is allowed only as a direct child of the <document> element (at most once per document), or of <optionset> elements (at most once per optionset). The document's logic section applies to both <dialog> and <wizard> GUIs in the same way. <external> Creates a new (string) property that is supposed to be connected to an outside property if the plugin gets embedded. See section on "incomplete" plugins. Attributes: id The ID of the new property (required) default The default string value of the new property, i.e. the value used, if the property is not connected to an outside property (optional, defaults to an empty string) <set> Set a property to a fixed value (of course, if you additionally connect the property to some other property, the value does not remain fixed). For instance, if you embed a plugin, but want to hide some of its elements, you might set the visibility property of those elements to false. Useful esp. for embedded/embedding plugins. Attributes: id The ID of the property to set (required) to The string value to set the property to (required). Note: For boolean properties such as visibility, enabledness, you'll typically set the to attribute to either to="true" or to="false". <convert> Create a new boolean properties that depends on the state of one or more different properties. Attributes: id The ID of the new property (required) sources The ids of the properties this property will depend on. One or more properties may be specified, separated by ";" (required) mode The mode of conversion/operation. One of "equals", "notequals", "range", "and", "or". If in mode equals, the property will only be true, if the value of all of its sources equals the attribute standard (see below). If in at mode notequals, the property will only be true, if the value of all of its sources are different from the attribute standard (see below). If in mode range, the sources have to be numeric (integer or real). The property will only be true, if all sources are in the range specified by the attributes min and max (see below). If in mode and, the sources have to be boolean properties. The property will only be true, if all the sources are true simultaniously. If in mode or, the sources have to be boolean properties. The property will only be true, if at least one of the sources is true. (required) standard Only meaningful in modes equals or notequals: the string value to compare against (required if in one of these modes) min Only meaningful in mode range: the minimum value to compare against (optional, defaults to the lowest floating point number representable on the machine) max Only meaningful in mode range: the maximum value to compare against (optional, defaults to the largest floating point number representable on the machine) require_true If set to "true", the property will become required, and will only be considered valid, if its state is true/on. Hence, if the property is false, it will block the Submit button (optional, defaults to "false". If you use this, make sure the user can easily detect what's wrong, such as by showing an explanatory <text>) <switch> Create a new property that will relay to different target properties (or fixed strings) based on the value of a condition property. This allows to create logic similar to if() or switch() constructs. Attributes: id The ID of the new property (required) condition The id of the condition property (required) Child elements: <true> If the condition property is boolean, you can specify the two child elements <true> and <false> (and only these). (Required, if <false> is also given) <false> If the condition property is boolean, you can specify the two child elements <true> and <false> (and only these). (Required, if <true> is also given) <case> If the condition property is not boolean, you can supply and arbitrary number of <case>-elements, one for each value of the condition property that you want to match (at least one such element is required, if the condition property is not boolean) <default> If the condition property is not boolean, the optional <default>-element, allows to specify the behavior, if no <case> element is matches the value of the condition property (optional, allowed only once, in combination with one or more <case> elements). Child elements <true>, <false>, <case>, and <default> take the following attributes: standard Only for <case>-elements: The value to match the condition property against (required, string). fixed_value A fixed string that should be supplied as the value of the <switch> property, if the current condition matches (required, if dynamic_value is not supplied). dynamic_value The id of the target property that should be supplied as the value of the <switch> property, if the current condition matches (required, if fixed_value is not supplied). <connect> Connects two properties. The client property will be changed whenever the governor property changes (but not the other way around!). Attributes: client The ID of the client property, i.e. the property that will be adjusted (required) governor The ID of the governor property, i.e. the property that will adjusts the client property. This may include a modifier (required) reconcile If "true", the client property will make adjust the governor property on connection in such a way that the governor property will only accept values that are also acceptable by the client (e.g. suppose the governor is a numeric property with min value "0", and the client is a numeric property with min value "100". The min of both properties will be adjusted to 100, if reconcile="true"). Generally works only for properties of the same basic type (optional, default to "false") <dependency_check> Creates a boolean propterty that is true, if the specified dependencies are met, false otherwise. The xml syntax of the element is the same as that of the <dependencies> element, described in the &pluginmap; reference. As of &rkward; 0.6.1, only the &rkward; and &r; version specifications are taken into account, not dependencies on packages or pluginmaps. <script> Define script code to control UI logic. See the section on scripted GUJI logic for details. The script code to run can be given either using the "file" attribute, or as a (commented) text of the element. The <script> element is not allowed in the <logic> section of an optionset. Attributes: file File name of the script file. (required) Properties of plugin elements All layout elements, and all active elements hold the following properties, accessible via "id_of_element.name_of_property": visible Whether the GUI element is visible or not (boolean) enabled Whether the GUI element is enabled or not (boolean) required Whether the GUI element is required (to hold a valid setting) or not. Note that any element which is disabled or hidden is also implicity non-required (boolean). In addition to this, some elements have additional properties you can connect to. Most active elements also have a "default" property whose value will be returned on calls to getBoolean/getString/getList ("..."), if no specific property was named, as described below. <text> Default property is text text The text displayed (text) <varselector> No default property selected The objects currently selected. You probably do not want to use this. Used internally (RObject) root The root/parent object of the objects offered for selection (RObject) <varslot> Default property is "available" available All objects held in the varslot (RObject) selected Of the objects held in the varslot, those that are currently selected. You probably do not want to use this. Used internally (RObject) source A copy of the objects selected in the corresponding varselector. You probably do not want to use this. Used internally (RObject) <radio> Default property is "string" string The value of the currently selected option (string) number The number of the currently selected option (options are numbered top-to-bottom, starting at 0) (integer) <dropdown> Default property is "string" string The value of the currently selected option (string) number The number of the currently selected option (options are numbered top-to-bottom, starting at 0) (integer) <option> No default property. "enabled" is the *only* property. It does not have the "visible" or "required" properties. enabled Whether this single option should be enabled or disabled. In most cases you will enable/disable the entire <radio< or <dropdown<, instead. But this can be used to dynamically set the enabledness of a single option inside a <radio< or <dropdown< (bool) <checkbox> Default property is "state.labeled" state State of the checkbox (on or off). Note that useful modifiers of this property (as of all boolean properties) are "not" and "labeled" (see types of properties). However, often it is most useful to connect to the property with no modifier, i.e. "checkbox_id.state", which will return the state of the checkbox in a format suitable for use in an if statement (0 or 1). (boolean) <frame> Default property is "checked", if - and only if - the frame is checkable. For non-checkable frames, there is no default property. checked Available for checkable frames, only: state of the checkbox (on or off). Note that useful modifiers of this property (as of all boolean properties) are "not" and "numeric" (see types of properties). (boolean) <input> Default property is "text" text Current text in the input field (string) <matrix> Default property is "cbind". rows Number of rows in the matrix (integer). If the matrix allows the user to add / remove rows, this property should be treated as read-only. Otherwise, changing it, will change the size of the matrix. columns Number of columns in the matrix (integer). If the matrix allows the user to add / remove columns, this property should be treated as read-only. Otherwise, changing it, will change the size of the matrix. tsv Data in the matrix in tsv format (string; read-write). Note that compared to the usual tsv layout, columns, not rows, are separated by newline characters, and cells within a column are separated by tabulator characters. 0,1,2... The data from a single column (0 for leftmost column). getValue()/getString() returns this as a single string, separated by "\n". However, the recommended way to get this is using getList(), which returns this column as an array of strings. cbind Data in a format suitable for pasting to R, wrapped in a cbind statement (string; read-only). <optionset> No default property. row_count Number of items in the optionset (integer). Read-only. current_row Currently active item in the optionset (integer). -1 for no active item. Read-write. optioncolumn_ids For each <optioncolumn> you define, a string list property will be created with the specified id. <browser> Default property is "selection" selection Current text (selected file name) in the browser (string) <saveobject> Default property is "selection" selection Full name of the selected object (string; read-only - to set this programmatically, use "parent", and "objectname") parent The parent object of the selected object. This is always an existing &r; object of a type that can contain other objects (e.g. a list or data.frame). When set to an empty string or an invalid object, ".GlobalEnv" is assumed (RObject) objectname The base-name of the selected object, i.e. the string entered by the user (changed to a valid &r; name, if necessary) (string) active For checkable saveobjects, only: Whether the control is checked/enabled. Always true for non-checkable saveobjects (bool) <spinbox> Default property is either "int" or "real.formatted" depending on the spinbox's mode int Integer value held by the spinbox, or nearest integer, if in real mode (integer) real Real value held by the spinbox (and integer, if in integer) (real) <formula> Default property is "model" model The current model string (string) table The data.frame holding the required variables. If variables from only one data.frame are used, the name of that data.frame is returned. Otherwise a new data.frame is constructed as required (string) labels If variables from multiple data.frames are involved, their names may get mangled (for instance, if both data.frames contain a variable named "x"). This returns a list with the mangled names as indices and the descriptive label as value (string) fixed_factors The fixed factors. You probably do not want to use this. Used internally (RObject) dependent The dependent variable(s). You probably do not want to use this. Used internally (RObject) <embed> No default property code The code generated by the embedded plugin (code) <preview> Default property is "state" state Whether the preview box is checked (not necessarily whether the preview has already been shown) (boolean) <convert> This element (used in the <logic> section) is special, in that is technically *is* a property, instead of just holding one or more properties. It is of boolean kind. Note that useful modifiers of this property (as of all boolean properties) are "not" and "numeric" (see types of properties) <switch> This element (used in the <logic> section) is special, in that is technically *is* a (string) property, instead of just holding one or more properties. It allows to switch between several target properties depending on the value of a condition property, or to re-map values of the condition property. Any modifiers that you supply are passed on to the target properties, thus, e.g. if all target properties are RObject properties, you can use the "shortname" modifier on the switch, too. However, if the target properties are of different types, using modifiers may lead to errors. For fixed_values, any modifier is dropped, silently. Note that target properties, when accessed through a switch, are always read-only! Elements for use in &pluginmap; files <document> Needs to be present in each &pluginmap; file as the root-node (exactly once). Attributes: base_prefix Filenames specified in the &pluginmap; file are assumed to be relative to the directory of the &pluginmap; file + the prefix you specify here. Useful, esp., if all your components are located below a single subdirectory. namespace A namespace for the component ids. When looking up components for embedding, the components will beretrievable via a string "namespace::component_id". Set to "rkward" for now. id An optional identifier string for this &pluginmap;. Specifying this allows third authors to refer to and load your &pluginmap; from theirs (see chapter on handling dependencies. priority One of "hidden", "low", "medium", or "high". &pluginmap;s with priority "medium" or "high" are activated, automatically, when &rkward; first finds them. Use priority="hidden" for &pluginmap;s that are not meant to be activated, directory (only meant for inclusion). In the current implementation this does not actually hide the &pluginmap;, however. (Optional, defaults to "medium"). <dependencies> This element, specifying dependencies, is allowed as a direct child of the <document> element (once), and as a child of <component> elements (once for each <component> element). Specifies the dependencies that must be met in order to use the plugin(s). See the chapter on dependencies for an overview. Attributes: rkward_min_version, rkward_max_version Minimum and maximum allowed version of &rkward;. Version specifications may include non-numeric suffixes, like "0.5.7z-devel1". If a specified dependency is not met, the plugin(s) it applies to will be ignored. More information. Optional; if not specified, no minimum / maximum version of &rkward; will be required. R_min_version, R_max_version Minimum and maximum allowed version of &rkward;. Version specifications may not include non-numeric suffixes, like "0.5.7z-devel1". The R version dependency will be shown on the plugins' help pages, but does not have any direct effect, as of &rkward; 0.6.1. More information. Optional; if not specified, no minimum / maximum version of &r; will be required. Child elements: <package> Adds a dependency on a specific &r; package. Attributes: name Package name (required). min_version, max_version Minimum / maximum allowed version (optional). repository Repository where the package can be found. Optional, but highly recommended, if the package is not available on CRAN. <pluginmap> Adds a dependency on a specific &rkward; &pluginmap;. Attributes: name Id string of the required &pluginmap; (required). min_version, max_version Minimum / maximum allowed version (optional). url URL where the &pluginmap; can be found. Required. <about> May be present exactly once as a direct child of the <document> element. Contains meta information on the &pluginmap; (or plugin). See the chapter on 'about' information for an overview. Attributes: name User visible name. Optional. Does not have to be the same as the "id". version Version number. Optional. The format is not restricted, but to be on the safe side, please follow common versioning schemes such as "x.y.z". releasedate Release date specification. Optional in format "YYYY-MM-DD". shortinfo A short description of the plugin / &pluginmap;. Optional. url URL where more information can be found. Optional, but recommended. copyright Copyright specification, e.g. "2012-2013 by John Doe". Optional, but recommended. licence License specification, e.g. "GPL" or "BSD". Please make sure to accompany your files with a complete copy of the relevant licence! Optional, but recommended. category Category of plugin(s), e.g. "Item response theory". As of &rkward; 0.6.1, no categories are predefined. Optional. Child elements: <author> Adds information on an author. Attributes: name, given, family Either specify the full name for name, or specify both given and family, separately. role Author role description (optional). email E-mail address, where author can be contacted. Required. May be set to the rkward-devel mailing list, if you are subscribed, and your plugin is meant to be included in the official &rkward; release. url URL with more information on the author, e.g. homepage (optional). <components> Needs to be present exactly once as a direct child of the <document> element. Contains the individual <component>-elements described below. No attributes. <component> One or more <component> elements should be given as direct children of the <components> element (and only there). Registers a component/plugin with rkward. Attributes: type For future extension: The type of component/plugin. Always set to "standard" for now (the only type currently supported). id The ID by which this component can be retrieved (for placing it in the menu (see below), or for embedding). See <document/gt;-namespace above. file Required at least for components of type="standard": The filename of the XML file describing the GUI. label The label for this component, when placed in the menu hierarchy. <attribute> Defines an attribute of a component. Only meaningful for import plugins so far. Only allowed as a direct child of <component>. Attributes: id Id of the attribute value Value of the attribute labels Label associated with the attribute <hierarchy> Needs to be present exactly once as a direct child of the <document> element. Described where the components declared above should be placed in the menu hierarchy. Accepts only <menu> elements as direct children. No attributes. <menu> One or more <menu> elements should be given as direct children of the <hierarchy> element. Declares a new (sub-)menu. If a menu by the given ID (see below) already exists, the two menus are merged. The <menu> element is allowed either as a direct child of the <hierarchy> element (top level menu), or as the direct child on any other <menu> element (sub-menu). Conversely, the <menu> element accepts other <menu> elements or <entry> elements as children. Attributes: id An identifier string of the menu. Useful, when menu definitions are read from several &pluginmap; files, to make sure plugins can be placed in the same menu(s). Some menu-ids such as "file" refer to predefined menus (in this case the "File" menu). Be sure to check with existing &pluginmap; files to use consistent ids. label A label for the menu. index Useful, when menu definitions are read from several &pluginmap; files, to have control over the order in which (sub-)menus are placed inside a hierarchy level. Note that the index is not absolute (since more than one &pluginmap; file may be read, more than one element at this hierarchy level may have the same id), but you can safely assume that an element with index="4" will be placed somewhere below an element which index="3" and above one with index="5" (optional, default is "-1", for add at end). <entry> A menu entry, i.e. a menu option to invoke a plugin. May be used only as a direct child of a <menu> element, accepts no child elements. Attributes: component The ID of the component that should be invoked, when this menu entry is activated. index See <menu index="..."> above. <context> Declares the entries in a context. Only allowed as a direct child of the <document> tag. Accepts only <menu> tags as direct children. Attributes: id The ID of the context. Only two contexts are implemented so far: "x11" and "import". <require> Include another &pluginmap; file. This &pluginmap; file is only loaded once, even if it is <require>d from several other files. The most important use case is to include a pluginmap file, which declares some comopnents, which are embedded by components declared in this &pluginmap;. <require>-elements are only allowed as direct children of the <document>-node. Attributes: file The filename of the &pluginmap; to include. This is seen relative to the directory of the current &pluginmap; file + the base_prefix (see above, <document>-element). If you do not know the relative path to the &pluginmap; to be included, use the map attribute to refer to it by id, instead. map To include a &pluginmap; file from a different package (or an &rkward; &pluginmap; from your external &pluginmap;, you can refer to it by its namespacename::id, as specified in the required &pluginmap;s <document> element. Inclusion will fail, if no &pluginmap; by that id is known (e.g. not installed on the user's system). You should use this method for including &pluginmap;s outside your package, only. For maps inside your package, specifying a relative path (file attribute) is faster, and more reliable. Elements for use in .rkh (help) files <document> Needs to be present in each .xml file as the root-node (exactly once). No attributes. <title> Title of the help page. This is not interpreted for help pages for a plugin (this takes the title from the plugin itself), only for stand-alone pages. No attributes. The text contained within the <title> tag will become the caption of the help page. May only be defined once, as a direct child of the <document> node. <summary> A short summary of the help page (or what this plugin is used for). This will always be shown at the top of the help page. No attributes. The text contained within the <summary> tag will be displayed. Recommended but not required. May only be defined once, as a direct child of the <document> node. <usage> A slightly more elaborate summary of the usage. This will always be shown directly after the <summary>. No attributes. The text contained within the <usage> tag will be displayed. Recommended for plugin help pages, but not required. May only be defined once, as a direct child of the <document> node. <section> A general purposes section. May be used any number of times as a direct child of the <document> node. These sections are displayed in the order of their definition, but all after the <usage> section and before the <settings> section. The text contained within the <sectoin> tag will be displayed. id An identifier needed to jump to this section from the navigation bar (or a link). Needs to be unique within the file. Required, no default. title The title (caption) of this section. Required, no default. short_title A short title suitable to be displayed in the navigation bar. Optional, defaults to the full title. <settings> Defines the section containing reference on the various GUI settings. Only meaningful and only used for plugin related help pages. Use as a direct child of the <document>. May contain only <setting> and <caption> elements as direct children. No attributes. <setting> Explains a single setting in the GUI. Only allowed as a direct child of the <settings> element. The text contained within the element is displayed. id The ID of the setting in the plugin .xml. Required, no default. title An optional title for the setting. If omitted (omission is recommended in most cases), the title will be taken from the plugin .xml. <caption> A caption to visually group several settings. May only be used as a direct child of the <settings> element. id The ID of the corresponding element (typically a <frame>, <page> or <tab>) in the plugin .xml. title An optional title for the caption. If omitted (omission is recommended in most cases), the title will be taken from the plugin .xml. <related> Defines a section containing links to further related information. Will always be displayed after the <settings> section. No attributes. The text contained within the <related> tag will be displayed. Typically this will contain an HTML-style list. Recommended for plugin help pages, but not required. May only be defined once, as a direct child of the <document> node. <technical> Defines a section containing technical information of no relevance to end users (such as internal structure of the plugin). Will always be displayed last in a help page. No attributes. The text contained within the <related> tag will be displayed. Not required, and not recommended for most plugin help pages. May only be defined once, as a direct child of the <document> node. <link> A link. Can be used in any of the sections described above. href The target url. Note that several rkward specific URLs are available. See section on writing help pages for details. <various html tags> Most basic html tags are allowed within the sections. Please keep manual formatting to a minimum, however. Functions available for GUI logic scripting Class "Component" Class which represents a single component or component-property. The most important instance of this class is the variable "gui" which is predefined as the root property of the current component. The following methods are available for instances of class "Component": absoluteId(base_id)Returns the absolute ID of base_id, or - if base_id is omitted - the identifier of the component. getValue(id)Discouraged. Use getString(), getBoolean(), or getList(), intead. Returns the value of the given child property. Returns the value of this property, if ID is omitted. getString(id)Returns the value of the given child property as a string. Returns the value of this property, if ID is omitted. getBoolean(id)Returns the value of the given child property as a boolean (if possible). Returns the value of this property, if ID is omitted. getList(id)Returns the value of the given child property as an array of strings (if possible). Returns the value of this property, if ID is omitted. setValue(id, value)Set the value of the given child property to value. getChild(id)Return an instance of the child-property with the given id. addChangeCommand(id, command)Execute command whenever the child property given by id changes. Class "RObject" Class which represents a single &r; object. An instance of this class can be obtained by using makeRObject(objectname). The following methods are available for instances of class "RObject": If any commands are still pending in the backend, the information provided by these methods can be out-of-date by the time that the plugin code is run. Do not rely on it for critical operations (risking loss of data). getName()Returns the absolute name of the object. exists()Returns whether the object exists. You should generally check this before using any of the methods listed below. dimensions()Returns an array of dimensions (similar to dim() in R). classes()Returns an array of classes (similar to class() in R). isClass(class)Returns true, if the object is of class class. isDataFrame()Returns true, if the object is a data.frame. isMatrix()Returns true, if the object is a matrix. isList()Returns true, if the object is a list. isFunction()Returns true, if the object is a function. isEnvironment()Returns true, if the object is an environment. isDataNumeric()Returns true, if the object is a vector of numeric data. isDataFactor()Returns true, if the object is a vector of factor data. isDataCharacter()Returns true, if the object is a vector of character data. isDataLogical()Returns true, if the object is a vector of logical data. parent()Returns an instance of "RObject" representing the parent of this object. child(childname)Returns an instance of "RObject" representing the child childname of this object. Class "RObjectArray" An array of RObject instances. An instance of this class can be obtained by using makeRObjectArray(objectnames). It is particularly useful when dealing with varslots which allow to select multiple objects. include()-function include(filename)can be used to include a separate JS file. Troubleshooting during plugin development So you've read all the documentation, did everything right, and still can't get it to work? Don't worry, we'll work it out. First thing to do is: Activate "RKWard Debug Messages" - window (available from the "Windows" - menu, or right click on one of the tool bars), and then start your plugin, again. As a general rule of thumb, you should not see any output in the messages window when your plugin gets invoked, or at any other time. If there is one, it's likely related to your plugin. See if it helps you. If everything seems fine on the console, try to increase the debug-level (from the command line, using rkward --debug-level 3, or by setting debug level to 3 in Settings->Configure RKWard->Debug. Not all messages shown at higher debug levels neccessarily indicate a problem, but chance are, your problem shows up somewhere between the messages. If you still can't find out what's wrong, don't despair. We know this is complicated stuff, and - after all - possibly you've also come across a bug in &rkward;, and &rkward; needs to be fixed. Just write to the development mailing list, and tell us about the problem. We'll be happy to help you. Finally, even if you found out how to do it on your own, but found the documentation to be not-so-helpful or even wrong in some respects, please tell us on the mailing list as well, so we can fix/improve the documentation. License &underFDL; &documentation.index;
rkward-0.6.1/doc/rkwardplugins/menu_hierarchy_example.png0000644000175000017500000011343412124345420023247 0ustar thomasthomasPNG  IHDR (WsBITO pHYs:duh IDATxw\ߦAޫt]~vEDP A@={ozSN`)EQ*$el!7o޼<&:E;2/ v ¿MA;J㕵fԶ!d ` qpD{";6~hllH"vCUU !tȟ@~Q9WkhY++s(T@8B?0막g,O%EtZ t7}˯iz6boОv;bp@VwE^p ''7<ApGQl<y!dVhmŵ`}Qww\x+biW`dJ$]w$B l~qWTE#ǟVXl Ous  È". | 3\C&Sz'=em>-lH$T q#J?a*JoQZXZ-ȩPۙ5h/ *J҄QB eiv_ 0R.T*U],񷦢hT\9IhIy *h਩&(=r,#E{K4tw?gB8Me`C 6G:zF&3g͎ٹ{u Edjlk7 ]=!C܃aF2 {^5`׃0fޏ{2߸ygҭn[X2P2f]e֊M_edljfnߟ` E o υ u裦 }d)++\4gy4E {6)驯/J3fL~~>TYYO9 }øq?'G۷ Vk3RRR/”/_lټ-f)//IncI7n;yd~j![ׂ-h>9EsXUH$(WpVGXi`20w#CGb]4/UWOL|bӤ1fwqac:}ܴw,I; zp¤>sr %̚cVwі:X~KO8 ԲYg͞3e؆I޽;a]qƵD"A^1#wD8޸q#$nOfϙckk>ĝ=/?p_|̡aSVV:{##9s疕aBSS3QG'''c~]--crK_QQ`CCޙΝ;ZcƌaeQWm)gffb\\^^q 0#3eY3fȑ#Yu3Ǝ򿬬tYJPGGheE Y5VSSY/^]A@м|^޶6XΟ?k⌦}ձ3z##cMM#F$'_VN;ǎ;pѣGsO-ly^^^cƌ1740]Z3+x%Eqfz&us^޳w/KC^~~n~~.Kr_\ w/V[[{0m?5|m,w?~رS\'{ seKc QVQ___XPc``.[Y歛JJYll‚_z7X̘9399CȳOo7%sqd_v'uu6U'6YoTVRyR^0%%5.arkk׆`ׇ$'nM~݆aÇ'%=2d}1uBCCSSSv,(Ƕ6b`0>|st:2޾|x$.vnڠ(x۬222d2yY9۞g^XYU{`ظE>:EQ-M=$$>Gcd;Z&&fgDQ4:zŋQZQ: ]];bccUk, knO{d2G `ff*+#Q#q''$z{/VSx{kQ(S3331^dDdlll~(W[" q /[~CL=Ç&7&9T*Wj>s/*gjj¡/'''!!1}LL#'+kaaϒ}Ֆ,Ogwn;oO:+;.+ vO###++44ɲoalW/,*zl\eutt,2i߻ך:RIC@0?&&+rCXѣtu0 @`0969rHGG(W(˗W_x ϟKQWJJۏc@aMAPKJJ##6>~tę7nG$Z %( grdag:vk466۾}{8?'D~nz)cccfY 'vXO>!'?~TQQaWdyk 22uuuCw#GogL޺/ve8|`ll,VѣU*USSS{eԎ;cb` .쯡7@,QN[FcEaaӧI'>Ǐ߼9`g~4^S)i55uBnp4 ws Ӏe0UzfG=}gދ.=vD)NlSɛ>n4l^9Q譢 ( _m\yE+vm04&F$ȢGQ"FtxFsl`:w 6n޺#߽{ғϞ>|0 j}B`IwCQfw7L>;]F y  ?`ooGGp˂ u&p׋ >&ݻw ~v毳(˶m G5!!%޹s7JKKjffԔvum٫0k%+(dgrz;w ץlg|WS룩meeI ]<`@,)pJoo5EА5AAƦ/U+,Yjllя# ŭwlmz(..NϢYxή#e.!0oV j]]ss q䛷E>v9Hj>ދh5EEG.).Z Zj&Yjmm.pاStL Hp<.~ُ?H$aO98vtt266`;AkF(8h [ n*mc2[4o|ccӀL:pY BC׬144^|y rtt̗%YGu9’ժBC ? eޥlrscj׭ 200[D06{l!իMLLׄsyخp4w<#CcZ,;wn k׆ZZZذ! G|\ZB[e9R%TK Nr"ߚ|O'74%Y> +͙}Q_W{ܜ5зz!`}"X_gpٱqXfe0Ms6a0OlA u4:Ntc8* EJRB4H5HIJIHPD"!  J ~8]a=/Χc ٭߀$<gs4'Ab0a^Ki$-+^E4"L(_{wͫ8 LFBWgEkj^|Q[_؈ B PBDvvv/=~<~dҤ? >|(.Oqyl]-p:k!6˳D @K*/ h_^}}[^spu5aaaؒ r(My|SS_Q _"":Owt22UW716MKMcS"9p@`YЛbOt8I,He2V6&^08WƌDFD׈堗/u#"wÒ$66]JIIM $ܾAj2I^h6͌-?8j]w22ttK>~8p0v߼~dmn?E JuqqR]N!eHҽ(PR%R  rI^w8$.d Nu LL7{Νjk( A¨P..ntzm4ʄ)E0a𞷖ݻ.P@TT, 55,,FdeՍaQ[Gt?lѓ&#?:eee|zZ;;duuܜढ҇`䨫 55m3?K<ƶ kii?"dFe"oߦ/26657^8iffb.ŵJg") ۷0`BQQqjʛ/mٴc˜2hHK?|x_RRB{?S n339׮8=-[7oΠH7!\:svffF}}}_uܬLm-a޹kw`ડCeeez dvXϩ۴߿hedbZ\>cϟ޸q}I|78t*kK ' \w $OU?ߥ'Nõtna3V..n\4`q6|1I8t܇ӷw>O,7vn,#sɝT^^6o==#GsW▕ͯ.y=Mɱdׯs2?'Naں] rx9;$'s8H+hMa={$\MM &ܼy7761l;zk9NZ>\B\ClmJ߸qqǏKbzq{~=e]B :t;NΠ߲e] rx9=z'7o9,{Fa)(Q--leݺuSVRRM;Cc(H{NWYL` v.<, ]gϟz%%8,lٲw442,-bJ0l0ߥK-+OO)M@]: +|LIfZ*`Ϟ(XsR}fSŜ9uPToS9)))9:zӤ IDAT͛dffIHH| $$(]ܗDžӦ,5ȒHHJ zQi))D}#<5%'$\O/%%h7Qkn~uqlc虙+ffc0GHI͒Uڲe/4`LLӤM6,g~/_?^J7nnv4A *++ رcKK (ZZ_tuqnV+ߵFaEˏ;6Kҥ6mLQk05}=۷Ϛ5k0w_zԩㆆFзG]lâwq 7<}kbi9[>װaG5j-wb_[n{577W:nl|nŋSLwɾ: }Ѣ R룶.44>6P F{*wq:<7uI6@QCCu;JJ+?_+PRزNU76n F662( Kh-+/{.b}eeeydaiiy*bs֔WPx=$[{QϟpWɵׯ^fjf N֯OsAvOxzT3Vءs4 III >}TU߼yb媕+W?yٳg7>$4={vsgɩS=NSWTco*,,1}:KNӈD"033vmPpJ*Çp.tw‚o߾uQMHH-,,WO~P雀t}䓓%g̀o+X.\P77a~9$$kwԌ37wބ |C%ޓ2slf ayy ,y,֭ 335l>nMK_HѸ6lHKO37])AAOJ $iGTxNkIehhpii)훣kn.)}{X7 eM uUU_?2ugcc&})-Ezԭ[78w[55}ǻw/^=ޯTlۺΝeee:::7o`/bʕmNNKhkk߾}',,ŋf1̛\Auq7 xO N;>cvkg,9:xVFqۦN f|]r#G֭[BlSS܆ #;wLiiy ܽo_6wO)D8J'G$DFFT76} ++HMEaɵ˗Ňg?Ihl, **SfsHsT7iMMϝ=%:0gN<F^^\\9p`ODG#(**._{y.88|^̹ZISshx"{ X{g3ZGMcb|[OoLL`0Jk2꒒*'$M/]zʥP9FTUU0΁NgNV{iJvv!^zα@ o 3ϟ7Cȵ$jj}>[\!}iS;I_ Ξ''PUӧa"x ?EIPP1c`=COi()她?wH ]  @ H'48 >هA?v:j:ׯ_:\aQNҽ{=Iw A_ſYXX IR]]PT[eEEϒZot2b;r5aL|r۶t 77Ȉ"0DYXXXzEQw]˾(,,|gggH$ IL$"@   D-`7If'}'%?~$/@ t  C$QNNNYqc]uuͻooSH8BÇY'Yhik m;%({Ҩ DFD@ Ҵ>?h~y388tvfQMUB%2**$$x ++ۻ2&/++_VvDlǖK5gnƻw8( z4WGG,!C?}|ys0I? O>bzFiiin޴ĸu:0;vDGq/!ky? ўPiTN%Q%PE Q,8u@1]588 ߿vUoS|NXޓiהv-mnny]2IIKwM^~)##7EEEC?NNN#F ۉQQ;,͖UVVM2I, SS)ɓ_~T B _|6X^^>8x^ӻb!HNSRVޭ;B!$U*Wqp;F3+RRRUr OOHvjjK,7%V?f?Ozj@@`/)d.oٲJԴ`iO@vvvLt4 d3"P A2 D [8iwivwqA6ϟ=eIQ`0ҨNa21ϙ;l?&L142?~bJj&|i&SR:99ocaa5b!k ^\\VSօ*RZ0يo 4+,544BB566]m(Bh;pͥ&nweevo+_lrs`ٲ )KwVjzB8u7/^EQWWz%K445U6ժϷ4׋8 @HJ-6A$Ν;,+++߽B!D/8t{{ϟ߻3|=zۗflڴ~u͠@;[q{u WVpDHqѪ"2`I/꣦kQ£GTY993#+j쌋OP40 :|Ƨ>~}'O9;;GDD @IXI*} fgg{_o޼Z vr[%%;"wtE mŜ?# CRM7 ܳ+!>ࡣW._ݳgWCEk?j-nO8_V_pLݟV9rsss 7'[ϯ. M܇Bfv||wp_|/NNpþ~̟^񢬬g|;[}waBYi9L̝_VZܽ{„IM'UСÍ͎=?~9|.kL"vD޼u+,,&2N'#{BKzZ lqq7n\KMy}3hƍJJn^W+|FL',l7_DG'ܜ,lc?.]ػoK'dm':ZZ[C}]oeEOOOyS t2"]?Hv@H$LRPPP(= !o/555ŋa z;vD=SWOWG3~¤뛛z{{=zXxScc`РAz)sLhi={\?ޱc'`,dqӖ>_` 4k>sU+Wdj "IV~e\dY YYY66>$; Y[~QSSÄ4:-4l.NLmٲznntj5?M|x!|}]YYْRRv<+V>,mA!24 ' Y6>K50##Ava`kPut,\ONwqp:ke)τֿPh28'9P2M]])=T+N@ JJҩ 5çŸ_V՟_EqO7Qlƚo -j2?pg?Ϭ?ƻZte.~1ĻX_`@INNX<TzzZjYC뿋'@NN&&.O~+Ξ:;_chWsg$kڛؙ2'Yz͙h=o˜&yZUY2hŲܜpѬv3&yp|-5-5;;mٚߪJҫ-hc7y0,XbMR fNu73Y8gMQ/=Ryf9h֔ )_a¸MderdLjƥg[Uzs2YhnEy9JqT |,m% q,[n(R߼u*vTUVt:6}ۦ7^|6QnQkj>زKپ5?ܽu؁}ʊ򺺺[B:Bn)o^Skj{fM۟?4S$$ zۖ{{1/ib[7vRQ^Ah4Zzjʆ[2ޞ<yS)K ϶ؼq|IB0yb;P֯Y NZyyv~0ul@3 m`FKcO&rbg>^o`3Ժ>'!ہ#ˉ#*_ɮhlz$::0u( ph+;X2`i\RNwj@s| (pO>0DRVLܞsNMWy75`M@-m2[E{6W >j| Ի55u0BXPz**UlaU!넬, }{))M=[FPS]zh7'#+ݠg@&S+YX%QV6226v!R=i@U. pRUj۞oº Ru*^[~AY?;AH>?߄ͯ x[ mE{[6Gل܇ 2p~]\[n{o+V|6~qp: oNEt x|F6l$F }Ҫ*N' @'>BC 7( ~ƾUxR?AVr[nrgAgx̗lRN|(>.~I>ۯ_?QRw~'Ϗ6Ϝ9cGʊ P/]T,3$IAA~Qvڼe3 IDAT&XcnawyVV6&wIS 'LIj"# 100>pEzÆM-=L>is k K+V}僦`‚B(.>K, z)*JHPzmm=e>|c'γyO 888?.Zf̘߸qPwo߹wለm!|cLLn'>#"sFEn744(--Äqqϟ=7)o^oڴym[0w8 O9cZl\`~.ضfZq:dbIIIϜ9YYuO@<++@g;N*Kr u4iJL"IDH@D*٣'R&!SRvW$]iJxi_']U /FEEϘ1}&q# @M+<(Qϴ쌋fΘvދs;7?\j]6/_}[Fi5++* B2>UDtO>cdlt^z);]vϟb}7oα'{/$ ` l@ 42VVYYٯ$ggǦGuMКD7o޺wߟO&IQF=L"sݿoΖeN@,γy\"888WOUCATUTY[]pN]]KZ6h//߿}, }_cM*L-hM`ddiZZW\\ srs-,̷na+8hMH2#csfW4qɓ&N/%=\ ~~<-[Fh#$t P }d<Z>0r,[򺮮nٙZ ժg)UGe=>HJJ>o>0?Ӂjb%uP/W/ 8~xgoGqppp~M3h4ڤC՞q8g|Gq~+$ƺ eA^ަ`Ey9ڳ[79woݴ?Do<`DIO߶8-pegeEpBEyyL⢧V/~/IKKs^t)zy_vݺ3ks ? iРC{w$1zӥsgXsCsC{3pL-Muh:ZM0BUe*%nvA+ggaS& 739y\:[@ 8cP{330aEy׼LǺ"iL d2BQVQa'6xٓǰøf{N5џxVMW,]bc返US^?ƻZڙϘ༳='dc?yc<Ǎ3՟1gs{1gށ?cX};7߫^`zboc7iP1;QS.Xlm9ㆹ} *+F8aㇻhk+N+ Lde:cS[.dQ{9rc,I⫴Wi^c)g'{^:vSDG'}[\\or!f+`B+[~,.:~耕- s-+*,ط3z,9F%9YV־߽M$NJKIfiwyܜYwy7lمEQsZV*/3*b"oEi{׉ct:_Čs&zYUY^YQv$ =IJJe+99{+.&!!!9- No?"y-:Oi-OiAjef/ _Fe.MaehXUޑ3_9,Tf3/_'&rLrM-_׬:ni|r*NV@OEE[{G1k5540ɦk33j[?p[|Ut ӗ g^] 6rI-^Y_ P>SkBb"/Y?c|LZm6Lh֌>K`紋,_FV/޾$Z6]PP`s}`hll/K~YW_LjU(_IUn8;?~N#7ZUU}{ĉ-,[9v6>#׭[W^XX-RREBc]pYcY΅m5H2v g ٬Y3Eh_q 33R[91=d?%`R' m_ O﯊6tFѣOY3Z"Ѻ,AnnߧOl"ZU2Sиlz8j"пDE5<=g  >xM<ިao9B/Z@wq5jժ*Yw ^-j֬q4p?X.%? l|eKCfqT/Qzʪ)$?\*z^z& n "P]"G( )3G|4[O.\Xs]FjPЕa1n~ກ my+ܼysIvCcO4%===<<]+/ٷ5k7|V\s==wvqb#ǎ~cxh@ouQ6lܘtKs~/PDRhYr}];/.C\|shS=7uy=3&g? DDG*ŗDru!'7P(eܼ{@ e鯨/$GGDzCи78jFp]79:YgNVqaX>فV\x7lV]pUo6CV:!!aFy7rT֙vmK rQǤ근iJcۗs;ez7Q`G\]ӶVw?l!w S 8R.a[\ <9 8a*GJp"!ܴK'S*\~Z(=.,u)^ǾڷO}mЫ|c< l22.Z2w^œ3`}<0w=?qYz"@ ϲ?{r@B;׉cVՂxap<<1BcNb.[!KYE 7jw}Bw'3 1B8"b,XC⥂!6kYU}''|)ޟkw z?\҃CB"~AaoT⻮u(U>-2Ӊ(ȝP"8@fٮ\`MZ, nSBBq"uwP.ixk ͙"iTp&7p8cBϝ6QGN*ejLr"WO(R~kILV-SRR8q( L&~#.Ϻ̵ڍ*E;|і8(csfZnX 6\)(8?/8fw8x;cr1YtW;3߽wQ}%Wg! vd2D8g"PS/ v_l!u,/ )AG?ݫ)ӟz 9F5m.>#Kѽ[o sFJwb^!>W]W3J)B頂paXVг{PH~2^RgMgVU>j\EJՓjCʜ_pBΚG8Pq<H)@ ZTV*A"pYx EYEwxU;+?ow_Y\pmֳfz_h; 7ݺuc*־{)99YA}eѳ!1KI6AA )%0P DRhXVq Y)w=gӽ4nȝd1];yAJ`28anN,"K*g4p8+_mTtFA~K*%2X,ӧ޽[zuOvTa3OQ3œƵ7ڵj"t:W@ H͔D/To#JD`@Rd@Q5bJ!0!nm>|!g]K$t܁!bl!v]v#*.vABB8bڭQ.Nݒ5nU4P%U4-ߕo0xހ "$6BK㟌#?S˗-}.or;$4 ] )B(RR>.FWJ(DaV%<<̧7ΔqJ$ #q8 B[fs81slJpmsO%=V( IDATL5øзBK㱖 c̑Æ$mڠQ2Y7mm6ŋir|`0\@lurj@4#0Ĝ+|flDY8b #MeIQ'1Sd>("VhϷܶ@nݔ!A_7Z|w̄z`r3͛G;v2aQѱ=lfffȏM:z[k7 }[UǕ.8|;C\Lj^M2eڜ}?}Sty]yJrsrғֽ1ԏKʍj\Rjc8!@c`!bcq*MH-,J `J@  m{W8b3,??{֮\:ilBȲE k´Yw gAu~-444?ҬQq_^y9GHLqK:us{e[w6%v;d59W|ݱCP߯ |be&QM5r[|ԡ}>}zB;/Ò[s T=_ [ .B@ @M6aQ`6fX,an=(Y&z?@;|h͘ =ժU5k(~%k'_la¨1,jf-~D)%.Ϭ߰ec)oyg?;fd'_z;KM[OF^bZn|ӼY,;w!:ɚՉk?Bgw6[l&MZt DxGy9Q!*92&# NEBˆ-&H9GHAm`=aʺ-})zָf-B@i%Z!o ި{v]lwe%}C m^tpҕkׯh.]ӣ}wD>qibKn};7~g>{,1qoO>4a-fz~F5 ޭ[ZP\ө;G 1uK@\@ŧmڵc@|.V9}VxxH}ɳn߼m7jDZ"]^)IK𐟟WV'3kj ԗ>?5gvr:zEO>蚵YJtTӵ6=ݻw)m+U4[UےҥK6n͚7lؐjnϽȖb\ML\}5sܭ kToDG ]xmڽ4u2lĻ듖O`T~^~lf6n+1&N5;(BSH.{QX,ڸi mldy@7]b^ΘKP>ڥS5 rTTt"Ë/msoxx3|;)ikm/xs蛱7R -]lw~[ѭŗQ$ 33K~B;{vл6a͛v>0Q8,4$?/G2wyNۣW~ Zj" N~9֎8 &&jՊE0AͶܶ4j@L/6l[oAC\L&M_|ji,P&q=dggϛx;4wB?ۿuγgcnXo.)~͛s\LLI"J5.)8x8-x KOKbe;t{G:jRN 7]U{\r~AtZ]|HNCj׮5q̬tI? D ;Z4G&O/w1@%˧O~H{Ax%N69&&:f:l)[JRtJJjjJP^`Г߫C e#mpڡmrR;TP$ *Wsag޺*EWfv0=t߾u(g%zx622ׯ[d;&QMߌl]p]6OLu9|X۶ffd֯_"pb6MpPR ))mb㘘Rzy{ؿGQ9 ?gP*R.l,nE[V;~JAAAlLꕋ¼K_l4bKXլYEE6oslVrZCMi))JIXxז-MSVNvΫnCwlʞ9gɓޫ^|{3f4 n=ǰ7C |歌x٧OӰA[*?-民/]ޖƎY9 ?١c_nnU_2۶|&kzYD~$8O4v=UV|bZX cl՛#7ʿT3TPdݻ(jf= 0]1v=fu"`Bн{nݺ0*\z%P1!(5j՘0a\ƭԂ\eb=VS|G?ddd:=8tX qYR57oXiˎeIS'Oq] K5m8:);lX#_gWp9?_@*'3bXoڼ#qS'(3'.M޽ۇoL"WA%KWM2>&iz-KB{H[.Jӂ같CBë='҃R%H\(Yw  "JXP\%TJ DS@w1 .N.~3=HZpLp@l,2:u=}cv=g~=v|7R=powХK{{TT|ԓ#"@)yO0p Ͽ4XU#g9PЭ[`tT5k7'wZdMe{|Iߵdy^֬SJ@\rί͕.K9"D&R*ӟxO 9L+ٍ:YTiPLDNG/ H`Z#,ӯWvmfYv|yrS9cBb߷6lzC1VҲkLn@'=W![Z tú屮seif-pάݶ}77g@{R.`[%80+7x9"N51s%+-in)ϳtS~_"JAQ0K%˪y_Cmq.C /:'> %%~3ڷo%ㄉӺd4@odmձ}[չaau4yݺ¢'iiZ33oֵs~ջGvqͺͯ z%*IzȆk3xvm (/AO~7YNHHhxDhyo"jb%tEhټ|=1׉(.xJHiz<v:g?u]ev۝*QE2FMP.z#1rk_z5b;ÇΜ=al>is'6ߑS9éY\OԩÈX/0e#ykʵ&LesW\,H6n /4l8xY.tnS .k/)/lҤ)#%Ѣm6]m2zy%t (@Taw6=777?͛z@94L!v[aj6@M "b򻤟!Np8͞WPp[=VvAYJ!8$Tb4>jo#CStQTBZqA`҇@3?J3LĬ"D$8B1v`[]6y?΀o]9WI wʉοʿJ,<*s5:Iˮt za;[T8!}AAAXvnw}_6Ӫ=|uz_{~;b4?ٹ}ib PP|ԬQc'_tRrrr?"gYYG{.U`wMC  M`}Ǯ}a[,ci9gϙ~"4,d 2<1q!$dAv-k[\oTL ב %'@ `XlyyOW/]slllJ;Bu啻 7ifbrv-]?pMxAf0 pl 0y8#3Ƙ6s=Enwu.ֺxʝCApL& @ F6("9݄roqP6'2@Yveˎ.7 ^֪UKt ,HS֮]֮ݰ`AS~m2>56_Az׳.lvHػw3MΜ1N_7t֜6*HHX4wؘBŞ!j|Ξ=~Vzux398d2s Tyyo |˖6lR[5lPs찰0x'.^ڴS_ .zoA F*eݵ'66f?߿w!K7nDmڴ-,pJVf&B b@m8Z>xo?r{1meyEK|wL~~A׸{#g̚w+#e׭3=|]Q^T=Q_TzhA^h0`yIO̓yN9Pgԡ@bF~i*h]wWq%r D X-A a )$/)`[c|Nȯ^Gyc@$-=zZ*ch 2MF#*\>wA }wvD B{ڧfQn;nNzgx`@=Q[Ϥ]u3 1d3N{jԬf488X>]J,b3@ATBl6fvn1 @#L`c ;BQBrE$4zRH@Jd\?[a G d4_x )#+iM?2J]]E(GF5Jc (a1V+o00ѝ9Q~gUˡY]wWE]*ǘ}0G!`! 8]0H =&[XU@XCCÊ^d@#Gy,I2P~n>mcK| ڙ s@*ca1aI]"cCnrywٮwJARJ#B$H sR\I E1&IU|Jh=ab7#c6s aTugTVWw"iWK(?N;!855_1ħ'~i馴AAL8!BH9œ:ƶMA&,7^I~?}c&)(s`!0,IDAT0Dr8ɰew|e )E{U[Bo@@)ɝ1dU1s fjJ,Jma$s /G/ BNCJ}<󆦘`)'„r?^"XCsզcP)jtvg9CqxdWkT`J|lJZr#[.ㆳOSaBh]Si삕'*7F'r# Oh^,d QnPnI+:KSg'iCNe]3~<.jwEaG  + Hf0#g$NTI?.>:btR$_l"(FR#1P0']]99 dUt|gY?}WSAGN1xҕE٤Ιg[u%.??UX\) :{D @ ]t&x]=WGBO=EH94T_$s:G)8mjWqs<5NW Hmde&V $-sk=&Hiٖ@%WवMt@:jf,_ڍ+ $ֲ@cxKNU\}¡VV4JAx*)]G[LȢ.*+Eb(D)e2L/$pZQ7`|gjN*'*ݤmvtEʀ3E,g6ןrbW*ݍЭU%*!Ht0ǩQ|L w`7ɀ]нvTXwZ7ZLPcbRc!YWQZ~i$MKZgLNdc-MepbkI3E<0O@+ W@sܕIw*w!=k-C.!OAr"X 5>;BWfQIGKQFc'kNw wSwP|TsC^Awpet!x|(DyVEr py9g]9Vs='7X(a1vyِ4yp=@!KˀPe?S .tGw<Bi(@Hʺ>i4OznVʹEEw!P*WPqQu ʧ[{o)@wר]'$8$,"h4,D0_-}U]O gYTA74LzD6TE;5*.C'jҽSb#}s<`XyJj'E .oHnnެ9bU %Q$y\V;ee{)6JH)~HqșV;y91U*V5OZ];cφ܆JBޣ5k7^tqaC_v_|2%33 ؂ŭ} ͹ږ!:&0("QtyCvQ>$h f]ry\_KIKAg$B_w:o;8?H#hBtww8\ﯯ q#z=zh|9 'O<=cƜ'ov|>PC|yt[R5Hbbƌx붜K8Aat) dvw+[~s}v;M?\K-ŲSw-I+( I"r0efGzTB< *p}^7Ns7rݺWWUm';;{~?ީS!5&\rfVvF >ݵCtO_7n?bc6oZ< ӓ\yx%K~i_FFC9N]CbEOQ2Ta+Ńh+WFFF3]6ߛ1#aק_A-Z4cG 5waFFfq뒖~mAFl&Ƭ_Bn羰 gΙ.|]#G%< I5Q䡠 Sl\oU#43#ŃQIΤfPNhb WcɎt(.@1j$Ƕy_ Zk.{wժY#qպeKݼ#,<:f;gvls0ׯ^/oԨ}=W._'nn?q]JOTHl}nlSf51r39*xFQJ)o0֪0+#⹨Z;v:!!aF Az4ջ{2T ($Z pe7GwH*w?)S[7)ʏ=.AAAbK3>H߭=SgH?1wg&\i%TI{Qێkrۧ_ʇPüh_廭]!CNW#eu?:rh/P Wv]ߠ~++.? E j_u2ūJV~՘.b&p`v?Xav YBPPHL,T"a.7K@@Ce|kY 2>EgoKCe%\2/m@qj9Wb> UgEY8W9Y3x7ioe ^3ܼuh4jղu{^|\2KJ !P 77?5-=qYқoڹ ~6A9@8)$+4ȱ.^~Al.,^佪^^+ I궔\6r߸nPZ?x^}ef][ʿ^?Att_fs. x93|Pl0`G<1: UMzr`wQo2{xy;{ؼ_LX&JxAzo1CgggϞ rs,Z!+цu+`35lM'[s69& tS5m'jӺIcjԨ^{ڴIqcGhW -M%,d?1rP7+("S>2 GG0eV'V =?Z?VkUk2 ǟ7kR.^ѳWiS'׭?:y<,YpիW1sC2$؜ąΜ>96&*M|uEKV֪UsǶu7n]dF'}9/a捫˪~fSPϜ+W_p9:nS s90bKX;}';1#;4nBAZy/㿃 Cqy^ lwnS>Ƕ:M Ea߯V.nԨjmcW'S={ts"#֯hP/ z֗~s璗-[ 񝚷haŊ^Ϫ] [ Fy8!cg5Ppw}@'3f|8q׎m`s1㿗Vĉ3fͿy+#,,Iq1ʜڵkUΉM?p-;g( l۽]e3ly_~[i|nPEǩ,Q]|Z}njsukU7:}v5]{7lfZs]9'^p]6 z?RdǷ߼壔M[>7RVZ3f^xfQ:e?U-sAC6os'-=jxnrxotÆ CBM'Ξ\ȑ cٴ)2i_x{[2hKs96.͡jUɼUFNoP@2uh0e Tܥ`Rϟh԰!K$@)P]칹7ozroWZ=ܨa7]|mV XNdVFJjڵk=|[ߣ|p?^zǎ x|+aR.o|\QK Չ.ҡ_-4[Ѐ@ *P-`D}6 *0C=j(W$v`^@?n$/+_^c rOSvUCH(+?<7MIENDB`rkward-0.6.1/doc/rkward/0000755000175000017500000000000012124345417014422 5ustar thomasthomasrkward-0.6.1/doc/rkward/CMakeLists.txt0000644000175000017500000000024412124345417017162 0ustar thomasthomasKDE4_CREATE_HANDBOOK (index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en) KDE4_CREATE_MANPAGE (man-rkward.1.docbook 1 INSTALL_DESTINATION ${MAN_INSTALL_DIR}) rkward-0.6.1/doc/rkward/index.docbook0000644000175000017500000001322512124345417017076 0ustar thomasthomas RKWard'> ]> The RKWard Handbook Thomas Friedrichsmeier
rkward-devel@lists.sourceforge.net
2006 2007 Thomas Friedrichsmeier & the RKWard Team &FDLNotice; 04/02/2007 0.4.6 &rkward; is a GUI frontend to the powerful R language for statistical computing. KDE R rkward science
Introduction &kapp; is meant to be(come) an easy to use graphical frontend to the powerful R language for statistical computing. Since R is a full featured programming language, &kapp; will never be able to offer a complete GUI for everything in R. However, &kapp; strives to make common task simple, to provide an easy entry point for newcomers, while at the same time, transparent access to the full power of the underlying R language is provided for advanced users. Using &kapp; Most documentation is available from inside RKWard itself by selecting Help->Help on RKWard from the Menu, NOT in this document! A useful guide to getting started with &kapp; is Getting Started Section in the &kapp; wiki. Please go there for an introduction to &kapp;, and contact us, if you can help with creating user documentation. Developer's Guide to &kapp; &kapp; can be extended without the need to recompile using plugins. Extensive documentation on this should be included with &kapp; in docbook format, and is available in HTML format here. (TODO: figure out, how to include this in the docs). License Documentation: &underFDL; &underGPL; &documentation.index;
rkward-0.6.1/doc/rkward/man-rkward.1.docbook0000644000175000017500000000661012124345417020171 0ustar thomasthomas RKWard'> R'> ]> Thomas Friedrichsmeier
rkward-devel@lists.sourceforge.net
2011-05-23
rkward 1 rkward A &kde; frontend to R rkward workspace_file Rcode level flags debugger_command KDE Generic Options Qt Generic Options Description &rkward; is the a &kde;-based GUI and IDE for the &R; scripting language for statistical computing. For more information, please refer to the &rkward; website, and the documentation provided inside &rkward;. Options Rcode The given &R; code is evaluated after &rkward; has started, and after any specified workspace is loaded. Mostly useful for automated testing. level Verbosity of debug output. 0-5, where 0 is no output, 5 is all output including function trace information. Default it 2. flags Allows to configure, which sections of code to debug. Flags are given as a binary number. Refer to the source files for documentation, as this really is an internal option. command Run &rkward; through the specified debugger command. To add command line options to the debugger command, enclose them in single quotes ('') together with the command. NOTE: To use the \-\-debugger option, it must be specified as the first option on the command line. Only the frontend process will be debugged, using this option. See Also R 1 Authors &rkward; was written by Thomas Friedrichsmeier and the &rkward; team. See the &rkward; website.
rkward-0.6.1/COPYING0000644000175000017500000004325412124345420013420 0ustar thomasthomas GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. rkward-0.6.1/TODO0000644000175000017500000003674512124345420013064 0ustar thomasthomasThe 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. Simple stuff to do soon: - RKConsole: Show a notice (with "don't show again"-box, of course) when first using Ctrl+C shortcut Bugs outside RKWard: - KDE 4 - 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: - XMLGUI: - The edit menu is broken in the main window, but not detached windows (for script editor, console) - Ok in KDE 4.3.4 / Linux - Broken in KDE 4.4.1 / Windows - 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 - 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 - The editor is prone to race conditions of the type: - 1. user edits something in the editor - 2. before the edit has been synced to the backend, a different command touches the data - The editor should keep track of which / how many synchronisation commands are still outstanding. - If an edited object was touched while sync commands are still outstanding, complain and let the user handle the situation - Quitting via q() in the R console will often lead to a segfault during shutdown - options ("pager") is currently broken in RKWard. May not be a problem, but we offer a GUI to configure it in Settings->Configure RKWard... 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 R backend: - 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. 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 - RKEditorDataFrame - undo/redo - 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 - Package management dialog - auto-updating functionality (every x days, every new session, never; see https://sourceforge.net/mailarchive/message.php?msg_id=37960665) - What about the checkBuilt-option to old.packages() - RObjectListView - double click action should be configurable: View, Edit, insert name into current script, insert name into console, nothing - RKConsole: - is tab completion for file names still crashy? - currently, problem seems to be inside KUrlCompletion - Fix pasting at other positions than line end - Prevent cursor from venturing into lines other than the last line - 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 - 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! - 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 , 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 - 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? - 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" Internal stuff: - RCommand deletion - 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! - rklocalesupport: - does locale switching / detection work? Does Qt have something, yet? - 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 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 - 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 - Always save workplace layout to a file, never to config. Even for the "global" option. - 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 fetaure like in the technical section too. Also may be add something like 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 - 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? 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 rkward-0.6.1/configure0000755000175000017500000000047412124345410014270 0ustar thomasthomas#!/bin/sh echo " RKWard now uses CMake (http://cmake.org) for compilation and installation. Please refer to the file INSTALL in this directory for details. If you need help, please check http://rkward.sourceforge.net/wiki/index.php?title=General_FAQ, or write to rkward-users AT lists DOT sourceforget DOT net. "rkward-0.6.1/NOTES0000644000175000017500000000253412124345410013173 0ustar thomasthomasNotes about changes in RKWard that existing users need to adapt to: *** From 0.4.x to 0.5.0 *** - Versions of RKWard 0.5.0 or higher are designed for KDE 4, and cannot be used with KDE 3. For KDE 3 use the 0.4.x versions. - The build system was changed to CMake. Read INSTALL for details on how to build RKWard. - Due to clashes with kate default shortcuts, the shortcuts for Run->Run Line, Run Selection, and Run All were changed to Shift+F7, Shift+F8, Shift+F9, respectively. - The tabs in the main workplace view no longer have a close button that is shown when hovering the mouse over the respective icon. Rather, there is a single button to close the current tab, shown at the right of the tab bar. *** From 0.4.7a to 0.4.8 *** - With the addition of the new filesystem browser, the shortcuts to show/hide the main tool windows have changed. The filesystem browser window can be toggled using Alt+2, the shortcuts for command log, pending jobs, console, and help search are now Alt+3 through 6, respectively, instead of Alt+2 through 5. - All commands run through the console are now added to the command history of the console, by default. This setting can be changed back to the old behavior (only commands *entered* in the console are added to the history) under Settings->Configure RKWard->Console. *** Changes prior to 0.4.7a not listed in this document. *** rkward-0.6.1/AUTHORS0000644000175000017500000000061212124345410013423 0ustar thomasthomasUnless otherwise noted, all files are copyright 2001-2009 by Thomas Friedrichsmeier and the RKWard team. For slightly more details, see http://sourceforge.net/apps/mediawiki/rkward/index.php?title=About . Some files, or portions of files are copyright by third parties, as noted in the respective files. See COPYING for the terms and conditions under which you may redistribute this software.rkward-0.6.1/po/0000755000175000017500000000000012124351134012772 5ustar thomasthomasrkward-0.6.1/po/CMakeLists.txt0000644000175000017500000000241212124345424015536 0ustar thomasthomasFIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) FILE(GLOB PO_FILES *.po) FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) # making the gmo be re-built, when the po changes, but not every time is surprsingly difficult # (since the gmo file is only built for translations which are complete enough) SET(_stampFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.stamp) ADD_CUSTOM_COMMAND(OUTPUT ${_stampFile} COMMAND ${CMAKE_COMMAND} "-D_poFile=${_poFile}" "-D_gmoFile=${_gmoFile}" "-DGETTEXT_MSGFMT_EXECUTABLE=${GETTEXT_MSGFMT_EXECUTABLE}" -P ${CMAKE_CURRENT_SOURCE_DIR}/compile_po.cmake COMMAND ${CMAKE_COMMAND} -E touch ${_stampFile} COMMENT "Generating translation for language '${_lang}'" DEPENDS ${_poFile}) LIST(APPEND active_translations ${_stampFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES/ RENAME rkward.mo OPTIONAL) ENDFOREACH(_poFile ${PO_FILES}) ADD_CUSTOM_TARGET(translations ALL DEPENDS ${active_translations}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) rkward-0.6.1/po/da.po0000644000175000017500000031671412124345424013737 0ustar thomasthomas# translation of rkward.po to Danish # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Bui Arantsson , 2008. msgid "" msgstr "" "Project-Id-Version: rkward\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:03+0000\n" "Last-Translator: Launchpad Translations Administrators \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: da\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Objektet '%1' kunne ikke åbnes til redigering. Enten eksisterer det ikke, " "eller understøtter RKWard ikke redigering af denne type objekt endnu." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Kan ikke redigere '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Indlæser arbejdsflade ..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Der opstod en fejl under åbning af filen '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Der opstod en fejl under indlæsningen af arbejdsfladen" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Venter på at de resterende R kommandoer afsluttes. Vælg Annuller for at " "lukke programmet øjeblikkeligt. (ADVARSEL: Dette kan resultere i datatab)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Venter på at R færdiggør sine opgaver" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Intet filnavn er angivet. Dine data blev IKKE gemt. Vil du stadig fortsætte?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Der opstod en fejl med at gemme fil '%1'. Hvordan vil du fortsætte?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Der opstod en fejl da programmet forsøgte at gemme filen" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Forsøg at gemme under et andet filnavn" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Der opstod en fejl da programmet forsøgte at gemme filen" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Der opstod en fejl med at gemme fil '%1'. Vil du forsøge at gemme under et " "andet filnavn?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Færdig" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Viser fil(er)" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Ændr fil(er)" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "Pakken '%1' (sandsynligvis har du lige indlæst den) er i øjeblikket " "sortlistet fra at hente struktur information. Praktisk set betyder dette, at " "objekterne i pakken ikke bliver vist i objekt browseren, og der er hverken " "objektnavns-afslutning eller funktionsarguments-hinting for objekterne i " "pakken.\n" "Pakker bliver typisk sortlistede når de indeholder store mængder af data som " "det ville tage for lang tid at indlæse. For at fjerne pakken fra sortlisten " "kan du gå til Indstillinger->konfigurér RKWard->Arbejdsflade." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Pakke er sortlistet" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Objektet '%1' blev fjernet fra arbejdsfladen eller ændret til en anden slags " "objekt, men åbnes i øjeblikket til redigering. Skal objektet genskabes?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Genskab objekt?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Vil du virkelig slette objektet '%1'? Objektet er åbnet til redigering, og " "vil blive fjernet fra redigeringsværktøjet. Der er ingen mulighed for at " "genskabe det." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Skal objektet slettes?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "Vil du virkelig slette objektet '%1'? Det kan ikke genskabes." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Navn" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Etiket" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Type" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Klasse" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "Fuld sti:" #: core/robject.cpp:122 msgid "Label:" msgstr "Etiket:" #: core/robject.cpp:123 msgid "Type:" msgstr "Type:" #: core/robject.cpp:126 msgid "Function" msgstr "Funktion" #: core/robject.cpp:127 msgid "Usage: " msgstr "Brug: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Data ramme" #: core/robject.cpp:131 msgid "Array" msgstr "Opbud" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matriks" #: core/robject.cpp:135 msgid "List" msgstr "Liste" #: core/robject.cpp:137 msgid "Variable" msgstr "Variabel" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Data type:" #: core/robject.cpp:140 msgid "Environment" msgstr "Omgivelser" #: core/robject.cpp:145 msgid "Length: " msgstr "Længde: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensioner: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Klasse(r):" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Navnet du har valgt er allerede i brug eller ugyldigt. Det er omdøbt til %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Ugyldigt Navn" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Skriv i disse felter for at tilføje kolonner" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Skriv i disse felter for at tilføje rækker" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Ny Variabel#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Formatering" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Niveauer" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Kipper den markerede sektion og indsætter den på clipboardet" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Kopierer den markerede sektion til" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [ikke-skrivbar]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Tilføj variabel venstre" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Slet variabel" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Indsæt nyt tilfælde ovenover (ved %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Slet markerede rækker (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Slet den markere række (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Indsætter indhold af clipboardet..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Fil format " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Intet plugin defineret for kontekst '%1'" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Alle filer" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Konfigurér Pakker" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Lokale pakker" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Konfigurér Arkiver" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Den valgte sti er ikke skrivbar" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Bliv root" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Vent mens de valgte pakker installeres" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Installerer pakker" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "Installation blev afbrudt med exit kode %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Installerede pakker" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Titel" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Version" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Sti" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Indlæs" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Fjern" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Indlæste pakker" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Der opstod en fejl under indlæsning/fjerning af en eller flere pakker. Se " "transskription nedenunder for yderlige detaljer" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Der opstod en fejl i håndteringen ad pakkerne" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Pakken, som efterspørges (af \"%1) blev ikke fundet i arkiverne. Muligvis " "blev navnet på pakken forkært stavet. Eller muligvis må du tilføje flere " "arkiver ved at klikke på \"Konfigurér arkiver\" knappen." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Pakke er ikke tilgængelig" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Installér pakker i:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Status" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Installér" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Fjern" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Kontekst:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Hvad ønsker du at lave?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Begynd med en tom arbejdsflade" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Begynd med en tom tabel" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Indlæs en eksisterende arbejdsflade:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<<Åbn en anden fil>>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Udfør hver gang ved program start" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Grad af meddelsomhed af debug beskeder (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Maske for komponenter som skal debugges (se debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Debugger (Indsæt alle debug argumenter i gåseøjne sammen med kommandoen)" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Brugerflade til R statistik sproget" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Leder af projektet / Hovedudvikler" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Mange plugins, forslag, marketing, oversættelser" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Bidragere i alfabetisk orden" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Flere hjælpsomme kommentarer og diskussioner" #: main.cpp:135 msgid "Plugins and patches" msgstr "Plugins og patches" #: main.cpp:136 msgid "New website" msgstr "Ny hjemmeside" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "" #: main.cpp:138 msgid "A cool icon" msgstr "Et fedt ikon" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "RKWard logo, mange forslag, hjælp med formuleringer" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Flere værdifulde kommentarer, tips og patches" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Oversættelse, forslag, plugins" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Mange kommentarer, hjælpsomme forslag og bugrapporter" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "" #: main.cpp:144 msgid "Some patches" msgstr "Nogle patches" #: main.cpp:145 msgid "patches and helpful comments" msgstr "" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Mange flere på rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Undskyld hvis vi har glemt at sætte dig på listen. Venligst kontakt os for " "at blive tilføjet" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Placering" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Standard" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Venstre" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Højre" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Decimaler" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Standard indstillinger" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Som krævet" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Fast præcision:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Formaterings indstillinger for '%1'" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Niveauer kan kun tilskrives efterfølgende hele tal efter 1 " "(oversigtskolonnen er ikke skrivbar). For at slette niveauer i enden af " "listen kan du sætte dem til at være tomme." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Niveauer / Værdi etiketter for '%1'" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Filnavn" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Tilføj" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Op" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Ned" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "konfigurér standard indstillinger" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Alle Omgivelser" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Objekter med børn" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Variabler" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Funktioner" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Gemte Objekter" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Vis Objekter" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Vis Felter" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "Der opstod fejl og/eller advarsler! Se transskriptionen nedenunder" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Resultat" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Resultat:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Fejl / Advarsler" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Fejl / Advarsler:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Annullér" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Overskriv? (Det angivne objektnavn findes allerede)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Overskriv?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Kør aktuelle linje" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Kør markering" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Kør alle" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Funktions reference" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Fil kunne ikke åbnes til indlæsning" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Der opstod en fejl under parsing af XML-filen. Fejlmeddelelsen var '%1' på " "linje '%2', kolonne '%3'. Forvent flere fejlrapporter nedenunder" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Forsøger at hente børn af ugyldigt element" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Forventede præcis et element '%1', men fandt %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "'%1'-attribut ikke angiven. Tildeler '%2'" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "Ulovlig attribut værdi. Tilladte værdier er kun en af '%1'." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Ulovlig attribut værdi. Kun hele tal er tilladt." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Ulovlig attribut værdi. Kun reelle tal er tilladt." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Ulovlig attribut værdi. Tilladte værdier består kun af '%1' eller '%2'." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "XML-parser '%1' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(ingen etiket)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Vælg en:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Specificer model" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Fuldt Model" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Hovedeffekter alene" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Brugermodel:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Hovedeffekter" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Niveau" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Begreb" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Indsæt tekst" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Indsæt filnavn" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Vælg" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Gem til:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "mine.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Indsæt værdi:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Se forudskrift" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Forudskrift updateres" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Forudskrift deaktiveret" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Forudskrift opdateret" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Forudskrift ikke mulig (endnu)" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Der opstod en fejl under parsing af beskrivelsen af dette plugin ('%1'). " "Yderligere informationer findes i stdout" #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Kunne ikke skabe plugin" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Indsend" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Luk" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Hjælp" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Bug Guide" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Kode" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Bearbejder. Vent venligst" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Nedenunder kan du se kommando(erne) som svare til de indstillinger du har " "valgt. Tryk på 'indsend' for at køre kommandoen/erne." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Næste >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Tilbage" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Brug Dialog" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Variabel:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Kører" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Annulleret" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Kommando stak" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Kommandokæde" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Lukket" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Venter" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Kommando" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Beskrivelse" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "R Opstart" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "En fejl opstod under opstart af R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Skift lokalitet" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "R har indikeret at pakken '%1' kræves for at udføre den aktuelle opgave. " "Pakket er ikke installeret, og vi vil derfor åbne pakke-håndteringsværktøjet " "hvorfra du kan finde og installere den pågældende pakke." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Pakke '%1' kræves" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "R kræver information" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "R døde" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Besked fra R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "R Konsol" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Syntaks fejl\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Afbryd kørende kommando" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Kopiér valgte bogstaveligt" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Indstiller plugins..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Plugins er påkrævet: du kan styre disse igennem \"Indstillinger->Konfigurér " "RKWard\".\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Arbejdsflade" #: rkward.cpp:374 msgid "Files" msgstr "Filer" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Jobs i kø" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Datasæt" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Skaber nyt datasæt og åbner det til redigering" #: rkward.cpp:416 msgid "Script File" msgstr "Skriptfil" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "Importér Data" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Importér data fra flere forskellige filformater" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Åbner et eksisterende dokument" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Åbner en for nylig brugt fil" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Gem Arbejdsflade" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Gemmer selve dokumentet" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Gem Arbejdsflade Som" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Gemmer dokumentet som..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Lukker programmet" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "Luk Alle Data" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Lukker alle åbne data redigeringsværktøj" #: rkward.cpp:483 msgid "Close All" msgstr "Luk Alle" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Adskil" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Ingen muligheder er tilgængelige for nuværende vindue]" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Klar." #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "Lukker..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Lukker RKWard: Ønsker du at gemme arbejdsfladen?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Gem Arbejdsflade?" #: rkward.cpp:706 msgid "Don't quit" msgstr "Ikke luk" #: rkward.cpp:736 msgid "New dataset" msgstr "Nyt datasæt" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Indsæt navn på nyt datasæt" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Åbner arbejdsflade..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Ønsker du at gemme den aktuelle arbejdsflade?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Ikke-navngivet Arbejdsflade]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "Opsummering (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "udskriv (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "Objekt er slettet!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Objekt" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "Objektet er ændret. Klik eventuelt på \"Opdater\"" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Opdater" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "henter information, vent venligst." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Klik på \"Opdater\" for at hente information" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Klar" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Forbered\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Udregn\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Udskriv resultat\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Indstillinger" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Indstillinger markerede med (*) træder ikke i kraft før du har genstartet " "RKWard" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Kodefærdiggørelse" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Aktivér kodefærdiggørelse" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "minimum tegnantal før kodefærdiggørelse forsøges" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Skript redigeringsværktøj" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Indlæs/Gem kommando historie" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Maksimum længde af kommando historie" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Ubegrænset" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "maksimum antal paragraffer/linjer at vise i konsollen" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Kør kommandoer fra skript redigeringsværktøjet gennem konsollen" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Tilføj kommandoerne til konsol historien" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Kommandohistorien er som udgangspunkt kontekst afhængig" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "konsol" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Debug niveau" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Debug flag" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Kommando udløbstid" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Debug" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Opstartsaktion (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Spørg efter en fil at åbne" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Vis markeringsdialog (standard)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Vis RKWard hjælp på opstart" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Arbejdsfladens opstilling (dvs.. åbne skripts-, data- og hjælpevinduer) kan " "gemmes (og indlæses) med R arbejdsfladen eller uafhængigt af R " "arbejdsfladen. Hvilken metode foretrækker du?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Gem/gendan med R arbejdsflade, når du gemmer/indlæser R arbejdsfladen" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Sen/gendan uafhængigt af R arbejdsfladen (gem ved afslutning af RKWard " "session, gendan ved næste opstart)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Undlad at gemme/gendanne arbejdsfladens opstilling" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Giv en advarsel når objekter med flere end dette antal felter redigeres (0 " "er ubegrænset):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Ubegrænset" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "MDI vindue fokusopførsel" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Klik for at fokusere" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Fokus følger musen" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Generelt" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Hvilke objekter skal som standard vises?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Vis gemte objekter" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Vis Alle Omgivelser" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Vis objekter med børn" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Vis funktioner" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Vis variabler" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Hvilke kolonner skal vises som standard?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Etiketfelt" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Typefelt" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Klassefelt" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Undlad at hente strukturen af disse pakker:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Tilføj undtagelse" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "Tilføj navn på pakke hvis struktur ikke skal hentes" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Indstillinger for outputvindue" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Nogle plugins tilbyder både et guidet interface og et traditionelt " "dialogboks interface. Hvilken tilgang foretrækker du som udgangspunkt for " "plugins som tilbyder begge muligheder?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Foretræk altid dialogbokse" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Foretræk anbefallet burgerflade" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Fortræk altid guides" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "R syntaks oversigt (i dialogbokse)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Kode som vises som standard" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Standard højde af kodeoversigt (i pixels)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Vælg .pluginmap fil(er)" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Plugins" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Vælg .pluginmap-fil" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Følgende indstillinger påvirker for det meste kun R adfærd i konsollen. Det " "er generelt sikkert ikke at ændre dem." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Vis advarsler" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Gem advarsler" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Vis advarsler senere (standard)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Vis advarsler øjeblikkeligt" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Konvertér advarsler til fejlmeldinger" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Decimal tegn (kun til udskrift)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Output bredde (tegn)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Maksimum antal elementer, som vises i udskrifter" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Maksimum længde af avarsler/fejlmeldinger at udskrive" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Gem kommentarer i funktionerne" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "SAND (standard)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "FALSK" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Opbevar kommentarer i pakker" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "FALSK (standard)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Maksimum antal af indlejrede udtryk" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Standard antal decimaler i udskrift" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Undersøg vektorgrænser (advar)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Arkivér nedhentede pakker" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Bemærk: Opstart-standarderne vil altid blive brugt sammen med de stier du " "har angivet i denne liste" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Tilføj R Bibliotek Mappe" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Tilføj arkiv" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "R-pakker" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Foreløbigt gælder indstillingerne kun for nye kommandoer. Alle tidligere " "kommandoer vil forblive synlige/usynlige." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "vis altid kommando" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "vis altid resultat" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "vis fejl" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "vis/hæv vindue" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Burgerkommandoer" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Plugingenererede kommandoer" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Program kommandoer" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Synkroniseringskommandoer" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "Maksimum antal viste paragraffer/linjer i Kommando Logbogen" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Kommando logbog" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Tilføj til hovedvindue" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Konfigurér R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Sæt udførsel på pause" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Annullér den valgte kommando" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Nogle af kommandoerne som du forsøgte at annullere are markerede \"Sync\" " "(bogstavet 'S' i type-kolonnen). Afbrydelse af denne type kommando kan " "forårsage datatab. Disse kommandoer blev _ikke_ annullerede." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Nogle kommandoer er ikke annullerede" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Forsæt udførsel" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Kør blok" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Markér valgte som blok" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Afmarkér blok" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [ændret]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Dokumentet \"%1\" er blevet ændret. Luk alligevel?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Fil er ikke gemt" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Ikke-navngivet" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (Aktiv)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (Ikke brugt)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Ufuldendt argument.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Syntaks fejl.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "En ikke-specificeret fejl opstod under brugen af kommandoen.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Konfigurér" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Søg:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Felter:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Alle" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "alle undtagen nøgleord" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Nøgleord" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Pakke:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Læg mærke til små/storebogstaver" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Sløret sammenligning" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Søg" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Søg i hjælp" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Ingen hjælp blev fundet om '%1'. Den korresponderende pakke er muligvis ikke " "installeret/indlæst, eller er kommandoen forkært stavet. Prøv Hjælp->Søg i R " "hjælp for flere muligheder." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Ingen hjælp fundet" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Emne" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Pakke" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Fjern Output" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Genopfrisk output" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Gem output til HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Side findes ikke eller fungerer ikke" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Fjern output?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Ingen Titel" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Opsummering" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Brug" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "GUI Indstillinger" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Ikke-navngivet GUI element" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Relaterede funktioner og sider" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Tekniske detaljer" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "R Reference til '%1'" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "FEJLAGTIG REFERENCE" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Tilføj" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Venstre Sidemenu" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Højre Sidemenu" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Øverste Sidemenu" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Nederste Sidemenu" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "R hjælp" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Søg i R hjælp" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "RKWard hjælp" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Viser oversigt over R hjælp" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Viser/fremhæver R hjælp søgevinduet" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Vis RKWard hjælp" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Tidligere Vindue" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Næste Vindue" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Aktivér dokument" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Vis &Output" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Kunne ikke tilføje R X11 vindue" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Du har åbnet et nyt X11 vindue i R. Normalt forsøger RKWard at detektere " "sådanne vinduer for at kontrollere dem og tilføje en sidemenu til dem. Der " "er dog opstået en fejl denne gang, og RKWard har ikke detekteret hvilket " "vindue du har åbnet og kan dermed ikke tilføje det.\n" "Dette er til forvente hvis du åbnede vinduet på en anden skærm eller et " "andet X11 display. I dette tilfælde opfordres du til at ændre " "indstillingerne (\"display\").\n" " Hvis du derimod kan se X11 vinduet på samme skærm som denne besked, burde " "RKWard ikke have meddelt om nogen fejl, og du bedes kontakte os på rkward-" "devel@lists.sourceforge.net med med flere detaljer om dine indstillinger, så " "dette problem kan forhindres i fremtiden." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Der opstod en fejl" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Fastsæt størrelse" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Bredde" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Højde" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Aktiver grafikvindue nummer %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Kopiér indhold af grafikvindue nummer %1 til output" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Udskriv indhold af grafikvindue nummer %1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Specificer R objekt" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "Specificer navnet på R objektet som du vil gemme grafen til" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Gem indhold af grafikvindue nummer %1 til objekt '%2'" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Duplikér grafikvindue nummer %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Optegn område følger størrelsen af vinduet" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Fastsæt størrelse 500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Fastsæt størrelse 1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Fastsæt størrelse 2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Specificer fast størrelse..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Gør aktiv" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Kopiér til output" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Gem som R objekt..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Duplikér" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Åbn i standard program?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "Kunne ikke åbne \"%1\"" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Kunne ikke åbne kommando fil" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Du i færd med at redigere objekt \"%1\", som er meget stort (%2 felter). " "RKWard er ikke optimeret til at håndtere meget store objekter i det " "indbyggede data-redigeringsværktøj. Dette vil bruge en stor del hukommelse " "og, afhængigt af dine systemspecifikationer, kan være meget langsomt. For " "store objekter anbefalles det generelt at redigere ved brug af kommando " "linjen, eller at dele objektet op mindre dele inden redigering. Hvis du på " "den anden side har meget hukommelse, og datafilen ikke er for kompliceret " "(numeriske data er nemmere at håndtere end faktordata), er det ikke " "nødvendigvis et problem at bruge RKWard. Du kan konfigurere denne advarsel " "(eller slukke helt for den) under Indstillinger->Konfigurér RKWard-" ">Generelt.\n" "Ønsker du at forsætte med at redigere objektet?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Du er i gang med at redigere et meget stort objekt" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Gem Arbejdsflade opstilling" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Gendan Arbejdsflade opstilling" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Vindue Venstre" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Vindue Højre" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Søg i hjælpen" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Redigér" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Oversigt" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Ændr navnet" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "kopiér til nyt symbol" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "kopiér til .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Slet" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Kopiér objekt" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Indsæt navnet at kopiere til" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Et objekt i GlobalEnv hedder allerede '%1'. Kopien blev i stedet navngivet " "'%2'." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Navn er allerede i brug" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Ændr objektnavn" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Indsæt et nyt navn" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Ikke-Funktioner" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Vis Alle Omgivelser" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Vis gemte objekter" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Redigér" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Fil" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Oversigt" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Kør" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Ny" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Importér" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Arbejdsflade" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Vinduer" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Aktivér" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "&Indstillinger" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Hjælp" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Device(vindue)" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "&Vindue" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Værktøj Flyt" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Dine navne, ,Launchpad Contributions:,Bui Arantsson, ,Launchpad " "Contributions:,Bui Arantsson, ,Launchpad Contributions:,Bui Arantsson, " ",Launchpad Contributions:,Bui Arantsson,Launchpad Translations Administrators" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Dine e-mail,,,,,,,,,,,,," rkward-0.6.1/po/README.translations0000644000175000017500000000177512124345424016411 0ustar thomasthomas=== Maintainance of translations === So you want to work on one of the translations? Great! In general, however, you should NOT use the .po files in this directory as a basis for your translations, and neither should you commit your updates, here. Please use https://translations.launchpad.net/rkward/trunk for your translations. THIS IS NOT THE PRIMARY PLACE where translations are maintained. In order to minimize the risk of your work conflicting with that of other translators, please get the most recent .po from launchpad, and upload, there. If you do not want to work on launchpad for some reason or another, contact us on the mailing list, and we can upload translations for you. If all you want is a quick way to pull translations from launchpad, use ../scripts/import_lp_translations.sh (only in our SVN repository, not in source releases). === Developers === - Synchronize translations from Launchpad to SVN using ../scripts/import_lp_translations.sh . - Update message template file using Messages.sh rkward-0.6.1/po/el.po0000644000175000017500000036204312124345424013747 0ustar thomasthomas# translation of el.po to # Greek translation of Rkward. # This file is put in the public domain. # # Ilias Soumpasis , 2006, 2007, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: el\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:02+0000\n" "Last-Translator: Giannis Katsampirhs \n" "Language-Team: en_US \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Το αντικείμενο '%1' δεν μπορεί να ανοιχθεί για επεξεργασία. Είτε δεν υπάρχει " "ή το RKWard δεν υποστηρίζει την επεξεργασία αυτού του τύπου των αντικειμένων " "ακόμη." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Δεν μπορεί να γίνει επεξεργασία του '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Φόρτωση χώρου εργασίας ..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Υπήρξε ένα σφάλμα κατά το άνοιγμα του φακέλου '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Σφάλμα φόρτωσης του χώρου εργασίας" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Αναμονή για να σταματήσουν οι εναπομένουσες εντολές του R. Για να κλείσετε " "άμεσα την εφαρμογή πιέστε Ακύρωση (ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό μπορεί να οδηγήσει σε " "απώλεια δεδομένων)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Αναμένοντας το R να τελειώσει" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Δεν δόθηκε όνομα αρχείου. Τα δεδομένα σας δεν αποθηκεύτηκαν. Θέλετε να " "συνεχίσετε;" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Η αποθήκευση στο αρχείο '%1' απέτυχε. Τι θέλετε να κάνετε;" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Η αποθήκευση απέτυχε" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Προσπαθήστε να το αποθηκεύσετε με διαφορετικό όνομα αρχείου" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Η αποθήκευση απέτυχε" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Η αποθήκευση του αρχείου '%1' απέτυχε. Θέλετε να το αποθηκεύσετε με " "διαφορετικό όνομα;" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Έγινε" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Προβολή των αρχείων" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Επεξεργασία αρχείου" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "Το πακέτο '%1' (πιθανόν μόλις το έχετε φορτώσει) είναι προσωρινά " "μπλοκαρισμένο για την λήψη πληροφοριών για την δομή του. Πρακτικά αυτό " "σημαίνει ότι τα αντικείμενα αυτού του πακέτου δεν θα εμφανιστούν στον χώρο " "εργασίας και καμία λειτουργία συμπλήρωσης του ονόματος του αντικειμένου ή " "τονισμού των μεταβλητών των συναρτήσεων για αυτό το πακέτο δεν θα είναι " "διαθέσιμη.\n" " Τα πακέτα τυπικά θα μπλοκάρονται εάν περιέχουν τεράστιο ποσό δεδομένων τα " "οποία θα έκαναν πολύ ώρα να φορτωθούν. Για να ξεμπλοκάρετε το πακέτο " "επισκεφθείτε το Ρυθμίσεις ->Ρύθμιση RKWard->Χώρος εργασίας" #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Το πακέτο είναι μπλοκαρισμένο" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Το αντικείμενο '%1' διαγράφηκε από το χώρο εργασίας ή μετατράπηκε σε άλλο " "τύπο αντικειμένου, αλλά είναι προσωρινά ανοικτό για επεξεργασία. Επιθυμείτε " "την ανάκτησή του;" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Ανάκτηση αντικειμένου;" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Θέλετε να διαγράψετε το αντικείμενο '%1'; Το αντικείμενο είναι προσωρινά " "ανοικτό για επεξεργασία, και θα αφαιρεθεί και από τον επεξεργαστή. Δεν θα " "υπάρχει περίπτωση να το ανακτήσετε." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Αφαίρεση αντικειμένου;" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Θέλετε πραγματικά να διαγράψετε το αντικείμενο '%1'; Δεν θα υπάρχει τρόπος " "να το ανακτήσετε." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Όνομα" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Ετικέτα" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Τύπος" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Κλάση" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "Πλήρης διαδρομή τοποθεσίας:" #: core/robject.cpp:122 msgid "Label:" msgstr "Ετικέτα:" #: core/robject.cpp:123 msgid "Type:" msgstr "Τύπος:" #: core/robject.cpp:126 msgid "Function" msgstr "Συνάρτηση" #: core/robject.cpp:127 msgid "Usage: " msgstr "Χρήση: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Πλαίσιο δεδομένων" #: core/robject.cpp:131 msgid "Array" msgstr "Διάταξη" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Μήτρα" #: core/robject.cpp:135 msgid "List" msgstr "Λίστα" #: core/robject.cpp:137 msgid "Variable" msgstr "Μεταβλητή" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Τύπος δεδομένων:" #: core/robject.cpp:140 msgid "Environment" msgstr "Περιβάλλον" #: core/robject.cpp:145 msgid "Length: " msgstr "Μήκος: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Διαστάσεις: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Κλάσεις:" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Το όνομα που δώσατε ήδη υπάρχει ή δεν είναι έγκυρο. Μετονομάστηκε σε %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Μη έγκυρο όνομα" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Πληκτρολογίστε σε αυτά τα πεδία για να προσθέσετε νέες στήλες" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Πληκτρολογίστε σε αυτά τα πεδία για να προσθέσετε νέες γραμμές" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Νέα Μεταβλητή#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Μορφοποίηση" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Επίπεδα" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Τύπος δεδομένων." #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Αποκοπή του επιλεγμένου τμήματος και τοποθέτηση στο πρόχειρο" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Αντιγραφή του επιλεγμένου τμήματος και τοποθέτηση στο πρόχειρο" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Επικόλληση εντός του πίνακα" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Επικόλληση εντός της επιλογής" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [μόνο για ανάγνωση]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Εισάγετε καινούρια μεταβλητή αριστερά" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Διαγραφή αυτής της μεταβλητής" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Εισάγετε καινούρια περίπτωση παραπάνω (στο %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Διαγραφή επιλεγμένων σειρών (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Διαγραφή αυτής της σειράς (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Εισαγωγή περιεχομένων προχείρου..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Μορφοποίηση: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Δεν ορίστηκαν πρόσθετα για το πλαίσιο '%1'" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Όλα τα αρχεία" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Ρύθμιση πακέτων" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Τοπικά πακέτα" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Ρύθμιση αποθηκών" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Δεν έχετε δικαίωμα εγγραφής στην επιλεγμένη τοποθεσία βιβλιοθηκών" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Γίνετε υπερχρήστης" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Παρακαλώ πριμένετε όσο εγκαθίστανται τα επιλεγμένα πακέτα" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Εγκατάσταση πακέτων" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "Η διαδικασία εγκατάστασης τερματίστηκε με κωδικό εξόδου %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Εγκατεστημένα πακέτα" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Τίτλος" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Έκδοση" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Τοποθεσία" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Φόρτωση" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Αποφόρτωση" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Φορτωμένα πακέτα" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Υπήρξε ένα σφάλμα κατά την φόρτωση / αποφόρτωση πακέτων. Δείτε την περιγραφή " "παρακάτω για λεπτομέρειες" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Σφάλμα κατά την διαχείριση πακέτων" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Το πακέτο που ζητήθηκε από τη μηχανή υποστήριξης (\"%1\") δεν βρέθηκε στις " "αποθήκες λογισμικού. Ίσως το όνομα του πακέτου να γράφτηκε λάθος. Η ίσως " "πρέπει να προσθέσετε επιπλέον αποθήκες πακέτων μέσω του κουμπιού \"Ρύθμιση " "Αποθηκών\"." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Το πακέτο δεν είναι διαθέσιμο" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Αποθήκευση πακέτων στο:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Κατάσταση" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Εγκατάσταση" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Αφαίρεση" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Σχετικό:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Τι θέλετε να κάνετε;" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Εκκίνηση με ένα κενό χώρο εργασίας" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Εκκίνηση με ένα κενό πίνακα" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Φόρτωση ενός υπάρχοντος χώρου εργασίας" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<<Άνοιγμα ενός άλλου αρχείου>>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Να γίνεται πάντα αυτό κατά την έναρξη" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Βαθμός μηνυμάτων αποσφαλμάτωσης (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Μάσκα για τα συστατικά της αποσφαλμάτωσης (δείτε debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Αποσφαλματωτής (Συμπεριλάβετε οποιεσδήποτε παραμέτρους του αποσφαλματωτή " "μέσα σε εισαγωγικά ('') μαζί με την εντολή)" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Γραφικό περιβάλλον για τη γλώσσα στατιστικής R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Επικεφαλής έργου / κύριος προγραμματιστής" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Πολλά πρόσθετα, προτάσεις, μάρκετινγκ, μεταφράσεις" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Συντελεστές με αλφαβητική σειρά" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Διάφορες χρήσιμα σχόλια και συζητήσεις" #: main.cpp:135 msgid "Plugins and patches" msgstr "Πρόσθετα και προσθήκες" #: main.cpp:136 msgid "New website" msgstr "Νέος δικτυακός τόπος" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "Πρόσθετο φίλτρου HP, μετάφραση στα ισπανικά" #: main.cpp:138 msgid "A cool icon" msgstr "Ένα καλό εικονίδιο" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "Λογότυπο RKWard, πολλές προτάσεις, βοήθεια στο λεξιλόγιο" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Διάφορα αξιόλογα σχόλια, υποδείξεις και διορθώσεις" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Μετάφραση, Προτάσεις, πρόσθετα" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Πολλά σχόλια, χρήσιμες προτάσεις, και αναφορές σφαλμάτων" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Μετάφραση στα γερμανικά, αναφορά σφαλμάτων" #: main.cpp:144 msgid "Some patches" msgstr "Μερικές διορθώσεις" #: main.cpp:145 msgid "patches and helpful comments" msgstr "Διορθώσεις και ενδιαφέροντα σχόλια" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "" "Πολύ περισσότερος κόσμος στη λίστα rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Συγγνώμη αν ξεχάσαμε να σας απαριθμήσουμε. Παρακαλούμε επικοινωνήστε μαζί " "μας για να σας προσθέσουμε" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Στοίχιση" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Προκαθορισμένο" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Αριστερά" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Δεξιά" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Θέση Υποδιαστολής" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Προκαθορισμένες ρυθμίσεις" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Όπως απαιτείται" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Σταθερή ακρίβεια" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Επιλογές μορφοποίησης για '%1'" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Επίπεδα μπορούν να τεθούν μόνο σε αύξοντες αριθμούς ξεκινώντας από το 1 (η " "στήλη ευρετηρίου είναι μόνο για ανάγνωση). Για να αφαιρέσετε τα επίπεδα από " "το τέλος της λίστας απλά ρυθμίστε τα να είναι άδεια." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Επίπεδα / Ετικέτες τιμών για το '%1'" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Όνομα αρχείου" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Προσθήκη" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Πάνω" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Κάτω" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Ρύθμιση προκαθορισμένων" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Όλα τα Περιβάλλοντα" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Αντικείμενα με απογόνους" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Μεταβλητές" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Συναρτήσεις" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Κρυφά Αντικείμενα" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Εμφάνιση αντικειμένων" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Εμφάνιση πεδίων" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "Υπήρξαν σφάλματα ή / και προειδοποιήσεις! Δείτε παρακάτω για μια " "περιγραφή" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Παράθυρο αποτελεσμάτων" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Αποτελέσματα:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Σφάλματα / Προειδοποιήσεις" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Σφάλματα / Προειδοποιήσεις" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Ακύρωση" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Αντικατάσταση; (Το όνομα του αντικειμένου που δόθηκε ήδη υπάρχει)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Αντικατάσταση;" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Εκτέλεση τρέχουσας γραμμής" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Εκτέλεση της επιλογής" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Εκτέλεση όλων" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Αναφορά συνάρτησης" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Αδύνατο το άνοιγμα του αρχείου για ανάγνωση." #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Σφάλμα ανάλυσης του αρχείου XML. Το σφάλμα ήταν: '%1' στη γραμμή '%2', στήλη " "'%3'. Αναμένετε περισσότερα λάθη να αναφερθούν παρακάτω." #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Προσπάθεια ανάκτησης απογόνων ενός μη έγκυρου στοιχείου" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Αναμενόταν μόνο ένα στοιχείο '%1' αλλά βρέθηκαν %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "'%1'- Δεν δόθηκε τιμή ιδιότητας. Υποτίθεται '%2'" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "Μη επιτρεπόμενη τιμής ιδιότητας. Επιτρεπόμενες τιμές είναι μόνο μία από '%1'." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Μη επιτρεπόμενη τιμής ιδιότητας. Μόνο ακέραιοι αριθμοί επιτρέπονται." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "" "Μη επιτρεπόμενη τιμής ιδιότητας. Μόνο πραγματικοί αριθμοί επιτρέπονται." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Μη επιτρεπόμενη τιμής ιδιότητας. Επιτρεπόμενες τιμές είναι μόνο η '%1'. ή " "'%2'." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "Ανάλυση XML '%1' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(χωρίς ετικέτα)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Επιλέξτε ένα:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Προσδιορισμός μοντέλου" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Πλήρες μοντέλο" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Κύριες επιδράσεις μόνο" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Προσαρμοσμένο μοντέλο:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Κύρια εφέ" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Επίπεδο" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Όρος" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Εισαγωγή κειμένου" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Εισαγωγή ονόματος αρχείου" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Επιλογή" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Αποθήκευση σε:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "my.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Εισάγετε τιμή:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Προεπισκόπηση" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Ενημέρωση προεπισκόπησης" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Απενεργοποιημένη προεπισκόπηση" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Ενημερωμένη προεπισκόπηση" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Μη διαθέσιμη προεπισκόπηση" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Υπήρξε ένα σφάλμα κατά την προσπάθεια ανάλυσης της περιγραφής αυτού του " "πρόσθετου ('%1'). Παρακαλώ κοιτάξτε στο stdout για λεπτομέρειες." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Αδύνατη η δημιουργία προσθέτου" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Υποβολή" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Κλείσιμο" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Βοήθεια" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Χρήση μάγου" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Κώδικας" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Επεξεργασία. Παρακαλώ περιμένετε" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Παρακάτω μπορείτε να δείτε τις εντολές που αντιστοιχούν στις ρυθμίσεις που " "κάνατε. Πιέστε 'Υποβολή' για να εκτελέσετε τις εντολές." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Επόμενο >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Προηγούμενο" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Χρήση διαλόγου" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Μεταβλητή:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Εκτελείται" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Ακυρώθηκε" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Σωρός εντολών" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Σωρός εντολών" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Έκλεισε" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Αναμονή" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Εντολή" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Περιγραφή" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "Εκκίνηση R" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Σφάλμα κατά την έναρξη του R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Αλλαγή εντοπιότητας (locale)" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "Το σύστημα υποστήριξης έχει υποδείξει ότι για να προχωρήσει με αυτήν την " "εργασία απαιτείται το πακέτο '%1', το οποίο δεν είναι εγκατεστημένο. Θα " "ανοίξει το εργαλείο διαχείρισης πακέτων, και εκεί μπορείτε να εντοπίσετε και " "να εγκαταστήσετε το πακέτο." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Απαιτείται το πακέτο '%1'" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "Το σύστημα υποστήριξης R απαιτεί πληροφορίες" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "Το σύστημα υποστήριξης R έκλεισε" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Μήνυμα από το σύστημα υποστήριξης R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "Τερματικό R" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Σφάλμα σύνταξης.\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Διακοπή εντολής που εκτελείται" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Αντιγραφή επιλογής ως έχει" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Ρύθμιση προσθέτων..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Απαιτούνται πρόσθετα. Μπορείτε να τα διαχειριστείτε μέσα από το \"Ρυθμίσεις-" ">Ρύθμιση RKWard \".\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Χώρος εργασίας" #: rkward.cpp:374 msgid "Files" msgstr "Αρχεία" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Εργασίες σε εκκρεμότητα" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Πακέτο δεδομένων" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "" "Δημιουργεί ένα καινούριο άδειο πακέτο δεδομένων και το ανοίγει για " "επεξεργασία" #: rkward.cpp:416 msgid "Script File" msgstr "Αρχείο σεναρίου" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "Εισαγωγή δεδομένων" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Εισαγωγή δεδομένων από διάφορους τύπους αρχείων" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Άνοιγμα ενός υπάρχοντος εγγράφου" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Άνοιγμα ενός πρόσφατου αρχείου" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Αποθήκευση χώρου εργασίας" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Αποθηκεύει το τρέχον έγγραφο" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Αποθήκευση χώρου εργασίας ως" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Αποθηκεύει το τρέχον έγγραφο ως..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Κλείνει την εφαρμογή" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "Κλείσιμο όλων των δεδομένων" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Κλείνει όλους τους ανοιχτούς επεξεργαστές δεδομένων" #: rkward.cpp:483 msgid "Close All" msgstr "Κλείσιμο όλων" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Αποσύνδεση" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Καμία διαθέσιμη ενέργεια για την παρούσα προβολή]" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Έτοιμο." #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "Έξοδος..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "" "Τερματισμός του RKWard: Θέλετε να αποθηκεύσετε τον τρέχοντα χώρο εργασίας;" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Αποθήκευση χώρου εργασίας;" #: rkward.cpp:706 msgid "Don't quit" msgstr "Να μην τερματισθεί" #: rkward.cpp:736 msgid "New dataset" msgstr "Νέο πακέτο δεδομένων" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Εισάγετε το όνομα για το νέο πακέτο δεδομένων" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Άνοιγμα χώρου εργασίας..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Θέλετε να αποθηκεύσετε τον τρέχοντα χώρο εργασίας;" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Χώρος εργασίας χωρίς όνομα]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "summary (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "print (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "Το αντικείμενο έχει διαγραφεί!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Προβολέας αντικειμένων: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "" "Το αντικείμενο έχει αλλάξει. Ισως να θέλετε να πατήσετε \"Ανανέωση\"" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Ενημέρωση" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Ανάκτηση πληροφοριών. Παρακαλώ περιμένετε." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Πατήστε \"Ανανέωση\" για να ανακτήσετε τις πληροφορίες" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Έτοιμο" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Ετοιμάζεται\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Υπολογισμός\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Εκτύπωση Αποτελέσματος\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Ρυθμίσεις" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Ρυθμίσεις σημειωμένες με (*) δεν έχουν επίδραση μέχρι να επανεκκινήσετε το " "Rkward" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Συμπλήρωση κώδικα" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Ενεργοποίηση συμπλήρωσης κώδικα" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "" "Ελάχιστος αριθμός χαρακτήρων πριν να αρχίσει η προσπάθεια συμπλήρωσης κώδικα" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Επεξεργαστής σεναρίων" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Φόρτωση/αποθήκευση ιστορικού εντολών" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Μέγιστο μήκος ιστορικού εντολών" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Χωρίς περιορισμό" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Μέγιστος αριθμός παραγράφων/γραμμών προβολής στο τερματικό" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Εκτέλεση εντολών από τον επεξεργαστή σεναρίων στο τερματικό" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Προσθήκη επίσης αυτών των εντολών στο ιστορικό του τερματικού" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Το ιστορικό εντολών είναι ευαίσθητο στα περιεχόμενα (προκαθορισμένο)" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Τερματικό" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Επίπεδο αποσφαλμάτωσης" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Σημαίες αποσφαλμάτωσης" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Χρονικό περιθώριο εκτέλεσης εντολής" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Αποσφαλμάτωση" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Ενέργεια κατά την εκκίνηση (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Ερώτηση για άνοιγμα αρχείου" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Προβολή διαλόγου επιλογής (προεπιλεγμένο)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Προβολή βοήθειας RKWard κατά την εκκίνηση" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Η διάταξη του χώρου εργασίας του RKWard (π.χ. εκεί όπου τα παράθυρα " "σεναρίων, δεδομένων, βοήθειας ανοίγουν) μπορεί να αποθηκευτούν (και να " "ανοιχτούν) για κάθε χώρο εργασίας του R ή ανεξάρτητα του χώρο εργασίας του " "R. Τι προτιμάτε;" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Αποθήκευση/ανάκτηση μαζί με το χώρο εργασίας του R, όταν γίνεται " "αποθήκευση/ανάκτηση του χώρου εργασίας του R" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Αποθήκευση/ανάκτηση ανεξάρτητα από το χώρο εργασίας του R (αποθήκευση στο " "τέλος της συνεδρίας του RKWard, ανάκτηση στην επόμενη εκκίνηση του)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Μη αποθήκευση/ανάκτηση της διάταξης χώρου εργασίαςτου RKWard" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Προειδοποίηση όταν πρόκειται να επεξεργαστούν αντικείμενα με περισσότερα από " "αυτόν τον αριθμό πεδίων (0 για απεριόριστο):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Απεριόριστο" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Συμπεριφορά εστίασης παραθύρου εργασίας" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Κλίκ για εστίαση" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Εστίαση ακολουθεί την κίνηση του ποντικιού" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Γενικά" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Ποια αντικείμενα να φαίνονται από την αρχή;" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Εμφάνιση κρυφών αντικειμένων" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Προβολή όλων των περιβάλλοντων" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Προβολή αντικειμένων με απογόνους" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Εμφάνιση συναρτήσεων" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Εμφάνιση μεταβλητών" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Ποιες στήλες να φαίνονται από την αρχή;" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Πεδίο ετικέτας" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Πεδίο τύπου" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Πεδίο κλάσης" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Να μην γίνεται ανάκτηση ποτέ της δομής αυτών των πακέτων" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Προσθέστε εξαίρεση" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" "Προσθέστε το όνομα του πακέτου για το οποίο δεν μπόρεσε να βρεθεί η δομή" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Επιλογές παραθύρου αποτελεσμάτων" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Μερικά πρόσθετα είναι διαθέσιμα και με διάταξη μάγου και με παραδοσιακή " "τύπου διαλόγου. Εάν και οι δύο είναι διαθέσιμες ποια διάταξη προτιμάτε;" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Πάντα διάταξη διαλόγου" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Προτίμηση συνιστώμενης διάταξης" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Πάντα διάταξη μάγου" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "Προβολή σύνταξης R (σε παράθυρα διαλόγων)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Ο κώδικας να φαίνεται από την αρχή" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Προκαθορισμένο ύψος προβολής κώδικα (εικονοστοιχεία)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Επιλέξτε αρχεία .pluginmap" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Πρόσθετα" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Επιλέξτε αρχείο .pluginmap" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Οι ακόλουθες ρυθμίσεις επηρεάζουν κυρίως την συμπεριφορά του R στο τερματικό " ". Είναι γενικά ασφαλές να μην αλλάξετε αυτές τις ρυθμίσεις." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Προβολή προειδοποιήσεων" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Καταστολή προειδοποιήσεων" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Εμφάνιση προειδοποιήσεων αργότερα (προκαθορισμένο)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Εμφάνιση προειδοποιήσεων άμεσα" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Μετατροπή προειδοποιήσεων σε σφάλματα" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Δεκαδικός χαρακτήρας (μόνο για εμφάνιση)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Πλάτος αποτελεσμάτων (χαρακτήρες)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Μέγιστος αριθμός εμφάνισης στοιχείων στην εντολή print" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Μέγιστο μήκος προειδοποιήσεων/λάθών στην εμφάνιση" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Διατήρηση των σχολίων στις εντολές" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "ΑΛΗΘΕΣ (προκαθορισμένο)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "ΨΕΥΔΕΣ" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Διατήρηση των σχολίων στα πακέτα" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "ΨΕΥΔΕΣ (προκαθορισμένο)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Μέγιστο επίπεδο συγγενών εκφράσεων" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Προκαθορισμένη δεκαδική ακρίβεια στην εμφάνιση print ()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Ελέγξτε τα όρια διανυσμάτων (προειδοποίηση)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "Σύστημα υποστήριξης R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Αρχικοποίηση μεταφορτομένων πακέτων" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Σημείωση: Τα προκαθορισμένα κατά την έναρξη θα χρησιμοποιούνται πάντα μαζί " "με τις τοποθεσίες που θα καθορίσετε σε αυτήν την λίστα" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Προσθήκη φακέλου βιβλιοθηκών R" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Προσθήκη αποθήκης πακέτων" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "Πακέτα R" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Από τώρα οι ρυθμίσεις έχουν εφαρμογή μόνο στιςκαινούριες εντολές. Όλες οι " "προηγούμενες εντολές παραμένουν ορατές/αόρατες." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "πάντα προβολή εντολής" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "πάντα προβολή αποτελέσματος" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "προβολή σφαλμάτων" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "προβολή/εμφάνιση παραθύρου" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Εντολές χρήστη" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Εντολές που δημιουργήθηκαν από τα πρόσθετα" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Εντολές εφαρμογής" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Εντολές συγχρονισμού" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" "Μέγιστος αριθμός παραγράφων/γραμμών προβολής στο αρχείο καταγραφής εντολών" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Αρχείο καταγραφής εντολών" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Επισύναψη στο κύριο παράθυρο" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Ρύθμιση του συστήματος υποστήριξης R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Παύση εκτέλεσης" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Ακύρωση επιλεγμένων εντολών" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Κάποιες από τις εντολές που προσπαθείτε να διαγράψετε έχουν χαρακτηριστεί ως " "\"sync\"·(γράμμα 'S' στην στήλη του τύπου). Ακυρώνοντας τέτοιες εντολές " "μπορεί να οδηγήσει σε απώλεια δεδομένων. Αυτές οι εντολές δεν έχουν ακυρωθεί." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Κάποιες εντολές δεν ακυρώθηκαν" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Συνέχιση εκτέλεσης" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Εκτέλεση τμήματος" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Σήμανση επιλογής σαν τμήμα" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Αναίρεση σήμανσης επιλογής σαν τμήμα" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [τροποποιήθηκε]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Το έγγραφο \"%1\" έχει τροποποιηθεί. Θέλετε να το κλείσετε;" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Το αρχείο δεν αποθηκεύτηκε" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Ανώνυμο" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (Ενεργό)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (Όχι σε χρήση)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Μη ολοκληρωμένη δήλωση.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Σφάλμα σύνταξης.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "Ένα απροσδιόριστο σφάλμα συνέβη κατά την εκτέλεση της εντολής.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Ρύθμιση" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Αναζήτηση:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Πεδία:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Όλα" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Όλα εκτός από τις λέξεις κλειδιά" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Λέξεις κλειδιά" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Πακέτο:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Διάκριση πεζών/κεφαλαίων" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Ασαφές ταίριασμα" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Αναζήτηση" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Αναζήτηση βοήθειας" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Δεν βρέθηκε βοήθεια στο '%1'. Πιθανόν το αντίστοιχο πακέτο να μην είναι " "εγκατεστημένο/ φορτωμένο, ή πιθανόν να μην έχετε πληκτρολογήσει σωστά την " "εντολή. Προσπαθήστε χρησιμοποιώντας τη Βοήθεια->Αναζήτηση βοήθειας R για " "περισσότερες επιλογές." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Δεν βρέθηκε βοήθεια" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Θέμα" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Πακέτο" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Εκκαθάριση Παραθύρου Αποτελεσμάτων" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Ανανέωση Παραθύρου Αποτελεσμάτων" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Αποθήκευση αποτελεσμάτων ως ιστοσελίδα" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Η σελίδα δεν υπάρχει ή είναι προβληματική" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Εκκαθάριση παραθύρου αποτελεσμάτων;" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Χωρίς τίτλο" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Περίληψη" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Χρήση" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Ρυθμίσεις GUI" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Στοιχείο του GUI χωρίς όνομα" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Σχετικές λειτουργίες και σελίδες" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Τεχνικές λεπτομέρειες" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "Αναφορά του R για το '%1'" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "ΠΡΟΒΛΗΜΑΤΙΚΗ ΑΝΑΦΟΡΑ" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Επισύναψη" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Αριστερή πλευρική μπάρα" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Δεξιά πλευρική μπάρα" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Άνω πλευρική μπάρα" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Κάτω πλευρική μπάρα" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Βοήθεια R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Αναζήτηση βοήθειας R" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Βοήθεια RKWard" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Προβάλει το ευρετήριο βοήθειας του R" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Προβάλει/εμφανίζει το παράθυρο αναζήτησης βοήθειας του R" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Προβολή βοήθειας του RKWard" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Προηγούμενο Παράθυρο" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Επόμενο Παράθυρο" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Ενεργοποίηση προβολής εγγράφου" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Προβολή &Παραθύρου αποτελεσμάτων" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Δεν ήταν δυνατή η ενσωμάτωση του παραθύρου Χ11" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Έχετε δημιουργήσει ένα νέο παράθυρο στης συσκευής Χ11 στο R. Συνήθως το " "RKWard προσπαθεί να εντοπίσει τέτοια παράθυρα, να τα ελέγξει και να " "προσθέσει μία γραμμή εργαλείων σε αυτά. Αυτή τη φορά όμως το RKWard απέτυχε " "να εντοπίσει ποιο παράθυρο δημιουργήθηκε και γιαυτό δεν μπορεί να το " "ενσωματώσει. \n" "Αν δημιουργήσατε εσείς αυτό το νέο παράθυρο σε διαφορετική οθόνη ή προβολή " "Χ11, αυτό είναι αναμενόμενο. Τότε θα σας ενδιέφερε να αλλάξετε τις επιλογές " "(\"προβολή\").\n" "Αν μπορείτε να δείτε το παράθυρο Χ11 στην ίδια οθόνη με αυτό το μήνυμα, τότε " "είναι πρόβλημα του RKWard. Σε αυτήν την περίπτωση στείλτε μας μήνυμα στο " "devel@lists.sourceforge.net με λεπτομέρειες για τις ρυθμίσεις σας, ώστε να " "προσπαθήσουμε να το διορθώσουμε στις μελλοντικές εκδόσεις του RKWard." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Υπήρξαν κάποιο σφάλμα" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Προσδιορισμός σταθερού μέγεθος" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Πλάτος" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Ύψος" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Ενεργοποίηση συσκευής γραφικών νούμερο %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "" "Αντιγραφή περιεχομένων της συσκευής γραφικών νούμερο %1 στο παράθυρο " "αποτελεσμάτων" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Εκτύπωση περιεχομένων της συσκευής γραφικών νούμερο %1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Προσδιορισμός αντικειμένου R" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "" "Επιλέξτε το όνομα του αντικειμένου R με το οποίο θέλετε να σώσετε το γράφημα" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "" "Αποθήκευση περιεχομένων της συσκευής γραφικών νούμερο %1 στο αντικείμενο '%2'" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Διπλασιασμός συσκευής γραφικών νούμερο %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Η περιοχή σχεδιασμού ακολουθεί το μέγεθος του παραθύρου" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Σταθερό μέγεθος 500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Σταθερό μέγεθος 1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Σταθερό μέγεθος 2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Προσαρμοσμένο σταθερό μέγεθος..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Ενεργοποίηση" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Αντιγραφή στο παράθυρο αποτελεσμάτων" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Αποθήκευση ως αντικειμένου R..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Διπλασιασμός" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Άνοιγμα με·την·προεπιλεγμένη·εφαρμογή;" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "Αδυναμία ανοίγματος του \"%1\"" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Αδυναμία ανοίγματος του φακέλου εντολών" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Πρόκειται να επεξεργαστείτε το αντικείμενο \"%1\", το οποίο είναι πολύ " "μεγάλο (%2 πεδία). Το RKWard δεν είναι βελτιστοποιημένο να χειρίζεται πολύ " "μεγάλα αντικείμενα στο ενσωματωμένο επεξεργαστή δεδομένων. Αυτό θα " "χρησιμοποιήσει πολύ μνήμη και-ανάλογα με το σύστημά σας- μπορεί να γίνει " "πολύ αργό. Για μεγάλα αντικείμενα συνίσταται γενικά να τα επεξεργαστείτε " "μέσω της γραμμής εντολών ή να τα χωρίσετε σε μικρότερα κομμάτια πριν τα " "επεξεργαστείτε. Από την άλλη αν έχετε αρκετή μνήμη ή τα δεδομένα είναι " "αρκετά απλά (αριθμητικά δεδομένα είναι ευκολότερο να διαχειριστούν από μη " "αριθμητικά), η επεξεργασία μπορεί να μην σας δημιουργήσει κανένα πρόβλημα. " "Μπορείτε να ρυθμίσετε / απενεργοποιήσετε αυτήν την προειδοποίηση από το " "μενού Ρυθμίσεις->Ρύθμιση RKWard->Γενικά.\n" "Θέλετε πραγματικά να επεξεργαστείτε το αντικείμενο;" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Πρόκειται να επεξεργαστείτε ένα πολύ μεγάλο αντικείμενο" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Αποθήκευση διάταξης χώρου εργασίας" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Ανάκτηση διάταξης χώρου εργασίας" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Παράθυρο αριστερά" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Παράθυρο δεξιά" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Αναζήτηση βοήθειας" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Επεξεργασία" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Προβολή" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Μετονομασία" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Αντιγραφή σε καινούριο σύμβολο" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Αντιγραφή στο .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Διαγραφή" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Αντιγραφή αντικειμένου" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Εισάγετε το όνομα στο οποίο θέλετε να αντιγράψετε" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Ένα αντικείμενο με το όνομα '%1' ήδη υπάρχει στο GlobalEnv. Το αντίγραφο " "δημιουργήθηκε με το όνομα '%2'." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Το όνομα είναι ήδη σε χρήση" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Μετονομασία αντικειμένου" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Εισάγετε ένα νέο όνομα" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Όχι-Συναρτήσεις" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Προβολή όλων των περιβάλλοντων" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Εμφάνιση κρυφών αντικειμένων" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Επεξεργασία" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Αρχείο" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "Π&ροβολή" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Εκτέλεση" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Νέο" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Εισαγωγή" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Χώρος εργασίας" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Παράθυρα" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Ενεργοποίηση" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "Ρ&υθμίσεις" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Βοήθεια" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Συσκευή" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "Παρά&θυρο" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Μετακίνηση Εργαλείων" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Ilias Soumpasis, ,Launchpad Contributions:,Giannis Katsampirhs,RKWard Team, " ",Launchpad Contributions:,RKWard Team, ,Launchpad Contributions:,Giannis " "Katsampirhs,RKWard Team, ,Launchpad Contributions:,Giannis " "Katsampirhs,RKWard Team" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "nono.231@gmail.com,,,juankatsampirhs@gmail.com,rkward-" "tracker@lists.sourceforge.net,,,rkward-" "tracker@lists.sourceforge.net,,,juankatsampirhs@gmail.com,rkward-" "tracker@lists.sourceforge.net,,,juankatsampirhs@gmail.com,rkward-" "tracker@lists.sourceforge.net" rkward-0.6.1/po/rkward.pot0000644000175000017500000026031712124351134015021 0ustar thomasthomas# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-26 17:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "" #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), instead." "

Consider installing 'okular', or configure RKWard not to attempt to " "print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "" #: core/robject.cpp:122 msgid "Label:" msgstr "" #: core/robject.cpp:123 msgid "Type:" msgstr "" #: core/robject.cpp:126 msgid "Function" msgstr "" #: core/robject.cpp:127 msgid "Usage: " msgstr "" #: core/robject.cpp:129 msgid "Data frame" msgstr "" #: core/robject.cpp:131 msgid "Array" msgstr "" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "" #: core/robject.cpp:135 msgid "List" msgstr "" #: core/robject.cpp:137 msgid "Variable" msgstr "" #: core/robject.cpp:138 msgid "Data Type:" msgstr "" #: core/robject.cpp:140 msgid "Environment" msgstr "" #: core/robject.cpp:145 msgid "Length: " msgstr "" #: core/robject.cpp:147 msgid "Dimensions: " msgstr "" #: core/robject.cpp:155 msgid "Class(es):" msgstr "" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, and/" "or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr "" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "" #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "" #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure Repositories" "\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root password)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available packages.

Note: This requires a working internet connection, and " "may take some time, esp. if one or more repositories are temporarily " "unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "" #: main.cpp:128 msgid "Project leader / main developer" msgstr "" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "" #: main.cpp:135 msgid "Plugins and patches" msgstr "" #: main.cpp:136 msgid "New website" msgstr "" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "" #: main.cpp:138 msgid "A cool icon" msgstr "" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "" #: main.cpp:144 msgid "Some patches" msgstr "" #: main.cpp:145 msgid "patches and helpful comments" msgstr "" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart RKWard." "

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "" #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "" #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "" #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-devel@lists." "sourceforge.net, and tell us, what you were trying to do, when this " "happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to function.

You should quit RKWard, now, and fix your installation. For help " "with that, see http://p.sf.net/" "rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable \"native" "\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "" #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure RKWard" "\".\n" msgstr "" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "" #: rkward.cpp:374 msgid "Files" msgstr "" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "" #: rkward.cpp:416 msgid "Script File" msgstr "" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "" #: rkward.cpp:444 msgid "Save Workspace" msgstr "" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "" #: rkward.cpp:453 msgid "Quits the application" msgstr "" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "" #: rkward.cpp:483 msgid "Close All" msgstr "" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "" #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "" #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "" #: rkward.cpp:706 msgid "Don't quit" msgstr "" #: rkward.cpp:736 msgid "New dataset" msgstr "" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "" #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "" #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "" #: robjectviewer.cpp:251 msgid "Ready" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync" "\" (letter 'S' in the type column). Cancelling such commands could lead to " "loss of data. These commands have _not_ been cancelled." msgstr "" #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr "" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not installed/" "loaded, or maybe you mistyped the command. Try using Help->Search R Help for " "more options." msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I provide?

Please " "copy the information shown below, and fill in the details to the questions." msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "" #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "" #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" rkward-0.6.1/po/ca.po0000644000175000017500000037121412124345424013732 0ustar thomasthomas# translation of ca.po to # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010 Free Software Foundation, Inc. # This file is put in the public domain. # 28-11-2006: v 1.00 # # griera@gmail.com, 2006. # Núria Asensio , 2006. # Pep Roca , 2007. # Pep Roca , 2010, 2012. # Pep Roca , 2010. # Josep Roca , 2012. # Josep Roca , 2012. # Josep Roca , 2012. msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-22 10:46+0000\n" "Last-Translator: Pep Roca \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "L'objecte '%1', no s'ha pogut obrir per editar-lo. O bé no existeix, o bé el " "RKWard encara no permet editar aquest tipus d'objecte." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "No es pot editar '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "S'està obrint l'espai de treball ..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "S'ha produït un error en obrir el fitxer '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "S'ha produït un error en obrir l'espai de treball" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" "No s'ha trobat cap servei que ofereixi una caixa de diàleg per " "imprimirfitxers PostScript genèrics. Si intentarà obrir-lo amb un " "visualitzador genèric de fitxers PostScript si n'existeix algun instal·lat. " "

Podeu instal·lar 'Okular', o configurar al RKWard de manera que no " "intenti imprimir mitjançant la caixa de diàleg d'impressió de KDE." #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "No és possible obrir la caixa de diàleg d'impressió del KDE" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "S'està esperant que finalitzin les ordres restants. Per sortir " "immediatament, prémer Cancel·lar (AVÍS: Això pot provocar pèrdua de dades)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "S'està esperant que R finalitzi" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" "%1|Fitxers del espai de treball del R (%1)\n" "*|Tots els fitxers" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "No heu proporcionat cap nom de fitxer. Les dades NO s'han desat. Voleu " "continuar malgrat això?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "El desament del fitxer '%1' ha fallat. Que voleu fer?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "El desament del fitxer ha fallat" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Intenteu desar amb un altre nom de fitxer" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "El desament del fitxer ha fallat" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "El desament del fitxer '%1' ha fallat. Voleu intentar desar-lo amb un altre " "nom?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Fet" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" "Una ordre executada pel motor del R vol que vegi el(s) fitxer(s) " "següent(s) :\n" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Es mostren el/els fitxer(s)" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" "Una ordre executada pel motor del R vol que editeu un o més fitxer(s). Si us " "plau, reviseu-lo, modifique-lo com sigui necessari i deseu-lo. Quanho hagi " "fet, prémer sobre el botó \"Fet\", o tanqui aquesta caixa de diàleg per " "continuar.\n" "\n" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Edita el(s) fitxer(s)" # ??? Per revisar # Completar i revisar amb fr.po i es.po #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "El paquet '%1' (que probablement acabeu de carregar) està actualment en la " "llista negra per recuperar informació sobre la seva estructura. A la " "pràctica, això vol dir que els seus objectes no apareixeran en el navegador " "d'objectes. \n" "Habitualment un paquet es fica a la llista negra, si te una enorme quantitat " "de dades i es trigaria molt en carregar. Per treure'l de la llista, anar a " "Arranjaments->Configura RKWard->Espai de treball." # ??? Per revisar # Revisar amb fr.po i es.po #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "El paquet està en la llista negra" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "L'objecte '%1' s'ha retirat de l'espai de treball o s'ha canviat a un tipus " "diferent d'objecte, però actualment s'està editant. El voleu recuperar?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Recupero l'objecte?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Realment esteu segurs que voleu eliminar l'objecte '%1'? Aquest objecte " "actualment és obert per a edició, i també serà suprimit de l'editor. No " "podrà recuperar-se mai més." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Elimino l'objecte?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Realment voleu eliminar l'objecte '%1'? No podrà recuperar-se mai més." # a es.po està traduit com "Renombrar" #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Nom" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Etiqueta" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Tipus" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Classe" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "noms de les files" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "fila nova" #: core/robject.cpp:120 msgid "Full location:" msgstr "Ubicació completa:" #: core/robject.cpp:122 msgid "Label:" msgstr "Etiqueta:" #: core/robject.cpp:123 msgid "Type:" msgstr "Tipus:" # fr.po: "Lancer la sélection" # es.po: "Ejecutar la selección" #: core/robject.cpp:126 msgid "Function" msgstr "Funció" #: core/robject.cpp:127 msgid "Usage: " msgstr "Ús: " # De Vocabulari d'informàtica, © Gabinet de Llengua Catalana Universitat Autònoma de Barcelona # Tomàs Aluja. Introducció a R: data.frame. Son matrius on les variables són de qualsevol tipus, es el resultat natural de la lectura d'un fitxer de dades. #: core/robject.cpp:129 msgid "Data frame" msgstr "Taula de dades" #: core/robject.cpp:131 msgid "Array" msgstr "Taula" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matriu" # Introducció a R. Tomàs Aluja: llistes. Són llistes d'altres objectes. Es molt general #: core/robject.cpp:135 msgid "List" msgstr "Llista" #: core/robject.cpp:137 msgid "Variable" msgstr "Variable" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Tipus de dades:" # fr.po: Alignement # es.po: Alineación #: core/robject.cpp:140 msgid "Environment" msgstr "Entorn" #: core/robject.cpp:145 msgid "Length: " msgstr "Longitud: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensions : " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Classe(s):" # ??? p roca: Per revisar # ??? Per revisar : Núria #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "El paquet %1 no s'ha descarregat. Es necessari en RKWard. Si realment vol " "fer això, feu en la consola del R." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "El paquet %1 no sembla haver estat carregat" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "El nom que heu escollit ja s'està utilitzant o és incorrecte. S'ha " "reanomenat a %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Nom no vàlid" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Teclejar en aquests camps per afegir noves columnes" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Teclejar en aquests camps per afegir noves files" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Nova variable#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Noms de les files" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Format" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Nivells" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Editeu aquests camps per reanomenar les variables" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "Una etiqueta opcional que descrigui cada columna." #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Tipus de dades." #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" "Feu doble clic en aquests camps per personalitzar la visualització de les " "dades." #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" "Feu doble clic en aquests camps per modificar els nivells del factor." #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Talla la selecció i col·loca-la en el porta-retalls" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Copia la selecció en el porta-retalls" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "Enganxa el contingut del porta-retalls a la posició actual" # ??? p roca: Per revisar #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Enganxa dins de la taula" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" "Enganxa el contingut del porta-retalls a la posició actual, però sense " "traspassar els límits de la taula" # ??? p roca: Per revisar #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Enganxa dins de la selecció" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" "Enganxa el contingut del porta-retalla a la posició actual, però sense " "traspassar els límits de la selecció actual" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" "L'editor '%1' te les següents columnes duplicades. Editar aquesta taula pot " "ser perillós i s'ha deshabilitat. Si sabeu el que esteu fent, podeu tornar a " "activar l'edició, però s'aconsella primer corregir la taula, i / o fer una " "còpia de seguretat de les dades." #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "S'han trobat columnes duplicades" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [només de lectura]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Insereix una nova variable a l'esquerra" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Suprimeix aquesta variable" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Insereix un nou cas al damunt (a %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Esborra les files seleccionades (%1-%2)" # po.fr: "Supprimer cette case" (sense %1) # En tots els ítems del menú on surt es parla de cas, no de files #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Esborra aquesta fila (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "S'està inserint el contingut del porta-retalls..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Format de fitxer: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "No existeixen connectors definits pel context '%1'" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Tots els fitxers" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Configura els paquets" # fr.po: Paquets sur la machine locale #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Paquets locals" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "Instal·lar / Actualitzar / Eliminar" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Configura els dipòsits" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "Paquet %1 de %2" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" "Els següents paquets, que heu seleccionat per eliminar, són essencials per " "al funcionament de RKWard, i no seran eliminats. Si esteu absolutament segur " "de que els voleu eliminar, si us plau feu-ho mitjançant la línia d'ordres de " "la terminal del R." #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "Alguns paquets no s'eliminaran" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" "Els permisos que te el seu usuari actual no permeten eliminar els paquets " "següents. Per tant no s'eliminaran." #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "Els permisos del usuari són insuficients" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" "Els seus permisos d'usuari actuals no li permeten eliminar els paquets " "següents. Voleu deixar-los instal·lats o els voleu eliminar amb privilegis " "d'administrador (se li demanarà la contrasenya)?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" "Esteu a punt d'eliminar els paquets següents. Segur que voleu continuar?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "A punt d'eliminar els paquets" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "Si us plau, espereu mentre s'eliminen els paquets seleccionats" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "S'estan eliminant els paquets" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "No es pot escriure en la ubicació seleccionada per la biblioteca" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" "

No teniu permisos per escriure en el directori que heu escollit per " "instal·lar (%1).

El voleu instal·lar a %2? També podeu prémer sobre " "\"Cancel·la\" i utilitzar el botó \"Configura els dipòsits\" per escollir un " "directori diferent.

" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" "

Alternativament, si teniu accés a un compte d'administrador en " "aquestordinador, és d'utilitzar-lo ja sigui per instal·lar el(s) paquet(s) " "en qüestió, o per modificar els permisos de '%1'. Malauradament, el canvi " "automàtic a administrador encara no funciona en el RKWard per aWindows.

" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "Instal·lar en %1" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" "

Si sou l'administrador d'aquest ordinador, també podeu instal·lar els " "paquets com a root (se li demanarà la contrasenya d'administrador).

" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Convertir-se en root" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Espereu mentre instal·lo els paquets seleccionats" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "S'estan instal·lant els paquets" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "El procés d'instal lació ha fallat amb el codi de sortida %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Paquets instal·lats" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Títol" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Versió" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Ubicació" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Càrrega" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Descàrrega" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Paquets carregats" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "S'ha produït un error a l'intentar carregar/descarregar els paquets. Reviseu " "la transcripció d'aquí sota per a més detalls" # fr.po:Erreur lors du traitement des paquets # es.po: Error en la gestión de paquetes #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "S'ha produït un error al tractar els paquets" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" "A CRAN (Comprehensive R Archive Network) i a altres dipòsits hi han molts " "paquets disponibles
(fer clic sobre \"Configura els dipòsits\" per afegir " "més fonts)." #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "Mostra només els paquets coincidents amb:" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "Selecciona totes les actualitzacions" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "El paquet sol·licitat pel dorsal R (\"%1\") no s'ha trobat en el dipòsit de " "paquets. Potser el nom del paquet ha estat mal escrit. O potser necessiteu " "afegir dipòsits addicionals des del botó \"Configura els dipòsits\"." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "El paquet no està disponible" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Instal·la els paquets a:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" "

Si us plau, espereu mentre s'està cercant els paquets instal·lats i " "elsdisponibles.

Note:Aquesta operació requereix una " "connexió a Internet activa i pot durar un cert temps, sobretot si alguns " "dels dipòsits temporalment no estan disponibles.

" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "S'està buscant paquets" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Estat" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" "

Els paquets amb una icona de RKWard en aquesta columna " "proporcionenmillores al RKWard, la majoria en forma de caixes de diàleg " "addicionals.

" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" "

Podeu seleccionar els paquets que voleu instal·lar o suprimir marcant o " "desmarcant les caselles corresponents en aquesta columna.

" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "

El nom del paquet.

" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" "

Un títol descriptiu per al paquet. Aquest títol actualment no està pas " "disponible per els paquets en dipòsits situats a la xarxa.

" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "

Versió instal·lada i/o disponible del paquet

" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "

Lloc on el paquet s'ha instal·lat o està disponible

" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "Paquets que es poden actualitzar" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" "Paquets pels que existeix una actualització. Això pot incloure paquets que " "s'han creat per una versió més recent del R." #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "Paquets nous" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "Paquets instal·lats" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Instal·la" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Suprimir" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Context :" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "S'ha trobat un fitxer de recuperació de després d'una fallada" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Mostra en el gestor de fitxers" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "Restableix" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Seleccioneu un o més:" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Seleccioneu un:" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Què desitgeu fer?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Engega amb un espai de treball buit" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Engega amb una taula buida" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Carrega un espai de treball existent:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Fes sempre això a l'engegar" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" "Després d'arrencar (i després de carregar l'espai de treball especificat, si " "s'escau), avalua el codi R donat." # fr.po: Prolixité des messages de trace (0-5) # es,po: Nivel de información de los mensajes de depuración (0-5) #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Nivell d'informació dels missatges de depuració (0-5)" # es.po: Máscara para los componentes a depurar como números binarios (mirar en debug. "h)" # fr: Masque en tant que nombre binaire (voir debug.h) des composants à tracer #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Màscara per als components a depurar (mireu en depura.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Depurador (junt amb l'ordre, escrigueu qualsevol argument de depuració entre " "cometes simples (''))" # ??? p roca: Per revisar: # fr.po: Demander à ouvrir un fichier # es.po: Espacio de trabajo para abrir #: main.cpp:125 msgid "R workspace file to open" msgstr "Espai de treball a obrir" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" # ??? p roca: Per revisar # es.po: Interfaz gráfica para el lenguaje estadístico R # softcatala_recull_4.1.html: frontend: frontal #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Interfície gràfica pel llenguatge estadístic R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Líder del projecte / desenvolupador principal" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Molts connectors, suggeriments, màrqueting, traduccions" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Col·laboradors en ordre alfabètic" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Varis comentaris i discussions útils" #: main.cpp:135 msgid "Plugins and patches" msgstr "Connectors i pedaços" #: main.cpp:136 msgid "New website" msgstr "Nova pàgina web" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "Connector del filtre HP, traducció al castellà" #: main.cpp:138 msgid "A cool icon" msgstr "Una bonica icona" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "El logotip de RKWard, molts suggeriments, ajudes en la redacció" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Alguns valuosos commentaris, consells i pedaços" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Traduccions, suggeriments, connectors" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Molts comentaris, suggeriments útils i informes d'errors" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Traducció a l'alemany, informes d'errors" #: main.cpp:144 msgid "Some patches" msgstr "Alguns pedaços" #: main.cpp:145 msgid "patches and helpful comments" msgstr "pedaços i comentaris útils" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Moltes més persones a rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Ho sento si m'he oblidat d'incloure-us en la llista. Si us plau, poseu-vos " "en contacte amb nosaltres per ser-hi inclòs" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Alineació" # Recull de termes Softcatalà.Recull: 4.1: default: valor per defecte #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Opció per omissió" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Esquerra" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Dreta" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Nombre de decimals" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Opció per omissió" # És refereix al nombre de decimals que es volen que es visualitzin #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Els necessaris" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Precisió fixada:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Opció de visualització per '%1'" # La frasse "Atenció: . . és del fr.po i es.pot #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Els nivells només poden estar associats a enters consecutius començant per 1 " "(la columna índex és només de lectura). Per eliminar els nivells al final de " "la llista, només cal que els deixeu buits. Atenció: si elimineu un nivell, " "els índex dels altres nivells poden canviar, i per tant també es modificaran " "els valors de la variable factor." # És el nom de la finestra que s'obre al punxar sobre una casella "Lebels" de una taula de dades. # A fr.po: "Libellés de niveaux / valeurs pour '%1'" # %1 és el nom de la variable #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Nivells / Etiquetes dels valors de '%1'" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Nom de fitxer" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Afegeix" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Amunt" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Avall" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" # fr.po: Configuration de la vue #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Configura la visualització" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Tots els entorns" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Objectes amb fills" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Variables" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Funcions" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Objectes ocults" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Mostra els objectes" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Mostra els camps" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "S'han produït errors i / o avisos! Una transcripció dels missatges es " "mostra aquí sota" # fr.po: Sorties #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Resultats" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Resultats:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Errors / Avisos" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Errors / Avisos:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Cancel·la" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "Objecte pare: %1" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "Escolliu l'objecte pare" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Sobreescric? (El nom del objecte ja existeix)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Sobreescric?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Enganxament especial..." #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Mode d'enganxament" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Cadena simple" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Vector" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Camp separador" # ??? p roca: Per revisar # Pot ser tabulació ó pestanya. Suposo que es separador tabulador #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Tabulació" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Coma" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Espai simple" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "Qualsevol espai en blanc" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Altres:" # ??? p roca: Per revisar: Són cometes? #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Cometes" # ??? p roca: Per revisar: Són cometes? #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "No ficar els valors entre cometes" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Automàtic" # ??? p roca: Per revisar: Són cometes? #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Afegeix cometes a tots els valors" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Transformacions" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Inverteix horitzontalment" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Inverteix verticalment" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Intercanvia files/columnes" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "Insereix NA quan sigui necessari" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Executa la línia actual" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Executa la selecció" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Executa-ho tot" # fr.po: "&Aide sur la fonction" # es.po: "Referencia de la &Función" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Funció: Ajuda" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "No s'ha pogut obrir el fitxer per llegir-lo" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Hi ha un error a l'analitzar el fitxer XML. El missatge d'error era : '%1' a " "la línia '%2', columna '%3'. Espereu que s'informin d'altres errors aquí sota" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "S'estan intentant recuperar els fills d'un element invàlid" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "S'esperava exactament un element '%1', però s'ha trobat %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "No heu especificat l'atribut '%1'. S'assumeix '%2'" # fr.po: Valeur d'attribut interdite. Les valeurs possibles sont seulement parmi '%1'. #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "El valor de l'atribut està prohibit. Només es permet un dels valors de '%1'." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "" "El valor de l'atribut està prohibit. Només es permeten nombres enters." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "" "El valor de l'atribut està prohibit. Només es permeten nombres reals." # fr.po: Valeur d'attribut interdite. Les valeurs possibles sont seulement parmi '%1'. #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "El valor de l'atribut està prohibit. Només es permeten els valors '%1' o " "'%2'." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "S'està analitzant el XML '%1' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(cap etiqueta)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Heu intentat executar el connector '% 1', però aquest connector és " "desconegut. Probablement necessiteu carregar el corresponent fitxer " "PluginMap (Arranjaments-> Configura el RKWard->Connectors), o poder el " "connector ha estat reanomenat." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "No existeix aquest connector" # ??? p roca: Per revisar: serialization?? # A http://ca.wikipedia.org/wiki/Serialització traduit per Serialització #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" "Format de serialització inadequat al intentar executar el connector '%1'. " "Contacteu amb l'equip de RKWard (Ajuda->Quant a RKWard->Autors)." #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "Format de serialització inadequat" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" # ??? p roca: Per revisar: settings: settings configuració, paràmetres (m pl) #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "No es poden aplicar tots els paràmetres especificats. Molt probablement, es " "degut a que alguns objectes R ja no estan presents en l'àrea de treball " "actual." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "No s'han aplicat tots els paràmetres" # ??? p roca: Per revisar #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "El connector no pot ser auto-tramès amb aquests paràmetres." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "No es pot trametre" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Selecciona un:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Especifiqueu el model" # fr.po: Modèle complet #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Model complet" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Només efectes principals" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Model a mida:" # fr.po: Effets principaux seulement # es.po: Solo Efectos Principales #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Efectes principals" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Nivell" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Terme" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Introduïu el text" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" # fr.po: Entrer un nouveau nom # es.po: Introducir el nuevo nombre #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Introduïu el nom de fitxer" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Selecciona" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Desa com:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "Dades.meves" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Introduïu el valor:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Previsualització" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "S'està actualitzant la previsualització" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Previsualització deshabilitada" # ??? Per revisar # fr: Prévisualisation à jour # es.po: Vista previa actualizada # up-to-date: recents, al dia #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Vista prèvia actualitzada" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Encara no és possible la previsualització" # parse: anàlisi sintàctica (Vocabulari d'informàtica. © Gabinet de Llengua Catalana. Universitat Autònoma de Barcelona) #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "S'ha produït un error en analitzar la descripció d'aquest connector ('%1'). " "Per a més detalls, reviseu la sortida estàndard." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "No s'ha pogut crear el connector" # fr.po: Exécuter # es.po: Enviar #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Tramet" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Tanca" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Tanca automàticament" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Ajuda" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Utilitza l'assistent" # fr.po: Fermé # es.po: Cerrado #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Codi" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Torna a executar" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "S'està processant. Espereu" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "En la part inferior podeu veure les ordres que corresponen a la configuració " "que heu fet. Feu clic sobre 'Tramet' per executar-les." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Següent >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Enrere" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Utilitza el diàleg" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Variable:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Executant-se" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Cancel·lat" # fr.po: Commandes passées # es.po: Bitácora de Comandos # Stack = Pila (Vocabulari d'informàtica, © Gabinet de Llengua Catalana, Universitat Autònoma de Barcelona) #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Pila d'ordres" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Cadena d'ordres" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Tancat" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Esperant" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Ordre" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Descripció" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "Engegada del R" # fr.po: \t- Une erreur non spécifiée qui n'est pas encore gérée par RKWard s'est produite. RKWard ne va probablement pas fonctionner correctement. Veuillez vérifier votre installation.\n # es.po: "\t- Ha ocurrido un error no especificado que aún no está gestionado por RKWard. Posiblemente RKWard no funcione correctamente. Por favor, compruebe su configuración.\n #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t-S'ha produït un error desconegut que encara no està gestionat per el " "RKWard. Segurament el RKWard no funcionarà adequadament. Si us plau, reviseu " "la vostra configuració.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" "

Hi ha hagut un problema al endegar l'execució del dorsal R. S'ha(n) " "produït el(s) següent(s) error(s):

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "S'ha produït un error a l'engegar-se el R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Canvia els locals" # fr.po: Le moteur R a besoin du paquet '%1' pour continuer. Ce paquet n'est pas installé. L'outils de gestion des paquets va être ouvert, pour que vous puissiez installer le paquet manquant. #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "El dorsal R necessita el paquet '%1' per realitzar aquesta tasca. Aquest " "paquet no està instal·lat. Ara s'obrirà l'eina de gestió de paquets, a fi " "que pugueu intentar localitzar i instal·lar aquest paquet." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Requerix el paquet '%1'" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "El dorsal R necessita informació" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "El motor R s'ha aturat" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "El motor R s'ha aturat en l'estat: %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "El motor R ha trobat un error fatal:\n" "%1" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Missatge del dorsal R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "Pregunta del dorsal R" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "Consola R" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Error de sintaxi\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" # fr.po: Interrompre l'exécution de la commande #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Interromp l'execució de l'ordre" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Copia la selecció literalment" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Imprimeix la consola" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

El RKWard o no pot trobar cap fitxer de recursos, o només troba una " "versió antiga dels mateixos. La causa més probable és que en la darrera " "instal·lació no es van ficar tots els fitxers en el lloc correcte. Això pot " "provocat tot tipus d'errors, des de la manca d'alguna funcionalitat fins que " "totes les funcions fallin.

Ara heu de sortir del RKWard, i arreglar " "la seva instal·lació. Per ajuda sobre això, consultar http://p.sf.net/rkward/compiling.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Instal·lació incompleta" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" # fr.po: Paramétrage des greffons... # es.po: Lanzando los plugins... # Softcatalà: setting up - loc s'està configurant #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "S'estan configurant els connectors..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Els connectors són necessaris: Els podeu gestionar utilitzant el menú " "\"Arranjaments-> Configura el RKWard\".\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Espai de treball" #: rkward.cpp:374 msgid "Files" msgstr "Fitxers" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Treballs pendents" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Conjunt de dades" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Crea un nou conjunt de dades buit i obre'l per editar-lo" #: rkward.cpp:416 msgid "Script File" msgstr "Fitxer de seqüència" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "Importar dades" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Importar dades des d'una varietat de formats" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Obre un document ja existent" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Obre un fitxer usat recentment" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Desa l'espai de treball" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Desa el document actual" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Anomena i desa l'espai de treball" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Desa el document actual com a..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Surt de l'aplicació" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "Tanca totes les dades" # fr.po: Fermer tous les éditeurs de données ouverts #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Tanca tots els editors de dades oberts" #: rkward.cpp:483 msgid "Close All" msgstr "Tanca-ho tot" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Allibera" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[No hi ha cap acció disponible per a la vista actual]" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Llest." #: rkward.cpp:620 msgid "Current working directory" msgstr "" # En agraïment a Jordi Mallach i els altres de Lliurex. El seu live-cd m'és molt útil per fer les presentacions de les classes #: rkward.cpp:698 msgid "Exiting..." msgstr "S'està sortint..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "S'està sortint del RKWard. Voleu desar l'espai de treball actual?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Deso l'espai de treball?" #: rkward.cpp:706 msgid "Don't quit" msgstr "No surtis" #: rkward.cpp:736 msgid "New dataset" msgstr "Nou conjunt de dades" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Introduïu el nom pel nou conjunt de dades" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "S'està obrint l'espai de treball..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Voleu desar l'espai de treball actual?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Obre el(s) fitxer(s) de seqüència" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Espai de treball sense nom]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "resum (x)" # ??? p roca: Per revisar: # Imprimir? Mostrar? #: robjectviewer.cpp:59 msgid "print (x)" msgstr "mostrar (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "L'objectes s'ha esborrat!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Visualitzador d'objectes: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "L'objecte s'ha modificat. Podeu clicar \"Actualitza\"" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Actualitza" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "S'està recuperant la informació. Espereu un moment." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Clicar\"Actualitza\" per recuperar la informació" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Preparat" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "El dorsal QtScript ha informat d'un error:\n" "%1" # ??? p roca: Per revisar #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Error en la seqüència" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Error en la seqüència: %1\n" "traça enrere:\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "El fitxer \"%1\" (necessari per \"%2\") no es troba. Si us plau, verifiqueu " "la vostra instal·lació." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" "S'ha produït un error en avaluar el codi de la seqüència.\n" "Arxiu: %1\n" "Línia: %2\n" "Missatge: %3." #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" "error ('El fitxer \"%1\" (necessari per \"%2\") no es troba. Si us plau, " "verifiqueu la vostra instal·lació.');\n" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Prepara\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Calcula\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Imprimeix els resultats\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Arranjaments" # Traducció embastada: settings -> arranjament # Recull de termes de Softcatalà: settings - m pl paràmetres #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Els paràmetres de configuració marcats amb un (*) només s'aplicaran si " "reengegueu RKWard" # terminació #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Autoacabat de codi" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Habilita l'autoacabat del codi" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "Nombre mínim de caràcters abans d'intentar l'autoacabament" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "Habilita les pistes per als arguments de les funcions" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "Desaments automàtics" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "Interval dels desaments automàtics (minuts)" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" "Manté la còpia de seguretat automàtica d'arxius després del desat manual" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Editor de fitxers de seqüència" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Carrega/Desa l'historial d'ordres" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Introduïu la longitud màxima de l'historial d'ordres" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Sense límit" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "" "Introduïu el nombre màxim de línies / paràgrafs que s'han de mostrar en la " "consola" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Executar les ordres del editor de seqüències a través de la consola" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Afegeix també aquestes ordres en l'historial de la consola" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "No l'afegeixis" # ??? p roca: Per revisar # Afegeix només si és una sola línia # Afegeix només si només hi ha una sola línia #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Afegeix només si és una sola línia" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Afegeix totes les ordres" # ??? Per revisar # fr: La commande d'historique est sensible à la casse par défaut # es: El historial de comandos depende por defecto del contexto #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "L'historial d'ordres depèn, per omissió, del context" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Consola" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Nivell de depuració" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Senyaladors de depuració" # ??? p roca: Per revisar # es: Tiempo límite de los comandos #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Temps d'espera de les ordres" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Nota: La sortida de la depuració s'escriu a %1" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Depuració" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Directori on RKWard pot emmagatzemar arxius (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Acció a l'engegada (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Demana per obrir un fitxer" # fr.po: Montrer la fenêtre de sélection (par défaut) # es.po: Mostrar diálogo de selección (predeterminado) #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Mostra el diàleg de selecció (per omissió)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Mostra l'ajuda del RKWard al engegar" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" # workplace layout "#" R workspace #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "El lloc de treball (és a dir, les seqüències-, dades-, finestres d'ajuda que " "estan obertes) es pot desar (i carregar) per l'espai de treball del R, o " "independentment d'aquest espai de treball. Què preferiu?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Desa/restaura amb l'espai de treball del R, quan s'està desant/carregant " "l'espai de treball del R" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Desa/restaura independentment de l'espai de treball del R (desa al final de " "la sessió del RKWard, restaura en la pròxima engegada)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "No desis/restaura el lloc de treball del RKWard" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Avisa al editar objectes amb més d'aquest nombre de camps (0 si no és vol " "cap límit):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Sense límits" # ??? p roca: Per revisar # es: Comportamiento de foco de ventana MDI #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Comportament de focus de la finestra MDI" # ??? p roca: Per revisar # es: Clic para focalizar # Clicar per focalitzar? #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Clicar par centrar" # ??? p roca: Per revisar # El foco sigue al ratón #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "El focus segueix al ratolí" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "General" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "Mida de la finestra per omissió" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "Ample per omissió (polzades):" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "Alçada per omissió (polzades)" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "Històric del dispositiu de pantalla" # ??? Per revisar: recorded guardats? enregistrats? #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "Nombre màxim de gràfics desats:" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "La mida màxima d'un únic gràfic desat (en KB):" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "Gràfics en pantalla" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Quins objectes s'ha de mostrar per omissió?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Mostra els objectes ocults" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Mostra tots els entorns" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Mostra els objectes amb fills" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Mostra les funcions" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Mostra les variables" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Quines columnes s'han de mostrar per omissió?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Camp de l'etiqueta" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Camp del tipus" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Camp de la classe" # Softcatalà 4.0: fetch, to = recollir #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Mai no recullis l'estructura d'aquests paquets:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Afegir exclusió" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "Afegeixi el nom del paquet del que no vol recollir l'estructura" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Opcions de la finestra de resultats" # ??? p roca: Per revisar: No se que vol dir #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "mostrar la finestra de la nova sortida" # ??? p roca: Per revisar: no se que vol dir #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "puja la finestra de la nova sortida" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Gràfics" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Format de fitxer" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "Qualitat del JPG" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Ample:" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Alt:" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Si un connector està disponible amb una interfície clàssica i amb una " "interfície del tipus assistent, quina de les interfícies preferiu?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Sempre prefereixo els diàlegs" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Prefereixo la interfície recomanada" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Sempre prefereixo l'assistent" # ??? Per revisar #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "Mostra la sintaxi de R (en els diàlegs)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Codi que s'ha de mostrar per omissió" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Alçada per defecte al mostrar el codi (píxels)" # Sembla ser el fitxer amb extenció *.pluginmap #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Seleccioneu el fitxer(s) .pluginmap" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Connectors" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Seleccioneu el fitxer .pluginmap" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Els aranjaments següents en general afecten el comportament del R en mode " "consola. En general és adequat no modificar-los." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Visor d'avisos" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Suprimeix avisos" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Imprimeix els avisos més tard (per omissió)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Imprimeix els avisos immediatament" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Converteix els avisos en errors" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Caràcter decimal (només per a la impressió)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Ample dels resultats (caràcters)" # ??? Per revisar: és l'ordre print, no la impressió #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Nombre màxim d'elements que s'han de mostrar" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Introduïu la longitud màxima dels avisos/errors mostrats" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Conserva els comentaris en les funcions" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "CERT (per omissió)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "FALS" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Manté els comentaris en els paquets" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "CERT" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "FALS (per omissió)" # Termcat: nested window: finestra imbricada, f # Tb podria ser niuades o enniuada (http://lists.dodds.net/archives/ca/2003-December/001071.html) #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Introduïu el nombre màxim d'expressions imbricades" # fr.po: Précision décimale par défaut dans print () # es.po: Precisión decimal predeterminada en print() #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Precisió decimal per omissió amb l'ordre print ()" # fr.po: Vérifier les bornes des vecteurs (avertissement) # es.po: Comprobar límites de vectores (aviso) #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Comprova els límits dels vectors (avís)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Editor d'ordres" # ??? p roca: Per revisar: Paginador d'ordres? # es: Comando del paginador # Localitzador d'ordres o ordres del paginador / localització #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "Localitzador d'ordres" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" # fr.po: Processus R # es.po: Backend R #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "Dorsal-R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "CRAN rèplica de baixades (deixar vuit per ser preguntat un cop en cada " "sessió):" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Selecciona una rèplica" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" "Dipòsit de paquets addicionals (d'on són descarregades les biblioteques)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Arxiva els paquets descarregats" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" "Ubicacions de les biblioteques R (on localment s'instal·len les biblioteques)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Nota: Utilitza sempre les opcions d'inicialització per omissió conjuntament " "amb la dels llocs especificats en aquesta llista" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Afegeix el directori amb la biblioteca R" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Afegeix el dipòsit" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Afegeix la URL del nou dipòsit" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "Paquets R" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Selecciona la rèplica CRAN" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "A partir d'ara, els arranjaments només s'aplicaran a les noves ordres. Totes " "les ordres anteriors romandran visibles/invisibles." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "mostra sempre les ordres" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "mostra sempre els resultats" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "mostra els errors" # fr.po: montrer / monter la fenêtre # es.po: mostrar/restaurar ventana #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "mostra/puja la finestra" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Ordres de l'usuari" # fr.po: Commandes produites par les greffons # es.po: Comandos generados por el plug-in #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Ordres generades pels connectors" # fr.po: Commandes de RKWard #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Ordres de l'aplicació" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Ordres de sincronització" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" "Introduïu el nombre màxim de línies / paragrafs que s'han de mostrar en la " "bitàcola de les ordres" # Termcat: diari m. Registre cronològic de les operacions de processament de dades dutes a terme en un fitxer. #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Fitxer de registre de les ordres" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Ajunta amb la finestra principal" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Configura el dorsal R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Pausa l'execució" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Cancel·la les ordres seleccionades" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Algunes de les ordres que intenteu cancel·lar estan marcades com \"sync\" " "(lletra 'S' en la columna de tipus). Si aquestes ordres es cancel·len es " "poden perdre dades. Aquestes ordres _no_ han estat cancel·lades." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Algunes ordres no s'han cancel·lat" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Continua l'execució" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "Editor de fitxers de seqüència" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Executa el bloc" # es: Marcar la selección como bloque # ca kate: Mode selecció per blocs #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Mode selecció per blocs rectangulars" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Desmarca bloc" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "Canvia el directori cap al directori de seqüències" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Canvia el directori de treball per el d'aquesta seqüència" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [modicat]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "S'ha modificat el document \"%1\". Segur que el vol tancar?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "El fitxer no s'ha desat" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Sense nom" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (Activa)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (Sense ús)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Sentència incompleta.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Error de sintaxi.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "S'ha produït un error desconegut mentre s'executava l'ordre.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Configura" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Cerca:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Camps:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Tot" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Tot menys les paraules claus" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Paraules clau" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Paquet:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Sensible a majúscules" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Coincidència inexacta" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Cerca" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Busca ajuda" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Cerca l'ajuda HTML per %1" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "Tots els paquets instal·lats" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "Tots els paquets carregats" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "No s'ha trobat cap ajuda sobre '%1'. Potser el paquet corresponent no està " "instal·lat / carregat, o potser heu escrit malament l'ordre Per a més " "opcions, intenteu utilitzar Ajuda->Cerca ajuda del R." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "No s'ha trobat l'ajuda" # ??? p roca: Per revisar: es: Campo, fr: Sujet #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Tema" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Paquet" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Neteja els resultats" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Actualitza els resultats" # fr.po: Sorties #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "Resultats %1" # ??? p roca: Per revisar: podira ser Mostre els resultats? #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Imprimeix els resultats" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Exporta la pàgina com HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "Finestra de resultats" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Imprimeix la pàgina" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Desa els resultats com HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

El fitxer de resultats del RKWard no s'ha pogut trobar

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "La pàgina no existeix o està malament" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Netejo els resultats?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Sense títol" # ??? Per revisar : Núria #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

Falta la pàgina d'ajuda

\n" "

La pàgina d'ajuda per aquest component encara ho s'ha escrit (o és " "incompleta). Considereu contribuir-hi

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Utilitza %1 ara" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Sumari" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Ús" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Arranjaments de la IGU" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Element de la IGU sense nom" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Funcions relacionades i pàgines" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Detalls tècnics" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

En aquesta pàgina:

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "Ajuda del R sobre '%1'" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "REFERÈNCIA TRENCADA" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "Ajuda sobre %1" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "Configura %1" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Adjunta" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Barra esquerra" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Barra dreta" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Barra superior" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Barra inferior" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Ajuda sobre el R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Cerca ajuda del R" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Ajuda sobre el RKWard" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Mostra l'índex de l'ajuda R" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Mostra / alça la finestra per cercar l'ajuda de R" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Mostra l'ajuda del RKWard" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Finestra anterior" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Finestra següent" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" # ??? Per revisar # Activa la visualització del document o # Activa la visualització dels documents #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Activa la visualització del document" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Mostra els &Resultats" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "Per raons tècniques, el següent diàleg només us permet configurar les " "dreceres del teclat per les parts del RKWard que estan actualment actives.\n" "\n" "Per tant, si voleu configurar les dreceres de teclat de, p.ex.,l'editor de " "seqüències, heu d'obrir una finestra de l'editor de seqüències per activar-" "lo." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Nota" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "Connectors del RKWard" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "Per raons tècniques, el següent diàleg només us permet configurar les " "dreceres dels botós de la barra d'eines per les parts del RKWard que estan " "actualment actives.\n" "\n" "Per tant, si voleu configurar els botós de la barra d'eines de, " "p.ex.,l'editor de seqüències, heu d'obrir una finestra de l'editor de " "seqüències per activar-lo." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Informar els errors del RKWard" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "No s'ha pogut incrustar la finestra X11 del R" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Heu creat una nova finestra en R. Per regla general, el RKWard intenta " "detectar aquestes finestres, per controlar-les i afegir-les a la barra del " "menú. Tanmateix, aquesta vegada el RKWard ha fallat en la detecció de quina " "finestra s'ha creat, i, per tant, no l'ha pogut incrustar.\n" "Aquest és el comportament normal si heu creat la finestra en un altre " "escriptori o en una sessió X11 diferent. Si voleu, podeu intentar canviar " "les opcions(\"visualització\"). Llavors.\n" "si podeu veure la finestra X11 en el mateix escriptori que aquest missatge, " "aleshores el RKWard és millorable. En aquest cas, agrairíem que ens " "contacteu a rkward-devel@lists.sourceforge.net informant-nos dels detalls de " "la vostra configuració a fi que intentem arreglar això en les futures " "versions de RKWard." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "S'ha produït un error" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" # fr.po: montrer / monter la fenêtre # es.po: mostrar/restaurar ventana #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "Finestra gran" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "S'està tancant el dispositiu (s'està desant l'històric)" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "S'està aturant el dispositiu nombre %1" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" # ??? Per revisar #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Especifiqueu la mida fixa" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Ample" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Alt" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "S'ha activat el dispositiu gràfic nombre %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Copia el contingut del dispositiu gràfic número %1 als resultats" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Imprimeix el contingit del dispositiu gràfic nombre %1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Especifiqueu l'objecte R" # fr: Définissez le nom d'objet de R, vous veulent sauver le graphique à # ??? Per revisar #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "Especifiqueu el nom de l'objecte R on voleu desar el gràfic" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Desa el contingut del dispositiu gràfic número %1 a l'objecte '%2'" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Duplica el dispositiu gràfic nombre %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "Carrega el gràfic següent en el dispositiu nombre %1" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "S'està carregant el gràfic del historial" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "Carrega el gràfic anterior en el dispositiu nombre %1" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "Carrega el primer gràfic en el dispositiu nombre %1" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "Carrega el gràfic darrer en el dispositiu nombre %1" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "Carrega el gràfic %1 en el dispositiu nombre %2" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "Afegeix aquest gràfic al historial (dispositiu nombre %1)" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "Elimina el gràfic actual del històric (dispositiu nombre %1)" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" "Això esborrarà l'historial de gràfics per tots les finestres, no només " "d'aquesta. Si aquest no és la seva intenció, premi cancel lar, a continuació." #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "Neteja l'historial de gràfics" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "Propietats del gràfic (dispositiu nombre %1)" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Adapta l'àrea del dibuix a la mida de la finestra" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Estableix una mida fixa de 500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Estableix una mida fixa de 1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Estableix una mida fixa de 2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Estableix una mida especificada..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "Gràfic anterior" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "Gràfic primer" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "Gràfic següent" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "Gràfic darrer" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "Vés al gràfic" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "Afegeix aquest gràfic" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "Elimina aquest gràfic" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "Neteja l'historial" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "Propietats del gràfic" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Fes-la activa" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Copia els resultats" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Guarda com un objecte R..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Duplicat" # default application: application par défaut (fr.po) aplicación predeterminada (es.po) #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "La URL que esteu intentant obrir ('%1') no és un fitxer local o el tipus de " "fitxer no l'admet el RKWard. . Voleu obrir aquesta URL en l'aplicació per " "omissió?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "L'obro en l'aplicació per omissió?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "No es pot obrir \"%1\"" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "No s'ha pogut obrir el fitxer d'ordres" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Esteu a punt d'editar l'objecte \"%1\" que és molt gran (%2 camps). El " "L'editor integrat de dades del RKWard no està optimitzat per manegar " "objectes grans. Això pot utilitzar molta memòria, i -depenent del vostre " "sistema- anar molt lent. Es recomana editar els objectes grans utilitzant " "els mètodes disponibles en la línia d'ordres o dividir-los en bocins més " "petits abans d'editar-los. D'altra banda, si teniu memòria suficient, o les " "dades són suficientment simples (les dades numèriques són més fàcils de " "manegar que els factors (variables qualitatives)), poder es poden editar " "sense problemes. Podeu configurar aquest avís (o desactivar-lo del tot) a " "Arranjaments-> Configura RKWard->General.\n" "Edito l'objecte?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Quant a editar objectges molt grans" # fr.po: Enregistrer l'espace de travail # es.po: Guardar Espacio de Trabajo # Thomas Friedrichsmeier: Workplace is the windows (script editors / data editors / help files / output) managed by rkward #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Desa el lloc de treball del RkWard" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Restableix el lloc de treball del RKWard" # ¿O finestra esquerra? # ??? Per revisar #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Finestra a l'esquerra" # ¿O finestra dreta? # ??? Per revisar #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Finestra a la dreta" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Cerca ajuda" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Edita" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Visualitza" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Reanomena" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Copia al nou symbol" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Copia al .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Esborra" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Paquets carregats" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Carrega / Descarrega els paquets" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Copia l'objecte" # fr.po: Entrer un nouveau nom #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Introduïu un nou nom" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Un objecte anomenat '%1' ja existeix en el GlobalEnv. He creat la còpia com " "a'%2'." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Nom ja utilitzat" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Reanomena objecte" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Entreu el nou nom" # Thomas Friedrichsmeier: While "Non-Functions" really is the most precise description, "Data" would probably be close enough. Another option might be to translate as "Other", since "Functions" and "Non-Functions" are shown side-by-side in the Workspace browser. #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Dades i altres" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Mostra tots els entorns" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Mostra els objectes ocults" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Edita" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Fitxer" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Visualitza" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Executa" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nou" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Importar" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Espai de treball" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Finestres" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Activa" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "&Arranjaments" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Ajuda" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Dispositiu" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "&Historial" # ??? p roca: Per revisar #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "&Finestres" # ??? p roca: Per revisar: posició del & i traducció # ??? Per revisar : kde-i18n-ca@kde.org # es: M&ovimiento de herramientas #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "M&oviment d'eines" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" ",Launchpad Contributions:,Pep Roca, ,Launchpad Contributions:,Pep Roca, " ",Launchpad Contributions:,Pep Roca, ,Launchpad Contributions:,Pep Roca, " ",Launchpad Contributions:,Launchpad Translations Administrators,Pep Roca" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "pep.roca@gmai.com, xavier.fim@gmail.com,,,,,,,,,,,,,,,," rkward-0.6.1/po/compile_po.cmake0000644000175000017500000000303412124345424016127 0ustar thomasthomas# helper script, which will compile a po into a gmo, if, and only if it is at least 80% translated. # this is basically, because ADD_CUSTOM_COMMAND won't capture stdout, and EXECUTE_PROCESS # can't be made to re-run when the po-file changes. EXECUTE_PROCESS(COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile}) # For printing any errors / warnings EXECUTE_PROCESS(COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --statistics -o ${_gmoFile} ${_poFile} # Second run to grab stats ERROR_VARIABLE MSGFMT_STATS ERROR_STRIP_TRAILING_WHITESPACE) # Try to extract statistics information on translated vs. untranslated strings STRING(REGEX MATCHALL "[0-9]+" MSGFMT_COUNTS ${MSGFMT_STATS}) LIST(LENGTH MSGFMT_COUNTS MSGFMT_COUNTS_COUNT) IF(MSGFMT_COUNTS_COUNT LESS 2) LIST(APPEND MSGFMT_COUNTS 0) # This means X translated, and no untranslated strings ENDIF(MSGFMT_COUNTS_COUNT LESS 2) IF(MSGFMT_COUNTS_COUNT LESS 3) LIST(INSERT MSGFMT_COUNTS 1 0) # This means X translated, no fuzzy, Y untranslated strings ENDIF(MSGFMT_COUNTS_COUNT LESS 3) LIST(GET MSGFMT_COUNTS 0 TRANSLATED_COUNT) LIST(GET MSGFMT_COUNTS 2 UNTRANSLATED_COUNT) MATH(EXPR TRANSLATION_RATIO "${TRANSLATED_COUNT}*100/(${TRANSLATED_COUNT}+${UNTRANSLATED_COUNT})") # Purge hopelessly incomplete translations IF(TRANSLATION_RATIO LESS 80) MESSAGE (STATUS "${_poFile} is only ${TRANSLATION_RATIO}% translated. Will not be installed.") FILE(REMOVE ${_gmoFile}) ELSE(TRANSLATION_RATIO LESS 80) MESSAGE (STATUS "${_poFile} is ${TRANSLATION_RATIO}% translated.") ENDIF(TRANSLATION_RATIO LESS 80) rkward-0.6.1/po/pl.po0000644000175000017500000026607312124345424013770 0ustar thomasthomas# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Polish translation started Nov 19, 2004 by donkiszot_at_fiz.coi.waw.pl # Any sugestions and help are welcome! # msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2013-01-21 17:31+0000\n" "Last-Translator: Mike08 \n" "Language-Team: LANG \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Obiekt '%1' nie mógł zostać otwarty do edycji. Oznacza to, że nie istnieje " "albo RKWard (jeszcze) nie wspiera edytowania tego typu obiektów." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Nie można edytować '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Ładowanie Obaszaru Roboczego ..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Wystąpił błąd podczas otwierania pliku '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Błąd podczas ładowania obszaru roboczego" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "Nie można otworzyć okna dialogowego drukowania KDE" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Oczekiwanie na zakończenie R" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Nie podałeś nazwy pliku. Dane NIE zostały zapisane. Czy chcesz kontynuować?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Zapisywanie do pliku '%1' nie powiodło się. Co chcesz zrobić?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Zapisanie nie powiodło się" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Spróbuj zapisać do pliku o innej nazwie" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Zapisywanie nie powiodło się" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Zapisywanie do pliku '%1' nie powiodło się. Czy chcesz spróbować zapisać z " "inną nazwą pliku?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Zrobione" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Edytuj plik(i)" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Pakiet dodany do czarnej listy" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Obiekt '%1' został usunięty z obszaru roboczego lub zmienił się w inny typ " "obiektu, ale jest aktualnie otwarty do edycji. Czy chcesz go przywrócić?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Przywrócić obiekt?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Czy na pewno chcesz usunąć obiekt '%1'? Obiekt jest aktualnie otwarty do " "edycji, zostanie usunięty również z edytora. Nie będzie można go odzyskać." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Usunąć obiekt?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Czy na pewno chcesz usunąć obiekt '%1'? Nie będzie można go odzyskać." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Nazwa" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Etykieta" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Typ" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Klasa" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "nazwy rzędów" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "" #: core/robject.cpp:122 msgid "Label:" msgstr "Etykieta:" #: core/robject.cpp:123 msgid "Type:" msgstr "" #: core/robject.cpp:126 msgid "Function" msgstr "Funkcja" #: core/robject.cpp:127 msgid "Usage: " msgstr "Użycie: " #: core/robject.cpp:129 msgid "Data frame" msgstr "" #: core/robject.cpp:131 msgid "Array" msgstr "" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "" #: core/robject.cpp:135 msgid "List" msgstr "Lista" #: core/robject.cpp:137 msgid "Variable" msgstr "Zmienna" #: core/robject.cpp:138 msgid "Data Type:" msgstr "" #: core/robject.cpp:140 msgid "Environment" msgstr "Środowisko" #: core/robject.cpp:145 msgid "Length: " msgstr "Długość: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Wymiary: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Klasa(y):" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Nazwa, którą podałeś już istnieje lub jest nieprawidłowa. Zmieniono nazwę na " "%1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Nieprawidłowa nazwa" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Format" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Poziomy" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Edytuj te pola by zmienić nazwy zmiennych." #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Wycina zaznaczone i umieszcza je w schowku" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Kopiuje zaznaczone do schowka" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr "" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Usuń tę zmienną" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Wklejanie zawartości schowka..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "" #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Tytuł" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Wersja" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Instaluj" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Obfitość komunikatów debagera (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "" #: main.cpp:128 msgid "Project leader / main developer" msgstr "" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "" #: main.cpp:135 msgid "Plugins and patches" msgstr "Wtyczki i łatki" #: main.cpp:136 msgid "New website" msgstr "" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "" #: main.cpp:138 msgid "A cool icon" msgstr "" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "" #: main.cpp:144 msgid "Some patches" msgstr "" #: main.cpp:145 msgid "patches and helpful comments" msgstr "" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Domyślne" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Ustawienia domyślne" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Wyniki" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "" #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "" #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "" #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "my.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Następny >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Przerwij uruchomione polecenie" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Ładowanie wtyczek..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "" #: rkward.cpp:374 msgid "Files" msgstr "" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "" #: rkward.cpp:416 msgid "Script File" msgstr "" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Otwiera istniejący dokument" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Otwiera ostatnio używany plik" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Zapisz przestrzeń roboczą" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Zapisuje bieżący dokument" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Zapisz jako... przestrzeń roboczą" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Zapisuje jako... bieżący dokument" #: rkward.cpp:453 msgid "Quits the application" msgstr "Zamyka aplikację" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Zamyka wszystkie otwarte edytory danych" #: rkward.cpp:483 msgid "Close All" msgstr "" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Gotowe." #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "Kończymy..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "" #: rkward.cpp:706 msgid "Don't quit" msgstr "" #: rkward.cpp:736 msgid "New dataset" msgstr "" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Otwieranie obszaru roboczego" #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Czy chcesz zapisać bieżący obszar roboczy?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Aktualizuj" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "" #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "" #: robjectviewer.cpp:251 msgid "Ready" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Pokaż ukryte obiekty" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Wtyczki" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "zawsze pokazuj polecenia" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "zawsze pokazuj wyniki" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "Pokazuj błędy" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr "" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Pliku nie zapamiętany" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Błąd syntaktyczny.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Znajdź:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Znajdź" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Temat" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "" #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "" #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Zmiana nazwy" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Zmiana nazwy obiektu" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Wprowadź nową nazwę" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "U&ruchom" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nowy" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" ",Launchpad Contributions:,RKWard Team, ,Launchpad Contributions:, ,Launchpad " "Contributions:,RKWard Team, ,Launchpad Contributions:,Isamu715,Jakub " "Wilk,Mike08,RKWard Team" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" ",,rkward-tracker@lists.sourceforge.net,,,,,rkward-" "tracker@lists.sourceforge.net,,,isamu715@gmail.com,,micou8@gmail.com,rkward-" "tracker@lists.sourceforge.net" rkward-0.6.1/po/de.po0000644000175000017500000041165512124345424013743 0ustar thomasthomas# translation of de.po to # translation of rkward.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Stefan Rodiger , 2006. # Stefan Joerg Roediger , 2006. # SJR , 2006, 2007. # Thomas Friedrichsmeier , 2006, 2007. # Stefan Roediger , 2007. # Stefan Rödiger , 2007, 2009, 2010, 2011. msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2013-03-18 18:20+0000\n" "Last-Translator: Thomas Friedrichsmeier \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: de\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Das Objekt '%1' konnte nicht zum Bearbeiten geöffnet werden. Entweder " "existiert es nicht, oder RKWard unterstützt die Bearbeitung dieser Art von " "Objekten noch nicht." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Kann '%1' nicht editieren" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Lade Workspace ..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Ein Fehler ist aufgetreten beim öffnen der Datei '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Fehler beim Laden des Workspace" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" "Es wurde kein Dienst gefunden, um den KDE Druck-Dialog für Postscript-" "Dateien anzuzeigen. RKWard versucht, stattdessen einen Postscript-" "Betrachterprogramm zu öffnen (falls vorhanden).

Um dieses Problem in " "Zunkunft zu umgehen, können Sie 'okular' installieren oder RKWard so " "konfigurieren, dass es nicht versucht, mittels eines KDE Druck-Dialogs zu " "drucken." #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "KDE Druckdialog kann nicht geöffnet werden" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Bitte warten bis laufende R-Kommandos beendet sind. Um sofort zu beenden " "bitte Abbrechen wählen (WARNUNG: Das könnte zu Datenverlust führen)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Warte auf Beenden von R" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" "%1|R Workspace Dateien (%1)\n" "*|Alle Dateien" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Kein Dateiname angegeben. Ihre Daten wurden NICHT gespeichert. Möchten Sie " "dennoch fortfahren?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Speichern als Datei '%1' ist gescheitert. Was möchten Sie tun?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Speichern gescheitert" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Versuche mit einem anderen Dateinamen zu speichern" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Speichern gescheitert" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Speichern in Datei '%1' gescheitert. Wollen Sie versuchen, die Datei unter " "einem anderen Dateinamen zu speichern?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Erledigt" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" "Ein Kommando das in der R-Engine läuft möchte das Sie folgende Datei(en) " "betrachten:\n" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Zeige Datei(en)" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" "Ein Befehl, der in R-Engine bearbeitet wird, verlangt von Ihnen, eine oder " "mehere Dateien zu editieren. Bitte sehen Sie sich diese Dateien an, " "bearbeiten Sie sie wie erforderlich und speichern Sie sie. Anschließend " "klicken Sie den \"Erledigt\"-Knopf, oder schließen Sie diesen Dialog, um " "fortzufahren.\n" "\n" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Datei(en) bearbeiten" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "Das Paket '%1' (welches Sie wahrscheinlich geladen haben) ist gegenwärtig " "für den Erhalt von Strukturinformationen auf die schwarze Liste gesetzt. " "Dies bedeutet insbesondere das die Objekte in diesem Paket nicht im " "Objektbrowser erscheinen und es wird keine Vervollständigung der Objektnamen " "oder Hinweise für Funktionsargumente in diesem Paket geben.\n" "Pakete werden typischerweise auf die schwarze Liste gesetzt, wenn sie große " "Datenmengen enthalten, was zu lang zum Laden brauchen würde. Um dieses Paket " "nicht mehr zu listen, gehen Sie zu den Einstellungen -> Konfiguriere RKWard -" "> Workspace." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Paket auf die schwarze Liste gesetzt" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Das Objekt '%1' wurde vom Workspace entfernt oder in einen anderen Objekttyp " "umgewandelt, aber es ist gegenwärtig zur Bearbeitung geöffnet. Wollen Sie es " "wiederherstellen?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Objekte wiederherstellen?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Möchten Sie das Objekt '%1' wirklich entfernen? Das Objekt ist derzeit zur " "Bearbeitung geöffnet, es wird auch vom Editor entfernt. Es gibt keine " "Möglichkeit es wiederherzustellen." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Objekt entfernen?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Wollen Sie das Objekt '%1' wirklich entfernen? Es gibt keine Möglichkeit es " "wieder herzustellen." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Name" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Kennzeichen" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Typ" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Klasse" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "Verwaiste Namespaces" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" "Dieses spezielle Objekt existiert eigentlich nicht in R. Es wird hier dazu " "benutzt, die namespaces aufzulisten, dies zwar geladen sind, aber nicht zu " "einem Paket im Suchpfad gehören. Typischerweise handelt es sich um " "'importierte' namespaces." #: core/rkrownames.cpp:41 msgid "row names" msgstr "Zeilennamen" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "neue.zeile" #: core/robject.cpp:120 msgid "Full location:" msgstr "Volle Ortsangabe:" #: core/robject.cpp:122 msgid "Label:" msgstr "Kennzeichen:" #: core/robject.cpp:123 msgid "Type:" msgstr "Typ:" #: core/robject.cpp:126 msgid "Function" msgstr "Funktion" #: core/robject.cpp:127 msgid "Usage: " msgstr "Verwendung: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Daten Frame" #: core/robject.cpp:131 msgid "Array" msgstr "Array" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matrix" #: core/robject.cpp:135 msgid "List" msgstr "Liste" #: core/robject.cpp:137 msgid "Variable" msgstr "Variable" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Datentyp:" #: core/robject.cpp:140 msgid "Environment" msgstr "Umgebung" #: core/robject.cpp:145 msgid "Length: " msgstr "Länge: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensionen: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Klasse(n):" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "Das Paket %1 wurde nicht entfernt. Es wird von RKWard benötigt. Wenn Sie " "dies wirklich beabsichtigen, können Sie dies in der R-Konsole durchführen." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "Paket %1 wurde wahrscheinlich nicht geladen" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Der Name den Sie angegeben haben wird bereits verwendet, oder ist nicht " "zulässig. Umbenannt zu %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Unzulässiger Name" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Hier eingeben, um neue Spalten hinzuzufügen" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Hier eingeben, um neue Zeilen hinzuzufügen" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "Dieser Wert ist hier nicht erlaubt." #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Neue Variable#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Zeilennamen" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "Diese Spalte enthält ein oder mehrere ungültige Felder." #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Format" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Level" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Editieren Sie diese Felder um die Variablen umzubenennen." #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "Eine deskriptive Bezeichnung für jede Spalte (optional)." #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Datentyp" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "Doppelklick auf diese Felder um das Datenanzeigefenster anzupassen." #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "Doppelklick auf diese Felder um die Level der Faktoren zu editieren." #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Auswahl ausschneiden und in Zwischenablage ablegen" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Kopiere gewählten Abschnitt in die Zwischenablage" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "Füge Inhalt der Zwischenablage in die aktuelle Position ein" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Füge in Tabelle ein" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" "Fügt den Inhalt der Zwischenablage in die aktuelle Position ein, ohne die " "Tabellenbegrenzung zu überschreiten" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Füge in Auswahl ein" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" "Fügt den Inhalt der Zwischenablage in die aktuelle Position ein, ohne die " "Grenzen der Auswahl zu überschreiten" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" "Der Editor '%1' enthält folgende doppelte Spaltennamen. Das Editieren dieser " "Tabelle ist möglicherweise nicht sicher und wurde deaktiviert. Sie können es " "reaktivieren, wenn Sie sich wirklich sicher sind was Sie tun. Dennoch wird " "dringlichst geraten die Tabelle zu überarbeiten und/oder ein Sicherung der " "Daten zu erstellen." #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "Doppelte Spaltennamen gefunden" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [nur lesen]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Füge links eine neue Variable ein" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Lösche diese Variable" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Füge neuen Fall oberhalb ein (bei %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Lösche markierte Zeilen (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Lösche diese Zeile (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Zwischenablageinhalt einfügen..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Dateiformat: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Keine Plugins definiert für den Kontext '%1'" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Alle Dateien" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Konfiguriere Pakete" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Lokale Pakete" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "Installieren / Aktualisieren / Entfernen" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Konfiguriere Repositories" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "Pakete %1 bei %2" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" "Die folgenden Pakete, die Sie zur Entfernung vorgesehen haben, sind für " "RKWard erforderlich und werden nicht entfernt. Wenn Sie vollkommen sicher " "sind, dass Sie diese Pakete entfernen wollen, benutzen Sie dafür bitte die R " "Kommandozeile." #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "Entferne bestimmte Pakete nicht" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" "Ihre gegenwärtigen Nutzerrechte erlauben nicht das entfernen der folgenden " "Pakete. Diese werden übersprungen." #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "Ungenügende Nutzerbefugnisse" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" "Ihre gegenwärtigen Benutzerberechtigungen lassen es nicht zu, die folgenden " "Pakete zu entfernen. Wollen Sie diese Pakete überspringen, oder wollen Sie " "mit Administratorrechten fortfahren (Sie werden nach dem Passwort gefragt " "werden)?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" "Sie beabsichtigen die folgenden Pakete zu entfernen. Sind Sie sicher das Sie " "fortfahren wollen?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "Beabsichtige Pakete zu entfernen" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "Bitte warten Sie während die gewählten Pakete entfernt werden" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "Entferne Pakete" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Gewählter Speicherort für Bibliotheken ist nicht beschreibbar" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" "

Das Verzeichnis, das Sie für die Installation gewählt haben (%1), ist " "unter Ihren gegenwärtigen Benutzerberechtigungen " "schreibgeschützt.

Möchten Sie stattdessen nach %2 installieren? (Sie " "können auch \"Abbrechen\" klicken und über den \"Konfiguriere Repositories\"-" "Knopf ein anderes Verzeichnis einrichten.)

" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" "

Sofern Sie Zugang zu einem Administratorkonto auf diesem Computer haben, " "können Sie stattdesen auch unter diesem die Pakete installieren, oder die " "Schreibberechtigungen von '%1' anpassen. Eine automatischer Wechsel zum " "Administratorkonto wird derzeit von RKWard unter Windows nicht " "unterstützt.

" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "Nach %1 installieren" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" "

Wenn Sie der Administrator dieses Computer sind, können Sie stattdessen " "auch versuchen, die Pakete als root zu installieren (Sie werden nach " "dem Passwort gefragt werden).

" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Werden Sie root" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Bitte warten Sie während die gewählten Pakete installiert werden" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Installiere Pakete" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "Der Installationsprozess endete mit Code %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Installierte Pakete" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Titel" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Version" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Speicherstelle" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Laden" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Entfernen" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Geladene Pakete" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Beim Versuch zu laden / entladen ist ein Fehler aufgetreten /. Bitte " "Transkript unterhalb für Details ansehen" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Fehler beim bearbeiten der Pakete" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" "Viele Pakete sind auf CRAN (Comprehensive R Archive Network) oder anderen " "Repositories verfügbar.
(klicken Sie \"Konfiguriere Repositories\", um " "weitere Repositories hinzuzufügen)." #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "Zeige nur Pakete mit folgender Übereinstimmung:" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" "

Sie können die Anzeige der Pakete in der Liste auf solche einschränken, " "deren Namen oder Titel einem Filter entsprechen.

Hinweis: Um " "nach Teilbegriffen zu suchen, fügen Sie '*' an den Anfang und / oder das " "Ende des Suchbegriffs an. Z.B. '*stat*'.

" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "Wähle alle Updates" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Die Pakete die von Backend angefordert wurden (\"%1\") sind nicht in den " "Paket-Repositories. Möglicherweise ist der Paketname falsch geschrieben, " "oder Sie müssen zusätzliche Repositories mittels dem \"Konfiguriere " "Repositories\"-Button angeben." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Pakete nicht verfügbar" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Installierte Pakete in:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "Vorgeschlagene Pakete installieren." #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" "Einige Pakete machen \"Vorschläge\" für zusätzliche Pakete, die zwar nicht " "zwingend erforderlich sind, um das Paket zu nutzen, die aber zusätzliche " "Funktionalität bieten können. Wählen Sie diese Option, um solche " "zusätzlichen vorgeschlagenen Pakete mit zu installieren." #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" "

Bitte warten Sie, während die installierten und verfügbaren Pakete " "ermittelt werden.

Hinweis: Eine funkionierende " "Internetverbindung ist erforderlich. Der Vorgang kann einige Zeit dauern, " "insb. fall ein oder mehrere Repositories zeitweilig nicht erreichbar " "sind.

" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "Suche nach Paketen" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Status" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" "

Pakete, die in dieser Zeile mit einem RKWard-Symbol markiert sind, " "enthalten Erweiterungen zu RKWard. Meistens sind dies zusätzliche grafische " "Dialoge.

" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" "

sSie können Pakete zur Installation / Entfernung auswählen, indem Sie in " "dieser Spalte die entsprechenden Häkchen setzen / entfernen.

" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "

Der Name des Pakets.

" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" "

Eine Kurzbeschreibung für das Paket. Diese ist derzit nur für Pakete in " "lokalen Repositories verfügbar.

" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "

Installierte und / oder verfügbare Versionen von diesem Paket

" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "

Ort wo das Paket installiert / verfügbar ist

" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "Aktualisierbare Pakete" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" "Pakete, für die ein Update verfügbar ist. Darunter können Pakete sein, die " "lediglich mit einer neueren Version von R übersetzt wurden." #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "Neue Pakete" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" "Pakete, die zur Installation zur Verfügung stehen, aber gegenwärtig nicht " "installiert sind." #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "Installierte Pakete" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" "Pakete die lokal installiert sind. Beachten Sie, dass für diese Pakete auch " "Updates vorliegen können." #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Installieren" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Entfernen" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Kontext:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "Absturzdatei gefunden" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Im Dateibrowser anzeigen" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "Wiederherstellen" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" "

RKWard ist vermutlich vor kurzen abgestürzt. Dies ist bedauerlich! " "Möglicherweise ist nicht alles verloren und mit etwas Glück wurden alle " "Daten rechtzeitig gespeichert.

" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" "

Eine Workspace-Wiederherstellungsdatei existiert in %2 als " "%3.

" msgstr[1] "" "

%1 Workspace-Wiederherstellungsdateien existieren in %2. Die " "aktuellste davon ist %3.

" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" "

Möchten Sie diese Datei nun öffnen? Hinweis: Sie werden beim " "nächsten Start von RKWard wieder daraufhingewiesen, falls Sie die Dateien " "nicht manuell entfernen/umbenennen.

" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Einen oder mehr auswählen:" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Wählen Sie einen:" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Wie möchten Sie fortfahren?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Starte mit leerem Workspace" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Starte mit leerer Tabelle" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "Lade Workspace vom gegenwärtigen Verzeichnis" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" "Lade Workspace vom aktuellen Verzeichnis:\n" "%1" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Lade einen vorhandenen Workspace:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<<Öffne eine andere Datei>>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Immer beim Start ausführen" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" "Nach Starten (und nach laden des definierten Workspace wenn anwendbar), " "evaluiere den angegebenen R-Code." #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Wortfülle der Debugger-Nachricht (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Maskieren für Komponenten die debugt werden sollen (siehe debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Debugger (Schließen sie sämtliche Parameter für den Debugger mit den " "jeweiligen Befehlen in einfache Anführungszeichen ('') ein)" #: main.cpp:125 msgid "R workspace file to open" msgstr "R-Workspace Datei die geöffnet werden soll" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Frontend für die Statistiksprache R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "(c) 2002, 2004 - 2013" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Projektleiter / Hauptentwickler" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "C++-Entwickler von 2004 bis 2007" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "Viele Plugins, Vorschläge, Plot-Verlauf" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "Viele Plugins, Vorschläge, rkwarddev Paket" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Viele Plugins, Vorschläge, Marketing und Übersetzungen" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Mitwirkende in alphabetischer Reihenfolge" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Verschiedene hilfreiche Kommentare und Diskussionen" #: main.cpp:135 msgid "Plugins and patches" msgstr "Plugins und Patches" #: main.cpp:136 msgid "New website" msgstr "Neue Website" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "HP-Filter-Plugin, spanische Übersetzung" #: main.cpp:138 msgid "A cool icon" msgstr "Ein cooles Icon" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "RKWard Logo, viele Vorschläge, Wortwahl" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Verschiedene wertvolle Kommentare, Hinweise und Patches" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Übersetzungen, Vorschläge, Plugins" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Viele Kommentare, nützliche Vorschläge und Fehlerberichte" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Deutsche Übersetzung und Fehlerberichte" #: main.cpp:144 msgid "Some patches" msgstr "Einige Patches" #: main.cpp:145 msgid "patches and helpful comments" msgstr "Patches und hilfreiche Kommentare" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "All jene bei rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Entschuldigung, falls Sie nicht erwähnt wurden. Bitte kontaktieren Sie uns, " "falls Sie ihren Namen hier nicht finden." #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Ausrichtung" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Standardeinstellung" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Links" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Rechts" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Dezimalstellen" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Standardeinstellung" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Wie benötigt" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Festgelegte Präzision:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Formatierung für '%1'" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Levels können nur aufeinander folgende ganzzahlige Werte, beginnend mit 1, " "zugewiesen werden (Indexspalte kann nur gelesen werden). Um Levels am Ende " "der Liste zu entfernen, einfach als leer setzten." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Level / Label-Werte für '%1'" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Dateiname" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Hinzufügen" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Hoch" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Runter" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" "

Hinweis:Diese Einstellung wird erst nach einem Neustart von " "RKWard wirksam.

" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Konfiguriere Standardeinstellungen" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Alle Umgebungen" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Objekt mit Children" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Variablen" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Funktionen" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Versteckte Objekte" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Zeige Objekte" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Zeige Felder" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "Es gab Fehler und / oder Warnungen! Betrachten Sie das Transkript " "unterhalb" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Ausgabe" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Ausgabe:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Fehler / Warnungen" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Fehler / Warnungen:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Abbrechen" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "Ändern" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "Eltern- (Parent) Objekt: %1" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "Wähle Eltern- (Parent) Objekt" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Überschreiben? (Das Objekt existiert bereits)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Überschreiben?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Spezielles einfügen..." #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Einfügemodus" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Einzelne Zeichenkette" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Vektor" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Feldtrenner" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Reiter" # Is it a typo (Comma vs. Command)? #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Komma" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Einzelner Raum" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "Beliebiger Leerraum" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Andere:" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Zitieren" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "Werte nicht zitieren" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Automatisch" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Alle Werte zitieren" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Transformationen" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Horizontal umkehren" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Vertikal umkehren" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Zeilen/Spalten tauschen" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "NAs einfügen wenn benötigt" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "Kopiere Zeilen zur Ausgabe" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Führe aktuelle Befehlszeile aus" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Führe Auswahl aus" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Führe alles aus" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Funktionsreferenz" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Datei konnte zum Lesen nicht geöffnet werden" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Fehler beim parsen der XML-Datei. Fehlermeldung war: '%1' in Zeile '%2', " "Spalte '%3'. Weitere Fehler sind weiter unten angegeben" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Versuche Children von invalidem Element wieder aufzufinden" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Erwartete genau ein Element '%1', aber fand %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "'%1' - Attribut nicht gegeben. Nehme '%2' an" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "Illegaler Attributwert. Erlaubt sind nur Werte einer von '%1'." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Illegaler Attributwert. Nur Integer Zahlen sind erlaubt." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Illegaler Attributwert. Nur Dezimalzahlen sind erlaubt." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Illegaler Attributwert. Erlaubt sind nur Werte die Werte '%1' und '%2'." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "Versuche auf Inhalt eines ungültigen Elements zuzugreifen." #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "XML-parsing '%1' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(kein Label)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Sie haben versucht das Plugin '%1' aufzurufen, aber dieses Plugin ist " "gegenwärtig unbekannt \n" "Möglicherweise müssen Sie die entsprechende PluginMap (Einstellungen-" ">Konfiguriere RKWard->Plugins) laden, oder möglicherweise wurde das Plugin " "umbenannt." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "Dieses Plugin ist nicht vorhanden" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" "Schlechtes Serialisierungsformat während des Versuchs das Plugin '%1' " "aufzurufen. \n" "Bitte kontaktieren Sie das RKWard-Team (Hilfe->Über RKWard->Autoren)." #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "Schlechtes Serialisierungsformat" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" "\n" "Das Plugin ist abgestürzt." #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "Nicht alles angegebenen Einstellungen konnten angewendet werden. " "Wahrscheinlich sind einige \n" "R-Objekte nicht mehr in ihrem gegenwärtigen Workspace." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "Nicht alle Einstellungen wurden übernommen" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "Das Plugin konnte mit diesen Einstellungen automatisch übergeben werden." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "Konnte nicht übergeben" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" "Konnte \"plugin map\" Datei '%1' nicht öffnen. (Nicht lesbar oder konnte " "nicht geparst werden)." #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" "Überspringe \"plugin map\" Datei '%1': Nicht mit dieser Version von RKWard " "kompatibel." #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" "Die angegebene erforderliche Datei '%1' existiert nicht oder ist nicht " "lesbar. Wird ignoriert." #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" "Konnte die angegebene benötigte \"plugin map\" nicht auflösen ('%1'). Sie " "müssen eventuell weitere Pakete installieren." #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" "RKComponentMap enthält bereits eine Komponente mit der Id '%1'. Zweiter " "Eintrag wird ignoriert." #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" "Die angegebene Datei '%1' für Komponente '%2' existiert nicht oder ist nicht " "lesbar. Wird ignoriert." #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" "Die Komponente '%1' is nicht in einer Version verfügbar, die mit dieser " "Version von RKWard kompatibel ist." #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "Nicht angegeben" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "Copyright (c)" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "Lizenz" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "Autoren:" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "Aufgaben" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "RKWard \"plugin map\"" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "R-Paket" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" "Diese Objekt hat %1 Dimension(en), aber %2 Dimension(en) wird / werden " "erwartet." #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" "Diese Objekt hat die Länge %1, aber eine Mindestlänge von %2 wird erwartet." #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" "Diese Objekt hat die Länge %1, aber eine Höchstlänge von %2 wird erwartet." #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" "Dieses Objekt scheint keiner der folgenden Klassen anzugehören: %1." #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" "Der Daten-Typ diese Objekts ist %1. Der / die erlaubte(n) Typ(en) ist " "/ sind %2." #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Wähle eine:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Spezifiziere Modell" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Vollständiges Modell" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Nur Haupteffekte" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Benutzermodell:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Haupteffekte" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Ebene" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Ausdruck" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Text eingeben" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "Daten eingeben:" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "Schreiben Sie in diese Zellen, um die Tabelle zu erweitern" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "Leere Werte sind nicht erlaubt" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "Diese Spalte enthält unzulässige Werte in einigen Zellen" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "Status wird aktualisert. Bitte warten." #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "Eine Zeile / ein Element hinzufügen" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "Eine Zeile / ein Element entfernen" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "Diese Zeile wurde noch nicht verarbeitet." #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "Diese Zeile enthält unzulässige Eingaben." #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "Bitte warten Sie, während die Eingaben verarbeitet werden." #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "Eine oder mehrere Zeilen enthalten unzulässige Eingaben." #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "Mindestens %1 Zeilen müssen definiert werden (oder keine)" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "Mindestens %1 Zeilen müssen definiert werden" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "Höchstens %1 Zeilen dürfen definiert werden" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "Dieses Element ist aus den folgenden Gründen ungültig:" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Dateinamen eingeben" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Wähle" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Speichere als:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "meine.daten" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Wert eingeben:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Vorschau" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "Vorschau (derzeit) nicht möglich" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Aktualisiere Vorschau" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "Warnungen oder Fehlermeldungen:" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Vorschau deaktiviert" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Vorschau aktuell" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Vorschau ist (noch) nicht möglich" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Beim Versuch die Beschreibung dieses Plugins zu lese, ist ein Fehler " "aufgetreten ('%1'). Bitte berufen Sie sich auf stdout für Details." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Konnte Plugin nicht erzeugen" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Übermitteln" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Schließen" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Automatisch schließen" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Hilfe" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Nutze Wizard" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Code" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Erneut ausführen" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Beim Ausführen. Bitte warten" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Unten können Sie die Befehle sehen, die entsprechend Ihrer Einstellungen " "erstellt wurden. Klicken Sie 'Übermitteln', um diese Befehle auszuführen." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Nächstes >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Zurück" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Nutze Dialog" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Variable:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "

Dieses Objekt ist an dieser Stelle nicht zulässig, weil:

" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Läuft" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Abgebrochen" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Kommandostapel" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Kommandokette" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Geschlossen" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Warten" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Befehl" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Beschreibung" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "R Start" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t-Ein nicht spezifizierter Fehler ist aufgetreten der noch nicht von " "RKWard gehandhabt werden kann. Wahrscheinlich wird RKWard nicht richtig " "funktionieren. Bitte überprüfen Sie ihr Setup.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" "

Es gab ein Problem beim Start vom R-Backend. Die folgenden Fehler traten " "auf:

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Fehler beim Start von R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" "Ein Befehl im R Backend versucht, den Zeichensatz zu ändern. Obwohl RKWard " "dies unterstützt und versuchen wird, sich an den neuen Zeichensatz " "anzupassen, kann dieser Vorgang zu subtilen Problemen führen, wenn aktuell " "Datenfenster geöffnet sind. Zudem wurde diese Funktion bislang wenig " "getestet. Es könnte ratsam sein, den Workspace zu sichern, bevor Sie " "fortfahren.\n" "Wenn Sie ein oder mehr Datenfenster geöffnet haben, oder wenn Sie sich nicht " "sicher sind, empfehlen wir, diese zunächst zu schließen. In diesem Fall " "wählen Sie jetzt bitten \"Abbrechen\", schließen Sie die Datenfenster, " "speichern Sie und versuchen Sie es erneut." #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Lokale Änderung" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "Das R-Backend fragt nach den Paket '%1'um die aktuelle Aufgabe " "durchzuführen. Es wird das Paket-Management-Tool geöffnet. Von dort können " "Sie versuchen, das benötigte Paket zu finden und zu installieren." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Benötige Paket '%1'" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "R-Backend erbittet Informationen" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" "\n" "Es wird unverzüglich geschlossen werden. Dies bedeutet das Sie nunmehr keine " "Funktionen die vom R-Backend abhängig sind weiter verwenden können. " "Insbesondere können Sie nichts weiter ausführen, nicht einmal den Workspace " "speichern. Möglicherweise hat R bereits den Workspace gespeichert. Sie " "können allerdings jegliche offene Befehls-Dateien, Ausgaben, oder Daten aus " "dem offenen Daten-Editoren sichern. Schließen Sie RKWard danach.\n" "Dies dieser Zustand NIEMALS eintreten sollte senden Sie bitte eine " "aussagekräftige E-Mail mit der Beschreibung was passierte an rkward-" "devel@lists.sourceforge.net. Entschuldigung!" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "R-Engine ist 'gestorben'" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" "Fehler bei der Kontaktaufnahme mit dem Backend Prozess. Erwartet wurde das " "Zeichen '%1', übermittelt wurde '%2'." #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" "Versionskonflikt bei der Kontaktaufnahme mit dem Backend Prozess. Die " "Version des Frontends ist '%1', die des Backends ist '%2'.\n" "Bitte reparieren Sie Ihre Installation." #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "Die R-Engine wurde beendet mit dem Status: %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "Die R-Engine ist auf einen fatalen Fehler getroffen:\n" "%1" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Benachrichtigung vom R-Backend" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "Benachrichtigung vom R-Backend" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- Die 'rkward' R-library konnte entweder nicht geladen werden oder " "liegt nicht in der korrekten Version vor. Das kann zu einer ganzen Reihe von " "Fehlern führen, die vom Fehlen einzelner Funktionen bis zum totalen Versagen " "von Funktionen führen können. Die wahrscheinlichste Ursache dafür ist, dass " "die letzte Installation die notwendigen Dateien nicht am korrekten Platz " "hinterlegt hat. Es ist aber auch möglich das von einer vorherigen " "Installation Dateien nicht sauber entfernt wurden.

\t\t\t

Sie " "sollten RKWard nun beenden und die Probleme beheben. Für Hilfe wenden " "Sie sich bitte an http://p.sf.net/rkward/compiling.

\n" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t-Ein Problem bei der Kommunikation mit R ist aufgetreten. Dies deutet " "auf eine fehlerhafte Installation hin.

\t\t\t

Sie sollten RKWard nun " "beenden und die Installation reparieren.Hilfe finden Sie unter http://p.sf.net/rkward/compiling.

\n" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" "Die 'katepart'-Komponente konnte nicht geladen werden. RKWard funktioniert " "nicht ohne katepart und wird nun geschlossen. Bitte installieren Sie " "katepart und versuchen Sie es erneut." #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "'katepart' Komponente konnte nicht gefunden werden" #: rkconsole.cpp:122 msgid "R Console" msgstr "R-Konsole" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Syntaxfehler\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" "*.Rhistory|R history Dateien (*.Rhistory)\n" "*|Alle Dateien (*)" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "Wähle Befehlsverlauf um Datei zu laden" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "Wähle Dateiname um Befehlsverlauf zu speichern" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Unterbreche laufendes Kommando" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Kopiere Auswahl wörtlich" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "Kopiere nur Kommandos" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Drucke Konsole" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "Importiere Befehlsverlauf..." #: rkconsole.cpp:921 msgid "Export command history..." msgstr "Exportiere Befehlsverlauf..." #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" "Sie haben RKWard konfiguriert Skriptbefehle in der R-Konsole auszuführen. " "Jedoch ist gerade ein anderes Kommando in der Konsole aktiv. Wollen Sie das " "Kommando in der Konsole anhängen, oder soll die Konsole zunächst zurücksetzt " "werden? Abbrechen drücken falls das neue Kommando nun nicht ausgeführt " "werden soll." #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "R-Konsole ist beschäftigt" #: rkconsole.cpp:940 msgid "Append" msgstr "Anhängen" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "Zurücksetzen, dann übermitteln" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

Der RKWard-Editor konnte entweder die Ressourcendateien nicht finden, " "oder nur eine alte Version von diesen Dateien. Die wahrscheinlichste Ursache " "dafür ist, dass die letzte Installation die Dateien nicht am richtigen " "Speicherort abgelegt hat. Das kann zu einer Reihe von Problemen führen, die " "vom fehlen einzelner Funktionen bis zum Komplettausfall " "reichen.

Sie sollten RKWard nun beenden und die Installation " "reparieren.Hilfe finden Sie unter http://p.sf.net/rkward/compiling.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Fehlerhafte Installation" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" "Ihre KDE-Installation ist so konfiguriert das \"native\" Dateidialoge " "verwendet werden. Dies kann in einigen Fällen Fehler verursachen. Wir " "empfehlen daher \"native\" Dateidialoge zu deaktivieren.\n" "Sollten \"native\" Dateidialoge in RKWard unterdrückt werden?" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "Potentielles Problem mit Ihrer Konfiguration" #: rkward.cpp:221 msgid "Yes, disable" msgstr "Ja, deaktiviere" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "Nein, verwende \"native\" Dateidialoge" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Einstellung Plugins ..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Plugins werden benötigt: Sie können dies durch \"Einstellungen->Konfiguriere " "RKWard\" bewerkstelligen.\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "Keine aktiven \"plugin maps\"" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" "Neue RKWard Plugin-Pakete wurden gefunden (siehe unten) und wurden " "automatisch aktiviert. Um einzelne Pakete zu deaktivieren, wählen Sie " "Einstellugen->Konfiguriere RKward->Plugins." #: rkward.cpp:308 msgid "New plugins found" msgstr "Neue Plugins gefunden" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" "Die folgenden RKWard \"pluginmap\" Dateien konnten nicht geladen werden und " "wurden deaktiviert. Das könnte daran liegen, dass sie fehlerhaft sind, nicht " "mit dieser Version von RKWard kompatibel sind, oder nicht dazu gedacht sind, " "direkt geladen zu werden (mehr Informationen finden Sie in den 'Details')." #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "Einige \"plugin maps\" konnten nicht geladen werden" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" "Beim Laden der folgenden pluginmap Dateien sind Fehler aufgetreten. Das " "könnte daran liegen, dass einzelne Plugins fehlerhaft oder nicht mit dieser " "Version von RKWard kompatibel sind (klicken Sie auf 'Details' um mehr zu " "erfahren). Andere Plugins konnten jedoch erfolgreich geladen werden." #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" "Hinweis: Sie werden zu diesen pluginmap Dateien erst wieder gewarnt, wenn " "Sie eine neue Version von RKWard benutzen, oder diese Plugins entfernen und " "unter Einstellungen->Konfiguriere RKWard->Plugins erneut hinzufügen." #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "Befehlskopie-Einstellungen" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Workspace" #: rkward.cpp:374 msgid "Files" msgstr "Dateien" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Schwebende Aufgaben" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "Debugger Frames" #: rkward.cpp:395 msgid "Debugger Console" msgstr "Debugger Konsole" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "RKWard Diagnose Meldungen" #: rkward.cpp:411 msgid "Dataset" msgstr "Datensatz" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Erzeuge einen neuen leeren Datensatz und öffne ihn zur Bearbeitung" #: rkward.cpp:416 msgid "Script File" msgstr "Skriptdatei" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "Öffne R-Skriptdatei..." #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "Öffne neuste R-Skriptdatei" #: rkward.cpp:430 msgid "Import Data" msgstr "Datenimport" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Importiere Daten von verschiedenen Dateiformaten" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "Öffne Workspace..." #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Öffne ein vorhandenes Dokument" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "Öffne neusten Workspace" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Zuletzt geöffnet" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Speichere Workspace" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Speichere das gegenwärtige Dokument" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Speichere Workspace als" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Speichere das gegenwärtige Dokument als..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Beende die Anwendung" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "Unterbreche alle Kommandos" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "CC Kommandos zur Ausgabe..." #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "R Pakete verwalten" #: rkward.cpp:477 msgid "Close All Data" msgstr "Schließe alle Daten" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Schließe alle offenen Dateneditoren" #: rkward.cpp:483 msgid "Close All" msgstr "Schließe alles" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Ablösen" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Für die aktuelle Ansicht sind keine Aktionen verfügbar]" #: rkward.cpp:499 msgid "Open..." msgstr "Öffnen..." #: rkward.cpp:509 msgid "Import" msgstr "Import" #: rkward.cpp:512 msgid "Create..." msgstr "Erstellen..." #: rkward.cpp:519 msgid "Save..." msgstr "Speichern..." #: rkward.cpp:523 msgid "Export" msgstr "Export" #: rkward.cpp:616 msgid "Ready." msgstr "Fertig." #: rkward.cpp:620 msgid "Current working directory" msgstr "Aktuelles Arbeitsverzeichnis" #: rkward.cpp:698 msgid "Exiting..." msgstr "Beende..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Beenden von RKWard: Möchten Sie den aktuellen Workspace speichern?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Workspace speichern?" #: rkward.cpp:706 msgid "Don't quit" msgstr "Nicht beenden" #: rkward.cpp:736 msgid "New dataset" msgstr "Neues Datenset" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Geben Sie einen Namen für das Datenset an" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Öffne Workspace..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "Wählen Sie den zu ladenden Workspace..." #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Möchten Sie den aktuellen Workspace speichern?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "Die R-Engine ist beschäftigt." #: rkward.cpp:867 msgid "The R engine is idle." msgstr "Die R-Engine im Ruhezustand." #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "Die R-Engine wurde initialisiert." #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Öffne R-Skriptdatei(en)" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Unbenannte R-Workspace]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "Zusammenfassung (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "print (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "str (x)" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "Objekt wurde gelöscht!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Objektbetrachter: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "Das Objekt hat sich verändert. Klicken Sie auf \"Aktualisieren\"" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Aktualisierung" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Informationen werden geholt. Bitte warten." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Klicken Sie auf \"Aktualisieren\" um Informationen abzurufen" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Fertig" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "Das QtScript-Backend hat einen Fehler gemeldet:\n" "%1" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Skriptfehler" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Skriptfehler: %1\n" "Rückverfolgung:\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "Die Datei \"%1\" (benötigt von \"%2\") konnte nicht gefunden werden. Bitte " "überprüfen Sie ihre Installation." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" "Ein Fehler trat bei bei der Evaluierung des Skriptkodes auf.\n" "Datei: %1\n" "Zeile: %2\n" "Nachricht: %3." #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" "Fehler ('Die Datei \"%1\" (benötigt von \"%2\") konnte nicht gefunden " "werden. Bitte überprüfen Sie ihre Installation.');\n" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Vorbereiten\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Berechne\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Drucke Ergebnisse\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Einstellungen" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Einstellungen die mit einem (*) markiert sind, werden erst nach einem " "Neustart von RKWard wirksam" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Code-Vervollständigung" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Code-Vervollständigung aktivieren" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "Anzahl Zeichen bevor Code-Vervollständigung durchgeführt wird" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" "Verzögerung bevor eine Vervollständigung versucht wird (Millisekunden)" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "Aktive Funktionsargument Vorschläge" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "Automatische Speicherungen" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "Intervall für automatisches Speichern (Minuten)" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" "Behalte automatisch gespeicherte Dateien (Backups) nach manueller Speicherung" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "Öffne Skriptdatei(en)" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "Anzahl von Skripten in der Liste zuletzt geöffneter Dateien (*)" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "

Anzahl der letzten Dateien (im Öffne letzte Skriptdatei Menü)

" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "R-Skript Dateifilter (getrennt mit Leerzeichen)" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" "

Eine Liste von Filtern (Dateinamen-Erweiterungen), die als R " "Skriptdateien behandelt werden sollen. Insbesondere werden Dateien, die " "einem dieser Filter entsprechen immer mit R Syntaxhervorhebung " "geöffnet.

Die Filter untercheiden nicht nach Groß-/Kleinschreibung.

" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Skripteditor" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Lade/Speichere Befehlsverlauf" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Maximale Länge der Befehls Verlauf" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Unbegrenzt" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "" "Maximale Anzahl von Absätzen/Zeilen die in der Konsole angezeigt werden " "sollen" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Führe Befehle vom Skripteditor durch Konsole aus" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Füge auch diese Kommandos dem Verlauf der Konsole zu" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "Nicht anfügen" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Nur anfügen wenn einzelne Zeile" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Alle Kommandos hinzuzufügen" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Der Verlauf der Kommandozeile ist kontextsensitiv" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Konsole" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" "Diese Einstellungen sind nur für Debugging-Zwecke. Es ist sicherer, " "sie unverändert zu lassen. All diese Einstellungen werden nicht gespeichert " "und nur für die aktuelle Sitzung angewandt." #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Debug level" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Debug flags" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Zeitüberschreitung des Kommando" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Hinweis: Debug-Ausgabe wurde geschrieben nach %1" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Debug" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Verzeichnis in dem RKWard Dateien aufbewahren soll (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Startaktion (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" "Lade .RData-Datei vom aktuellen Verzeichnis, falls verfügbar (R Option '--" "restore')" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Frage nach einer Datei die geöffnet werden soll" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Zeige Auswahldialog (Standard)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Zeige RKWard-Hilfe beim Start" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "Startverzeichnis (*)" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "Arbeitsverzeichnis beim Starten nicht wechseln" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "RKWard-Verzeichnis (wie oben angegeben)" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "Benutzerverzeichnis" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "Zuletzt benutztes Verzeichnis" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "Das folgende Verzeichnis (bitte angeben):" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "Startverzeichnis" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" "

Das Arbeitsverzeichnis, das bei Programmstart aktiv sein soll. Beachten " "Sie: Wenn Sie beim Programmstart einen Workspace laden und RKWard so " "eingestellt ist, dass beim Laden von Workspaces in deren Verzeichnis " "gewechselt wird, so hat jenes Verzeichnis Vorrang.

" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Die Anordnung des Arbeitsplatzes (d.h. welche Skript-, Daten- oder " "Hilfefenster geöffnet sind), kann entweder pro R-Workspace, oder davon " "unabhängig gespeichert (und wieder hergestellt) werden. Welche Option " "wünschen Sie?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Zusammen mit R-Workspace speichern/wieder herstellen, wenn R-Workspace " "gepeichert/wiederhergestellt wird" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Unabhängig von R den Workspace speichern/wiederherstellen (gepeichert wird " "am Ende einer RKWard Sitzung, wiederhergestellt beim neuen Start)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Arbeitsplatzanordnung nicht speichern/wiederherstellen" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" "Wenn der Workspace geladen wird, wechsle zum entsprechenden Verzeichnis." #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Warnen wenn Objekte mit mehr als dieser Anzahl von Feldern bearbeitet werden " "sollen (0 für kein Limit):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Kein Limit" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "MDI-Fenster Fokussierverhalten" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Klicken um zu fokussieren" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Fokus folgt der Maus" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Allgemein" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "Standardfenstergröße" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "Standardbreite (Zoll (inches))" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "Standardhöhe (Zoll (inches))" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "Nutze KDE-Druckerdiaglog für Druckergeräte (falls verfügbar)" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "Bildschirmgeräte-Verlauf" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "Maximale Anzahl von aufgezeichneten Plots" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "Maximale Größe von einzelnen aufgezeichneten Plots (in KB):" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "Bildschirmgraphiken" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Welche Objekte sollten standardmäßig angezeigt werden?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Zeige versteckte Objekte" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Zeige alle Umgebungen" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Zeige Objekte mit Children" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Zeige Funktionen" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Zeige Variable(n)" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Welche Spalten sollten standardmäßig gezeigt werden?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Kennzeichnungs-Feld" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Typen-Feld" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Klassen-Feld" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Niemals die Struktur von diesen Paketen abrufen:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Ausnahme hinzufügen" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" "Füge die Namen der Pakte hinzu, deren Struktur nicht abgerufen werden soll" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "Befehle in das Ausgabefenster kopieren" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "Kommandos in Konsole eingegeben" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "Kommandos via \"Ausführen\" Menu starten" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "Kommandos ausgehend von Dialogen und Plugins" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "Auch die Befehlsausgabe kopieren" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Auswahlmöglichkeiten des Ausgabefensters" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "Fenster bei neuer Ausgabe zeigen" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "Fenster bei neuer Ausgabe hervorbringen" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Graphiken" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Dateiformat" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "JPG-Qualität" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Weite:" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Höhe:" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Einige Pakete sind mit verschiedenen Interfaces verfügbar. Einem wizard-" "artigen und einem traditionell Dialog-basierten. Welchen Modus bevorzugen " "Sie, falls beide vorhanden sind?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Bevorzuge immer Dialoge" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Bevorzuge empfohlene Interfaces" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Bevorzuge immer Wizards" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "R-Syntaxanzeige (in Dialogen)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Code standardmäßig anzeigen" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Standardhöhe vom Code-Display (Pixel)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Wähle .pluginmap-Datei(en )" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Plugins" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "Abhängigkeiten" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "Defekt" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "Geladen" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "Mit Fehlern" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "Aktiv" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Wähle .pluginmap-Datei" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Die folgenden Einstellung beeinflussen im Wesentlichen das Verhalten von R " "in der Konsole. Diese sollten unverändert belassen werden." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Zeige Warnungen" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Unterdrücke Wahrungen" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Drucke Warnungen später (Standard)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Drucke Warnungen unverzüglich" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Konvertiere Warnungen zu Fehlern" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Dezimalstellen (nur für Druck)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Breite der Ausgabe (Zeichen)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Maximale Anzahl von Elementen im Ausdruck angezeigt" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Maximale Länge von Warnungen/Fehlern die ausgegeben werden soll" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Behalte Befehle in Funktionen" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "WAHR (Standard)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "FALSCH" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Behalte Kommentare in Paketen" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "WAHR" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "FALSCH (Standard)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Maximale Stufe verschachtelter Ausdrücke" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Standard Kommastellen im Ausdruck ()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Prüfe Vektorgrenzen (warne)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Editorbefehle" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "Pager-Kommando" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "Internet Explorer Funktionen für den Internet-Zugriff benutzen" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" "

Internet Explorer Funktionen für Zugriffe von R auf das Internet " "benutzen. Diese Einstellung zu aktivieren, kann helfen, wenn Probleme eim " "Zugriff auf das Internet von R auftreten (z.B. beim Installieren von " "Paketen).

" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" "Weitere (Optionen) Kommandos die in jeder Sitzung ausgeführt werden sollen" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "R-Backend" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "CRAN Spiegelserver (freilassen um in jeder RKWard-Sitzung gefragt zu werden):" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Wähle Spiegelserver" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" "Paket Aufbewahrungsort (Repositories) (von denen Bibliotheken " "heruntergeladen werden sollen)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Archiviere heruntergeladene Pakete" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "Pakete aus Quellcode übersetzen" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" "Pakete aus Quellcode übersetzen (auf dieser Plattform nicht einstellbar)" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" "Pakete von fertig kompilierten Binärdateien zu installieren (soweit " "verfügbar) ist in der Regel schneller und benötigt keine Entwicklertools " "oder Bibliotheken. Allerdings führt die Installation aus Quelldateien zur " "bestmöglichen Kompatibilität. Unter Mac OS X und Linux empfehlen wir die " "Installation von Paketen aus Quelldateien." #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "R-Bibliothek Adresse (wohin Bibliotheken gespeichert werden, lokal)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Vermerk: Die StartUp-Standardwerte werden immer genutzt zusätzlich den " "Adressen die Sie in dieser Liste spezifizieren" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Füge R-Bibliotheksverzeichnis hinzu" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Füge Repository hinzu" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Füge URL von neuem Repository hinzu" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "R-Pakete" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Wähle CRAN Spiegelserver" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Vorerst werden Einstellungen nur für neue Befehle angewendet. Alle " "vorherigen Befehle bleiben sicht/unsichtbar." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "Zeige immer die Befehle" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "Zeige immer die Ergebnisse" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "Zeige Fehler" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "Fenster anzeigen/heben" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Nutzer Befehle" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Plugin generierte Befehle" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Anwendungsbefehle" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Synchronisationsbefehle" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" "Maximale Anzahl von Absätzen/Zeile die im Command Log angezeigt werden sollen" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Kommando-Log" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "An Hauptfenster anhängen" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Konfiguriere R-Backend" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Ausführung unterbrechen" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Gewählte Kommandos zurücknehmen" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Einige Kommandos die Sie versuchen zurückzunehmen wurden als \"sync\" " "(Buchstabe 'S' in Typ-Spalte). Abbrechen solcher Kommandos könnte zu " "Datenverlust führen. Diese Kommandos sind nicht zurückgenommen wurden." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Einige Kommandos wurden nicht abgebrochen" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Ausführung fortsetzen" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "Aktive Aufrufe" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "Nicht in einem Debugger-Kontext" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" "Aktiver Aufruf: %1
Environment: %2
Lokale " "Objekte: %3" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "Skripteditor" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "Füge Zeilenumbruch ein und führe aus" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Führe gesamten Block aus" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Auswahl als Block markieren" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Block nicht mehr markieren" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "CD zum Skriptverzeichnis" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Wechsle das Arbeitsverzeichnis zum Verzeichnis von diesem Skript" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "Speichere Skript..." #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "Speichere Skript als..." #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [verändert]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "" "Das Dokument \"%1\" wurde verändert. Soll es dennoch geschlossen werden?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Datei nicht gespeichert" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" "Ein Fehler trat auf bei der automatischen Speicherung der Skriptdatei '%1':" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Unbenannt" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (Aktiv)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (Unbenutzt)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Unvollständige Aussage.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Syntax Fehler.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "" "Ein nicht spezifizierter Fehler trat auf während der Ausführung des " "Kommandos.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Konfigurieren" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "Nächster Schritt" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "Schritt heraus" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" "

Setze die Bearbeitung fort, bis der Aufrufer dieser Funktion erreicth " "wird (sofern zuvor kein anderer debug-Befehl ausgelöst " "wird).

Hinweis: In einigen Fällen wird die aufrufenden Funktion " "nie erreicht, weil der Aufruf der letzte Schritt in der aufrufenden Funktion " "war. In diesen Fällen ist das Verhalten identisch zu 'Fortsetzen'.

" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "Fortsetzen" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" "Dieses Fenster kann nicht geschlossen werden, solange ein Debugger aktiv " "ist. Wenn Sie nicht wissen, was das heißt und einfach nur abbrechen wollen, " "klicken Sie \"Abbrechen\" an der rechten Seite dieses Fensters." #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" "

Dieses Fenster zeigt Diagnose-Meldungen zu RKWard selbst. Es richtet sich " "primär an (Plugin-)Entwickler. Es bietet keine Hilfe beim Debuggen " "von R Skripten.

Beachten Sie, dass die Liste der Meldungen jedes Mal " "gelöscht wird, wenn Sie das Fenster schließen.

Art und Schweregrad der " "gezeigten Meldungen kann unter Einstellungen->Konfiguriere RKWard->Debug " "eingestellt werden.

" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "Hinweis zu diesem Fenster" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Finde:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Felder:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Alle" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Alle außer Schlüsselwörter" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Schlüsselwörter" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Paket:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Groß/Kleinschreibung beachten" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Fuzzy Übereinstimmung" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Finde" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Suche in Hilfe" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Finde HTML-Hilfe für %1" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "Alle installierten Pakete" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "Geladene Pakete" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Keine Hilfe gefunden für '%1'. Möglicherweise ist entsprechendes Paket nicht " "installiert/geladen, oder vielleicht haben Sie bei dem Befehl vertippt. " "Versuchen Sie Hilfe -> Search R Help for more options." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Keine Hilfe gefunden" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Inhalt" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Paket" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Leere Ausgabe" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Aktualisiere Ausgabe" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "Ausgabe %1" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Drucke Ausgabe" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Exportiere Seite als HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "Ausgabefenster" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Drucke Seite" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Speichere Ausgabe als HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

RKWard Ausgabedatei konnte nicht gefunden werden

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Seite existiert nicht oder ist beschädigt" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" "Wollen Sie die Ausgabe wirklich löschen? Dadurch werden auch alle Grafik-" "Dateien in der Ausgabe gelöscht. Es ist nicht möglich, Sie wieder " "herzustellen." #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Ausgabe leeren?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "Lösche Ausgabe" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Kein Titel" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

Hilfeseite fehlt

\n" "

Die Hilfeseite für diese Komponente wurde noch nicht geschrieben oder ist " "fehlerhaft. Bitte ziehen Sie in Betracht dies mit zu verbessern.

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Verwenden Sie %1 nun" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Zusammenfassung" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Verwendung" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "GUI Einstellungen" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Unbenanntes GUI-Element" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Verwandte Funktionen und Seiten" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Technische Details" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "Info" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

Auf dieser Seite:

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "R Referenz bei '%1'" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "DEFEKTE REFERENZ" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "Hilfe zu %1" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "Konfiguriere %1" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Anhängen" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "Position" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Linke Seitenleiste" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Rechte Seitenleiste" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Obere Seitenleise" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Untere Seitenleiste" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "Nicht in der Seitenleiste angezeigt" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Hilfe zu R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Suche in R Hilfe" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Hilfe zu RKWard" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Zeige den R-Hilfeindex" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Zeige / hebe Fenster zu Such R-Hilfe an" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Zeige RKWard-Hilfe" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Vorheriges Fenster" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Nächstes Fenster" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "Zeige/Verberge %1" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Aktiviere Dokumentansicht" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Zeige &Ausgabe" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "Aus technischen Gründen können sie mit dem folgenden Dialog die Shortcuts " "nur für die gegenwärtig aktiven Teile von RKWard konfigurieren.\n" "\n" "Um beispielsweise die Shortcuts für innerhalb des Skripteditors zu ändern, " "müssen Sie das Skripteditorfenster öffnen und es aktivieren." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Notiz" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "RKWard Plugins" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "Aus technischen Gründen können Sie nur den Werkzeugleiste-Button im " "gegenwärtig aktiven Teil von RKWard mit dem folgenden Dialog konfigurieren.\n" "\n" "Wenn Sie beispielsweise die Werkzeugleiste-Buttons im Skripteditor " "konfigurieren, dann müssen Sie den Skripteditor öffnen und ihn aktivieren." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "---Problembeschreibung---\n" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" "Bitte geben Sie eine kurze Zusammenfassung des Problems:\n" "###Bitte ausfüllen###\n" "\n" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Was, im Detail, haben Sie getan kurz bevor dieses Problem aufgetreten ist?\n" "###Bitte ausfüllen###\n" "\n" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" "Falls Sie versuchen den Schritt oberhalb zu wiederholen, tritt dann das " "Problem wieder auf (nein, manchmal, immer)?\n" "###Bitte ausfüllen###\n" "\n" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" "Falls zutreffend: Wenn Sie das Selbe in einer R-Sitzung außerhalb von RKWard " "durchführen, treten dann die selben Probleme auf?\n" "###Bitte ausfüllen###\n" "\n" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Haben Sie weitere Hinweise die uns helfen können das Problem einzugrenzen? " "Insbesondere, falls zutreffend, können Sie uns Probedaten und R-Probekode " "zukommen lassen um dieses Problem reproduzieren zu können?\n" "###Bitte ausfüllen###\n" "\n" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" "Bitte warten Sie solange Informationen über Ihr Setup gesammelt werden.\n" "Im Fall das Backend ist \"gestorben\" oder sich aufgehangen hat, möchten Sie " "möglicherweise \"Abbrechen\" wählen um diesen Schritt zu überspringen." #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "Sammle Setupinformationen" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Fehler in RKWard melden" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" "

Wo sollte Ich Bugs oder Wünsche melden?

Bitte übermitteln " "Sie Ihre Bugs oder Wünsche an %1 oder senden Sie eine E-" "Mail an %2.

Welche Informationen sollte " "übermitteln?

Bitte kopieren Sie die unten gezeigte Information und " "füllen Sie Dateils zu den Fragen aus.

" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" "Sie haben ein neuen Grafikfenster in R geöffnet. Normalerweise versucht " "RKWard solche Fenster zu erkennen, zu übernehmen und eine Menüzeile zu ihnen " "hinzuzufügen. Allerdings wird dies derzeit in dieser Konfiguration von " "RKWard unter Mac OS X nicht unterstützt. Weitere Informationen finden Sie " "unter http://p.sf.net/rkward/mac ." #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Konnte R X11 Grafikfenster nicht einbinden" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Sie haben ein X11 Grafikfenster in R geöffnet. RKWard versucht solche " "Fenster zu erkennen, sie zu übernehmen und eine Menüleiste hinzuzufügen. In " "diesem Fall hat es RKWard allerdings nicht geschafft, zu erkennen, welches " "Fenster erzeugt wurde und kann es daher nicht einbetten.\n" "Wenn Sie das Fenster auf einer anderen Arbeitsfläche oder einem anderen X11 " "Display geöffnet haben, ist dieser Fehler zu erwarten. Vielleicht möchten " "Sie die Einstellung der Option (\"display\") anpassen.\n" "Falls Sie das geöffnete X11 Fenster jedoch auf dem selben Bildschirm sehen, " "wie diese Meldung, dann ist das ein Fall, in dem RKWard besser funktionieren " "sollte. In diesem Fall kontaktieren sie uns bitte unter rkward-" "devel@lists.sourceforge.net und teilen Sie uns Informationen zu Ihrem System " "mit, damit wir versuchen können, diese Fehler in kommenden Versionen von " "RKWard zu beheben." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Ein Fehler ist aufgetreten" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "Grafikgerätfenster" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" "Das aktuelle Fenster ist zu groß, um auf den Bildschirm zu passen. Wenn dies " "öfters geschieht, können Sie die Standardgröße des Grafikfensters unter " "Einstellungen->Konfiguriere RKWard->Bildschirmgrafiken anpassen." #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "Großes Fenster" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "Schließe Gerät (speichere Verlauf)" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "Schließe Gerätenummer %1" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Feste Größe angeben" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Breite" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Höhe" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Grafikfenster %1 aktivieren" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Inhalte von Grafikfenster %1 zur Ausgabe kopieren" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Inhalte von Grafikfenster %1 drucken" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "R Objekt spezifizieren" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "" "Geben Sie den Namen des R Objekts an, in das sie die Grafik gespeichert " "werden soll" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Inhalte des Grafikfensters %1 in Objekt '%2' speichern" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Grafikfenster %1 duplizieren" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "Lade nächsten Plot in Gerätenummer %1" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "Lade Plot vom Verlauf" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "Lade vorherigen Plot in Gerätenummer %1" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "Lade ersten Plot in Gerätenummer %1" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "Lade letzten Plot in Gerätenummer %1" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "Lade Plot %1 in Gerätenummer %2" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "Hänge diesen Plot dem Verlauf an (Gerätenummer %1)" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "Entferne aktuellen Plot vom Verlauf (Gerätenummer %1)" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" "Dies wird den Plot-Verlauf nicht nur für dieses, sondern für alle " "Gerätefenster löschen. Wenn Sie dies nicht beabsichtigen wählen Sie nun " "bitte Abbrechen." #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "Lösche Plot-Verlauf" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "Ploteigenschaften (Grafikfenster %1)" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Bildgröße folgt Fenstergröße" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Feste Größe 500x500 einstellen" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Feste Größe 1000x1000 einstellen" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Feste Größe 2000x2000 einstellen" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Feste Größe einstellen..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "Vorheriger Plot" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "Erster Plot" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "Nächster Plot" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "Letzter Plot" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "Gehe zu Plot" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "Diesen Plot anhängen" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "Entferne diesen Plot" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "Lösche Verlauf" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "Plot-Eigenschaften" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Aktivieren" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Zur Ausgabe kopieren" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Als R Objekt speichern..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Duplizieren" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "Die URL welche Sie versuchen zu öffnen ('%1') ist keine lokale Datei oder " "der Dateityp wird nicht von RKWard unterstützt. Möchten Sie die URL in der " "Standardanwendung öffnen?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "In Standardanwendung öffnen?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "\"%1\" konnte nicht geöffnet werden" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Konnte Kommandodatei nicht öffnen" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Sie beabsichtigen das Objekt \"%1\" zu ändern, welches sehr groß ist (%2 " "Felder). RKWard wurde nicht optimiert um sehr große Objekte im eigenen " "Editor zu handhaben. Dies wird viel Speicher benötigen und kann (abhängig " "von Ihrem System) zehr langsam sein. Für große Objekte wird empfohlen mit " "der Kommandozeile zu arbeiten und die Daten in kleinere Stücke aufzuteilen. " "Andererseits, falls Sie genügend Speicher haben oder die Daten recht einfach " "sind (numerisch Daten sind einfacher zu handhaben als Faktoren) mag die " "Editierung kein Problem sein. Sie können diese Warnung konfigurieren (oder " "komplett abschalten) unter Einstellungen -> Konfiguriere RKWard -> " "Allgemein.\n" "Objekt wirklich editieren?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Sie beabsichtigen ein sehr großes Objekt zu bearbeiten" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Speichere Arbeitsplatz Layout" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Workspacelayout wiederherstellen" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Fenster Links" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Fenster Rechts" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "R-Workspace-Browser" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "R Workspace" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Suche in Hilfe" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Bearbeiten" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Ansicht" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Umbenennen" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Kopiere zu neuem Symbol" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Kopiere zu .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Lösche" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Entladen Pakete" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Lade / Entlade Pakete" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Kopiere Objekt" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Gebe Sie zu kopierenden Namen ein" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Ein Objekt namens '%1' existiert bereits in der GlobalEnv. Erzeuge Kopie als " "'%2' stattdessen." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Name wird bereits benutzt" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Objekt umbenennen" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Gebe neuen Namen ein" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "nicht-Funktionen" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Zeige alle Umgebungen" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Zeige versteckte Objekte" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Editieren" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Datei" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Ansicht" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Ausführen" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Neu" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Importieren" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "&Exportieren" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Arbeitsbereich" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Fenster" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Aktiviere" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "&Einstellungen" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Hilfe" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Gerät" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "&Verlauf" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "&Fenster" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Werkzeuge Bewegen" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Stefan Rödiger, Jannis Vajen, ,Launchpad Contributions:,Stefan Rödiger, " ",Launchpad Contributions:, ,Launchpad Contributions:,Birk Diedenhofen,Daniel " "Winzen,Ghenrik,RKWard Team,Stefan Rödiger, ,Launchpad Contributions:,Birk " "Diedenhofen,Daniel Winzen,Eckhard Frank Sandig,Ghenrik,RKWard Team,Stefan " "Rödiger,Thomas Friedrichsmeier" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "stefan_roediger@gmx.de, " "jvajen@googlemail.com,,,,,,,,mail@birkdiedenhofen.de,d@winzen4.de,,rkward-" "tracker@lists.sourceforge.net,,,,mail@birkdiedenhofen.de,d@winzen4.de,sandigf" "@mailserver.tu-freiberg.de,,rkward-tracker@lists.sourceforge.net,," rkward-0.6.1/po/lt.po0000644000175000017500000033275212124345424013772 0ustar thomasthomas# translation of fr.po to français # translation of fr.po to German # translation of fr.po to # This file is distributed under the same license as the RKWard package. # Copyright (C) 2005 Thomas Friedrichsmeier. # # Mindaugas Baranauskas , 2010. msgid "" msgstr "" "Project-Id-Version: lt\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:01+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: lt\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Objekto „%1“ negalima atverti redaguoti. Arba jo nėra, arbaRKWard dar " "nepalaiko tokio tipo objektų redagavimo." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Nepavyksta keisti „%1“" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Įkeliama darbo erdvė..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Atveriant failą „%1“, įvyko klaida:\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Įkeliant darbo erdvę, įvyko klaida" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Laukiama, kol darbą baigs likusios R komandos. Norėdami išeiti tuoj pat, " "spauskite „Atšaukti“ (Dėmesio: taip galite prarasti savo duomenis)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Laukiama, kol R baigs bardą" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Nenurodytas joks failo vardas. Duomenys NEBUVO įrašyti. Vis tiek tęsti?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Nepavyko įrašyti failo „%1“. Ką norite daryti?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Nepavyko įrašyti" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Pabandykite įrašyti kitokiu failo vardu." #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Nepavyko įrašyti" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "Nepavyko įrašyti failo „%1“. Ar įrašyti kitokiu failo vardu?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Atlikta" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Rodomi failai" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Redaguoti failus" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "„%1“ paketas (kurį tikriausiai ką tik įkėlėte) yra juodajame sąraše, " "nurodančiame paketus, kurių struktūros informacija neturėtų būti įkelta. " "Praktiškai tai reiškia, kad šiame pakete esantys objektai nebus matomi " "objektų naršyklėje, nebus rodoma šiame pakete esančių objektų pavadinimų " "užbaigimo ar funkcijų argumentų užuominų.\n" "Paprastai paketai įtraukiami į juodąjį sąrašą tuomet, kai juose yra ypač " "didelis duomenų kiekis, o programa juos pernelyg ilgai įkelia. Norėdami " "išbraukti paketą iš juodojo sąrašo, eikite Nuostatos -> Konfigūruoti RKWard -" "> Darbo erdvė." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Juodojo sąrašo paketai" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Objektas „%1“ buvo pašalintas iš darbo aplinkos, arba pakeistas to " "objektotipas, bet jis vis dar atvertas ir redaguojamas. Ar atkurti objektą?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Atkurti objektą?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Tikrai pašalinti objektą „%1“? Objektas vis dar atvertas ir redaguojamas, " "bet būtų pašalintas ir iš redaktoriaus. Jis būtų pašalintas negrįžtamai." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Pašalinti objektą?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "Tikrai pašalinti objektą „%1“? Jis bus pašalintas negrįžtamai." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Vardas" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Etiketė" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Tipas" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Klasė" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "Pilnas kelias:" #: core/robject.cpp:122 msgid "Label:" msgstr "Žymė:" #: core/robject.cpp:123 msgid "Type:" msgstr "Tipas:" #: core/robject.cpp:126 msgid "Function" msgstr "Funkcija" #: core/robject.cpp:127 msgid "Usage: " msgstr "Naudojimas: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Duomenų sritis" #: core/robject.cpp:131 msgid "Array" msgstr "Masyvas" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matrica" #: core/robject.cpp:135 msgid "List" msgstr "Sąrašas" #: core/robject.cpp:137 msgid "Variable" msgstr "Kintamasis" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Duomenų tipas:" #: core/robject.cpp:140 msgid "Environment" msgstr "Aplinka" #: core/robject.cpp:145 msgid "Length: " msgstr "Ilgis: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensions : " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Klasė(s) :" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "Neiškelkite „%1“ paketo. Jo vis dar reikia RKWard programai. Jei " "tikrainorite iškelti, padarykite tai R konsolėje." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "Regis nebuvo įkeltas paketas %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "Nurodytas vardas arba netinkamas, arba jau yra. Pervadinta į %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Netinkamas vardas" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "" "Norėdami pridėti naujus stulpelius, tiesiog rašykite šiuose laukeliuose" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Norėdami pridėti naujas eilutes, tiesiog rašykite šiuose laukeliuose" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "# Naujas kintamasis #" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Formatas" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Lygiai" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Iškirpti pažymėtą sritį ir ją laikyti iškarpinėje" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Nukopijuoti pažymėtą sritį į iškarpinę" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Įdėti į lentelę" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Įdėti į pažymėtą sritį" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [tik skaitomas]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Naują kintamąjį įterpti kairėje" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Pašalinti šį kintamąjį" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Įterpti naują atvejį aukščiau (ties %1 eilute)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Pašalinti pažymėtas eilutes (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Pašalinti šią eilutę (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Įdedamas iškarpinės turinys..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Failo formatas: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Neaptikta jokių su „%1“ susijusių papildinių" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Visi failai" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Konfigūruoti paketus" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Vietiniai paketai" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Konfigūruoti saugyklas" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "neįmanoma rašyti į pasirinktą bibliotekų vietą" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Dirbti administratoriaus teisėmis" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Kantriai palaukite, kol bus įdiegti paketai" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Diegiami paketai" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "Diegimas nutrūko grąžindamas kodą %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Įdiegti paketai" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Pavadinimas" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Versija" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Vieta" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Įkelti" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Iškelti" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Įkelti paketai" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Paketo įkėlimo ar iškėlimo klaida. Daugiau informacijos pateikta žemiau." #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Paketų apdorojimo klaida" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Saugyklose nepavyksta rasti paketo, kuris reikalingas varikliui („%1“). " "Galbūt blogai įrašytas to paketo vardas. O gal reikia pridėti papildomų " "saugyklų nuspaudus mygtuką „Konfigūruoti saugyklas“." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Paketas nepasiekiamas" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Paketus įdiegti į:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Būsena" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Įdiegti" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Pašalinti" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Kontekstas:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Rodyti failų naršyklėje" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Pasirinkite bent vieną:" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Pasirinkite vieną:" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Ką norėtumėte daryti?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Pradėti dirbti tuščioje darbo erdvėje" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Pradėti dirbti su tuščia lentele" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Įkelti jau esamą darbo erdvę:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Visuomet taip pradėti darbą" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "Paleidus (ir įkėlus nurodytą darbo erdvę) įvertinti pateiktą R kodą." #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Derinimo pranešimų detalumo lygis (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Derintinų komponentų kaukė (žr. debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Derintuvė (derintuvės argumentus ir komandas rašykite tarp viengubų kabučių " "(''))" #: main.cpp:125 msgid "R workspace file to open" msgstr "R darbo erdvės failas atvėrimui" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "R statistikos kalbos grafinė naudotojo sąsaja" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Projekto vadovas / pagrindinis kūrėjas" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Daug papildinių ir pasiūlymų, rinkodara ir vertimai" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Pagalbininkai pagal abėcėlę" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Keletas naudingų patarimų ir aptarimų" #: main.cpp:135 msgid "Plugins and patches" msgstr "Papildiniai ir pataisos" #: main.cpp:136 msgid "New website" msgstr "Nauja svetainė" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "HP filtro papildinys, vertimas į ispanų kalbą" #: main.cpp:138 msgid "A cool icon" msgstr "Naujas simpatiškas ženkliukas" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "RKWard logotipas, daugybė pasiūlymų, pagalba parenkant formuluotes" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Keletas vertingų patarimų, užuominų ir pataisų" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Vertimas, pasiūlymai, papildiniai" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Daugybė patarimų, naudingų pasiūlymų ir pranešimai apie riktus" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Vertimas į vokiečių kalbą, pranešimai apie riktus" #: main.cpp:144 msgid "Some patches" msgstr "Kelios pataisos" #: main.cpp:145 msgid "patches and helpful comments" msgstr "pataisos ir naudingi patarimai" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Ir dar daug kitų žmonių paminėta rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Atleiskite, jei pamiršome jus įtraukti į sąrašą. jei norite būti įtraukti, " "kreipkitės į mus." #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Lygiuotė" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Numatytoji" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Kairioji" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Dešinioji" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Dešimtainė skiltis" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Numatytoji nuostata" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Pagal poreikį" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Fiksuotas tikslumas:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "„%1“ formatavimo parinktys" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Lygius galima priskirti tik nuosekliai didėjantiems natūraliesiems skaičiams " "nuo 1 (taigi kairiojo stulpelio negalima keisti). Norėdami pašalinti " "paskutinį lygį, tiesiog palikite jį tuščią." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "„%1“ lygių / reikšmių etiketės" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Failo pavadinimas" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Pridėti" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Aukštyn" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Žemyn" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Konfigūruoti numatytus" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Visos aplinkos" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Objektai su jų elementais" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Kintamieji" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Funkcijos" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Slepiami objektai" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Rodyti objektus" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Rodyti laukelius" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "Įvyko klaidų arba gavote įspėjimų! Žiūrėkite žemiau pateiktą " "informaciją" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Rezultatai" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Rezultatai:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Klaidos / įspėjimai" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Klaidos / įspėjimai:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Atšaukti" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Perrašyti? (objektas tokiu vardu jau yra)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Perrašyti?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Įdėti kaip..." #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Įdėjimo veiksena" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Viena eilutė" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Vektorius" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Laukelių skirtukas" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Tab" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Kablelis" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Viengubasis intervalas" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "Bet koks matomas tarpas" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Kita:" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Kabučių uždėjimas" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "Nedėti kabučių abipus reikšmių" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Automatiškai" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Ant visų kintamųjų dėti kabutes" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Transformacijos" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Apversti gulsčiai (viršų su apačia)" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Apversti stačiai (kairę su dešine)" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Sukeisti eilutes ir stulpelius" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "Jei reikia, įterpti „NA“" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Vykdyti veikiamą eilutę" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Vykdyti pažymėtą sritį" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Vykdyti viską" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Funkcijos paaiškinimas" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Nepavyksta perskaityti ir atverti failo." #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "XML failo nagrinėjimo klaida. Gautas klaidos pranešimas: „%1“ ties „%2“ " "linija, „%3“ stulpelyje. Žemiau turėtų būti pateiktos kitos klaidos" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Bandyti gauti netinkamo elemento dalis" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Tikėtasi vienintelio elemento „%1“, bet gauti %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "Nepateiktas atributas „%1“. Laikomasi „%2“" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "Neleistina atributo reikšmė. Leidžiama tik viena iš šių reikšmių: %1." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Neleistina atributo reikšmė. Leidžiamas tik sveikasis skaičius." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Neleistina atributo reikšmė. Leidžiamas tik realusis skaičius." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "Neleistina atributo reikšmė. Leidžiama tik reikšmė „%1“ arba „%2“." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "XML analizė „%1“ " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(be etiketės)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Bandėte iškviesti „%1“ papildinį, bet toks papildinys šiuo metu nėra " "žinomas. Tikriausiai reikia įkelti atitinkamą papildinių plano PluginMap " "failą (Nuostatos -> Konfigūruoti RKWard-> Papildiniai). O galbūt tas " "papildinys buvo pervadintas." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "Tokio papildinio nėra" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "Ne visos nuostatos gali būti pritaikomos. Tikriausiai kai kurių R objektų " "jau nebėra darbo erdvėje." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "Pritaikytos ne visos nuostatos" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "Šios nuostatos neleidžia automatiškai pateikti papildinių." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "Nepavyksta pateikti" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Pasirinkite vieną:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Nurodykite modelį" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Visas modelis" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Tik pagrindiniai efektai" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Savitas modelis:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Pagrindiniai efektai" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Lygis" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Termas" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Įveskite tekstą" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Įrašykite failo pavadinimą" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Pasirinkite" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Įrašyti į:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "manasis.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Įveskite reikšmę:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Peržiūrėti" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Peržiūra atnaujinama" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Peržiūra uždrausta" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Peržiūra atnaujinta" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Peržiūra (dar) negalima" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Nagrinėjant papildinio („%1“) aprašą, įvyko klaida. Žiūrėkite standartinį " "išvedimą (stdout)." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Nepavyksta sukurti papildinio" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Vykdyti" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Užverti" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Automatiškai užverti" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Pagalba" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Naudoti vediklį" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Kodas" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Vykdyti dar kartą" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Apdorojama. Palaukite..." #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Žemiau pateiktos komandos, kurios atitinka nurodytas nuostatas. Norėdami " "įvykdyti komandas, spauskite „Vykdyti“." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Toliau >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Atgal" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Naudoti dialogą" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Kintamasis:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Veikia" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Atšaukta" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Komandų dėklas" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Komandų grandinė" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Užverta" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Laukiama" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Komanda" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Aprašas" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "R paleidimas" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t-Įvyko netikėta klaida, kurios RKWard dar negali apdoroti. Tikėtina, " "kad nebeveiks tinkamai. Patikrinkite konfigūraciją.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "

Nepavyko paleisti R variklio. Klaidos:

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "R paleidimo klaida" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Lokalės keitimas" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "Tolesniam R variklio darbui reikia „%1“ paketo. Šis paketas dar neįdiegtas. " "Netrukus bus atverta paketų tvarkytuvė, kurioje galėsite rasti ir įdiegti " "reikiamą paketą." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Reikia paketo „%1“" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "R varikliui reikia informacijos" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "R variklis nulūžo" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "R variklis sustojo būsenoje %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "R variklis patyrė lemtingą klaidą:\n" "%1" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "R variklio pranešimas" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "R variklio klausimas" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "R konsolė" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Sintaksės klaida\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Pertraukti vykdomą komandą" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Kopijuoti pažodžiui" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Spausdinti konsolę" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

RKWard apskritai negali rasti jo šaltinių failų, arba randa tik tų failų " "senas versijas. Greičiausiai paskutinio diegimo metu ne visi failai buvo " "ten, kur turėjo būti. Dėl to gali kilti daugybė nesklandumų: gali trūkti " "paskirų savybių, bet gali neveikti ir visa funkcija.

Todėl dabar " "turėtumėte užverti RKWard ir ištaisyti klaidas. Pasinaudokite " "kompiliavimo patarimais, pateiktais http://p.sf.net/rkward/compiling tinklalapyje.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Nepavykęs diegimas" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Nustatomi papildiniai..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Reikia papildinių: papildinius galite tvarkyti nuėję per „Nuostatos-" ">Konfigūruoti RKWard“.\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Darbo erdvė" #: rkward.cpp:374 msgid "Files" msgstr "Failai" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Laukiančios užduotys" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Duomenų lentelė" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Sukurti naują tuščią duomenų lentelę ir atverti jos redagavimo langą" #: rkward.cpp:416 msgid "Script File" msgstr "Scenarijaus failas" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "Atverti R scenarijaus failą..." #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "Importuoti duomenis" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Importuoti duomenis iš įvairių failų formatų" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Atverti jau sukurtą dokumentą" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Atverti paskiausiai naudotą failą" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Įrašyti darbo erdvę" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Įrašyti dabartinį dokumentą" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Darbo erdvę įrašyti kaip..." #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Įrašyti dabartinį dokumentą kaip..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Baigti programos darbą" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "Užverti visus duomenų redaktorius" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Užverti visus atvertus duomenų redaktorius" #: rkward.cpp:483 msgid "Close All" msgstr "Užverti visus langus" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Atskirti langą" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Šiam rodiniui nėra veiksmų]" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Pasiruošęs." #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "Išeinama..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Baigiate darbą su RKWard. Ar įrašyti šią darbo erdvę?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Įrašyti darbo erdvę?" #: rkward.cpp:706 msgid "Don't quit" msgstr "Neišeiti" #: rkward.cpp:736 msgid "New dataset" msgstr "Nauja duomenų lentelė" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Įveskite naujos duomenų lentelės pavadinimą" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Atveriama darbo erdvė..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Ar įrašyti veikiamąją darbo erdvę?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Atverti scenarijaus failą(-us)" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Nepavadinta darbo erdvė]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "santrauka (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "spausdinimas (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "Objektas pašalintas!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Objekto peržiūra: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "" "Objektas buvo pakeistas. Tikriausiai norėtumėte nuspausti „Atnaujinti“" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Atnaujinti" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Gaunama informacija. Palaukite." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Norėdami gauti informaciją, spauskite „At“naujinti" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Pasiruošęs" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "QtScript variklis pranešė apie klaidą:\n" "%1" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Scenarijaus klaida" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Scenarijaus klaida: %1\n" "Dėklo pėdsakas:\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "Nepavyksta rasti failo „%1“ (kurio reikalauja „%2“). Patikrinkite,ar gerai " "įdiegėte." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Paruošti\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Skaičiuoti\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Pateikti rezultatus\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Nuostatos" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Žvaigždute (*) pažymėtos nuostatos įsigalios tik iš naujo paleidus RKWard" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Kodo užbaigimas" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Įgalinti kodo užbaigimą" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "Mažiausias rašmenų skaičius, kurio reikia kodo užbaigimui" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Scenarijų redaktorius" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Įkelti / įrašyti komandų istoriją" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Didžiausias komandų istorijos įrašų skaičius" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Neribotas" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Konsolėje leistinas didžiausias linijų / pastraipų skaičius" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Scenarijaus redaktoriaus komandas įvykdyti konsolėje" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Šias komandas taip pat pridėti į konsolės istoriją" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "Nepridėti" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Pridėti, tik kai viena eilutė" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Pridėti visas komandas" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Numatytuoju atveju, komandų istorija yra jautri kontekstui" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Konsolė" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Derinimo lygis" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Derinimo vėliavėlės" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Komandos laukimo laikas" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Pastaba: Derinimo išvedimas rašomas į %1" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Derinimas" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Aplankas, kur rkward gali saugoti failus (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Veiksmas, atliekamas paleidus (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Paklausti failo, kurį norėtų atverti" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Rodyti pasirinkimų dialogą (numatyta)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Paleidžiant rodyti RKWard pagalbą" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Darbo erdvės planas (t. y. atverti scenarijų, duomenų, pagalbos langai) gali " "būti įrašyti (ir įkelti) R darbo erdvėje arba nepriklausomai nuo R darbo " "erdvės.Kurį būdą renkatės?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Įrašyti/atstatyti su R darbo erdve, kai įrašoma/įkeliama R darbo erdvė" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Įrašyti/atstatyti nepriklausomai nuo R darbo erdvės (įrašyti RKWard sesijos " "pabaigoje, atstatyti sekančio paleidimo metu)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Neįrašyti/neatstatyti darbo erdvės" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Perspėti, kai redaguojamas objektas turi daugiau laukelių, nei nurodyta (0 " "reiškia, kad nebus įspėjama)" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Jokių ribų" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Polangių aktyvavimas pele" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Židinys aktyvuojamas spragtelėjimu" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Židinys seka pelę" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Bendra" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Kuriuos objektus rodyti numatytuoju atveju?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Rodyti slepiamus objektus" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Rodyti visas aplinkas" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Objektus rodyti su jų elementais" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Rodyti funkcijas" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Rodyti kintamuosius" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Kuriuos stulpelius rodyti numatytuoju atveju?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Etiketės laukelis" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Įvedimo laukelis" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Klasės laukelis" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Niekada neįkelti šių paketų struktūros:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Pridėti išimtį" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "Pridėkite paketo vardą, kurio struktūros nenorite įkelti" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Rezultatų lango parinktys" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "langą rodyti naujame išvedime" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "pakelti langą naujame išvedime" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Grafika" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Failo formatas" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "JPG kokybė" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Plotis:" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Aukštis:" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Kai kurie papildiniai turi tiek vediklio, tiek įprasto dialogo sąsają. Jei " "papildinys palaiko abi sąsajas, kuriai iš jų teikti pirmenybę?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Jei įmanoma, visada naudoti dialogus" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Jei įmanoma, naudoti numatytąją sąsają" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Jei įmanoma, visada naudoti vediklius" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "R sintaksės polangis (dialoguose)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Kodą rodyti numatytuoju atveju" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Numatytasis kodo polangio aukštis (taškais)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Pasirinkite .pluginmap failą(-us)" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Papildiniai" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Pasirinkite .pluginmap failą" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Toliau pateiktos nuostatos susijusios su konsole. Patartina jų be reikalo " "nekeisti." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Rodyti įspėjimus" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Nerodyti įspėjimų" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Įspėjimus rodyti vėliau (numatyta)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Įspėjimus rodyti iš karto" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Įspėjimus paverti klaidomis" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Dešimtainės trupmenos ženklas (tik spausdinimui)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Rezultatų plotis (rašmenimis)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Didžiausias elementų skaičius, spausdinant" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Didžiausias spausdinamų įspėjimų/klaidų ilgis" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Išlaikyti komentarus funkcijose" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "TIESA (numatyta)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "MELAS" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Išlaikyti komentarus paketuose" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "TIESA" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "MELAS (numatyta)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Didžiausias įdėtinių sąrašų skaičius" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Numatytasis dešimtainis tikslumas spausdinant ()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Patikrinti vektorių ribas (įspėti)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Redaktoriaus komandos" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "R variklis" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "CRAN parsiuntimo veidrodis (palikite tuščią, jei norite pasirinkti prieš pat " "siuntimąsi):" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Pasirinkti veidrodį" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "Papildoma paketų saugykla (iš kur parsisiųsti bibliotekas)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Archyvuoti parsiųstus paketus" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" "R bibliotekų vieta (vieta Jūsų kompiuteryje, kurioje laikomos įdiegtos " "bibliotekos)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Pastaba: be sąraše nurodytųjų vietų, papildomai visada naudojamos ir " "numatytosios reikšmės." #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Pridėti katalogą su R bibliotekomis" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Pridėti saugyklą" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Pridėtinos naujos saugyklos URL" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "R paketai" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Pasirinkite CRAN veidrodį" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Nuostatos bus taikomos tik naujoms komandoms. Visos ankstesnės komandos liks " "matomos arba nematomos." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "visada rodyti komandas" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "visada rodyti rezultatus" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "rodyti klaidas" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "rodyti / pakelti langą" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Naudotojo komandos" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Papildinių sukurtos komandos" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "RKWard komandos" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Sinchronizavimo komandos" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "Komandų žurnale didžiausias leistinas linijų / pastraipų skaičius" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Komandų žurnalas" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Prisegti prie pagrindinio lango" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Konfigūruoti R variklį" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Pristabdyti vykdymą" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Atšaukti pasirinktas komandas" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Kai kurios komandos, kurias bandote atšaukti, pažymėtos kaip „sinchr“ („S“ " "raidė ties tipu). Tokias komandas atšaukę, galite prarasti duomenis. Tokios " "komandos neatšauktos." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Kai kurios komandos nebuvo atšauktos" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Tęsti vykdymą" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Vykdyti bloką" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Atranką pažymėti kaip bloką" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Panaikinti bloko žymėjimą" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "Eiti į scenarijaus katalogą" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Iš veikiamojo katalogo pereiti į scenarijaus katalogą" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [pakeista]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Dokumentas „%1“ buvo pakeistas. Vis tiek užverti?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Failas neįrašytas" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Nepavadintas" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (aktyvus)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (nenaudojamas)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Neužbaigtas sakinys.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Sintaksės klaida.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "Vykdant komandą įvyko netikėta klaida.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Konfigūruoti" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Ieškoti:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Laukeliai:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Visi" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Visi, bet ne raktažodžių" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Raktažodžiai" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Paketas:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Skirti didžiąsias ir mažąsias raides" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Apytikslė atitiktis" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Ieškoti" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Ieškoti žinyne" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Ieškoti %1 pagalbos (HTML)" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Nieko nerasta apie „%1“. Galbūt neįdiegtas ar neįkeltas reikiamas paketas, o " "galbūt suklydote įvesdami komandą. Daugiau parinkčių rasite pagalboje, kurią " "atversite per meniu Pagalba -> Ieškoti R pagalbos." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Nerasta jokio žinyno" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Tema" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Paketas" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Išvalyti rezultatus" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Atnaujinti rezultatus" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "%1 rezultatai" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Spausdinti rezultatus" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Eksportuoti kaip HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Spausdinti puslapį" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Rodinį įrašytu HTML formatu" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

Nepavyko rasti RKWard rezultatų failo

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Puslapio nėra arba jis sugadintas" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Išvalyti rezultatus?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Be antraštės" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

Trūksta žinyno puslapio

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Tuoj pat vykdyti „%1“" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Santrauka" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Naudojimas" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Grafinės sąsajos nuostatos" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Nepavadintas grafinės sąsajos objektas" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Susijusios funkcijos ir puslapiai" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Techninės detalės" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

Šiame puslapyje:

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "R apie „%1“" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "NETIKUSI NUORODA" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Prisegti" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Kairioji juosta" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Dešinioji juosta" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Viršutinė juosta" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Apatinė juosta" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "R žinynas" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Ieškoti R pagalbos" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "RKWard pagalba" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Rodo R žinyno dalykinę rodyklę" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Rodyti / slėpti paieškos R žinyne langą" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Rodyti RKWard pagalbą" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Ankstesnis langas" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Tolesnis langas" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Aktyvuoti dokumento rodinį" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "&Rodyti rezultatus" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "Dėl techninių priežasčių sekančiame lange sparčiuosius klavišus leidžiama " "konfigūruoti tik šiuo metu aktyvioms RKWard dalims.\n" "\n" "Taigi, jei norite konfigūruoti sparčiuosius klavišus, naudojamus, pvz., " "scenarijų redaktoriuje, pirma turite atverti scenarijų redagavimo langą." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Pastaba" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "RKWard papildiniai" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "Dėl techninių priežasčių sekančiame lange įrankių juostos mygtukus leidžiama " "konfigūruoti tik šiuo metu aktyvioms RKWard dalims.\n" "\n" "Taigi, jei norite konfigūruoti įrankių juostos mygtukus, naudojamus, pvz., " "scenarijų redaktoriuje, pirma turite atverti scenarijų redagavimo langą." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Praneškite apie RKWard riktus" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Nepavyksta įtalpinti R X11 lango" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Sukūrėte naują X11 langą. Paprastai RKWard bando aptikti tokius langus, " "perimti jų valdymą ir prie juose pridėti meniu juostelę. Bet šį kartą RKWard " "programai nepavyko atpažinti, kuris langas, sukurtas, tad negali jame nieko " "įtalpinti.\n" " Jei langą sukūrėte kitame X11 ekrane ar vaizduoklyje, tuomet nieko " "nuostabaus. Tokiu atveju reikia pakeisti parinktis („ekranas“).\n" " Jei tą X11 langą matote tame pačiame lange kaip ir šį pranešimą, tuomet šią " "bėdą galėtų ištaisyti RKWard komanda. Tokiu atveju praneškite mums į rkward-" "deval@lists.sourceforge.net el. pašto dėžutę, nepamiršdami išsamiai aprašyti " "savo konfigūracijos, kad šią klaidą galėtume ištaisyti būsimoms RKWard " "versijoms." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Įvyko klaida" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Nurodykite konkretų dydį" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Plotis" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Aukštis" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Aktyvuoti vaizdą Nr. %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Kopijuoti turinį iš vaizdo Nr. %1 į išvedimą" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Spausdinti vaizdo Nr. %1 turinį" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Nurodykite R objektą" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "Nurodykite R objekto vardą, į kurį norite įrašyti diagramą" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Įrašyti vaizdo Nr. %1 turinį į objektą „%2“" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Dubliuoti vaizdą Nr. %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Braižymo sritis apima visą langą" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Nustatyti fiksuotą 500x500 dydį" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Nustatyti fiksuotą 1000x1000 dydį" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Nustatyti fiksuotą 2000x2000 dydį" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Nustatyti konkretų paveiksliuko dydį..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Aktyvuoti" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Kopijuoti į rezultatus" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Įrašyti kaip R objektą..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Dubliuoti" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "URL, kurį bandote atverti („%1“), nėra vietinis failas, arba RKWard " "nepalaiko to failo tipo. Bandyti URL atverti numatytoje programoje?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Atverti numatytoje programoje?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "Negalima atverti „%1“" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Nepavyksta atverti komandų failo" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Ketinate redaguoti objektą „%1“, kuris yra labai didelis (%2 laukų). RKWard " "nėra pritaikyta duomenų redaktoriuje apdoroti labai didelių objektų. Tuomet " "išnaudosima daug atminties ir, priklausomai nuo operacinės sistemos, darbas " "gali vykti labai lėtai. Todėl dirbti su dideliais objektais patariama " "komandinėje eilutėje arba prieš tai išskaidžius objektą į mažesnes dalis. " "Kita vertus, jei turite pakankamai atminties, o duomenys yra gana paprasti, " "(skaičius lengviau apdoroti nei vektorius), galbūt visai nebus nesklandumų. " "Šio pranešimo pasirodymą galite konfigūruoti (ar visiškai išjungti) eidami " "per Nuostatos -> Konfigūruoti RKWard -> Bendra.\n" "Tikrai redaguoti objektą?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Apie labai didelių objektų redagavimą" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Įrašyti darbo erdvę" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Atkurti darbo erdvę" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Kairysis langas" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Dešinysis langas" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "R pagalba" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Keisti" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Peržiūrėti" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Pervadinti" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Kopijuoti į naują simbolį" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Kopijuoti į .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Pašalinti" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Iškelti paketus" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Įkelti / iškelti paketus" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Kopijuoti objektą" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Įveskite būsimos objekto kopijos vardą" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Objektas vardu „%1“ jau yra prie GlobalEnv. Todėl sukurtos kopijos vardas " "bus „%2“." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Toks vardas jau yra" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Pervadinti objektą" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Įveskite naują vardą" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Ne funkcijos" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Rodyti visas aplinkas" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Rodyti slepiamus objektus" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Keisti" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Failas" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Rodinys" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Vykdyti" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nauja" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Importuoti" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Darbo erdvė" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Langai" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Aktyvuoti" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "&Nuostatos" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Pagalba" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "Į&renginys" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "&Langas" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Judėjimo įrankiai" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Mindaugas Baranauskas, ,Launchpad Contributions:,Mindaugas Baranauskas, " ",Launchpad Contributions:,Mindaugas Baranauskas, ,Launchpad " "Contributions:,Mantas Kriaučiūnas,Mindaugas Baranauskas,RKWard Team, " ",Launchpad Contributions:,Mantas Kriaučiūnas,Mindaugas Baranauskas,RKWard " "Team" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "embar@users.berlios.de,,,,,,,,,mantas@akl.lt,,rkward-" "tracker@lists.sourceforge.net,,,mantas@akl.lt,,rkward-" "tracker@lists.sourceforge.net" rkward-0.6.1/po/fr.po0000644000175000017500000040475212124345424013762 0ustar thomasthomas# This file is distributed under the same license as the RKWard package. # Copyright (C) 2005 Thomas Friedrichsmeier. # Pierre Ecochard , 2005. # Frederic Daniel Luc LEHOBEY , 2006. # Jacolin Yves , 2006, 2007. # SJR , 2007. # Milan Bouchet-Valat , 2011, 2012. # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:03+0000\n" "Last-Translator: Milan Bouchet-Valat \n" "Language-Team: français <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: fr\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "L'objet « %1 » ne peut pas être ouvert pour édition. Soit il n'existe pas, " "soit RKWard ne supporte pas encore l'édition de ce type d'objet." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Impossible d'éditer « %1 »" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Chargement de l'espace de travail..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Erreur lors de l'ouverture du fichier « %1 » :\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Erreur lors du chargement de l'espace de travail" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" "Aucun service fournissant une boîte de dialogue KDE pour l'impression de " "fichiers PostScript n'a été trouvé. Nous allons essayer de l'ouvrir avec une " "visionneuse de fichiers PostScript générique, si elle existe.

Vous " "pouvez installer 'Okular', ou configurer RKWard de manière à ce qu'il " "n'essaie pas d'imprimer en utilisant la boîte de dialogue d'impression de " "KDE." #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "Impossible d'ouvrir la boîte de dialogue d'impression de KDE" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "RKWard attend que les commandes R restantes se terminent. Pour quitter " "immédiatement, cliquez sur Annuler (ATTENTION : cela peut entraîner une " "perte de données)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Attente de l'arrêt de R" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" "%1|Fichiers d'espace de travail R (%1)\n" "*|Tous les fichiers" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Aucun nom de fichier n'a été fourni. Les données n'ont PAS été enregistrées. " "Voulez vous quitter quand même ?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "L'enregistrement du fichier '%1' a échoué. Que voulez vous faire ?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Échec de l'enregistrement" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Essayez d'enregistrer avec un nom de fichier différent" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Échec de l'enregistrement" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "La sauvegarde du fichier « %1 » a échoué. Voulez-vous essayer d'enregistrer " "avec un nom de fichier différent ?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Terminé" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" "Une commande lancée dans le moteur R désire que vous lisiez les fichiers " "suivants :\n" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Affichage de fichiers" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" "Une commande lancée dans le moteur R désire que vous éditiez un ou plusieurs " "fichiers. Veuillez lire ces fichiers, les éditer comme nécessaire, puis les " "enregistrer. Lorsque vous aurez fini, cliquez sur le bouton « Terminé » ou " "fermez cette fenêtre pour continuer.\n" "\n" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Édition de fichiers" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "Le paquet « %1 » (que vous venez probablement de charger) est actuellement " "sur la liste noire des paquets dont RKWard ne charge pas la structure. " "Concrètement, cela signifie que les objets appartenant à ce paquet " "n'apparaîtront pas dans le navigateur d'objets, et qu'ils ne bénéficieront " "ni de la complétion automatique des noms, ni de l'affichage des arguments " "des fonctions.\n" "Les paquets sur liste noire contiennent généralement de grandes quantités de " "données qui prendraient trop de temps à charger. Pour retirer un paquet de " "la liste noire, rendez-vous dans Paramètres->Configurer RKWard->Espace de " "travail." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Paquet sur liste noire" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "L'objet « %1 » a été supprimé de l'espace de travail ou a changé de " "type,mais il est en cours d'édition. Voulez-vous le restaurer ?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Restaurer l'objet ?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Voulez-vous vraiment supprimer l'objet « %1 » ? Cet objet est en cours " "édition, et sera donc également supprimé de l'éditeur. Il ne pourra plus " "être récupéré." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Supprimer l'objet ?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Voulez-vous vraiment supprimer l'objet « %1 » ? Il ne pourra plus être " "récupéré." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Nom" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Étiquette" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Type" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Classe" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "noms des lignes" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "nouvelle.ligne" #: core/robject.cpp:120 msgid "Full location:" msgstr "Emplacement :" #: core/robject.cpp:122 msgid "Label:" msgstr "Étiquette :" #: core/robject.cpp:123 msgid "Type:" msgstr "Type :" #: core/robject.cpp:126 msgid "Function" msgstr "Fonction" #: core/robject.cpp:127 msgid "Usage: " msgstr "Utilisation : " #: core/robject.cpp:129 msgid "Data frame" msgstr "Table de données" #: core/robject.cpp:131 msgid "Array" msgstr "Tableau" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matrice" #: core/robject.cpp:135 msgid "List" msgstr "Liste" #: core/robject.cpp:137 msgid "Variable" msgstr "Variable" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Type de données :" #: core/robject.cpp:140 msgid "Environment" msgstr "Environnement" #: core/robject.cpp:145 msgid "Length: " msgstr "Longueur : " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensions : " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Classe(s) :" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "Le paquet %1 n'a pas été déchargé car RKWard en a besoin. Si vous désirez " "réelleemnt le décharger, passez par la console R." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "Le paquet %1 ne semble pas avoir été chargé" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Le nom que vous avez choisi est déjà utilisé ou est incorrect. Renommé en %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Nom incorrect" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Entrez du texte ici pour ajouter de nouvelles colonnes" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Entrez du texte dans ces champs pour ajouter de nouvelles lignes" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Nouvelle variable#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Noms des lignes" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Format" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Niveaux" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Éditez ces champs pour renommer des variables" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "Une étiquette optionnelle décrivant chaque colonne" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Type de données." #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" "Double-cliquez sur ces champs pour configurer l'affichage des données." #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "Double-cliquez sur ces champs pour modifier les niveaux du facteur." #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Coupe la sélection et la place dans le presse-papiers" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Copie la sélection dans le presse-papiers" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "Colle le contenu du presse-papiers à la position actuelle" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Coller dans la table" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" "Colle le contenu du presse-papiers à la position actuelle, mais pas au-delà " "des limites de la table" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Coller dans la sélection" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" "Colle le contenu du presse-papiers à la position actuelle, mais pas au-delà " "des limites de la sélection actuelle" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" "L'éditeur « %1 » contient les colonnes en double suivantes. L'édition de " "cette table peut être risquée, et a été désactivée. Vous pouvez réactiver " "son édition si vous savez ce que vous faites, mais il est fortement " "conseillé de réparer d'abord la table et/ou de sauvegarder vos données." #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "Colonnes en double détectées" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [lecture seule]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Insérer une nouvelle variable à gauche" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Supprimer cette variable" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Insérer une nouvelle case au-dessus (à %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Supprimer les lignes sélectionnées (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Supprimer cette ligne (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Insertion du contenu du presse-papiers..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Format de fichier : " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Aucun greffon défini pour le contexte « %1 »" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Tous les fichiers" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Configurer les paquets" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Paquets locaux" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "Installer / Mettre à jour / Supprimer" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Configurer les dépôts" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "Paquet %1 sur %2" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" "Les paquets suivants, que vous avez marqués pour suppression, sont " "essentiels au fonctionnement de RKWard, et ne seront pas supprimés. Si vous " "êtes absolument sûr que vous voulez les supprimer, veuillez passer par la " "ligne de commande de R." #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "Certains paquets ne seront pas supprimés" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" "Vos permissions utilisateur actuelles ne permettent pas de supprimer les " "paquets suivants, qui seront donc laissés en l'état." #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "Permissions utilisateur insuffisantes" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" "Vos permissions utilisateur actuelles ne permettent pas de supprimer les " "paquets suivants. Voulez-vous les laisser en l'état, ou continuer avec les " "privilèges administrateur (votre mot de passe vous sera demandé) ?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" "Vous êtes sur le point de supprimer les paquets suivants. Êtes-vous sûr de " "vouloir continuer ?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "Suppression de paquets" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "Veuillez patienter pendant la suppression des paquets" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "Suppression des paquets" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Impossible d'écrire à l'emplacement choisi pour la bibliothèque" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" "

Le répertoire que vous avez choisi pour l'installation (%1) n'est pas " "accessible en écriture avec vos permissions utilisateur " "actuelles.

Désirez-vous procéder à l'installation dans %2 à la place ? " "Vous pouvez aussi cliquer sur « Annuler » et utiliser le bouton « Configurer " "les dépôts » pour choisir un répertoire différent.

" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" "

Une autre solution, si vous avez accès à un compte administrateur sur cet " "ordinateur, est de l'utiliser soit pour installer le ou les paquets en " "question, soit pour modifier les permissions de « %1 ». Désolé, le passage " "automatique en mode administrateur n'est pas encore pris en charge par " "RKWard sous Windows." #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "Installer vers %1" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" "

Une autre solution, si vous êtes l'administrateur de cet ordinateur, est " "d'installer les paquets en tant que root (le mot de passe administrateur " "vous sera demandé).

" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Devenir administrateur" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Veuillez patienter pendant l'installation des paquets" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Installation des paquets..." #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "" "Le processus d'installation s'est arrêté brutalement avec le code de sortie " "%1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Paquets installés" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Titre" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Version" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Emplacement" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Charger" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Décharger" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Paquets chargés" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Une erreur a eu lieu lors du chargement ou du déchargement du paquet. Lisez " "la sortie ci-dessous pour plus de détails." #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Erreur lors du traitement des paquets" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" "De nombreux paquets sont disponibles sur le CRAN (Comprehensive R Archive " "Network) et sur d'autres dépôts
(cliquez sur « Configurer les dépôts » " "pour ajouter plus de sources)." #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "Afficher seulement les paquets correspondant à :" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" "

Vous pouvez restreindre les paquets affichés dans la liste à ceux " "correspondant à une chaîne de filtrage.

Note : Pour rechercher " "des chaînes partielles, ajoutez '*' au début et/ou à la fin du filtre, par " "exemple '*stat*'.

" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "Sélectionner toutes les mises à jour" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Le paquet requis par le moteur (\"%1\") n'a pas été trouvé dans les dépôts " "de paquets. Peut-être que vous avez mal écrit le nom du paquet, ou que vous " "devez ajouter des dépôts additionnels à l'aide du bouton \"Configurer les " "dépôts\"." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Paquet indisponible" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Installer les paquets dans :" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" "

Veuillez patienter pendant la recherche des paquets installés et " "disponibles.

Note : Cette opération nécessite une " "connexion Internet fonctionnelle, et peut prendre du temps, en particulier " "si certains dépôts sont temporairement indisponibles.

" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "Recherche des paquets" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "État" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" "

Les paquets avec l'icône de RKWard dans cette colonne fournissent des " "améliorations à RKWard, le plus souvent sous la forme de boîtes de dialogue " "supplémentaires.

" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" "

Vous pouvez marquer des paquets pour installation ou suppression en " "cochant ou décochant les cases correspondantes de cette colonne.

" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "

Le nom du paquet.

" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" "

Un titre descriptif pour le paquet. Ce titre n'est actuellement pas " "disponible pour les paquets présents dans des dépôts distants.

" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "

Version installée et/ou disponible du paquet

" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "

Emplacement où le paquet est installé ou disponible

" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "Paquets pouvant être mis à jour" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" "Paquets pour lesquels une mise à jour est disponible. Ceci peut inclure des " "paquets qui ont simplement été construits à l'aide d'une version plus " "récente de R." #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "Nouveaux paquets" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "Paquets installés" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Installer" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Supprimer" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Contexte :" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "Fichier de récupération après un arrêt brutal détecté" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Afficher dans le gestionnaire de fichiers" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "Récupérer" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" "

Il semble que RKWard s'est arrêté brutalement récemment. Nous en sommes " "désolés ! Cependant, tout n'est pas perdu, et avec un peu de chance, vos " "données ont été enregistrées à temps.

" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" "

Un fichier de récupération d'espace de travail nommé %3 se trouve " "dans %2.

" msgstr[1] "" "

%1 fichiers de récupération d'espaces de travail se trouve dans %2 " "; le plus récent est %3.

" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" "

Voulez-vous ouvrir ce fichier maintenant ? Note : Cette question " "vous sera posée la prochaine fois que vous démarrerez RKWard, et ce jusqu'à " "ce que vous supprimiez ou renommiez ce fichier manuellement.

" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Sélectionnez un ou plusieurs éléments :" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Sélectionnez un élément :" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Que voulez-vous faire ?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Commencer avec un espace de travail vide" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Commencer avec une table vide" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "Charger l'espace de travail du répertoire courant" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" "Charger l'espace de travail du répertoire courant :\n" "%1" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Charger un espace de travail existant :" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Toujours effectuer cette action au démarrage" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" "Après le démarrage (et après le chargement de l'espace de travail spécifié, " "le cas échéant), évaluer le code R passé." #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Verbosité des messages de débogage (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Masque pour les composants à déboguer (voir debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Débogueur (entourez les arguments du débogueur par des guillemets simples " "(''), de même que la commande)" #: main.cpp:125 msgid "R workspace file to open" msgstr "Fichier d'espace de travail R à ouvrir" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Interface utilisateur pour le langage de statistiques R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Chef de projet et principal développeur" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "Développeur C++ entre 2004 et 2007" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" "De nombreux greffons, des suggestions, fonction d'historique des graphiques" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "De nombreux greffons, des suggestions, le paquet rkwarddev" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "De nombreux greffons, des suggestions, du marketing, des traductions" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Contributeurs, dans l'ordre alphabétique" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Plusieurs commentaires et discussions utiles" #: main.cpp:135 msgid "Plugins and patches" msgstr "Greffons et correctifs" #: main.cpp:136 msgid "New website" msgstr "Nouveau site Internet" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "Greffon pour le filtre HP, traduction en espagnol" #: main.cpp:138 msgid "A cool icon" msgstr "Une icône sympa" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "" "Logo de RKWard, de nombreuses suggestions, de l'aide à la formulation" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Plusieurs commentaires, conseils et correctifs utiles" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Traduction, suggestions, greffons" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "" "De nombreux commentaires, des suggestions utiles, et des rapports de bogue" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Traduction en allemand, rapports de bogues" #: main.cpp:144 msgid "Some patches" msgstr "Quelques correctifs" #: main.cpp:145 msgid "patches and helpful comments" msgstr "Des correctifs et des commentaires utiles" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Bien d'autres personnes sur rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Désolés si nous vous avons oublié. Veuillez nous contacter pour être ajouté" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Alignement" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Défaut" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Gauche" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Droite" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Nombre de décimales" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Par défaut" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Autant que nécessaire" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Précision fixe :" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Paramètres d'affichage pour « %1 »" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Les niveaux ne peuvent être associés qu'à des entiers consécutifs commençant " "par 1 (la colonne d'index est en lecture seule). Pour supprimer des niveaux " "à la fin de la liste, donnez leur simplement un nom vide." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Étiquettes des niveaux ou valeurs de « %1 »" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Nom de fichier" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Ajouter" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Monter" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Descendre" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" "

Note : Ce paramètre ne sera appliqué qu'après un redémarrage de " "RKWard.

" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Configurer" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Tous les environnements" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Objets avec descendants" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Variables" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Fonctions" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Objets cachés" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Afficher les objets cachés" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Afficher les champs" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "Des erreurs ou des avertissements ont été affichés ! Lisez le compte " "rendu ci-dessous." #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Sortie" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Sortie :" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Erreurs ou avertissements" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Erreurs ou avertissements :" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Annuler" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "Changer" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "Objet parent : %1" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "Sélectionnez un objet parent" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Écraser ? (Le nom de l'objet existe déjà)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Écraser ?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Collage spécial..." #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Mode de collage" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Une seule chaîne" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Vecteur" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Séparateur de champ" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Tabulation" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Virgule" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Un seul espace" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "N'importe quel espace" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Autre :" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Mise entre guillemets" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "Ne pas mettre les valeurs entre guillemets" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Automatique" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Mettre toutes les valeurs entre guillemets" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Transformations" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Inverser horizontalement" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Inverser verticalement" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Inverser lignes et colonnes" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "Insérer des NA lorsque nécessaire" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "Copier les lignes vers la sortie" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Lancer la ligne courante" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Lancer la sélection" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Lancer tout" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Aide sur la fonction" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Le fichier n'a pas pu être ouvert en lecture" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Erreur dans l'analyse du fichier XML. Le message d'erreur est : « %1 » ligne " "« %2 », colonne '%3'. Attendez-vous à ce que d'autres erreurs soient " "signalées plus bas" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Tentative de récupérer les descendants d'un élément invalide" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Exactement un élément « %1 » attendu mais %2 trouvés" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "Attribut « %1 » non fourni. « %2 » supposé" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "Valeur d'attribut interdite. Les valeurs possibles sont seulement parmi " "« %1 »." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "" "Valeur d'attribut interdite. Seuls les nombres entiers sont possibles." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Valeur d'attribut interdite. Seuls les nombres réels sont possibles." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Valeur d'attribut interdite. Les valeurs possibles sont seulement parmi " "« %1 »." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "Tentative de récupérer le contenu d'un élément invalide" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "Analyse du XML « %1 »' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(aucune étiquette)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Vous avez tenté de charger un greffon nommé « %1 », mais ce greffon est " "actuellement inconnu. Vous devez probablement charger le fichier .pluginmap " "correspondant (Configuration->Configurer RKWard->Greffons), ou le greffon a " "peut-être changé de nom." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "Aucun greffon portant ce nom" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" "Mauvais format de sérialisation lors du chargement du greffon « %1 ». " "Veuillez contacter l'équipe de RKWard (Aide->À propos de RKWard->Auteurs)." #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "Mauvais format de sérialisation" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "Tous les paramètres spécifiés n'ont pas pu être appliqués. Ce problème vient " "probablement du fait que certains objets R ne sont plus présents dans " "l'espace de travail courant." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "Tous les paramètres n'ont pas été appliqués" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "Le greffon n'a pas pu être envoyé automatiquement avec ces paramètres." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "Envoi impossible" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" "Cet objet a %1 dimension(s), alors que %2 dimension(s) sont attendues." #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" "Cet objet est de longueur %1, alors qu'une longueur minimale de %2 est " "attendue." #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" "Cet objet est de longueur %1, alors qu'une longueur maximale de %2 est " "attendue." #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "Cet objet ne semble pas appartenir à l'une des classes %1." #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" "Les données de cet objet sont de type %1, alors que le(s) type(s) " "autorisé(s) est (sont) %2." #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Sélectionnez un élément :" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Spécifiez un modèle" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Modèle complet" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Effets principaux seulement" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Modèle personnalisé :" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Effets principaux" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Niveau" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Terme" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Saisissez du texte" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "Ajouter une ligne ou un élement" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "Supprimer une ligne ou un élément" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Entrez un nom de fichier" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Sélection" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Enregistrer dans :" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "mes.donnees" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Entrez une valeur :" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Prévisualiser" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Prévisualisation en cours de mise à jour" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Prévisualisation désactivée" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Prévisualisation à jour" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Prévisualisation pas encore possible" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Une erreur s'est produite lors de l'analyse de la description de ce greffon " "(« %1 »). Référez-vous à la sortie standard (stdout) pour plus de détails." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Impossible de créer le greffon" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Lancer" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Fermer" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Fermeture automatique" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Aide" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Utiliser l'assistant" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Code" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Relancer" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Exécution en cours, veuillez patienter" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Vous pouvez voir ci-dessous les commandes correspondant aux paramètres " "spécifiés. Cliquez sur « Lancer » pour les exécuter." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Suivant >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Précédent" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Utiliser les boîtes de dialogue" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Variable :" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" "

Cet objet n'est pas autorisé à cet endroit pour les raisons " "suivantes :

" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "En cours" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Annulée" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Commandes passées" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Commandes en attente" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Fermée" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "En attente" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Commande" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Description" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "Démarrage de R" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t- Une erreur inconnue qui n'est pas encore prise en charge par RKWard " "s'est produite. RKWard ne fonctionnera sans doute pas correctement. Veuillez " "vérifier votre installation.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" "

Un problème a été rencontré lors du démarrage du moteur R. Les erreurs " "suivantes ont eu lieu :

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Erreur lors du démarrage de R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" "Une commande lancée dans le moteur R tente de modifier l'encodage des " "caractères. Même si RKWard prend en charge cette modification, et tentera de " "s'ajuster aux nouveaux paramètres linguistiques, cette opération peut " "provoquer des bogues complexes si des fenêtres de données sont actuellement " "ouvertes. Cette fonction n'a par ailleurs pas encore été très bien testée, " "et il peut être sage d'enregistrer votre espace de travail avant d'apliquer " "cette modification.\n" "Si un éditeur de données est ouvert, ou si vous avez des doutes, il est " "recommandé de les fermer d'abord (ceci sera probablement détecté " "automatiquement dans des versions futures de RKWard). Dans ce cas, veuillez " "choisir « Annuler » maintenant, fermer les fenêtres de données, enregistrer, " "et ré-essayer." #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Modification des paramètres linguistiques" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "Le moteur R a besoin du paquet « %1 » pour continuer. Ce paquet n'est pas " "installé. L'outil de gestion des paquets va être ouvert, pour que vous " "puissiez installer le paquet manquant." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Paquet requis : « %1 »" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "R demande des informations" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" "\n" "Le moteur R va être arrêté immédiatement. Cela signifie que vous ne pouvez " "plus utiliser de fonctions qui en dépendent : vous ne pouvez presque rien " "faire, même pas enregistrer l'espace de travail (mais si vous êtes chanceux, " "R l'a déjà fait). Vous pouvez néanmoins enregistrer les scripts ouverts, la " "sortie, ou copier des données à partir des éditeurs ouverts. Une fois que " "vous avez fini, quittez RKWard.\n" "Puisque cette situation ne devrait jamais arriver, merci d'envoyer un " "courriel à rkward-devel@lists.sourceforge.net, et de nous dire ce que vous " "essayiez de faire lorsque c'est arrivé. Désolé !" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "Le moteur R s'est arrêté brutalement" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" "Erreur lors de la négociation avec le processus du moteur R. Jeton « %1 » " "attendu, jeton « %2 » reçu." #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" "Versions incohérentes lors de la négociation avec le processus du moteur R. " "L'interface utilisateur utilise la version « %1 » alors que le moteur " "utilise la « %2 ».\n" "Veuillez corriger votre installation." #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "Le moteur R s'est arrêté avec l'état %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "Le moteur R a rencontré une erreur fatale :\n" "« %1 »" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Message du moteur R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "Question du moteur R" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- La bibliothèque R « rkward » n'a pas pu être chargée, ou pas dans la " "bonne version. Cela peut provoquer toutes sortes d'erreurs, depuis des " "fonctions manquantes jusqu'à une impossibilité complète de fonctionner. La " "dernière installation n'a probablement pas placé les fichiers au bon " "endroit. Cependant, dans certains cas, des restes d'une installation " "précédente qui n'a pas été supprimée proprement peuvent entraîner ce " "problème.

\t\t

Vous devriez quitter RKWard maintenant, et corriger " "votre installation. Pour de l'aide sur ce problème, rendez-vous sur http ://p.sf.net/rkward/compiling<" "/a>.

\n" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- Un problème a eu lieu lors de l'établissement de la communication " "avec R. Ceci indique très probablement une mauvaise installation.

\t\t" "

Vous devriez quitter RKWard maintenant, et corriger votre " "installation.Pour de l'aide sur ce problème, rendez-vous sur http ://p.sf.net/rkward/compiling<" "/a>.

\n" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" "Le composant « katepart » n'a pas pu être chargé. RKWard ne peut pas " "fonctionner sans katepart, et va donc s'arrêter immédiatement. Veuillez " "installer katepart et réessayer." #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "Composant « katepart » introuvable" #: rkconsole.cpp:122 msgid "R Console" msgstr "Console R" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Erreur de syntaxe\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" "*.Rhistory|Fichiers d'historique R (*.Rhistory)\n" "*|Tous les fichiers (*)" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "Choisissez un fichier d'historique des commandes à charger" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" "Choisissez un nom de fichier où enregistrer l'historique des commandes" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Interrompre l'exécution de la commande" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Copier la sélection littéralement" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "Copier seulement les commandes" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Imprimer la console" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "Importer l'historique des commandes..." #: rkconsole.cpp:921 msgid "Export command history..." msgstr "Exporter l'historique des commandes..." #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" "Vous avez configuré RKWard de manière à rediriger les commandes de l'éditeur " "de script vers la console R. Cependant, une autre commande est déjà active " "dans la console. Voulez-vous ajouter la nouvelle commande à celle-ci, ou " "réinitialiser d'abord la console ?" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "Console R occupée" #: rkconsole.cpp:940 msgid "Append" msgstr "Ajouter" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "Réinitialiser d'abord" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

RKWard n'a pas trouvé ses fichiers de ressources, ou seulement une " "ancienne version de ces fichiers. La dernière installation n'a probablement " "pas placé les fichiers au bon endroit. Cela peut provoquer toutes sortes " "d'erreurs, depuis des fonctions manquantes jusqu'à une impossibilité " "complète de fonctionner.

Vous devriez quitter RKWard maintenant, et " "corriger votre installation. Pour de l'aide sur ce problème, rendez-vous " "sur http ://p.sf.net/rkward/compiling<" "/a>.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Mauvaise installation" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" "Votre installation de KDE est configurée pour utiliser les boîtes de " "dialogue de sélection de fichiers standard de Windows. Celles-ci sont " "connues pour causer des problèmes, c'est pourquoi il est conseillé de les " "désactiver.\n" "Désactiver les boîtes de dialogue de sélection de fichiers standard dans " "RKWard ?" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "Problème potentiel dans votre configuration" #: rkward.cpp:221 msgid "Yes, disable" msgstr "Désactiver" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "Utiliser les boîtes de dialogue standard" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Paramétrage des greffons..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Des greffons sont nécessaires : vous pouvez les configurer à partir du menu " "Configuration->Configurer RKWard.\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" "De nouveaux lots de greffons (dont la liste est ci-dessous) ont été " "détectés, et ont été activés automatiquement. Pour désactiver des lots de " "greffons, utilisez Configuration->Configurer RKWard->Greffons." #: rkward.cpp:308 msgid "New plugins found" msgstr "Nouveaux greffons détectés" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "Copier les paramètres" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Espace de travail" #: rkward.cpp:374 msgid "Files" msgstr "Fichiers" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Travaux en attente" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "Trames du débogueur" #: rkward.cpp:395 msgid "Debugger Console" msgstr "Console de débogage" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Table de données" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Crée une table vide et l'ouvre pour édition" #: rkward.cpp:416 msgid "Script File" msgstr "Fichier script" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "Ouvrir un fichier script R" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "Ouvrir un fichier script R récent" #: rkward.cpp:430 msgid "Import Data" msgstr "Importer des données" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Importe des données depuis différents formats de fichiers" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "Ouvrir un espace de travail..." #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Ouvre un document existant" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "Ouvrir un espace de travail récent" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Ouvre un fichier utilisé récemment" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Enregistrer l'espace de travail" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Enregistre le document actuel" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Enregistrer l'espace de travail sous..." #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Enregistre le document actuel sous..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Quitte l'application" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "Interrompre toutes les commandes" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "Copier les commandes vers la sortie..." #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "Gérer les paquets R..." #: rkward.cpp:477 msgid "Close All Data" msgstr "Fermer tous les éditeurs de données" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Fermer tous les éditeurs de données ouverts" #: rkward.cpp:483 msgid "Close All" msgstr "Tout fermer" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Détacher" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Aucune action disponible pour la vue courante]" #: rkward.cpp:499 msgid "Open..." msgstr "Ouvrir..." #: rkward.cpp:509 msgid "Import" msgstr "Importer" #: rkward.cpp:512 msgid "Create..." msgstr "Créer..." #: rkward.cpp:519 msgid "Save..." msgstr "Enregistrer..." #: rkward.cpp:523 msgid "Export" msgstr "Exporter" #: rkward.cpp:616 msgid "Ready." msgstr "Prêt." #: rkward.cpp:620 msgid "Current working directory" msgstr "Répertoire de travail courant" #: rkward.cpp:698 msgid "Exiting..." msgstr "Fermeture..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Fermeture de RKWard : Voulez-vous enregistrer l'espace de travail ?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Enregistrer l'espace de travail ?" #: rkward.cpp:706 msgid "Don't quit" msgstr "Ne pas quitter" #: rkward.cpp:736 msgid "New dataset" msgstr "Nouvelle table de données" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Entrez le nom de la nouvelle table" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Ouverture de l'espace de travail..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "Sélectionnez un espace de travail à ouvrir..." #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Voulez-vous enregistrer l'espace de travail courant ?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "Le moteur R est occupé" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "Le moteur R est inactif." #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "Le moteur R est en cours d'initialisation." #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Ouvrir des fichiers script" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Espace de travail sans nom]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "summary (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "print (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "str (x)" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "L'objet a été supprimé !" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Visionneuse d'objets : %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "L'objet a été modifié : vous pouvez cliquer sur « Mettre à jour »." #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Mettre à jour" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Récupération des informations. Veuillez patienter." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Cliquez sur « Mettre à jour » pour récupérer les informations" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Prêt" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "Le moteur QtScript a signalé une erreur :\n" "%1" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Erreur de script" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Erreur de script : %1\n" "Backtrace :\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "Le fichier « %1 » (requis par « %2 ») est introuvable. Veuillez vérifier " "votre installation." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" "Une erreur a eu lieu lors de l'évaluation du code du script.\n" "Fichier : %1\n" "Ligne : %2\n" "Message : %3\n" "." #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" "erreur ('Le fichier « %1 » (requis par « %2 ») est introuvable. Veuillez " "vérifier votre installation.');\n" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Préparer\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Calculer\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Afficher le résultat\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Configuration" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Les paramètres marqués d'un (*) ne sont pris en compte qu'après un " "redémarrage de RKWard" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Auto-complètement du code" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Activer l'auto-complètement du code" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "" "Nombre minimal de caractères pour l'activation de l'auto-complètement" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "Délai d'activation de l'auto-complètement (en millisecondes)" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" "Afficher la documentation sur les arguments des fonctions dans des info-" "bulles" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "Sauvegarde automatique" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "Délai de sauvegarde automatique (en minutes)" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" "Conserver le fichier de sauvegarde automatique après un enregistrement manuel" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "Ouverture des fichiers script" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "Nombre de scripts dans la liste des fichiers récents (*)" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" "

Le nombre de fichiers récents à se rappeler (dans le menu Ouvrir un " "fichier script R récent).

" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "Filtres de fichier script R (séparés par des espaces)" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" "

Une liste de filtres (extensions de noms de fichiers) qui doivent être " "considérés comme des fichiers script R. L'effet le plus important est que " "les fichiers correspondant à l'un de ces filtres seront toujours affichés " "avec le surlignage de la syntaxe R.

Les filtres ne sont pas sensibles " "à la casse.

" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Éditeur de scripts" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Charger et enregistrer l'historique des commandes" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Longueur maximale de l'historique des commandes" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Illimité" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Nombre maximum de paragraphes/lignes à afficher dans la console" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Lancer les commandes de l'éditeur de script dans la console" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Ajouter ces commandes à l'historique de la console :" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "Ne pas ajouter" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Ajouter seulement les lignes seules" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Ajouter toutes les commandes" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "L'historique des commandes est sensible au contexte par défaut" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Console" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" "Ces paramètres sont uniquement destinés au débogage. Il est plus sûr " "de ne pas y toucher. Ces paramètres ne sont appliqués qu'à la session " "actuelle, et ne seront pas enregistrés." #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Niveau de débogage" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Drapeaux de débogage" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Délai d'expiration des commandes" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Note : La sortie de débogage est enregistrée dans « %1 »" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Déboguer" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Répertoire dans lequel RKWard doit enregistrer les fichiers (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Action au démarrage (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" "Charger le fichier « .RData » du répertoire courant, si présent (option « --" "restore » de R)" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Demander quel fichier ouvrir" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Afficher la fenêtre de sélection (par défaut)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Afficher l'aide de RKWard au démarrage" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "La disposition de l'environnement de travail (c'est-à-dire quelles fenêtres " "de scripts, de données et d'aide sont ouvertes) peut être enregistrée (et " "chargée) dans l'espace de travail R, ou indépendamment de l'espace de " "travail de R. Quelle solution préférez-vous ?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "Sauver et restaurer avec l'espace de travail R" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "Sauver et restaurer indépendamment de l'espace de travail de R" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "" "Ne pas enregistrer et restaurer la disposition de l'environnement de travail" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" "Lors du chargement de l'espace de travail, se placer dans le répertoire " "correspondant" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Avertir lors de l'édition d'objets contenant plus que ce nombre de champs (0 " "pour aucune limite) :" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Aucune limite" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Comportement du focus entre fenêtres :" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Un clic donne le focus" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Le focus suit la souris" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Général" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "Taille par défaut de la fenêtre" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "Largeur par défaut (en pouces)" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "Hauteur par défaut (en pouces)" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" "Utiliser les boîtes de dialogue de KDE pour les périphériques d'impression " "(si disponibles)" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "Historique du dispositif d'affichage" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "Nombre maximal de graphiques à enregistrer :" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "Taille maximale d'un graphique à enregistrer (en Ko) :" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "Graphiques" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Quels objets doivent être affichés par défaut ?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Afficher les objets cachés" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Afficher tous les environnements" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Afficher les objets avec descendants" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Afficher les fonctions" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Afficher les variables" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Quelles colonnes doivent être affichées par défaut ?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Étiquettes" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Type" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Classe" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Ne jamais récupérer la structure de ces paquets :" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Ajouter une règle d'exclusion" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" "Ajoutez le nom d'un paquet dont la structure ne doit pas être récupérée :" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "Copier les commandes vers la sortie" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "Commandes entrées dans la console" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "Commandes lancées par le menu « Exécution »" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "Commandes lancées par des boîtes de dialogue et des greffons" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "Copier la sortie des commandes" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Options de la fenêtre de sortie" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "Afficher la fenêtre à l'arrivée de nouvelles sorties" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "Mettre la fenêtre au premier plan à l'arrivée de nouvelles sorties" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Graphiques" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Format de fichier" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "JPG haute qualité" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Largeur :" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Hauteur :" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Dans le cas où un module externe est disponible en version boîte de dialogue " "et en version assistant, quelle interface préférez-vous ?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Toujours préférer les boîtes de dialogue" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Utiliser l'interface recommandée pour le module" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Toujours préférer les assistants" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "Affichage de la syntaxe R (dans les boîtes de dialogue)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Afficher le code par défaut" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Hauteur par défaut de la zone d'affichage du code (en pixels)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Sélection de fichiers .pluginmap" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Greffons" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Sélection du fichier .pluginmap" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Les paramètres suivants conditionnent le comportement de R en mode console. " "Il est généralement bon de ne pas les modifier." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Afficher les avertissements" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Supprimer les avertissements" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Imprimer les avertissement plus tard (par défaut)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Imprimer directement les avertissements" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Convertir les avertissements en erreurs" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Séparateur décimal (seulement pour l'affichage)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Largeur de la sortie (en caractères)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Nombre maximal d'éléments à afficher via print ()" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Longueur maximale des erreurs et avertissements affichés" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Conserver les commentaires présents dans les fonctions" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "TRUE (par défaut)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "FALSE" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Conserver les commentaires présents dans les paquets" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "TRUE" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "FALSE (par défaut)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Niveau maximal d'imbrication des expressions" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Précision décimale par défaut dans print ()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Vérifier les bornes des vecteurs (avertir)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Commande de l'éditeur" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "Commande du pager" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "Commandes (options) supplémentaires à lancer à chaque session" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "Moteur R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "Miroir CRAN pour le téléchargement (laissez vide pour choisir à chaque " "session) :" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Choisir un miroir" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" "Dépôts de paquets supplémentaires (d'où les bibliothèques sont téléchargées)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Archiver les paquets téléchargés" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" "Emplacement des bibliothèques R (où les bibliothèques sont installées " "localement)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Remarque : Les valeurs par défaut au démarrage seront toujours utilisées en " "plus des emplacements spécifiés dans cette liste" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Ajouter un répertoire de bibliothèque R" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Ajouter un dépôt" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Ajouter l'URL d'un nouveau dépôt" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "Paquets R" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Sélectionnez un miroir CRAN" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Pour l'instant, les paramètres ne s'appliquent qu'aux nouvelles commandes. " "Toutes les commandes précédentes conservent leur visibilité actuelle." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "toujours afficher les commandes" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "toujours afficher les résultats" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "afficher les erreurs" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "afficher/présenter la fenêtre" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Commandes utilisateur" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Commandes produites par les greffons" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Commandes de RKWard" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Commandes de synchronisation" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" "Nombre maximum de paragraphes ou de lignes à afficher dans le journal des " "commandes" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Journal des commandes" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Attacher à la fenêtre principale" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Configurer le moteur R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Suspendre l'exécution" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Annuler les commandes sélectionnées" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Certaines des commandes que vous essayiez d'annuler sont marquées comme " "« sync » (lettre « S » dans la colonne de type). Annuler de telles commandes " "pourrait conduire à une perte de données. Ces commandes n'ont PAS été " "annulées." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Certaines commandes n'ont pas été annulées" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Reprendre l'exécution" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "Appels actifs" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "Hors contexte de débogage" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" "Appel courant : %1
Environnement : %2
Objets " "locaux : %3" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "Éditeur de scripts" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "Insérer un retour à la ligne et lancer" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Lancer un bloc" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Marquer la sélection comme un bloc" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Annuler le marquage d'un bloc" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "Se placer dans le répertoire du script" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Fait du répertoire du script le répertoire de travail" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "Enregistrer le script" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "Enregistrer le script sous..." #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [modifié]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Le document « %1 » a été modifié. Voulez-vous le fermer quand même ?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Fichier non enregistré" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" "Une erreur s'est produite lors de l'enregistrement automatique du fichier " "script « %1 » :" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Sans nom" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (actif)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (inactif)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Commande incomplète.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Erreur de syntaxe.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "" "Une erreur inconnue s'est produite pendant l'exécution de la commande.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Configurer" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "Suivant" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "Sortir d'un niveau" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" "

Continue jusqu'à ce que la fonction appelante de cette fonction soit " "atteinte (à moins qu'une autre instruction de débogage ne soit atteinte " "avant).

Note : Dans certains cas, la fonction appelante ne sera " "jamais atteinte, parce que l'appel en était la dernière étape. Dans ce cas, " "cette action est identique à « Continuer ».

" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "Continuer" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" "Cette fenêtre ne peut être fermée tant qu'un débogueur est actif. Si vous " "n'avez aucune idée de ce que cela signifie, et que vous voulez sortir, " "cliquez sur le bouton « Annuler » sur la droite de cette fenêtre." #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Rechercher :" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Champs :" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Tout" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Tout sauf les mots-clés" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Mots-clés" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Paquet :" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Respecter la casse" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Recherche approximative" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Rechercher" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Recherche dans l'aide" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Rechercher de l'aide HTML sur %1" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "Tous les paquets installés" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "Tous les paquets chargés" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Aucune aide sur « %1 » n'a été trouvée. Peut-être que le paquet " "correspondant n'est pas installé ou chargé, ou que vous avez mal entré la " "commande. Essayez d'utiliser la fonction Aide->Rechercher dans l'aide de R " "pour plus d'options." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Aucune aide trouvée" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Sujet" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Paquet" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "Efface&r la sortie" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "Ac&tualiser la sortie" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "Sortie %1" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Imprimer la sortie" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Exporter la page en HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "Fenêtre de sortie" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Imprimer la page" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Enregistrer la sortie en HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

Le fichier de sortie RKWard n'a pas été trouvé

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "La page n'existe pas ou est invalide" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Effacer la sortie ?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Pas de titre" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

Page d'aide manquante

\n" "

La page d'aide de ce composant n'a pas encore été écrite (ou est " "invalide). Vous pouvez contribuer à l'écrire.

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Utiliser %1 tout de suite" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Description" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Utilisation" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Paramètres disponibles dans l'interface" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Élément d'interface sans nom" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Fonctions et pages connexes" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Détails techniques" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

Sur cette page :

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "Référence de R sur « %1 »" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "RÉFÉRENCE BRISÉE" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "Aide sur %1" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "Configurer %1" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Attacher" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "Position" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Panneau de gauche" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Panneau de droite" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Panneau supérieur" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Panneau inférieur" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "Non visible dans les panneaux" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Aide de R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Rechercher dans l'aide de R" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Aide de RKWard" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Affiche l'index de l'aide de R" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Affiche ou présente la fenêtre de recherche dans l'aide de R" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Afficher l'aide de RKWard" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Fenêtre précédente" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Fenêtre suivante" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "Afficher/masquer %1" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Activer la vue des documents" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "&Afficher la sortie" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "Pour des raisons techniques, la boîte de dialogue qui suit vous permet " "seulement de configurer les raccourcis clavier des composants de RKWard qui " "sont actuellement actifs.\n" "\n" "Par conséquent, si vous désirez par exemple configurer les raccourcis de " "l'éditeur de scripts, vous devez ouvrir une fenêtre de l'éditeur de scripts " "et l'activer." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Note" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "Greffons RKWard" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "Pour des raisons techniques, la boîte de dialogue qui suit vous permet " "seulement de configurer les barres d'outils des composants de RKWard qui " "sont actuellement actifs.\n" "\n" "Par conséquent, si vous désirez par exemple configurer les boutons de la " "barre d'outils de l'éditeur de scripts, vous devez ouvrir une fenêtre de " "l'éditeur de scripts et l'activer." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "---Description du problème---\n" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" "Veuillez fournir une description rapide du problème :\n" "### Merci de compléter ###\n" "\n" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Qu'avez vous fait (en détail) juste avant de rencontrer ce problème ?\n" "### Merci de compléter ###\n" "\n" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" "Lorsque vous tentez de répéter les étapes décrites ci-dessus, le problème se " "reproduit-t-il (jamais, parfois, toujours) ?\n" "### Merci de compléter ###\n" "\n" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" "Le cas échéant : Lorsque vous faites la même chose dans une session R hors " "de RKWard, observez-vous le même problème ?\n" "### Merci de compléter ###\n" "\n" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Y a-t-il une information supplémentaire qui pourrait nous aider à identifier " "le problème ? En particulier, si cela semble utile, pouvez vous fournir un " "exemple de données ou de code (simplifiés) permettant de reproduire le " "problème ?\n" "### Veuillez remplir ###\n" "\n" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" "Veuillez patienter pendant la collecte d'informations concernant votre " "installation.\n" "Si le moteur R s'est arrêté brutalement ou a cessé de répondre, vous pouvez " "cliquer sur « Annuler » pour sauter cette étape." #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "Collecte d'information sur l'installation" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Signaler des bogues de RKWard" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" "

Où dois-je signaler des bogues ou des suggestions ?

Veuillez " "soumettre vos rapports de bogues et suggestions sur %1 ou " "d'envoyer un courriel à %2.

Quelles " "informations dois-je fournir ?

Merci de copier les informations " "affichées ci-dessous, et de compléter les réponses aux questions.

" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" "Vous avez créé une nouvelle fenêtre de graphiques depuis R. Normalement, R " "essaie de détecter de telles fenêtres pour en prendre le contrôle, et leur " "ajouter une barre de menus. Cependant, cela ne fonctionne actuellement pas " "dans cette version de RKWard sous Mac OS X. Rendez-vous sur " "http://p.sf.net/rkward/mac pour plus d'informations." #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Impossible de contrôler la fenêtre X11 de R" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Vous avez créé une nouvelle fenêtre X11 dans R. Normalement, RKWard essaie " "de détecter ces fenêtres afin de les contrôler et de leur ajouter une barre " "de menu. Cependant, dans le cas présent, RKWard n'a pas réussi à détecter " "quelle fenêtre a été créée et ne peut donc pas l'utiliser.\n" "Si vous avez créé la fenêtre sur un écran ou affichage X11 différent, ceci " "est normal : il peut être utile de modifier la valeur de " "options(\"display\").\n" "Si vous voyez la fenêtre X11 sur le même écran que ce message, alors RKWard " "peut mieux faire. Dans ce cas, veuillez nous contacter à l'adresse rkward-" "devel@lists.sourceforge.net avec les détails de votre configuration, afin " "que nous tentions de corriger cela dans une prochaine version de RKWard." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Une erreur s'est produite" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "Fenêtre du dispositif graphique" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" "La fenêtre actuelle semble trop grande pour tenir à l'écran. Si cela se " "produit souvent, vous pouvez ajuster la taille de la fenêtre des graphiques " "dans Configuration->Configurer RKWard->Graphiques." #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "Grande fenêtre" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "Fermeture du dispositif (conservation de l'historique)" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "Fermeture du dispositif n°%1" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Spécifier une taille fixe" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Largeur" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Hauteur" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Activer le dispositif graphique n°%1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Copier le contenu du dispositif graphique n°%1 dans la sortie" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Imprimer le contenu du dispositif graphique n°%1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Spécifiez un objet R" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "" "Entrez le nom de l'objet R dans lequel vous voulez enregistrer le graphique" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "" "Enregistrer le contenu du dispositif graphique n°%1 dans l'objet « %2 »" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Dupliquer le dispositif graphique n°%1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "Charger le graphique suivant dans le dispositif n°%1" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "Chargement du graphique à partir de l'historique" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "Charger le graphique précédent dans le dispositif n°%1" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "Charger le premier graphique dans le dispositif n°%1" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "Charger le dernier graphique dans le dispositif n°%1" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "Charger le graphique %1 dans le dispositif n°%2" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "Ajouter ce graphique à l'historique (dispositif n°%1" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "Supprimer ce graphique de l'historique (dispositif n°%1" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" "Ceci effacera l'historique des graphiques de tous les dispositifs, pas " "seulement celui-ci. Si ce n'est pas votre intention, cliquez sur « Annuler » " "ci-dessous." #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "Effacer l'historique des graphiques" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "Propriétés des graphiques (dispositif n°%1)" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "La surface de dessin suit la taille de la fenêtre" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Fixer la taille à 500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Fixer la taille à 1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Fixer la taille à 2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Fixer une autre taille..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "Précédent" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "Premier" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "Suivant" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "Dernier" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "Aller à un graphique" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "Ajouter ce graphique" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "Supprimer ce graphique" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "Effacer l'historique" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "Propriétés du graphique" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Activer" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Copier dans la sortie" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Enregistrer dans un objet R..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Dupliquer" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "L'URL que vous tentez d'ouvrir (« %1 ») ne correspond pas à un fichier " "local, ou le type de fichier n'est pas pris en charge par RKWard. Voulez-" "vous l'ouvrir avec l'application par défaut ?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Ouvrir dans l'application par défaut ?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "Impossible d'ouvrir « %1 »" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Impossible d'ouvrir le fichier de commandes" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Vous êtes sur le point d'éditer l'objet « %1 », qui est de très grande " "taille (%2 champs). RKWard n'est pas optimisé pour manipuler de gros objets " "dans son éditeur de données incorporé. Cette opération va utiliser beaucoup " "de mémoire, et - selon votre système - peut être très lente. Il est " "recommandé d'éditer les gros objets en utilisant la ligne de commande, ou de " "les découper en morceaux plus petits. Néanmoins, si vous avez assez de " "mémoire, ou que les données sont assez simples (les données numériques sont " "plus faciles à manipuler que les facteurs), l'édition ne sera peut-être pas " "du tout un problème. Vous pouvez configurer cet avertissement (ou le " "désactiver complètement) à partir de Configuration->Configurer RKWard-" ">Général.\n" "Voulez-vous vraiment éditer cet objet ?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Sur le point d'éditer un gros objet" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Enregistrer la disposition de l'environnement de travail" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Restaurer la disposition de l'environnement de travail" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Fenêtre de gauche" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Fenêtre de droite" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "Navigateur de l'espace de travail R" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "Espace de travail R" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Rechercher dans l'aide" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Éditer" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Afficher" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Renommer" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Copier dans un nouvel objet" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Copier dans .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Supprimer" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Décharger le paquet" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Charger ou décharger des paquets" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Copier l'objet" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Entrez le nom de la copie de l'objet" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Un objet nommé « %1 » existe déjà dans .GlobalEnv. Une copie nommée « %2 » a " "été créée à la place." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Nom déjà utilisé" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Renommer l'objet" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Entrer un nouveau nom" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Autres que fonctions" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Afficher tous les environnements" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Afficher les objets cachés" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "É&dition" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Fichier" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Affichage" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "E&xécution" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nouveau" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Importer" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "Ex&porter" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Espace de travail" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "Fe&nêtre" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "Ac&tiver" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "&Configuration" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "Aid&e" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Dispositif" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "&Historique" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "Fe&nêtres" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Outils" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Milan Bouchet-Valat, ,Launchpad Contributions:,Hélion du Mas des " "Bourboux,Jacolin Yves,Milan Bouchet-Valat,RKWard Team" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "nalimilan@club.fr,,,helion331990@gmail.com,,nalimilan@club.fr,rkward-" "tracker@lists.sourceforge.net" rkward-0.6.1/po/es.po0000644000175000017500000036144512124345424013763 0ustar thomasthomas# translation of rkward.po to español # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Mvillarino , 2005. # Mvillarino , 2006. # Germán Márquez Mejía , 2008,2009,2010. msgid "" msgstr "" "Project-Id-Version: rkward\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-11-30 20:01+0000\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: es\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "El objeto «%1» no pudo abrirse para edición. No existe o RKWard no soporta " "todavía la edición de este tipo de objeto." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "No se puede editar «%1»" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Cargando espacio de trabajo..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Ha ocurrido un error al abrir el archivo «%1»:\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Error al cargar espacio de trabajo" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" "No se ha encontrado ningún servicio que ofrezca un cuadro de diálogo de KDE " "para ficheros postscript. Se intentará abrir un visor genérico de ficheros " "en formato postscript. \r\n" "Considere la posibilidad de instalar 'okular', o configure RKWard para que " "no imprima mediante el cuadro de diálogo de impresión de KDE." #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "La ventana de dialogo KDE para imprimir no se puede abrir" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "En espera de que terminen los comandos restantes de R. Para salir " "inmediatamente pulse Cancelar (AVISO: esto puede causar pérdida de datos)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Esperando a que R termine" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "No se ha indicado un nombre de archivo. Sus datos NO han sido guardados. " "¿Aun así desea continuar?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Fallo en la grabación del archivo «%1». ¿Qué desea hacer?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Fallo al guardar" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Intentar guardar con otro nombre" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Fallo al guardar archivo" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Fallo en la grabación del archivo «%1». ¿Desea intentarlo guardando con otro " "nombre?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Hecho" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "Un comando del motor R desea que vea los siguientes archivos:\n" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Mostrando archivo(s)" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Editar archivo(s)" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "El paquete «%1» (probablemente lo acaba de cargar) está en lista negra para " "obtener información de su estructura. En la práctica, esto significa que los " "objetos que contiene no aparecerán en el navegador de objetos, y que no " "habrá completado de nombres o ayuda con los argumentos de funciones para los " "objetos en este paquete.\n" "Comúnmente, los paquetes están en lista negra si contienen una gran cantidad " "de datos que tomaría mucho tiempo cargar. Para sacar el paquete de esta " "lista visite Preferencias->Configurar RKWard->Espacio de trabajo." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Paquete en lista negra" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "El objeto «%1» ha sido eliminado del espacio de trabajo o se cambió su tipo, " "pero está abierto para edición. ¿Desea restaurarlo?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "¿Restaurar objeto?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "¿Realmente desea eliminar el objeto «%1»? Está abierto para edición. También " "se quitará del editor. Esta operación no se puede deshacer." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "¿Eliminar objeto?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "¿Realmente desea eliminar el objeto «%1»? Esta operación no se puede " "deshacer." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Nombre" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Etiqueta" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Tipo" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Clase" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "nombres de fila" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "nueva.fila" #: core/robject.cpp:120 msgid "Full location:" msgstr "Ubicación completa:" #: core/robject.cpp:122 msgid "Label:" msgstr "Etiqueta:" #: core/robject.cpp:123 msgid "Type:" msgstr "Tipo:" #: core/robject.cpp:126 msgid "Function" msgstr "Función" #: core/robject.cpp:127 msgid "Usage: " msgstr "Uso: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Marco de datos" #: core/robject.cpp:131 msgid "Array" msgstr "Arreglo" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matriz" #: core/robject.cpp:135 msgid "List" msgstr "Lista" #: core/robject.cpp:137 msgid "Variable" msgstr "Variable" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Tipo de datos:" #: core/robject.cpp:140 msgid "Environment" msgstr "Entorno" #: core/robject.cpp:145 msgid "Length: " msgstr "Longitud: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensiones: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Clase(s):" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "No se desactivó el paquete %1. Se necesita en RKWard. Si realmente desea " "desactivarlo, hágalo en la consola de R." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "Parece que el paquete %1 no se ha cargado" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "El nombre que especificó está siendo utilizado o no es válido. Renombrado " "como %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Nombre no válido" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Digite en estos campos para agregar nuevas columnas" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Digite en estos campos para agregar nuevas filas" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Nueva variable#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Nombres de fila" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Formato" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Niveles" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Edite estos campos para renombrar variables." #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "Una etiqueta descriptiva para cada columna (opcional)." #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Tipo de datos." #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" "Doble clic sobre estos campos para ajustar la presentación de los datos." #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "Doble clic sobre estos campos para editar niveles de factor." #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Corta la sección actual y la pone en el portapapeles" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Copia la sección actual al portapapeles" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "Pega el contenido del portapapeles en la posición actual" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Pegar dentro de la tabla" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" "Pega el contenido del portapapeles en la posición actual sin traspasar los " "límites de la tabla" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Pegar dentro de la selección" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" "Pega el contenido del portapapeles en la posición actual sin traspasar los " "límites de la selección activa" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" "El editor «%1» contiene las siguientes columnas duplicadas.Editar esta tabla " "puede no ser seguro y, por lo tanto, se ha deshabilitado. Puede reactivar la " "edición si sabe lo que está haciendo, pero se le recomienda con insistencia " "que primero repare la tabla o respalde sus datos." #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "Se detectaron columnas duplicadas" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [sólo lectura]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Insertar nueva variable a la izquierda" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Borrar esta variable" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Insertar nuevo caso por encima (en %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Borrar las filas marcadas (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Borrar esta fila (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Insertando el contenido del portapapeles..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Formato de archivo: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "No hay complementos definidos para el contexto «%1»" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Todos los archivos" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Configurar paquetes" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Paquetes locales" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "Instalar / Actualizar / Desinstalar" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Configurar repositorios" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "Paquete %1 en %2" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" "Los siguientes paquetes, que han sido seleccionados para su desinstalación, " "son esenciales para el funcionamiento de RKward, y por tanto no serán " "desinstalados. Si usted esta seguro de querer desinstalar estos paquetes, " "por favor hagalo mediante la consola de R" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "Ciertos paquetes no fueron removidos" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" "Sus permisos de usuario no le permiten desinstalar los siguientes paquetes. " "Esta operación será omitida." #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "Los permisos del usuario son insuficientes" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" "Sus permisos de usuario actuales no le permiten desinstalar los siguiente " "paquetes. ¿Quiere omitirlos, o quiere proceder con privilegios de " "administrador (se le pedirá la contraseña)?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" "Está a punto de desinstalar los siguientes paquetes. ¿Está seguro de que " "quiere proceder?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "A punto de desinstalar paquetes" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "Por favor espere mientras se eliminan los paquetes seleccionados" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Sin permisos de escritura en la ubicación seleccionada" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "Instalar en %1" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Volverse root" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Por favor espere mientras se instalan los paquetes." #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Instalando paquetes" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "El proceso de instalación terminó con código de salida %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Paquetes instalados" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Título" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Versión" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Ubicación" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Cargar" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Desactivar" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Paquetes cargados" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Ha ocurrido un error al intentar cargar/desactivar paquetes. Mire el reporte " "más abajo para detalles" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Error en la gestión de paquetes" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "El paquete solicitado por el motor («%1») no se encontró en los " "repositorios. Tal vez hay un error en el nombre del paquete o debe añadir " "repositorios adicionales por medio del botón «Configurar repositorios»." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Paquete no disponible" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Instalar paquetes en:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Estado" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "Paquetes que se pueden actualizar" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Instalar" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Quitar" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Contexto:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "Se detectó un archivo de recuperación" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Mostrar en el navegador de archivos" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "Recuperar" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" "

Parece que RKWard ha fallado recientemente. ¡Lo sentimos mucho! Sin " "embargo, no todo está perdido y, con un poco de suerte, sus datos se han " "guardado a tiempo.

" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" "

Hay un archivo de recuperación del espacio de trabajo en %2 como " "%3.

" msgstr[1] "" "

Hay %1 archivos de recuperación del espacio de trabajo en %2, de " "los cuales, el más reciente es %3.

" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" "

¿Desea abrir este archivo ahora? Nota: se le solicitará de nuevo " "la próxima vez que inicie RKWard, hasta que elimine o renombre manualmente " "el archivo.

" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Seleccionar uno o más:" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Seleccionar uno:" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "¿Qué le gustaría hacer?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Comenzar con un espacio de trabajo vacío" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Comenzar con una tabla vacía" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "Cargar espacio de trabajo desde el directorio actual" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" "Cargar espacio de trabajo desde el directorio actual:\n" "%1" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Cargar un espacio de trabajo existente:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Siempre hacer esto al arrancar" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" "Después de arrancar (y luego de cargar el espacio de trabajo especificado, " "de ser aplicable), evaluar el código R dado." #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Nivel de información de los mensajes de depuración (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Máscara para los componentes a depurar (mirar en debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Depurador (encierre los argumentos para el depurador en comillas sencillas " "('') junto con el comando)" #: main.cpp:125 msgid "R workspace file to open" msgstr "Espacio de trabajo para abrir" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Interfaz gráfica para el lenguaje estadístico R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Líder del proyecto / Desarrollador en jefe" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Varios complementos, sugerencias, mercadeo, traducciones" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Contribuyentes en orden alfabético" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Muchos comentarios útiles y discusiones" #: main.cpp:135 msgid "Plugins and patches" msgstr "Complementos y parches" #: main.cpp:136 msgid "New website" msgstr "Nuevo sitio web" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "Complemento del filtro HP, traducción al español" #: main.cpp:138 msgid "A cool icon" msgstr "Un bonito ícono" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "Logotipo de RKWard, múltiples sugerencias, ayuda con las expresiones" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Muchos comentarios valiosos, ayudas y parches" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Traducción, sugerencias, complementos" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Muchos comentarios, sugerencias útiles y reportes de errores" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Traducción al alemán, reportes de errores" #: main.cpp:144 msgid "Some patches" msgstr "Algunos parches" #: main.cpp:145 msgid "patches and helpful comments" msgstr "parches y comentarios útiles" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Mucha más gente en rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Lo sentimos. Si nos olvidamos de incluirte en esta lista, por favor " "contáctanos para añadirte" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Alineación" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Predeterminado" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Izquierda" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Derecha" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Cifras decimales" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Configuración predeterminada" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Según se requiera" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Precisión fija:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Opciones de formato para «%1»" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Sólo se pueden asignar niveles a números enteros consecutivos comenzando por " "1 (la columna índice es de sólo lectura). Para quitar niveles al final de la " "lista, simplemente déjelos en blanco." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Etiquetas de nivel/valor para «%1»" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Nombre de archivo" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Añadir" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Arriba" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Abajo" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Configuración predeterminada" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Todos los entornos" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Objetos con hijos" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Variables" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Funciones" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Objetos ocultos" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Mostrar objetos" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Mostrar campos" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "¡Se han encontrado errores o avisos! Mire el reporte más abajo" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Salida" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Salida:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Errores/avisos" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Errores/avisos:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Cancelar" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "Cambiar" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "Objeto padre: %1" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "Seleccionar objeto padre" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "¿Sobreescribir? (El nombre del objeto ya existe)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "¿Sobreescribir?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Pegado especial..." #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Modo de pegado" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Cadena sencilla" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Vector" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Separador de campo" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Tabulador" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Coma" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Espacio sencillo" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "Cualquier espacio" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Otro:" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Entrecomillado" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "No entrecomillar valores" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Automático" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Entrecomillar todo" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Transformaciones" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Invertir orden horizontal" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Invertir orden vertical" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Voltear filas/columnas" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "Agregar NA donde se necesite" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "Copiar líneas en la salida" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Ejecutar esta línea" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Ejecutar la selección" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Ejecutar todo" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "Referencia para la &función" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "No se pudo abrir el archivo para lectura" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Error al procesar archivo XML. El mensaje de error fue: «%1» en la línea %2, " "columna %3. Se espera que se reporten otros errores más abajo" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Intentando obtener hijo de elemento no válido" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Se esperaba exactamente un elemento «%1», pero se encontraron %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "atributo «%1» no especificado. Se asumirá «%2»" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "Valor ilegal para el atributo. Sólo se permiten valores «%1»." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Valor ilegal para el atributo. Sólo se permiten números enteros." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Valor ilegal para el atributo. Sólo se permiten números reales." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "Valor ilegal para el atributo. Sólo se permiten valores «%1» o «%2»." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "Procesando XML «%1» " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(sin etiqueta)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Intentó invocar un complemento llamado «%1», pero dicho complemento es " "desconocido. Probablemente deba cargar el PluginMap correspondiente " "(Preferencias->Configurar RKWard->Complementos), o tal vez el complemento " "cambió de nombre." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "No existe el complemento" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" "Formato de serialización erróneo mientras se invocaba el complemento «%1». " "Por favor contacte al equipo de RKWard (Ayuda->Acerca de RKWard->Autores)." #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "Formato de serialización erróneo" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "No se pudieron aplicar todas las preferencias. Seguramente porque algunos " "objetos de R ya no están presentes en su espacio de trabajo actual." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "No todas las preferencias fueron aplicadas" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "El complemento no se pudo enviar automáticamente con esta configuración." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "No se pudo enviar" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Seleccionar uno:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Especificar modelo" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Modelo completo" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Sólo efectos principales" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Modelo personalizado:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Efectos principales" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Nivel" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Término" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Introducir texto" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Introducir nombre de archivo" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Seleccionar" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Guardar en:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "mis.datos" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Introducir valor:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Vista previa" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Actualización de la vista previa" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Vista previa deshabilitada" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Vista previa actualizada" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "La vista previa no es posible (aún)" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Ha ocurrido un error mientras se intentaba desplegar la descripción de este " "complemento («%1»). Para detalles, por favor remítase a la salida estándar." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "No se pudo crear el complemento" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Enviar" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Cerrar" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Cerrar autom." #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Ayuda" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Usar el asistente" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Código" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Ejecutar de nuevo" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Procesando. Por favor espere" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "En la parte inferior puede ver (el)los comando(s) correspondiente(s) a la " "configuración que ha hecho. Pulse «Enviar» para ejecutarlo(s)." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Siguiente >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Atrás" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Usar diálogo" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Variable:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Ejecutándose" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Cancelado" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Pila de comandos" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Cadena de comandos" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Cerrado" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "En espera" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Comando" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Descripción" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "Arranque de R" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t- Ha ocurrido un error no especificado que RKWard no puede manejar aún. " "Probablemente RKWard no funcionará correctamente. Por favor compruebe su " "configuración.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" "

Ocurrió un problema al arrancar el motor R. Ha(n) tenido lugar el(los) " "siguiente(s) error(es):

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Error al arrancar R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Configuración regional" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "El motor R ha indicado que para realizar la tarea actual necesita el paquete " "«%1», actualmente no instalado. Se abrirá la herramienta de gestión de " "paquetes y allí podrá intentar ubicar e instalar el paquete solicitado." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Requerir el paquete «%1»" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "El motor R solicita información" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" "\n" "El motor R se apagará inmediatamente. Esto significa que no podrá usar más " "las funciones que dependen de él. Es decir, no podrá hacer prácticamente " "nada, ni siquiera guardar el espacio de trabajo (pero, si tiene suerte, R ya " "lo hizo). Lo que sí puede hacer es guardar cualquier archivo abierto, la " "salida, o copiar datos de los editores abiertos. Después salga de RKWard.\n" "Dado que esto nunca debería pasar, agradeceríamos que nos escribiese a " "rkward-devel@lists.sourceforge.net contando lo que intentaba hacer cuando " "esto ocurrió. ¡Lo sentimos!" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "El motor R ha muerto" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" "Error durante el empalme inicial con el proceso de fondo. Se esperaba la " "señal «%1» pero se recibió «%2»" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" "Versiones no coincidentes durante el empalme con el proceso de fondo. La " "versión del proceso fachada es «%1» mientras que la del de fondo es «%2».\n" "Por favor, repare su instalación." #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "El motor R se ha apagado con el estado: %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "El motor R ha encontrado un error fatal:\n" "%1" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Mensaje del motor R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "Pregunta del motor R" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- La biblioteca 'rkward' de R no pudo cargarse, o por lo menos no la " "versión correcta. Esto puede conducir a toda clase de errores, desde solo " "unas opciones faltantes hasta una falla general de funcionamiento. La causa " "más probable es que la instalación no haya ubicado los archivos en el lugar " "correcto. Sin embargo, en algunos casos, restos de una instalación anterior " "que no fueron adecuadamente eliminados pueden también ser los " "culpables.

\t\t

Debería salir de RKWard ahora y reparar su " "instalación. Para ayuda con eso vea http://p.sf.net/rkward/compiling.

\n" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t-Ha habido un problema estableciendo la comunicación con R. Seguramente " "esto indica una instalación dañada.

\t\t

Debería abandonar RKWard " "ahora y reparar su instalación. Para ayuda con eso vea http://p.sf.net/rkward/compiling.

\n" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "Consola de R" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Error de sintaxis\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "*.Rhistory|Archivos de historial de R (*.Rhistory)" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "Selecciones el archivo de historial de comandos para cargar" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" "Selecione el nombre del archivo para guardar el historial de comandos" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Interrumpir el comando en ejecución" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Copiar la selección tal cual" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "Copiar solamente los comandos" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Imprimir la consola" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "Importar historial de comandos..." #: rkconsole.cpp:921 msgid "Export command history..." msgstr "Exportar historial de comandos..." #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" "Ha configurado RKWard para que ejecute los comandos del editor a través de " "la consola. Sin embargo, en este momento hay otro comando activo. ¿Desea " "enviar el comando a la consola como está o reestablecer ésta primero? Pulse " "«Cancelar» si no desea ejecutar el comando ahora." #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "La consola de R está ocupada" #: rkconsole.cpp:940 msgid "Append" msgstr "Enviar" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "Reestablecer, luego enviar" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

RKWard no pudo encontrar ninguno de sus archivos de recursos, o sólo una " "versión antigua de ellos. La causa más probable es que la última " "instalación no ubicó los archivos en el lugar correcto. Esto puede conducir " "a toda clase de errores, desde la simple falta de una característica hasta " "una completa pérdida de funcionalidad.

Debería salir de RKWard " "ahora y reparar su instalación. Para ayuda sobre este proceso véase http://p.sf.net/rkward/compiling.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Instalación defectuosa" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" "Su instalación de KDE está configurada para usar diálogos de archivo " "«nativos». Esto puede causar fallos en algunos casos, por lo que " "recomendamos deshabilitar esta opción.\n" "¿Deshabilitar diálogos «nativos» en RKWard?" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "Posible problema con su configuración" #: rkward.cpp:221 msgid "Yes, disable" msgstr "Sí, deshabilitar" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "No, usar diálogos «nativos»" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Iniciando complementos..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Se necesitan complementos: puede gestionarlos en «Preferencias->Configurar " "RKWard».\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "Configuración de copias al carbón" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Espacio de trabajo" #: rkward.cpp:374 msgid "Files" msgstr "Archivos" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Tareas pendientes" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Conjunto de datos" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Crea un nuevo conjunto de datos y lo abre para edición" #: rkward.cpp:416 msgid "Script File" msgstr "Archivo de guiones" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "Abrir archivo de guiones de R..." #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "Abrir archivo de guiones de R reciente" #: rkward.cpp:430 msgid "Import Data" msgstr "Importar datos" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Importa datos desde varios formatos" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "Abrir espacio de trabajo.." #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Abre un documento existente" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "Abrir espacio de trabajo reciente" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Abre un archivo recientemente usado" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Guardar espacio de trabajo" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Guarda el documento actual" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Guardar espacio de trabajo como" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Guarda el documento actual como..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Sale de la aplicación" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "Interrumpir todos los comandos" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "Copiar comandos en la salida..." #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "Cerrar todos los datos" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Cierra todos los editores de datos abiertos" #: rkward.cpp:483 msgid "Close All" msgstr "Cerrar todo" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Separar" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[No hay acciones disponibles para la vista actual]" #: rkward.cpp:499 msgid "Open..." msgstr "Abrir..." #: rkward.cpp:509 msgid "Import" msgstr "Importar" #: rkward.cpp:512 msgid "Create..." msgstr "Crear..." #: rkward.cpp:519 msgid "Save..." msgstr "Guardar..." #: rkward.cpp:523 msgid "Export" msgstr "Exportar" #: rkward.cpp:616 msgid "Ready." msgstr "Preparado." #: rkward.cpp:620 msgid "Current working directory" msgstr "Directorio de trabajo actual" #: rkward.cpp:698 msgid "Exiting..." msgstr "Saliendo..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Saliendo de RKWard: ¿desea guardar el espacio de trabajo?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "¿Guardar espacio de trabajo?" #: rkward.cpp:706 msgid "Don't quit" msgstr "No salir" #: rkward.cpp:736 msgid "New dataset" msgstr "Nuevo conjunto de datos" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Introducir nombre para el nuevo conjunto de datos" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Abriendo espacio de trabajo..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "¿Desea guardar el espacio de trabajo actual?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "El motor R está ocupado." #: rkward.cpp:867 msgid "The R engine is idle." msgstr "El motor R está a la espera." #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "El motor R está iniciando." #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Abrir archivo(s) de guiones" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Espacio de trabajo sin nombre]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "summary (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "print (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "str (x)" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "¡El objeto fue borrado!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Visor de objeto: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "El objeto fue modificado. Tal vez desee pulsar «Actualizar»" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Actualizar" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Obteniendo la información. Por favor espere." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Pulse «Actualizar» para obtener la información" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Preparado" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "El motor QtScript ha reportado un error:\n" "%1" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Error de guion" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Error de guion: %1\n" "Trazado inverso:\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "El archivo «%1» (requerido por «%2») no fue encontrado. Por favor verifique " "su instalación." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" "Ocurrió un error durante la evaluación de código de guion.\n" "Archivo: %1\n" "Línea: %2\n" "Mensaje: %3." #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" "error ('El archivo «%1» (requerido por «%2») no fue encontrado. Por favor " "verifique su instalación.');\n" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Preparar\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Computar\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Imprimir el resultado\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Preferencias" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Los ajustes marcados con (*) no tienen efecto hasta que se reinicia RKWard" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Completado de código" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Habilitar completado de código" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "Número mínimo de caracteres antes de intentar el completado" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "Habilitar sugerencias mientras se escribe" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "Guardado automático" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "Intervalo de guardado automático (minutos)" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" "Conservar el archivo guardado automáticamente, después del guardado manual" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Editor de guiones" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Cargar/guardar el historial de comandos" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Longitud máxima del historial de comandos" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Ilimitado" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Número máximo de párrafos/renglones a mostrar en la consola" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Ejecutar comandos del editor de guiones a través de la consola" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Agregar también dichos comandos al historial de la consola" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "No agregarlos" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Agregarlos sólo si son de una línea" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Agregar todos los comandos" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "El historial de comandos depende por defecto del contexto" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Consola" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" "Estas opciones son solo para depuración. Es seguro dejarlas como " "están. Además, solo serán válidas para la sesión actual y no serán guardadas." #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Nivel de depurado" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Parámetros de depurado" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Tiempo límite de los comandos" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Nota: La salida del depurador se escribe en %1" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Depurar" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Directorio donde RKWard podría guardar archivos (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Acción de arranque (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" "Cargar archivo .RData desde el directorio actual si está disponible (opción " "«--restore»)" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Preguntar qué archivo abrir" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Mostrar diálogo de selección (predeterminado)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Mostrar la ayuda de RKWard al iniciar" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "La disposición de cada espacio de trabajo (p. ej. las ventanas de guiones, " "datos o ayuda que están abiertas) puede guardarse (y cargarse) para cada uno " "de ellos o independientemente del espacio que se utilice. ¿Cuál opción " "prefiere?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Guardar/restaurar la disposición de cada espacio de trabajo al " "guardarlo/cargarlo" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Guardar/restaurar independiente del espacio de trabajo (guardar al final de " "la sesión de RKWard, restaurar en el siguiente arranque)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "No guardar/restaurar la disposición del espacio de trabajo" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "Al cargar un espacio de trabajo, ir al directorio correspondiente." #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Advertir al editar objetos con un número de campos mayor a éste (0 = sin " "límite)" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Sin limite" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Comportamiento de foco de ventana MDI" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Clic para focalizar" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "El foco sigue al ratón" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "General" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "Tamaño predeterminado de ventana" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "Anchura predeterminada (pulgadas)" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "Altura predeterminada (pulgadas)" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "Historial de dispositivo de pantalla" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "Número máximo de gráficos guardados en el historial:" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "Tamaño máximo por gráfico guardado (en KB):" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "Gráficos en pantalla" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "¿Qué objetos deben ser mostrador por defecto?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Mostrar objetos ocultos" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Mostrar todos los entornos" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Mostrar objetos con hijos" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Mostrar funciones" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Mostrar variables" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "¿Qué columnas deben ser mostradas por defecto?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Campo de etiqueta" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Campo de tipo" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Campo de clase" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "No obtener nunca la estructura de estos paquetes:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Añadir exclusión" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" "Añadir el nombre del paquete del cual no se debe obtener la estructura" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "Copiar los comandos en la consola" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "Comandos escritos en la consola" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "Comandos ejecutados a través del menú «Ejecutar»" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "Comandos provenientes de diálogos y complementos" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Opciones de la ventana de salida" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "mostrar ventana cuando se produzcan nuevos resultados" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "pasar ventana al frente cuando se produzcan nuevos resultados" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Gráficos" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Formato de archivo" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "Calidad JPG" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Ancho:" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Alto:" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Algunos complementos están disponibles con interfaz tipo asistente y con " "interfaz de diálogo tradicional. En el caso de que ambas estén disponibles, " "¿cuál prefiere?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Siempre preferir diálogos" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Preferir la interfaz recomendada" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Siempre preferir asistentes" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "Mostrar la sintaxis de R (en los diálogos)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Mostrar el código por defecto" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Altura predeterminada del área de código (en pixeles)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Seleccionar archivo(s) .pluginmap" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Complementos" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Seleccionar archivo .pluginmap" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Los siguientes parámetros afectan el comportamiento de R en consola. Por lo " "general es seguro no modificarlos." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Mostrar avisos" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "No mostrar avisos" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Mostrar los avisos más tarde (predeterminado)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Mostrar los avisos inmediatamente" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Convertir los avisos en errores" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Carácter decimal (sólo para impresión)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Anchura de la salida (caracteres)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Número máximo de elementos mostrados en print()" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Longitud máxima de los avisos/errores a imprimir" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Conservar los comentarios en las funciones" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "VERDADERO (predeterminado)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "FALSO" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Conservar los comentarios en los paquetes" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "VERDADERO" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "FALSO (predeterminado)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Nivel máximo de expresiones anidadas" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Precisión decimal predeterminada en print()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Comprobar límites de vectores (avisar)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Comando del editor" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "Comando del paginador" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "Motor R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "Servidor CRAN de descargas (dejar vacío para elegir uno en cada sesión):" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Seleccionar servidor" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" "Repositorios de paquetes adicionales (de donde se descargan las bibliotecas)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Archivar los paquetes descargados" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" "Ubicaciones de las bibliotecas de R (donde son instaladas localmente)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Nota: siempre se usarán las ubicaciones predeterminadas además de las que " "especifique en esta lista" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Añadir directorio de bibliotecas de R" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Añadir repositorio" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Añadir URL de nuevo repositorio" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "Paquetes de R" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Seleccionar servidor CRAN" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Por ahora, los ajustes sólo se aplican a comandos nuevos. Todas las " "instrucciones anteriores permanecen visibles/invisibles." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "mostrar siempre el comando" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "mostrar siempre el resultado" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "mostrar errores" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "mostrar/restaurar ventana" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Comandos de usuario" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Comandos generados por el complemento" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Comandos de la aplicación" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Comandos de sincronización" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" "Número máximo de párrafos/renglones a mostrar en la bitácora de comandos" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Bitácora de comandos" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Adosar a la ventana principal" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Configurar el motor R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Pausar la ejecución" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Cancelar los comandos seleccionados" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Algunos de los comandos que estaba intentando cancelar están marcados como " "«sync» (letra S en la columna tipo). Cancelarlos podría ocasionar pérdidas " "de datos. Los comandos _no_ han sido cancelados." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Algunos comandos no han sido cancelados" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Continuar con la ejecución" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "Editor de guiones" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Ejecutar bloque" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Marcar la selección como bloque" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Desmarcar bloque" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "CD al directorio del guion" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Cambiar el directorio de trabajo por el directorio de este guion" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "Guardar guion..." #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "Guardar guion como..." #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [modicado]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "El documento «%1» ha sido modificado. ¿Seguro que desea cerrarlo?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Archivo no guardado" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" "Ocurrió un error al intentar crear un archivo de guardado automático del " "fichero «%1»:" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Sin nombre" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (Activo)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (Sin usar)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Sentencia incompleta.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Error de sintaxis.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "" "Ha ocurrido un error no especificado durante la ejecución del comando.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Configurar" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Buscar:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Campos:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Todo" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Todo menos palabras clave" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Palabras clave" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Paquete:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Distinguir mayúsculas" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Búsqueda aproximada" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Buscar" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Buscar en la ayuda" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Buscar ayuda HTML para %1" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "Todos los paquetes instalados" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "Todos los paquetes cargados" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "No se encontró ayuda relacionada con «%1». Tal vez el paquete " "correspondiente no está instalado/cargado o escribió mal el comando. Pruebe " "usando Ayuda->Buscar en la ayuda de R para más opciones." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "No se encontró ayuda" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Campo" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Paquete" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Limpiar salida" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "Actualiza&r salida" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "Salida %1" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Imprimir salida" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Exportar página como HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "Ventana de salida" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Imprimir página" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Guardar salida como HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

No se encontró el archivo de salida de RKWard

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "La página no existe o está dañada" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "¿Limpiar la salida?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Sin título" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

No hay página de ayuda

\n" "

La página de ayuda para este componente no se ha escrito aún (o está " "dañada). Por favor contemple la posibilidad de contribuir a ella.

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Usar %1 ahora" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Resumen" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Uso" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Configuración de la interfaz" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Elemento sin nombre" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Funciones y páginas relacionadas" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Detalles técnicos" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

En esta página:

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "Referencia de R para «%1»" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "REFERENCIA DAÑADA" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "Ayuda sobre %1" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "Configurar %1" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Adosar" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "Posicion" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Barra lateral izquierda" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Barra lateral derecha" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Barra superior" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Barra inferior" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "No mostrado en la barra lateral" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Ayuda de R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Buscar en la ayuda de R" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Ayuda de RKWard" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Muestra el índice de la ayuda de R" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Muestra/restaura la ventana de búsqueda en la ayuda de R" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Mostrar la ayuda de RKWard" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Ventana anterior" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Siguiente ventana" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "Mostrar/Ocultar %1" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Activar vista de documento" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Mostrar &salida" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "Por razones técnicas, el siguiente diálogo sólo le permite configurar los " "atajos de teclado para aquellas partes de RKWard que se encuentran activas " "actualmente.\n" "\n" "Por lo tanto, si desea configurar los atajos de teclado, por ejemplo, para " "su uso dentro del editor de guiones, debe primero abrir una ventana del " "editor de guiones y activarla." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Nota" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "Complementos de RKWard" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "Por razones técnicas, el siguiente diálogo sólo le permite configurar los " "botones de la barra de herramientas para aquellas partes de RKWard que se " "encuentran activas.\n" "\n" "Por lo tanto, si desea configurar los botones, por ejemplo, para su uso " "dentro del editor de guiones, debe primero abrir una ventana del editor de " "guiones y activarla." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "---Descripción del problema---\n" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" "Por favor proporcione un breve resumen del problema:\n" "###Rellene por favor###\n" "\n" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" "¿Qué hizo exactamente antes de que sucediera? (Sea lo más detallado " "posible.)\n" "###Rellene por favor###\n" "\n" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" "¿Se presenta de nuevo el problema cuando intenta repetir los pasos " "anteriores (no, a veces, siempre)?\n" "###Rellene por favor###\n" "\n" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" "Si aplica: ¿Ocurre también al hacer lo mismo en una sesión de R por fuera de " "RKWard?\n" "###Rellene por favor###\n" "\n" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" "¿Posee más información que pueda ayudarnos a rastrear la falla? En especial, " "¿puede facilitarnos datos y código de muestra con los cuales reproducir el " "problema?\n" "###Rellene por favor###\n" "\n" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" "Por favor espere mientras se reúne información sobre su instalación.\n" "En caso de que el proceso de fondo haya muerto o se haya colgado, tal vez " "desee pulsar «Cancelar» para saltarse este paso." #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "Reuniendo información de instalación" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Reportar errores en RKWard" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" "

¿Dónde reportar errores o solicitudes de mejoras?

Por favor " "envíe sus reportes de errores o solicitudes a %1 o " "escríbanos a %2.

¿Qué información " "proporcionar?

Copie la información mostrada abajo y rellene los " "detalles de las preguntas.

" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "No se pudo embeber la ventana X11 de R" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Ha creado una nueva ventada de dispositivo de X11 en R. Usualmente, RKWard " "intenta detectar este tipo de ventanas, para tomar su control, y adosarles " "una barra de menú. Sin embargo, esta vez RKWard no logró detectar, qué " "ventana fue creada y por lo tanto no puede embeberla.\n" "Si creó la ventana en una pantalla de X11 diferente, es de esperarse que " "esto suceda. Debería considerar cambiar las opciones(\"pantalla\").\n" "Si puede ver la ventana de X11 en la misma pantalla de este mensaje, " "entonces RKWard debería haberla detectado. En este caso, por favor " "escríbanos a rkward-devel@lists.sourceforge.net con detalles de su " "instalación, así podremos intentar corregir el problema en futuras versiones " "de RKWard." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Ha ocurrido un error" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "Ventana de dispositivo de gráficos" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "Ventana grande" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "Cerrando dispositivo (guardando historial)" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "Apagando dispositivo No. %1" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Especificar tamaño fijo" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Ancho" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Alto" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Activar dispositivo de gráficos número %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "" "Copiar el contenido del dispositivo de gráficos número %1 a la salida" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Imprimir el contenido del dispositivo de gráficos número %1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Especificar objeto" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "Especifique el nombre del objeto en el que desea guardar el gráfico" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "" "Guardar el contenido del dispositivo de gráficos %1 en el objeto «%2»" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Duplicar el dispositivo de gráficos %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "Cargar el gráfico siguiente en el dispositivo No. %1" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "Cargando gráfico desde el historial" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "Cargar el gráfico anterior en el dispositivo No. %1" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "Cargar el primer gráfico en el dispositivo No. %1" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "Cargar el último gráfico en el dispositivo No. %1" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "Cargar el gráfico %1 en el dispositivo No. %2" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "Añadir este gráfico al historial (dispositivo No. %1)" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "Borrar el gráfico actual del historial (dispositivo No. %1)" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" "Esto borrará el historial de gráficos de todos los dispositivos, no " "solamente de este. Si esa no es su intención pulse «Cancelar»." #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "Vaciar el historial de gráficos" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "Propiedades de gráfico (dispositivo No. %1)" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "El área de dibujo se ajusta al tamaño de la ventana" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Establecer tamaño fijo de 500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Establecer tamaño fijo de 1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Establecer tamaño fijo de 2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Especificar tamaño fijo..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "Gráfico anterior" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "Primer gráfico" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "Gráfico siguiente" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "Último gráfico" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "Ir a gráfico" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "Añadir este gráfico" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "Borrar este gráfico" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "Limpiar historial" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "Propiedades de gráfico" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Establecer como activa" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Copiar a la salida" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Almacenar como objeto R..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Duplicar" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "La url que está intentando abrir («%1») no es un archivo local o el tipo de " "archivo no está soportado por RKWard. ¿Desea abrir la url con la aplicación " "predeterminada?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "¿Abrir con la aplicación predeterminada?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "No ha sido posible abrir «%1»" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "No se pudo abrir el archivo de comandos" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Se dispone a editar el objeto «%1», el cual es muy grande (%2 campos). " "RKWard no ha sido optimizado para manejar objetos muy grandes en el editor " "de datos incorporado. Esto hace uso de mucha memoria, y -dependiendo de su " "sistema- puede ser muy lento. Para objetos grandes, generalmente se " "recomienda la edición por línea de comandos o separar los datos en porciones " "más pequeñas antes de editar. Por otro lado, si cuenta con suficiente " "memoria, o los datos son lo bastante simples (los datos numéricos son más " "fáciles de manejar que los factores), editarlos no ha de representar un " "problema. Puede configurar este aviso (o desactivarlo completamente) en " "Preferencias->Configurar RKWard->General.\n" "¿Realmente desea editar el objeto?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "A punto de editar objeto muy grande" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Guardar disposición del espacio de trabajo" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Restaurar disposición del espacio de trabajo" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Ventana izquierda" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Ventana derecha" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "Espacio de trabajo" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "Espacio de trabajo de R" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Búsqueda en la ayuda" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Editar" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Ver" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Renombrar" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Copiar a nuevo símbolo" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Copiar a .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Eliminar" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Desactivar paquete" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Cargar / Desactivar paquetes" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Copiar objeto" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Introducir el nuevo nombre" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Un objeto llamado «%1» ya existe en .GlobalEnv. En su lugar se creó la copia " "llamada «%2»." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "El nombre ya está en uso" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Renombrar objeto" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Introducir el nuevo nombre" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "No funciones" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Mostrar todos los entornos" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Mostrar objetos ocultos" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Editar" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Archivo" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Ver" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "E&jecutar" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nuevo" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Importar" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "&Exportar" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "Espacio de &trabajo" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "Venta&nas" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "Activa&r" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "Preferencia&s" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "A&yuda" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Dispositivo" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "&Historial" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "Venta&na" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "M&ovimiento de herramientas" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Marcelino Villarino, Germán Márquez Mejía, ,Launchpad Contributions:,Germán " "Márquez Mejía,RKWard Team, ,Launchpad Contributions:,Fitoschido,Germán " "Márquez Mejía,RKWard Team, ,Launchpad Contributions:,Fitoschido,Germán " "Márquez Mejía,RKWard Team, ,Launchpad Contributions:,Alfredo Sánchez " "Alberca,Fitoschido,Germán Márquez Mejía,RKWard Team,studentz, ,Launchpad " "Contributions:,Adolfo Jayme Barrientos,Alfredo Sánchez Alberca,Germán " "Márquez Mejía,RKWard Team,studentz" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "mvillarino@users.sourceforge.net, manchito@users.sourceforge.net,,,,rkward-" "tracker@lists.sourceforge.net,,,fitoschido@gmail.com,,rkward-" "tracker@lists.sourceforge.net,,,fitoschido@gmail.com,,rkward-" "tracker@lists.sourceforge.net,,,,fitoschido@gmail.com,,rkward-" "tracker@lists.sourceforge.net,,,,fitoschido@gmail.com,,,rkward-" "tracker@lists.sourceforge.net," rkward-0.6.1/po/tr.po0000644000175000017500000031271512124345424013775 0ustar thomasthomas# translation of yenitr.po to # translation of tr.po to # translation of rkward.po to # çevirisi of rkward.po to Türkçe # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Harun Hurma , 2006, 2007. # Serdar Soytetir , 2007. # ertugrulerata , 2007. msgid "" msgstr "" "Project-Id-Version: yenitr\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:03+0000\n" "Last-Translator: RKWard Team \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Nesne '%1' düzenlemek için açılamadı. Ya dosya yok ya da RKWard bu nesneyi " "henüz düzenleyemiyor." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Düzenlenemez '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Çalışma alanı Yükleniyor..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Dosya açılırken bir hata oluştu '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Çalışma alanı yükleme hatası" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Bitirmek için kalan R komutları bekleniyor. Hemen çıkmak için İptal " "düğmesine basın. (UYARI: İptal işlemi veri kaybetmenize neden olabilir.)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Bitirmek için R bekleniyor" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Dosya ismi verilmemiş. Verileriniz KAYDEDİLMEDİ. Devam etmek istiyor musunuz?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "'%1' dosyasına kaydetme başarısız.. Ne yapmak istiyorsunuz?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Kaydetme başarısız oldu" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Farklı dosya ismi ile kaydetmeyi deneyin" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Kaydetme başarısız oldu" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "'%1' dosyasına kaydetme başarısız oldu. Farklı dosya ismiyle kaydetmeyi " "denemek ister misiniz?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Bitti" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Gösterilen dosya(lar)" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Dosya(ları) düzenle" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "'%1' nesnesi çalışma alanından silindi veya nesnenin tipi değişti, fakat " "düzenlemek için halen açık. Onu geri koymak ister misiniz?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Nesneyi geri koy?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Nesne '%1' gerçekten silmek istiyor musunuz? Nesne düzenlemek için halen " "açık, o düzenleyiciden de silinecek. Silinmiş öğreler geri getirilemez." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Nesneyi sil?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Nesne '%1' gerçekten silmek istiyor musunuz? Silinmiş öğeler geri " "getirilemez." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "İsim" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Başlık" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Tip" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Sınıf" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "Tam yeri:" #: core/robject.cpp:122 msgid "Label:" msgstr "Başlık:" #: core/robject.cpp:123 msgid "Type:" msgstr "Tip:" #: core/robject.cpp:126 msgid "Function" msgstr "İşlev" #: core/robject.cpp:127 msgid "Usage: " msgstr "Kullanımı: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Veri çerçevesi" #: core/robject.cpp:131 msgid "Array" msgstr "Sıra" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matris" #: core/robject.cpp:135 msgid "List" msgstr "Liste" #: core/robject.cpp:137 msgid "Variable" msgstr "Değişken" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Veri tipi:" #: core/robject.cpp:140 msgid "Environment" msgstr "Çevre" #: core/robject.cpp:145 msgid "Length: " msgstr "Uzunluk: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Boyutlar: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Sınıf(lar):" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Belirttiğiniz isim kullanımda ya da geçerli değil. %1 olarak yeniden " "isimlendirin" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Geçersiz isim" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Biçim" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Düzeyler" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Seçilen bölümü keser ve panoya yerleştirir" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Seçilen bölümü panoya kopyalar" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr "" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Sola yeni değişken ekle" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Bu değişkeni sil" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "İşaretli satırları (%1-%2) sil" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Bu hücreyi (%1) sil" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Pano içerikleri ilave ediliyor..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Dosya biçemi: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "'%1' durumu için bir eklenti tanımlanmamış" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Bütün Dosyalar" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Paketleri yapılandır" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Yerel paketler" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Depoları yapılandır" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Seçilen kütüphane yeri yazılabilir değil" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Yetkili kullanıcı olun" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Seçilen paketler kurulurken lütfen bekleyin." #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Paketler kuruluyor" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Kurulan paketler" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Başlık" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Versiyon" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Yer" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Yükle" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Çıkar" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Yüklenen paketler" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Paketler yükleme/çıkarmaya çalışılırken hata oluştu. Detaylar için aşağıya " "bakın" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Paketler elden geçirilirken hata" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Backend tarafından istenilen paket (\"%1\") paket depoları içinde " "bulunamadı. Paket ismi yanlış yazılmış olabilir. Veya \"Configure " "Repositories\"-tuşu ile ek paket depoları eklemeye ihtiyaç olabilir." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Uygun paket yok" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Paketleri kur:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Kur" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Genel Durum:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Ne yapmak istiyorsunuz?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Boş bir çalışma alanı ile başla" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Boş bir tablo ile başla" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Varolan çalışma alanını yükle:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Bu cevabı hatırla" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Hata ayıklama mesajının gösterimi (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "İkili bir sayı olarak hata ayıklama unsurları için maske" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "RKWARD" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Proje lideri / ana geliştirici" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Çeşitli eklentiler, öneriler ve tanıtım, yerelleştirme" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Çeşitli yardımcı yorumlar ve tartışmalar" #: main.cpp:135 msgid "Plugins and patches" msgstr "Eklentiler ve yamalar" #: main.cpp:136 msgid "New website" msgstr "Yeni internet sayfası" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "" #: main.cpp:138 msgid "A cool icon" msgstr "Farklı bir simge" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "RKward logo, birçok öneri, üslup üzerine yardım" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Çeşitli değerli yorumlar, ipuçları ve yamalar" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Çeşitli eklentiler, Öneriler, eklentiler" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Birçok yorum, faydalı öneriler ve hata bildirimi" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "" #: main.cpp:144 msgid "Some patches" msgstr "Bazı yamalar" #: main.cpp:145 msgid "patches and helpful comments" msgstr "" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "rkward-devel@lists.sourceforge.net adresinde daha birçok insan" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Sizi Listeye eklemeyi unuttuysam üzgünüm. Listeye eklenmek için lütfen " "benimle iletişim kurunuz" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Sıralama" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Ondalık Kısımlar" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Varsayılan ayarlar" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Olarak gereken" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Düzeltilmiş kesinlik:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "'%1' için biçimlendirme seçenekleri" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Düzeyler, sadece 1'le başlayan (indeks sütunu salt okunur) ardışık tam " "sayılara atanabilir. Listenin sonundaki düzeyleri silmek için onları " "boşaltın." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "'%1' için Düzeyler / Değer başlıkları" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Dosya ismi" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Yukarı" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Aşağı" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Varsayılanları Yapılandır" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Tüm Çevreler" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Alt elemanlarıyla nesneler" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Değişkenler" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Fonksiyonlar" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Gizli Nesneler" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Nesneleri göster" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Alanları Göster" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "Hatalar veya uyarılar var! Bir kopyası için aşağıya bakın" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Çıktı" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Çıktı:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Hatalar/Uyarılar:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Üzerine yazılsın mı? (Verilen nesne adı zaten var)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Üzerine yazılsın mı?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Şu anki satırı çalıştır" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Seçileni çalıştır" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Hepsini çalıştır" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Fonksiyon başvuru" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Okunması için dosya açılamadı" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Hata inceleme XML-dosyası. Hata-mesajı: '%2' çizgide '%1', '%3' sütun. " "Aşağıda olması beklenen daha başka hatalar bildirildi" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Geçersiz öğenin sonucu düzeltilmeye çalışılıyor" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Kesinlikle '%1' bir öğe beklendi fakat %2 bulundu" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "'%1'-özellik verilmemiş. '%2' farzediliyor" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "Geçersiz nitelik değeri. İzin verilen değerler sadece '%1' in biridir." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Geçersiz nitelik değeri. Sadece tam sayılara izin verilir." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Geçersiz nitelik değeri. Sadece gerçek sayılara izin verilir." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Geçersiz nitelik değeri. İzin verilen değerler sadece '%1' ya da '%2' " "değerleridir." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "XML-inceleme '%1' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(başlık yok)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Birini seç:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Modeli belirle" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Tüm Model" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Sadece ana etkiler" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Özel Model:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Ana etkiler" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Düzey" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Terim" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Metin girişi" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Dosya ismi girin" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Seç" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Farklı kaydet:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "my.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Değer girin:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Önizleme" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Önizleme güncelleniyor" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Önizleme pasifleştirildi" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Önizlemeyi güncelle" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Önizleme henüz olanaklı değil" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Bu eklentinin ('%1') tanımı incelenirken hata oluştu. Lütfen detaylar için " "stdout a bakın." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Eklenti oluşturulamadı" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Gönder" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Sihirbazı kullan" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Kod" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Sürdürülüyor: Lütfen bekleyin" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Yaptığınız ayarlara karşılık gelen komutları aşağıda görebilirsiniz. " "Komut(lar) çalıştırmak için 'Gönder' tuşuna basın." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "İleri >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Geri" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Diyalog kullan" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Değişken:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "İptal edildi" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Komut kümesi" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Kapalı" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Komut" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Tanımlama" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "R Başlangıç" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "R başlarken hata" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Yerel paketler" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "R backend, en son görevi tamamlamak için, ihtiyaç duyduğu şu anda kurulmamış " "olan paketi '%1' gösterdi. Paket-yönetim aracı ihtiyaç duyulan paketi " "bulmanız ve kurmanız için açılacak." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "'%1' Gereken paket" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "R backend bilgiye ihtiyaç duyar" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "R engine durmuş" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "R backend'den mesaj" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "R konsol" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Sözdizimi hatası\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Çalışan komutu durdur" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Tam olarak seçimi kopyala" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Eklentiler ayarlanıyor..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "İhtiyaç duyulan eklentiler: Eklentileri \"Ayarlar->Rkward'ı yapılandır " "\".yoluyla yönetebilirsiniz.\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Çalışma alanı" #: rkward.cpp:374 msgid "Files" msgstr "" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Bekleyen işler" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Veri seti" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Yeni boş veri seti oluşturur ve düzenleme için onu açar" #: rkward.cpp:416 msgid "Script File" msgstr "Betik Dosyası" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "İçeriye Veri Aktar" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Değişik dosya biçemlerindeki verileri içeri aktar" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Varolan dosyayı açar" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "En son kullanılan dosyayı açar" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Çalışma alanını kaydet" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Güncel dosyayı kaydeder" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Çalışma alanını farklı kaydet" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Güncel dosyayı farklı kaydeder..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Uygulamadan çıkar" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "Bütün verileri kapat" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Tüm açık veri düzenleyicilerini kapatır" #: rkward.cpp:483 msgid "Close All" msgstr "Hepsini kapat" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Ayır" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Hazır." #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "Çıkılıyor..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Çalışma alanı kaydedilsin mi?" #: rkward.cpp:706 msgid "Don't quit" msgstr "" #: rkward.cpp:736 msgid "New dataset" msgstr "Yeni veri seti" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Yeni veri setinin ismini girin" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Çalışma alanı açılıyor..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Şu anki çalışma alanını kaydetmek istiyor musunuz?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[İsimsiz Çalışma alanı]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Güncelle" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "" #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "" #: robjectviewer.cpp:251 msgid "Ready" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Hazırla\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Hesapla\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Sonucu Yazdır\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Ayarlar" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "(*) ile işaretlenen ayarlar, RKWard yeniden başlatılıncaya kadar etkili olmaz" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Komut geçmişini Yükle/Kaydet" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Komut geçmişinin maksimum uzunluğu" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Sınırsız" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Konsolda görmek için paragrafların/satırların maksimum sayısı" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Betik düzenleyicisinden konsola komutları çalıştır" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Komut geçmişi öntanımlı olarak içinde bulunulan bağlama duyarlıdır." #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Konsol" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Başlangıç Eylemi (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Bir dosya açmak için sor" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Seçme diyaloğunu göster (Varsayılan)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Başlangıçta RKWard yardımı göster" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Çalışma alanı düzeni (ör: betik-, veri-,yardım-penceresi açık olan) herbir R " "çalşma alanı için veya R çalışma alanından bağımsız kaydedilebilir. " "Hangisini tercih edersiniz?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "R çalışma alanı kaydedilirken/yüklenirken R çalışma alanı ile Kaydet/Yerine " "Koy" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "R çalışma alanını bağımsız Kaydet/Yerine koy (RKWard oturumunun sonunda " "kaydet, bir sonraki başlatmada yerine koy)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Çalışma alanı düzeni Kaydedilemedi/Yerine koyulamadı" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "Alanda kaç nesne düzenlenecek (Sınır koymamak için sıfır kullanın)" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Sınır Yok" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Genel" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Hangi nesneler varsayılan olarak sütunlar gösterilsin?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Gizli nesneleri göster" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Tüm çevreleri göster" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Alt elemanı ile nesneyi göster" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Fonksiyonları göster" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Değişkenleri göster" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Hangi sütunlar varsayılan olarak gösterilsin?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Başlık alanı" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Tip alanı" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Sınıf alanı" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Çıktı penceresi seçenekleri" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Bazı eklentiler hem kurulum sihirbazına hem de geleneksel diyalog arayüzüne " "uygundur. Eğer her ikisi de uygunsa hangi gösterim modunu tercih edersiniz?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Daima diyalogları tercih et" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Daima önerilen arayüzü tercih et" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Daima sihirbazları tercih et" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "R sözdizimi görünümü" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Hangi sütunlar varsayılan olarak gösterilsin?" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Kod ekranının varsayılan yüksekliği(piksel)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "pluginmap dosyası(ları) seç" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Eklentiler" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "pluginmap-dosya seç" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Aşağıdaki ayarlar çoğu kez konsol içinde R davranışını etkiler. Bu ayarları " "değiştirmeden bırakmak genellikle güvenlidir." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Uyarıları göster" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Uyarıları gizle" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Baskı uyarıları sonra (varsayılan)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Baskı uyarıları hemen" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Uyarıları hatalara çevir" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Ondalık karakter (sadece yazdırma için)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Çıktı genişliği (karakterler)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Baskı için uyarılar/hataların maksimum uzunluğu" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Fonksiyonlardaki yorumları koru" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "DOĞRU (varsayılan)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "YANLIŞ" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Paketlerdeki yorumları koru" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "YANLIŞ(Varsayılan)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "İç içe ifadelerin maksimum düzeyi" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Baskıda varsayılan ondalık hassasiyeti" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Vektör sınırlarını denetle (uyar)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "R-Backend" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "İndirilen paketlerin arşivi" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Uyarı: Başlangıç varsayılanları daima bu listede belirttiğiniz yerlere ek " "olarak kullanılacaktır" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "R kütüphane klasörü ekle" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Depo ekle" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "R-Paketleri" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Şimdiki ayarlar sadece yeni komutlara uygulanır. Geri kalan tüm geçmiş " "komutları göster/gizle." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "daima komutları göster" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "daima sonuçları göster" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "hataları göster" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "pencereyi göster/yükselt" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Kullanıcı komutları" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Eklentiden üretilmiş komutlar" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Uygulama komutları" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Eşleştirme komutları" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "Komut kayıtında görmek için paragrafların/satırların maksimum sayısı" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Komut kayıtları" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Ana pencereye ekle" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "R backend'i yapılandır" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "İşlemi durdur" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Seçilen komutları iptal et" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "İptal etmeye çalıştığınız komutların bir kısmı \"sync\" (letter 'S' in the " "type column). olarak işaretlenmiş. Bu gibi komutları iptal ederek veri " "kaybına yol açabilirsiz. Bu komutlar iptal edilmemeli." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Bazı komutlar iptal edilmedi" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "İşlemi yeniden başlat" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [değiştirilmiş]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Dosya \"%1\"değişmiş. Yine de kapatılsın mı?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Dosya kaydedilmedi" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "İsimsiz" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Tamamlanmamış ifade.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Sözdizimi hatası.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "Komut çalışırken belirlenemeyen bir hata oluştu.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Bul:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Alanlar:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Hepsi" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Hepsi fakat anahtar kelimeler" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Anahtar kelimeler" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Paket:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Büyük/küçük harf duyarlı" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Bulanık karşılaştırma" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Bul" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Yardım ara" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "'%1' de yardım bulunamadı. Uygun paket kurulmamış/yüklenmemiş olabilir veya " "komut doğru yazılmamış. Yardım->Daha fazla R yardımı kullanmayı deneyin." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Yardım bulunamadı" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Konu" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Paket" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Uç birim çıktısı?" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Çıktıyı Yenile" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "HTML olarak kaydet" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Sayfa yok veya bağlantı kopuk" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Uç birim çıktısı?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Başlık Yok" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Özet" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Kullanım" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Arayüz Ayarları" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "İsimsiz Arayüz Elemanı" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "İlgili olan işlevler ve sayfalar" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Teknik detaylar" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "%1 de R Başvurusu" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "HATALI BAŞVURU" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "R hakkında yardım" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "R yardımda ara" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "R hakkında yardım" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "R yardım dizinini gösterir" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "R yardım arama penceresini gösterir/gizler" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "RKWard'da yardımı göster" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Önceki Pencere" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Yeni Pencere" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Belge görünümünü etkinleştir." #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "&Çıktıyı Göster" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "R X11 penceresini içine koyamıyor" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "R içinde yeni bir X11 penceresi oluşturdunuz. Genellikle RKWard bu gibi " "pencereleri kontrol etmek için bulur ve onları menü çubuğuna ekler. Ancak şu " "an, RKWard oluşturulan pencereyi bulamadı ve ekleyemedi.\n" "Bu durum farklı bir ekran veya X11 üzerinde pencere oluşturduysanız meydana " "gelir. Daha sonra seçenekleri değiştirebilirsiniz (\"display\"),\n" "Bu mesaj gibi aynı ekranda X11 penceresi görebiliyorsanız RKWard daha " "iyisini yapabilir. Bu durumda lütfen ayarlarınızdaki detaylarla birlikte " "rkward-devel@lists.sourceforge.net de bizimle iletişim kurunuz. RKWard'ın " "ileriki sürümlerine bunu düzeltmeye çalışacağız." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Bazı hatalar oluştu" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Düzeltilmiş büyüklüğü belirt" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Grafik aygıtı %1 i etkinleştir" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Grafik aygıtı %1 in içeriğini çıktıya kopyala" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Grafik aygıtı %1 için içeriğini yazdır" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "R nesnesi belirt" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "R nesnesi ismi belirt, grafiği kaydetmek isterseniz" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Grafik aygıtı %1 in içeriğini nesne %2 ye kaydet" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Grafik aygıtı %1 in kopyasını yap" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Çizim alanı pencerenin büyüklüğü kadardır" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Büyüklüğü 500x500 olarak ayarla" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Büyüklüğü 1000x1000 olarak ayarla" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Büyüklüğü 2000x2000 olarak ayarla" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Belirtilen büyüklüğü ayarla..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Etkin yap" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Çıktıya kopyala" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "R nesnesi olarak sakla..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "İkile" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Varsayılan uygulama ile aç?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "\"%1\" açılamıyor" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Komut dosyası açılmadı" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Çok geniş nesne düzenleme hakkında" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Çalışma alanı düzenini kaydet" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Çalışma alanı düzenini geri koy" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Sol Pencere" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Sağ Pencere" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Yardım Ara" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Yeniden isimlendir" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Yeni simgeye kopyala" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr ".GlobalEnv e kopyala" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Nesne kopyala" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Kopyalamak için isim girin" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Nesne ismi '%1 GlobalEnv'de zaten var. '%2' olarak kopyası oluşturuldu." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "İsim kullanımda" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Nesneyi yeniden isimlendir" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Yeni isim girin" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Fonksiyonsuz" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Tüm Çevreleri Göster" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Gizli Nesneleri Göster" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Çalıştır" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Yeni" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&İçeri Aktar" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Çalışma alanı" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Pencereler" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Etkinleştir" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" ",Launchpad Contributions:,ertugrulerata, ,Launchpad Contributions:, " ",Launchpad Contributions:,RKWard Team, ,Launchpad Contributions:,RKWard " "Team,ertugrulerata" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" ",,,,,,,rkward-tracker@lists.sourceforge.net,,,rkward-" "tracker@lists.sourceforge.net," rkward-0.6.1/po/uk.po0000644000175000017500000047315512124345424013775 0ustar thomasthomas# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Yuri Chornoivan , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:01+0000\n" "Last-Translator: RKWard Team \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : " "n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: uk\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Не вдалося відкрити об’єкт «%1» для редагування. Об’єкта або не існує, або " "RKWard ще не підтримує редагування таких об’єктів." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Редагування «%1» неможливе" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Завантаження робочого простору…" #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Під час спроби відкрити файл «%1» сталася помилка:\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Помилка під час завантаження робочого простору" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" "Не знайдено служби, яка б могла надати діалогове вікно друку KDE для файлів " "PostScript. Буде виконано спробу відкрити дані у типовій програмі для " "перегляду PostScript.

Вам варто встановити програму Okular або " "налаштувати RKWard так, щоб програма не робила спроби виконати друк за " "допомогою діалогового вікна друку KDE." #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "Не вдалося відкрити діалогове вікно друку KDE" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Очікуємо на завершення виконання решти команд R. Щоб завершити роботу " "негайно, натисніть кнопку «Скасувати» (ПОПЕРЕДЖЕННЯ: натискання цієї кнопки " "може призвести до втрати даних)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Очікуємо на завершення роботи R" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" "%1|файли робочих просторів R (%1)\n" "*|всі файли" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Не вказано назви файла. Ваші дані не було збережено. Чи бажаєте ви виконати " "дію попри це?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Не вдалося зберегти дані до файла «%1». Що тепер робити?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Помилка збереження" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Спробувати зберегти до файла з іншою назвою" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Спроба збереження зазнала невдачі" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Не вдалося зберегти дані до файла «%1». Бажаєте зберегти дані до файла з " "іншою назвою?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Завершено" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "Команда, віддана рушієві R, хоче показати вам такі файли:\n" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Показ файлів" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" "Команда, віддана у рушії R, потребує вашого редагування одного або декількох " "файлів. Ознайомтеся зі списком цих файлів, виконайте відповідне редагування " "цих файлів і збережіть файли. Після виконання цих дій натисніть кнопку " "«Виконано» або закрийте це діалогове вікно для виконання подальших дій.\n" "\n" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Редагувати файли" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "Пакунок «%1» (ймовірно, щойно завантажений вами) перебуває у поточному " "«чорному» списку, отримання даних щодо його структури заборонено. З " "практичної точки зору це означає, що за об’єктами у цьому пакунку не можна " "буде спостерігати на панелі перегляду об’єктів, не виконуватиметься " "автоматичне доповнення назв об’єктів та показ підказок щодо аргументів " "функцій з цього пакунка.\n" "Типово, пакунки додаються до «чорного» списку, якщо у них міститься значний " "об’єм даних, для завантаження яких знадобиться занадто багато часу. Щоб " "вилучити пакунок зі списку, скористайтеся пунктом «Параметри → Налаштувати " "RKWard → Робочий простір»." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Пакунок додано до «чорного» списку" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Об’єкт «%1» було вилучено з робочого простору або замінено об’єктом іншого " "типу, але його відкрито для редагування. Бажаєте відновити об’єкт?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Відновити об’єкт?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Ви справді бажаєте вилучити об’єкт «%1»? Зараз об’єкт відкрито для " "редагування, його також буде вилучено з редактора. Відновити його неможливо." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Вилучити об’єкт?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Ви справді хочете вилучити об’єкт «%1»? Відновлення вилучених об’єктів не " "передбачено." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Назва" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Мітка" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Тип" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Клас" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "назви рядків" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "new.row" #: core/robject.cpp:120 msgid "Full location:" msgstr "Адреса повністю:" #: core/robject.cpp:122 msgid "Label:" msgstr "Мітка:" #: core/robject.cpp:123 msgid "Type:" msgstr "Тип:" #: core/robject.cpp:126 msgid "Function" msgstr "Функція" #: core/robject.cpp:127 msgid "Usage: " msgstr "Використання: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Блок даних" #: core/robject.cpp:131 msgid "Array" msgstr "Масив" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Матриця" #: core/robject.cpp:135 msgid "List" msgstr "Список" #: core/robject.cpp:137 msgid "Variable" msgstr "Змінна" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Тип даних:" #: core/robject.cpp:140 msgid "Environment" msgstr "Середовище" #: core/robject.cpp:145 msgid "Length: " msgstr "Довжина: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Розмірності: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Класи:" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "Пакунок %1 не вивантажено. Цей пакунок потрібен для роботи RKWard. Якщо вам " "дійсно потрібно вивантажити цей пакунок, зробіть це за допомогою консолі R." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "Здається, пакунок %1 не було завантажено" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Вказану вами назву вже використано або ця назва не є коректною. " "Перейменовано на %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Некоректна назва" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Заповніть ці поля, щоб додати нові стовпчики" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Заповніть ці поля, щоб додати нові рядки" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Нова змінна#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Назви рядків" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Формат" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Рівні" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Внесіть зміни до цих полів, щоб перейменувати змінні." #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "Описова мітка для кожного стовпчика (необов’язкова)." #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Тип даних." #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "Двічі клацніть на цих полях, щоб налаштувати показ даних." #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "Двічі клацніть на цих полях, щоб змінити рівні факторів." #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Вирізати позначене і розташувати його у буфері даних" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Копіювати позначене до буфера обміну даними" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "Вставляє вміст буфера обміну даними у поточну позицію" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Вставити у таблицю" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" "Вставляє вміст буфера обміну даними у поточну позицію без перевищення " "розмірів таблиці" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Вставити до позначеного" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" "Вставляє вміст буфера обміну даними у поточну позицію без перевищення " "розмірів поточного позначеного фрагмента" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" "У редакторі «%1» містяться дублікати стовпчиків. Редагування цієї таблиці " "може бути небезпечним, отже його вимкнено. Ви можете увімкнути редагування, " "якщо вам відомі наслідки ваших дій, але вам варто спочатку виправити таблицю " "і/або створити резервну копію ваших даних." #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "Виявлено дублікати стовпчиків" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [лише читання]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Вставити нову змінну ліворуч" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Вилучити цю змінну" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Вставити новий випадок вище (у %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Вилучити позначені рядки (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Вилучити цей рядок (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Вставлення вмісту буфера…" #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Формат файла: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Для контексту «%1» додатків не визначено" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Всі файли" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Налаштувати пакунки" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Локальні пакунки" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "Встановити / Оновити / Вилучити" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Налаштувати сховища" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "Пакунок %1 у %2" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" "Пакунки з наведеного нижче списку, які ви позначили для вилучення, є " "критичними для працездатності RKWard, отже ці пакунки не буде вилучено. Якщо " "вам конче потрібно вилучити ці пакунки, будь ласка, зробіть це за допомогою " "командного рядка R." #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "Частину пакунків не вилучено" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" "Ви не можете вилучити пакунки з наведеного нижче списку з поточними правами " "доступу. Ці пакунки буде пропущено під час вилучення." #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "Недостатні права доступу" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" "Вилучення пакунків з наведеного нижче списку неможливе з поточними правами " "доступу. Не вилучати ці пакунки чи виконати вилучення з правами доступу " "адміністратора (програма попросить вас вказати пароль адміністратора)?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" "Ви наказали програмі вилучити вказані нижче пакунки. Ви справді хочете, щоб " "було виконано саме цю дію?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "Вилучення пакунків" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "Будь ласка, зачекайте на завершення вилучення позначених пакунків" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "Вилучення пакунків" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Запис до вказаної адреси бібліотеки неможливий" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" "

Запис до вказано вами для встановлення каталогу (%1) неможливий з " "поточними правами доступу користувача.

Виконати встановлення до %2 (ви " "також можете натиснути кнопку «Скасувати» і скористатися кнопкою " "«Налаштувати сховища» для визначення іншого каталогу)?

" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" "

Крім того, якщо у вас є доступ до облікового запису адміністратора " "системи, ви можете скористатися ним для встановлення пакунків або можете " "змінити права доступу до «%1». Вибачте, автоматичне перемикання на обліковий " "запис адміністратора не підтримується у RKWard для Windows.

" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "Встановити до %1" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" "

Крім того, якщо ви маєте права адміністративні права доступу до вашої " "системи, ви можете встановити пакунки від імені користувача root (програма " "попросить вас вказати пароль користувача root).

" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Увійти до облікового запису root" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Будь ласка, зачекайте на завершення встановлення позначених пакунків" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Встановлення пакунків" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "Процес зі встановлення завершив роботу з кодом виходу %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Встановлені пакунки" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Назва" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Версія" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Розташування" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Завантажити" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Вивантажити" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Завантажені пакунки" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Під час спроби завантаження або вивантаження пакунків сталася помилка. Нижче " "наведено докладні повідомлення щодо цієї помилки." #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Помилка під час обробки пакунків" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" "Багато пакунків можна встановити з CRAN (Comprehensive R Archive Network) та " "інших сховищ
(натисніть кнопку «Налаштувати сховища», щоб додати інші " "джерела)" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "Показувати лише пакунки з відповідністю:" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" "

Ви можете обмежити перелік пакунків у списку за допомогою фільтрування " "даних за назвами або заголовками пакунків.

Зауваження: пошук за " "частиною рядка, додайте «*» на початку і/або наприкінці фільтра, наприклад " "«*stat*».

" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "Позначити всі оновлення" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Пакунок, потрібний для роботи основного модуля («%1»), не було знайдено у " "сховищі пакунків. Можливо, назву пакунка вказано з помилками. Також, " "ймовірно, вам слід налаштувати додаткові сховища за допомогою кнопки " "«Налаштувати сховища»." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Пакунок недоступний" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Встановити пакунки до:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" "

Будь ласка, зачекайте на завершення пошуку встановлених та доступних " "пакунків.

Зауваження: для виконання пошуку потрібне " "працездатне інтернет-з’єднання та певний час, особливо, якщо одне або " "декілька сховищ тимчасово недоступні.

" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "Пошук пакунків" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Стан" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" "

Пакунки, позначені за допомогою піктограми RKWard у цьому стовпчику, " "роблять можливості RKWard ширшими, зазвичай у формі додаткових графічних " "вікон.

" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" "

Ви можете визначити пакунки для встановлення або вилучення позначенням " "або зняттям відповідних позначок у цьому стовпчику.

" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "

Назва пакунка.

" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" "

Описова назва пакунка. У поточній версії недоступна для пакунків з " "нелокальних сховищ.

" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "

Встановлена і/або доступна версія пакунка

" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "

Адреса, за якою встановлено/можна отримати пакунок

" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "Пакунки з оновленнями" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" "Пакунки, які можна оновити. Серед цих пакунків можуть бути зібрані у новішій " "версії R." #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "Нові пакунки" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "Встановлені пакунки" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Встановити" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Вилучити" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Контекст:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "Виявлено файл даних для відновлення після аварії" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Показати у навігаторі файловою системою" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "Відновити" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" "

Здається, нещодавно RKWard завершив роботу у аварійному режимі. Вибачте, " "будь ласка! Але не все втрачено: якщо все склалося вдало, ваші дані було " "вчасно збережено.

" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" "

У %2 зберігається %1 файл резервної копії робочого простору, " "найсвіжіший має назву %3.

" msgstr[1] "" "

У %2 зберігається %1 файли резервних копій робочого простору, " "найсвіжіший має назву %3.

" msgstr[2] "" "

У %2 зберігається %1 файлів резервний копій робочого простору, " "найсвіжіший має назву %3.

" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" "

Бажаєте відкрити цей файл зараз? Зауваження: програма запитуватиме " "вас про це під час наступного запуску RKWard, аж доки файл не буде вилучено " "або перейменовано вручну.

" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Виберіть один або декілька:" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Виберіть одне:" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Що ви бажаєте зробити?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Почати з порожнього робочого простору" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Почати з порожньої таблиці" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "Завантажити робочий простір з поточного каталогу" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" "Завантажити робочий простір з поточного каталогу:\n" "%1" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Завантажити вже створений робочий простір:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<<Відкрити інший файл>>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Завжди робити це під час запуску" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" "Після запуску (та завантаження вказаного робочого простору, якщо це " "доречно), виконати вказаний код R." #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Докладність діагностичних повідомлень (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Маска компонентів, діагностику яких слід виконати (див. debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Зневадник (параметри діагностики слід вказати у одинарних лапках ('') разом " "з командою)" #: main.cpp:125 msgid "R workspace file to open" msgstr "Файл робочого простору R, який слід відкрити" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Графічна оболонка до мови статистичних обчислень R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Лідер проекту, основний розробник" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "Розробник мовою C++ від 2004 до 2007 року" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "Багато додатків, пропозиції, журнал креслень" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "Багато додатків, пропозиції, пакунок rkwarddev" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Багато додатків, пропозиції, вивчення потреб користувачів, переклади" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Учасники розробки (за абеткою)" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Корисні коментарі та обговорення" #: main.cpp:135 msgid "Plugins and patches" msgstr "Додатки і латки" #: main.cpp:136 msgid "New website" msgstr "Новий вебсайт" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "Фільтр Годріка-Прескота, переклад іспанською" #: main.cpp:138 msgid "A cool icon" msgstr "Чудова піктограма" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "" "Логотип RKWard, багато пропозицій, допомога у правильній побудові повідомлень" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Декілька цінних коментарів, підказки і латки" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Переклад, пропозиції, додатки" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Багато коментарів, корисні пропозиції та звіти щодо вад" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Переклад німецькою, звіти щодо вад" #: main.cpp:144 msgid "Some patches" msgstr "Декілька латок" #: main.cpp:145 msgid "patches and helpful comments" msgstr "латки та корисні коментарі" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Всі інші учасники листування у rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Вибачте, якщо вашого імені немає у списку. Будь ласка, повідомте про це нам, " "і ми додамо його." #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Вирівнювання" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Типове" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Ліворуч" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Праворуч" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Десяткові знаки" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Типове значення" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "За потреби" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Фіксована точність:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Параметри форматування для «%1»" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Значеннями номерів рівнів можуть бути лише послідовні цілі числа, починаючи " "з 1 (стовпчик номерів призначено лише для читання). Щоб вилучити рівні з " "кінця списку, просто встановіть для них порожнє значення." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Мітки рівнів/значення для «%1»" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Назва файла" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Додати" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Вгору" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Вниз" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" "

Зауваження: зміни набудуть чинності лише після перезапуску " "RKWard.

" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Налаштування типових значень" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Всі середовища" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Об’єкти з дочірніми об’єктами" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Змінні" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Функції" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Приховані об’єкти" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Показати об'єкти" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Показати поля" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" "Під час обробки отримано повідомлення щодо помилок і/або попередження. " "Нижче наведено ці повідомлення." #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Виведення" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Виведення:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Помилки і попередження" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Помилки і попередження:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Скасувати" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "Змінити" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "Батьківський об’єкт: %1" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "Виберіть батьківський об’єкт" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Перезаписати? (Об’єкт з вказаною назвою вже існує)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Перезаписати?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Спеціальне вставлення…" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Режим вставлення" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Одинарний рядок" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Вектор" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Роздільник полів" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Табуляція" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Кома" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Один пробіл" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "Будь-який пропуск" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Інше:" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Лапки" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "Не брати значення у лапки" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Автоматично" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Брати у лапки всі значення" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Перетворення" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Перевернути горизонтально" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Перевернути вертикально" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Поміняти місцями рядки і стовпчики" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "Вставити NA, де потрібно" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "Копіювати рядки до виведення" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Виконати поточний рядок" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Виконати позначений фрагмент" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Виконати все" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "Довідник з &функцій" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Не вдалося відкрити файл для читання" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Помилка під час обробки файла XML. Повідомлення про помилку: «%1» у рядку " "«%2», позиція «%3». Нижче може бути наведено подальші помилки." #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Спроба отримання дочірнього об’єкта некоректного елемента" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Мало бути вказано лише один елемент «%1». Виявлено — %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "Атрибут «%1» не вказано. Припускаємо «%2»" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "Некоректне значення атрибута. Можна використовувати лише одне зі значень " "«%1»." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Некоректне значення атрибута. Можна використовувати лише цілі числа." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "" "Некоректне значення атрибута. Можна використовувати лише дійсні числа." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Некоректне значення атрибута. Можливими значеннями є лише «%1» і «%2»." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "Спроба отримання вмісту некоректного елемента" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "XML-обробка «%1» " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(без мітки)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Вами зроблено спробу викликати додаток з назвою «%1», але програмі цей " "додаток невідомий. Ймовірно, вам варто завантажити відповідну карту додатків " "(Параметри → Налаштувати RKWard → Додатки) або, можливо, додаток було " "перейменовано." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "Такого додатка не виявлено" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" "Помилковий формат серіалізації під час спроби викликати додаток «%1». Будь " "ласка, повідомте про це команду розробників RKWard (Довідка -> Про RKWard -> " "Автори)." #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "Помилковий формат серіалізації" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "Не всі визначені параметри може бути застосовано. Найімовірнішою причиною є " "те, що об’єктів R більше немає у вашому поточному робочому просторі." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "Не всі параметри можна застосувати" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "З цими параметрами автонадсилання додатка неможливе." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "Не вдалося надіслати" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "Цей об’єкт має розмірність %1, мало бути використано розмірність %2." #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "Цей об’єкт має довжину %1, мінімальною довжиною мала бути %2." #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "Цей об’єкт має довжину %1, максимальною довжиною мала бути %2." #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "Здається, цей об’єкт не належить до жодного з класів %1." #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" "Типом даних цього об’єкта є %1, дозволеними типами об’єктів є " "%2." #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Виберіть один з варіантів:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Вказати модель" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Вся модель" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Лише основні ефекти" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Нетипова модель:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Основні ефекти" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Рівень" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Елемент" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Введіть текст" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "Додати рядок або елемент" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "Вилучити рядок або елемент" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Вкажіть назву файла" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Вибрати" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Зберегти до:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "my.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Введіть значення:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Перегляд" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "У поточній версії можливість попереднього перегляду не передбачено" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Оновлення перегляду" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "Попередження або помилки:" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Попередній перегляд вимкнено" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Немає потреби у оновленні перегляду" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Попередній перегляд ще неможливий" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Під час спроби обробки опису цього додатка («%1») сталася помилка. З " "подробицями можна ознайомитися у стандартному виведені даних." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Не вдалося створити додаток" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Надіслати" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Закрити" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Автоматично закрити" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Довідка" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Скористатися майстром" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Код" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Повторити запуск" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Обробка. Зачекайте." #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Нижче наведено команди, що відповідають внесеним вами змінами. Натисніть " "«Надіслати», щоб наказати програмі виконати команди." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Далі >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Назад" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Використовуючи діалогове вікно" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Змінна:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "

Цей об’єкт не можна використовувати тут з таких причин:

" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Працює" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Скасовано" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Стос команд" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Ланцюжок команд" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Закрито" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Очікування" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Команда" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Опис" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "Запуск R" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t— Сталася невизначена помилка, обробку якої ще не передбачено у RKWard. " "Ймовірно, RKWard не працюватиме належним чином. Будь ласка, перевірте " "визначені вами налаштування.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" "

Під час спроби запуску основного модуля R виникли проблеми. Було " "повідомлено про такі помилки:

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Помилка під час запуску R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" "Команда з основного модуля R намагається змінити кодування символів. Хоча у " "RKWard передбачено підтримку зміни кодування, і програма намагатиметься " "виправити локаль, результатом цієї дії можуть бути певні помилки, якщо зараз " "відкрито якісь вікна. Крім того, цю можливість ще недостатньо перевірено, " "отже вам варто зберегти ваш робочий простір до зміни кодування.\n" "Якщо відкрито вікно редагування даних, рекомендуємо вам спочатку закрити ці " "вікна (автоматичне визначення може бути реалізовано у майбутніх версіях " "RKWard). Щоб уникнути проблем, будь ласка, натисніть кнопку «Скасувати», " "потім закрийте вікна з даними, збережіть робочий простір і повторіть спробу." #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Зміна локалі" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "Основним модулем R виявлено, що з метою виконання поточного завдання " "потрібен пакунок «%1», який ще не встановлено. Програма відкриє вікно " "керування пакунками, за допомогою якого ви зможете знайти і встановити " "потрібний пакунок." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Потрібен пакунок «%1»" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "Основний модуль R надіслав запит щодо даних" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" "\n" "Роботу основного модуля R буде негайно завершено. Це означає, що ви не " "зможете скористатися жодними командами, які виконуються цим модулем, тобто " "ви, ймовірно, не зможете скористатися жодними командами, навіть не зможете " "зберегти робочий простір (якщо вам поталанило, R вже зберіг його). Однак ви " "можете зберегти всі відкриті командні файли, виведені дані та скопіювати " "дані з відкритих вікон редагування даних. Щойно всі потрібні дані буде " "збережено, закрийте вікно RKWard.\n" "Оскільки подібна ситуація є результатом явної помилки, будь ласка, повідомте " "про неї листом на адресу rkward-devel@lists.sourceforge.net. Повідомте нам " "про дію, яку ви намагалися виконати, коли сталася помилка. Вибачте за " "помилку!" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "Рушій R припинив роботу" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" "Під час спроби встановлення зв’язку з процесом основного модуля сталася " "помилка. Мало бути отримано лексему «%1», отримано — «%2»." #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" "Невідповідність версій під час спроби встановлення зв’язку з процесом " "основного модуля. Оболонка має версію «%1», основний модуль — «%2».\n" "Будь ласка, виправте проблему зі встановленими компонентами." #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "Роботу рушія R було завершено з таким повідомленням щодо стану: %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "У рушії R сталася критична помилка:\n" "%1" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Повідомлення від основного модуля R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "Запитання від основного модуля R" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- Бібліотеку R «rkward» або взагалі не можна завантажити, або ця " "бібліотека має помилкову версію. Це може призвести до будь-яких помилок, від " "неможливості скористатися певними можливостями до повної непрацездатності. " "Найімовірнішою причиною є те, що під час встановлення останньої версії файли " "було встановлено у інші каталоги. Іншим джерелом помилок можуть бути залишки " "попередньої версії, які не було вилучено.

\t\t

Зараз вам слід " "завершити роботу RKWard і виправити помилки у встановленій версії. " "Довідкові матеріали, які допоможуть в усуванні негараздів, можна знайти тут.

\n" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- Під час спроби встановлення зв’язку з R виникли проблеми. " "Найімовірніше, це вказує на помилки у встановленій версії.

\t\t" "

Зараз вам слід завершити роботу RKWard і виправити помилки у " "встановленій версії. Довідкові матеріали, які допоможуть в усуванні " "негараздів, можна знайти тут.

\n" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" "Не вдалося завантажити компонент «katepart». RKWard не зможе працювати без " "katepart, отже зараз завершить роботу. Будь ласка, встановіть katepart, " "потім повторіть спробу запуску програми." #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "Не вдалося виявити компонент «katepart»" #: rkconsole.cpp:122 msgid "R Console" msgstr "Консоль R" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Синтаксична помилка\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" "*.Rhistory|файли журналів R (*.Rhistory)\n" "*|всі файли (*)" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "Виберіть файл журналу команд, який слід завантажити" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "Виберіть назву файла журналу команд" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Перервати команду, що виконується" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Копіювати позначене без обробки" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "Копіювати лише команди" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Консоль друку" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "Імпортувати журнал команд…" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "Експортувати журнал команд…" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" "Ви наказали RKWard передавати команди редагування скриптів за допомогою " "консолі R, але у консолі виконується інша команда. Бажаєте додати команду " "редагування до переліку команд у консолі чи спочатку звільнити консоль від " "виконання команд? Натисніть кнопку «Скасувати», якщо ви не хочете виконувати " "команду редагування зараз." #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "У консолі R виконується завдання" #: rkconsole.cpp:940 msgid "Append" msgstr "Дописати" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "Скасувати, потім надіслати" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

RKWard не вдалося взагалі знайти файли ресурсів або було знайдено лише " "застарілу версію цих файлів. Найімовірнішою причиною є те, що не вдалося " "встановити файли у належному місці під час останнього встановлення. Це може " "призвести до будь-яких помилок, від неможливості скористатися певними " "можливостями до повної непрацездатності.

Зараз вам слід завершити " "роботу RKWard і виправити помилки у встановленій версії. Довідкові " "матеріали, які допоможуть в усуванні негараздів, можна знайти тут.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Помилки у встановленій версії" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" "Встановлену вами версію KDE налаштовано на використання «рідних» діалогових " "вікон роботи з файлами системи. Відомо, що це може іноді призводити до " "помилок у роботі, тому ми рекомендуємо вимкнути «рідні» діалогові вікна " "роботи з файлами.\n" "Чи слід вимкнути «природні» діалогові вікна роботи з файлами у RKWard?" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "Потенційна проблема з вашими налаштуваннями" #: rkward.cpp:221 msgid "Yes, disable" msgstr "Так, вимкнути" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "Ні, використовувати «рідні» діалогові вікна" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Налаштування додатків…" #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Потрібні додатки: ви можете керувати додатками за допомогою пункту меню " "«Параметри -> Налаштувати RKWard».\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" "Виявлено і автоматично задіяно нові пакунки додатків RKWard (список наведено " "нижче). Щоб вимкнути певні з пакунків додатків, скористайтеся сторінкою " "«Параметри → Налаштувати RKWard → Додатки»." #: rkward.cpp:308 msgid "New plugins found" msgstr "Знайдено нові додатки" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "Параметри копіювання" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Робочий простір" #: rkward.cpp:374 msgid "Files" msgstr "Файли" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Завдання з черги" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "Області діагностики" #: rkward.cpp:395 msgid "Debugger Console" msgstr "Консоль діагностики" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Набір даних" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Створює новий порожній набір даних і відкриває його для редагування" #: rkward.cpp:416 msgid "Script File" msgstr "Файл скрипту" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "Відкрити файл скрипту R…" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "Повторно відкрити файл скрипту R" #: rkward.cpp:430 msgid "Import Data" msgstr "Імпортувати дані" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Імпортувати дані у одному з підтримуваних форматів" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "Відкрити робочий простір…" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Відкриває вже створений документ" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "Повторно відкрити робочий простір" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Відкриває недавно використаний файл" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Зберегти робочий простір" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Зберігає поточний документ" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Зберегти робочий простір як" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Зберігає робочий простір до файла з іншою назвою…" #: rkward.cpp:453 msgid "Quits the application" msgstr "Завершити роботу програми" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "Перервати виконання всіх команд" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "Скопіювати команди до виведення…" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "Керування пакунками R…" #: rkward.cpp:477 msgid "Close All Data" msgstr "Закрити всі дані" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Закрити всі відкриті редактори даних" #: rkward.cpp:483 msgid "Close All" msgstr "Закрити всі" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Від’єднати" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Дій для поточної панелі перегляду не передбачено]" #: rkward.cpp:499 msgid "Open..." msgstr "Відкрити…" #: rkward.cpp:509 msgid "Import" msgstr "Імпортувати" #: rkward.cpp:512 msgid "Create..." msgstr "Створити…" #: rkward.cpp:519 msgid "Save..." msgstr "Зберегти…" #: rkward.cpp:523 msgid "Export" msgstr "Експортувати" #: rkward.cpp:616 msgid "Ready." msgstr "Виконано." #: rkward.cpp:620 msgid "Current working directory" msgstr "Поточний робочий каталог" #: rkward.cpp:698 msgid "Exiting..." msgstr "Вихід…" #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Завершення роботи RKWard: бажаєте зберегти робочий простір?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Зберегти робочий простір?" #: rkward.cpp:706 msgid "Don't quit" msgstr "Не виходити" #: rkward.cpp:736 msgid "New dataset" msgstr "Новий набір даних" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Вкажіть назву нового набору даних" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Відкриття робочого простору…" #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "Виберіть робочий простір для відкриття…" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Бажаєте зберегти поточний робочий простір?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "Рушій R виконує завдання." #: rkward.cpp:867 msgid "The R engine is idle." msgstr "Рушій R не працює." #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "Ініціалізація рушія R." #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Відкрити файли скриптів" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Робочий простір без назви]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "summary (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "print (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "str (x)" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "Об’єкт було вилучено!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Переглядач об’єктів: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "Об’єкт зазнав змін. Вам варто натиснути кнопку «Оновити»" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Оновити" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Отримання даних. Зачекайте." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Натисніть «Оновити», щоб отримати дані" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Готово" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "Модулем QtScript повідомлено про таку помилку:\n" "%1" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Помилка роботи зі скриптами" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Помилка роботи зі скриптами: %1\n" "Зворотне трасування:\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "Не вдалося знайти файл «%1» (потрібен «%2»). Будь ласка, перевірте, чи " "належним чином встановлено програму." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" "Під час обробки коду скрипту виявлено помилку.\n" "Файл: %1\n" "Рядок: %2\n" "Повідомлення: %3." #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" "error ('Не вдалося знайти файл «%1» (потрібен «%2»). Будь ласка, перевірте, " "чи належним чином встановлено програму.');\n" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Приготувати\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Обчислити\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Надрукувати результат\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Параметри" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" "Параметри, позначені символом (*), набудуть чинності лише після перезапуску " "RKWard" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Автозавершення коду" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Увімкнути автодоповнення коду" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "Мінімальна кількість символів, яка вмикає автодоповнення" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "Час очікування (у мілісекундах) перед вмиканням автодоповнення" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "Увімкнути підказки щодо аргументів функцій" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "Автозбереження" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "Інтервал автозбереження (у хвилинах)" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "Зберігати файл автозбереження після збереження вручну" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "Відкриття файлів скриптів" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "Кількість скриптів у списку повторного відкриття файлів (*)" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" "

Кількість нещодавніх файлів, назви яких слід пам’ятати (буде показано у " "підменю «Повторно відкрити файл скрипту R»).

" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "Фільтри файлів скриптів R (відокремлені пробілами)" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" "

Список фільтрів (суфіксів назв файлів) для файлів, які слід вважати " "файлами скриптів R. Найважливішим у встановленні цих фільтрів є те, що " "файли, які відповідатимуть одному з цих фільтрів, завжди відкриватимуться з " "підсвічуванням синтаксичних конструкцій R.

Фільтри слід вказувати з " "врахуванням регістру символів.

" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Редактор скриптів" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Завантаження або збереження журналу команд" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Максимальна довжина списку журналу команд" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Не обмежено" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Максимальна кількість абзаців або рядків для показу у консолі" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Виконувати команди з редактора скриптів за допомогою консолі" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Додавати ці команди до журналу консолі" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "Не додавати" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Додавати, лише якщо у один рядок" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Додавати всі команди" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Команди у журналі типово розрізняються за регістром символів" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Консоль" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" "Ці параметри призначено лише для діагностики. Цілком безпечно не " "змінювати значення цих параметрів. Крім того, значення параметрів буде " "застосовано лише до поточного сеансу, програма не зберігатиме ці значення " "між сеансами." #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Докладність діагностичних повідомлень" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Прапорці діагностики" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Час, відведений на виконання команди" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Зауваження: діагностичні повідомлення записано до %1" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Діагностика" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Каталог, у якому rkward може зберігати файли (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Дія після запуску (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" "Завантажити файл .RData з поточного каталогу, якщо такий файл виявлено " "(параметр «--restore»)" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Запитувати, який файл відкрити" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Показувати діалогове вікно вибору (типово)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Показувати довідку з RKWard після запуску" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Компонування робочого простору (тобто розташування вікон скриптів, даних та " "довідки) може бути збережено (або завантажено) окремо для кожного з робочих " "просторів R або для всіх робочих просторів одразу. Якому з варіантів ви " "надаєте перевагу?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Зберігати і відновлювати окреме компонування R під час збереження та " "завантаження R" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Зберігати і відновлювати загальне компонування (зберігати наприкінці сеансу " "RKWard, відновлювати на початку наступного сеансу)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Не зберігати і не відновлювати компонування робочого аркуша" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" "Під час завантаження робочого простору змінити робочий каталог на каталог " "робочого простору." #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Попереджати, якщо об’єкти, які редагуються, містять більше за вказану " "кількість полів (0 — не обмежувати):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Необмежено" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Фокусування у вікні багатодокументного інтерфейсу" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Клацнути, щоб отримати фокус" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Фокус слідує за вказівником" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Загальне" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "Типовий розмір вікна" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "Типова ширина (у дюймах):" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "Типова висота (у дюймах)" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "Використовувати вікно KDE для пристроїв друку (якщо доступне)" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "Журнал пристроїв відтворення" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "Максимальна кількість записаних креслень:" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "Максимальний об’єм окремого креслення (у кБ):" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "Екранна графіка" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Які об’єкти має бути типово показано?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Показати приховані об’єкти" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Показати всі середовища" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Показати об’єкти з дочірніми об’єктами" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Показувати функції" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Показувати змінні" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Які стовпчики слід типово показувати?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Поле мітки" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Поле типу" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Поле класу" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Ніколи не визначати структуру для таких пакунків:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Додати виключення" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" "Додайте назву пакунка, для якого не слід отримувати дані щодо структури" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "Копіювання команд на панель виведення" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "Команди, введені у консолі" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "Команди, відданні за допомогою меню «Виконання»" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "Команди, що надходять з діалогових вікон і додатків" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "Також копіювати дані, виведені у відповідь на команди" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Параметри вікна виведення" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "показувати вікно у разі виведення" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "піднімати вікно у разі виведення" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Графіка" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Формат файла" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "<Типовий>" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "Якість JPG" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Ширина:" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Висота:" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "У деяких додатках передбачено два інтерфейси: інтерфейс майстра і " "традиційних діалоговий інтерфейс. Якщо доступними є два інтерфейси, якому з " "них слід надати перевагу?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Перевага діалогових вікон" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Перевага рекомендованого інтерфейсу" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Перевага майстрів" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "Показ синтаксису R (у вікнах)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Типово показаний код" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Типова висота панелі коду (у пікселях)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Виберіть файли .pluginmap" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Додатки" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Виберіть файл .pluginmap" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Наведені нижче параметри здебільшого впливають на роботу R у консолі. " "Зазвичай, немає потреби у зміні цих параметрів." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Показувати попередження" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Придушити попередження" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Показувати попередження потім (типово)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Показувати попередження негайно" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Перетворювати попередження на помилки" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Символ відокремлення дробової частини (лише для друку)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Ширина виведення (у символах)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Максимальна кількість пунктів у виведених даних" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Максимальна довжина попереджень/повідомлень про помилки" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Зберігати коментарі у функціях" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "ТАК (типово)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "НІ" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Зберігати коментарі у пакунках" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "ТАК" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "НІ (типово)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Максимальний рівень вкладеності виразів" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Типова кількість десяткових знаків після коми у print ()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Перевіряти межі векторів (попереджати)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Команда редактора" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "Команда поділу на сторінки" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" "Подальші додаткові команди, які слід виконувати під час кожного сеансу" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "R-модуль" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "Дзеркало сховища CRAN (не вказуйте, якщо його слід визначати під час кожного " "сеансу):" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Виберіть дзеркало" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "Додаткові сховища пакунків (звідки слід отримувати бібліотеки)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Архів отриманих пакунків" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "Зібрати пакунки з початкових кодів" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" "Зібрати пакунки з початкових кодів (на цій платформі налаштовування не " "передбачено)" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" "Розташування бібліотек R (каталог, до якого слід локально встановлювати " "бібліотеки)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Зауваження: програма завжди використовуватиме типові параметри запуску, " "окрім вказаних вами у цьому списку адрес." #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Додавання каталогу бібліотеки R" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Додати сховище" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Додати адресу нового сховища" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "Пакунки R" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Виберіть дзеркало CRAN" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Значення параметрів буде застосовано лише до нових команд. Вже оброблені " "команди залишаться видимими або невидимими." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "завжди показувати команду" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "завжди показувати результат" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "показати помилки" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "показати/підняти вікно" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Команди користувача" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Команди, створені додатками" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Команди програми" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Команди синхронізації" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "Максимальна кількість абзаців або рядків для показу у журналі команд" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Журнал команд" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Долучити до основного вікна" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Налаштувати основний модуль R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Призупинити виконання" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Скасувати позначені команди" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Деякі з команд, які ви бажаєте скасувати, позначено як команди синхронізації " "(літера «S» у стовпчику типів). Скасування таких команд може призвести до " "втрати даних. Виконання цих команд не буде скасовано." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Деякі з команд не скасовано" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Поновити виконання" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "Активні виклики" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "Не перебуває у контексті зневадника" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" "Поточний виклик: %1
Середовище: %2
Локальні " "об’єкти: %3" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "Редактор скриптів" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "Вставити розрив рядка і запустити" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Виконати блок" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Вважати позначене блоком" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Зняти позначення блоку" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "Перейти до каталогу скрипту" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Змінити робочий каталог на каталог цього скрипту" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "Зберегти скрипт…" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "Зберегти скрипт як…" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [змінено]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "" "До документа «%1» внесено зміни. Закрити його без збереження цих змін?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Файл не збережено" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" "Під час спроби створення резервної копії файла скрипту «%1» у автоматичному " "режимі сталася помилка:" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Без назви" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (активний)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (не використовується)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Неповна інструкція.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Синтаксична помилка.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "Під час спроби виконання команди сталася невизначена помилка.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Налаштувати" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "Далі" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "Вийти" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" "

Продовжувати, аж доки не буде виявлено виклику цієї функції (або іншої " "діагностичної інструкції, яка йому передуватиме)

Зауваження: " "іноді пункту у коді для функції, що викликається, ніколи не досягається, " "оскільки виклик є останнім кроком у функції, яка здійснює виклик. У таких " "випадках поведінка програми є тотожною до поведінки у відповідь на команду " "«Продовжити».

" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "Продовжити" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" "Доки працює зневадник, це вікно не можна закривати. Якщо вам просто треба " "позбутися від цього вікна, натисніть кнопку «Скасувати» у правій частині " "цього вікна." #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Знайти:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Поля:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Всі" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Всі, крім ключових слів" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Ключові слова" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Пакунок:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "З врахуванням регістру" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Нечітка відповідність" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Знайти" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Пошук у довідці" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Знайти файл довідки у форматі HTML для %1" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "Всі встановлені пакунки" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "Всі завантажені пакунки" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Довідки щодо «%1» не знайдено. Можливо, відповідний пакунок не встановлено " "або не завантажено, крім того, ви могли помилитися під час введення команди. " "Кращі результати можна отримати за допомогою пункту меню «Довідка → Шукати у " "довідці з R»." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Довідки не знайдено" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Тема" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Пакунок" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "С&порожнити панель виведення" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Освіжити панель виведення" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "Виведення %1" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Надрукувати виведене" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Експортувати сторінку у форматі HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "Вікно виведення даних" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Надрукувати сторінку" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Зберегти виведене у форматі HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

Не вдалося виявити файл виведення даних RKWard

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Сторінки не існує або код сторінки пошкоджено" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "С&порожнити панель виведення?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Без назви" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

Не знайдено довідкового повідомлення

\n" "

Сторінку довідки для цього компонента ще не було написано (або її дані " "було пошкоджено). Допоможіть нам у створенні цієї сторінки.

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Скористайтеся %1" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Резюме" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Використання" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Параметри графічного інтерфейсу" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Елемент графічного інтерфейсу без назви" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Пов’язані функції і сторінки" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Технічні подробиці" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

На цій сторінці:

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "Довідка R щодо «%1»" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "ПОМИЛКОВЕ ПОСИЛАННЯ" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "Довідка щодо %1" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "Налаштувати %1" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Долучити" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "Розташування" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Ліва бічна панель" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Права бічна панель" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Верхня бічна панель" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Нижня бічна панель" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "Не показано на бічній панелі" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Довідка з R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Шукати у довідці з R" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Довідка з RKWard" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Показати зміст довідки з R" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Показати/Підняти вікно пошуку у довідці R" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Показати довідку з RKWard" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Попереднє вікно" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Наступне вікно" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "Показати/Сховати «%1»" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Задіяти панель перегляду документів" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Показати &виведені дані" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "З технічних причин у наступному діалоговому вікні можна налаштувати " "клавіатурні скорочення лише для тих частин RKWard, які зараз задіяно.\n" "\n" "Тому, якщо вам потрібно налаштувати клавіатурні скорочення, наприклад, для " "використання у редакторі скриптів, вам слід відкрити вікно редактора " "скриптів і задіяти його." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Примітка" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "Додатки RKWard" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "З технічних причин у наступному діалоговому вікні можна налаштувати кнопки " "панелі інструментів лише для тих частин RKWard, які зараз задіяно.\n" "\n" "Тому, якщо вам потрібно налаштувати кнопки інструментів, наприклад, для " "використання у редакторі скриптів, вам слід відкрити вікно редактора " "скриптів і задіяти його." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "---Опис проблеми---\n" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" "Будь ласка, подайте коротке резюме проблеми:\n" "###Тут вкажіть резюме (англійською)###\n" "\n" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Що саме (будь ласка, докладно) ви робили безпосередньо перед тим, як " "зіткнулися з проблемою?\n" "###Тут вкажіть резюме (англійською)###\n" "\n" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" "Якщо ви повторюєте вказані вище дії, чи повторюється проблема (ні, іноді, " "завжди?\n" "###Тут вкажіть резюме (англійською)###\n" "\n" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" "Якщо можливо: якщо дія виконується у сеансі R, поза межами RKWard, проблема " "відтворюється?\n" "###Тут вкажіть резюме (англійською)###\n" "\n" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Чи є у вас будь-які інші дані, які можуть допомогти у вирішенні цієї " "проблеми? Зокрема, якщо можна, чи можете ви надати зразок даних і зразок " "коду R для відтворення проблеми?\n" "###Тут вкажіть резюме (англійською)###\n" "\n" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" "Зачекайте, доки буде зібрано дані щодо вашої системи.\n" "Якщо основний модуль R завершив роботу або не відповідає на сигнали, вам " "варто натиснути кнопку «Скасувати» і пропустити цей крок." #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "Збирання даних щодо налаштувань" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Сповіщення про вади у RKWard" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" "

Де можна повідомити про вади і побажання?

Будь ласка, " "надсилайте ваші звіти щодо вад та побажання на адресу %1 " "або надішліть повідомлення на адресу %2.

Які дані я маю надати?

Будь " "ласка, скопіюйте наведені нижче повідомлення і вкажіть короткі відповіді на " "вказані питання.

" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" "Вами створено нове вікно графічного пристрою у R. Зазвичай, RKWard " "намагається виявити такі вікна з метою встановлення над ними контролю та " "додавання смужки меню. Втім, у цій збірці RKWard для Mac OS X такого " "перебирання контролю не передбачено. Докладніше про це на сторінці " "http://p.sf.net/rkward/mac" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Не вдалося вбудувати вікно X11 R" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Вами створено вікно пристрою X11 у R. Зазвичай, RKWard намагається виявити " "такі вікна, щоб керувати ними і додавати у них панель меню. Але цього разу " "RKWard не вдалося визначити тип вікна і вбудувати до нього потрібні " "елементи.\n" "Якщо вами створено вікно на іншому екрані або дисплеї X11, так і мало бути. " "Ймовірно, вам варто змінити параметри options(\"display\").\n" "Якщо вікно X11 було відкрито на тому самому екрані R, що і це повідомлення, " "можливості RKWard потребують певного вдосконалення. Будь ласка, надішліть " "нам повідомлення з подробицями щодо налаштувань та команд на адресу rkward-" "devel@lists.sourceforge.net, щоб ми могли виправити проблему у майбутніх " "версіях RKWard." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Сталася помилка" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "Вікно графічного пристрою" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" "Поточне вікно є занадто великим для показу його на екрані цілком. Якщо таке " "трапляється регулярно, вам варто змінити типові розміри графічного вікна за " "допомогою пункту «Параметри → Налаштувати RKWard → Екранна графіка»." #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "Велике вікно" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "Закриття пристрою (збереження журналу)" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "Вимикання пристрою з номером %1" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Вказати фіксовані розміри" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Ширина" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Висота" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Задіяти графічний пристрій з номером %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "" "Скопіювати дані з графічного пристрою з номером %1 на панель виведення" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Надрукувати дані графічного пристрою з номером %1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Вкажіть об’єкт R" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "Вкажіть назву об’єкта R, до якого слід зберегти графік" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Зберегти дані графічного пристрою з номером %1 до об’єкта «%2»" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Здублювати графічний пристрій з номером %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "Завантажити наступне креслення на пристрій з номером %1" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "Завантаження креслення з журналу" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "Завантажити попереднє креслення на пристрій з номером %1" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "Завантажити перше креслення на пристрій з номером %1" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "Завантажити останнє креслення на пристрій з номером %1" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "Завантажити креслення %1 до пристрою з номером %2" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "Дописати це креслення до журналу (пристрій з номером %1)" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "Вилучити поточне креслення з журналу (пристрій з номером %1)" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" "Буде спорожнено журна креслень для всіх вікон пристроїв, не лише цього " "вікна. Якщо ви цього не бажаєте, натисніть кнопку «Скасувати», розташовану " "нижче." #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "Спорожнити журнал креслення" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "Властивості креслення (пристрій з номером %1)" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "<Незбережене креслення>" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Область малювання підбирається за розмірами вікна" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Фіксований розмір у 500⨯500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Фіксований розмір у 1000⨯1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Фіксований розмір у 2000⨯2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Встановити вказаний фіксований розмір…" #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "Попереднє креслення" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "Перше креслення" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "Наступне креслення" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "Останнє креслення" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "Перейти до креслення" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "Додати до цього креслення" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "Вилучити це креслення" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "Спорожнити журнал" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "Властивості креслення" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Зробити активним" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Копіювати до виведення" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Зберегти як об’єкт R…" #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Здублювати" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "Адреса, за якою здійснюється перехід («%1»), не є адресою локального файла " "або є адресою файла, підтримки типу якого не передбачено у RKWard. Бажаєте " "відкрити дані у типовій програмі для відкриття даних цього типу?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Відкрити у типовій програмі?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "Не вдалося відкрити «%1»" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Не вдалося відкрити файл команд" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Ви наказали програмі відкрити для редагування об’єкт «%1», який є занадто " "великим (%2 полів). RKWard не оптимізовано для обробки дуже великих об’єктів " "у вбудованому редакторі даних. Відкриття цього об’єкта призведе до значного " "споживання пам’яті і, залежно від вашої системи, може значно уповільнити " "роботу системи. Загальною порадою щодо редагування таких великих об’єктів є " "використання командного рядка або поділ об’єкта на фрагменти до редагування. " "З іншого блоку, якщо система має значних обсяг оперативної пам’яті або дані " "є достатньо простими (числові дані обробляти простіше за фактори), " "редагування може виявитися безпроблемним. Налаштувати параметри показу цього " "повідомлення (або зовсім його вимкнути) можна за допомогою сторінки " "«Параметри → Налаштувати RKWard → Загальне».\n" "Почати редагування об’єкта?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Щодо редагування дуже великого об’єкта" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Зберегти компонування робочого аркуша" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Відновити компонування робочого аркуша" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Вікно ліворуч" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Вікно праворуч" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "Перегляд робочого простору R" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "Робочий простір R" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Пошук у довідці" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Змінити" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Переглянути" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Перейменувати" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Копіювати до нового символу" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Копіювати до .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Вилучити" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Вивантажити пакунок" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Завантажити або вивантажити пакунки" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Копіювати об’єкт" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Вкажіть назву об’єкта для копіювання" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Об’єкт з назвою «%1» вже існує у GlobalEnv. Створено копію з назвою «%2»." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Назву вже використано" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Перейменувати об'єкт" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Вкажіть нову назву" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Нефункції" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Показати всі середовища" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Показати приховані об’єкти" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "З&міни" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Файл" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "П&ерегляд" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Виконання" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Створити" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Імпортувати" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "&Експортувати" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Робочий простір" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Вікна" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "Ви&користання" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "П&араметри" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Довідка" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "Пр&истрій" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "&Журнал" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "&Вікно" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Інструменти" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Юрій Чорноіван, ,Launchpad Contributions:,RKWard Team,Yuri " "Chornoivan,yurchor, ,Launchpad Contributions:,RKWard Team,Yuri " "Chornoivan,yurchor" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "yurchor@ukr.net,,,rkward-" "tracker@lists.sourceforge.net,yurchor@gmail.com,,,,rkward-" "tracker@lists.sourceforge.net,yurchor@gmail.com," rkward-0.6.1/po/cs.po0000644000175000017500000040763012124345424013756 0ustar thomasthomas# translation of de.po to # translation of rkward.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Stefan Rodiger , 2006. # Stefan Joerg Roediger , 2006. # SJR , 2006, 2007. # Thomas Friedrichsmeier , 2006, 2007. # Stefan Roediger , 2007. # Stefan Rödiger , 2007, 2009. # Pavel Fric , 2009, 2010. # Pavel Fric , 2010, 2011. # Pavel Fric , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2013-02-26 10:55+0000\n" "Last-Translator: fri \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: cs\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "Předmět '%1' nemohl být otevřen pro úpravy. Buď neexistuje, nebo RKWard " "ještě úpravu tohoto typu předmětu nepodporuje." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Nelze upravit '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Nahrává se pracovní prostředí..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Při otevírání souboru %1' se vyskytla chyba:\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Chyba při nahrávání pracovního prostředí" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" "Nebyla nalezena žádná služba, která by poskytla tiskový dialog KDE pro " "postscriptové soubory. Pokusíme se namísto toho otevřít obecný prohlížeč " "postscriptových souborů, je-li jaký.

Zvažte instalaci Okularu, nebo " "RKWard nastavte tak, aby se nepokoušel používat tiskový dialog KDE." #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "Nelze otevřít tiskový dialog KDE" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Čeká se na dokončená zbývajících příkazů Rd. Pro okamžité ukončení " "stiskněte Zrušit (Varování: Toto by mohlo vést ke ztrátě dat)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Čeká se na ukončení R" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" "%1|Soubory pracovního prostředí R (%1)\n" "*|Všechny soubory" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Nebyl zadán název souboru. Vaše data NEBYLA uložena. Přesto chcete " "pokračovat?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Ukládání do souboru '%1' se nezdařilo. Co chcete dělat?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Uložení selhalo" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Zkuste uložit soubor pod jiným názvem" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Uložení selhalo" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Uložení do souboru '%1' selhalo. Chcete zkusit soubor uložit pod jiným " "názvem?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Hotovo" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "Příkaz běžící v jádru R chce, abyste viděl následující soubor(y):\n" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Ukazuje se soubor(y)" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" "Příkaz běžící v jádru R chce, abyste upravil jeden nebo víc souborů. " "Podívejte se, prosím, na tyto soubory, upravte je, jak se patří, a uložte " "je. Až budete hotov, stiskněte tlačítko Hotovo, nebo tento dialog zavřete a " "pokračujte dál.\n" "\n" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Upravit soubor(y)" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "Balíček '%1' (který jste pravděpodobně právě nahrál) je nyní umístěn na " "černé listiněkvůli získávání údajů o skladbě. Především to znamená, že " "předměty v tomto balíčku se nebudou objevovat v prohlížeči předmětů, a že " "nebude žádné dokončování názvu předmětu nebo radění argumentů k funkcím pro " "předměty v tomto balíčku.\n" "Balíčky jsou obvykle na černou listinu umisťovány, když obsahují obrovské " "množství dat, což by vedlo k dlouhému nahrávání. Aby nebyl tento balíček " "dále na seznamu, jděte do Nastavení -> Nastavit RKWard -> Pracovní prostředí." #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Balíček byl umístěn na černou listinu" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" "Předmět '%1' byl odstraněn z pracovního prostředí, nebo změněn na jiný typ " "předmětu, ale je v současnosti otevřen pro úpravy. Chcete jej obnovit?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Obnovit předmět?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" "Opravdu chcete odstranit předmět '%1'? Předmět je v současnosti otevřen pro " "úpravy. Bude odstraněn i z editoru. Není žádný způsob, jak jej vrátit zpět." #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Odstranit předmět?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Opravdu chcete odstranit předmět '%1'? Není žádná možnost vrátit tento krok " "zpět." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Název" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Značka" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Typ" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Třída" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "názvy řádků" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "nový řádek" #: core/robject.cpp:120 msgid "Full location:" msgstr "Úplný údaj o umístění:" #: core/robject.cpp:122 msgid "Label:" msgstr "Značka:" #: core/robject.cpp:123 msgid "Type:" msgstr "Typ:" #: core/robject.cpp:126 msgid "Function" msgstr "Funkce" #: core/robject.cpp:127 msgid "Usage: " msgstr "Používání: " #: core/robject.cpp:129 msgid "Data frame" msgstr "Časový snímek" #: core/robject.cpp:131 msgid "Array" msgstr "Řada" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "Matice" #: core/robject.cpp:135 msgid "List" msgstr "Seznam" #: core/robject.cpp:137 msgid "Variable" msgstr "Proměnná" #: core/robject.cpp:138 msgid "Data Type:" msgstr "Datový typ:" #: core/robject.cpp:140 msgid "Environment" msgstr "Prostředí" #: core/robject.cpp:145 msgid "Length: " msgstr "Délka: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Rozměry: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "Třída(y):" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" "Nebyl odstraněn balíček %1. Je vyžadován v RKWardu. Pokud to skutečně chcete " "udělat, udělejte to v konzoli R." #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "Zdá se, že balíček %1 nebyl nahrán" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "" "Název, který jste zadal, je již používán, nebo je neplatný. Přejmenován na %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Neplatný název" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "Pište v těchto polích pro přidání nových sloupců" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "Pište v těchto polích pro přidání nových řádků" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "Tato hodnota zde není dovolena" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Nová proměnná#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Názvy řádků" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "Tento sloupec obsahuje jedno nebo více neplatných polí" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Formát" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Úrovně" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "Upravit tato pole pro přejmenování proměnných." #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "Popisný štítek pro každý sloupec (volitelné)." #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "Typ dat." #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" "Dvakrát klepněte na tato pole pro upravení zobrazení dat.přizpůsobení" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "Dvakrát klepněte na tato pole pro upravení úrovní faktorů." #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Vyjme vybranou část a umístí jej do schránky" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Kopíruje vybranou část do schránky" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "Vloží obsah schránky v současné poloze" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "Vložit do tabulky" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "Vloží obsah schránky v současné poloze, ale ne za hranice tabulky" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "Vložit do výběru" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" "Vloží obsah schránky v současné poloze, ale ne za hranice nynějšího výběru" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" "Editor '%1' obsahuje následující zdvojené sloupce. Úpravy této tabulky " "nemusí být bezpečné a byly zakázány. Úpravy můžete znovu povolit, pokud " "víte, co děláte, ale naléhavě se doporučuje nejprve tabulku opravit a/nebo " "zazálohovat vaše data." #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "Zjištěny zdvojené sloupce" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [pouze ke čtení]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Novou proměnnou vložit vlevo" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Smazat tuto proměnnou" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "Vložit nový případ výše (při %1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "Smazat označené řádky (%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "Smazat tento řádek (%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Vkládá se obsah schránky..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "Souborový formát: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "Pro souvislost '%1' nebyly stanoveny žádné přídavné moduly" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "Všechny soubory" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Nastavit balíčky" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Místní balíčky" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "Instalovat / Aktualizovat / Odstranit" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "Nastavit zdroje" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "Balíček %1 v %2" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" "Následující balíčky, které jste vybral k odstranění, jsou pro chod RKWardu " "nepostradatelné a nebudou odstraněny. Pokud si jste naprosto jist, že tyto " "balíčky chcete odstranit, udělejte tak, prosím, v příkazovém řádku R." #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "Jisté balíčky se neodstraňují" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" "Vaše současná uživatelská oprávnění nedovolují odstranění následujících " "balíčků. Budou přeskočeny." #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "Nedostatečná uživatelská oprávnění" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" "Vaše současná uživatelská oprávnění nedovolují odstranění následujících " "balíčků. Chcete tyto balíčky přeskočit, nebo chcete pokračovat s právy " "správce systému (budete vyzván k zadání hesla)?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" "Chystáte se odstranit následující balíčky. Jste si jistý, že chcete " "pokračovat?" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "Chystané odstranění balíčků" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "Počkejte, prosím, zatímco jsou odstraňovány vybrané balíčky" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "Odstraňují se balíčky" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "Vybrané umístění knihovny není zapisovatelné" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" "

Adresář, který jste zvolil pro instalaci (%1) není s vašimi současnými " "uživatelskými oprávněními zapisovatelný.

Chtěl byste namísto něj " "instalovat do %2, (taktéž můžete stisknout \"Zrušit\" a použít tlačítko " "\"Nastavit zdroje\" pro nastavení jiného adresáře)?

" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" "

V náhradu za to, pokud na tomto stroji máte přístup k účtu správce " "systému, můžete pro nainstalování balíčků použít tento, anebo byste mohl " "změnit oprávnění pro '%1'. Promiňte, že v operačním systému Windows není v " "RKWardu automatické přepínání na účet správce ještě podporováno.

" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "Nainstalovat do %1" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" "

V náhradu za to, pokud jste na tomto stroji správcem systému, můžete " "zkusit instalaci balíčků pod účtem superuživatele (budete vyzván k zadání " "hesla superuživatele.

" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "Staňte se superuživatelem" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "Počkejte, prosím, zatímco jsou instalovány vybrané balíčky" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "Instalují se balíčky" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "Instalační proces byl ukončen s kódem pro ukončení %1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Nainstalované balíčky" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Název" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Verze" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Umístění" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Nahrát" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Zrušit nahrání" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Nahrané balíčky" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" "Při pokusu o nahrání/odstranění balíčků se vyskytla chyba. Podívejte se, " "prosím, kvůli podrobnostem na zápis níže" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "Chyba při nakládání s balíčky" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" "Mnoho balíčků je dostupných na CRAN (Comprehensive R Archive Network), a v " "dalších skladištích
(pro přidání dalších zdrojů klepněte na \"Nastavit " "zdroje\")." #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "Ukázat pouze balíčky odpovídající:" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" "

Balíčky zobrazené v seznamu můžete omezit na ty, jejichž názvy odpovídají " "řetězci filtru.

Poznámka: Pro hledání neúplných řetězců " "přidejte '*' na začátek a/nebo konec filtru, např. '*stat*'.

" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "Vybrat všechny aktualizace" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "Balíčky požadované jádrem (\"%1\") nejsou ve zdrojích balíčků. Možná byl " "název balíčku zadán špatně. Nebo musíte nastavit doplňkové zdroje přes " "tlačítko \"Nastavit zdroje\"." #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "Není dostupný žádný balíček" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "Nainstalovat balíčky do:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "Nainstalovat navržené balíčky" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" "Některé balíčky \"navrhují dodatečné balíčky, které nejsou přísně vzato " "nezbytné pro používání toho balíčku, ale mohou poskytovat dodatečnou " "související funkcionalitu. Zaškrtněte tuto volbu, aby byly takové dodatečné " "balíčky zahrnuty." #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" "

Čekejte, prosím, zatímco se hledají nainstalované a dostupné " "balíčky.

Poznámka: Toto hledání vyžaduje pracující " "internetové spojení a může nějakou dobu trvat, zejména pokud je jedno nebo i " "více skladišť balíčků dočasně nedostupných.

" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "Vyhledávají se balíčky" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "Stav" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" "

Balíčky označené ikonou RKWardu v tomto sloupci poskytují vylepšení pro " "RKWard, typicky v podobě dodatečných grafických dialogů.

" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" "

Balíčky pro instalaci/odstranění vyberete zaškrtnutím/zrušením zaškrtnutí " "odpovídajících políček v tomto sloupci.

" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "

Název balíčku.

" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" "

Popisné záhlaví pro balíček. V současnosti toto u balíčků uložených ve " "skladištích, co nejsou místní, není dostupné.

" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "

Nainstalovaná a/nebo dostupná verze balíčku

" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "

Místo, kde je balíček nainstalován/dostupný

" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "Aktualizovatelné balíčky" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" "Balíčky, pro které je dostupná aktualizace. Může to zahrnovat balíčky, které " "prostě byly sestaveny proti novější verzi R." #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "Nové balíčky" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" "Balíčky, které jsou pro instalaci dostupné, ale které nyní nejsou " "nainstalované." #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "Nainstalované balíčky" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" "Balíčky, které jsou nainstalovány místně. Všimněte si, že pro tyto balíčky " "mohou být dostupné aktualizace." #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Instalovat" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "Odstranit" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "Souvislosti:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "Zjištěn soubor pro obnovení po pádu" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "Ukázat v prohlížeči souborů" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "Obnovit" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" "

Vypadá to, jakoby RKWard nedávno spadl. Je nám to líto! Nicméně ještě " "není všechno ztraceno, a s trochou štěstí byla vaše data zachráněna včas.

" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" "

Soubor pro obnovení pracovního prostředí existuje v %2 jako " "%3.

" msgstr[1] "" "

%1 soubory pro obnovení pracovního prostředí existují v %2, " "nejposlednějším je %3.

" msgstr[2] "" "

%1 souborů pro obnovení pracovního prostředí existují v %2, " "nejposlednějším je %3.

" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" "

Chcete tento soubor otevřít nyní? Poznámka: Budete vyzván znovu, " "až příště spustíte RKWard, dokud soubor neodstraníte/nepřejmenujete " "ručně.

" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "Vybrat jeden nebo více:" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "Vybrat jeden:" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Co chcete dělat?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Začít s prázdným pracovním prostředím" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Začít s prázdnou tabulkou" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "Nahrát pracovní prostředí z nynějšího adresáře" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" "Nahrát pracovní prostředí z nynějšího adresáře:\n" "%1" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Nahrát stávající pracovní prostředí:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "Při spuštění provést vždy toto" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" "Po spuštění (a po nahrání určeného pracovního prostředí, je-li to vhodné), " "vyhodnotit stanovený kód R." #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Mnohomluvnost ladících hlášení (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "Přestrojit pro součásti, které mají být laděny (viz debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" "Ladicí program (Uzavřete všechny parametry pro ladicí program se zvláštními " "příkazy dohromady do jednoduchých uvozovek (''))" #: main.cpp:125 msgid "R workspace file to open" msgstr "Soubor s prostředím R pro otevření" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "Rozhraní pro statistický jazyk R" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "(c) 2002, 2004 - 2013" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "Vedoucí projektu/hlavní vývojář" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "Vývojář v C++ mezi roky 2004 a 2007" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "Mnoho přídavných modulů, návrhy funkce historie nákresu" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "Mnoho přídavných modulů, návrhy, balíček rkwarddev" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "Mnohé přídavné moduly, návrhy, marketing a překlady" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "Přispěvatelé podle abecedního pořádku" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Rozličné nápomocné poznámky a jednání" #: main.cpp:135 msgid "Plugins and patches" msgstr "Přídavné moduly a záplaty" #: main.cpp:136 msgid "New website" msgstr "Nové stránky" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "HP filtrovací přídavný modul, překlad do španělštiny" #: main.cpp:138 msgid "A cool icon" msgstr "Skvělá ikona" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "Logo pro RKWard, četné návrhy, pomoc se zněním" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Rozličné oceňované poznámky, rady a záplaty" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "Překlady, návrhy a přídavné moduly" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "Mnoho poznámek, užitečných návrhů a hlášení chyb" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "Překlad do němčiny, hlášení chyb" #: main.cpp:144 msgid "Some patches" msgstr "Některé záplaty" #: main.cpp:145 msgid "patches and helpful comments" msgstr "Záplaty a užitečné poznámky" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Všichni ti lidé na rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" "Prominutí, pokud jste zde nebyli zmíněni. Spojte se, prosím, s námi, abychom " "vás sem mohli přidat" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Zarovnání" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Výchozí" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Vlevo" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Vpravo" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Desetinná místa" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Výchozí nastavení" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Jak požadováno" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Pevně daná přesnost:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Volby formátování pro '%1'" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" "Úrovně mohou být přiřazeny pouze k po sobě následujícím celým číslům, " "počínaje 1, (sloupec rejstříku je pouze pro čtení). Pro odstranění úrovní na " "konci seznamu je pouze musíte nastavit jako prázdné." #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Úrovně / Značky hodnot pro '%1'" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Název souboru" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "Přidat" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "Nahoru" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "Dolů" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" "

Poznámka: Toto nastavení se neprojeví, dokud RKWard nespustíte " "znovu.

" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "Nastavit výchozí nastavení" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "Všechna prostředí" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "Předměty s potomky" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "Proměnné" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "Funkce" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "Skryté předměty" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "Ukázat předměty" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "Ukázat pole" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "vyskytly se chyby a/nebo varování! Podívejte se níže na zápis" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Výstup" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "Výstup:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "Chyby/varování" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "Chyby/varování:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "Zrušit" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "Změnit" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "Rodičovský předmět: %1" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "Vybrat rodičovský předmět" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "Přepsat? (Zadaný název pro předmět již existuje)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "Přepsat?" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "Vložit zvláštní..." #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "Režim vkládání" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "Jednoduchý řetězec" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "Vektor" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "Oddělovač polí" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "Zarážka" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "Čárka" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "Jednoduchá mezera" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "Jakékoli prázdné místo" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "Jiné:" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "Uvozovky" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "Nedávat hodnoty do uvozovek" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "Automaticky" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "Dávat všechny hodnoty do uvozovek" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "Zobrazení" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "Otočit vodorovně" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "Otočit svisle" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "Přepnout řádky/sloupce" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "Vložit NA, kde je to potřeba" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "Kopírovat řádky do výstupu" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Provést nynější řádek" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Provést výběr" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Provést vše" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "&Odkaz na funkci" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Nepodařilo se otevřít soubor pro čtení" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" "Chyba při čtení souboru XML. Hlášení o chybě bylo: '%1' v řádku '%2', " "sloupec '%3'. Další chyby budou dále oznamovány níže" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "Pokouší se najít potomky neplatného prvku" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "Očekáván přesně jeden prvek '%1', ale nalezen %2" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "'%1' - nezadána vlastnost. Předpokládá se '%2'" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" "Nedovolená hodnota vlastnosti. Povoleny jsou pouze hodnoty jeden z '%1'." #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "Nedovolená hodnota vlastnosti. Povolena jsou pouze celá čísla." #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "Nedovolená hodnota vlastnosti. Povolena jsou pouze desetinná čísla." #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" "Nedovolená hodnota vlastnosti. Povoleny jsou pouze hodnoty '%1' nebo '%2'." #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "Zkouší se vyvolat obsah neplatného prvku" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "Načtení XML '%1' " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(žádná značka)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" "Pokusil jste se vyvolat přídavný modul s názvem '%1', ale tento přídavný " "modul je v současnosti neznámý. Pravděpodobně musíte nahrát odpovídající " "mapu přídavných modulů (Nastavit->Nastavit RKWard->Přídavné moduly), nebo " "byl možná tento přídavný modul přejmenován." #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "Žádný takový přídavný modul" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" "Nesprávný formát pro řazení při pokusu o vyvolání přídavného modulu '%1'. " "Spojte se, prosím, s týmem RKWardu (Nápověda->O RKWardu->Autoři)." #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "Nesprávný formát pro řazení" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" "\n" "Přídavný modul spadl." #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" "Ne všechna stanovená nastavení se mohla použít. Většinou jde o to, že " "některé předměty R nejsou více dostupné ve vašem pracovním prostředí." #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "Nepoužita všechna nastavení" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" "\n" "Přídavný modul nemohl být s těmito nastaveními automaticky předán." #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "Nepodařilo se předat" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" "Určený požadovaný soubor '%1' neexistuje nebo není čitelný. Přehlíží se." #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" "Nepodařilo se analyzovat určenou požadovanou mapu přídavného modulu '%1'. " "Možná budete muset nainstalovat dodatečné balíčky." #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" "RKComponentMap již obsahuje součást s ID \"%1\". Přehlíží se druhý záznam." #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" "Určený soubor '%1' pro ID součásti \"%2\" neexistuje nebo není čitelný. " "Přehlíží se." #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "Součást '%1' není dostupná ve verzi vhodné pro tuto verzi RKWardu" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "Neurčeno" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "Autorské právo (c)" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "Licence" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "Autoři:" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "Role" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "Mapa přídavného modulu pro RKWard" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "Balíček R" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "Tento předmět má %1 rozměr(y), ale je/jsou očekáván(y) %2 rozměr(y)." #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "Tento předmět má délku %1, ale je očekávána nejmenší délka %2." #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "Tento předmět má délku %1, ale je očekávána největší délka %2." #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "Nezdá se, že by tento předmět patřil do některé ze tříd %1." #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" "Datový typ tohoto předmětu je %1, ale dovolený typ(y) je/jsou " "%2." #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "Vybrat jeden:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "Stanovit model" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Úplný model" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Pouze hlavní efekty" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Vlastní model:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "Hlavní efekt" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "Úroveň" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "Výraz" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "Zadat text" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "Zadat data:" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "Pište do těchto buněk pro rozšíření tabulky" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "Prázdné hodnoty nejsou dovoleny" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "Tento sloupec obsahuje v některých svých buňkách neplatné hodnoty" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "Aktualizuje se stav. Počkejte, prosím" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "Pidat řádek/prvek" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "Odstranit řádek/prvek" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "Tento řádek ještě nebyl zpracován." #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "Tento řádek obsahuje neplatná nastavení." #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "Počkejte, prosím, zatímco jsou nastavení zpracovávána" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "Jeden nebo více řádků obsahuje neplatná nastavení." #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "Musí se stanovit alespoň %1 řádků (jestli nějaký)" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "Musí se stanovit alespoň %1 řádků" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "Může být stanoveno nanejvýš %1 řádků" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "Tento prvek není platný z následujícího důvodu(ů):" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "Zadat souborový název" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "Vybrat" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "Uložit do:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "moje.data" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "Zadat hodnotu:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "Náhled" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "Náhed nyní není možný" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "Obnovení náhledu" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "Varování a chyby:" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "Náhled zakázán" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "Současný náhled" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "Náhled není (ještě) možný" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" "Při pokusu o přečtení popisu k tomuto přídavnému modulu se vyskytla chyba " "('%1'). Podívejte se, prosím na stdout kvůli podrobnostem." #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "Nepodařilo se vytvořit přídavný modul" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Předat" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "Zavřít" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "Automaticky zavřít" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "Nápověda" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "Použít průvodce" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "Kód" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "Provést znovu" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "Zpracovává se. Počkejte, prosím" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Níže můžete vidět příkaz(y), které odpovídají nastavení, jež jste " "udělal.Klepněte na \"Předat\" pro provedení příkazu(ů)." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Další >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< Zpět" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "Použít dialog" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "Proměnná:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "

Tento předmět zde není povolen z následujícího(ch) důvodu(ů):

" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "Provádí se" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "Zrušeno" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "Kupa příkazů" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "Sled příkazů" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "Zavřeno" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "Čeká se" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "Příkaz" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "Popis" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "Spuštění R" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" "

\t-Vyskytla se neurčitá chyba, kterou RKWard zatím nezvládá. RKWard " "pravděpodobně nebude pracovat správně. Ověřte, prosím, svou instalaci.

\n" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" "

Při spouštění jádra R vznikly určitá potíže. Vyskytla se následující " "chyba(y):

\n" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Chyba při spuštění R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" "Příkaz v jádru R se pokouší změnit kódování znaků. I když pro to RKWard " "nabízí podporu, a pokusí se přizpůsobit novému jazykovému nastavení, může " "tato operace vést k sotva patrným chybám, jestliže jsou současně otevřena " "okna s daty. Vlastnost také ještě není dobře vyzkoušena, a bude rozumné, " "když svou práci, předtím než budete pokračovat, uložíte.\n" "pokud máte otevřen nějaký editor dat, nebo v případě jakýchkoli pochybností, " "doporučuje se jej nejprve zavřít (v pozdějších verzích RKWardu toto bude " "zřejmě zjištěno automaticky). V tomto případě, prosím, nyní zvolte Zrušit, " "potom uložte okna s daty, uložte a pokračujte." #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "Místní změna" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "Jádro R poptává balíček '%1' kvůli provedení nynějšího úkolu, který v " "současnosti není nainstalován. Bude otevřen nástroj pro správu balíčků. Z " "něj se můžete pokusit o nalezení a nainstalování nezbytného balíčku." #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Vyžadován balíček '%1'" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "Jádro R požaduje údaje" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" "\n" "Jádro R bude zastaveno okamžitě. Znamená to, že dále nemůžete používat " "jakékoli funkce závisející na jádru k R. Také jinak řečeno, nemůžete " "provádět vůbec nic, dokonce ani uložit pracovní prostředí. Máte-li štěstí, " "udělal to už R. Ovšem to, co můžete udělat, je, že můžete uložit otevřené " "soubory s příkazy, výstupy, nebo data z otevřeného editoru dat. Poté " "ukončete RKWard.\n" "Ačkoli by tato situace neměla nikdy nastat, pošlete nám, prosím, e-mail s " "popisem toho, co se přihodilo a co jste prováděl, na adresu rkward-" "devel@lists.sourceforge.net. Prominutí!" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "Jádro R 'vytuhlo'" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" "Chyba při podání ruky s procesem jádra. Očekáván symbol '%1', obdržen symbol " "'%2'" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" "Neshoda ve verzích při podání ruky s procesem jádra. Uživatelské rozhraní je " "ve verzi '%1' zatímco jádro je ve verzi '%2'.\n" "Opravte, prosím, svou instalaci." #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "Jádro R bylo zastaveno se stavem: %1" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" "Jádro R potkala osudná chyba:\n" "%1" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "Oznámení od jádra k R" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "Otázka od jádra k R" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t- Buď se vůbec nepodařilo nahrát knihovnu R pro 'rkward', nebo nikoli " "ve správné verzi. Mohlo by to vést ke všem druhům chyb, od chybějících " "jednoduchých funkcí po úplné selhání funkčnosti. Většinou jde o to, že při " "poslední instalaci nebyly všechny soubory umístěny na správné místo. " "Nicméně, někdy toho mohou být příčina zbytky z předchozí instalace, které " "nebyly čistě odstraněny.

\t\t

Měl byste nyní ukončit RKWard, a " "opravit svou instalaci. S tímto vám pomůže http://p.sf.net/rkward/compiling.

\n" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" "

\t-Při zřizování spojení s R se vyskytly potíže. Nejpravděpodobněji je to " "kvůli poškozené instalaci.

\t\t

Měl byste nyní RKWard ukončit, a " "svou instalaci opravit. Pro nápovědu k tomu se podívejte na http://p.sf.net/rkward/compiling.

\n" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" "Součást 'katepart' se nepodařilo nahrát. RKWard bez katepart nemůže běžet a " "bude nyní ukončen. Nainstalujte, prosím, katepart, a pak to zkuste znovu." #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "Součást 'katepart' se nepodařilo najít" #: rkconsole.cpp:122 msgid "R Console" msgstr "Konzole R" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "Chyba ve skladbě\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" "*.Rhistory|Soubory s historií R (*.Rhistory)\n" "*|Všechny soubory (*)" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "Vyberte soubor s historií příkazů, který se má nahrát" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "Vyberte souborový název, pod nímž se historie příkazů má uložit" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Přerušit prováděný příkaz" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "Kopírovat výběr doslovně" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "Kopírovat pouze příkazy" #: rkconsole.cpp:912 msgid "Print Console" msgstr "Vytisknout konzoli" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "Zavést historii příkazů..." #: rkconsole.cpp:921 msgid "Export command history..." msgstr "Vyvést historii příkazů..." #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" "Nastavil jste RKWard na vedení příkazů skriptovacího editoru přes konzoli R. " "Nicméně je v současnosti ovládací panel zaneprázdněn jiným činným příkazem. " "Chcete jej přidat k příkazu v ovládacím panelu, nebo chcete konzoli nejprve " "vymazat? Pokud nyní nový příkaz spustit nechcete, stiskněte Zrušit." #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "Konzole R je zaneprázdněna" #: rkconsole.cpp:940 msgid "Append" msgstr "Přidat" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "Vymazat, pak předložit" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" "

RKWard buď nemohl vůbec najít své zdrojové soubory, nebo pouze staré " "verze těchto souborů. Většinou bývá příčinou této věci, že při poslední " "instalaci se nepodařilo umístit tyto soubory na správné místo. Může to vést " "ke všem druhům potíží, od chybění jednoduchých funkcí po úplné selhání " "funkčnosti.

Měl byste nyní ukončit RKWard, a opravit svou " "instalaci. Pomoc s tím hledejte na adrese http://p.sf.net/rkward/compiling.

" #: rkward.cpp:203 msgid "Broken installation" msgstr "Pokažená instalace" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" "Vaše instalace KDE je nastavena tak, aby používala své vlastní souborové " "dialogy. Je známo, že tato věc v některých případech vede k určitým známým " "potížím, a proto se doporučuje tyto \"původní\" souborové dialogy KDE " "zakázat.\n" "Mají se v RKWardu tyto \"původní\" souborové dialogy zakázat?" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "Možné potíže s vaším nastavením" #: rkward.cpp:221 msgid "Yes, disable" msgstr "Ano, zakázat" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "Ne, používat \"původní\" souborové dialogy" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Nastavují se přídavné moduly..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" "Jsou potřeba přídavné moduly: Spravovat je můžete prostřednictvím " "\"Nastavení->Nastavit RKWard\".\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "Žádné činné mapy přídavných modulů" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" "Byly nalezeny nové balíčky s přídavnými moduly pro RKWard (uvedeny v seznamu " "níže). Tyto byly automaticky zapnuty. Pro vypnutí vybraných balíčků s " "přídavnými moduly, použijte Nastavení->Nastavit RKWard->Přídavné moduly." #: rkward.cpp:308 msgid "New plugins found" msgstr "Nalezeny nové přídavné moduly" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "Nepodařilo se nahrát některé mapy přídavných modulů" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" "Poznámka: Znovu kvůli těmto souborům s mapami přídavných modulů varováni " "nebudete, dokud RKWard nezaktualizujete, nebo dokud je neodstraníte a znovu " "nepřidáte v Nastavení->Nastavit RKWard->Přídavné moduly." #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "Nastavení Carbon Copy" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Pracovní prostředí" #: rkward.cpp:374 msgid "Files" msgstr "Soubory" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "Úkoly čekající na vyřízení" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "Snímky ladiče" #: rkward.cpp:395 msgid "Debugger Console" msgstr "Konzole ladiče" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "Ladicí zprávy RKWardu" #: rkward.cpp:411 msgid "Dataset" msgstr "Soubor dat" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Vytvoří nový prázdný soubor dat a otevře jej pro úpravy" #: rkward.cpp:416 msgid "Script File" msgstr "Soubor se skriptem" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "Otevřít soubor skriptu R..." #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "Otevřít nedávný soubor skriptu R" #: rkward.cpp:430 msgid "Import Data" msgstr "Zavést data" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "Zavést data z různých datových formátů" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "Otevřít pracovní prostředí..." #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Otevře stávající dokument" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "Otevřít nedávné pracovní prostředí" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Otevře nedávno použitý soubor" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Uložit pracovní prostředí" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Uloží současný dokument" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Uložit pracovní prostředí jako" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Uložit současný dokument jako..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Ukončí program" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "Přerušit všechny příkazy" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "Příkazy CC do výstupu" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "Spravovat balíčky R..." #: rkward.cpp:477 msgid "Close All Data" msgstr "Uzavřít všechna data" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Uzavře všechny otevřené editory dat" #: rkward.cpp:483 msgid "Close All" msgstr "Uzavřít vše" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "Oddělit" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[Pro nynější pohled nejsou dostupné žádné kroky]" #: rkward.cpp:499 msgid "Open..." msgstr "Otevřít..." #: rkward.cpp:509 msgid "Import" msgstr "Zavést" #: rkward.cpp:512 msgid "Create..." msgstr "Vytvořit..." #: rkward.cpp:519 msgid "Save..." msgstr "Uložit..." #: rkward.cpp:523 msgid "Export" msgstr "Vyvést" #: rkward.cpp:616 msgid "Ready." msgstr "Připravený." #: rkward.cpp:620 msgid "Current working directory" msgstr "Nynější pracovní adresář" #: rkward.cpp:698 msgid "Exiting..." msgstr "Ukončuje se..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "Ukončuje se RKWard: Chcete uložit pracovní prostředí?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Uložit pracovní prostředí?" #: rkward.cpp:706 msgid "Don't quit" msgstr "Neukončit" #: rkward.cpp:736 msgid "New dataset" msgstr "Nový soubor dat" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Zadejte název pro nový soubor dat" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Otevírá se pracovní prostředí..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "Vybrat pracovní prostředí k otevření..." #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Chcete uložit nynější pracovní prostředí?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "Jádro R je zaneprázdněno." #: rkward.cpp:867 msgid "The R engine is idle." msgstr "Jádro R je nečinné." #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "Jádro R je inicializováno." #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "Otevřít soubor(y) skriptu" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[Nepojmenované pracovní prostředí]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "Shrnutí (x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "Tisk (x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "str (x)" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "Předmět byl smazán!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "Prohlížeč předmětů: %1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "Předmět se změnil. Klepněte na \"Obnovit\"" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Obnovit" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "Získávají se informace. Počkejte, prosím." #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "Klepněte na \"Obnovit\" pro získání informací" #: robjectviewer.cpp:251 msgid "Ready" msgstr "Připraven" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" "Jádro pro QtScript nahlásilo chybu:\n" "%1" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "Chyba ve skriptování" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" "Chyba ve skriptování: %1\n" "Zpětná stopa:\n" "%2" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" "Soubor \"%1\" (vyžadován \"%2\") se nepodařilo najít. Zkontrolujte, prosím, " "svou instalaci." #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" "Při vyhodnocování kódu skriptu se objevila chyba.\n" "Soubor: %1\n" "Řádek: %2\n" "Zpráva: %3." #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" "chyba ('soubor \"%1\" (vyžadován \"%2\") se nepodařilo najít. Prověřte, " "prosím, svou instalaci.');\n" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## Připravit\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## Vypočítat\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## Tisknout výsledek\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Nastavení" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "Nastavení označená (*) začnou působit až po novém spuštění RKWardu" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "Doplnění kódu" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "Povolit doplnění kódu" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "Nejmenší počet napsaných znaků, než se provede pokus o doplnění kódu" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "Doba v milisekundách, předtím, než dojde k pokusu o doplnění" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "Povolit naznačení argumentu funkce" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "Automatické ukládání" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "Časový úsek pro automatické ukládání (minuty)" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "Nechat soubor s automatickým ukládáním po ručním uložení" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "Otevírají se soubory se skripty" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "Počet skriptů v nedávných seznamech souborů (*)" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" "

Počet nedávných souborů k zapamatování (v nabídce Otevřít nedávný soubor " "skriptu R).

" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "Filtry souborů se skripty R (oddělené mezerami)" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" "

Seznam filtrů (přípony souborových názvů), se kterými se má zacházet jako " "se soubory skriptů R. Především soubory odpovídající jednomu z těchto filtrů " "budou vždy otevřeny se zvýrazněním skladby R.

Filtry rozlišují velká a " "malá písmena.

" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "Editor skriptů" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "Nahrát/Uložit historii příkazů" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "Největší délka historie příkazů" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "Neomezená" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "Největší počet odstavců/řádků, které se mají ukazovat v konzoli" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "Provést příkazy z editoru skriptů přes konzoli" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "Přidat i tyto příkazy do historie konzole" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "Nepřidávat" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "Přidat pouze, jde-li o jeden řádek" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "Přidat všechny příkazy" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "Historie příkazů je ve výchozím nastavení citlivá na souvislosti" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Ovládací panel neboli konzole" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" "Tato nastavení slouží jenom účelu ladění.Je bezpečné ponechat je " "nezměněné tak, jak jsou. Tato nastavení se použijí pouze na nynější sezení a " "nebudou uložena." #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "Úroveň ladění" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "Příznaky ladění" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "Překročení času u příkazu" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "Poznámka: Výstup ladění je zapsán do %1" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "Ladění" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "Adresář, v němž by rkward měl uchovávat soubory (*)" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "Krok spuštění (*)" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" "Nahrát soubor .RData z nynějšího adresáře, je-li dostupný (volba R '--" "restore')" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "Žádat o soubor, který se má otevřít" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "Ukázat dialog pro výběr (výchozí)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "Ukázat nápovědu k RKWardu při spuštění" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "Počáteční pracovní adresář (*)" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "Při spuštění neměnit nynější adresář" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "Adresář se soubory RKWard (jak je určen výše)" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "Uživatelův domovský adresář" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "Naposledy použitý adresář" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "Následující adresář (určete, prosím):" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "Počáteční pracovní adresář" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" "

Počáteční pracovní adresář, který se má použít. Všimněte si, že pokud " "nahráváte pracovní plochu při spuštění, a RKWard máte nastaven tak, aby " "udělal změnu na adresář nahraných pracovních ploch, bude mít tento adresář " "přednost.

" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" "Rozvržení pracoviště (to jest, která okna se skripty, daty, s nápovědou jsou " "otevřená), může být uloženo buď do pracovního souboru R (do pracovního " "prostředí), nebo na něm nezávisle (a opět nahráno) Čemu dáváte přednost?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" "Uložit/Obnovit společně s pracovním souborem, když je ukládán/nahráván " "pracovní soubor (pracovní prostředí)" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" "Uložit/Obnovit nezávisle na pracovním souboru (pracovním prostředí) (bude " "uloženo na konci sezení RKWardu, obnoveno při novém spuštění)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "Neukládat rozvržení pracoviště" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" "Při nahrávání pracovního prostředí se přepnout do odpovídajícího adresáře." #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" "Upozornit, když by byly upravovány předměty s více než tímto počtem polí (0 " "pro bez omezení):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "Bez omezení" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "Chování při zaměření na okno MDI" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "Klepněte pro zaměření" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "Zaměření následuje myš" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "Obecné" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "Výchozí velikost okna" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "Výchozí šířka (palce):" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "Výchozí výška (palce):" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "Použít tiskový dialog KDE pro tisková zařízení (je-li dostupný)" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "Historie zařízení obrazovky" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "Největší počet nahraných nákresů:" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "Největší velikost jednoho nahraného nákresu (v KB):" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "Znázornění na obrazovce" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "Které předměty se mají ukazovat ve výchozím nastavení?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Ukázat skryté předměty" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "Ukázat všechna prostředí" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "Ukázat předměty a jejich potomky" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "Ukázat funkce" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "Ukázat proměnné" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "Které sloupce se mají ukazovat ve výchozím nastavení?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Pole se značkou" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Pole s typem" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Pole se třídou" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "Nikdy nevyvolávat skladbu těchto balíčků:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "Přidat výjimku" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "Přidat název balíčku, jehož skladba se nemá vyvolat" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "Příkazy Carbon Copy do výstupu" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "Příkazy zadané v konzoli" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "Příkazy spuštěné přes nabídku 'Spustit'" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "Příkazy pocházející z dialogů a přídavných modulů" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "Rovněž Carbon Copy výstup příkazů" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Volby pro okno s výstupem" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "Ukázat okno na nový výstup" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "Vyvolat okno na nový výstup" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "Obrazové zpracování" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "Souborový formát" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "PNG" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "SVG" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "JPG" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "Jakost JPG" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "Šířka:" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "Výška:" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" "Některé přídavné moduly jsou dostupné přes různá rozhraní. Jedním je " "rozhraní ve stylu průvodce, a druhým tradiční dialog. V případě, že je " "dostupné obojí, dáváte přednost kterému z nich?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Vždy dávat přednost dialogům" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Dávat přednost doporučenému rozhraní" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Vždy dávat přednost průvodcům" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "Zobrazení skladby R (v dialozích)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "Ve výchozím nastavení ukazovat kód" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "Výchozí velikost zobrazovaného kódu (pixely)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "Vybrat soubor(y) .pluginmap" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Přídavné moduly" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "Závislosti" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "Poškozeno" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "Nahráno" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "Podivné" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "Činné" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "Vybrat soubor .pluginmap" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" "Následující nastavení ovlivňují většinou chování R v konzoli. Obecně se dá " "říct, že je bezpečné ponechat je beze změny." #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "Zobrazit varování" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "Potlačit varování" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "Vytisknout varování později (výchozí)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "Vytisknout varování okamžitě" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "Převést varování na chyby" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "Desetinná místa (pouze pro tisk)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "Šířka výstupu (znaky)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "Největší počet prvků ukázaných v tisku" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "Největší délka varování/chyb, která se má vytisknout" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "Ponechat příkazy ve funkcích" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "SPRÁVNÝ (výchozí)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "NESPRÁVNÝ" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "Ponechat poznámky v balíčcích" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "SPRÁVNÝ" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "NESPRÁVNÝ (výchozí)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "Nejvyšší úroveň u složitých výrazů" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "Výchozí přesnost pro desetinné místo při tisku ()" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "Ověřit hranice vektorů (upozornit)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "Příkaz pro editor" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "Příkaz pro \"pager\"" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "Použít funkce prohlížeče Internet Explorer pro přístup k internetu" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" "

Použijte funkce prohlížeče Internet Explorer pro přístup k internetu z R. " "Povolení této funkce může pomoci v případě potíží s přístupem k internetu z " "R (např. pro instalaci balíčků).

" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "Další (možnost) příkazy ke spuštění v každém sezení" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "Jádro R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" "Stahovací zrcadlo CRAN (ponechat prázdné, aby bylo napovězeno při každém " "sezení):" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "Vybrat zrcadlo" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" "Dodatečné sklady balíčků (zdroje, ze kterých se mají knihovny stahovat)" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "Archivovat stažené balíčky" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "Sestavit balíčky ze zdroje" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "Sestavit balíčky ze zdroje (nelze nastavit na tomto systému)" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "Umístění knihovny R (kam se mají knihovny instalovat, místně)" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" "Poznámka: Výchozí nastavení při spuštění se budou vždy používat jako " "doplnění k umístění, která stanovíte v tomto seznamu" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "Přidat adresář s knihovnou R" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "Přidat zdroj (sklad)" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "Přidat adresu (URL) nového skladu (zdroje)" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "Balíčky R" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "Vybrat zrcadlo CRAN" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" "Nejprve se nastavení použijí pouze na nové příkazy. Všechny předchozí " "příkazy zůstanou viditelné/neviditelné." #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "Ukázat vždy příkazy" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "Ukázat vždy výsledky" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "Ukázat chyby" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "Ukázat/Vyvolat okno" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Uživatelské příkazy" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Příkazy vytvořené přídavným modulem" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Příkazy pro aplikaci" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "Příkazy pro seřízení" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" "Největší počet odstavců/řádků, které se mají ukazovat v zápisu příkazů" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Výpis příkazů" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "Přiložit k hlavnímu oknu" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "Nastavit jádro R" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "Pozastavit provedení" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "Zrušit zvolené příkazy" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" "Některé z příkazů, které jste se pokusil zrušit, jsou označeny jako \"sync\" " "(písmeno 'S' ve sloupci s typem). Zrušení těchto příkazů by mohlo véstke " "ztrátě dat. Tyto příkazy nebyly zrušeny." #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "Některé příkazy nebyly zrušeny" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "Znovu začít s prováděním" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "Činná volání" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "Ne v souvislosti ladiče" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" "Nynější volání: %1
Prostředí: %2
Místní předměty: " "%3" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "Editor skriptů" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "Vložit zalomení řádku a provést" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "Provést celý blok" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "Označit výběr jako blok" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "Zrušit označení bloku" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "Přejít do adresáře se skriptem" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "Změnit pracovní adresář na adresář s tímto skriptem" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "Uložit skript..." #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "Uložit skript jako..." #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [změněný]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Dokument \"%1\" byl změněn. Přesto se má zavřít?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "Soubor neuložen" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" "Při pokusu o vytvoření automaticky ukládaného souboru skriptového souboru se " "vyskytla chyba '%1':" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "Nepojmenované" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1 (Činný)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1 (Nepoužívaný)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "Neúplný výrok.\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Chyba ve skladbě\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "Během provádění příkazu se vyskytla neurčená chyba.\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "Nastavit" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "Další" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "Odejít" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" "

Pokračovat, dokud není dosaženo volajícího této funkce (dokud se nedojde " "k dalšímu ladicímu příkazu)

Poznámka: V některých případech " "nebude volající funkce dosaženo nikdy, protože volání bylo posledním krokem " "ve volajícím. V takových případech je chování totožné s 'Pokračovat'.

" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "Pokračovat" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" "Toto okno nelze zavřít, protože ladič je v činnosti. Pokud nemáte ponětí o " "tom, co to znamená, a chcete se dostat pryč, stiskněte tlačítko Zrušit na " "pravé straně tohoto okna." #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "O tomto okně" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Najít:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Pole:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Vše" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "Vše kromě klíčových slov" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Klíčová slova" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Balíček:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Psaní velkých a malých písmen" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Rozhodnutí o shodě podle aktuálních podmínek" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Najít" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Hledat v nápovědě" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "Najít nápovědu v HTML pro %1" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "Všechny nainstalované balíčky" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "Všechny nahrané balíčky" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "Pro '%1' nenalezena žádná nápověda. Možná není odpovídající balíček " "nainstalován/nahrán, nebo jste udělal překlep při psaní příkazu. Vyzkoušejte " "Nápověda -> Hledat nápovědu k R kvůli více podrobnostem." #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "Nenalezena žádná nápověda" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Obsah" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Balíček" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "&Vyprázdnit výstup" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "&Obnovit výstup" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "Výstup %1" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "Tisknout výstup" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "Vyvést stránku jako HTML" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "Okno s výstupem" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "Tisknout stránku" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "Uložit výstup jako HTML" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" "

Soubor s výstupem z RKWardu se nepodařilo najít

\n" "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "Stránky nejsou, nebo jsou poškozeny" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" "Opravdu chcete uklidit výstup? Tím budou zároveň odstraněny všechny " "obrázkové soubory použité ve výstupu. Nebude možné je obnovit." #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "Vyprázdnit výstup?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "Spláchnutí výstupu" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "Žádný název" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" "

Stránky s nápovědou chybí

\n" "

Stránky s nápovědou pro tuto součást ještě nebyly napsány (nebo jsou " "poškozeny). Zvažte, prosím, svoje přispění.

\n" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "Použít %1 nyní" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "Shrnutí" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "Používání" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "Nastavení uživatelského rozhraní" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "Nepojmenovaný prvek uživatelského rozhraní" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "Související funkce a stránky" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "Odborné podrobnosti" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "O" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "

Na této stránce:

" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "Odkaz R u '%1'" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "POŠKOZENÝ ODKAZ" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "Nápověda k %1" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "Nastavit %1" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "Přiložit" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "Poloha" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "Levý postranní panel" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "Pravý postranní panel" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "Horní postranní panel" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "Dolní postranní panel" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "Nezobrazeno v postranním panelu" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "Nápověda k R" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "Hledat v nápovědě k R" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "Nápověda k RKWardu" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "Ukázat rejstřík k nápovědě k R" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "Ukáže/Vyvolá okno pro hledání v nápovědě k R" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "Ukázat nápovědu k RKWardu" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "Předchozí okno" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "Další okno" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "Ukázat/Skrýt %1" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "Zapnout pohled na dokument" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "Ukázat &výstup" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" "Z odborných důvodů vám následující dialog umožní nastavit klávesové zkratky " "pouze pro ty části RKWardu, které jsou nyní v činnosti.\n" "\n" "Z tohoto důvodu, jestliže chcete nastavit klávesové zkratky např. pro " "použití v rámci editoru skriptů, musíte otevřít okno editor skriptů a " "spustit jej." #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "Poznámka" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "Přídavné moduly pro RKWard" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" "Z odborných důvodů vám následující dialog umožní nastavit tlačítka v pruhu s " "nástroji pouze pro ty části RKWardu, které jsou nyní v činnosti.\n" "\n" "Z tohoto důvodu, jestliže chcete nastavit klávesové zkratky např. pro " "použití v rámci editoru skriptů, musíte otevřít okno editor skriptů a " "spustit jej." #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "---Popis potíží---\n" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" "Podejte, prosím, krátké shrnutí potíží:\n" "###Vyplňte, prosím###\n" "\n" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Co jste - popsáno podrobně - dělal předtím, než se objevily tyto potíže?\n" "###Vyplňte, prosím###\n" "\n" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" "Když zkoušíte zopakovat to, co jste popsal výše, nastanou potíže opět (ne, " "někdy, vždy)?\n" "###Vyplňte, prosím###\n" "\n" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" "Je-li to možné zkusit: Když uděláte tu samou věc v sezení R mimo RKWard, " "vidíte tu samou potíž?\n" "###Vyplňte, prosím###\n" "\n" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" "Máte nějaké další informace, které by nám pomohly vysledovat tuto potíž? A " "zvláště, pokud je to možné, můžete nám poskytnout vzorek dat a ukázkový kód " "R, který by opakoval tyto potíže?\n" "###Vyplňte, prosím###\n" "\n" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" "Počkejte, prosím, okamžik, dokud se neshromáždí některé údaje vztahující se " "k vašemu nastavení.\n" "V případě, že jádro zheblo, nebo se zaseklo, můžete stisknout \"Zrušit\" pro " "přeskočení tohoto kroku." #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "Shromažďují se údaje o nastavení" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "Hlášení chyb v RKWardu" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" "

Kam můžu nahlásit chyby nebo svá přání?

Pošlete, prsím " "hlášení o chybách nebo svá přání na %1 nebo pošlete " "elektronický dopis %2.

Jaké informace " "bych měl poskytnout?

Zkopírujte, prosím, informace zobrazené níže, " "a vyplňte podrobně odpovědi na otázky.

" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" "vytvořil jste okno grafického zařízení v R. Obvykle se RKWard taková okna " "pokouší zjistit, aby převzal jejich ovládání a přidal jim pruh s nabídkou. " "Toto však v nynějším sestavení RKWardu na Mac OS X podporováno není. Další " "informace hledejte na http://p.sf.net/rkward/mac." #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "Nepodařilo se vložit okno X11 s R" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "Otevřel jste v R nové X11 okno se zařízením. RKWard se snaží taková okna " "zjistit, převzít nad nimi vládu a přidat k nim pruh s nabídkou. V tomto " "případě však RKWard nedokázal zjistit, které okno bylo vytvořeno a nemůže je " "proto vložit.\n" "Pokud byste otevřel okno na jiné pracovní ploše nebo na jiném X11 zobrazení, " "dá se očekávat tato chyba. Snad budete chtít zvážit změnu v nastavení volby " "(\"display\").\n" "Jestliže vidíte otevřené okno X11 na stejné obrazovce jako toto sdělení,jde " "o případ, kdy by měl RKWard lépe pracovat. V tom případě se s námi, prosím, " "spojte na rkward-devel@lists.sourceforge.net a sdělte nám podrobné údaje o " "vašem systému, abychom se mohli pokusit tuto chybu opravit v budoucích " "verzích RKWardu." #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "Došlo k chybě" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "Okno zařízení znázornění" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" "Nynější okno se jeví být příliš velké na to, aby se vešlo na obrazovku. " "Pokud se to začne stávat pravidelně, možná budete chtít upravit výchozí " "velikost okna s grafikou v Nastavení->Nastavit RKWard->Znázornění na " "obrazovce." #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "Velké okno" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "Uzavírá se zařízení (ukládá se historie)" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "Zastavuje se zařízení číslo %1" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "Zadat pevnou velikost" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "Šířka" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "Výška" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "Spustit grafické zařízení číslo %1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "Kopírovat obsah grafického zařízení číslo %1 do výstupu" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "Tisknout obsah grafického zařízení číslo %1" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "Zadat předmět R" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "Zadejte název pro předmět R, do kterého se mají ukládat znázornění" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "Uložit obsah grafického zařízení číslo %1 do předmětu '%2'" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "Zdvojit grafické zařízení číslo %1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "Nahrát další nákres do zařízení číslo %1" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "Nahrává se nákres z historie" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "Nahrát předchozí nákres do zařízení číslo %1" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "Nahrát první nákres do zařízení číslo %1" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "Nahrát poslední nákres do zařízení číslo %1" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "Nahrát nákres %1 do zařízení číslo %2" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "Přidat tento nákres do historie (zařízení číslo %1)" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "Odstranit nynější nákres z historie (zařízení číslo %1)" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" "Tímto se vymaže historie nákresů u všech oken zařízení, ne jen u tohoto. " "Není-li toto vaším úmyslem, stiskněte dole tlačítko Zrušit." #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "Smazat historii nákresů" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "Vlastnosti nákresu (zařízení číslo %1)" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "Velikost obrázku se řídí velikostí okna" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "Nastavit pevnou velikost 500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "Nastavit pevnou velikost 1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "Nastavit pevnou velikost 2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "Nastavit určenou pevnou velikost..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "Předchozí nákres" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "První nákres" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "Další nákres" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "Poslední nákres" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "Jít na nákres" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "Přidat tento nákres" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "Odstranit tento nákres" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "Smazat historii" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "Vlastnosti nákresu" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "Zapnout" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "Kopírovat do výstupu" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "Uložit jako předmět R..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "Zdvojit" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" "Adresa (URL), kterou se pokoušíte otevřít ('%1') není místním souborem, nebo " "není souborový typ podporován RKWardem. Chcete tuto adresu otevřít ve " "výchozí aplikaci?" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "Otevřít ve výchozí aplikaci?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "Nelze otevřít soubor \"%1\"" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "Nepodařilo se otevřít soubor s příkazem" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "Chystáte se upravit předmět \"%1\", který je velmi velký (%2 polí). RKWard " "nebyl vyladěn na to, aby se vypořádal s velmi velkými předměty ve svém " "vlastním vestavěném editoru dat. Využije to hodně z paměti a, v závislosti " "na vašem systému, může to být velmi pomalé. U velkých předmětů se všeobecně " "doporučuje upravovat je s pomocí příkazového řádku, a nebo rozdělit data " "před úpravami na malé kousky. Na druhou stranu, pokud máte dostatek paměti , " "nebo jsou data sdostatek jednoduchá (číselná data se zpracovávají lépe než " "faktory), nemusí jít v případě úprav o problém. Toto varování můžete " "nastavit (nebo úplně vypnout) pod Nastavení -> Nastavit RKWard -> Obecné.\n" "Skutečně upravovat předmět?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "Chystáte se upravit velmi velký předmět" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "Uložit rozvržení pracoviště" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "Obnovit rozvržení pracoviště" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "Okno vlevo" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "Okno vpravo" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "Prohlížeč pracovního prostředí R" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "Pracovní prostředí R" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "Hledat v nápovědě" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "Upravit" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "Zobrazit" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Přejmenovat" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "Kopírovat do nového symbolu" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "Kopírovat do .GlobalEnv" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "Smazat" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "Vyložit balíček" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "Nahrát/Zrušit nahrání balíčků" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "Kopírovat předmět" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "Zadat název ke kopírovanému do" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" "Předmět s názvem '%1' již existuje v GlobalEnv. Místo toho vytvořena kopie " "jako'%2'." #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "Název se již používá" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Přejmenovat předmět" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Zadat nový název" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "Ne-funkce" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "Ukázat všechna prostředí" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "Ukázat skryté předměty" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "&Úpravy" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "&Soubor" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "&Pohled" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Provedení" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nový" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "&Zavést" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "&Vyvést" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Pracovní prostředí" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "&Okna" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "&Zapnout" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "&Nastavení" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "&Nápověda" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "&Zařízení" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "&Historie" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "&Okno" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "&Přesunutí nástrojů" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Pavel Fric, ,Launchpad Contributions:,RKWard Team,fri, ,Launchpad " "Contributions:,RKWard Team,fri, ,Launchpad Contributions:,RKWard Team,fri, " ",Launchpad Contributions:,RKWard Team,fri, ,Launchpad Contributions:,RKWard " "Team,fri" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "fripohled.blogspot.com,,,rkward-" "tracker@lists.sourceforge.net,pavelfric@seznam.cz,,,rkward-" "tracker@lists.sourceforge.net,pavelfric@seznam.cz,,,rkward-" "tracker@lists.sourceforge.net,pavelfric@seznam.cz,,,rkward-" "tracker@lists.sourceforge.net,pavelfric@seznam.cz,,,rkward-" "tracker@lists.sourceforge.net,pavelfric@seznam.cz" rkward-0.6.1/po/Messages.sh0000755000175000017500000000363412124345424015113 0ustar thomasthomas#!/bin/sh BASEDIR="../rkward/" # root of translatable sources PROJECT="rkward" # project name BUGADDR="http://sourceforge.net/tracker/?group_id=50231&atid=459007" # MSGID-Bugs WDIR=`pwd` # working dir check_error() { if [ "$?" -ne "0" ]; then echo "ERROR: ${1}" exit 1 fi } echo "Preparing rc files" cd ${BASEDIR} # we use simple sorting to make sure the lines don't jump around too much from system to system find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/rc.cpp check_error "Failed to extract messages from rc files. Do you have extractrc installed?" # additional string for KAboutData echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp cd ${WDIR} echo "Done preparing rc files" echo "Extracting messages" cd ${BASEDIR} # see above on sorting find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ --msgid-bugs-address="${BUGADDR}" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot check_error "Failed to extract messages from source files. Do you have xgettext installed?" echo "Done extracting messages" # Note: .po-file are now maintained (and merged) on launchpad # # echo "Merging translations" # catalogs=`find . -name '*.po'` # for cat in $catalogs; do # echo $cat # msgmerge -o $cat.new $cat ${PROJECT}.pot # check_error "Failed to merge messages. Do you have msgmerge installed?" # mv $cat.new $cat # done # echo "Done merging translations" echo "Cleaning up" cd ${WDIR} rm rcfiles.list rm infiles.list rm rc.cpp echo "Done" rkward-0.6.1/po/it.po0000644000175000017500000027106312124345424013764 0ustar thomasthomas# translation of it.po to Italian # translation of rkward.po to Italian # This file is distributed under the same license as the it package. # Copyright (C) 2005 THE it'S COPYRIGHT HOLDER. # Daniele Medri , 2004-2005. # # msgid "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:03+0000\n" "Last-Translator: simone.sandri \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: it\n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "" "L'oggetto '%1', non può essere aperto per la modifica. O non esiste, oppure " "RKWard al momento non supporta la modifica di questo tipo di oggetto." #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "Impossibile modificare '%1'" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "Apertura dell'area di lavoro..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "Errore durante l'apertura del file '%1':\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "Errore durante il caricamento dell'area di lavoro" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "" "Attendere per la chiusura dei rimanenti comandi di R. Per uscire subito, " "premere Canc (ATTENZIONE: potrebbe causare una perdita dei dati)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "Attendere la chiusura di R" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "" "Nessun nome file indicato. I tuoi dati non sono stati salvati. Desideri " "procedere ancora?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "Salvataggio del file '%1' non riuscito. Cosa si intende fare?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "Salvataggio non riuscito" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "Prova a salvare con nome differente" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "Salvataggio non avvenuto" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "" "Salvataggio del file '%1' non riuscito. Provare a salvare il file con un " "altro nome?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "Completato" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "Mostra file" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "Modifica file(s)" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "Pacchetto nella blacklist" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "Ripristina oggetto?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "" #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "Rimuovi oggetto?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "" "Sicuro di voler rimuovere l'oggetto '%1'? Non c'è modo di annullare " "l'operazione." #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "Nome" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "Etichetta" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "Tipo" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "Classe" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "Nomi riga" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "nuova.riga" #: core/robject.cpp:120 msgid "Full location:" msgstr "" #: core/robject.cpp:122 msgid "Label:" msgstr "Etichetta:" #: core/robject.cpp:123 msgid "Type:" msgstr "Tipo:" #: core/robject.cpp:126 msgid "Function" msgstr "Funzione" #: core/robject.cpp:127 msgid "Usage: " msgstr "Uso: " #: core/robject.cpp:129 msgid "Data frame" msgstr "" #: core/robject.cpp:131 msgid "Array" msgstr "" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "" #: core/robject.cpp:135 msgid "List" msgstr "Lista" #: core/robject.cpp:137 msgid "Variable" msgstr "Variabile" #: core/robject.cpp:138 msgid "Data Type:" msgstr "" #: core/robject.cpp:140 msgid "Environment" msgstr "" #: core/robject.cpp:145 msgid "Length: " msgstr "" #: core/robject.cpp:147 msgid "Dimensions: " msgstr "Dimensioni: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "Il nome indicato era già utilizzato o non è valido. Rinominato in %1" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "Nome non valido" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#Nuova Variabile#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "Nome righe" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "Formato" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "Livelli" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "Taglia la sezione selezionata e la mette negli appunti" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "Copia la sezione selezionata negli appunti" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr "" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "Inserisci una nuova variabile a sinistra" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "Elimina questa variabile" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "Inserimento del contenuto degli appunti in corso..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "" #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "Configura pacchetti" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "Pacchetti locali" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "Pacchetti installati" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "Titolo" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "Versione" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "Posizione" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "Carica" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "Scarica" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "Pacchetti caricati" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "Installa" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "Che cosa desideri fare?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "Avvia con una nuova area di lavoro" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "Avvia con una tabella vuota" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "Carica un'area di lavoro esistente:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "Quantità di messaggi di debug (0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "" #: main.cpp:128 msgid "Project leader / main developer" msgstr "" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "Numerosi commenti utili e discussioni" #: main.cpp:135 msgid "Plugins and patches" msgstr "Plugin e patch" #: main.cpp:136 msgid "New website" msgstr "" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "" #: main.cpp:138 msgid "A cool icon" msgstr "Una bella icona" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "RKWard logo, suggerimenti, wording" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "Numerosi commenti utili, suggerimenti, patch" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "" #: main.cpp:144 msgid "Some patches" msgstr "" #: main.cpp:145 msgid "patches and helpful comments" msgstr "" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "Molte altre persone su rkward-devel@lists.sourceforge.net" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "Allineamento" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "Predefinito" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "Sinistra" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "Destra" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "Posizioni decimali" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "Impostazioni predefinite" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "Come richiesto" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "Precisione fissa:" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "Opzioni di formattazione per '%1'" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "" #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "Livelli / Valori etichette per '%1'" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "Nome file" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "Risultato" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "Esegui la linea corrente" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "Esegui selezione" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "Esegui tutto" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "Riferimento &funzioni" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "Impossibile aprire il file in lettura" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "" #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "" #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "" #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "" #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "" #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "Modello completo" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "Solo gli effetti principali" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "Modello personalizzato:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "mio.dataset" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "" #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "Invia" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "" "Sotto puoi vedere i comandi corrispondenti alle impostazioni eseguite. Fai " "clic su 'Invio' per eseguire i comandi." #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "Avanti >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "Errore durante l'avvio di R" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "Richiede il pacchetto '%1'" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "Console" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "Interrompi comando in esecuzione" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "Impostazione dei plugin..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "Area di lavoro" #: rkward.cpp:374 msgid "Files" msgstr "" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "Dataset" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "Crea un nuovo data.frame vuoto e lo apre per la modifica" #: rkward.cpp:416 msgid "Script File" msgstr "" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "Apre un documento esistente" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "Apre un file utilizzato recentemente" #: rkward.cpp:444 msgid "Save Workspace" msgstr "Salva area di lavoro" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "Salva il documento corrente" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "Salva area di lavoro con nome" #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "Salva il documento corrente con nome..." #: rkward.cpp:453 msgid "Quits the application" msgstr "Termina l'applicazione" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "Chiude tutti gli editor dei dati" #: rkward.cpp:483 msgid "Close All" msgstr "" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "Pronto." #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "Uscita..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "Salva area di lavoro?" #: rkward.cpp:706 msgid "Don't quit" msgstr "" #: rkward.cpp:736 msgid "New dataset" msgstr "Nuovo dataset" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "Inserisci il nome per il nuovo dataset" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "Apertura dell'area di lavoro..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "Desideri salvare l'attuale area di lavoro?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "Aggiorna" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "" #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "" #: robjectviewer.cpp:251 msgid "Ready" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "Impostazioni" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "Console" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "Mostra oggetti nascosti" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "Campo etichetta" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "Tipo di campo" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "Classe campo" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "Opzioni per la finestra dei risultati" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "Preferisci sempre le maschere" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "Preferisci l'interfaccia raccomandata" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "Preferisci sempre gli assistenti" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "Plugin" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "" #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "Backend di R" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "" #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "mostra sempre i comandi" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "mostra sempre il risultato" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "mostra errori" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "mostra/nascondi finestra" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "Comandi utente" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "Comandi generati dai plugin" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "Comandi delle applicazioni" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "Storico comandi" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "" #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr "" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "Il documento \"%1\" è stato modificato. Chiudere ugualmente?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "File non salvato" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "Errore di sintassi.\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "Trova:" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "Campi:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "Tutti" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "Parole chiave" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "Pacchetto:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "Maiuscole/minuscole" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "Confronto fuzzy" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "Trova" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "Ricerca nella guida" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "Argomento" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "Pacchetto" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "" #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "" #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "Rinomina" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "" #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "Rinomina oggetto" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "Inserisci il nuovo nome" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "&Esegui" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "&Nuovo" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "&Area di lavoro" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" ",Launchpad Contributions:,Danielsan474,Luciano Bertuccelli, ,Launchpad " "Contributions:,Luciano Bertuccelli,simone.sandri, ,Launchpad " "Contributions:,Luciano Bertuccelli,RKWard Team,simone.sandri, ,Launchpad " "Contributions:,Luciano Bertuccelli,RKWard Team,simone.sandri, ,Launchpad " "Contributions:,DM74S,Luciano Bertuccelli,RKWard Team,simone.sandri" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" ",,,,,,,lexluxsox@hotmail.it,,,,rkward-" "tracker@lists.sourceforge.net,lexluxsox@hotmail.it,,,,rkward-" "tracker@lists.sourceforge.net,lexluxsox@hotmail.it,,,,,rkward-" "tracker@lists.sourceforge.net,lexluxsox@hotmail.it" rkward-0.6.1/po/zh_CN.po0000644000175000017500000031312012124345424014340 0ustar thomasthomas# translation of lala.po to Simplified Chinese # translation of rkward.po to # This file is put in the public domain. # # Roy Qu , 2007. # Roy Qu , 2008. msgid "" msgstr "" "Project-Id-Version: lala\n" "Report-Msgid-Bugs-To: " "http://sourceforge.net/tracker/?group_id=50231&atid=459007\n" "POT-Creation-Date: 2013-03-22 15:54+0100\n" "PO-Revision-Date: 2012-10-09 04:03+0000\n" "Last-Translator: RKWard Team \n" "Language-Team: Simplified Chinese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2013-03-23 05:22+0000\n" "X-Generator: Launchpad (build 16540)\n" "Language: \n" #: agents/rkeditobjectagent.cpp:56 msgid "" "The object '%1', could not be opened for editing. Either it does not exist, " "or RKWard does not support editing this type of object, yet." msgstr "无法打开要编辑的对象\"%1\"。这可能是因为该对象并不存在,也可能是因为RKWard目前尚不支持编辑此类对象。" #: agents/rkeditobjectagent.cpp:56 msgid "Cannot edit '%1'" msgstr "无法编辑\"%1\"" #: agents/rkloadagent.cpp:39 msgid "Loading Workspace ..." msgstr "正在载入工作区..." #: agents/rkloadagent.cpp:74 msgid "" "There has been an error opening file '%1':\n" "%2" msgstr "" "打开文件\"%1\"时出错:\n" "%2" #: agents/rkloadagent.cpp:74 msgid "Error loading workspace" msgstr "载入工作区时出错" #: agents/rkprintagent.cpp:72 msgid "" "No service was found to provide a KDE print dialog for postscript files. We " "will try to open a generic postscript viewer (if any), " "instead.

Consider installing 'okular', or configure RKWard not to " "attempt to print using a KDE print dialog." msgstr "" #: agents/rkprintagent.cpp:72 msgid "Unable to open KDE print dialog" msgstr "" #: agents/rkquitagent.cpp:41 msgid "" "Waiting for remaining R commands to finish. To quit immediately, press " "Cancel (WARNING: This may result in loss of data)" msgstr "正在等待剩下的R命令结束执行。如果想立即退出,请按“取消”键。(警告!这可能会导致数据丢失!)" #: agents/rkquitagent.cpp:41 msgid "Waiting for R to finish" msgstr "等待R结束" #: agents/rksaveagent.cpp:62 rkward.cpp:752 rkward.cpp:754 msgid "" "%1|R Workspace Files (%1)\n" "*|All files" msgstr "" #: agents/rksaveagent.cpp:65 msgid "" "No filename given. Your data was NOT saved. Do you still want to proceed?" msgstr "未指定文件名。您的数据尚未保存。您仍要继续吗?" #: agents/rksaveagent.cpp:79 msgid "Saving to file '%1' failed. What do you want to do?" msgstr "保存到文件\"%1\"失败。您希望如何处理?" #: agents/rksaveagent.cpp:79 msgid "Save failed" msgstr "保存失败" #: agents/rksaveagent.cpp:79 msgid "Try saving with a different filename" msgstr "使用别的文件名重新尝试保存" #: agents/rksaveagent.cpp:79 msgid "Saving failed" msgstr "保存失败" #: agents/rksaveagent.cpp:81 msgid "" "Saving to file '%1' failed. Do you want to try saving to a different " "filename?" msgstr "保存到文件\"%1\"失败。您是否需要使用别的文件名重试?" #: agents/showedittextfileagent.cpp:58 misc/rkprogresscontrol.cpp:305 #: plugin/rkstandardcomponentgui.cpp:398 msgid "Done" msgstr "完成" #: agents/showedittextfileagent.cpp:104 msgid "" "A command running in the R-engine wants you to see the following file(s):\n" msgstr "" #: agents/showedittextfileagent.cpp:104 msgid "Showing file(s)" msgstr "正在显示文件" #: agents/showedittextfileagent.cpp:110 msgid "" "A command running in the R-engine wants you to edit one or more file(s). " "Please look at these files, edit them as appropriate, and save them. When " "done, press the \"Done\"-button, or close this dialog to resume.\n" "\n" msgstr "" #: agents/showedittextfileagent.cpp:110 msgid "Edit file(s)" msgstr "编辑文件" #: core/renvironmentobject.cpp:106 msgid "" "The package '%1' (probably you just loaded it) is currently blacklisted for " "retrieving structure information. Practically this means, the objects in " "this package will not appear in the object browser, and there will be no " "object name completion or function argument hinting for objects in this " "package.\n" "Packages will typically be blacklisted, if they contain huge amount of data, " "that would take too long to load. To unlist the package, visit Settings-" ">Configure RKWard->Workspace." msgstr "" "函数包\"%1\"(它可能已经背载入)目前已被列入黑名单,因此无法获取结构信息。 " "这通常意味着,该包中的对象将不会显示在对象浏览器中,也没有对象名自动补全及函数参数提示。 " "通常,如果函数包中含有过于巨量的数据,载入所需的时间过长时,它就会被列入黑名单。 " "如果要将它从黑名单中删除,请访问“配置RKWard”对话框的“工作区”标签页。" #: core/renvironmentobject.cpp:106 msgid "Package blacklisted" msgstr "函数包已被列入黑名单" #: core/rkmodificationtracker.cpp:67 msgid "" "The object '%1' was removed from workspace or changed to a different type of " "object, but is currently opened for editing. Do you want to restore it?" msgstr "对象\"%1\"已从工作区中删除,或被改成了不同类型的对象。但它当前正处于被编辑状态。您希望恢复它吗?" #: core/rkmodificationtracker.cpp:67 msgid "Restore object?" msgstr "恢复对象?" #: core/rkmodificationtracker.cpp:83 msgid "" "Do you really want to remove the object '%1'? The object is currently opened " "for editing, it will be removed in the editor, too. There's no way to get it " "back." msgstr "您真的想删除对象\"%1\"?该对象当前正在被编辑,将会从编辑器中一并删除它。一旦删除,将无法再恢复。" #: core/rkmodificationtracker.cpp:83 core/rkmodificationtracker.cpp:88 msgid "Remove object?" msgstr "删除对象?" #: core/rkmodificationtracker.cpp:88 msgid "" "Do you really want to remove the object '%1'? There's no way to get it back." msgstr "您真的想删除对象\"%1\"吗?一旦删除就无法恢复。" #: core/rkmodificationtracker.cpp:349 dataeditor/rkvareditmodel.cpp:685 #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:427 #: dialogs/rkloadlibsdialog.cpp:941 plugin/rkformula.cpp:83 #: plugin/rkvarslot.cpp:55 msgid "Name" msgstr "名称" #: core/rkmodificationtracker.cpp:350 dataeditor/rkvareditmodel.cpp:686 #: misc/editlabelsdialog.cpp:205 misc/rkobjectlistview.cpp:186 msgid "Label" msgstr "标签" #: core/rkmodificationtracker.cpp:351 dataeditor/rkvareditmodel.cpp:687 #: misc/rkobjectlistview.cpp:185 rbackend/rcommandstack.cpp:399 #: windows/rkhelpsearchwindow.cpp:345 msgid "Type" msgstr "类型" #: core/rkmodificationtracker.cpp:352 misc/rkobjectlistview.cpp:187 msgid "Class" msgstr "种类" #: core/rkpseudoobjects.cpp:84 msgctxt "Note: 'namespace' is a technical term, should not be translated" msgid "Orphan Namespaces" msgstr "" #: core/rkpseudoobjects.cpp:159 msgid "" "This special object does not actually exist anywhere in R. It is used, here, " "to list namespaces which are loaded, but not attached to a package on the " "search path. These are typically 'imported' namespaces." msgstr "" #: core/rkrownames.cpp:41 msgid "row names" msgstr "" #: core/rkrownames.cpp:107 msgid "new.row" msgstr "" #: core/robject.cpp:120 msgid "Full location:" msgstr "完整地址:" #: core/robject.cpp:122 msgid "Label:" msgstr "标签:" #: core/robject.cpp:123 msgid "Type:" msgstr "类型:" #: core/robject.cpp:126 msgid "Function" msgstr "函数" #: core/robject.cpp:127 msgid "Usage: " msgstr "用途: " #: core/robject.cpp:129 msgid "Data frame" msgstr "数据帧" #: core/robject.cpp:131 msgid "Array" msgstr "数组" #: core/robject.cpp:133 misc/rkspecialactions.cpp:88 msgid "Matrix" msgstr "矩阵" #: core/robject.cpp:135 msgid "List" msgstr "列表" #: core/robject.cpp:137 msgid "Variable" msgstr "变量" #: core/robject.cpp:138 msgid "Data Type:" msgstr "数据类型" #: core/robject.cpp:140 msgid "Environment" msgstr "环境" #: core/robject.cpp:145 msgid "Length: " msgstr "长度: " #: core/robject.cpp:147 msgid "Dimensions: " msgstr "维度: " #: core/robject.cpp:155 msgid "Class(es):" msgstr "类:" #: core/robjectlist.cpp:82 msgid "" "Did not unload package %1. It is required in RKWard. If you really want to " "do this, do so on the R Console." msgstr "" #: core/robjectlist.cpp:85 msgid "Package %1 appears not to have been loaded" msgstr "" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "The name you specified was already in use or not valid. Renamed to %1" msgstr "您指定的名称非法或者已被使用。已重命名为\"%1\"" #: dataeditor/rkeditordataframe.cpp:63 windows/robjectbrowser.cpp:191 #: windows/robjectbrowser.cpp:237 msgid "Invalid Name" msgstr "非法名称" #: dataeditor/rkvareditmodel.cpp:291 dataeditor/rkvareditmodel.cpp:556 msgid "Type on these fields to add new columns" msgstr "在这些格中输入任意内容,以增加新的列" #: dataeditor/rkvareditmodel.cpp:292 msgid "Type on these fields to add new rows" msgstr "在这些格中输入任意内容,以增加新的行" #: dataeditor/rkvareditmodel.cpp:308 plugin/rkmatrixinput.cpp:500 msgid "This value is not allowed, here" msgstr "" #: dataeditor/rkvareditmodel.cpp:376 msgid "#New Variable#" msgstr "#新变量#" #: dataeditor/rkvareditmodel.cpp:377 msgid "Row names" msgstr "" #: dataeditor/rkvareditmodel.cpp:382 msgid "This column contains one or more invalid fields" msgstr "" #: dataeditor/rkvareditmodel.cpp:688 msgid "Format" msgstr "格式" #: dataeditor/rkvareditmodel.cpp:689 msgid "Levels" msgstr "级别" #: dataeditor/rkvareditmodel.cpp:692 msgid "Edit these fields to rename variables." msgstr "" #: dataeditor/rkvareditmodel.cpp:693 msgid "A descriptive label for each column (optional)." msgstr "" #: dataeditor/rkvareditmodel.cpp:694 msgid "Type of data." msgstr "" #: dataeditor/rkvareditmodel.cpp:695 msgid "Double click on these fields to customize data display." msgstr "" #: dataeditor/rkvareditmodel.cpp:696 msgid "Double click on these fields to edit factor levels." msgstr "" #: dataeditor/twintable.cpp:102 msgid "Cuts the selected section and puts it to the clipboard" msgstr "剪切选中区域,并保存其内容至剪贴板" #: dataeditor/twintable.cpp:104 msgid "Copies the selected section to the clipboard" msgstr "将选中区域拷贝到剪贴磅" #: dataeditor/twintable.cpp:107 msgid "Pastes the clipboard contents to current position" msgstr "" #: dataeditor/twintable.cpp:110 msgid "Paste inside table" msgstr "" #: dataeditor/twintable.cpp:112 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "table's boundaries" msgstr "" #: dataeditor/twintable.cpp:115 msgid "Paste inside selection" msgstr "" #: dataeditor/twintable.cpp:117 msgid "" "Pastes the clipboard contents to current position, but not beyond the " "boundaries of the current selection" msgstr "" #: dataeditor/twintable.cpp:182 msgid "" "The editor '%1' contains the following duplicate columns. Editing this table " "may not be safe, and has been disabled. You may re-enable editing if you " "know what you are doing, but you are strongly advised to fix the table, " "and/or backup your data, first." msgstr "" #: dataeditor/twintable.cpp:182 msgid "Duplicate columns detected" msgstr "" #: dataeditor/twintable.cpp:191 msgid " [read-only]" msgstr " [只读]" #: dataeditor/twintable.cpp:236 msgid "Insert new variable left" msgstr "在左边插入新变量" #: dataeditor/twintable.cpp:239 msgid "Delete this variable" msgstr "删除此变量" #: dataeditor/twintable.cpp:250 msgid "Insert new case above (at %1)" msgstr "在上面插入新实例(在%1)" #: dataeditor/twintable.cpp:260 msgid "Delete marked rows (%1-%2)" msgstr "删除标记的行(%1-%2)" #: dataeditor/twintable.cpp:266 msgid "Delete this row (%1)" msgstr "删除此行(%1)" #: dataeditor/twintable.cpp:389 msgid "Inserting clipboard contents..." msgstr "插入剪贴磅内容..." #: dialogs/rkimportdialog.cpp:35 msgid "File format: " msgstr "文件格式: " #: dialogs/rkimportdialog.cpp:46 msgid "No plugins defined for context '%1'" msgstr "没有为上下文\"%1\"定义的插件" #: dialogs/rkimportdialog.cpp:51 msgid "All Files" msgstr "所有文件" #: dialogs/rkloadlibsdialog.cpp:63 msgid "Configure Packages" msgstr "配置函数包" #: dialogs/rkloadlibsdialog.cpp:67 msgid "Local packages" msgstr "本地函数包" #: dialogs/rkloadlibsdialog.cpp:71 msgid "Install / Update / Remove" msgstr "" #: dialogs/rkloadlibsdialog.cpp:73 msgid "Configure Repositories" msgstr "配置函数仓库" #: dialogs/rkloadlibsdialog.cpp:192 dialogs/rkloadlibsdialog.cpp:199 #: dialogs/rkloadlibsdialog.cpp:230 msgid "Package %1 at %2" msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "" "The following packages, which you have selected for removal, are essential " "to the operation of RKWard, and will not be removed. If you are absolutely " "sure, that you want to remove these packages, please do so on the R command " "line." msgstr "" #: dialogs/rkloadlibsdialog.cpp:205 msgid "Not removing certain packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 msgid "" "Your current user permissions do not allow removing the following packages. " "These will be skipped." msgstr "" #: dialogs/rkloadlibsdialog.cpp:211 dialogs/rkloadlibsdialog.cpp:214 msgid "Insufficient user permissions" msgstr "" #: dialogs/rkloadlibsdialog.cpp:214 msgid "" "Your current user permissions do not allow removing the following packages. " "Do you want to skip these packages, or do you want to proceed with " "administrator privileges (you will be prompted for the password)?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "" "You are about to remove the following packages. Are you sure you want to " "proceed?" msgstr "" #: dialogs/rkloadlibsdialog.cpp:236 msgid "About to remove packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Please stand by while removing selected packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:239 msgid "Removing packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:253 msgid "Selected library location not writable" msgstr "选中的函数库保存地点不可写" #: dialogs/rkloadlibsdialog.cpp:254 msgid "" "

The directory you have selected for installation (%1) is not writable " "with your current user permissions.

Would you like to install to %2, " "instead (you can also press \"Cancel\" and use the \"Configure " "Repositories\"-button to set up a different directory)?

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:257 msgid "" "

Alternatively, if you have access to an administrator account on this " "machine, you can use that to install the package(s), or you could change the " "permissions of '%1'. Sorry, automatic switching to Administrator is not yet " "supported in RKWard on Windows.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:259 dialogs/rkloadlibsdialog.cpp:263 msgid "Install to %1" msgstr "" #: dialogs/rkloadlibsdialog.cpp:262 msgid "" "

Alternatively, if you are the administrator of this machine, you can try " "to install the packages as root (you'll be prompted for the root " "password).

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:263 msgid "Become root" msgstr "使用root帐号" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Please stand by while installing selected packages" msgstr "正在安装选择的函数包,请等待" #: dialogs/rkloadlibsdialog.cpp:295 msgid "Installing packages" msgstr "正在安装函数包" #: dialogs/rkloadlibsdialog.cpp:377 msgid "Installation process died with exit code %1" msgstr "安装进程失败,返回值为%1" #: dialogs/rkloadlibsdialog.cpp:409 msgid "Installed packages" msgstr "已安装的函数包" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:942 #: windows/rkhelpsearchwindow.cpp:97 windows/rkhelpsearchwindow.cpp:343 msgid "Title" msgstr "标题" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:943 msgid "Version" msgstr "版本" #: dialogs/rkloadlibsdialog.cpp:411 dialogs/rkloadlibsdialog.cpp:944 msgid "Location" msgstr "地点" #: dialogs/rkloadlibsdialog.cpp:416 msgid "Load" msgstr "载入" #: dialogs/rkloadlibsdialog.cpp:418 msgid "Unload" msgstr "卸载" #: dialogs/rkloadlibsdialog.cpp:425 msgid "Loaded packages" msgstr "已载入的函数包" #: dialogs/rkloadlibsdialog.cpp:577 msgid "" "There has been an error while trying to load / unload packages. See " "transcript below for details" msgstr "在试图载入/卸载函数包时出错。请查看下面的记录以获取详细信息" #: dialogs/rkloadlibsdialog.cpp:577 msgid "Error while handling packages" msgstr "在处理函数包时出错" #: dialogs/rkloadlibsdialog.cpp:631 msgid "" "Many packages are available on CRAN (Comprehensive R Archive Network), and " "other repositories
(click \"Configure Repositories\" to add more sources)." msgstr "" #: dialogs/rkloadlibsdialog.cpp:653 msgid "Show only packages matching:" msgstr "" #: dialogs/rkloadlibsdialog.cpp:655 msgid "" "

You can limit the packages displayed in the list to with names or titles " "matching a filter string.

Note: To search for partial strings, " "add '*' to the start and / or end of the filter, e.g. '*stat*'.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:659 msgid "Select all updates" msgstr "" #: dialogs/rkloadlibsdialog.cpp:720 msgid "" "The package requested by the backend (\"%1\") was not found in the package " "repositories. Maybe the package name was mis-spelled. Or maybe you need to " "add additional repositories via the \"Configure Repositories\"-button." msgstr "" "未能在函数仓库中找到后台请求的函数包(\"%1\")。这可能是因为包名拼写错误,也可能是需要您通过\"配置函数仓库\"按钮来添加额外的函数仓库。" #: dialogs/rkloadlibsdialog.cpp:720 msgid "Package not available" msgstr "函数包不可用" #: dialogs/rkloadlibsdialog.cpp:788 msgid "Install packages to:" msgstr "安装函数包到:" #: dialogs/rkloadlibsdialog.cpp:792 msgid "Install suggested packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:794 msgid "" "Some packages \"suggest\" additional packages, which are not strictly " "necessary for using that package, but which may provide additional related " "functionality. Check this option to include such additional suggested " "packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "" "

Please stand by while searching for installed and available " "packages.

Note: This requires a working internet " "connection, and may take some time, esp. if one or more repositories are " "temporarily unavailable.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:879 msgid "Searching for packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:940 rbackend/rcommandstack.cpp:400 #: settings/rksettingsmoduleplugins.cpp:553 msgid "Status" msgstr "状态" #: dialogs/rkloadlibsdialog.cpp:947 msgid "" "

Packages marked with an RKWard icon in this column provide enhancements " "to RKWard, typically in the form of additional graphical dialogs.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:948 msgid "" "

You can select packages for installation / removal by checking / " "unchecking the corresponding boxes in this column.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:949 msgid "

The name of the package.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:950 msgid "" "

A descriptive title for the package. Currently this is not available for " "packages in non-local repositories.

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:951 msgid "

Installed and / or available version of the package

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:952 msgid "

Location where the package is installed / available

" msgstr "" #: dialogs/rkloadlibsdialog.cpp:975 msgid "Updateable Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:976 msgid "" "Packages for which an update is available. This may include packages which " "were merely built against a newer version of R." msgstr "" #: dialogs/rkloadlibsdialog.cpp:978 msgid "New Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:979 msgid "" "Packages which are available for installation, but which are not currently " "installed." msgstr "" #: dialogs/rkloadlibsdialog.cpp:981 msgid "Installed Packages" msgstr "" #: dialogs/rkloadlibsdialog.cpp:982 msgid "" "Packages which are installed locally. Note that updates may be available for " "these packages." msgstr "" #: dialogs/rkloadlibsdialog.cpp:1006 msgid "Install" msgstr "安装" #: dialogs/rkloadlibsdialog.cpp:1009 misc/multistringselector.cpp:116 msgid "Remove" msgstr "移除" #: dialogs/rkreadlinedialog.cpp:55 msgid "Context:" msgstr "上下文:" #: dialogs/rkrecoverdialog.cpp:35 msgid "Crash recovery file detected" msgstr "" #: dialogs/rkrecoverdialog.cpp:38 msgid "Show in file browser" msgstr "" #: dialogs/rkrecoverdialog.cpp:39 msgid "Recover" msgstr "" #: dialogs/rkrecoverdialog.cpp:44 msgid "" "

It looks like RKWard has crashed, recently. We are sorry about that! " "However, not everything is lost, and with a bit of luck, your data has been " "saved in time.

" msgstr "" #: dialogs/rkrecoverdialog.cpp:45 msgid "

A workspace recovery file exists in %2 as %3.

" msgid_plural "" "

%1 workspace recovery files exist in %2, the most recent one of " "which is %3.

" msgstr[0] "" msgstr[1] "" #: dialogs/rkrecoverdialog.cpp:46 msgid "" "

Do you want to open this file, now? Note: You will be prompted " "again, next time you start RKWard, until you remove/rename the file, " "manually.

" msgstr "" #: dialogs/rkselectlistdialog.cpp:38 msgid "Select one or more:" msgstr "" #: dialogs/rkselectlistdialog.cpp:39 msgid "Select one:" msgstr "" #: dialogs/startupdialog.cpp:47 msgid "What would you like to do?" msgstr "您想要如何开始?" #: dialogs/startupdialog.cpp:59 settings/rksettingsmodulegeneral.cpp:75 msgid "Start with an empty workspace" msgstr "以空白工作区开始" #: dialogs/startupdialog.cpp:61 settings/rksettingsmodulegeneral.cpp:77 msgid "Start with an empty table" msgstr "以空白表格开始" #: dialogs/startupdialog.cpp:68 msgid "Load workspace from current directory" msgstr "" #: dialogs/startupdialog.cpp:69 msgid "" "Load workspace from current directory:\n" "%1" msgstr "" #: dialogs/startupdialog.cpp:70 msgid "Load an existing workspace:" msgstr "载入已有的工作区:" #: dialogs/startupdialog.cpp:78 msgid "<>" msgstr "<<打开其它文件>>" #: dialogs/startupdialog.cpp:85 msgid "Always do this on startup" msgstr "不再提问" #: main.cpp:121 msgid "" "After starting (and after loading the specified workspace, if applicable), " "evaluate the given R code." msgstr "" #: main.cpp:122 msgid "Verbosity of debug messages (0-5)" msgstr "调试信息级别(0-5)" #: main.cpp:123 msgid "Mask for components to debug (see debug.h)" msgstr "调试用的组件掩码(见debug.h)" #: main.cpp:124 msgid "" "Debugger (enclose any debugger arguments in single quotes ('') together with " "the command)" msgstr "调试器(使用单引号('')将命令与调试参数一起括起来)" #: main.cpp:125 msgid "R workspace file to open" msgstr "" #: main.cpp:127 msgid "RKWard" msgstr "RKWard" #: main.cpp:127 msgid "Frontend to the R statistics language" msgstr "R统计语言前端" #: main.cpp:127 msgid "(c) 2002, 2004 - 2013" msgstr "" #: main.cpp:128 main.cpp:129 main.cpp:130 main.cpp:131 main.cpp:132 #: main.cpp:134 main.cpp:135 main.cpp:136 main.cpp:137 main.cpp:138 #: main.cpp:139 main.cpp:140 main.cpp:141 main.cpp:142 main.cpp:143 #: main.cpp:144 main.cpp:145 msgid "%1" msgstr "%1" #: main.cpp:128 msgid "Project leader / main developer" msgstr "项目领导者/主程序员" #: main.cpp:129 msgid "C++ developer between 2004 and 2007" msgstr "" #: main.cpp:130 msgid "Many plugins, suggestions, plot history feature" msgstr "" #: main.cpp:131 msgid "Many plugins, suggestions, rkwarddev package" msgstr "" #: main.cpp:132 msgid "Many plugins, suggestions, marketing, translations" msgstr "很多插件、建议、营销和翻译" #: main.cpp:133 msgid "Contributors in alphabetical order" msgstr "贡献者(按字母表顺序)" #: main.cpp:134 msgid "Several helpful comments and discussions" msgstr "一些有用的评论和讨论" #: main.cpp:135 msgid "Plugins and patches" msgstr "插件和补丁" #: main.cpp:136 msgid "New website" msgstr "新网站" #: main.cpp:137 msgid "HP filter plugin, spanish translation" msgstr "" #: main.cpp:138 msgid "A cool icon" msgstr "很酷的图标" #: main.cpp:139 msgid "RKWard logo, many suggestions, help on wording" msgstr "RKWard徽标,很多建议,文件上的帮助" #: main.cpp:140 msgid "Several valuable comments, hints and patches" msgstr "很多有价值的建议、提示和补丁" #: main.cpp:141 msgid "Translation, Suggestions, plugins" msgstr "翻译、建议和插件" #: main.cpp:142 msgid "Many comments, useful suggestions, and bug reports" msgstr "很多评论,有用的建议和bug报告" #: main.cpp:143 msgid "German Translation, bug reports" msgstr "" #: main.cpp:144 msgid "Some patches" msgstr "一些补丁" #: main.cpp:145 msgid "patches and helpful comments" msgstr "" #: main.cpp:146 msgid "Many more people on rkward-devel@lists.sourceforge.net" msgstr "在邮件列表中rkward-devel@lists.sourceforge.net有更多的参与者" #: main.cpp:146 msgid "Sorry, if we forgot to list you. Please contact us to get added" msgstr "抱歉,如果我们忘记提到您,请与我们联系" #: misc/editformatdialog.cpp:41 msgid "Alignment" msgstr "对齐" #: misc/editformatdialog.cpp:45 msgid "Default" msgstr "缺省值" #: misc/editformatdialog.cpp:47 msgid "Left" msgstr "左" #: misc/editformatdialog.cpp:49 msgid "Right" msgstr "右" #: misc/editformatdialog.cpp:54 msgid "Decimal Places" msgstr "小数点位数" #: misc/editformatdialog.cpp:56 msgid "Default setting" msgstr "缺省设置" #: misc/editformatdialog.cpp:58 msgid "As required" msgstr "按实际需要" #: misc/editformatdialog.cpp:60 msgid "Fixed precision:" msgstr "固定精度" #: misc/editformatdialog.cpp:78 msgid "Formatting options for '%1'" msgstr "\"%1\"的格式选项" #: misc/editlabelsdialog.cpp:215 msgid "" "Levels can be assigned only to consecutive integers starting with 1 (the " "index column is read only). To remove levels at the end of the list, just " "set them to empty." msgstr "级别只能赋给从1开始的连续整数(索引列是只读的)。如果要从列表的末尾删除级别,只需将它们设成空白。" #: misc/editlabelsdialog.cpp:221 msgid "Levels / Value labels for '%1'" msgstr "\"%1\"的级别/数值标签:" #: misc/multistringselector.cpp:46 settings/rksettingsmoduleplugins.cpp:552 msgid "Filename" msgstr "文件名" #: misc/multistringselector.cpp:112 msgid "Add" msgstr "添加" #: misc/multistringselector.cpp:122 msgid "Up" msgstr "上" #: misc/multistringselector.cpp:126 msgid "Down" msgstr "下" #: misc/rkcommonfunctions.cpp:216 msgid "" "

Note: This setting does not take effect until you restart " "RKWard.

" msgstr "" #: misc/rkobjectlistview.cpp:43 msgid "Configure Defaults" msgstr "配置缺省值" #: misc/rkobjectlistview.cpp:180 msgid "All Environments" msgstr "全部环境" #: misc/rkobjectlistview.cpp:181 msgid "Objects with children" msgstr "有子对象的对象" #: misc/rkobjectlistview.cpp:182 msgid "Variables" msgstr "变量" #: misc/rkobjectlistview.cpp:183 windows/robjectbrowser.cpp:297 msgid "Functions" msgstr "函数" #: misc/rkobjectlistview.cpp:184 msgid "Hidden Objects" msgstr "隐藏的对象" #: misc/rkobjectlistview.cpp:285 msgid "Show Objects" msgstr "显示对象" #: misc/rkobjectlistview.cpp:293 msgid "Show Fields" msgstr "显示字段" #: misc/rkprogresscontrol.cpp:219 msgid "" "There have been errors and / or warnings! See below for a transcript" msgstr "存在错误或警告!请查看下面的记录" #: misc/rkprogresscontrol.cpp:228 settings/rksettingsmoduleoutput.cpp:220 msgid "Output" msgstr "输出" #: misc/rkprogresscontrol.cpp:229 msgid "Output:" msgstr "输出:" #: misc/rkprogresscontrol.cpp:231 msgid "Errors / Warnings" msgstr "错误/警告" #: misc/rkprogresscontrol.cpp:232 msgid "Errors / Warnings:" msgstr "错误/警告:" #: misc/rkprogresscontrol.cpp:252 plugin/rkstandardcomponentgui.cpp:312 #: robjectviewer.cpp:176 windows/rkdebugconsole.cpp:66 msgid "Cancel" msgstr "取消" #: misc/rksaveobjectchooser.cpp:53 msgid "Change" msgstr "" #: misc/rksaveobjectchooser.cpp:92 msgid "Parent object: %1" msgstr "" #: misc/rksaveobjectchooser.cpp:103 msgid "Select parent object" msgstr "" #: misc/rksaveobjectchooser.cpp:178 msgid "Overwrite? (The given object name already exists)" msgstr "是否覆盖?(给出的对象名可能已存在)" #: misc/rksaveobjectchooser.cpp:183 msgid "Overwrite?" msgstr "是否覆盖" #: misc/rkspecialactions.cpp:27 misc/rkspecialactions.cpp:66 msgid "Paste special..." msgstr "" #: misc/rkspecialactions.cpp:79 msgid "Paste mode" msgstr "" #: misc/rkspecialactions.cpp:82 msgid "Single string" msgstr "" #: misc/rkspecialactions.cpp:85 msgid "Vector" msgstr "" #: misc/rkspecialactions.cpp:97 msgid "Field separator" msgstr "" #: misc/rkspecialactions.cpp:100 msgid "Tab" msgstr "" #: misc/rkspecialactions.cpp:104 msgid "Comma" msgstr "" #: misc/rkspecialactions.cpp:108 msgid "Single space" msgstr "" #: misc/rkspecialactions.cpp:111 msgid "Any whitespace" msgstr "" #: misc/rkspecialactions.cpp:115 msgid "Other:" msgstr "" #: misc/rkspecialactions.cpp:126 msgid "Quoting" msgstr "" #: misc/rkspecialactions.cpp:129 msgid "Do not quote values" msgstr "" #: misc/rkspecialactions.cpp:132 msgid "Automatic" msgstr "" #: misc/rkspecialactions.cpp:136 msgid "Quote all values" msgstr "" #: misc/rkspecialactions.cpp:142 msgid "Transformations" msgstr "" #: misc/rkspecialactions.cpp:144 msgid "Reverse horizontally" msgstr "" #: misc/rkspecialactions.cpp:146 msgid "Reverse vertically" msgstr "" #: misc/rkspecialactions.cpp:148 msgid "Flip rows/columns" msgstr "" #: misc/rkspecialactions.cpp:150 msgid "Insert NAs where needed" msgstr "" #: misc/rkstandardactions.cpp:34 msgid "Copy lines to output" msgstr "" #: misc/rkstandardactions.cpp:52 msgid "Run current line" msgstr "运行当前行" #: misc/rkstandardactions.cpp:62 msgid "Run selection" msgstr "运行选中的部分" #: misc/rkstandardactions.cpp:72 msgid "Run all" msgstr "运行全部" #: misc/rkstandardactions.cpp:82 msgid "&Function reference" msgstr "函数参考(&F)" #: misc/xmlhelper.cpp:64 msgid "Could not open file for reading" msgstr "无法打开想读的文件" #: misc/xmlhelper.cpp:66 msgid "" "Error parsing XML-file. Error-message was: '%1' in line '%2', column '%3'. " "Expect further errors to be reported below" msgstr "解析XML文件失败。错误信息为:在行\"%2\",列\"%3\"中\"%1\"。 在下面可以看到更多的错误报告。" #: misc/xmlhelper.cpp:177 msgid "Trying to retrieve children of invalid element" msgstr "试图获取非法元素的子元素" #: misc/xmlhelper.cpp:188 msgid "Expected exactly one element '%1' but found %2" msgstr "期望元素\"%1\",但找到的是\"%2\"" #: misc/xmlhelper.cpp:243 msgid "'%1'-attribute not given. Assuming '%2'" msgstr "未给出\"%1\"属性。假定为\"%2\"" #: misc/xmlhelper.cpp:261 msgid "Illegal attribute value. Allowed values are one of '%1', only." msgstr "非法属性值。合法的取值只能为\"%1\"中的某一个。" #: misc/xmlhelper.cpp:275 msgid "Illegal attribute value. Only integer numbers are allowed." msgstr "非法属性值。只允许使用整数值。" #: misc/xmlhelper.cpp:291 msgid "Illegal attribute value. Only real numbers are allowed." msgstr "非法属性值。只允许使用实数值。" #: misc/xmlhelper.cpp:309 msgid "Illegal attribute value. Allowed values are '%1' or '%2', only." msgstr "非法属性值。只允许使用属性值\"%1\"或\"%2\"。" #: misc/xmlhelper.cpp:325 msgid "Trying to retrieve contents of invalid element" msgstr "" #: misc/xmlhelper.cpp:338 msgid "XML-parsing '%1' " msgstr "正在解析XML文件\"%1\" " #: plugin/rkcomponentmap.cpp:118 plugin/rkcomponentmap.cpp:437 msgid "(no label)" msgstr "(无标签)" #: plugin/rkcomponentmap.cpp:259 msgid "" "You tried to invoke a plugin called '%1', but that plugin is currently " "unknown. Probably you need to load the corresponding PluginMap (Settings-" ">Configure RKWard->Plugins), or perhaps the plugin was renamed." msgstr "" #: plugin/rkcomponentmap.cpp:261 msgid "No such plugin" msgstr "" #: plugin/rkcomponentmap.cpp:271 msgid "" "Bad serialization format while trying to invoke plugin '%1'. Please contact " "the RKWard team (Help->About RKWard->Authors)." msgstr "" #: plugin/rkcomponentmap.cpp:273 msgid "Bad serialization format" msgstr "" #: plugin/rkcomponentmap.cpp:296 msgid "" "\n" "The plugin has crashed." msgstr "" #: plugin/rkcomponentmap.cpp:304 msgid "" "Not all specified settings could be applied. Most likely this is because " "some R objects are no longer present in your current workspace." msgstr "" #: plugin/rkcomponentmap.cpp:307 msgid "Not all settings applied" msgstr "" #: plugin/rkcomponentmap.cpp:320 msgid "" "\n" "The plugin could not be auto-submitted with these settings." msgstr "" #: plugin/rkcomponentmap.cpp:322 msgid "Could not submit" msgstr "" #: plugin/rkcomponentmap.cpp:358 msgid "" "Could not open plugin map file %1. (Is not readble, or failed to parse)" msgstr "" #: plugin/rkcomponentmap.cpp:373 msgid "" "Skipping plugin map file '%1': Not compatible with this version of RKWard" msgstr "" #: plugin/rkcomponentmap.cpp:388 msgid "" "Specified required file '%1' does not exist or is not readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:406 msgid "" "Could not resolve specified required pluginmap '%1'. You may have to install " "additional packages." msgstr "" #: plugin/rkcomponentmap.cpp:440 msgid "" "RKComponentMap already contains a component with id \"%1\". Ignoring second " "entry." msgstr "" #: plugin/rkcomponentmap.cpp:442 msgid "" "Specified file '%1' for component id \"%2\" does not exist or is not " "readable. Ignoring." msgstr "" #: plugin/rkcomponentmap.cpp:458 msgid "" "Component '%1' is not available in a version compatible with this version of " "RKWard" msgstr "" #: plugin/rkcomponentmeta.cpp:46 msgid "Unspecified" msgstr "" #: plugin/rkcomponentmeta.cpp:78 msgid "Copyright (c)" msgstr "" #: plugin/rkcomponentmeta.cpp:79 msgid "License" msgstr "" #: plugin/rkcomponentmeta.cpp:82 msgid "Authors:" msgstr "" #: plugin/rkcomponentmeta.cpp:88 msgctxt "Author roles (contributor, etc.)" msgid "Roles" msgstr "" #: plugin/rkcomponentmeta.cpp:200 msgid "RKWard plugin map" msgstr "" #: plugin/rkcomponentmeta.cpp:201 msgid "R package" msgstr "" #: plugin/rkcomponentproperties.cpp:839 msgid "This object has %1 dimension(s), but %2 dimension(s) is/are expected." msgstr "" #: plugin/rkcomponentproperties.cpp:842 msgid "" "This object has a length of %1, but a minimum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:843 msgid "" "This object has a length of %1, but a maximum length of %2 is expected." msgstr "" #: plugin/rkcomponentproperties.cpp:855 msgid "" "This object does not appear to belong to any of the classes %1." msgstr "" #: plugin/rkcomponentproperties.cpp:862 msgid "" "This object's data type is %1, while allowed type(s) is/are %2." msgstr "" #: plugin/rkdropdown.cpp:42 plugin/rkradio.cpp:45 msgid "Select one:" msgstr "选择一个:" #: plugin/rkformula.cpp:68 msgid "Specify model" msgstr "指定模型" #: plugin/rkformula.cpp:72 msgid "Full Model" msgstr "完整模型" #: plugin/rkformula.cpp:74 msgid "Main Effects only" msgstr "仅主效应" #: plugin/rkformula.cpp:76 msgid "Custom Model:" msgstr "自定义模型:" #: plugin/rkformula.cpp:102 msgid "Main effects" msgstr "主效应" #: plugin/rkformula.cpp:107 msgid "Level" msgstr "级别" #: plugin/rkformula.cpp:107 msgid "Term" msgstr "项" #: plugin/rkinput.cpp:50 msgid "Enter text" msgstr "输入文字:" #: plugin/rkmatrixinput.cpp:44 msgid "Enter data:" msgstr "" #: plugin/rkmatrixinput.cpp:488 msgid "Type on these cells to expand the table" msgstr "" #: plugin/rkmatrixinput.cpp:499 msgid "Empty values are not allowed" msgstr "" #: plugin/rkmatrixinput.cpp:523 msgid "This column contains illegal values in some of its cells" msgstr "" #: plugin/rkoptionset.cpp:57 msgid "Updating status, please wait" msgstr "" #: plugin/rkoptionset.cpp:218 msgid "Add a row / element" msgstr "" #: plugin/rkoptionset.cpp:220 msgid "Remove a row / element" msgstr "" #: plugin/rkoptionset.cpp:836 msgid "This row has not yet been processed." msgstr "" #: plugin/rkoptionset.cpp:837 msgid "This row contains invalid settings." msgstr "" #: plugin/rkoptionset.cpp:857 msgid "Please wait while settings are being processed" msgstr "" #: plugin/rkoptionset.cpp:860 msgid "One or more rows contain invalid settings." msgstr "" #: plugin/rkoptionset.cpp:861 msgid "At least %1 rows have to be defined (if any)" msgstr "" #: plugin/rkoptionset.cpp:862 msgid "At least %1 rows have to be defined" msgstr "" #: plugin/rkoptionset.cpp:863 msgid "At most %1 rows may be defined" msgstr "" #: plugin/rkoptionset.cpp:864 msgid "This element is not valid for the following reason(s):" msgstr "" #: plugin/rkpluginbrowser.cpp:53 msgid "Enter filename" msgstr "输入文件名" #: plugin/rkpluginbrowser.cpp:53 msgid "Select" msgstr "选择" #: plugin/rkpluginsaveobject.cpp:39 msgid "Save to:" msgstr "保存到:" #: plugin/rkpluginsaveobject.cpp:40 rkward.cpp:251 msgid "my.data" msgstr "我的数据" #: plugin/rkpluginspinbox.cpp:45 msgid "Enter value:" msgstr "输入值:" #: plugin/rkpreviewbox.cpp:55 msgid "Preview" msgstr "预览" #: plugin/rkpreviewbox.cpp:136 msgid "Preview not (currently) possible" msgstr "" #: plugin/rkpreviewbox.cpp:150 plugin/rkpreviewbox.cpp:203 msgid "Preview updating" msgstr "预览正在更新" #: plugin/rkpreviewbox.cpp:187 msgid "Warnings or Errors:" msgstr "" #: plugin/rkpreviewbox.cpp:197 msgid "Preview disabled" msgstr "预览已关闭" #: plugin/rkpreviewbox.cpp:201 msgid "Preview up to date" msgstr "预览已经是最新" #: plugin/rkpreviewbox.cpp:206 msgid "Preview not (yet) possible" msgstr "尚无法预览" #: plugin/rkstandardcomponent.cpp:94 msgid "" "There has been an error while trying to parse the description of this plugin " "('%1'). Please refer to stdout for details." msgstr "在试图分析此插件(\"%1\")的描述时出错。请查看标准输出以获取详细信息。" #: plugin/rkstandardcomponent.cpp:94 msgid "Could not create plugin" msgstr "无法创建插件" #: plugin/rkstandardcomponentgui.cpp:97 plugin/rkstandardcomponentgui.cpp:417 msgid "Submit" msgstr "提交" #: plugin/rkstandardcomponentgui.cpp:102 plugin/rkstandardcomponentgui.cpp:406 msgid "Close" msgstr "关闭" #: plugin/rkstandardcomponentgui.cpp:105 msgid "Auto close" msgstr "" #: plugin/rkstandardcomponentgui.cpp:111 plugin/rkstandardcomponentgui.cpp:315 msgid "Help" msgstr "帮助" #: plugin/rkstandardcomponentgui.cpp:117 msgid "Use Wizard" msgstr "使用向导" #: plugin/rkstandardcomponentgui.cpp:123 msgid "Code" msgstr "代码" #: plugin/rkstandardcomponentgui.cpp:178 msgid "Run again" msgstr "" #: plugin/rkstandardcomponentgui.cpp:266 msgid "Processing. Please wait" msgstr "正在处理。请当代。" #: plugin/rkstandardcomponentgui.cpp:341 msgid "" "Below you can see the command(s) corresponding to the settings you made. " "Click 'Submit' to run the command(s)." msgstr "以下您可以看到与您所做的设置相对应的命令。 点击\"提交\"运行这些命令。" #: plugin/rkstandardcomponentgui.cpp:394 plugin/rkstandardcomponentgui.cpp:412 msgid "Next >" msgstr "下一步 >" #: plugin/rkstandardcomponentgui.cpp:404 plugin/rkstandardcomponentgui.cpp:422 msgid "< Back" msgstr "< 上一步" #: plugin/rkstandardcomponentgui.cpp:425 msgid "Use Dialog" msgstr "使用对话框" #: plugin/rkvarslot.cpp:44 msgid "Variable:" msgstr "变量:" #: plugin/rkvarslot.cpp:142 msgid "

This object is not allowed, here, for the following reason(s):

" msgstr "" #: rbackend/rcommandstack.cpp:352 msgid "Running" msgstr "正在运行" #: rbackend/rcommandstack.cpp:355 msgid "Cancelled" msgstr "已取消" #: rbackend/rcommandstack.cpp:366 msgid "Command Stack" msgstr "命令栈" #: rbackend/rcommandstack.cpp:368 msgid "Command Chain" msgstr "命令链" #: rbackend/rcommandstack.cpp:370 msgid "Closed" msgstr "已关闭" #: rbackend/rcommandstack.cpp:371 msgid "Waiting" msgstr "正在等待" #: rbackend/rcommandstack.cpp:398 msgid "Command" msgstr "命令" #: rbackend/rcommandstack.cpp:401 msgid "Description" msgstr "描述" #: rbackend/rinterface.cpp:107 msgid "R Startup" msgstr "R已启动" #: rbackend/rinterface.cpp:295 msgid "" "

\t-An unspecified error occurred that is not yet handled by RKWard. " "Likely RKWard will not function properly. Please check your setup.

\n" msgstr "" #: rbackend/rinterface.cpp:297 msgid "" "

There was a problem starting the R backend. The following error(s) " "occurred:

\n" msgstr "" #: rbackend/rinterface.cpp:305 msgid "Error starting R" msgstr "启动R错误" #: rbackend/rinterface.cpp:524 msgid "" "A command in the R backend is trying to change the character encoding. While " "RKWard offers support for this, and will try to adjust to the new locale, " "this operation may cause subtle bugs, if data windows are currently open. " "Also the feature is not well tested, yet, and it may be advisable to save " "your workspace before proceeding.\n" "If you have any data editor opened, or in any doubt, it is recommended to " "close those first (this will probably be auto-detected in later versions of " "RKWard). In this case, please choose 'Cancel' now, then close the data " "windows, save, and retry." msgstr "" #: rbackend/rinterface.cpp:524 msgid "Locale change" msgstr "语言环境已改变" #: rbackend/rinterface.cpp:687 msgid "" "The R-backend has indicated that in order to carry out the current task it " "needs the package '%1', which is not currently installed. We will open the " "package-management tool, and there you can try to locate and install the " "needed package." msgstr "" "R后台提示说它需要函数包\"%1\"来执行当前的任务,但该包尚未被安装。 我们将为您打开函数包管理工具,然后您可以尝试定位和安装所需的函数包。" #: rbackend/rinterface.cpp:687 msgid "Require package '%1'" msgstr "需要函数包\"%1\"" #: rbackend/rinterface.cpp:783 msgid "R backend requests information" msgstr "R后台需要信息" #: rbackend/rinterface.cpp:810 msgid "" "\n" "The R backend will be shut down immediately. This means, you can not use any " "more functions that rely on it. I.e. you can do hardly anything at all, not " "even save the workspace (but if you're lucky, R already did that). What you " "can do, however, is save any open command-files, the output, or copy data " "out of open data editors. Quit RKWard after that.\n" "Since this should never happen, please write a mail to rkward-" "devel@lists.sourceforge.net, and tell us, what you were trying to do, when " "this happened. Sorry!" msgstr "" #: rbackend/rinterface.cpp:811 msgid "R engine has died" msgstr "R引擎已终止。" #: rbackend/rkfrontendtransmitter.cpp:110 msgid "" "Error during handshake with backend process. Expected token '%1', received " "token '%2'" msgstr "" #: rbackend/rkfrontendtransmitter.cpp:114 msgid "" "Version mismatch during handshake with backend process. Frontend is version " "'%1' while backend is '%2'.\n" "Please fix your installation." msgstr "" #: rbackend/rkrbackend.cpp:521 msgid "The R engine has shut down with status: %1" msgstr "" #: rbackend/rkrbackend.cpp:540 msgid "" "The R engine has encountered a fatal error:\n" "%1" msgstr "" #: rbackend/rkrbackend.cpp:709 msgid "Message from the R backend" msgstr "R后台消息" #: rbackend/rkrbackend.cpp:717 msgid "Question from the R backend" msgstr "" #: rbackend/rkrbackend.cpp:1541 msgid "" "

\t- The 'rkward' R-library either could not be loaded at all, or not in " "the correct version. This may lead to all sorts of errors, from single " "missing features to complete failure to function. The most likely cause is " "that the last installation did not place all files in the correct place. " "However, in some cases, left-overs from a previous installation that was not " "cleanly removed may be the cause.

\t\t

You should quit RKWard, now, " "and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rbackend/rkrbackend.cpp:1545 msgid "" "

\t-There was a problem setting up the communication with R. Most likely " "this indicates a broken installation.

\t\t

You should quit RKWard, " "now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

\n" msgstr "" #: rkconsole.cpp:75 msgid "" "The 'katepart' component could not be loaded. RKWard cannot run without " "katepart, and will exit, now. Please install katepart, and try again." msgstr "" #: rkconsole.cpp:75 msgid "'katepart' component could not be found" msgstr "" #: rkconsole.cpp:122 msgid "R Console" msgstr "R控制台" #: rkconsole.cpp:597 msgid "Syntax error\n" msgstr "语法错误\n" #: rkconsole.cpp:758 rkconsole.cpp:778 msgid "" "*.Rhistory|R history files (*.Rhistory)\n" "*|All files (*)" msgstr "" #: rkconsole.cpp:758 msgid "Select command history file to load" msgstr "" #: rkconsole.cpp:778 msgid "Select filename to save command history" msgstr "" #: rkconsole.cpp:895 msgid "Interrupt running command" msgstr "中断正在运行的命令" #: rkconsole.cpp:902 msgid "Copy selection literally" msgstr "复制选中的文本" #: rkconsole.cpp:905 msgid "Copy commands, only" msgstr "" #: rkconsole.cpp:912 msgid "Print Console" msgstr "" #: rkconsole.cpp:919 msgid "Import command history..." msgstr "" #: rkconsole.cpp:921 msgid "Export command history..." msgstr "" #: rkconsole.cpp:940 msgid "" "You have configured RKWard to pipe script editor commands through the R " "Console. However, another command is currently active in the console. Do you " "want to append it to the command in the console, or do you want to reset the " "console, first? Press cancel if you do not wish to run the new command, now." msgstr "" #: rkconsole.cpp:940 msgid "R Console is busy" msgstr "" #: rkconsole.cpp:940 msgid "Append" msgstr "" #: rkconsole.cpp:940 msgid "Reset, then submit" msgstr "" #: rkward.cpp:203 msgid "" "

RKWard either could not find its resource files at all, or only an old " "version of those files. The most likely cause is that the last installation " "failed to place the files in the correct place. This can lead to all sorts " "of problems, from single missing features to complete failure to " "function.

You should quit RKWard, now, and fix your " "installation. For help with that, see http://p.sf.net/rkward/compiling.

" msgstr "" #: rkward.cpp:203 msgid "Broken installation" msgstr "" #: rkward.cpp:220 msgid "" "Your installation of KDE is configured to use \"native\" file dialogs. This " "is known to cause issues in some cases, and we recommend to disable " "\"native\" file dialogs.\n" "Should \"native\" file dialogs be disabled in RKWard?" msgstr "" #: rkward.cpp:221 msgid "Potential problem with your configuration" msgstr "" #: rkward.cpp:221 msgid "Yes, disable" msgstr "" #: rkward.cpp:221 msgid "No, use \"native\" file dialogs" msgstr "" #: rkward.cpp:271 msgid "Setting up plugins..." msgstr "正在设置插件..." #: rkward.cpp:275 msgid "" "Plugins are needed: you may manage these through \"Settings->Configure " "RKWard\".\n" msgstr "需要插件:您可以通过\"设置\"->\"配置RKWard\"来管理它们。\n" #: rkward.cpp:275 msgid "No active plugin maps" msgstr "" #: rkward.cpp:308 msgid "" "New RKWard plugin packs (listed below) have been found, and have been " "activated, automatically. To de-activate selected plugin packs, use Settings-" ">Configure RKWard->Plugins." msgstr "" #: rkward.cpp:308 msgid "New plugins found" msgstr "" #: rkward.cpp:312 msgid "" "The following RKWard pluginmap files could not be loaded, and have been " "disabled. This could be because they are broken, not compatible with this " "version of RKWard, or not meant for direct loading (see the 'Details' for " "more information). They have been disabled." msgstr "" #: rkward.cpp:312 rkward.cpp:316 msgid "Failed to load some plugin maps" msgstr "" #: rkward.cpp:316 msgid "" "Some errors were encountered while loading the following RKWard pluginmap " "files. This could be because individual plugins are broken or not compatible " "with this version of RKWard (see the 'Details' for more information). Other " "plugins were loaded, successfully, however." msgstr "" #: rkward.cpp:316 msgid "" "Note: You will not be warned about these pluginmap files again, until you " "upgrade RKWard, or remove and re-add them in Settings->Configure RKWard-" ">Plugins." msgstr "" #: rkward.cpp:351 msgid "Carbon Copy Settings" msgstr "" #: rkward.cpp:365 settings/rksettingsmoduleobjectbrowser.cpp:123 msgid "Workspace" msgstr "工作区" #: rkward.cpp:374 msgid "Files" msgstr "文件" #: rkward.cpp:378 msgid "Pending Jobs" msgstr "挂起的工作" #: rkward.cpp:390 msgid "Debugger Frames" msgstr "" #: rkward.cpp:395 msgid "Debugger Console" msgstr "" #: rkward.cpp:399 msgid "RKWard Debug Messages" msgstr "" #: rkward.cpp:411 msgid "Dataset" msgstr "数据集" #: rkward.cpp:413 msgid "Creates new empty dataset and opens it for editing" msgstr "创建新的空白数据集,并打开它们进行编辑" #: rkward.cpp:416 msgid "Script File" msgstr "脚本文件" #: rkward.cpp:420 msgid "Open R Script File..." msgstr "" #: rkward.cpp:423 msgid "Open Recent R Script File" msgstr "" #: rkward.cpp:430 msgid "Import Data" msgstr "导入数据" #: rkward.cpp:431 msgid "Import data from a variety of file formats" msgstr "从各种文件格式中导入数据" #: rkward.cpp:435 msgid "Open Workspace..." msgstr "" #: rkward.cpp:437 msgid "Opens an existing document" msgstr "打开已存在的文档" #: rkward.cpp:440 msgid "Open Recent Workspace" msgstr "" #: rkward.cpp:441 msgid "Opens a recently used file" msgstr "打开最近打开过的文档" #: rkward.cpp:444 msgid "Save Workspace" msgstr "保存工作区" #: rkward.cpp:446 msgid "Saves the actual document" msgstr "保存当前文档" #: rkward.cpp:449 msgid "Save Workspace As" msgstr "工作区另存为..." #: rkward.cpp:450 msgid "Saves the actual document as..." msgstr "当前文档另存为..." #: rkward.cpp:453 msgid "Quits the application" msgstr "退出应用程序" #: rkward.cpp:456 msgid "Interrupt all commands" msgstr "" #: rkward.cpp:462 msgid "CC commands to output..." msgstr "" #: rkward.cpp:466 rkward.cpp:470 msgid "Manage R packages..." msgstr "" #: rkward.cpp:477 msgid "Close All Data" msgstr "关闭全部数据" #: rkward.cpp:478 msgid "Closes all open data editors" msgstr "关闭全部打开的数据编辑器" #: rkward.cpp:483 msgid "Close All" msgstr "全部关闭" #: rkward.cpp:487 windows/rktoolwindowbar.cpp:279 #: windows/rkworkplaceview.cpp:208 msgid "Detach" msgstr "卸下" #: rkward.cpp:492 msgid "[No actions available for current view]" msgstr "[当前视图没有可用的动作]" #: rkward.cpp:499 msgid "Open..." msgstr "" #: rkward.cpp:509 msgid "Import" msgstr "" #: rkward.cpp:512 msgid "Create..." msgstr "" #: rkward.cpp:519 msgid "Save..." msgstr "" #: rkward.cpp:523 msgid "Export" msgstr "" #: rkward.cpp:616 msgid "Ready." msgstr "就绪。" #: rkward.cpp:620 msgid "Current working directory" msgstr "" #: rkward.cpp:698 msgid "Exiting..." msgstr "正在退出..." #: rkward.cpp:706 msgid "Quitting RKWard: Do you want to save the workspace?" msgstr "退出RKWard:您想要保存当前工作区吗?" #: rkward.cpp:706 rkward.cpp:771 msgid "Save Workspace?" msgstr "保存工作区?" #: rkward.cpp:706 msgid "Don't quit" msgstr "不退出" #: rkward.cpp:736 msgid "New dataset" msgstr "新数据集" #: rkward.cpp:736 msgid "Enter name for the new dataset" msgstr "请输入新数据集的名称" #: rkward.cpp:746 msgid "Opening workspace..." msgstr "正在打开工作区..." #: rkward.cpp:752 rkward.cpp:754 msgid "Select workspace to open..." msgstr "" #: rkward.cpp:771 msgid "Do you want to save the current workspace?" msgstr "您想要保存当前工作区吗?" #: rkward.cpp:863 msgid "The R engine is busy." msgstr "" #: rkward.cpp:867 msgid "The R engine is idle." msgstr "" #: rkward.cpp:871 msgid "The R engine is being initialized." msgstr "" #: rkward.cpp:911 rkward.cpp:913 msgid "Open script file(s)" msgstr "" #: rkward.cpp:931 msgid "[Unnamed Workspace]" msgstr "[未命名的工作区]" #: robjectviewer.cpp:58 msgid "summary (x)" msgstr "概要(x)" #: robjectviewer.cpp:59 msgid "print (x)" msgstr "打印(x)" #: robjectviewer.cpp:60 msgid "str (x)" msgstr "" #: robjectviewer.cpp:88 msgid "Object was deleted!" msgstr "对象已被删除!" #: robjectviewer.cpp:131 msgid "Object Viewer: %1" msgstr "对象查看器:%1" #: robjectviewer.cpp:135 msgid "The object was changed. You may want to click \"Update\"" msgstr "对象已被修改。您可能需要点击\"更新\"按钮。" #: robjectviewer.cpp:172 windows/robjectbrowser.cpp:117 msgid "Update" msgstr "更新" #: robjectviewer.cpp:220 msgid "Fetching information. Please wait." msgstr "正在获取信息。请等待" #: robjectviewer.cpp:230 msgid "Click \"Update\" to fetch information" msgstr "点击“更新”按钮以获取更新信息" #: robjectviewer.cpp:251 msgid "Ready" msgstr "就绪" #: scriptbackends/qtscriptbackend.cpp:121 msgid "" "The QtScript-backend has reported an error:\n" "%1" msgstr "" #: scriptbackends/qtscriptbackend.cpp:121 msgid "Scripting error" msgstr "" #: scriptbackends/qtscriptbackend.cpp:234 msgid "" "Script Error: %1\n" "Backtrace:\n" "%2" msgstr "" #: scriptbackends/qtscriptbackend.cpp:253 msgid "" "The file \"%1\" (needed by \"%2\") could not be found. Please check your " "installation." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:71 msgid "" "There was an error while evaluating script code.\n" "File: %1\n" "Line: %2\n" "Message: %3." msgstr "" #: scriptbackends/rkcomponentscripting.cpp:89 msgid "" "error ('The file \"%1\" (needed by \"%2\") could not be found. Please check " "your installation.');\n" msgstr "" #: scriptbackends/scriptbackend.cpp:92 msgid "## Prepare\n" msgstr "## 准备\n" #: scriptbackends/scriptbackend.cpp:95 msgid "## Compute\n" msgstr "## 计算\n" #: scriptbackends/scriptbackend.cpp:98 msgid "## Print result\n" msgstr "## 打印结果\n" #: settings/rksettings.cpp:71 msgid "Settings" msgstr "设置" #: settings/rksettingsmodulecommandeditor.cpp:50 #: settings/rksettingsmodulegeneral.cpp:60 msgid "Settings marked with (*) do not take effect until you restart RKWard" msgstr "被\"*\"标记的设置只有在您重新启动RKWard后才会生效。" #: settings/rksettingsmodulecommandeditor.cpp:55 msgid "Code Completion" msgstr "代码补全" #: settings/rksettingsmodulecommandeditor.cpp:58 msgid "Enable code completion" msgstr "打开代码补全" #: settings/rksettingsmodulecommandeditor.cpp:65 msgid "Minimum number of characters before completion is attempted" msgstr "在尝试补全前,至少需要输入的字符个数" #: settings/rksettingsmodulecommandeditor.cpp:76 msgid "Timeout (milliseconds) before completion is attempted" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:87 msgid "Enable function argument hinting" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:94 msgid "Autosaves" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:100 msgid "Autosave interval (minutes)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:108 msgid "Keep autosave file after manual save" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:117 msgid "Opening script files" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:119 msgid "Number of scripts in recent file lists (*)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:122 msgid "" "

The number of recent files to remember (in the Open Recent R Script File " "menu).

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:128 msgid "R script file filters (separated by spaces)" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:131 msgid "" "

A list of filters (file name extensions) that should be treated as R " "script files. Most importantly, files matching one of these filters will " "always be opened with R syntax highlighting.

Filters are case " "insensitive.

" msgstr "" #: settings/rksettingsmodulecommandeditor.cpp:156 msgid "Script editor" msgstr "脚本编辑器" #: settings/rksettingsmoduleconsole.cpp:50 msgid "Load/Save command history" msgstr "载入/保存命令历史" #: settings/rksettingsmoduleconsole.cpp:55 msgid "Maximum length of command history" msgstr "命令历史的最大长度" #: settings/rksettingsmoduleconsole.cpp:57 #: settings/rksettingsmoduleconsole.cpp:63 #: settings/rksettingsmodulewatch.cpp:153 msgid "Unlimited" msgstr "无限制" #: settings/rksettingsmoduleconsole.cpp:61 msgid "Maximum number of paragraphs/lines to display in the console" msgstr "在控制台中显示的最大段/行数。" #: settings/rksettingsmoduleconsole.cpp:69 msgid "Run commands from script editor through console" msgstr "在脚本编辑器中通过控制台运行命令" #: settings/rksettingsmoduleconsole.cpp:74 msgid "Also add those commands to console history" msgstr "将这些命令也加入控制台历史" #: settings/rksettingsmoduleconsole.cpp:76 msgid "Do not add" msgstr "" #: settings/rksettingsmoduleconsole.cpp:77 msgid "Add only if single line" msgstr "" #: settings/rksettingsmoduleconsole.cpp:78 msgid "Add all commands" msgstr "" #: settings/rksettingsmoduleconsole.cpp:86 msgid "Command history is context sensitive by default" msgstr "命令历史缺省对上下文敏感" #: settings/rksettingsmoduleconsole.cpp:178 msgid "Console" msgstr "控制台" #: settings/rksettingsmoduledebug.cpp:42 msgid "" "These settings are for debugging purposes, only. It is safe to leave " "them untouched. Also, these settings will only apply to the current session, " "and will not be saved." msgstr "" #: settings/rksettingsmoduledebug.cpp:48 msgid "Debug level" msgstr "调试级别" #: settings/rksettingsmoduledebug.cpp:58 msgid "Debug flags" msgstr "调试标志" #: settings/rksettingsmoduledebug.cpp:83 msgid "Command timeout" msgstr "命令超时" #: settings/rksettingsmoduledebug.cpp:93 msgid "Note: Debug output is written to %1" msgstr "" #: settings/rksettingsmoduledebug.cpp:110 msgid "Debug" msgstr "调试" #: settings/rksettingsmodulegeneral.cpp:66 msgid "Directory where rkward may store files (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:72 msgid "Startup Action (*)" msgstr "启动时动作" #: settings/rksettingsmodulegeneral.cpp:76 msgid "" "Load .RData-file from current directory, if available (R option '--restore')" msgstr "" #: settings/rksettingsmodulegeneral.cpp:78 msgid "Ask for a file to open" msgstr "让用户选择一个文件打开" #: settings/rksettingsmodulegeneral.cpp:79 msgid "Show selection dialog (default)" msgstr "显示选择对话框(缺省)" #: settings/rksettingsmodulegeneral.cpp:84 msgid "Show RKWard Help on Startup" msgstr "在启动时显示RKWard帮助" #: settings/rksettingsmodulegeneral.cpp:89 msgid "Intial working directory (*)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:93 msgid "Do not change current directory on startup" msgstr "" #: settings/rksettingsmodulegeneral.cpp:94 msgid "RKWard files directory (as specified, above)" msgstr "" #: settings/rksettingsmodulegeneral.cpp:95 msgid "User home directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:96 msgid "Last used directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:97 msgid "The following directory (please specify):" msgstr "" #: settings/rksettingsmodulegeneral.cpp:101 msgid "Initial working directory" msgstr "" #: settings/rksettingsmodulegeneral.cpp:105 msgid "" "

The initial working directory to use. Note that if you are loading a " "workspace on startup, and you have configured RKWard to change to the " "directory of loaded workspaces, that directory will take precedence.

" msgstr "" #: settings/rksettingsmodulegeneral.cpp:110 msgid "" "The workplace layout (i.e. which script-, data-, help-windows are open) may " "be saved (and loaded) per R workspace, or independent of the R workspace. " "Which do you prefer?" msgstr "可以为每个工作区单独保存工作区布局(即哪些脚本、数据、帮助窗口应该被打开)设置,或者也可以使用全局设置。您想用那种方式?" #: settings/rksettingsmodulegeneral.cpp:119 msgid "Save/restore with R workspace, when saving/loading R workspace" msgstr "与R工作区一起保存/恢复工作区设置" #: settings/rksettingsmodulegeneral.cpp:122 msgid "" "Save/restore independent of R workspace (save at end of RKWard session, " "restore at next start)" msgstr "独立保存/恢复工作区设置(在RKWard会话结束时保存,下次启动时恢复)" #: settings/rksettingsmodulegeneral.cpp:125 msgid "Do not save/restore workplace layout" msgstr "不保存/恢复工作区设置" #: settings/rksettingsmodulegeneral.cpp:134 msgid "When loading a workspace, change to the corresponding directory." msgstr "" #: settings/rksettingsmodulegeneral.cpp:141 msgid "" "Warn when editing objects with more than this number of fields (0 for no " "limit):" msgstr "当编辑字段数量大于此数值时发出警告(数值为0表示不限制):" #: settings/rksettingsmodulegeneral.cpp:144 msgid "No limit" msgstr "不限制" #: settings/rksettingsmodulegeneral.cpp:151 msgid "MDI window focus behavior" msgstr "MDI窗口焦点行为" #: settings/rksettingsmodulegeneral.cpp:154 msgid "Click to focus" msgstr "点击以获取焦点" #: settings/rksettingsmodulegeneral.cpp:155 msgid "Focus follows mouse" msgstr "焦点跟随鼠标移动" #: settings/rksettingsmodulegeneral.cpp:184 msgid "General" msgstr "常规" #: settings/rksettingsmodulegraphics.cpp:48 msgid "Default window size" msgstr "" #: settings/rksettingsmodulegraphics.cpp:50 msgid "Default width (inches):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:54 msgid "Default height (inches)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:61 msgid "Use KDE printer dialog for printing devices (if available)" msgstr "" #: settings/rksettingsmodulegraphics.cpp:66 msgid "Screen device history" msgstr "" #: settings/rksettingsmodulegraphics.cpp:73 msgid "Maximum number of recorded plots:" msgstr "" #: settings/rksettingsmodulegraphics.cpp:77 msgid "Maximum size of a single recorded plot (in KB):" msgstr "" #: settings/rksettingsmodulegraphics.cpp:98 msgid "Onscreen Graphics" msgstr "" #: settings/rksettingsmoduleobjectbrowser.cpp:46 msgid "Which objects should be shown by default?" msgstr "缺省应该显示哪些对象?" #: settings/rksettingsmoduleobjectbrowser.cpp:48 msgid "Show hidden objects" msgstr "显示隐藏的对象" #: settings/rksettingsmoduleobjectbrowser.cpp:50 msgid "Show all environments" msgstr "显示全部环境" #: settings/rksettingsmoduleobjectbrowser.cpp:53 msgid "Show objects with children" msgstr "显示有子对象的对象" #: settings/rksettingsmoduleobjectbrowser.cpp:55 msgid "Show functions" msgstr "显示函数" #: settings/rksettingsmoduleobjectbrowser.cpp:57 msgid "Show variables" msgstr "显示变量" #: settings/rksettingsmoduleobjectbrowser.cpp:62 msgid "Which columns should be shown by default?" msgstr "缺省应该显示哪些栏目?" #: settings/rksettingsmoduleobjectbrowser.cpp:64 msgid "Label field" msgstr "标签" #: settings/rksettingsmoduleobjectbrowser.cpp:66 msgid "Type field" msgstr "类型" #: settings/rksettingsmoduleobjectbrowser.cpp:68 msgid "Class field" msgstr "种类" #: settings/rksettingsmoduleobjectbrowser.cpp:78 msgid "Never fetch the structure of these packages:" msgstr "永远不读取下列函数包的结构:" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add exclusion" msgstr "添加排除项" #: settings/rksettingsmoduleobjectbrowser.cpp:103 msgid "Add the name of the package that no structure should be fetched for" msgstr "添加不应读取其结构信息的函数包名称" #: settings/rksettingsmoduleoutput.cpp:47 msgid "Carbon copy commands to output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:53 msgid "Commands entered in the console" msgstr "" #: settings/rksettingsmoduleoutput.cpp:57 msgid "Commands run via the 'Run' menu" msgstr "" #: settings/rksettingsmoduleoutput.cpp:61 msgid "Commands originating from dialogs and plugins" msgstr "" #: settings/rksettingsmoduleoutput.cpp:65 msgid "Also carbon copy the command output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:155 msgid "Output Window options" msgstr "输出窗口选项" #: settings/rksettingsmoduleoutput.cpp:157 msgid "show window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:160 msgid "raise window on new output" msgstr "" #: settings/rksettingsmoduleoutput.cpp:167 msgid "Graphics" msgstr "" #: settings/rksettingsmoduleoutput.cpp:171 msgid "File format" msgstr "" #: settings/rksettingsmoduleoutput.cpp:173 msgid "" msgstr "" #: settings/rksettingsmoduleoutput.cpp:174 msgid "PNG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:175 msgid "SVG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:176 msgid "JPG" msgstr "" #: settings/rksettingsmoduleoutput.cpp:181 msgid "JPG quality" msgstr "" #: settings/rksettingsmoduleoutput.cpp:189 msgid "Width:" msgstr "" #: settings/rksettingsmoduleoutput.cpp:192 msgid "Height:" msgstr "" #: settings/rksettingsmoduleplugins.cpp:62 msgid "" "Some plugins are available with both, a wizard-like interface and a " "traditional dialog interface. If both are available, which mode of " "presentation do you prefer?" msgstr "某些插件同时提供向导界面和传统的对话框界面。如果同时存在两种界面,您希望使用哪一种?" #: settings/rksettingsmoduleplugins.cpp:72 msgid "Always prefer dialogs" msgstr "优先使用对话框" #: settings/rksettingsmoduleplugins.cpp:75 msgid "Prefer recommended interface" msgstr "使用插件本身推荐的界面" #: settings/rksettingsmoduleplugins.cpp:78 msgid "Always prefer wizards" msgstr "优先使用向导" #: settings/rksettingsmoduleplugins.cpp:90 msgid "R syntax display (in dialogs)" msgstr "R语法显示(在对话框中)" #: settings/rksettingsmoduleplugins.cpp:93 msgid "Code shown by default" msgstr "缺省显示代码" #: settings/rksettingsmoduleplugins.cpp:99 msgid "Default height of code display (pixels)" msgstr "代码显示的缺省高度(以像素为单位)" #: settings/rksettingsmoduleplugins.cpp:111 msgid "Select .pluginmap file(s)" msgstr "选择.pluginmap文件" #: settings/rksettingsmoduleplugins.cpp:132 msgid "Plugins" msgstr "插件" #: settings/rksettingsmoduleplugins.cpp:513 windows/rkhtmlwindow.cpp:627 msgid "Dependencies" msgstr "" #: settings/rksettingsmoduleplugins.cpp:527 msgid "Broken" msgstr "" #: settings/rksettingsmoduleplugins.cpp:529 msgid "Loaded" msgstr "" #: settings/rksettingsmoduleplugins.cpp:532 msgid "Quirky" msgstr "" #: settings/rksettingsmoduleplugins.cpp:551 msgid "Active" msgstr "" #: settings/rksettingsmoduleplugins.cpp:576 msgid "Select .pluginmap-file" msgstr "选择.pluginmap文件" #: settings/rksettingsmoduler.cpp:71 msgid "" "The following settings mostly affect R behavior in the console. It is " "generally safe to keep these unchanged." msgstr "下列各项设置大多会影响R控制台的行为。在通常情况下,不要修改它们。" #: settings/rksettingsmoduler.cpp:80 msgid "Display warnings" msgstr "显示警告信息" #: settings/rksettingsmoduler.cpp:83 msgid "Suppress warnings" msgstr "抑制警告信息" #: settings/rksettingsmoduler.cpp:84 msgid "Print warnings later (default)" msgstr "以后再打印警告信息(缺省)" #: settings/rksettingsmoduler.cpp:85 msgid "Print warnings immediately" msgstr "立即打印警告信息" #: settings/rksettingsmoduler.cpp:86 msgid "Convert warnings to errors" msgstr "将警告信息作为错误处理" #: settings/rksettingsmoduler.cpp:92 msgid "Decimal character (only for printing)" msgstr "小数点(仅打印用)" #: settings/rksettingsmoduler.cpp:99 msgid "Output width (characters)" msgstr "输出宽度(字符)" #: settings/rksettingsmoduler.cpp:105 msgid "Maximum number of elements shown in print" msgstr "在打印时最多显示的元素个数" #: settings/rksettingsmoduler.cpp:111 msgid "Maximum length of warnings/errors to print" msgstr "打印警告/错误信息的最大长度" #: settings/rksettingsmoduler.cpp:117 msgid "Keep comments in functions" msgstr "保留函数中的注释" #: settings/rksettingsmoduler.cpp:120 msgid "TRUE (default)" msgstr "真(缺省)" #: settings/rksettingsmoduler.cpp:121 msgid "FALSE" msgstr "假" #: settings/rksettingsmoduler.cpp:127 msgid "Keep comments in packages" msgstr "保留函数包中的注释" #: settings/rksettingsmoduler.cpp:130 settings/rksettingsmoduler.cpp:152 msgid "TRUE" msgstr "" #: settings/rksettingsmoduler.cpp:131 settings/rksettingsmoduler.cpp:153 msgid "FALSE (default)" msgstr "假(缺省)" #: settings/rksettingsmoduler.cpp:137 msgid "Maximum level of nested expressions" msgstr "表达式嵌套的最大层数" #: settings/rksettingsmoduler.cpp:143 msgid "Default decimal precision in print ()" msgstr "打印时的缺省小数位数" #: settings/rksettingsmoduler.cpp:149 msgid "Check vector bounds (warn)" msgstr "检查向量边界(警告)" #: settings/rksettingsmoduler.cpp:158 msgid "Editor command" msgstr "" #: settings/rksettingsmoduler.cpp:169 msgid "Pager command" msgstr "" #: settings/rksettingsmoduler.cpp:181 msgid "Use Internet Explorer functions for internet access" msgstr "" #: settings/rksettingsmoduler.cpp:186 msgid "" "

Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the " "internet from R (e.g. for installing packages).

" msgstr "" #: settings/rksettingsmoduler.cpp:191 msgid "Further (option) commands to run in each session" msgstr "" #: settings/rksettingsmoduler.cpp:213 msgid "R-Backend" msgstr "R后台" #: settings/rksettingsmoduler.cpp:351 msgid "CRAN download mirror (leave empty to be prompted once each session):" msgstr "" #: settings/rksettingsmoduler.cpp:358 msgid "Select mirror" msgstr "" #: settings/rksettingsmoduler.cpp:362 msgid "Additional package repositories (where libraries are downloaded from)" msgstr "" #: settings/rksettingsmoduler.cpp:368 msgid "Archive downloaded packages" msgstr "归档下载的函数包" #: settings/rksettingsmoduler.cpp:374 msgid "Build packages from source" msgstr "" #: settings/rksettingsmoduler.cpp:377 msgid "Build packages from source (not configurable on this platform)" msgstr "" #: settings/rksettingsmoduler.cpp:381 msgid "" "Installing packages from pre-compiled binaries (if available) is generally " "faster, and does not require an installation of development tools and " "libraries. On the other hand, building packages from source provides best " "compatibility. On Mac OS X and Linux, building packages from source is " "currently recommended." msgstr "" #: settings/rksettingsmoduler.cpp:387 msgid "R Library locations (where libraries get installed to, locally)" msgstr "" #: settings/rksettingsmoduler.cpp:392 msgid "" "Note: The startup defaults will always be used in addition to the locations " "you specify in this list" msgstr "注意:除了在这个表中指定的地点外,启动缺省项也会一并被使用。" #: settings/rksettingsmoduler.cpp:418 msgid "Add R Library Directory" msgstr "添加R函数库目录" #: settings/rksettingsmoduler.cpp:426 msgid "Add repository" msgstr "添加仓库" #: settings/rksettingsmoduler.cpp:426 msgid "Add URL of new repository" msgstr "" #: settings/rksettingsmoduler.cpp:432 msgid "R-Packages" msgstr "R函数包" #: settings/rksettingsmoduler.cpp:438 msgid "Select CRAN mirror" msgstr "" #: settings/rksettingsmodulewatch.cpp:123 msgid "" "For now, settings only apply to new commands. All previous commands remain " "visible/invisible." msgstr "目前,设置只会被应用于新命令。以前的全部命令将保持可见/不可见状态。" #: settings/rksettingsmodulewatch.cpp:131 msgid "always show command" msgstr "总是显示命令" #: settings/rksettingsmodulewatch.cpp:134 msgid "always show result" msgstr "总是显示结果" #: settings/rksettingsmodulewatch.cpp:137 msgid "show errors" msgstr "显示错误" #: settings/rksettingsmodulewatch.cpp:140 msgid "show/raise window" msgstr "显示/唤出窗口" #: settings/rksettingsmodulewatch.cpp:144 msgid "User commands" msgstr "用户命令" #: settings/rksettingsmodulewatch.cpp:145 msgid "Plugin generated commands" msgstr "插件生成的命令" #: settings/rksettingsmodulewatch.cpp:146 msgid "Application commands" msgstr "应用程序命令" #: settings/rksettingsmodulewatch.cpp:147 msgid "Synchronization commands" msgstr "同步命令" #: settings/rksettingsmodulewatch.cpp:151 msgid "Maximum number of paragraphs/lines to display in the Command Log" msgstr "在命令日志中显示的最大段/行数" #: settings/rksettingsmodulewatch.cpp:275 windows/rkcommandlog.cpp:55 msgid "Command log" msgstr "命令日志" #: windows/detachedwindowcontainer.cpp:46 msgid "Attach to main window" msgstr "挂接到主窗口" #: windows/rcontrolwindow.cpp:51 msgid "Configure R backend" msgstr "配置R后台" #: windows/rcontrolwindow.cpp:56 windows/rcontrolwindow.cpp:142 msgid "Pause execution" msgstr "暂停执行" #: windows/rcontrolwindow.cpp:61 msgid "Cancel selected commands" msgstr "取消选中的命令" #: windows/rcontrolwindow.cpp:133 msgid "" "Some of the commands you were trying to cancel are marked as \"sync\" " "(letter 'S' in the type column). Cancelling such commands could lead to loss " "of data. These commands have _not_ been cancelled." msgstr "在您试图取消的命令中,有些被标记为\"同步的\"(在类型栏中以\"S\"标记)。取消这类命令可能会导致数据丢失。因此这些命令并未被取消。" #: windows/rcontrolwindow.cpp:133 msgid "Some commands not cancelled" msgstr "部分命令未被取消" #: windows/rcontrolwindow.cpp:146 msgid "Resume execution" msgstr "恢复执行" #: windows/rkcallstackviewer.cpp:96 msgid "Active calls" msgstr "" #: windows/rkcallstackviewer.cpp:125 windows/rkdebugconsole.cpp:100 msgid "Not in a debugger context" msgstr "" #: windows/rkcallstackviewer.cpp:144 msgid "" "Current call: %1
Environment: %2
Local objects: %3" msgstr "" #: windows/rkcommandeditorwindow.cpp:109 msgid "Script Editor" msgstr "" #: windows/rkcommandeditorwindow.cpp:220 msgid "Insert line break and run" msgstr "" #: windows/rkcommandeditorwindow.cpp:225 msgid "Run block" msgstr "运行代码块" #: windows/rkcommandeditorwindow.cpp:229 msgid "Mark selection as block" msgstr "将当前选择标为代码块" #: windows/rkcommandeditorwindow.cpp:232 msgid "Unmark block" msgstr "取消代码块标记" #: windows/rkcommandeditorwindow.cpp:237 msgid "CD to script directory" msgstr "" #: windows/rkcommandeditorwindow.cpp:239 msgid "Change the working directory to the directory of this script" msgstr "" #: windows/rkcommandeditorwindow.cpp:244 msgid "Save Script..." msgstr "" #: windows/rkcommandeditorwindow.cpp:246 msgid "Save Script As..." msgstr "" #: windows/rkcommandeditorwindow.cpp:337 windows/rkcommandeditorwindow.cpp:575 msgid " [modified]" msgstr " [有改动]" #: windows/rkcommandeditorwindow.cpp:344 msgid "The document \"%1\" has been modified. Close it anyway?" msgstr "文档\"%1\"中存在未被保存的改动。仍要关闭它吗?" #: windows/rkcommandeditorwindow.cpp:344 msgid "File not saved" msgstr "文件未保存" #: windows/rkcommandeditorwindow.cpp:507 msgid "" "An error occurred while trying to create an autosave of the script file '%1':" msgstr "" #: windows/rkcommandeditorwindow.cpp:574 msgid "Unnamed" msgstr "未命名的" #: windows/rkcommandeditorwindow.cpp:824 msgid "%1 (Active)" msgstr "%1(激活)" #: windows/rkcommandeditorwindow.cpp:851 msgid "%1 (Unused)" msgstr "%1(未使用)" #: windows/rkcommandlog.cpp:185 msgid "Incomplete statement.\n" msgstr "不完整的指令。\n" #: windows/rkcommandlog.cpp:187 msgid "Syntax error.\n" msgstr "语法错误。\n" #: windows/rkcommandlog.cpp:189 msgid "An unspecified error occurred while running the command.\n" msgstr "在运行该命令时发生了一个没有特别指明的错误。\n" #: windows/rkcommandlog.cpp:288 msgid "Configure" msgstr "配置" #: windows/rkdebugconsole.cpp:54 msgid "Next" msgstr "" #: windows/rkdebugconsole.cpp:57 msgid "Step out" msgstr "" #: windows/rkdebugconsole.cpp:59 msgid "" "

Continue until the caller of this function is reached (unless another " "debug statement is hit, earlier)

Note: In some cases, the " "calling function will never be reached, because the call was the last step " "in the caller.In these cases, the behavior is identical to 'Continue'.

" msgstr "" #: windows/rkdebugconsole.cpp:63 msgid "Continue" msgstr "" #: windows/rkdebugconsole.cpp:170 msgid "" "This window cannot be closed, while a debugger is active. If you have no " "idea what this means, and you want to get out, press the 'Cancel' button on " "the right hand side of this window." msgstr "" #: windows/rkdebugmessagewindow.cpp:78 msgid "" "

This window is used for displaying RKWard related debug messages. It is " "targetted primarily at (plugin) developers. It does not offer any " "features for debugging R code.

Note that the list of message is " "cleared everytime you close the window.

Type and severity level of " "messages can be controlled from Settings->Configure RKWard->Debug

" msgstr "" #: windows/rkdebugmessagewindow.cpp:79 msgid "About this window" msgstr "" #: windows/rkhelpsearchwindow.cpp:73 msgid "Find:" msgstr "查找" #: windows/rkhelpsearchwindow.cpp:76 msgid "Fields:" msgstr "字段:" #: windows/rkhelpsearchwindow.cpp:94 windows/robjectbrowser.cpp:295 msgid "All" msgstr "全部" #: windows/rkhelpsearchwindow.cpp:95 msgid "All but keywords" msgstr "除关键字外的全部" #: windows/rkhelpsearchwindow.cpp:96 msgid "Keywords" msgstr "关键字" #: windows/rkhelpsearchwindow.cpp:100 msgid "Package:" msgstr "包:" #: windows/rkhelpsearchwindow.cpp:113 msgid "Case sensitive" msgstr "大小写敏感" #: windows/rkhelpsearchwindow.cpp:115 msgid "Fuzzy matching" msgstr "模糊匹配" #: windows/rkhelpsearchwindow.cpp:119 msgid "Find" msgstr "查找" #: windows/rkhelpsearchwindow.cpp:134 msgid "Help search" msgstr "帮助查找" #: windows/rkhelpsearchwindow.cpp:171 msgid "Find HTML help for %1" msgstr "" #: windows/rkhelpsearchwindow.cpp:229 msgid "All installed packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:230 msgid "All loaded packages" msgstr "" #: windows/rkhelpsearchwindow.cpp:258 msgid "" "No help found on '%1'. Maybe the corresponding package is not " "installed/loaded, or maybe you mistyped the command. Try using Help->Search " "R Help for more options." msgstr "" "未找到关于\"%1\"的帮助。或许对应的函数包未被安装或载入。也可能是您输错了命令。 请使用\"帮助\"->\"查找R帮助\"以获取更多选项。" #: windows/rkhelpsearchwindow.cpp:258 msgid "No help found" msgstr "未找到帮助信息" #: windows/rkhelpsearchwindow.cpp:342 msgid "Topic" msgstr "主题" #: windows/rkhelpsearchwindow.cpp:344 msgid "Package" msgstr "包" #: windows/rkhtmlwindow.cpp:153 msgid "&Flush Output" msgstr "清空输出(&F)" #: windows/rkhtmlwindow.cpp:157 msgid "&Refresh Output" msgstr "刷新输出(&R)" #: windows/rkhtmlwindow.cpp:378 msgid "Output %1" msgstr "" #: windows/rkhtmlwindow.cpp:420 msgid "Print output" msgstr "" #: windows/rkhtmlwindow.cpp:422 msgid "Export page as HTML" msgstr "" #: windows/rkhtmlwindow.cpp:426 msgid "Output Window" msgstr "" #: windows/rkhtmlwindow.cpp:434 msgid "Print page" msgstr "" #: windows/rkhtmlwindow.cpp:436 msgid "Save Output as HTML" msgstr "以HTML格式保存输出" #: windows/rkhtmlwindow.cpp:455 msgid "" "

RKWard output file could not be found

\n" "" msgstr "" #: windows/rkhtmlwindow.cpp:457 msgid "Page does not exist or is broken" msgstr "页面不存在或已被破坏" #: windows/rkhtmlwindow.cpp:465 msgid "" "Do you really want to clear the output? This will also remove all image " "files used in the output. It will not be possible to restore it." msgstr "" #: windows/rkhtmlwindow.cpp:465 msgid "Flush output?" msgstr "清空输出?" #: windows/rkhtmlwindow.cpp:470 msgid "Flushing output" msgstr "" #: windows/rkhtmlwindow.cpp:524 msgid "No Title" msgstr "无标题" #: windows/rkhtmlwindow.cpp:537 msgid "" "

Help page missing

\n" "

The help page for this component has not yet been written (or is broken). " "Please consider contributing it.

\n" msgstr "" #: windows/rkhtmlwindow.cpp:542 msgid "Use %1 now" msgstr "" #: windows/rkhtmlwindow.cpp:559 msgid "Summary" msgstr "概要" #: windows/rkhtmlwindow.cpp:565 msgid "Usage" msgstr "用途" #: windows/rkhtmlwindow.cpp:582 msgid "GUI settings" msgstr "图形界面(GUI)设置" #: windows/rkhtmlwindow.cpp:591 msgid "Unnamed GUI element" msgstr "未命名的图形界面元素" #: windows/rkhtmlwindow.cpp:612 msgid "Related functions and pages" msgstr "有关的函数与页面" #: windows/rkhtmlwindow.cpp:619 msgid "Technical details" msgstr "技术细节" #: windows/rkhtmlwindow.cpp:645 msgid "About" msgstr "" #: windows/rkhtmlwindow.cpp:651 msgid "

On this page:

" msgstr "" #: windows/rkhtmlwindow.cpp:712 msgid "R Reference on '%1'" msgstr "关于\"%1\"的R参考资料" #: windows/rkhtmlwindow.cpp:727 msgid "BROKEN REFERENCE" msgstr "损坏的引用" #: windows/rkmdiwindow.cpp:299 msgid "Help on %1" msgstr "" #: windows/rkmdiwindow.cpp:303 msgid "Configure %1" msgstr "" #: windows/rktoolwindowbar.cpp:279 msgid "Attach" msgstr "附加" #: windows/rktoolwindowbar.cpp:282 msgid "Position" msgstr "" #: windows/rktoolwindowbar.cpp:283 msgid "Left Sidebar" msgstr "左侧边栏" #: windows/rktoolwindowbar.cpp:284 msgid "Right Sidebar" msgstr "右侧边栏" #: windows/rktoolwindowbar.cpp:285 msgid "Top Sidebar" msgstr "顶部边栏" #: windows/rktoolwindowbar.cpp:286 msgid "Bottom Sidebar" msgstr "底部边栏" #: windows/rktoolwindowbar.cpp:287 msgid "Not shown in sidebar" msgstr "" #: windows/rktoplevelwindowgui.cpp:59 msgid "Help on R" msgstr "关于R的帮助" #: windows/rktoplevelwindowgui.cpp:61 msgid "Search R Help" msgstr "查找R帮助" #: windows/rktoplevelwindowgui.cpp:63 msgid "Help on RKWard" msgstr "关于RKWard的帮助" #: windows/rktoplevelwindowgui.cpp:69 msgid "Shows the R help index" msgstr "显示R帮助索引" #: windows/rktoplevelwindowgui.cpp:70 msgid "Shows/raises the R Help Search window" msgstr "显示/唤出R帮助查找窗口" #: windows/rktoplevelwindowgui.cpp:71 msgid "Show help on RKWard" msgstr "显示关于RKWard的帮助" #: windows/rktoplevelwindowgui.cpp:76 msgid "Previous Window" msgstr "前一个窗口" #: windows/rktoplevelwindowgui.cpp:80 msgid "Next Window" msgstr "下一个窗口" #: windows/rktoplevelwindowgui.cpp:87 msgid "Show/Hide %1" msgstr "" #: windows/rktoplevelwindowgui.cpp:93 msgid "Activate Document view" msgstr "激活文档视图" #: windows/rktoplevelwindowgui.cpp:97 msgid "Show &Output" msgstr "显示输出(&O)" #: windows/rktoplevelwindowgui.cpp:112 msgid "" "For technical reasons, the following dialog allows you to configure the " "keyboard shortcuts only for those parts of RKWard that are currently " "active.\n" "\n" "Therefore, if you want to configure keyboard shortcuts e.g. for use inside " "the script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:112 windows/rktoplevelwindowgui.cpp:125 msgid "Note" msgstr "" #: windows/rktoplevelwindowgui.cpp:118 msgid "RKWard Plugins" msgstr "" #: windows/rktoplevelwindowgui.cpp:125 msgid "" "For technical reasons, the following dialog allows you to configure the " "toolbar buttons only for those parts of RKWard that are currently active.\n" "\n" "Therefore, if you want to configure tool buttons e.g. for use inside the " "script editor, you need to open a script editor window, and activate it." msgstr "" #: windows/rktoplevelwindowgui.cpp:146 msgid "---Problem description---\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:147 msgid "" "Please give a brief summary on the problem:\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:148 msgid "" "What - in detail - did you do directly before you encountered this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:149 msgid "" "When you try to repeat the above, does the problem occur again (no, " "sometimes, always)?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:150 msgid "" "If applicable: When doing the same thing in an R session outside of RKWard, " "do you see the same problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:151 msgid "" "Do you have any further information that might help us to track this problem " "down? In particular, if applicable, can you provide sample data and sample R " "code to reproduce this problem?\n" "###Please fill in###\n" "\n" msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "" "Please stand by while gathering some information on your setup.\n" "In case the backend has died or hung up, you may want to press 'Cancel' to " "skip this step." msgstr "" #: windows/rktoplevelwindowgui.cpp:154 msgid "Gathering setup information" msgstr "" #: windows/rktoplevelwindowgui.cpp:166 msgid "Reporting bugs in RKWard" msgstr "" #: windows/rktoplevelwindowgui.cpp:170 msgid "" "

Where should I report bugs or wishes?

Please submit your bug " "reports or wishes at %1 or send email to %2.

What information should I " "provide?

Please copy the information shown below, and fill in the " "details to the questions.

" msgstr "" #: windows/rkwindowcatcher.cpp:70 msgid "" "You have created a new graphics device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "However, this is not currently supported in this build of RKWard on Mac OS " "X. See http://p.sf.net/rkward/mac for more information." msgstr "" #: windows/rkwindowcatcher.cpp:70 windows/rkwindowcatcher.cpp:72 msgid "Could not embed R X11 window" msgstr "无法嵌入R X11窗口" #: windows/rkwindowcatcher.cpp:72 msgid "" "You have created a new X11 device window in R. Usually, RKWard tries to " "detect such windows, to take control of them, and add a menu-bar to them. " "This time, however, RKWard failed to detect, which window was created, and " "so can not embed it.\n" "If you created the window on a different screen or X11 display, that is to " "be expected. You might want to consider changing options(\"display\"), " "then.\n" "If you can see the X11 window on the same screen as this message, then " "RKWard should do better. In this case, please contact us at rkward-" "devel@lists.sourceforge.net with details on your setup, so we can try to fix " "this in future versions of RKWard." msgstr "" "您已经在R中创建了一个新的X11设备窗口。通常,RKWard会试图自动检测此类窗口,接管对它们的控制,并在它们中添加菜单栏。 " "但是,现在,RKWard检测窗口创建的试图失败了,因此无法嵌入它。 " "如果您是在别的屏幕或X11显示器中创建了此窗口,就会出现这种情况。您应该考虑修改选项(\"显示器\")。 " "如果您在同一个屏幕中看到了X11窗口和本消息,这说明RKWard本身工作得还不够好。在这种情况下,请您通过 邮件列表rkward-" "devel@lists.sourceforge.net向我们说明具体情况,这样我们可以在以后的RKWard版本中对它进行改进。" #: windows/rkwindowcatcher.cpp:152 msgid "An error occurred" msgstr "有错误发生" #: windows/rkwindowcatcher.cpp:154 msgid "Graphics Device Window" msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "" "The current window appears too large to fit on the screen. If this happens " "regularly, you may want to adjust the default graphics window size in " "Settings->Configure RKWard->Onscreen Graphics." msgstr "" #: windows/rkwindowcatcher.cpp:230 msgid "Large window" msgstr "" #: windows/rkwindowcatcher.cpp:267 msgid "Closing device (saving history)" msgstr "" #: windows/rkwindowcatcher.cpp:269 msgid "Shutting down device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:274 msgid "" "

The graphics device is being closed, saving the last plot to the plot " "history. This may take a while, if the R backend is still busy. You can " "close the graphics device immediately, in case it is stuck. However, the " "last plot may be missing from the plot history, if you do this.

" msgstr "" #: windows/rkwindowcatcher.cpp:276 msgid "" "

Note: On X11, the embedded window may be expurged, and you will have to " "close it manually in this case.

" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Close immediately" msgstr "" #: windows/rkwindowcatcher.cpp:278 msgid "Keep waiting" msgstr "" #: windows/rkwindowcatcher.cpp:365 msgid "Specify fixed size" msgstr "指定固定尺寸" #: windows/rkwindowcatcher.cpp:371 msgid "Width" msgstr "宽度" #: windows/rkwindowcatcher.cpp:375 msgid "Height" msgstr "高度" #: windows/rkwindowcatcher.cpp:393 msgid "Activate graphics device number %1" msgstr "激活图像设备号码%1" #: windows/rkwindowcatcher.cpp:399 msgid "Copy contents of graphics device number %1 to output" msgstr "复制图像设备号码%1中的内容到输出" #: windows/rkwindowcatcher.cpp:407 msgid "Print contents of graphics device number %1" msgstr "打印图像设备号码%1中的内容" #: windows/rkwindowcatcher.cpp:416 msgid "Specify R object" msgstr "指定R对象" #: windows/rkwindowcatcher.cpp:421 msgid "Specify the R object name, you want to save the graph to" msgstr "指定您想要保存图像内容到的R对象名" #: windows/rkwindowcatcher.cpp:433 msgid "Save contents of graphics device number %1 to object '%2'" msgstr "保存图像设备号码%1中的内容到对象%2" #: windows/rkwindowcatcher.cpp:442 msgid "Duplicate graphics device number %1" msgstr "复制图像设备号码%1" #: windows/rkwindowcatcher.cpp:448 msgid "Load next plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:449 windows/rkwindowcatcher.cpp:457 #: windows/rkwindowcatcher.cpp:465 windows/rkwindowcatcher.cpp:473 #: windows/rkwindowcatcher.cpp:481 msgid "Loading plot from history" msgstr "" #: windows/rkwindowcatcher.cpp:456 msgid "Load previous plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:464 msgid "Load first plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:472 msgid "Load last plot in device number %1" msgstr "" #: windows/rkwindowcatcher.cpp:480 msgid "Load plot %1 in device number %2" msgstr "" #: windows/rkwindowcatcher.cpp:488 msgid "Append this plot to history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:494 msgid "Remove current plot from history (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:500 msgid "" "This will clear the plot history for all device windows, not just this one. " "If this is not your intent, press cancel, below." msgstr "" #: windows/rkwindowcatcher.cpp:502 msgid "Clear plot history" msgstr "" #: windows/rkwindowcatcher.cpp:508 msgid "Plot properties (device number %1)" msgstr "" #: windows/rkwindowcatcher.cpp:522 msgid "" msgstr "" #: windows/rkwindowcatcher.cpp:582 msgid "Draw area follows size of window" msgstr "绘图区遵循窗口的尺寸" #: windows/rkwindowcatcher.cpp:588 msgid "Set fixed size 500x500" msgstr "设定固定尺寸500x500" #: windows/rkwindowcatcher.cpp:590 msgid "Set fixed size 1000x1000" msgstr "设定固定尺寸1000x1000" #: windows/rkwindowcatcher.cpp:592 msgid "Set fixed size 2000x2000" msgstr "设定固定尺寸2000x2000" #: windows/rkwindowcatcher.cpp:594 msgid "Set specified fixed size..." msgstr "设定指定的固定尺寸..." #: windows/rkwindowcatcher.cpp:597 msgid "Previous plot" msgstr "" #: windows/rkwindowcatcher.cpp:601 msgid "First plot" msgstr "" #: windows/rkwindowcatcher.cpp:605 msgid "Next plot" msgstr "" #: windows/rkwindowcatcher.cpp:609 msgid "Last plot" msgstr "" #: windows/rkwindowcatcher.cpp:612 msgid "Go to plot" msgstr "" #: windows/rkwindowcatcher.cpp:619 msgid "Append this plot" msgstr "" #: windows/rkwindowcatcher.cpp:623 msgid "Remove this plot" msgstr "" #: windows/rkwindowcatcher.cpp:629 msgid "Clear history" msgstr "" #: windows/rkwindowcatcher.cpp:634 msgid "Plot properties" msgstr "" #: windows/rkwindowcatcher.cpp:638 msgid "Make active" msgstr "激活" #: windows/rkwindowcatcher.cpp:641 msgid "Copy to output" msgstr "拷贝到输出" #: windows/rkwindowcatcher.cpp:645 msgid "Store as R object..." msgstr "保存为R对象..." #: windows/rkwindowcatcher.cpp:647 msgid "Duplicate" msgstr "复制" #: windows/rkworkplace.cpp:273 msgid "" "The url you are trying to open ('%1') is not a local file or the filetype is " "not supported by RKWard. Do you want to open the url in the default " "application?" msgstr "" #: windows/rkworkplace.cpp:273 msgid "Open in default application?" msgstr "在缺省应用程序中打开?" #: windows/rkworkplace.cpp:301 msgid "Unable to open \"%1\"" msgstr "无法打开\"%1\"" #: windows/rkworkplace.cpp:301 msgid "Could not open command file" msgstr "无法打开命令文件" #: windows/rkworkplace.cpp:413 msgid "" "You are about to edit object \"%1\", which is very large (%2 fields). RKWard " "is not optimized to handle very large objects in the built in data editor. " "This will use a lot of memory, and - depending on your system - might be " "very slow. For large objects it is generally recommended to edit using " "command line means or to split into smaller chunks before editing. On the " "other hand, if you have enough memory, or the data is simple enough (numeric " "data is easier to handle, than factor), editing may not be a problem at all. " "You can configure this warning (or turn it off entirely) under Settings-" ">Configure RKWard->General.\n" "Really edit object?" msgstr "" "您将要编辑一个很大的对象\"%1\"(有%2个字段)。RKWard内置的数据编辑器并未对处理很大对象的操作进行优化。这将会使用大量的内存,并且──根据您系" "统的具体配置情况──可能会很慢。 " "因此,对于大对象,最好使用命令行,或者将它们分割成小块之后再进行编辑。另一方面,如果您的内存足够大,或者对象里面的数据足够简单,编辑它们通常也不会有问题。" "您可以在\"设置\"->\"配置RKWard\"->\"常规\"中设置或关闭此警告信息。 真的要编辑此对象吗?" #: windows/rkworkplace.cpp:413 msgid "About to edit very large object" msgstr "将要编辑非常大的对象" #: windows/rkworkplace.cpp:610 msgid "Save Workplace layout" msgstr "保存工作区布局" #: windows/rkworkplace.cpp:617 msgid "Restore Workplace layout" msgstr "恢复工作区布局" #: windows/rkworkplaceview.cpp:84 msgid "Window Left" msgstr "窗口左侧" #: windows/rkworkplaceview.cpp:88 msgid "Window Right" msgstr "窗口右侧" #: windows/robjectbrowser.cpp:65 msgid "R workspace browser" msgstr "" #: windows/robjectbrowser.cpp:68 msgid "R Workspace" msgstr "" #: windows/robjectbrowser.cpp:120 msgid "Search Help" msgstr "寻找帮助" #: windows/robjectbrowser.cpp:122 msgid "Edit" msgstr "编辑" #: windows/robjectbrowser.cpp:124 msgid "View" msgstr "查看" #: windows/robjectbrowser.cpp:126 msgid "Rename" msgstr "重命名" #: windows/robjectbrowser.cpp:128 msgid "Copy to new symbol" msgstr "拷贝到新的符号" #: windows/robjectbrowser.cpp:130 msgid "Copy to .GlobalEnv" msgstr "拷贝到全局环境(.GlobalEnv)" #: windows/robjectbrowser.cpp:132 msgid "Delete" msgstr "删除" #: windows/robjectbrowser.cpp:134 msgid "Unload Package" msgstr "" #: windows/robjectbrowser.cpp:136 msgid "Load / Unload Packages" msgstr "" #: windows/robjectbrowser.cpp:187 msgid "Copy object" msgstr "拷贝对象" #: windows/robjectbrowser.cpp:187 msgid "Enter the name to copy to" msgstr "输入要拷贝目标的名称" #: windows/robjectbrowser.cpp:203 msgid "" "An object named '%1' already exists in the GlobalEnv. Created the copy as " "'%2' instead." msgstr "在全局环境中已存在一个名为\"%1\"的对象。用名称\"%2\"创建了拷贝。" #: windows/robjectbrowser.cpp:203 msgid "Name already in use" msgstr "名称已被使用" #: windows/robjectbrowser.cpp:233 msgid "Rename object" msgstr "重命名对象" #: windows/robjectbrowser.cpp:233 msgid "Enter the new name" msgstr "输入新名称" #: windows/robjectbrowser.cpp:296 msgid "Non-Functions" msgstr "非函数" #: windows/robjectbrowser.cpp:306 msgid "Show All Environments" msgstr "显示全部环境" #: windows/robjectbrowser.cpp:310 msgid "Show Hidden Objects" msgstr "显示隐藏对象" #. i18n: file: dataeditor/rkeditordataframepart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: rkconsolepart.rc:12 #. i18n: ectx: Menu (edit) #. i18n: file: rkwardui.rc:36 #. i18n: ectx: Menu (edit) #. i18n: file: windows/detachedwindowcontainer.rc:11 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandeditorwindowpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkcommandlogpart.rc:4 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkhelpwindow.rc:7 #. i18n: ectx: Menu (edit) #. i18n: file: windows/rkoutputwindow.rc:7 #. i18n: ectx: Menu (edit) #: rc.cpp:3 rc.cpp:9 rc.cpp:33 rc.cpp:60 rc.cpp:93 rc.cpp:108 rc.cpp:117 #: rc.cpp:123 msgid "&Edit" msgstr "编辑(&E)" #. i18n: file: rkconsolepart.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: rkwardui.rc:7 #. i18n: ectx: Menu (file) #. i18n: file: windows/detachedwindowcontainer.rc:5 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkhelpwindow.rc:4 #. i18n: ectx: Menu (file) #. i18n: file: windows/rkoutputwindow.rc:4 #. i18n: ectx: Menu (file) #: rc.cpp:6 rc.cpp:18 rc.cpp:54 rc.cpp:114 rc.cpp:120 msgid "&File" msgstr "文件(&F)" #. i18n: file: rkconsolepart.rc:30 #. i18n: ectx: Menu (view) #. i18n: file: rkwardui.rc:50 #. i18n: ectx: Menu (view) #. i18n: file: windows/detachedwindowcontainer.rc:24 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkcatchedx11windowpart.rc:29 #. i18n: ectx: Menu (view) #. i18n: file: windows/rkoutputwindow.rc:12 #. i18n: ectx: Menu (view) #: rc.cpp:12 rc.cpp:36 rc.cpp:63 rc.cpp:90 rc.cpp:126 msgid "&View" msgstr "查看(&V)" #. i18n: file: rkconsolepart.rc:35 #. i18n: ectx: Menu (run) #. i18n: file: rkwardui.rc:53 #. i18n: ectx: Menu (run) #. i18n: file: windows/detachedwindowcontainer.rc:30 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:11 #. i18n: ectx: Menu (run) #. i18n: file: windows/rkcommandeditorwindowpart.rc:31 #. i18n: ectx: Menu (run) #: rc.cpp:15 rc.cpp:39 rc.cpp:69 rc.cpp:99 rc.cpp:105 msgid "&Run" msgstr "运行(&R)" #. i18n: file: rkwardui.rc:8 #. i18n: ectx: Menu (new_data) #: rc.cpp:21 msgid "&New" msgstr "新建(&N)" #. i18n: file: rkwardui.rc:15 #. i18n: ectx: Menu (import) #: rc.cpp:24 msgid "&Import" msgstr "导入(&I)" #. i18n: file: rkwardui.rc:20 #. i18n: ectx: Menu (export) #: rc.cpp:27 msgid "&Export" msgstr "" #. i18n: file: rkwardui.rc:26 #. i18n: ectx: Menu (workspace) #: rc.cpp:30 msgid "&Workspace" msgstr "工作空间(&W)" #. i18n: file: rkwardui.rc:64 #. i18n: ectx: Menu (window) #: rc.cpp:42 msgid "&Windows" msgstr "窗口(&W)" #. i18n: file: rkwardui.rc:70 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/detachedwindowcontainer.rc:42 #. i18n: ectx: Menu (window_activate) #. i18n: file: windows/rktoplevelwindowgui.rc:9 #. i18n: ectx: Menu (window_activate) #: rc.cpp:45 rc.cpp:75 rc.cpp:132 msgid "&Activate" msgstr "激活(&A)" #. i18n: file: rkwardui.rc:80 #. i18n: ectx: Menu (settings) #. i18n: file: windows/detachedwindowcontainer.rc:46 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandeditorwindowpart.rc:16 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rkcommandlogpart.rc:9 #. i18n: ectx: Menu (settings) #. i18n: file: windows/rktoplevelwindowgui.rc:27 #. i18n: ectx: Menu (settings) #: rc.cpp:48 rc.cpp:78 rc.cpp:102 rc.cpp:111 rc.cpp:135 msgid "&Settings" msgstr "设置(&S)" #. i18n: file: rkwardui.rc:86 #. i18n: ectx: Menu (help) #. i18n: file: windows/detachedwindowcontainer.rc:49 #. i18n: ectx: Menu (help) #. i18n: file: windows/rktoplevelwindowgui.rc:31 #. i18n: ectx: Menu (help) #: rc.cpp:51 rc.cpp:81 rc.cpp:138 msgid "&Help" msgstr "帮助(&H)" #. i18n: file: windows/detachedwindowcontainer.rc:8 #. i18n: ectx: Menu (device) #. i18n: file: windows/rkcatchedx11windowpart.rc:4 #. i18n: ectx: Menu (device) #: rc.cpp:57 rc.cpp:84 msgid "&Device" msgstr "设备(&D)" #. i18n: file: windows/detachedwindowcontainer.rc:27 #. i18n: ectx: Menu (history) #. i18n: file: windows/rkcatchedx11windowpart.rc:14 #. i18n: ectx: Menu (history) #: rc.cpp:66 rc.cpp:87 msgid "&History" msgstr "" #. i18n: file: windows/detachedwindowcontainer.rc:38 #. i18n: ectx: Menu (window) #. i18n: file: windows/rktoplevelwindowgui.rc:5 #. i18n: ectx: Menu (window) #: rc.cpp:72 rc.cpp:129 msgid "&Window" msgstr "窗口(&W)" #. i18n: file: windows/rkcommandeditorwindowpart.rc:5 #. i18n: ectx: Menu (tools) #: rc.cpp:96 msgid "&Tools Move" msgstr "工具移动(&T)" #: rc.cpp:139 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" "Roy Qu, ,Launchpad Contributions:,royqh, ,Launchpad Contributions:,royqh, " ",Launchpad Contributions:,RKWard Team,royqh, ,Launchpad " "Contributions:,RKWard Team,royqh" #: rc.cpp:140 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" "royqh1979@gmail.com,,,,,,,,,rkward-tracker@lists.sourceforge.net,,,,rkward-" "tracker@lists.sourceforge.net," rkward-0.6.1/tests/0000755000175000017500000000000012124351133013515 5ustar thomasthomasrkward-0.6.1/tests/CMakeLists.txt0000644000175000017500000000072412124345417016270 0ustar thomasthomasADD_CUSTOM_TARGET (plugintests COMMAND ${CMAKE_CURRENT_BINARY_DIR}/../rkward/rkward --evaluate "source\\(\\\"all_tests.R\\\"\\)" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) # This will hopefully run *after* everything is installed INSTALL(CODE "MESSAGE(STATUS \"\n--------------------\nInstallation appears to be complete (unfortunately it is hard to tell in CMake).\nIn case of errors, please make sure to consult the file 'INSTALL'.\n--------------------\")") rkward-0.6.1/tests/all_tests.R0000644000175000017500000000051412124345417015642 0ustar thomasthomasrequire (rkwardtests) ## add your test suite files, to this vector: testsuites <- c ( "rkward_application_tests.R", "import_export_plugins.R", "item_response_theory.R", "analysis_plugins.R", "distributions.R", "plots.R", "data_plugin_tests.R") rktest.makeplugintests (testsuites=testsuites, outfile="make_plugintests.txt") rkward-0.6.1/tests/import_export_plugins_testfile.sav0000644000175000017500000000153512124345417022617 0ustar thomasthomas$FL2@(#) SPSS DATA FILE MS Windows 17.0.0  Y@10 Aug 0916:51:51 A_LONG_V Does this variable label show up@ 5This contains some regional chars in Windows encoding VALUE_LA?Label_1@7A_ver_long_label_with_special_chars_ and spaces   AA_LONG_V=A_long_variable_name = VALUE_LA=Value_labels  windows-1252eeffg?333333??ghiijffffff??ikki?333333?ld?rkward-0.6.1/tests/import_export_plugins/0000755000175000017500000000000012124345417020201 5ustar thomasthomasrkward-0.6.1/tests/import_export_plugins/write_table.rkout0000644000175000017500000000120512124345417023566 0ustar thomasthomas

Write as table

Parameters

  • File: data
  • Data: women
DATE

"height" "weight"

58 115

59 117

60 120

61 123

62 126

63 129

64 132

65 135

66 139

67 142

68 146

69 150

70 154

71 159

72 164

rkward-0.6.1/tests/import_export_plugins/import_csv_overwrite.messages.txt0000644000175000017500000000021712124345417027043 0ustar thomasthomasError in rk.call.plugin("rkward::import_csv", file.selection = "women.csv", : The plugin could not be auto-submitted with these settings. rkward-0.6.1/tests/import_export_plugins/setworkdir.rkcommands.R0000644000175000017500000000012712124345417024656 0ustar thomasthomaslocal({ ## Compute setwd("..") }) local({ ## Compute setwd("import_export_plugins") }) rkward-0.6.1/tests/import_export_plugins/load_r_object.rkout0000644000175000017500000000020312124345417024050 0ustar thomasthomas

Load data

Parameters

  • File: women.RData
  • Import to environment: globalenv()
DATE
rkward-0.6.1/tests/import_export_plugins/write_table.rkcommands.R0000644000175000017500000000046612124345417024770 0ustar thomasthomaslocal({ ## Compute write.table ( x = women , file = "data" , append = FALSE ,quote = TRUE , sep = '\t' , eol = "\n" , na = "NA" , dec = '.' , row.names = FALSE , col.names = TRUE , qmethod= 'escape' ) ## Print result rk.header("Write as table", parameters=list("File", "data", "Data", "women")) }) rkward-0.6.1/tests/import_export_plugins/package_skeleton.rkout0000644000175000017500000000017212124345417024566 0ustar thomasthomas

Create package skeleton

Parameters

  • Name: anRpackage
  • Directory: .
DATE
rkward-0.6.1/tests/import_export_plugins/import_csv.rkcommands.R0000644000175000017500000000056712124345417024656 0ustar thomasthomaslocal({ ## Compute imported <- read.csv (file="women.csv", row.names=1, na.strings = "NA", nrows = -1, skip = 0, check.names = TRUE, strip.white = FALSE, blank.lines.skip = TRUE) # copy from the local environment to globalenv() .GlobalEnv$women <- imported ## Print result rk.header("Import text / csv data", parameters=list("File", "women.csv", "Import as", "women")) }) rkward-0.6.1/tests/import_export_plugins/import_spss.rkout0000644000175000017500000000351312124345417023653 0ustar thomasthomas

Import SPSS data

Parameters

  • File: import_export_plugins_testfile.sav
  • Import as: my.spss.data
DATE

  A_long_variable_name Value_labels
1 1 1.1 1
2 1.2 2
3 3 1.3 3
4 1.4 4
5 5 1.5 5
6 6 NA 5
7 7 1.6
8 7 1.7 5
9 8 1.8 0

var (Does this variable label show up)

var (This contains some regional chars in Windows encoding)

var

rkward-0.6.1/tests/import_export_plugins/write_vector_matrix.rkout0000644000175000017500000000040212124345417025363 0ustar thomasthomas

Write Variables

Parameters

  • File: data
  • Data: testx
DATE

1,2

3,4

5,6

7,8

9,10

rkward-0.6.1/tests/import_export_plugins/load_source.rkcommands.R0000644000175000017500000000062612124345417024764 0ustar thomasthomaslocal({ ## Compute source (file="source.R", local=TRUE, verbose=FALSE, print.eval=FALSE, chdir=FALSE) ## Print result rk.header("Source R file", parameters=list("File", "source.R")) }) local({ ## Compute source (file="source.R", local=FALSE, echo=TRUE, max.deparse.length=150, verbose=FALSE, print.eval=FALSE, chdir=FALSE) ## Print result rk.header("Source R file", parameters=list("File", "source.R")) }) rkward-0.6.1/tests/import_export_plugins/save_r_object.rkout0000644000175000017500000000034412124345417024075 0ustar thomasthomas

Save R objects

Parameters

  • File: x.RData
  • Variables: testx
DATE

Save R objects

Parameters

  • File: y.RData
  • Variables: testy
DATE
rkward-0.6.1/tests/import_export_plugins/import_stata.rkout0000644000175000017500000000332612124345417024001 0ustar thomasthomas

Import Stata File

Parameters

  • File: import_export_plugins_testfile.dta
  • Imported to: my.stata.data
DATE

  testvar specialchars strings
1 1 value1 a string
2 2 value2 another
3 3 value3 text
4 4 test
5 value1
6 6 value2 $
7 7 value3
8 8 last

var (Variable label 1)

var (Variable label 2 with some special chars: #+߀)

var

rkward-0.6.1/tests/import_export_plugins/import_spss.rkcommands.R0000644000175000017500000000112712124345417025044 0ustar thomasthomaslocal({ ## Prepare require (foreign) ## Compute data <- read.spss ("import_export_plugins_testfile.sav", to.data.frame=TRUE, max.value.labels=1) # set variable labels for use in RKWard labels <- attr (data, "variable.labels"); if (!is.null (labels)) { for (i in 1:length (labels)) { col <- make.names (names (labels[i])) if (!is.null (col)) { rk.set.label (data[[col]], labels[i]) } } } .GlobalEnv$my.spss.data <- data # assign to globalenv() ## Print result rk.header("Import SPSS data", parameters=list("File", "import_export_plugins_testfile.sav", "Import as", "my.spss.data")) }) rkward-0.6.1/tests/import_export_plugins/load_source.rkout0000644000175000017500000000064312124345417023571 0ustar thomasthomas

Source R file

Parameters

  • File: source.R
DATE

Messages, warnings, or errors:

[1] "ok"

Source R file

Parameters

  • File: source.R
DATE

Messages, warnings, or errors:

> testx <- c (20:30)

> print ("ok")
[1] "ok"
rkward-0.6.1/tests/import_export_plugins/import_spss.messages.txt0000644000175000017500000000027712124345417025140 0ustar thomasthomasWarning message: In read.spss("import_export_plugins_testfile.sav", to.data.frame = TRUE, : import_export_plugins_testfile.sav: position 1: Variable name character 4 is lowercase letter rkward-0.6.1/tests/import_export_plugins/load_r_object.rkcommands.R0000644000175000017500000000027312124345417025251 0ustar thomasthomaslocal({ ## Compute load (file="women.RData", envir=globalenv()) ## Print result rk.header("Load data", parameters=list("File", "women.RData", "Import to environment", "globalenv()")) }) rkward-0.6.1/tests/import_export_plugins/package_skeleton.messages.txt0000644000175000017500000000034512124345417026051 0ustar thomasthomasCreating directories ... Creating DESCRIPTION ... Creating NAMESPACE ... Creating Read-and-delete-me ... Saving functions and data ... Making help files ... Done. Further steps are described in './anRpackage/Read-and-delete-me'. rkward-0.6.1/tests/import_export_plugins/import_stata.rkcommands.R0000644000175000017500000000133112124345417025165 0ustar thomasthomaslocal({ ## Prepare require (foreign) ## Compute data <- read.dta ("import_export_plugins_testfile.dta", convert.dates=TRUE, convert.factors=TRUE, missing.type=FALSE, convert.underscore=FALSE) # set variable labels for use in RKWard labels <- attr (data, "var.labels") if (!is.null (labels)) { for (i in 1:length (labels)) { col <- make.names (attr (data, "names")[i] ) if (!is.null (col)) { rk.set.label (data[[col]], labels[i]) } } } .GlobalEnv$my.stata.data <- data # assign to globalenv() ## Print result rk.header("Import Stata File", parameters=list("File", "import_export_plugins_testfile.dta", "Imported to", "my.stata.data")) }) rkward-0.6.1/tests/import_export_plugins/save_r_object.rkcommands.R0000644000175000017500000000062212124345417025266 0ustar thomasthomaslocal({ ## Compute save(testx, file="x.RData", ascii=TRUE, compress="gzip", compression_level=6) ## Print result rk.header("Save R objects", parameters=list("File", "x.RData", "Variables", "testx")) }) local({ ## Compute save(testy, file="y.RData", compress="xz", compression_level=-9) ## Print result rk.header("Save R objects", parameters=list("File", "y.RData", "Variables", "testy")) }) rkward-0.6.1/tests/import_export_plugins/package_skeleton.rkcommands.R0000644000175000017500000000034312124345417025760 0ustar thomasthomaslocal({ ## Compute package.skeleton(name="anRpackage", list=c('skel.func1','skel.func2'), path=".", force= TRUE) ## Print result rk.header("Create package skeleton", parameters=list("Name", "anRpackage", "Directory", ".")) }) rkward-0.6.1/tests/import_export_plugins/write_vector_matrix.rkcommands.R0000644000175000017500000000026612124345417026565 0ustar thomasthomaslocal({ ## Compute write (x=testx, file="data", ncolumns=2, append=FALSE, sep=",") ## Print result rk.header("Write Variables", parameters=list("File", "data", "Data", "testx")) }) rkward-0.6.1/tests/import_export_plugins/import_csv.rkout0000644000175000017500000000017412124345417023456 0ustar thomasthomas

Import text / csv data

Parameters

  • File: women.csv
  • Import as: women
DATE
rkward-0.6.1/tests/data_plugin_tests/0000755000175000017500000000000012124345417017236 5ustar thomasthomasrkward-0.6.1/tests/data_plugin_tests/subset_dataframe.rkcommands.R0000644000175000017500000000026712124345417025034 0ustar thomasthomaslocal({ ## Compute sset.result <- subset( sleep, ((extra >= 0) & (extra < 3)) & (group == 1), select=c (extra, ID) ) ## Print result .GlobalEnv$sset.result <- sset.result }) rkward-0.6.1/tests/data_plugin_tests/sort_data.rkcommands.R0000644000175000017500000000015212124345417023474 0ustar thomasthomaslocal({ ## Compute .GlobalEnv$women.backup <- women.backup[order (-xtfrm (women.backup[["height"]])),] }) rkward-0.6.1/tests/distributions.R0000644000175000017500000013512312124345417016557 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="distributions", # place here libraries that are required for *all* tests in this suite, or highly likely to be installed libraries = c ("datasets", "stats"), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { data (rock) } ## the tests ), tests = list ( new ("RKTest", id="shapiro_wilk_test", call=function () { rk.call.plugin ("rkward::shapiro_test", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, fuzzy_output=TRUE), # unfortunately, part of the output does not get rounded new ("RKTest", id="ad_test", call=function () { rk.call.plugin ("rkward::ad_test", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, libraries=c("nortest")), new ("RKTest", id="cvm_test", call=function () { rk.call.plugin ("rkward::cvm_test", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, libraries=c("nortest")), new ("RKTest", id="pearson_test", call=function () { rk.call.plugin ("rkward::pearson_test", adjust.string="adjust = TRUE", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") rk.call.plugin ("rkward::pearson_test", adjust.string="adjust = FALSE", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, libraries=c("nortest")), new ("RKTest", id="sf_test", call=function () { rk.call.plugin ("rkward::sf_test", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, libraries=c("nortest")), new ("RKTest", id="lillie_test", call=function () { rk.call.plugin ("rkward::lillie_test", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, libraries=c("nortest")), new ("RKTest", id="jb_test", call=function () { rk.call.plugin ("rkward::jb_test", excludenas.state="1", length.state="1", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]", submit.mode="submit") }, libraries=c("tseries")), new ("RKTest", id="beta_probabilities", call=function () { rk.call.plugin ("rkward::beta_probabilities", logp.string="log.p = FALSE", ncp.real="0.00", q.text="0.95", shape1.real="1.00", shape2.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") rk.call.plugin ("rkward::beta_probabilities", logp.string="log.p = TRUE", ncp.real="0.02", q.text="0.96", shape1.real="1.01", shape2.real="1.01", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="beta_quantiles", call=function () { rk.call.plugin ("rkward::beta_quantiles", logp.string="log.p = FALSE", ncp.real="0.00", p.text="0.95", shape1.real="1.00", shape2.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") rk.call.plugin ("rkward::beta_quantiles", logp.string="log.p = TRUE", ncp.real="0.08", p.text="-1", shape1.real="1.04", shape2.real="1.03", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="beta_clt", call=function () { rk.call.plugin ("rkward::plot_beta_clt", a.real="2.00", b.real="2.00", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="1", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histfillcol.color.string="azure", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="1", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_beta_distribution", call=function () { rk.call.plugin ("rkward::plot_beta_distribution", a.real="2.00", b.real="2.00", function.string="p", log.state="1", lower.state="1", max.real="1.00", min.real="0.00", n.real="100.00", ncp.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="cauchy_probabilities", call=function () { rk.call.plugin ("rkward::cauchy_probabilities", location.real="0.03", logp.string="log.p = FALSE", q.text="0.95", scale.real="1.02", tail.string="lower.tail=TRUE", submit.mode="submit") rk.call.plugin ("rkward::cauchy_probabilities", location.real="-0.02", logp.string="log.p = TRUE", q.text="0.95", scale.real="1.03", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="cauchy_quantiles", call=function () { rk.call.plugin ("rkward::cauchy_quantiles", location.real="-0.03", logp.string="log.p = FALSE", p.text="0.95", scale.real="1.03", tail.string="lower.tail=TRUE", submit.mode="submit") rk.call.plugin ("rkward::cauchy_quantiles", location.real="0.02", logp.string="log.p = TRUE", p.text="-1 -2", scale.real="0.98", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="plot_cauchy_distribution", call=function () { rk.call.plugin ("rkward::plot_cauchy_distribution", function.string="d", loc.real="0.00", log.state="0", max.real="3.29", min.real="-3.29", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scale.real="1.00", submit.mode="submit") }), new ("RKTest", id="chi_squared_probabilities", call=function () { rk.call.plugin ("rkward::chi_squared_probabilities", df.real="3.00", logp.string="log.p = FALSE", ncp.real="0.05", q.text="0.97 0.65", tail.string="lower.tail=TRUE", submit.mode="submit") rk.call.plugin ("rkward::chi_squared_probabilities", df.real="1.01", logp.string="log.p = TRUE", ncp.real="0.02", q.text="1", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="chi_squared_quantiles", call=function () { rk.call.plugin ("rkward::chi_squared_quantiles", df.real="1.00", logp.string="log.p = FALSE", ncp.real="0.00", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") rk.call.plugin ("rkward::chi_squared_quantiles", df.real="1.02", logp.string="log.p = TRUE", ncp.real="3.00", p.text="-1 -2", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="chi_squared_clt", call=function () { rk.call.plugin ("rkward::plot_chi_squared_clt", df.real="4.00", dist_stepfun.addtoplot.state="", dist_stepfun.col_hor.color.string="", dist_stepfun.col_vert.color.string="", dist_stepfun.col_y0.color.string="", dist_stepfun.col_y1.color.string="", dist_stepfun.do_points.state="", dist_stepfun.linetype.string="", dist_stepfun.verticals.state="1", drawnorm.state="1", function.string="dist", nAvg.real="12.00", nDist.real="1000.00", ncp.real="0.6", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="1", submit.mode="submit") }), new ("RKTest", id="plot_chi_squared_distribution", call=function () { rk.call.plugin ("rkward::plot_chi_squared_distribution", df.real="4.00", function.string="d", log.state="0", max.real="24.10", min.real="0.30", n.real="100.00", ncp.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="exponential_probabilities", call=function () { rk.call.plugin ("rkward::exponential_probabilities", logp.string="log.p = FALSE", q.text="0.96", rate.real="1.07", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="exponential_quantiles", call=function () { rk.call.plugin ("rkward::exponential_quantiles", logp.string="log.p = TRUE", p.text="-1.1", rate.real="1.05", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="exponential_clt", call=function () { rk.call.plugin ("rkward::plot_exponential_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="grey4", normpointtype.string="h", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rate.real="1.00", scalenorm.state="1", submit.mode="submit") }), new ("RKTest", id="plot_exponential_distribution", call=function () { rk.call.plugin ("rkward::plot_exponential_distribution", function.string="p", log.state="0", lower.state="0", max.real="10.00", min.real="0.00", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rate.real="1.00", submit.mode="submit") }), new ("RKTest", id="f_probabilities", call=function () { rk.call.plugin ("rkward::f_probabilities", df1.real="1.02", df2.real="1.11", logp.string="log.p = FALSE", ncp.real="0.02", q.text=".1, .2", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="f_quantiles", call=function () { rk.call.plugin ("rkward::f_quantiles", df1.real="1.00", df2.real="1.00", logp.string="log.p = FALSE", ncp.real="0.00", p.text="0.95", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="f_clt", call=function () { rk.call.plugin ("rkward::plot_f_clt", df1.real="5.00", df2.real="5.00", drawnorm.state="0", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", ncp.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_f_distribution", call=function () { rk.call.plugin ("rkward::plot_f_distribution", df1.real="5.00", df2.real="5.00", function.string="d", log.state="1", max.real="25.00", min.real="0.001", n.real="100.00", ncp.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="gamma_probabilities", call=function () { rk.call.plugin ("rkward::gamma_probabilities", logp.string="log.p = FALSE", q.text="0.95", rate.real="1.00", shape.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="gamma_quantiles", call=function () { rk.call.plugin ("rkward::gamma_quantiles", logp.string="log.p = TRUE", p.text="-5", rate.real="1.00", shape.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="gamma_clt", call=function () { rk.call.plugin ("rkward::plot_gamma_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rate.real="0.3", scalenorm.state="0", shape.real="5.9", submit.mode="submit") }), new ("RKTest", id="plot_gamma_distribution", call=function () { rk.call.plugin ("rkward::plot_gamma_distribution", function.string="d", log.state="0", max.real="4.60", min.real="0.01", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rate.real="0.87", shape.real="1.61", submit.mode="submit") }), new ("RKTest", id="gumbel_probabilities", call=function () { rk.call.plugin ("rkward::gumbel_probabilities", logp.string="log.p = FALSE", q.text="0.95", scale.real="1.04", shape.real="1.03", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="gumbel_quantiles", call=function () { rk.call.plugin ("rkward::gumbel_quantiles", logp.string="log.p = FALSE", p.text="0.95", scale.real="1.00", shape.real="1.00", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="logistic_probabilities", call=function () { rk.call.plugin ("rkward::logistic_probabilities", location.real="1.04", logp.string="log.p = TRUE", q.text="0.95", scale.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="logistic_quantiles", call=function () { rk.call.plugin ("rkward::logistic_quantiles", location.real="1.00", logp.string="log.p = FALSE", p.text="0.95", scale.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="logistic_clt", call=function () { rk.call.plugin ("rkward::plot_logistic_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="1", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="int", histogram_opt.histlinetype.string="solid", histogram_opt.include_lowest.state="1", histogram_opt.rightclosed.state="", histogram_opt.usefillcol.state="", loc.real="0.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scale.real="3.00", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_logistic_distribution", call=function () { rk.call.plugin ("rkward::plot_logistic_distribution", function.string="d", loc.real="0.00", log.state="0", max.real="3.29", min.real="-3.29", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scale.real="1.00", submit.mode="submit") }), new ("RKTest", id="log_normal_probabilities", call=function () { rk.call.plugin ("rkward::log_normal_probabilities", logp.string="log.p = FALSE", meanlog.real="0.00", q.text="0.95", sdlog.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="log_normal_quantiles", call=function () { rk.call.plugin ("rkward::log_normal_quantiles", logp.string="log.p = FALSE", meanlog.real="0.00", p.text="0.95", sdlog.real="1.00", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="log_normal_clt", call=function () { rk.call.plugin ("rkward::plot_log_normal_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.angle.real="45.00", histogram_opt.barlabels.state="", histogram_opt.density.real="7.00", histogram_opt.doborder.state="", histogram_opt.freq.state="0", histogram_opt.histbreaksFunction.string="Scott", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", mean.real="0.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", sd.real="1.00", submit.mode="submit") }), new ("RKTest", id="plot_log_normal_distribution", call=function () { rk.call.plugin ("rkward::plot_lognormal_distribution", function.string="p", log.state="0", lower.state="1", max.real="3.29", mean.real="4.00", min.real="0.01", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", sd.real="1.00", submit.mode="submit") }), new ("RKTest", id="normal_probabilities", call=function () { rk.call.plugin ("rkward::normal_probabilities", logp.string="log.p = FALSE", mean.real="0.00", q.text="0.95", sd.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="normal_quantiles", call=function () { rk.call.plugin ("rkward::normal_quantiles", logp.string="log.p = FALSE", mean.real="0.00", p.text="0.95", sd.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="normal_clt", call=function () { rk.call.plugin ("rkward::plot_normal_clt", dist_stepfun.addtoplot.state="", dist_stepfun.col_hor.color.string="blue", dist_stepfun.col_vert.color.string="blue", dist_stepfun.col_y0.color.string="gold", dist_stepfun.col_y1.color.string="cyan", dist_stepfun.do_points.state="", dist_stepfun.linetype.string="", dist_stepfun.verticals.state="1", drawnorm.state="1", function.string="dist", mean.real="0.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", sd.real="1.00", submit.mode="submit") }), new ("RKTest", id="plot_normal_distribution", call=function () { rk.call.plugin ("rkward::plot_normal_distribution", function.string="d", log.state="0", max.real="3.29", mean.real="0.00", min.real="-3.29", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", sd.real="1.00", submit.mode="submit") }), new ("RKTest", id="t_probabilities", call=function () { rk.call.plugin ("rkward::t_probabilities", df.real="1.00", logp.string="log.p = FALSE", ncp.real="0.00", q.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="t_quantiles", call=function () { rk.call.plugin ("rkward::t_quantiles", df.real="1.00", logp.string="log.p = FALSE", ncp.real="0.00", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="t_clt", call=function () { rk.call.plugin ("rkward::plot_t_clt", df.real="3.00", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", ncp.real="0.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_t_distribution", call=function () { rk.call.plugin ("rkward::plot_t_distribution", df.real="1.00", function.string="p", log.state="0", lower.state="1", max.real="12.924", min.real="-12.924", n.real="100.00", ncp.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="tukey_probabilities", call=function () { rk.call.plugin ("rkward::tukey_probabilities", df.text="5", logp.string="log.p = FALSE", nmeans.real="2.00", nranges.real="1.00", q.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="tukey_quantiles", call=function () { rk.call.plugin ("rkward::tukey_quantiles", df.text="2:11", logp.string="log.p = FALSE", nmeans.real="2.00", nranges.real="1.00", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="plot_tukey_distribution", call=function () { rk.call.plugin ("rkward::plot_tukey_distribution", df.real="5.00", log.state="0", lower.state="1", max.real="8.00", min.real="-1.00", n.real="101.00", nmeans.real="6.00", nranges.real="1.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="uniform_probabilities", call=function () { rk.call.plugin ("rkward::uniform_probabilities", logp.string="log.p = FALSE", max.real="1.00", min.real="0.00", q.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="uniform_quantiles", call=function () { rk.call.plugin ("rkward::uniform_quantiles", logp.string="log.p = FALSE", max.real="1.00", min.real="0.00", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="uniform_clt", call=function () { rk.call.plugin ("rkward::plot_uniform_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", llim.real="0.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", ulim.real="1.00", submit.mode="submit") }), new ("RKTest", id="plot_uniform_distribution", call=function () { rk.call.plugin ("rkward::plot_uniform_distribution", function.string="d", llim.real="0.00", log.state="0", max.real="2.00", min.real="-1.00", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", ulim.real="1.00", submit.mode="submit") }), new ("RKTest", id="weibull_probabilities", call=function () { rk.call.plugin ("rkward::weibull_probabilities", logp.string="log.p = FALSE", q.text="0.95", scale.real="1.00", shape.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="weibull_quantiles", call=function () { rk.call.plugin ("rkward::weibull_quantiles", logp.string="log.p = FALSE", p.text="0.95", scale.real="1.00", shape.real="1.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="weibull_clt", call=function () { rk.call.plugin ("rkward::plot_weibull_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scale.real="1.00", scalenorm.state="0", shape.real="2.00", submit.mode="submit") }), new ("RKTest", id="plot_weibull_distribution", call=function () { rk.call.plugin ("rkward::plot_weibull_distribution", function.string="d", log.state="0", max.real="5.00", min.real="0.00", n.real="100.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scale.real="1.00", shape.real="2.00", submit.mode="submit") }), new ("RKTest", id="binomial_probabilities", call=function () { rk.call.plugin ("rkward::binomial_tail_probabilities", logp.string="log.p = FALSE", prob.real="0.50", q.text="0.95 2", size.real="3.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="binomial_quantiles", call=function () { rk.call.plugin ("rkward::binomial_quantiles", logp.string="log.p = FALSE", p.text="0.95 .5", prob.real="0.50", size.real="3.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="binomial_clt", call=function () { rk.call.plugin ("rkward::plot_binomial_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="int", histogram_opt.histlinetype.string="solid", histogram_opt.include_lowest.state="1", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="1.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", prob.real="0.50", scalenorm.state="0", size.real="11.00", submit.mode="submit") }), new ("RKTest", id="plot_binomial_distribution", call=function () { rk.call.plugin ("rkward::plot_binomial_distribution", function.string="d", log.state="0", max.real="12.00", min.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="p", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", prob.real="0.50", size.real="12.00", submit.mode="submit") }), new ("RKTest", id="geom_probabilities", call=function () { rk.call.plugin ("rkward::geom_probabilities", logp.string="log.p = FALSE", prob.real="0.50", q.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="geom_quantiles", call=function () { rk.call.plugin ("rkward::geom_quantiles", logp.string="log.p = FALSE", p.text="0.95", prob.real="0.50", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="geometric_clt", call=function () { rk.call.plugin ("rkward::plot_geometric_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", prob.real="0.50", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_geometric_distribution", call=function () { rk.call.plugin ("rkward::plot_geometric_distribution", function.string="d", log.state="0", max.real="12.00", min.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="p", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", prob.real="0.50", submit.mode="submit") }), new ("RKTest", id="hypergeometric_probabilities", call=function () { rk.call.plugin ("rkward::hypergeometric_probabilities", k.real="4.00", logp.string="log.p = FALSE", m.real="5.00", n.real="4.00", q.text="0 1 2 3 4 5", tail.string="lower.tail=FALSE", submit.mode="submit") }), new ("RKTest", id="hypergeometric_quantiles", call=function () { rk.call.plugin ("rkward::hypergeometric_quantiles", k.real="1.00", logp.string="log.p = FALSE", m.real="1.00", n.real="1.00", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="hypergeometric_clt", call=function () { rk.call.plugin ("rkward::plot_hypergeometric_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", k.real="15.00", m.real="12.00", n.real="12.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_hypergeometric_distribution", call=function () { rk.call.plugin ("rkward::plot_hypergeometric_distribution", function.string="p", k.real="15.00", log.state="0", lower.state="1", m.real="12.00", max.real="12.00", min.real="0.00", n_val.real="12.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="p", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="negative_binomial_probabilities", call=function () { rk.call.plugin ("rkward::negative_binomial_probabilities", logp.string="log.p = TRUE", prob.real="0.50", q.text="0.95", size.real="3.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="negative_binomial_quantiles", call=function () { rk.call.plugin ("rkward::negative_binomial_quantiles", logp.string="log.p = FALSE", p.text="0.95", prob.real="0.50", size.real="4.00", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="negbinomial_clt", call=function () { rk.call.plugin ("rkward::plot_negbinomial_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", param.string="pprob", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", prob.real="0.28", scalenorm.state="0", size_disp.real="12.00", size_trial.real="12.00", submit.mode="submit") }), new ("RKTest", id="plot_negbinomial_distribution", call=function () { rk.call.plugin ("rkward::plot_negbinomial_distribution", function.string="d", log.state="0", max.real="24.00", min.real="0.00", param.string="pprob", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="p", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", prob.real="0.75", size_disp.real="12.00", size_trial.real="12.00", submit.mode="submit") }), new ("RKTest", id="poisson_probabilities", call=function () { rk.call.plugin ("rkward::poisson_probabilities", lambda.real="1.07", logp.string="log.p = TRUE", q.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="poisson_quantiles", call=function () { rk.call.plugin ("rkward::poisson_quantiles", lambda.real="1.00", logp.string="log.p = FALSE", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="poisson_clt", call=function () { rk.call.plugin ("rkward::plot_poisson_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", mean.real="5.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_poisson_distribution", call=function () { rk.call.plugin ("rkward::plot_poisson_distribution", function.string="d", log.state="0", max.real="12.00", mean.real="5.00", min.real="0.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="p", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }), new ("RKTest", id="wilcoxon_probabilities", call=function () { rk.call.plugin ("rkward::wilcoxon_probabilities", logp.string="log.p = FALSE", m.real="2.00", n.real="1.00", q.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="wilcoxon_quantiles", call=function () { rk.call.plugin ("rkward::wilcoxon_quantiles", logp.string="log.p = FALSE", m.real="1.00", n.real="2.00", p.text="0.95", tail.string="lower.tail=TRUE", submit.mode="submit") }), new ("RKTest", id="wilcoxon_clt", call=function () { rk.call.plugin ("rkward::plot_wilcoxon_clt", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", nAvg.real="10.00", nDist.real="1000.00", nm.real="4.00", nn.real="6.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") }), new ("RKTest", id="plot_wilcoxon_distribution", call=function () { rk.call.plugin ("rkward::plot_wilcoxon_distribution", function.string="d", log.state="0", max.real="24.00", min.real="0.00", nm.real="4.00", nn.real="6.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="p", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", submit.mode="submit") }) ), postCalls = list ( # like initCalls: run after all tests to clean up. function () { suppressWarnings (rm (list=c ("rock"), envir=globalenv())) } ) ) rkward-0.6.1/tests/item_response_theory/0000755000175000017500000000000012124345417017773 5ustar thomasthomasrkward-0.6.1/tests/item_response_theory/goodnes-of-fit_Rasch.rkout0000644000175000017500000000047412124345417025026 0ustar thomasthomas

Goodness of Fit for Rasch Models (estimates.rasch)

DATE

Call:

rasch(data = LSAT)

Parametric Bootstrap test:


Chi-squared statistic: 18.345

Bootstrap samples: 49

p-value: 0.78

rkward-0.6.1/tests/item_response_theory/Rasch_parameter_estimation.rkcommands.R0000644000175000017500000000072612124345417027614 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute estimates.rasch <- rasch(LSAT) ## Print result rk.header ("Rasch parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.rasch$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print (coef(estimates.rasch)) rk.print (paste("Log-likelihood value at convergence:",round(estimates.rasch$log.Lik, digits=1))) # keep results in current workspace .GlobalEnv$estimates.rasch <- estimates.rasch }) rkward-0.6.1/tests/item_response_theory/GPCM_parameter_estimation.rkout0000644000175000017500000000241212124345417026102 0ustar thomasthomas

GPCM parameter estimation

DATE

Call:

gpcm(data = subset(Science, select = c("Work", "Industry", "Future", "Benefit")), constraint = "rasch")

Coefficients:


Catgr.1Catgr.2Catgr.3Dscrmn
Work -1.80 -0.90 1.80 1.00
Industry -2.54 -1.76 0.20 1.00
Future -2.50 -1.39 1.09 1.00
Benefit -2.33 -0.88 1.31 1.00

Log-likelihood value at convergence: -1756.8

rkward-0.6.1/tests/item_response_theory/unidimensional.rkcommands.R0000644000175000017500000000175612124345417025302 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute unidim.res <- unidimTest(estimates.rasch) ## Print result rk.header ("Unidimensionality check (estimates.rasch)") rk.print ("Call:") rk.print.literal (deparse(unidim.res$call, width.cutoff=500)) rk.header ("Matrix of tertachoric correlations:", level=4) rk.print (unidim.res$Rho) rk.header ("Unidimensionality Check using Modified Parallel Analysis:", level=4) rk.print ("Alternative hypothesis: The second eigenvalue of the observed data is substantially larger than the second eigenvalue of data under the assumed IRT model") rk.print (paste("Second eigenvalue in the observed data:", round(unidim.res$Tobs[2], digits=3))) rk.print (paste("Average of second eigenvalues in Monte Carlo samples:", round(mean(unidim.res$T.boot[,2]), digits=3))) rk.print (paste("Monte Carlo samples:", dim(unidim.res$T.boot)[1])) rk.print (paste("p-value:", round(unidim.res$p.value, digits=3))) # keep results in current workspace .GlobalEnv$unidim.res <- unidim.res }) rkward-0.6.1/tests/item_response_theory/plot_2PL.rkout0000644000175000017500000000015112124345417022511 0ustar thomasthomas

Two parameter logistic model plot

DATE

rkward-0.6.1/tests/item_response_theory/plot_2PL.rkcommands.R0000644000175000017500000000026612124345417023712 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Print result rk.header("Two parameter logistic model plot") rk.graph.on() try({ plot(estimates.2pl, type="ICC", items=c(1)) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/plot_Rasch.rkout0000644000175000017500000000013012124345417023151 0ustar thomasthomas

Rasch model plot

DATE

rkward-0.6.1/tests/item_response_theory/GRM_parameter_estimation.rkcommands.R0000644000175000017500000000071512124345417027177 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute estimates.grm <- grm(Environment) ## Print result rk.header ("GRM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.grm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print (coef(estimates.grm)) rk.print (paste("Log-likelihood value at convergence:",round(estimates.grm$log.Lik, digits=1))) # keep results in current workspace .GlobalEnv$estimates.grm <- estimates.grm }) rkward-0.6.1/tests/item_response_theory/plot_3PL.rkcommands.R0000644000175000017500000000026512124345417023712 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Print result rk.header("Birnbaum three parameter model plot") rk.graph.on() try({ plot(estimates.3pl, type="IIC", items=0) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/Wald_test.rkout0000644000175000017500000000236512124345417023015 0ustar thomasthomas

Wald test (estimates.rsm)

DATE

Call:

Waldtest.Rm(object = estimates.rsm)

Wald test on item level (z-values):


z-statisticp-value
beta I1.c1 0.39 0.70
beta I1.c2 0.15 0.88
beta I1.c3 0.16 0.88
beta I6.c1 -0.39 0.70
beta I6.c2 0.14 0.89
beta I6.c3 0.15 0.88

Messages, warnings, or errors:

I2 I3 I4 I5 
Subgroup models are estimated without these items!
rkward-0.6.1/tests/item_response_theory/Andersen_LR_plot.rkout0000644000175000017500000000035512124345417024256 0ustar thomasthomas

Andersen's LR test

DATE

Messages, warnings, or errors:

I2 I4 I1 I5 
Full and subgroup models are estimated without these items!
rkward-0.6.1/tests/item_response_theory/plot_PCM.rkout0000644000175000017500000000014112124345417022532 0ustar thomasthomas

Partial credit model plot

DATE

rkward-0.6.1/tests/item_response_theory/Wald_test.rkcommands.R0000644000175000017500000000057212124345417024205 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Compute .GlobalEnv$fitctrl <- "optim" waldtest.res <- Waldtest(estimates.rsm) rm(fitctrl, envir=.GlobalEnv) ## Print result rk.header ("Wald test (estimates.rsm)") rk.print ("Call:") rk.print.literal (deparse(waldtest.res$call, width.cutoff=500)) rk.header ("Wald test on item level (z-values):", level=4) rk.print(waldtest.res$coef.table) }) rkward-0.6.1/tests/item_response_theory/Andersen_LR_plot.rkcommands.R0000644000175000017500000000032212124345417025442 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Print result rk.header("Andersen's LR test") rk.graph.on() try({ lr.res <- LRtest(estimates.pcm, se=TRUE) plotGOF(lr.res, conf=list(), ctrline=list()) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/person_fit_statistics.rkout0000644000175000017500000002301012124345417025477 0ustar thomasthomas

Person-fit statistics (estimates.rasch)

DATE

Call:

rasch(data = LSAT)

Response patterns, person-fit statistics (L0, Lz) and probabilities for each response pattern (Pr):


Item 1Item 2Item 3Item 4Item 5L0LzPr (<Lz)
1 0 0 0 0 0 -3.991 -1.119 0.132
2 0 0 0 0 1 -3.947 -1.092 0.137
3 0 0 0 1 0 -4.74 -2.019 0.022
4 0 0 0 1 1 -4.121 -1.338 0.091
5 0 0 1 0 0 -5.806 -3.266 0.001
6 0 0 1 0 1 -5.187 -2.477 0.007
7 0 0 1 1 0 -5.98 -3.324 0
8 0 0 1 1 1 -4.772 -2.031 0.021
9 0 1 0 0 0 -5.047 -2.379 0.009
10 0 1 0 0 1 -4.428 -1.666 0.048
11 0 1 0 1 1 -4.013 -1.309 0.095
12 0 1 1 0 1 -5.08 -2.324 0.01
13 0 1 1 1 0 -5.872 -3.078 0.001
14 0 1 1 1 1 -4.04 -1.455 0.073
15 1 0 0 0 0 -3.316 -0.354 0.361
16 1 0 0 0 1 -2.697 0.183 0.572
17 1 0 0 1 0 -3.49 -0.664 0.253
18 1 0 0 1 1 -2.282 0.338 0.632
19 1 0 1 0 0 -4.557 -1.803 0.036
20 1 0 1 0 1 -3.348 -0.677 0.249
21 1 0 1 1 0 -4.141 -1.431 0.076
22 1 0 1 1 1 -2.308 0.019 0.508
23 1 1 0 0 0 -3.798 -0.993 0.16
24 1 1 0 0 1 -2.589 0.045 0.518
25 1 1 0 1 0 -3.382 -0.709 0.239
26 1 1 0 1 1 -1.549 0.665 0.747
27 1 1 1 0 0 -4.449 -1.724 0.042
28 1 1 1 0 1 -2.616 -0.243 0.404
29 1 1 1 1 0 -3.409 -0.918 0.179
30 1 1 1 1 1 -0.895 0.841 0.8

rkward-0.6.1/tests/item_response_theory/Rasch_parameter_estimation.rkout0000644000175000017500000000200112124345417026406 0ustar thomasthomas

Rasch parameter estimation

DATE

Call:

rasch(data = LSAT)

Coefficients:


DffcltDscrmn
Item 1 -3.62 0.76
Item 2 -1.32 0.76
Item 3 -0.32 0.76
Item 4 -1.73 0.76
Item 5 -2.78 0.76

Log-likelihood value at convergence: -2466.9

rkward-0.6.1/tests/item_response_theory/item_fit_statistics.rkout0000644000175000017500000000214312124345417025133 0ustar thomasthomas

Item-fit statistics (estimates.rasch)

DATE

Call:

rasch(data = LSAT)

Alternative: Items do not fit the model

Ability Categories: 10

Item-Fit Statistics and P-values:


X^2Pr (>X^2)
Item 1 61.929 0.000
Item 2 159.01 0.000
Item 3 233.787 0.000
Item 4 132.473 0.000
Item 5 84.76 0.000

rkward-0.6.1/tests/item_response_theory/plot_3PL.rkout0000644000175000017500000000015312124345417022514 0ustar thomasthomas

Birnbaum three parameter model plot

DATE

rkward-0.6.1/tests/item_response_theory/plot_RSM.rkout0000644000175000017500000000013712124345417022561 0ustar thomasthomas

Rating scale model plot

DATE

rkward-0.6.1/tests/item_response_theory/2PL_parameter_estimation.rkout0000644000175000017500000000302112124345417025746 0ustar thomasthomas

2PL parameter estimation

DATE

Call:

ltm(formula = WIRS ~ z1 * z2)

Coefficients:


(Intercept)z1z2z1:z2
Item 1 -1.10 0.27 -3.32 -1.16
Item 2 0.94 1.09 2.17 2.95
Item 3 -1.46 1.81 -0.31 0.54
Item 4 -1.46 1.12 0.56 0.27
Item 5 -1.08 2.13 -0.47 1.15
Item 6 -2.75 1.70 -0.94 1.07

Log-likelihood value at convergence: -3293.2

rkward-0.6.1/tests/item_response_theory/LPCM_parameter_estimation.rkcommands.R0000644000175000017500000000115712124345417027306 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Compute estimates.lpcm <- LPCM(lpcmdat, mpoints=2, groupvec=G) ## Print result rk.header ("LPCM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.lpcm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print(t(rbind(Eta=estimates.lpcm$etapar,StdErr=estimates.lpcm$se.eta))) rk.print (paste("Conditional log-likelihood:",round(estimates.lpcm$loglik, digits=1), "
Number of iterations:",estimates.lpcm$iter,"
Number of parameters:",estimates.lpcm$npar)) # keep results in current workspace .GlobalEnv$estimates.lpcm <- estimates.lpcm }) rkward-0.6.1/tests/item_response_theory/goodnes-of-fit_Rasch.rkcommands.R0000644000175000017500000000075012124345417026215 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute GoFRasch.res <- GoF.rasch(estimates.rasch) ## Print result rk.header ("Goodness of Fit for Rasch Models (estimates.rasch)") rk.print ("Call:") rk.print.literal (deparse(GoFRasch.res$call, width.cutoff=500)) rk.header ("Parametric Bootstrap test:", level=4) rk.print (paste("Chi-squared statistic:", round(GoFRasch.res$Tobs, digits=3))) rk.print (paste("Bootstrap samples:", GoFRasch.res$B)) rk.print (paste("p-value:", GoFRasch.res$p.value)) }) rkward-0.6.1/tests/item_response_theory/plot_GRM.rkout0000644000175000017500000000014212124345417022541 0ustar thomasthomas

Graded response model plot

DATE

rkward-0.6.1/tests/item_response_theory/plot_PCM.rkcommands.R0000644000175000017500000000030412124345417023725 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Print result rk.header("Partial credit model plot") rk.graph.on() try({ plotICC(estimates.pcm, item.subset=c(3:6), mplot=TRUE, ask=FALSE) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/Cronbach_alpha.rkcommands.R0000644000175000017500000000131312124345417025135 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute cronalpha.res <- cronbach.alpha(subset(LSAT, select=c("Item 1", "Item 2", "Item 3", "Item 4", "Item 5")), CI=TRUE) descript.res <- descript(subset(LSAT, select=c("Item 1", "Item 2", "Item 3", "Item 4", "Item 5")), chi.squared=FALSE, B=1000) ## Print result rk.header ("Cronbach's alpha") rk.print("for the 'LSAT' data-set (subset: Item 1, Item 2, Item 3, Item 4, Item 5)") rk.print(paste("Items:",cronalpha.res$p,"
Sample units:",cronalpha.res$n,"
alpha:",round(cronalpha.res$alpha, digits=2),"")) rk.print("Effects on alpha if items are removed:") rk.print(descript.res$alpha) rk.print("95% Confidence interval:") rk.print(cronalpha.res$ci) }) rkward-0.6.1/tests/item_response_theory/RSM_parameter_estimation.rkcommands.R0000644000175000017500000000111412124345417027205 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Compute estimates.rsm <- RSM(rsmdat) ## Print result rk.header ("RSM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.rsm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print(t(rbind(Eta=estimates.rsm$etapar,StdErr=estimates.rsm$se.eta))) rk.print (paste("Conditional log-likelihood:",round(estimates.rsm$loglik, digits=1), "
Number of iterations:",estimates.rsm$iter,"
Number of parameters:",estimates.rsm$npar)) # keep results in current workspace .GlobalEnv$estimates.rsm <- estimates.rsm }) rkward-0.6.1/tests/item_response_theory/person_fit_statistics.rkcommands.R0000644000175000017500000000101612124345417026673 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute personfit.res <- person.fit(estimates.rasch) ## Print result rk.header ("Person-fit statistics (estimates.rasch)") rk.print ("Call:") rk.print.literal (deparse(personfit.res$call, width.cutoff=500)) rk.header ("Response patterns, person-fit statistics (L0, Lz) and probabilities for each response pattern (Pr):", level=4) rk.print(cbind(format(personfit.res$resp.patterns, nsmall=0), round(personfit.res$Tobs, digits=3), "Pr (<Lz)"=round(c(personfit.res$p.values), digits=3))) }) rkward-0.6.1/tests/item_response_theory/plot_RSM.rkcommands.R0000644000175000017500000000030212124345417023745 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Print result rk.header("Rating scale model plot") rk.graph.on() try({ plotICC(estimates.rsm, item.subset=c(1:3), mplot=TRUE, ask=FALSE) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/PCM_parameter_estimation.rkcommands.R0000644000175000017500000000111412124345417027163 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Compute estimates.pcm <- PCM(pcmdat) ## Print result rk.header ("PCM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.pcm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print(t(rbind(Eta=estimates.pcm$etapar,StdErr=estimates.pcm$se.eta))) rk.print (paste("Conditional log-likelihood:",round(estimates.pcm$loglik, digits=1), "
Number of iterations:",estimates.pcm$iter,"
Number of parameters:",estimates.pcm$npar)) # keep results in current workspace .GlobalEnv$estimates.pcm <- estimates.pcm }) rkward-0.6.1/tests/item_response_theory/LPCM_parameter_estimation.rkout0000644000175000017500000000317012124345417026111 0ustar thomasthomas

LPCM parameter estimation

DATE

Call:

LPCM(X = lpcmdat, mpoints = 2, groupvec = G)

Coefficients:


EtaStdErr
eta 1 0.412 0.397
eta 2 -0.299 0.494
eta 3 -0.135 0.409
eta 4 0.035 0.394
eta 5 -0.429 0.478
eta 6 -0.286 0.449
eta 7 0.164 0.399
eta 8 0.101 0.435
eta 9 -0.201 0.261
eta 10 1.094 0.387

Conditional log-likelihood: -103.7
Number of iterations: 28
Number of parameters: 10

rkward-0.6.1/tests/item_response_theory/LLTM_parameter_estimation.rkcommands.R0000644000175000017500000000114412124345417027317 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Compute estimates.lltm <- LLTM(lltmdat1, mpoints=2) ## Print result rk.header ("LLTM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.lltm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print(t(rbind(Eta=estimates.lltm$etapar,StdErr=estimates.lltm$se.eta))) rk.print (paste("Conditional log-likelihood:",round(estimates.lltm$loglik, digits=1), "
Number of iterations:",estimates.lltm$iter,"
Number of parameters:",estimates.lltm$npar)) # keep results in current workspace .GlobalEnv$estimates.lltm <- estimates.lltm }) rkward-0.6.1/tests/item_response_theory/2PL_parameter_estimation.rkcommands.R0000644000175000017500000000072012124345417027143 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute estimates.2pl <- ltm(WIRS ~ z1 * z2) ## Print result rk.header ("2PL parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.2pl$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print (coef(estimates.2pl)) rk.print (paste("Log-likelihood value at convergence:",round(estimates.2pl$log.Lik, digits=1))) # keep results in current workspace .GlobalEnv$estimates.2pl <- estimates.2pl }) rkward-0.6.1/tests/item_response_theory/PCM_parameter_estimation.rkout0000644000175000017500000000506712124345417026004 0ustar thomasthomas

PCM parameter estimation

DATE

Call:

PCM(X = pcmdat)

Coefficients:


EtaStdErr
I1.c2 -0.937 0.565
I1.c3 0.330 0.809
I2.c1 -0.251 0.525
I2.c2 -0.065 0.580
I2.c3 1.432 1.024
I3.c1 0.224 0.561
I3.c2 0.074 0.568
I3.c3 0.878 0.784
I4.c1 -0.423 0.547
I4.c2 0.263 0.689
I4.c3 -0.140 0.650
I5.c1 0.980 0.788
I5.c2 -0.096 0.585
I5.c3 -0.403 0.579
I6.c1 0.586 0.826
I6.c2 -0.504 0.634
I6.c3 -1.100 0.587
I7.c1 -0.849 0.504
I7.c2 0.298 0.701

Conditional log-likelihood: -121.1
Number of iterations: 16
Number of parameters: 19

rkward-0.6.1/tests/item_response_theory/plot_GRM.rkcommands.R0000644000175000017500000000025712124345417023742 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Print result rk.header("Graded response model plot") rk.graph.on() try({ plot(estimates.grm, type="ICC", items=c(6)) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/item_fit_statistics.rkcommands.R0000644000175000017500000000102312124345417026321 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute itemfit.res <- item.fit(estimates.rasch) ## Print result rk.header ("Item-fit statistics (estimates.rasch)") rk.print ("Call:") rk.print.literal (deparse(itemfit.res$call, width.cutoff=500)) rk.print ("Alternative: Items do not fit the model") rk.print (paste("Ability Categories:", itemfit.res$G)) rk.header ("Item-Fit Statistics and P-values:", level=4) rk.print(cbind("X^2"=round(itemfit.res$Tobs, digits=3), "Pr (>X^2)"=format(round(itemfit.res$p.values, digits=3), nsmall=3))) }) rkward-0.6.1/tests/item_response_theory/Wald_test.messages.txt0000644000175000017500000000020712124345417024267 0ustar thomasthomasWarning in Waldtest.Rm(estimates.rsm) : The following items were excluded due to inappropriate response patterns within subgroups: rkward-0.6.1/tests/item_response_theory/RSM_parameter_estimation.rkout0000644000175000017500000000237712124345417026027 0ustar thomasthomas

RSM parameter estimation

DATE

Call:

RSM(X = rsmdat)

Coefficients:


EtaStdErr
I2 0.305 0.205
I3 0.256 0.203
I4 0.067 0.197
I5 -0.160 0.197
I6 -0.444 0.208
Cat 2 -0.167 0.460
Cat 3 0.138 0.732

Conditional log-likelihood: -107.6
Number of iterations: 11
Number of parameters: 7

rkward-0.6.1/tests/item_response_theory/plot_Rasch.rkcommands.R0000644000175000017500000000025012124345417024346 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Print result rk.header("Rasch model plot") rk.graph.on() try({ plot(estimates.rasch, type="ICC", legend=TRUE) }) rk.graph.off() }) rkward-0.6.1/tests/item_response_theory/unidimensional.rkout0000644000175000017500000000374712124345417024112 0ustar thomasthomas

Unidimensionality check (estimates.rasch)

DATE

Call:

rasch(data = LSAT)

Matrix of tertachoric correlations:


Item 1Item 2Item 3Item 4Item 5
Item 1 1.000 0.170 0.228 0.107 0.067
Item 2 0.170 1.000 0.189 0.111 0.172
Item 3 0.228 0.189 1.000 0.187 0.105
Item 4 0.107 0.111 0.187 1.000 0.201
Item 5 0.067 0.172 0.105 0.201 1.000

Unidimensionality Check using Modified Parallel Analysis:


Alternative hypothesis: The second eigenvalue of the observed data is substantially larger than the second eigenvalue of data under the assumed IRT model

Second eigenvalue in the observed data: 0.225

Average of second eigenvalues in Monte Carlo samples: 0.255

Monte Carlo samples: 100

p-value: 0.634

rkward-0.6.1/tests/item_response_theory/3PL_parameter_estimation.rkcommands.R0000644000175000017500000000070612124345417027150 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute estimates.3pl <- tpm(LSAT) ## Print result rk.header ("3PL parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.3pl$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print (coef(estimates.3pl)) rk.print (paste("Log-likelihood value at convergence:",round(estimates.3pl$log.Lik, digits=1))) # keep results in current workspace .GlobalEnv$estimates.3pl <- estimates.3pl }) rkward-0.6.1/tests/item_response_theory/GPCM_parameter_estimation.rkcommands.R0000644000175000017500000000104012124345417027270 0ustar thomasthomaslocal({ ## Prepare require(ltm) ## Compute estimates.gpcm <- gpcm(subset(Science, select=c("Work", "Industry", "Future", "Benefit")), constraint="rasch") ## Print result rk.header ("GPCM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.gpcm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print (coef(estimates.gpcm)) rk.print (paste("Log-likelihood value at convergence:",round(estimates.gpcm$log.Lik, digits=1))) # keep results in current workspace .GlobalEnv$estimates.gpcm <- estimates.gpcm }) rkward-0.6.1/tests/item_response_theory/LRSM_parameter_estimation.rkout0000644000175000017500000000213412124345417026132 0ustar thomasthomas

LRSM parameter estimation

DATE

Call:

LRSM(X = lrsmdat, mpoints = 2, se = FALSE, sum0 = FALSE)

Coefficients:


EtaStdErr
eta 1 -0.046 NA
eta 2 0.114 NA
eta 3 0.197 NA
eta 4 -0.042 NA
eta 5 0.346 NA

Conditional log-likelihood: -109.3
Number of iterations: 11
Number of parameters: 5

rkward-0.6.1/tests/item_response_theory/LLTM_parameter_estimation.rkout0000644000175000017500000000422712124345417026132 0ustar thomasthomas

LLTM parameter estimation

DATE

Call:

LLTM(X = lltmdat1, mpoints = 2)

Coefficients:


EtaStdErr
eta 1 0.182 0.149
eta 2 0.324 0.149
eta 3 -0.704 0.158
eta 4 -0.247 0.151
eta 5 0.491 0.150
eta 6 0.810 0.154
eta 7 0.686 0.152
eta 8 0.253 0.149
eta 9 -0.953 0.164
eta 10 0.253 0.149
eta 11 0.135 0.149
eta 12 -0.840 0.161
eta 13 -1.325 0.176
eta 14 0.515 0.150
eta 15 0.245 0.082

Conditional log-likelihood: -1511.2
Number of iterations: 15
Number of parameters: 15

rkward-0.6.1/tests/item_response_theory/3PL_parameter_estimation.rkout0000644000175000017500000000227312124345417025757 0ustar thomasthomas

3PL parameter estimation

DATE

Call:

tpm(data = LSAT)

Coefficients:


GussngDffcltDscrmn
Item 1 0.037 -3.296 0.829
Item 2 0.078 -1.145 0.760
Item 3 0.012 -0.249 0.902
Item 4 0.035 -1.766 0.701
Item 5 0.053 -2.990 0.666

Log-likelihood value at convergence: -2466.7

rkward-0.6.1/tests/item_response_theory/Andersen_LR_plot.messages.txt0000644000175000017500000000022012124345417025526 0ustar thomasthomasWarning in LRtest.Rm(estimates.pcm, se = TRUE) : The following items were excluded due to inappropriate response patterns within subgroups: rkward-0.6.1/tests/item_response_theory/GRM_parameter_estimation.rkout0000644000175000017500000000252612124345417026007 0ustar thomasthomas

GRM parameter estimation

DATE

Call:

grm(data = Environment)

Coefficients:


Extrmt1Extrmt2Dscrmn
LeadPetrol 0.487 2.584 1.378
RiverSea 1.058 2.499 2.341
RadioWaste 0.779 1.793 3.123
AirPollution 0.457 2.157 3.283
Chemicals 0.809 1.868 2.947
Nuclear 0.073 1.427 1.761

Log-likelihood value at convergence: -1090.4

rkward-0.6.1/tests/item_response_theory/Cronbach_alpha.rkout0000644000175000017500000000270612124345417023752 0ustar thomasthomas

Cronbach's alpha

DATE

for the 'LSAT' data-set (subset: Item 1, Item 2, Item 3, Item 4, Item 5)

Items: 5
Sample units: 1000
alpha: 0.29

Effects on alpha if items are removed:

value
All Items 0.29
Excluding Item 1 0.28
Excluding Item 2 0.24
Excluding Item 3 0.22
Excluding Item 4 0.25
Excluding Item 5 0.27

95% Confidence interval:

2.5%97.5%
0.22 0.36

rkward-0.6.1/tests/item_response_theory/LRSM_parameter_estimation.rkcommands.R0000644000175000017500000000117112124345417027324 0ustar thomasthomaslocal({ ## Prepare require(eRm) ## Compute estimates.lrsm <- LRSM(lrsmdat, mpoints=2, se=FALSE, sum0=FALSE) ## Print result rk.header ("LRSM parameter estimation") rk.print ("Call:") rk.print.literal (deparse(estimates.lrsm$call, width.cutoff=500)) rk.header ("Coefficients:", level=4) rk.print(t(rbind(Eta=estimates.lrsm$etapar,StdErr=estimates.lrsm$se.eta))) rk.print (paste("Conditional log-likelihood:",round(estimates.lrsm$loglik, digits=1), "
Number of iterations:",estimates.lrsm$iter,"
Number of parameters:",estimates.lrsm$npar)) # keep results in current workspace .GlobalEnv$estimates.lrsm <- estimates.lrsm }) rkward-0.6.1/tests/plots/0000755000175000017500000000000012124345417014666 5ustar thomasthomasrkward-0.6.1/tests/plots/boxplot.rkout0000644000175000017500000000044412124345417017445 0ustar thomasthomas

Boxplot

Parameters

  • Variable(s): weight, height
DATE

Boxplot

Parameters

  • Variable(s): weight, height
DATE

rkward-0.6.1/tests/plots/pareto_chart.rkcommands.R0000644000175000017500000000226412124345417021625 0ustar thomasthomaslocal({ ## Prepare require(qcc) ## Compute x <- swiss[["Education"]] title <- rk.get.description (swiss[["Education"]]) if (!is.numeric (x)) { warning ("Data is not numeric, but proceeding as requested.\nDid you forget to check the tabulate option?") } max.categories <- 10 if (length (x) > max.categories) { x <- sort (x, decreasing=TRUE) x <- x[1:max.categories] } ## Print result rk.header ("Pareto chart", parameters=list ("Variable"=title, "Limit"="10 largest values")) rk.graph.on () try ({ descriptives <- pareto.chart(x, ylab="Frequency", main=title) rk.results(descriptives, titles=c(NA,NA)) }) rk.graph.off () }) local({ ## Prepare require(qcc) ## Compute groups <- rk.list (warpbreaks[["wool"]], warpbreaks[["tension"]]) title <- paste (names (groups), collapse=" by ") x <- by (warpbreaks[["breaks"]], interaction (groups), FUN=sum) ## Print result rk.header ("Pareto chart", parameters=list ("Tabulation groups"=paste (names (groups), collapse=" by "), "Tabulation statistic"="Sum of warpbreaks[[\"breaks\"]]")) rk.graph.on () try ({ descriptives <- pareto.chart(x, ylab="Sum of warpbreaks[[\"breaks\"]]", main=title) rk.results(descriptives, titles=c(NA,NA)) }) rk.graph.off () }) rkward-0.6.1/tests/plots/stem_leaf_plot.rkcommands.R0000644000175000017500000000047012124345417022144 0ustar thomasthomaslocal({ ## Print result rk.header ("Stem-and-Leaf Plot", parameters=list ("Variable", paste (rk.get.description (swiss[["Fertility"]])), "Plot Length", "1.50","Plot Width", "80.00", "Tolerance", "0.01")) rk.print.literal(capture.output(stem(swiss[["Fertility"]], scale = 1.50, width = 80.00, atom = 0.01))) }) rkward-0.6.1/tests/plots/scatterplot_matrix.rkout0000644000175000017500000000037612124345417021712 0ustar thomasthomas

Scatterplot Matrix

Parameters

  • Diagonal Panels: histogram
  • Plot points: TRUE
  • Smooth: FALSE
  • Ellipses: FALSE at 0.5 and 0.9 levels.
DATE

rkward-0.6.1/tests/plots/scatterplot.rkout0000644000175000017500000000030012124345417020311 0ustar thomasthomas

Scatterplot

Parameters

  • X variables: weight, Education
  • Y variables: height, Catholic
DATE

rkward-0.6.1/tests/plots/density_plot.rkcommands.R0000644000175000017500000000072012124345417021662 0ustar thomasthomaslocal({ ## Prepare require(hdrcde) ## Print result rk.header ("Highest density regions", list ("Variable", rk.get.description (women[["height"]]), "Band Width", "nrd0", "Adjust", 1.00, "Remove Missing Values", na.rm=TRUE, "Length", length (women[["height"]]), "Resolution", 512.00, "Smoothing Kernel", "gaussian")) rk.graph.on () try ({ hdr.den(den=density(women[["height"]], bw="nrd0", adjust=1.00, kern="gaussian", n=512.00, na.rm=TRUE)) }) rk.graph.off () }) rkward-0.6.1/tests/plots/scatterplot_matrix.rkcommands.R0000644000175000017500000000057312124345417023103 0ustar thomasthomaslocal({ ## Prepare require(car) ## Print result data <- data.frame (swiss) rk.header ("Scatterplot Matrix", parameters=list ("Diagonal Panels", "histogram", "Plot points", "TRUE", "Smooth", "FALSE", "Ellipses", "FALSE at 0.5 and 0.9 levels.")) rk.graph.on () try (scatterplotMatrix(data, diagonal="histogram", plot.points=TRUE, smooth=FALSE, ellipse=FALSE)) rk.graph.off () }) rkward-0.6.1/tests/plots/boxplot.rkcommands.R0000644000175000017500000000254412124345417020642 0ustar thomasthomaslocal({ ## Print result data_list <- rk.list (women[["weight"]], women[["height"]]) #convert single sample variables to list rk.header ("Boxplot", list ("Variable(s)", paste (names (data_list), collapse=", "))) rk.graph.on() try ({ boxplot (data_list, notch = FALSE, outline = TRUE, horizontal = FALSE) #actual boxplot function points(sapply(data_list, mean, na.rm=TRUE), pch=15, cex = 1.00, col="blue") #calculates the mean for all data and adds a point at the corresponding position }) rk.graph.off () }) local({ ## Print result data_list <- rk.list (women[["weight"]], women[["height"]]) #convert single sample variables to list rk.header ("Boxplot", list ("Variable(s)", paste (names (data_list), collapse=", "))) rk.graph.on() try ({ boxplot (data_list, notch = FALSE, outline = TRUE, horizontal = FALSE) #actual boxplot function geo_mean <- function (x) {prod(na.omit(x))^(1/length(na.omit(x)))} #Calculate geometric mean points(sapply(data_list, geo_mean), pch=15, cex = 1.00, col="blue") #calculates the mean for all data and adds a point at the corresponding position sd_low <- (sapply(data_list, mean, na.rm = TRUE)) - (sapply(data_list,sd,na.rm = TRUE)) sd_high <- (sapply(data_list, mean, na.rm = TRUE)) + (sapply(data_list,sd,na.rm = TRUE)) points(sd_low, pch=3, cex = 1.00, col="blue") points(sd_high, pch=3, cex = 1.00, col="blue") }) rk.graph.off () }) rkward-0.6.1/tests/plots/scatterplot.rkcommands.R0000644000175000017500000000207712124345417021520 0ustar thomasthomaslocal({ ## Compute Xvars <- list(women[["weight"]],swiss[["Education"]]) Yvars <- list(women[["height"]],swiss[["Catholic"]]) if (length(Xvars) != length(Yvars)) { stop("Unequal number of X and Y variables given") } # find range of X/Y values needed Xrange <- range (c (Xvars), na.rm=TRUE) Yrange <- range (c (Yvars), na.rm=TRUE) type <- rep (c ('p'), length.out=length (Xvars)); col <- rep (c ('black', 'red'), length.out=length (Xvars)); cex <- rep (1, length.out=length (Xvars)); pch <- rep (1, length.out=length (Xvars)); ## Print result rk.header ("Scatterplot", parameters = list ( "X variables"=paste (rk.get.description (women[["weight"]],swiss[["Education"]]), collapse=", "), "Y variables"=paste (rk.get.description (women[["height"]],swiss[["Catholic"]]), collapse=", "))) rk.graph.on() try ({ # make frame and axes plot(Xrange, Yrange, type="n") # plot variables one X/Y pair at a time for (i in 1:length(Xvars)) { points ( Xvars[[i]], Yvars[[i]], type = type[[i]], col = col[[i]], cex = cex[[i]], pch = pch[[i]] ) } }) rk.graph.off() }) rkward-0.6.1/tests/plots/dotchart.rkcommands.R0000644000175000017500000000176612124345417020770 0ustar thomasthomaslocal({ ## Print result x <- women[["height"]] if (!is.numeric (x)) { warning ("Data is not numeric, but proceeding as requested.\nDid you forget to check the tabulate option?") } rk.header ("Dot chart", parameters=list ("Variable"=rk.get.description (women[["height"]]))) rk.graph.on () try ({ names(x) <- women$weight dotchart(x, main="This is a test", sub="This is a subtitle") }) rk.graph.off () }) local({ ## Print result groups <- rk.list (warpbreaks[["tension"]], warpbreaks[["wool"]]) title <- paste (names (groups), collapse=" by ") x <- by (warpbreaks[["breaks"]], interaction (groups), FUN=function (x) { mean (x) }) n <- names (x); x <- as.numeric (x); names (x) <- n # dotchart() is somewhat picky about data type rk.header ("Dot chart", parameters=list ("Tabulation groups"=paste (names (groups), collapse=" by "), "Tabulation statistic"="mean (x) of warpbreaks[[\"breaks\"]]")) rk.graph.on () try ({ dotchart(x, xlab="mean (x) of warpbreaks[[\"breaks\"]]", ylab=title) }) rk.graph.off () }) rkward-0.6.1/tests/plots/barplot.rkcommands.R0000644000175000017500000000376212124345417020621 0ustar thomasthomaslocal({ ## Print result x <- swiss[["Catholic"]] # barplot is a bit picky about attributes, so we need to convert to vector explicitely if(!is.matrix(x)) x <- as.vector(x) if(!is.matrix(x) && is.data.frame(x)) x <- data.matrix(x) names(x) <- rownames (swiss) rk.header ("Barplot", parameters=list ("Variable"=rk.get.description (swiss[["Catholic"]]), "colors"="rainbow", "Type"="juxtaposed", "Legend"="FALSE")) rk.graph.on () try ({ # adjust the range so that the labels will fit yrange <- range (x, na.rm=TRUE) * 1.2 if (yrange[1] > 0) yrange[1] <- 0 if (yrange[2] < 0) yrange[2] <- 0 bplot <- barplot(x, col=rainbow (if(is.matrix(x)) dim(x) else length(x)), beside=TRUE, ylim = yrange) text (bplot,x, labels=x, pos=3, offset=.5) }) rk.graph.off () }) local({ ## Print result x <- test_table # barplot is a bit picky about attributes, so we need to convert to vector explicitely if(!is.matrix(x)) x <- as.vector(x) if(!is.matrix(x) && is.data.frame(x)) x <- data.matrix(x) rk.header ("Barplot", parameters=list ("Variable"=rk.get.description (test_table), "colors"="default", "Type"="stacked", "Legend"="TRUE")) rk.graph.on () try ({ barplot(x, legend.text=TRUE) }) rk.graph.off () }) local({ ## Print result groups <- rk.list (warpbreaks[["wool"]], warpbreaks[["tension"]]) title <- paste (names (groups), collapse=" by ") x <- by (warpbreaks[["breaks"]], interaction (groups), FUN=sum) rk.header ("Barplot", parameters=list ("Tabulation groups"=paste (names (groups), collapse=" by "), "Tabulation statistic"="Sum of warpbreaks[[\"breaks\"]]", "colors"="rainbow", "Type"="juxtaposed", "Legend"="TRUE")) rk.graph.on () try ({ # adjust the range so that the labels will fit yrange <- range (x, na.rm=TRUE) * 1.2 if (yrange[1] > 0) yrange[1] <- 0 if (yrange[2] < 0) yrange[2] <- 0 bplot <- barplot(x, col=rainbow (if(is.matrix(x)) dim(x) else length(x)), beside=TRUE, legend.text=TRUE, ylim = yrange, xlab=title, ylab="Sum of warpbreaks[[\"breaks\"]]") text (bplot,x, labels=x, pos=3, offset=.5) }) rk.graph.off () }) rkward-0.6.1/tests/plots/plot_options.rkout0000644000175000017500000000012412124345417020502 0ustar thomasthomas

Generic Plot

DATE

rkward-0.6.1/tests/plots/ecdf_plot.rkcommands.R0000644000175000017500000000112212124345417021101 0ustar thomasthomaslocal({ ## Prepare yrange <- range (swiss[["Catholic"]], na.rm=TRUE) data.mean <- mean (swiss[["Catholic"]], na.rm=TRUE) data.sd <- sd (swiss[["Catholic"]], na.rm=TRUE) ## Print result rk.header ("Empirical Cumulative Distribution Function", list ("Variable", rk.get.description (swiss[["Catholic"]]), "Minimum", yrange[1], "Maximum", yrange[2])) rk.graph.on () try ({ plot.ecdf (swiss[["Catholic"]], , verticals=FALSE) curve (pnorm (x, mean=data.mean, sd=data.sd), from=yrange[1], to=yrange[2], add=TRUE, , col="blue") rug (swiss[["Catholic"]], 0.03, 0.50, side = 3) }) rk.graph.off () }) rkward-0.6.1/tests/plots/boxplot_grouped.rkcommands.R0000644000175000017500000000244012124345417022362 0ustar thomasthomaslocal({ ## Print result groups <- rk.list (warpbreaks[["tension"]], warpbreaks[["wool"]]) data_list <- split (warpbreaks[["breaks"]], groups) #split sample by grouping variables rk.header ("Boxplot", list ("Outcome variable", rk.get.description (warpbreaks[["breaks"]]), "Grouping variable(s)", paste (names (groups), collapse=", "))) rk.graph.on() try ({ boxplot (data_list, notch = FALSE, outline = FALSE, horizontal = TRUE) #actual boxplot function }) rk.graph.off () }) local({ ## Print result groups <- rk.list (warpbreaks[["tension"]], warpbreaks[["wool"]]) data_list <- split (warpbreaks[["breaks"]], groups) #split sample by grouping variables # adjust width and position of boxes to achieve dodging dodge_size <- nlevels (interaction (warpbreaks[["tension"]])) box_width <- 0.80 / dodge_size box_positions <- (rep (1:(length (data_list) / dodge_size), each=dodge_size) + (1:dodge_size)*(box_width)) rk.header ("Boxplot", list ("Outcome variable", rk.get.description (warpbreaks[["breaks"]]), "Grouping variable(s)", paste (names (groups), collapse=", "))) rk.graph.on() try ({ boxplot (data_list, boxwex=box_width, at=box_positions, xlim=c(min(box_positions)-box_width, max(box_positions)+box_width), notch = FALSE, outline = FALSE, horizontal = TRUE) #actual boxplot function }) rk.graph.off () }) rkward-0.6.1/tests/plots/pareto_chart.rkout0000644000175000017500000000343712124345417020436 0ustar thomasthomas

Pareto chart

Parameters

  • Variable: Education
  • Limit: 10 largest values
DATE

FrequencyCum.Freq.PercentageCum.Percent.
A535321.11621.116
B328512.74933.865
C2911411.55445.418
D2914311.55456.972
E2817111.15568.127
F201917.968176.096
G192107.569783.665
H152255.976189.641
I132385.179394.821
J132515.1793100

Pareto chart

Parameters

  • Tabulation groups: wool by tension
  • Tabulation statistic: Sum of warpbreaks[["breaks"]]
DATE

FrequencyCum.Freq.PercentageCum.Percent.
A.L40140126.38226.382
B.M25966017.03943.421
B.L25491416.71160.132
A.H221113514.53974.671
A.M216135114.21188.882
B.H169152011.118100
rkward-0.6.1/tests/plots/ecdf_plot.rkout0000644000175000017500000000033112124345417017710 0ustar thomasthomas

Empirical Cumulative Distribution Function

Parameters

  • Variable: Catholic
  • Minimum: 2.15
  • Maximum: 100
DATE

rkward-0.6.1/tests/plots/stem_leaf_plot.rkout0000644000175000017500000000057212124345417020755 0ustar thomasthomas

Stem-and-Leaf Plot

Parameters

  • Variable: Fertility
  • Plot Length: 1.50
  • Plot Width: 80.00
  • Tolerance: 0.01
DATE
  The decimal point is 1 digit(s) to the right of the |

  3 | 5
  4 | 3
  4 | 5
  5 | 4
  5 | 6778
  6 | 1244
  6 | 55556678899
  7 | 0122334
  7 | 6677899
  8 | 02334
  8 | 67
  9 | 223
rkward-0.6.1/tests/plots/histogram.rkout0000644000175000017500000000103112124345417017744 0ustar thomasthomas

Histogram

Parameters

  • : Variable
  • : Education
  • : Density bandwidth
  • : nrd
  • : Density adjust
  • : 4
  • : Density resolution
  • : 512
  • : Density Remove missing values
  • na.rm: TRUE
  • : Break points
  • : Equally spaced vector of length 6
  • : Right closed
  • : TRUE
  • : Include in lowest cell
  • : TRUE
  • : Scale
  • : Density
DATE

rkward-0.6.1/tests/plots/piechart.rkcommands.R0000644000175000017500000000165612124345417020755 0ustar thomasthomaslocal({ ## Print result x <- test_table[["A"]] if (!is.numeric (x)) { warning ("Data is not numeric, but proceeding as requested.\nDid you forget to check the tabulate option?") } rk.header ("Pie chart", parameters=list ("Variable"=rk.get.description (test_table[["A"]]), "Orientation"="Clockwise")) rk.graph.on () try ({ pie(x, clockwise =1, density =3 + 1 * 0:length (x), angle =45 + 6 * 0:length (x), col=gray.colors (if(is.matrix(x)) dim(x) else length(x))) }) rk.graph.off () }) local({ ## Print result groups <- rk.list (test_table[["A"]], test_table[["B"]], test_table[["C"]]) title <- paste (names (groups), collapse=" by ") x <- table (interaction (groups)) rk.header ("Pie chart", parameters=list ("Tabulation groups"=paste (names (groups), collapse=" by "), "Tabulation statistic"="Frequency", "Orientation"="Counter clockwise")) rk.graph.on () try ({ pie(x, clockwise =0, main=title, sub="Frequency") }) rk.graph.off () }) rkward-0.6.1/tests/plots/generic_plot.rkcommands.R0000644000175000017500000000015412124345417021620 0ustar thomasthomaslocal({ ## Print result rk.header ("Generic Plot") rk.graph.on () try({ plot(swiss); }) rk.graph.off () }) rkward-0.6.1/tests/plots/stripchart.rkout0000644000175000017500000000035712124345417020144 0ustar thomasthomas

Stripchart

Parameters

  • Variable: breaks
  • Group: tension
  • Method: stack
  • Offset: 0.5
  • Orientation: Horizontal
DATE

rkward-0.6.1/tests/plots/plot_options.rkcommands.R0000644000175000017500000000044612124345417021703 0ustar thomasthomaslocal({ ## Print result rk.header ("Generic Plot") rk.graph.on () try({ par (mar=c (5.0, 4.0, 4.9, 2.0)) plot(women[["weight"]], type="b", ylim=c (100, 200), main="This is a test", sub="subtitle", las=2, cex.axis=1.1); grid(nx=NA, ny=NULL, col="blue", lty="dashed"); }) rk.graph.off () }) rkward-0.6.1/tests/plots/stripchart.rkcommands.R0000644000175000017500000000056412124345417021336 0ustar thomasthomaslocal({ ## Print result rk.header ("Stripchart", list ("Variable"=rk.get.description (warpbreaks[["breaks"]]), "Group"=rk.get.description (warpbreaks[["tension"]]), "Method"="stack", "Offset" = 0.50, "Orientation"="Horizontal")) rk.graph.on () try ({ stripchart (warpbreaks[["breaks"]] ~ (warpbreaks[["tension"]]), method = "stack", offset = 0.50) }) rk.graph.off () }) rkward-0.6.1/tests/plots/generic_plot.rkout0000644000175000017500000000012412124345417020423 0ustar thomasthomas

Generic Plot

DATE

rkward-0.6.1/tests/plots/boxplot_grouped.rkout0000644000175000017500000000057012124345417021172 0ustar thomasthomas

Boxplot

Parameters

  • Outcome variable: breaks
  • Grouping variable(s): tension, wool
DATE

Boxplot

Parameters

  • Outcome variable: breaks
  • Grouping variable(s): tension, wool
DATE

rkward-0.6.1/tests/plots/dotchart.rkout0000644000175000017500000000054612124345417017571 0ustar thomasthomas

Dot chart

Parameters

  • Variable: height
DATE

Dot chart

Parameters

  • Tabulation groups: tension by wool
  • Tabulation statistic: mean (x) of warpbreaks[["breaks"]]
DATE

rkward-0.6.1/tests/plots/piechart.rkout0000644000175000017500000000061412124345417017554 0ustar thomasthomas

Pie chart

Parameters

  • Variable: A
  • Orientation: Clockwise
DATE

Pie chart

Parameters

  • Tabulation groups: A by B by C
  • Tabulation statistic: Frequency
  • Orientation: Counter clockwise
DATE

rkward-0.6.1/tests/plots/density_plot.rkout0000644000175000017500000000062312124345417020472 0ustar thomasthomas

Highest density regions

Parameters

  • : Variable
  • : height
  • : Band Width
  • : nrd0
  • : Adjust
  • : 1
  • : Remove Missing Values
  • na.rm: TRUE
  • : Length
  • : 15
  • : Resolution
  • : 512
  • : Smoothing Kernel
  • : gaussian
DATE

rkward-0.6.1/tests/plots/histogram.rkcommands.R0000644000175000017500000000127412124345417021147 0ustar thomasthomaslocal({ ## Print result rk.header ("Histogram", list ("Variable", rk.get.description (swiss[["Education"]]) , "Density bandwidth", "nrd", "Density adjust", 4.00, "Density resolution", 512.00, "Density Remove missing values", na.rm=TRUE , "Break points", "Equally spaced vector of length 6", "Right closed", "TRUE", "Include in lowest cell", "TRUE", "Scale", "Density")) rk.graph.on () try ({ hist (swiss[["Education"]], breaks=(function(x) {y = extendrange(x,f=0.1); seq(from=y[1], to=y[2], length=6)})(swiss[["Education"]]), freq=FALSE, labels=TRUE, lty="solid", density=-1) lines(density(swiss[["Education"]], bw="nrd", adjust = 4.00, na.rm=TRUE, n = 512.00), col="blue") }) rk.graph.off () }) rkward-0.6.1/tests/plots/barplot.rkout0000644000175000017500000000130312124345417017414 0ustar thomasthomas

Barplot

Parameters

  • Variable: Catholic
  • colors: rainbow
  • Type: juxtaposed
  • Legend: FALSE
DATE

Barplot

Parameters

  • Variable: test_table
  • colors: default
  • Type: stacked
  • Legend: TRUE
DATE

Barplot

Parameters

  • Tabulation groups: wool by tension
  • Tabulation statistic: Sum of warpbreaks[["breaks"]]
  • colors: rainbow
  • Type: juxtaposed
  • Legend: TRUE
DATE

rkward-0.6.1/tests/analysis_plugins.R0000644000175000017500000003735412124345417017250 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="analysis_plugins", # place here libraries that are required for *all* tests in this suite, or highly likely to be installed libraries = c ("datasets", "stats"), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { # prepare some different files for loading library ("datasets") data (women) data (warpbreaks) data (rock) assign ("test50x", 100+c (1:50), envir=globalenv()) assign ("test50y", 200+c (1:50), envir=globalenv()) assign ("test50z", c (1:50)*4, envir=globalenv()) assign ("test10x", 100+c (1:10, NA), envir=globalenv()) assign ("test10y", 200+c (1:10, NA), envir=globalenv()) assign ("test10z", c (1:10, NA)*4, envir=globalenv()) assign ("test10a", c (1:5, 1:5, NA), envir=globalenv()) x <- data.frame ("A" = rep (c (1, 2), 8), "B" = rep (c (1, 1, 2, 2), 4), "C" = rep (c (1, 1, 1, 1, 2, 2, 2, 2), 2), "D"= c (rep (1, 8), rep (2, 8))) x[2,2] <- NA assign ("test_table", x, envir=globalenv()) } ## the tests ), tests = list ( new ("RKTest", id="basic_statistics_a", call=function () { rk.call.plugin ("rkward::basic_statistics", autre.real="6.00", constMad.real="1.4628", customMu.state="1", customS.state="1", huber.state="1", initmu.string="median", irq.state="1", length.state="1", mad.state="1", maximum.state="1", mean.state="1", median.state="1", minimum.state="1", mu.text="3", narm.state="1", nbmaximum.real="0.00", nbminimum.real="0.00", saveas.active="1", saveas.objectname="my.data", pourcent.real="0.05", quartile.state="1", s.text="", sd.state="1", tol.real="0.07", trim.state="1", vari.state="1", winsor.real="1.50", z.available="women[[\"weight\"]]\ntest50x", submit.mode="submit") }, libraries=c("MASS")), new ("RKTest", id="basic_statistics_b", call=function () { rk.call.plugin ("rkward::basic_statistics", autre.real="0.00", huber.state="", irq.state="0", length.state="0", mad.state="", maximum.state="0", mean.state="0", median.state="0", minimum.state="0", narm.state="1", nbmaximum.real="3.00", nbminimum.real="2.00", quartile.state="0", sd.state="0", trim.state="", vari.state="0", z.available="test10x\nwomen[[\"height\"]]", submit.mode="submit") }), new ("RKTest", id="correlation_matrix", call=function () { rk.call.plugin ("rkward::corr_matrix", do_p.state="1", method.string="pearson", use.string="pairwise", x.available="test50x\ntest50y\ntest50z", submit.mode="submit") rk.call.plugin ("rkward::corr_matrix", do_p.state="", method.string="polychoric", use.string="pairwise", x.available="test10y\ntest10a", submit.mode="submit") rk.call.plugin ("rkward::corr_matrix", do_p.state="", method.string="pearson", use.string="pairwise", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]", submit.mode="submit") }), new ("RKTest", id="correlation_matrix_plot", call=function () { rk.call.plugin ("rkward::cor_graph", digits.real="3.00", method.string="pearson", scale.state="TRUE", use.string="pairwise.complete.obs", x.available="rock", submit.mode="submit") }), new ("RKTest", id="descriptive_stats", call=function () { rk.call.plugin ("rkward::descriptive", constMad.real="1.4628", length.state="1", mad.state="1", mad_type.string="average", mean.state="1", median.state="1", prod.state="1", range.state="1", sd.state="1", sum.state="1", trim.real="0.00", x.available="women[[\"height\"]]\ntest10z", submit.mode="submit") }), new ("RKTest", id="t_test", call=function () { rk.call.plugin ("rkward::t_test", confint.checked="1", conflevel.real="0.95", hypothesis.string="two.sided", test_form.string="indep", varequal.state="0", x.available="test50x", y.available="test50y", submit.mode="submit") rk.call.plugin ("rkward::t_test", confint.checked="1", conflevel.real="0.99", hypothesis.string="less", test_form.string="paired", x.available="test10y", y.available="test10z", submit.mode="submit") rk.call.plugin ("rkward::t_test", confint.checked="1", conflevel.real="0.95", hypothesis.string="two.sided", mu.real="20.00", test_form.string="const", x.available="test10z", submit.mode="submit") }), new ("RKTest", id="wilcoxon_tests", call=function () { rk.call.plugin ("rkward::wilcoxon_tests", alternative.string="two.sided", confint.checked="1", conflevel.real="0.95", correct.state="", exact.string="TRUE", mu.real="0.00", svb_Svrsltst.active="0", svb_Svrsltst.objectname="wcox.result", svb_Svrsltst.parent=".GlobalEnv", ties.state="", x.available="test50x", y.available="", submit.mode="submit") rk.call.plugin ("rkward::wilcoxon_tests", alternative.string="less", confint.checked="0", correct.state="correct", exact.string="automatic", mu.real="0.00", paired.state="true", svb_Svrsltst.active="0", svb_Svrsltst.objectname="wcox.result", svb_Svrsltst.parent=".GlobalEnv", ties.state="", x.available="test50x", y.available="test50y", submit.mode="submit") # exact tests, allowing ties rk.call.plugin ("rkward::wilcoxon_tests", alternative.string="two.sided", confint.checked="1", conflevel.real="0.95", correct.state="", exact.string="TRUE", mu.real="0.00", svb_Svrsltst.active="0", svb_Svrsltst.objectname="wcox.result", svb_Svrsltst.parent=".GlobalEnv", ties.state="true", x.available="test50x", y.available="", submit.mode="submit") rk.call.plugin ("rkward::wilcoxon_tests", alternative.string="less", confint.checked="0", correct.state="correct", exact.string="automatic", mu.real="0.00", paired.state="true", svb_Svrsltst.active="0", svb_Svrsltst.objectname="wcox.result", svb_Svrsltst.parent=".GlobalEnv", ties.state="true", x.available="test50x", y.available="test50y", submit.mode="submit") }, libraries=c ("exactRankTests")), new ("RKTest", id="moments_moment", call=function () { rk.call.plugin ("rkward::moment", absolute.state="FALSE", central.state="FALSE", length.state="0", narm.state="TRUE", order.real="1.00", x.available="test50z\ntest50y\ntest50x\ntest10z\ntest10y\ntest10x", submit.mode="submit") }, libraries=c ("moments")), new ("RKTest", id="bonett_test", call=function () { rk.call.plugin ("rkward::bonett_test", alternative.string="two.sided", length.state="1", show_alternative.state="1", x.available="test50z\ntest50y\ntest50x\ntest10z\ntest10y\ntest10x", submit.mode="submit") }, libraries=c ("moments")), new ("RKTest", id="agostino_test", call=function () { rk.call.plugin ("rkward::agostino_test", alternative.string="two.sided", length.state="1", show_alternative.state="1", x.available="warpbreaks[[\"breaks\"]]\ntest50z\ntest10x", submit.mode="submit") }, libraries=c ("moments")), new ("RKTest", id="anscombe_test", call=function () { rk.call.plugin ("rkward::anscombe_test", alternative.string="two.sided", length.state="1", show_alternative.state="1", x.available="warpbreaks[[\"breaks\"]]\ntest50z\ntest10y", submit.mode="submit") }, fuzzy_output=TRUE, libraries=c ("moments")), new ("RKTest", id="skewness_kurtosis", call=function () { rk.call.plugin ("rkward::skewness_kurtosis", geary.state="1", kurtosis.state="1", length.state="1", narm.state="1", skewness.state="1", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]\nwarpbreaks[[\"breaks\"]]", submit.mode="submit") }, libraries=c ("moments")), new ("RKTest", id="F_test", call=function () { rk.call.plugin ("rkward::F_test", alternative.string="two.sided", conflevel.real="0.95", ratio.real="1.00", x.available="test50z", y.available="test50y", submit.mode="submit") }), new ("RKTest", id="fligner_test", call=function () { rk.call.plugin ("rkward::fligner_test", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]\ntest50z\ntest50y\ntest50x\ntest10z\ntest10y\ntest10x", submit.mode="submit") }), new ("RKTest", id="bartlett_test", call=function () { rk.call.plugin ("rkward::bartlett_test", x.available="warpbreaks[[\"breaks\"]]\ntest50z\ntest50y\ntest50x\ntest10z\ntest10y\ntest10x", submit.mode="submit") }), new ("RKTest", id="levene_test", call=function () { rk.call.plugin ("rkward::levene_test", group.available="warpbreaks[[\"tension\"]]", y.available="warpbreaks[[\"breaks\"]]", submit.mode="submit") }, libraries = c ("car")), new ("RKTest", id="ansari_bradley_test", call=function () { rk.call.plugin ("rkward::ansari_bradley_test", alternative.string="two.sided", confint.state="TRUE", conflevel.real="0.95", exact.string="yes", x.available="test50x", y.available="test10y", submit.mode="submit") rk.call.plugin ("rkward::ansari_bradley_test", alternative.string="less", confint.state="FALSE", exact.string="automatic", x.available="test50x", y.available="test50y", submit.mode="submit") }), new ("RKTest", id="ansari_bradley_exact_test", call=function () { rk.call.plugin ("rkward::ansari_bradley_exact_test", alternative.string="two.sided", confint.state="TRUE", conflevel.real="0.95", exact.string="yes", x.available="test50x", y.available="test10y", submit.mode="submit") rk.call.plugin ("rkward::ansari_bradley_exact_test", alternative.string="less", confint.state="FALSE", exact.string="automatic", x.available="test50x", y.available="test50y", submit.mode="submit") }, libraries=c ("exactRankTests")), new ("RKTest", id="mood_test", call=function () { rk.call.plugin ("rkward::mood_test", alternative.string="two.sided", x.available="test50z", y.available="test50x", submit.mode="submit") }), new ("RKTest", id="chisq_out_test", call=function () { rk.call.plugin ("rkward::chisq_out_test", descriptives.state="1", length.state="1", opposite.state="FALSE", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]\nrock[[\"peri\"]]\nrock[[\"area\"]]", submit.mode="submit") rk.call.plugin ("rkward::chisq_out_test", descriptives.state="0", length.state="0", opposite.state="TRUE", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]\nrock[[\"peri\"]]\nrock[[\"area\"]]", submit.mode="submit") }, libraries = c ("outliers")), new ("RKTest", id="dixon_test", call=function () { rk.call.plugin ("rkward::dixon_test", descriptives.state="1", length.state="1", opposite.state="FALSE", two_sided.state="TRUE", type.string="0", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]", submit.mode="submit") rk.call.plugin ("rkward::dixon_test", descriptives.state="0", length.state="0", opposite.state="TRUE", two_sided.state="FALSE", type.string="0", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]", submit.mode="submit") }, libraries = c ("outliers")), new ("RKTest", id="outlier", call=function () { rk.call.plugin ("rkward::outlier", descriptives.state="0", length.state="1", opposite.state="FALSE", x.available="warpbreaks[[\"breaks\"]]\ntest50z", submit.mode="submit") rk.call.plugin ("rkward::outlier", descriptives.state="1", length.state="0", opposite.state="TRUE", x.available="warpbreaks[[\"breaks\"]]\ntest50z", submit.mode="submit") }, libraries = c ("outliers")), new ("RKTest", id="grubbs_test", call=function () { rk.call.plugin ("rkward::grubbs_test", descriptives.state="0", length.state="1", opposite.state="FALSE", two_sided.state="TRUE", type.string="10", x.available="warpbreaks[[\"breaks\"]]\ntest10z", submit.mode="submit") rk.call.plugin ("rkward::grubbs_test", descriptives.state="1", length.state="1", opposite.state="TRUE", two_sided.state="FALSE", type.string="11", x.available="warpbreaks[[\"breaks\"]]\ntest10z", submit.mode="submit") }, libraries = c ("outliers")), new ("RKTest", id="pp_test", call=function () { rk.call.plugin ("rkward::PP_test", length.state="1", lshort.string="FALSE", narm.state="0", x.available="rock[[\"shape\"]]\nrock[[\"perm\"]]\nrock[[\"peri\"]]\nrock[[\"area\"]]", submit.mode="submit") }), new ("RKTest", id="crosstab_n_to_1", call=function () { rk.call.plugin ("rkward::crosstab", barplot.state="TRUE", barplot_embed.colors.string="default", barplot_embed.labels.state="0", barplot_embed.legend.state="0", barplot_embed.plotoptions.add_grid.state="0", barplot_embed.plotoptions.asp.real="0.00", barplot_embed.plotoptions.main.text="", barplot_embed.plotoptions.pointcolor.color.string="", barplot_embed.plotoptions.pointtype.string="", barplot_embed.plotoptions.sub.text="", barplot_embed.plotoptions.xaxt.state="", barplot_embed.plotoptions.xlab.text="", barplot_embed.plotoptions.xlog.state="", barplot_embed.plotoptions.xmaxvalue.text="", barplot_embed.plotoptions.xminvalue.text="", barplot_embed.plotoptions.yaxt.state="", barplot_embed.plotoptions.ylab.text="", barplot_embed.plotoptions.ylog.state="", barplot_embed.plotoptions.ymaxvalue.text="", barplot_embed.plotoptions.yminvalue.text="", barplot_embed.type.string="juxtaposed", chisq.state="TRUE", simpv.string="FALSE", x.available="warpbreaks[[\"tension\"]]", y.available="warpbreaks[[\"wool\"]]\nwarpbreaks[[\"tension\"]]", submit.mode="submit") rk.call.plugin ("rkward::crosstab", barplot.state="TRUE", barplot_embed.colors.string="rainbow", barplot_embed.labels.state="1", barplot_embed.legend.state="0", barplot_embed.place.string="3", barplot_embed.plotoptions.add_grid.state="0", barplot_embed.plotoptions.asp.real="0.00", barplot_embed.plotoptions.main.text="", barplot_embed.plotoptions.pointcolor.color.string="", barplot_embed.plotoptions.pointtype.string="", barplot_embed.plotoptions.sub.text="", barplot_embed.plotoptions.xaxt.state="", barplot_embed.plotoptions.xlab.text="", barplot_embed.plotoptions.xlog.state="", barplot_embed.plotoptions.xmaxvalue.text="", barplot_embed.plotoptions.xminvalue.text="", barplot_embed.plotoptions.yaxt.state="", barplot_embed.plotoptions.ylab.text="", barplot_embed.plotoptions.ylog.state="", barplot_embed.plotoptions.ymaxvalue.text="", barplot_embed.plotoptions.yminvalue.text="", barplot_embed.type.string="juxtaposed", chisq.state="TRUE", chisq_expected.state="TRUE", margins.state="TRUE", prop_column.state="TRUE", prop_row.state="TRUE", prop_total.state="TRUE", simpv.string="FALSE", x.available="warpbreaks[[\"tension\"]]", y.available="warpbreaks[[\"wool\"]]\nwarpbreaks[[\"tension\"]]", submit.mode="submit") }), new ("RKTest", id="crosstab_multi", call=function () { rk.call.plugin ("rkward::crosstab_multi", exclude_nas.state="1", x.available="test_table[[\"A\"]]\ntest_table[[\"B\"]]\ntest_table[[\"C\"]]\ntest_table[[\"D\"]]", submit.mode="submit") }), new ("RKTest", id="box_test", call=function () { rk.call.plugin ("rkward::Box_test", lag.real="1.00", length.state="1", narm.state="0", type.string="Box-Pierce", x.available="test50x\ntest10y", submit.mode="submit") }), new ("RKTest", id="kpss_test", call=function () { rk.call.plugin ("rkward::kpss_test", length.state="1", lshort.string="FALSE", narm.state="0", null.string="Trend", x.available="test50x\ntest50y\ntest50z", submit.mode="submit") }, libraries=c("tseries")), new ("RKTest", id="hp_filter", call=function () { .GlobalEnv$co2 <- datasets::co2 # another, incompatible co2 dataset exists in package locfit rk.sync.global() rk.call.plugin ("rkward::hp_filter", cycle_name.active="1", trend_name.active="1", custom.state="0", cycle_col.color.string="green4", cycle_lty.string="", cycle_lwd.real="1.00", cycle_name.objectname="hpcycle", downlab.text="", lambda.string="1600", plot_cycle.state="1", series_col.color.string="blue", series_lty.string="", series_lwd.real="1.00", trend_col.color.string="red", trend_lty.string="", trend_lwd.real="1.00", trend_name.objectname="hptrend", uplab.text="", x.available="co2", submit.mode="submit") rk.print (summary (hptrend)) rk.print (summary (hpcycle)) }), new ("RKTest", id="linear_regression", call=function () { rk.call.plugin ("rkward::linear_regression", intercept.state="1", x.available="warpbreaks[[\"tension\"]]\nwarpbreaks[[\"wool\"]]", y.available="warpbreaks[[\"breaks\"]]", submit.mode="submit") }) ), postCalls = list ( # like initCalls: run after all tests to clean up. function () { suppressWarnings (rm (list=c ("women", "warpbreaks", "rock", "co2", "test50x", "test50y", "test50z", "test10x", "test10y", "test10z", "test_table", "hptrend", "hpcycle"), envir=globalenv())) } ) ) rkward-0.6.1/tests/data_plugin_tests.R0000644000175000017500000000323112124345417017360 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="data_plugin_tests", # place here libraries that are required for *all* tests in this suite, or highly likely to be installed libraries = c ("datasets"), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { # prepare some different files for loading library ("datasets") data (women) data (sleep) } ## the tests ), tests = list ( new ("RKTest", id="sort_data", call=function () { assign("women.backup", datasets::women, pos=globalenv()) rk.sync.global() rk.call.plugin ("rkward::sort_data", conversion.string="as is", multi_sortby.serialized="keys=women.backup[[\\\"height\\\"]]\n_row=conversion.string=as is\treverse.state=1", object.available="women.backup", order.string="", saveto_select.string="same", sortby.available="women.backup[[\"height\"]]", submit.mode="submit") stopifnot (all.equal (women.backup, women[order (-women$height),])) }), new ("RKTest", id="subset_dataframe", call=function () { rk.call.plugin ("rkward::subset_dataframe", drp_fltr_num.string="range", frm_Onlyssbs.checked="1", inp_Exprssnr.text="group == 1", inp_Mnmmrmpt.text="0", inp_Mxmmrmpt.text="3", maxinc.state="0", mininc.state="1", svb_Svrsltst.active="1", svb_Svrsltst.objectname="sset.result", svb_Svrsltst.parent=".GlobalEnv", var_data.available="sleep", vrsl_Fltrbyvr.available="sleep[[\"extra\"]]", vrsl_Slctdvrb.available="sleep[[\"extra\"]]\nsleep[[\"ID\"]]", submit.mode="submit") }) ), postCalls = list ( function(){rm("women", pos=globalenv())} ) # like initCalls: run after all tests to clean up. Empty in this case. ) rkward-0.6.1/tests/rkward_application_tests_strange_object.RData0000644000175000017500000000056412124345417024617 0ustar thomasthomasTN05I@E@f, U%.S Dt7>Αu<1B(@;]5pVJ# q)O^DWgNg` |oYv%gegʲw$*`uck5f@J7.fGE=&r]brsBȘ?ȑ<6⋢PxB wvbkƤ ˪ѩ 8/j ByZ\Է)%fߞ*V$1iJZgF92-K; MP2GKBx z<VLjrkward-0.6.1/tests/rkward_application_tests/0000755000175000017500000000000012124345417020624 5ustar thomasthomasrkward-0.6.1/tests/rkward_application_tests/output_capture_interleaving_test.rkout0000644000175000017500000000271012124345417030603 0ustar thomasthomas

Messages, warnings, or errors:

A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
rkward-0.6.1/tests/rkward_application_tests/output_capture_interleaving_test.rkcommands.R0000644000175000017500000000013512124345417031774 0ustar thomasthomaslocal({ ## Compute for (i in 1:20) { cat ("A") system ("echo B") } }) rkward-0.6.1/tests/rkward_application_tests/active_binding.messages.txt0000644000175000017500000000007012124345417026135 0ustar thomasthomasactive.binding after sync active.binding active.binding rkward-0.6.1/tests/rkward_application_tests/plot_history_basics.messages.txt0000644000175000017500000000011712124345417027255 0ustar thomasthomasmark 1 mark 2 mark 3 mark 4 mark 5 mark 6 mark 7 mark 8 mark 8a mark 9 mark 10 rkward-0.6.1/tests/rkward_application_tests/run_again_links.rkout0000644000175000017500000000014612124345417025056 0ustar thomasthomas

rkward-0.6.1/tests/rkward_application_tests/output_graphics_formats.rkout0000644000175000017500000000046512124345417026672 0ustar thomasthomas

This browser appears incapable of displaying SVG object. The SVG source is at: graph.svg rkward-0.6.1/tests/rkward_application_tests/run_again_links.rkcommands.R0000644000175000017500000000705112124345417026252 0ustar thomasthomaslocal({ ## Print result # parameters: shape1 <- 2.0; shape2 <- 2.0; # mean and variances of the distribution of sample averages: avg.exp <- shape1/(shape1 + shape2); avg.var <- (shape1*shape2/((shape1+shape2)^2*(shape1+shape2+1)))/10; # generate the entire data: data <- matrix(rbeta(n=10000, shape1=shape1, shape2=shape2), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, labels=TRUE, lty="solid", density=-1, col="azure", xlab="Sample Averages", main="Beta") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) .rk.get.structure.global (".Random.seed") .rk.rerun.plugin.link(plugin="rkward::plot_beta_clt", settings="a.real=2.0\nb.real=2.0\ndrawnorm.state=1\nfunction.string=hist\nhistogram_opt.barlabels.state=1\nhistogram_opt.density.real=-1.00\nhistogram_opt.doborder.state=1\nhistogram_opt.histbordercol.color.string=\nhistogram_opt.histbreaksFunction.string=Sturges\nhistogram_opt.histfillcol.color.string=azure\nhistogram_opt.histlinetype.string=solid\nhistogram_opt.rightclosed.state=1\nhistogram_opt.usefillcol.state=1\nnAvg.real=10.00\nnDist.real=1000.00\nnormlinecol.color.string=red\nnormpointtype.string=l\nplotoptions.add_grid.state=0\nplotoptions.asp.real=0.00\nplotoptions.cexaxis.text=\nplotoptions.custom_margins.checked=0\nplotoptions.main.text=\nplotoptions.pointcolor.color.string=\nplotoptions.pointtype.string=\nplotoptions.sub.text=\nplotoptions.ticklblrot.string=\nplotoptions.xaxt.state=\nplotoptions.xlab.text=\nplotoptions.xmaxvalue.text=\nplotoptions.xminvalue.text=\nplotoptions.yaxt.state=\nplotoptions.ylab.text=\nscalenorm.state=0", label="Run again") .rk.make.hr() local({ ## Print result # parameters: mean <- 0.0; sd <- 1.0; # mean and variances of the distribution of sample averages: avg.exp <- mean; avg.var <- (sd^2)/10; # generate the entire data: data <- matrix(rnorm(n=10000, mean=mean, sd=sd), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- pnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); rk.graph.on () try ({ plot(ecdf(avg), xlab="Sample Averages", main="Normal", verticals=TRUE, col.vert="blue", do.points=FALSE, col.hor="blue", col.01line=c("gold","cyan")) lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) .rk.get.structure.global (".Random.seed") .rk.rerun.plugin.link(plugin="rkward::plot_normal_clt", settings="dist_stepfun.col_hor.color.string=blue\ndist_stepfun.col_y0.color.string=gold\ndist_stepfun.col_y1.color.string=cyan\ndist_stepfun.do_points.state=\ndist_stepfun.linetype.string=\ndist_stepfun.verticals.state=1\ndrawnorm.state=1\nfunction.string=dist\nmean.real=0.0\nnAvg.real=10.00\nnDist.real=1000.00\nnormlinecol.color.string=red\nnormpointtype.string=l\nplotoptions.add_grid.state=0\nplotoptions.asp.real=0.00\nplotoptions.cexaxis.text=\nplotoptions.custom_margins.checked=0\nplotoptions.main.text=\nplotoptions.pointcolor.color.string=\nplotoptions.pointtype.string=\nplotoptions.sub.text=\nplotoptions.ticklblrot.string=\nplotoptions.xaxt.state=\nplotoptions.xlab.text=\nplotoptions.xmaxvalue.text=\nplotoptions.xminvalue.text=\nplotoptions.yaxt.state=\nplotoptions.ylab.text=\nscalenorm.state=0\nsd.real=1.0", label="Run again") .rk.make.hr() rkward-0.6.1/tests/rkward_application_tests/promise_in_globalenv.messages.txt0000644000175000017500000000005112124345417027364 0ustar thomasthomasdelayed assign after sync delayed assign rkward-0.6.1/tests/distributions/0000755000175000017500000000000012124345417016427 5ustar thomasthomasrkward-0.6.1/tests/distributions/negbinomial_clt.rkcommands.R0000644000175000017500000000147612124345417024045 0ustar thomasthomaslocal({ ## Print result # parameters: size <- 12; prob <- 0.28; # mean and variances of the distribution of sample averages: avg.exp <- size*(1-prob)/prob; avg.var <- (size*(1-prob)/prob^2)/10; # generate the entire data: data <- matrix(rnbinom(n=10000, size=size, prob=prob), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Negative Binomial") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_geometric_distribution.rkout0000644000175000017500000000043312124345417025330 0ustar thomasthomas

Geometric density function

Parameters

  • Lower quantile: 0
  • Upper quantile: 12
  • Probability of success on each trial: 0.50
  • Scale: normal
  • Function: dgeom
DATE

rkward-0.6.1/tests/distributions/weibull_quantiles.rkcommands.R0000644000175000017500000000056112124345417024441 0ustar thomasthomaslocal({ ## Compute result <- (qweibull (p = c (0.95), shape = 1.00, scale = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Weibull quantile", list ("Vector of probabilities", "c (0.95)", "Shape", "1.00", "Scale", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Weibull quantiles") }) rkward-0.6.1/tests/distributions/log_normal_clt.rkcommands.R0000644000175000017500000000152312124345417023703 0ustar thomasthomaslocal({ ## Print result # parameters: mean <- 0.0; sd <- 1.00; # mean and variances of the distribution of sample averages: avg.exp <- exp(mean+sd^2/2); avg.var <- (exp(2*mean+sd^2)*(exp(sd^2)-1))/10; # generate the entire data: data <- matrix(rlnorm(n=10000, meanlog=mean, sdlog=sd), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Scott"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=7, angle=45, border=FALSE, xlab="Sample Averages", main="Lognormal") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/wilcoxon_quantiles.rkout0000644000175000017500000000055412124345417023450 0ustar thomasthomas

Wilcoxon Rank Sum quantile

Parameters

  • Vector of probabilities: c (0.95)
  • m (Numbers of observations in the first sample): 1
  • n (Numbers of observations in the second sample): 2
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Wilcoxon Rank Sum quantiles: 2

rkward-0.6.1/tests/distributions/plot_binomial_distribution.rkout0000644000175000017500000000047112124345417025146 0ustar thomasthomas

Binomial density function

Parameters

  • Lower quantile: 0
  • Upper quantile: 12
  • Number of trials: 12
  • Probability of success on each trial: 0.50
  • Scale: normal
  • Function: dbinom
DATE

rkward-0.6.1/tests/distributions/log_normal_quantiles.rkout0000644000175000017500000000043012124345417023730 0ustar thomasthomas

Log Normal quantile

Parameters

  • Vector of probabilities: c (0.95)
  • meanlog: 0.00
  • sdlog: 1.00
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = FALSE
DATE

Log Normal quantiles: 0.19304

rkward-0.6.1/tests/distributions/binomial_probabilities.rkcommands.R0000644000175000017500000000063012124345417025410 0ustar thomasthomaslocal({ ## Compute result <- (pbinom (q = c (0.95, 2), size = 3, prob = 0.50, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Binomial tail probability", list ("Vector of quantiles", "c (0.95, 2)", "Binomial trials", "3", "Probability of success", "0.50", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Binomial tail probabilities") }) rkward-0.6.1/tests/distributions/normal_clt.rkout0000644000175000017500000000006312124345417021646 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_normal_distribution.rkcommands.R0000644000175000017500000000054112124345417026034 0ustar thomasthomaslocal({ ## Print result rk.header ("Normal density function", list ("Number of Observations", "100", "Lower quantile", "-3.29", "Upper quantile", "3.29", "Mean", "0.00", "Standard Deviation", "1.00", "Scale", "normal", "Function", "dnorm")); rk.graph.on () try ({ curve (dnorm(x, mean=0.00, sd=1.00), from=-3.29, to=3.29, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/binomial_clt.rkout0000644000175000017500000000006312124345417022150 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_uniform_distribution.rkcommands.R0000644000175000017500000000053212124345417026223 0ustar thomasthomaslocal({ ## Print result rk.header ("Uniform density function", list ("Number of Observations", "100", "Lower quantile", "-1.00", "Upper quantile", "2.00", "Minimum", "0.00", "Maximum", "1.00", "Scale", "normal", "Function", "dunif")); rk.graph.on () try ({ curve (dunif(x, min=0.00, max=1.00), from=-1.00, to=2.00, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/lillie_test.rkout0000644000175000017500000000056512124345417022034 0ustar thomasthomas

Lilliefors (Kolmogorov-Smirnov) Normality test

DATE
Variable NameLengthNAsStatisticp-value
shape480D = 0.169786656172250.0013779
perm480D = 0.3172080784883192.5296e-13
rkward-0.6.1/tests/distributions/logistic_probabilities.rkcommands.R0000644000175000017500000000057012124345417025436 0ustar thomasthomaslocal({ ## Compute result <- (plogis (q = c (0.95), location = 1.04, scale = 1.00, lower.tail=TRUE, log.p = TRUE)) ## Print result rk.header ("Logistic probability", list ("Vector of quantiles", "c (0.95)", "Location", "1.04", "Scale", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = TRUE")) rk.results (result, titles="Logistic probabilities") }) rkward-0.6.1/tests/distributions/geometric_clt.rkcommands.R0000644000175000017500000000142512124345417023531 0ustar thomasthomaslocal({ ## Print result # parameters: prob <- 0.50; # mean and variances of the distribution of sample averages: avg.exp <- (1-prob)/prob; avg.var <- ((1-prob)/(prob^2))/10; # generate the entire data: data <- matrix(rgeom(n=10000, prob=prob), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Geometric") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/weibull_clt.rkcommands.R0000644000175000017500000000151712124345417023220 0ustar thomasthomaslocal({ ## Print result # parameters: scale <- 1.0; shape <- 2.0; # mean and variances of the distribution of sample averages: avg.exp <- scale*gamma(1+1/shape); avg.var <- (scale^2*gamma(1+2/shape) - avg.exp^2)/10; # generate the entire data: data <- matrix(rweibull(n=10000, shape=shape, scale=scale), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Weibull") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/poisson_clt.rkcommands.R0000644000175000017500000000137612124345417023252 0ustar thomasthomaslocal({ ## Print result # parameters: mean <- 5.0; # mean and variances of the distribution of sample averages: avg.exp <- mean; avg.var <- (mean)/10; # generate the entire data: data <- matrix(rpois(n=10000, lambda=mean), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Poisson") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/uniform_quantiles.rkout0000644000175000017500000000050212124345417023256 0ustar thomasthomas

Uniform quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Lower limits of the distribution: 0.00
  • Upper limits of the distribution: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Uniform quantiles: 0.95

rkward-0.6.1/tests/distributions/plot_weibull_distribution.rkout0000644000175000017500000000047412124345417025022 0ustar thomasthomas

Weibull density function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.00
  • Upper quantile: 5.00
  • Shape: 2.00
  • Scale: 1.00
  • Scale: normal
  • Function: dweibull
DATE

rkward-0.6.1/tests/distributions/t_probabilities.rkcommands.R0000644000175000017500000000057612124345417024072 0ustar thomasthomaslocal({ ## Compute result <- (pt (q = c (0.95), df = 1.00, ncp = 0.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("t probability", list ("Vector of quantiles", "c (0.95)", "Degrees of Freedom", "1.00", "non-centrality parameter", "0.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="t probabilities") }) rkward-0.6.1/tests/distributions/plot_t_distribution.rkcommands.R0000644000175000017500000000061112124345417025005 0ustar thomasthomaslocal({ ## Print result rk.header ("Student t distribution function", list ("Number of Observations", "100", "Minimum", "-12.924", "Maximum", "12.924", "Degrees of freedom", "1.00", "Non-centrality", "0.00", "Scale", "normal", "Tail","Lower", "Function", "pt")); rk.graph.on () try ({ curve (pt(x, df=1.00, ncp=0.00, lower.tail = TRUE), from=-12.924, to=12.924, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/negative_binomial_probabilities.rkcommands.R0000644000175000017500000000063312124345417027275 0ustar thomasthomaslocal({ ## Compute result <- (pnbinom (q = c (0.95), size = 3, prob = 0.50, lower.tail=TRUE, log.p = TRUE)) ## Print result rk.header ("Negative Binomial probability", list ("Vector of quantiles", "c (0.95)", "Size", "3", "Probability of success in each trial", "0.50", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = TRUE")) rk.results (result, titles="Negative Binomial probabilities") }) rkward-0.6.1/tests/distributions/poisson_quantiles.rkcommands.R0000644000175000017500000000052112124345417024464 0ustar thomasthomaslocal({ ## Compute result <- (qpois (p = c (0.95), lambda = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Poisson quantile", list ("Vector of probabilities", "c (0.95)", "Lambda", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Poisson quantiles") }) rkward-0.6.1/tests/distributions/plot_f_distribution.rkcommands.R0000644000175000017500000000065112124345417024773 0ustar thomasthomaslocal({ ## Print result rk.header ("F density function", list ("Number of Observations", "100", "Lower quantile", "0.001", "Upper quantile", "25.00", "Numerator degrees of freedom", "5.00", "Denominator degrees of freedom", "5.00", "Non-centrality", "0", "Scale", "logarithmic", "Function", "df")); rk.graph.on () try ({ curve (df(x, df1=5.00, df2=5.00, ncp=0, log=TRUE), from=0.001, to=25.00, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/cauchy_probabilities.rkcommands.R0000644000175000017500000000136412124345417025077 0ustar thomasthomaslocal({ ## Compute result <- (pcauchy (q = c (0.95), location = 0.03, scale = 1.02, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Cauchy probabilities", list ("Vector of quantiles", "c (0.95)", "Location", "0.03", "Scale", "1.02", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Cauchy probabilities") }) local({ ## Compute result <- (pcauchy (q = c (0.95), location = -0.02, scale = 1.03, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Cauchy probabilities", list ("Vector of quantiles", "c (0.95)", "Location", "-0.02", "Scale", "1.03", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")) rk.results (result, titles="Cauchy probabilities") }) rkward-0.6.1/tests/distributions/hypergeometric_probabilities.rkcommands.R0000644000175000017500000000075612124345417026655 0ustar thomasthomaslocal({ ## Compute result <- (phyper (q = c (0, 1, 2, 3, 4, 5), m = 5, n = 4, k = 4, lower.tail=FALSE, log.p = FALSE)) ## Print result rk.header ("Hypergeometric probability", list ("Vector of quantiles", "c (0, 1, 2, 3, 4, 5)", "Number of white balls in the urn", "5", "Number of black balls in the urn", "4", "Number of balls drawn from the urn", "4", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Hypergeometric probabilities") }) rkward-0.6.1/tests/distributions/negative_binomial_quantiles.rkout0000644000175000017500000000047012124345417025257 0ustar thomasthomas

Negative Binomial quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Size: 4
  • Probability of success in each trial: 0.50
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Negative Binomial quantiles: 9

rkward-0.6.1/tests/distributions/lillie_test.rkcommands.R0000644000175000017500000000106712124345417023224 0ustar thomasthomaslocal({ ## Prepare require (nortest) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- lillie.test (var) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Lilliefors (Kolmogorov-Smirnov) Normality test") rk.results (results) }) rkward-0.6.1/tests/distributions/geom_quantiles.rkcommands.R0000644000175000017500000000056112124345417023725 0ustar thomasthomaslocal({ ## Compute result <- (qgeom (p = c (0.95), prob = 0.50, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Geometric quantile", list ("Vector of probabilities", "c (0.95)", "Probability of success in each trial", "0.50", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Geometric quantiles") }) rkward-0.6.1/tests/distributions/chi_squared_clt.rkout0000644000175000017500000000006312124345417022645 0ustar thomasthomas
rkward-0.6.1/tests/distributions/beta_clt.rkout0000644000175000017500000000006312124345417021271 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_t_distribution.rkout0000644000175000017500000000053712124345417023622 0ustar thomasthomas

Student t distribution function

Parameters

  • Number of Observations: 100
  • Minimum: -12.924
  • Maximum: 12.924
  • Degrees of freedom: 1.00
  • Non-centrality: 0.00
  • Scale: normal
  • Tail: Lower
  • Function: pt
DATE

rkward-0.6.1/tests/distributions/uniform_probabilities.rkout0000644000175000017500000000050512124345417024104 0ustar thomasthomas

Uniform probability

Parameters

  • Vector of quantiles: c (0.95)
  • Lower limits of the distribution: 0.00
  • Upper limits of the distribution: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Uniform probabilities: 0.95

rkward-0.6.1/tests/distributions/pearson_test.rkcommands.R0000644000175000017500000000313212124345417023414 0ustar thomasthomaslocal({ ## Prepare require(nortest) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- pearson.test (var, adjust = TRUE) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value results[i, 'number of classes'] <- test$n.classes results[i, 'degrees of freedom'] <- test$df }) } ## Print result rk.header ("Pearson chi-square Normality Test", parameters=list ("chi-square distribution with n.classes-3 df (TRUE) or chi-square distribution with n.classes-1 df (FALSE)", "adjust = TRUE")) rk.results (results) }) local({ ## Prepare require(nortest) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- pearson.test (var, adjust = FALSE) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value results[i, 'number of classes'] <- test$n.classes results[i, 'degrees of freedom'] <- test$df }) } ## Print result rk.header ("Pearson chi-square Normality Test", parameters=list ("chi-square distribution with n.classes-3 df (TRUE) or chi-square distribution with n.classes-1 df (FALSE)", "adjust = FALSE")) rk.results (results) }) rkward-0.6.1/tests/distributions/logistic_quantiles.rkout0000644000175000017500000000042312124345417023416 0ustar thomasthomas

Logistic quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Location: 1.00
  • Scale: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Logistic quantiles: 3.9444

rkward-0.6.1/tests/distributions/shapiro_wilk_test.rkout0000644000175000017500000000054412124345417023252 0ustar thomasthomas

Shapiro-Wilk Normality Test

DATE
Variable NameLengthNAsStatisticp-value
shape480W = 0.9040691813191540.00085307
perm480W = 0.8032627534951751.5417e-06
rkward-0.6.1/tests/distributions/beta_probabilities.rkcommands.R0000644000175000017500000000151412124345417024533 0ustar thomasthomaslocal({ ## Compute result <- (pbeta (q = c (0.95), shape1 = 1.00, shape2 = 1.00, ncp = 0.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Beta probability", list ("Vector of quantiles", "c (0.95)", "Shape 1", "1.00", "Shape 2", "1.00", "non-centrality parameter (ncp)", "0.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Beta probability") }) local({ ## Compute result <- (pbeta (q = c (0.96), shape1 = 1.01, shape2 = 1.01, ncp = 0.02, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Beta probability", list ("Vector of quantiles", "c (0.96)", "Shape 1", "1.01", "Shape 2", "1.01", "non-centrality parameter (ncp)", "0.02", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")); rk.results (result, titles="Beta probability") }) rkward-0.6.1/tests/distributions/ad_test.rkout0000644000175000017500000000054512124345417021144 0ustar thomasthomas

Anderson-Darling Normality Test

DATE
Variable NameLengthNAsStatisticp-value
shape480A = 1.413725131811450.0010355
perm480A = 3.991843715557894.2977e-10
rkward-0.6.1/tests/distributions/uniform_probabilities.rkcommands.R0000644000175000017500000000064312124345417025301 0ustar thomasthomaslocal({ ## Compute result <- (punif (q = c (0.95), min = 0.00, max = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Uniform probability", list ("Vector of quantiles", "c (0.95)", "Lower limits of the distribution", "0.00", "Upper limits of the distribution", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Uniform probabilities") }) rkward-0.6.1/tests/distributions/weibull_probabilities.rkcommands.R0000644000175000017500000000056412124345417025267 0ustar thomasthomaslocal({ ## Compute result <- (pweibull (q = c (0.95), shape = 1.00, scale = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Weibull probability", list ("Vector of quantiles", "c (0.95)", "Shape", "1.00", "Scale", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Weibull probabilities") }) rkward-0.6.1/tests/distributions/exponential_probabilities.rkcommands.R0000644000175000017500000000053112124345417026144 0ustar thomasthomaslocal({ ## Compute result <- (pexp (q = c (0.96), rate = 1.07, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Exponential probabilities", list ("Vector of quantiles", "c (0.96)", "Rate", "1.07", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Exponential probabilities") }) rkward-0.6.1/tests/distributions/gamma_quantiles.rkout0000644000175000017500000000041112124345417022660 0ustar thomasthomas

Gamma quantile

Parameters

  • Vector of probabilities: c (-5)
  • Shape: 1.00
  • Rate: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = TRUE
DATE

Gamma quantiles: 0.0067607

rkward-0.6.1/tests/distributions/beta_quantiles.rkcommands.R0000644000175000017500000000151012124345417023704 0ustar thomasthomaslocal({ ## Compute result <- (qbeta (p = c (0.95), shape1 = 1.00, shape2 = 1.00, ncp = 0.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Beta quantiles", list ("Vector of probabilities", "c (0.95)", "Shape 1", "1.00", "Shape 2", "1.00", "non-centrality parameter (ncp)", "0.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Beta quantiles") }) local({ ## Compute result <- (qbeta (p = c (-1), shape1 = 1.04, shape2 = 1.03, ncp = 0.08, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Beta quantiles", list ("Vector of probabilities", "c (-1)", "Shape 1", "1.04", "Shape 2", "1.03", "non-centrality parameter (ncp)", "0.08", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")); rk.results (result, titles="Beta quantiles") }) rkward-0.6.1/tests/distributions/plot_log_normal_distribution.rkout0000644000175000017500000000054212124345417025504 0ustar thomasthomas

Lognormal distribution function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.01
  • Upper quantile: 3.29
  • Mean: 4.00
  • Standard deviation: 1.00
  • Scale: normal
  • Tail: Lower
  • Function: plnorm
DATE

rkward-0.6.1/tests/distributions/uniform_quantiles.rkcommands.R0000644000175000017500000000064012124345417024453 0ustar thomasthomaslocal({ ## Compute result <- (qunif (p = c (0.95), min = 0.00, max = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Uniform quantile", list ("Vector of probabilities", "c (0.95)", "Lower limits of the distribution", "0.00", "Upper limits of the distribution", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Uniform quantiles") }) rkward-0.6.1/tests/distributions/plot_beta_distribution.rkcommands.R0000644000175000017500000000070012124345417025454 0ustar thomasthomaslocal({ ## Print result rk.header ("Beta distribution function", list ("Number of Observations", "100", "Lower quantile", "0.00", "Upper quantile", "1.00", "Shape1", "2.00", "Shape2", "2.00", "Non-centrality parameter", "0.00", "Scale", "logarithmic", "Tail","Lower", "Function", "pbeta")); rk.graph.on () try ({ curve (pbeta(x, shape1=2.00, shape2=2.00, ncp=0.00, log.p=TRUE, lower.tail = TRUE), from=0.00, to=1.00, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/logistic_probabilities.rkout0000644000175000017500000000042712124345417024245 0ustar thomasthomas

Logistic probability

Parameters

  • Vector of quantiles: c (0.95)
  • Location: 1.04
  • Scale: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = TRUE
DATE

Logistic probabilities: -0.73916

rkward-0.6.1/tests/distributions/normal_probabilities.rkout0000644000175000017500000000041512124345417023715 0ustar thomasthomas

Normal probability

Parameters

  • Vector of quantiles: c (0.95)
  • mu: 0.00
  • sigma: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Normal probabilities: 0.82894

rkward-0.6.1/tests/distributions/log_normal_quantiles.rkcommands.R0000644000175000017500000000057312124345417025132 0ustar thomasthomaslocal({ ## Compute result <- (qlnorm (p = c (0.95), meanlog = 0.00, sdlog = 1.00, lower.tail=FALSE, log.p = FALSE)) ## Print result rk.header ("Log Normal quantile", list ("Vector of probabilities", "c (0.95)", "meanlog", "0.00", "sdlog", "1.00", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Log Normal quantiles") }) rkward-0.6.1/tests/distributions/exponential_quantiles.rkcommands.R0000644000175000017500000000052512124345417025324 0ustar thomasthomaslocal({ ## Compute result <- (qexp (p = c (-1.1), rate = 1.05, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Exponential quantiles", list ("Vector of probabilities", "c (-1.1)", "Rate", "1.05", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")) rk.results (result, titles="Exponential quantiles") }) rkward-0.6.1/tests/distributions/hypergeometric_probabilities.rkout0000644000175000017500000000065112124345417025455 0ustar thomasthomas

Hypergeometric probability

Parameters

  • Vector of quantiles: c (0, 1, 2, 3, 4, 5)
  • Number of white balls in the urn: 5
  • Number of black balls in the urn: 4
  • Number of balls drawn from the urn: 4
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = FALSE
DATE

Hypergeometric probabilities: 0.99206 0.83333 0.35714 0.039683 0 0

rkward-0.6.1/tests/distributions/plot_normal_distribution.rkout0000644000175000017500000000050512124345417024642 0ustar thomasthomas

Normal density function

Parameters

  • Number of Observations: 100
  • Lower quantile: -3.29
  • Upper quantile: 3.29
  • Mean: 0.00
  • Standard Deviation: 1.00
  • Scale: normal
  • Function: dnorm
DATE

rkward-0.6.1/tests/distributions/gamma_probabilities.rkout0000644000175000017500000000041512124345417023507 0ustar thomasthomas

Gamma probability

Parameters

  • Vector of quantiles: c (0.95)
  • Shape: 1.00
  • Rate: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Gamma probabilities: 0.61326

rkward-0.6.1/tests/distributions/logistic_clt.rkout0000644000175000017500000000006312124345417022173 0ustar thomasthomas
rkward-0.6.1/tests/distributions/normal_clt.rkcommands.R0000644000175000017500000000126212124345417023042 0ustar thomasthomaslocal({ ## Print result # parameters: mean <- 0.0; sd <- 1.0; # mean and variances of the distribution of sample averages: avg.exp <- mean; avg.var <- (sd^2)/10; # generate the entire data: data <- matrix(rnorm(n=10000, mean=mean, sd=sd), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- pnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); rk.graph.on () try ({ plot(ecdf(avg), xlab="Sample Averages", main="Normal", verticals=TRUE, col.vert="blue", do.points=FALSE, col.hor="blue", col.01line=c("gold","cyan")) lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/wilcoxon_clt.rkcommands.R0000644000175000017500000000141512124345417023414 0ustar thomasthomaslocal({ ## Print result # parameters: m <- 4; n <- 6; # mean and variances of the distribution of sample averages: avg.exp <- m*n/2; avg.var <- (m*n*(m+n+1)/12)/10; # generate the entire data: data <- matrix(rwilcox(nn=10000, m=m, n=n), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Wilcoxon") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/ad_test.rkcommands.R0000644000175000017500000000104412124345417022331 0ustar thomasthomaslocal({ ## Prepare require(nortest) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- ad.test (var) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Anderson-Darling Normality Test") rk.results (results) }) rkward-0.6.1/tests/distributions/tukey_quantiles.rkcommands.R0000644000175000017500000000075012124345417024137 0ustar thomasthomaslocal({ ## Compute result <- (qtukey (p = c (0.95), nmeans = 2, df = 2:11, nranges = 1, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Studentized Range quantiles", list ("Vector of probabilities", "c (0.95)", "Sample size for range", "2", "Degrees of freedom for s", "2:11", "Number of groups whose maximum range is considered", "1", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Studentized Range quantiles") }) rkward-0.6.1/tests/distributions/normal_quantiles.rkout0000644000175000017500000000041112124345417023066 0ustar thomasthomas

Normal quantile

Parameters

  • Vector of probabilities: c (0.95)
  • mu: 0.00
  • sigma: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Normal quantiles: 1.6449

rkward-0.6.1/tests/distributions/gumbel_quantiles.rkcommands.R0000644000175000017500000000056412124345417024254 0ustar thomasthomaslocal({ ## Compute result <- log(qweibull (p = c (0.95), shape = 1.00, scale = 1.00, lower.tail=FALSE, log.p = FALSE)) ## Print result rk.header ("Gumbel quantile", list ("Vector of probabilities", "c (0.95)", "Shape", "1.00", "Scale", "1.00", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Gumbel quantiles") }) rkward-0.6.1/tests/distributions/t_clt.rkout0000644000175000017500000000006312124345417020621 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_tukey_distribution.rkout0000644000175000017500000000062012124345417024511 0ustar thomasthomas

Tukey distribution function

Parameters

  • Number of Observations: 101
  • Lower quantile: -1.00
  • Upper quantile: 8.00
  • Sample size for range: 6
  • Degreed of freedom for s: 5.00
  • Number of groups: 1
  • Scale: normal
  • Tail: Lower
  • Function: ptukey
DATE

rkward-0.6.1/tests/distributions/plot_logistic_distribution.rkcommands.R0000644000175000017500000000054312124345417026363 0ustar thomasthomaslocal({ ## Print result rk.header ("Logistic density function", list ("Number of Observations", "100", "Lower quantile", "-3.29", "Upper quantile", "3.29", "Location", "0.00", "Scale", "1.00", "Scale", "normal", "Function", "dlogis")); rk.graph.on () try ({ curve (dlogis(x, location=0.00, scale=1.00), from=-3.29, to=3.29, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/geom_probabilities.rkout0000644000175000017500000000043412124345417023355 0ustar thomasthomas

Geometric probability

Parameters

  • Vector of quantiles: c (0.95)
  • Probability of success in each trial: 0.50
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Geometric probabilities: 0.5

rkward-0.6.1/tests/distributions/plot_gamma_distribution.rkout0000644000175000017500000000046712124345417024443 0ustar thomasthomas

Gamma density function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.01
  • Upper quantile: 4.60
  • Shape: 1.61
  • Rate: 0.87
  • Scale: normal
  • Function: dgamma
DATE

rkward-0.6.1/tests/distributions/plot_f_distribution.rkout0000644000175000017500000000060212124345417023575 0ustar thomasthomas

F density function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.001
  • Upper quantile: 25.00
  • Numerator degrees of freedom: 5.00
  • Denominator degrees of freedom: 5.00
  • Non-centrality: 0
  • Scale: logarithmic
  • Function: df
DATE

rkward-0.6.1/tests/distributions/plot_beta_distribution.rkout0000644000175000017500000000057712124345417024276 0ustar thomasthomas

Beta distribution function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.00
  • Upper quantile: 1.00
  • Shape1: 2.00
  • Shape2: 2.00
  • Non-centrality parameter: 0.00
  • Scale: logarithmic
  • Tail: Lower
  • Function: pbeta
DATE

rkward-0.6.1/tests/distributions/hypergeometric_clt.rkout0000644000175000017500000000006312124345417023404 0ustar thomasthomas
rkward-0.6.1/tests/distributions/exponential_clt.rkcommands.R0000644000175000017500000000144612124345417024104 0ustar thomasthomaslocal({ ## Print result # parameters: rate <- 1.0; # mean and variances of the distribution of sample averages: avg.exp <- 1/rate; avg.var <- (1/(rate^2))/10; # generate the entire data: data <- matrix(rexp(n=10000, rate=rate), nrow=10); # get the sample averages: avg <- colMeans(data); # normalise the variables: avg <- (avg - avg.exp)/sqrt(avg.var); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Exponential") lines (x=normX, y=normY, type="h", col="grey4") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/poisson_probabilities.rkcommands.R0000644000175000017500000000052212124345417025310 0ustar thomasthomaslocal({ ## Compute result <- (ppois (q = c (0.95), lambda = 1.07, lower.tail=TRUE, log.p = TRUE)) ## Print result rk.header ("Poisson probability", list ("Vector of quantiles", "c (0.95)", "Lambda", "1.07", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = TRUE")) rk.results (result, titles="Poisson probabilities") }) rkward-0.6.1/tests/distributions/exponential_clt.rkout0000644000175000017500000000006312124345417022704 0ustar thomasthomas
rkward-0.6.1/tests/distributions/cauchy_quantiles.rkcommands.R0000644000175000017500000000136212124345417024252 0ustar thomasthomaslocal({ ## Compute result <- (qcauchy (p = c (0.95), location = -0.03, scale = 1.03, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Cauchy quantiles", list ("Vector of probabilities", "c (0.95)", "Location", "-0.03", "Scale", "1.03", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Cauchy quantiles") }) local({ ## Compute result <- (qcauchy (p = c (-1, -2), location = 0.02, scale = 0.98, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Cauchy quantiles", list ("Vector of probabilities", "c (-1, -2)", "Location", "0.02", "Scale", "0.98", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")); rk.results (result, titles="Cauchy quantiles") }) rkward-0.6.1/tests/distributions/weibull_probabilities.rkout0000644000175000017500000000042212124345417024066 0ustar thomasthomas

Weibull probability

Parameters

  • Vector of quantiles: c (0.95)
  • Shape: 1.00
  • Scale: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Weibull probabilities: 0.61326

rkward-0.6.1/tests/distributions/logistic_clt.rkcommands.R0000644000175000017500000000160312124345417023366 0ustar thomasthomaslocal({ ## Print result # parameters: loc <- 0.0; scale <- 3.0; # mean and variances of the distribution of sample averages: avg.exp <- loc; avg.var <- ((pi^2/3)*scale^2)/10; # generate the entire data: data <- matrix(rlogis(n=10000, location=loc, scale=scale), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks=seq (floor (min (avg, na.rm=TRUE))-0.5, ceiling (max (avg, na.rm=TRUE))+0.5), right=FALSE); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, labels=TRUE, lty="solid", density=-1, xlab="Sample Averages", main="Logistic") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/hypergeometric_quantiles.rkcommands.R0000644000175000017500000000072112124345417026022 0ustar thomasthomaslocal({ ## Compute result <- (qhyper (p = c (0.95), m = 1, n = 1, k = 1, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Hypergeometric quantile", list ("Vector of probabilities", "c (0.95)", "Number of white balls in the urn", "1", "Number of black balls in the urn", "1", "Number of balls drawn from the urn", "1", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Hypergeometric quantiles") }) rkward-0.6.1/tests/distributions/gumbel_probabilities.rkout0000644000175000017500000000042012124345417023674 0ustar thomasthomas

Gumbel probability

Parameters

  • Vector of quantiles: c (0.95)
  • Shape: 1.03
  • Scale: 1.04
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Gumbel probabilities: 0.92232

rkward-0.6.1/tests/distributions/plot_cauchy_distribution.rkcommands.R0000644000175000017500000000054312124345417026022 0ustar thomasthomaslocal({ ## Print result rk.header ("Cauchy density function", list ("Number of Observations", "100", "Lower quantile", "-3.29", "Upper quantile", "3.29", "Location", "0.00", "Scale", "1.00", "Scale", "normal", "Function", "dcauchy")); rk.graph.on () try ({ curve (dcauchy(x, location=0.00, scale=1.00), from=-3.29, to=3.29, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_uniform_distribution.rkout0000644000175000017500000000047612124345417025040 0ustar thomasthomas

Uniform density function

Parameters

  • Number of Observations: 100
  • Lower quantile: -1.00
  • Upper quantile: 2.00
  • Minimum: 0.00
  • Maximum: 1.00
  • Scale: normal
  • Function: dunif
DATE

rkward-0.6.1/tests/distributions/plot_binomial_distribution.rkcommands.R0000644000175000017500000000053512124345417026341 0ustar thomasthomaslocal({ ## Print result rk.header ("Binomial density function", list ("Lower quantile", "0", "Upper quantile", "12", "Number of trials", "12", "Probability of success on each trial", "0.50", "Scale", "normal", "Function", "dbinom")); rk.graph.on () try ({ curve (dbinom(x, size=12, prob=0.50), from=0, to=12, n=13, type="p") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/f_clt.rkcommands.R0000644000175000017500000000062312124345417021777 0ustar thomasthomaslocal({ ## Print result # parameters: df1 <- 5.0; df2 <- 5.0; ncp <- 0.0; # generate the entire data: data <- matrix(rf(n=10000, df1=df1, df2=df2, ncp=ncp), nrow=10); # get the sample averages: avg <- colMeans(data); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); rk.graph.on () try ({ plot(dist.hist, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="F") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/jb_test.rkcommands.R0000644000175000017500000000121212124345417022335 0ustar thomasthomaslocal({ ## Prepare require(tseries) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) var <- na.omit (var) try ({ test <- jarque.bera.test (var) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'df'] <- test$parameter results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Jarque-Bera Normality Test", parameters=list ("Exclude NAs", "YES")) rk.results (results) }) rkward-0.6.1/tests/distributions/plot_geometric_distribution.rkcommands.R0000644000175000017500000000047112124345417026524 0ustar thomasthomaslocal({ ## Print result rk.header ("Geometric density function", list ("Lower quantile", "0", "Upper quantile", "12", "Probability of success on each trial", "0.50", "Scale", "normal", "Function", "dgeom")); rk.graph.on () try ({ curve (dgeom(x, prob=0.50), from=0, to=12, n=13, type="p") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/beta_clt.rkcommands.R0000644000175000017500000000157212124345417022471 0ustar thomasthomaslocal({ ## Print result # parameters: shape1 <- 2.0; shape2 <- 2.0; # mean and variances of the distribution of sample averages: avg.exp <- shape1/(shape1 + shape2); avg.var <- (shape1*shape2/((shape1+shape2)^2*(shape1+shape2+1)))/10; # generate the entire data: data <- matrix(rbeta(n=10000, shape1=shape1, shape2=shape2), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, labels=TRUE, lty="solid", density=-1, col="azure", xlab="Sample Averages", main="Beta") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_wilcoxon_distribution.rkcommands.R0000644000175000017500000000050012124345417026401 0ustar thomasthomaslocal({ ## Print result rk.header ("Binomial density function", list ("Lower quantile", "0", "Upper quantile", "24", "First sample size", "4", "Second sample size", "6", "Scale", "normal", "Function", "dwilcox")); rk.graph.on () try ({ curve (dwilcox(x, m=4, n=6), from=0, to=24, n=25, type="p") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/gamma_quantiles.rkcommands.R0000644000175000017500000000054412124345417024061 0ustar thomasthomaslocal({ ## Compute result <- (qgamma (p = c (-5), shape = 1.00, rate = 1.00, lower.tail=TRUE, log.p = TRUE)) ## Print result rk.header ("Gamma quantile", list ("Vector of probabilities", "c (-5)", "Shape", "1.00", "Rate", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = TRUE")) rk.results (result, titles="Gamma quantiles") }) rkward-0.6.1/tests/distributions/uniform_clt.rkout0000644000175000017500000000006312124345417022035 0ustar thomasthomas
rkward-0.6.1/tests/distributions/tukey_probabilities.rkcommands.R0000644000175000017500000000074412124345417024765 0ustar thomasthomaslocal({ ## Compute result <- (ptukey (q = c (0.95), nmeans = 2, df = 5, nranges = 1, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Studentized Range probability", list ("Vector of quantiles", "c (0.95)", "Sample size for range", "2", "Degrees of freedom for s", "5", "Number of groups whose maximum range is considered", "1", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Studentized Range probabilities") }) rkward-0.6.1/tests/distributions/logistic_quantiles.rkcommands.R0000644000175000017500000000056712124345417024621 0ustar thomasthomaslocal({ ## Compute result <- (qlogis (p = c (0.95), location = 1.00, scale = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Logistic quantile", list ("Vector of probabilities", "c (0.95)", "Location", "1.00", "Scale", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Logistic quantiles") }) rkward-0.6.1/tests/distributions/gamma_clt.rkcommands.R0000644000175000017500000000144612124345417022640 0ustar thomasthomaslocal({ ## Print result # parameters: shape <- 5.9; rate <- 0.3; # mean and variances of the distribution of sample averages: avg.exp <- shape/rate; avg.var <- (shape/(rate^2))/10; # generate the entire data: data <- matrix(rgamma(n=10000, shape=shape, rate=rate), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Gamma") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/f_clt.rkout0000644000175000017500000000006312124345417020603 0ustar thomasthomas
rkward-0.6.1/tests/distributions/poisson_clt.rkout0000644000175000017500000000006312124345417022050 0ustar thomasthomas
rkward-0.6.1/tests/distributions/f_quantiles.rkout0000644000175000017500000000053512124345417022032 0ustar thomasthomas

F quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Numerator degrees of freedom: 1.00
  • Denominator degrees of freedom: 1.00
  • non-centrality parameter: 0.00
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = FALSE
DATE

F quantiles: 0.006194

rkward-0.6.1/tests/distributions/f_quantiles.rkcommands.R0000644000175000017500000000067612124345417023232 0ustar thomasthomaslocal({ ## Compute result <- (qf (p = c (0.95), df1 = 1.00, df2 = 1.00, ncp = 0.00, lower.tail=FALSE, log.p = FALSE)) ## Print result rk.header ("F quantile", list ("Vector of probabilities", "c (0.95)", "Numerator degrees of freedom", "1.00", "Denominator degrees of freedom", "1.00", "non-centrality parameter", "0.00", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="F quantiles") }) rkward-0.6.1/tests/distributions/geom_quantiles.rkout0000644000175000017500000000042712124345417022534 0ustar thomasthomas

Geometric quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Probability of success in each trial: 0.50
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Geometric quantiles: 4

rkward-0.6.1/tests/distributions/chi_squared_clt.rkcommands.R0000644000175000017500000000124012124345417024035 0ustar thomasthomaslocal({ ## Print result # parameters: df <- 4.0; ncp <- 0.6; # mean and variances of the distribution of sample averages: avg.exp <- df + ncp; avg.var <- (2*df + 4*ncp)/12; # generate the entire data: data <- matrix(rchisq(n=12000, df=df, ncp=ncp), nrow=12); # get the sample averages: avg <- colMeans(data); # normalise the variables: avg <- (avg - avg.exp)/sqrt(avg.var); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- pnorm (normX); rk.graph.on () try ({ plot(ecdf(avg), xlab="Sample Averages", main="Chi-Squared", verticals=TRUE, do.points=FALSE) lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/chi_squared_quantiles.rkout0000644000175000017500000000116512124345417024074 0ustar thomasthomas

Chi-squared quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Degrees of freedom: 1.00
  • non-centrality parameter: 0.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Chi-squared quantiles: 3.8415

Chi-squared quantile

Parameters

  • Vector of probabilities: c (-1, -2)
  • Degrees of freedom: 1.02
  • non-centrality parameter: 3.00
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Chi-squared quantiles: 4.3068 8.0555

rkward-0.6.1/tests/distributions/normal_quantiles.rkcommands.R0000644000175000017500000000054612124345417024271 0ustar thomasthomaslocal({ ## Compute result <- (qnorm (p = c (0.95), mean = 0.00, sd = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Normal quantile", list ("Vector of probabilities", "c (0.95)", "mu", "0.00", "sigma", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Normal quantiles") }) rkward-0.6.1/tests/distributions/negbinomial_clt.rkout0000644000175000017500000000006312124345417022642 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_chi_squared_distribution.rkcommands.R0000644000175000017500000000057112124345417027036 0ustar thomasthomaslocal({ ## Print result rk.header ("Chisquare density function", list ("Number of Observations", "100", "Lower quantile", "0.30", "Upper quantile", "24.10", "Degrees of freedom", "4.00", "Non-centrality parameter", "0.00", "Scale", "normal", "Function", "dchisq")); rk.graph.on () try ({ curve (dchisq(x, df=4.00, ncp=0.00), from=0.30, to=24.10, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/exponential_quantiles.rkout0000644000175000017500000000040112124345417024123 0ustar thomasthomas

Exponential quantiles

Parameters

  • Vector of probabilities: c (-1.1)
  • Rate: 1.05
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Exponential quantiles: 1.0476

rkward-0.6.1/tests/distributions/chi_squared_quantiles.rkcommands.R0000644000175000017500000000145212124345417025265 0ustar thomasthomaslocal({ ## Compute result <- (qchisq (p = c (0.95), df = 1.00, ncp = 0.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Chi-squared quantile", list ("Vector of probabilities", "c (0.95)", "Degrees of freedom", "1.00", "non-centrality parameter", "0.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Chi-squared quantiles") }) local({ ## Compute result <- (qchisq (p = c (-1, -2), df = 1.02, ncp = 3.00, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Chi-squared quantile", list ("Vector of probabilities", "c (-1, -2)", "Degrees of freedom", "1.02", "non-centrality parameter", "3.00", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")); rk.results (result, titles="Chi-squared quantiles") }) rkward-0.6.1/tests/distributions/uniform_clt.rkcommands.R0000644000175000017500000000144712124345417023236 0ustar thomasthomaslocal({ ## Print result # parameters: llim <- 0.0; ulim <- 1.0; # mean and variances of the distribution of sample averages: avg.exp <- (llim+ulim)/2; avg.var <- ((ulim-llim)^2/12)/10; # generate the entire data: data <- matrix(runif(n=10000, min=llim, max=ulim), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Uniform") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_log_normal_distribution.rkcommands.R0000644000175000017500000000062212124345417026675 0ustar thomasthomaslocal({ ## Print result rk.header ("Lognormal distribution function", list ("Number of Observations", "100", "Lower quantile", "0.01", "Upper quantile", "3.29", "Mean", "4.00", "Standard deviation", "1.00", "Scale", "normal", "Tail","Lower", "Function", "plnorm")); rk.graph.on () try ({ curve (plnorm(x, meanlog=4.00, sdlog=1.00, lower.tail = TRUE), from=0.01, to=3.29, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/wilcoxon_clt.rkout0000644000175000017500000000006312124345417022220 0ustar thomasthomas
rkward-0.6.1/tests/distributions/poisson_quantiles.rkout0000644000175000017500000000036512124345417023300 0ustar thomasthomas

Poisson quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Lambda: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Poisson quantiles: 3

rkward-0.6.1/tests/distributions/plot_negbinomial_distribution.rkcommands.R0000644000175000017500000000057612124345417027040 0ustar thomasthomaslocal({ ## Print result rk.header ("Negative Binomial density function", list ("Lower quantile", "0", "Upper quantile", "24", "Target for number of successful trials", "12", "Probability of success in each trial", "0.75", "Scale", "normal", "Function", "dnbinom")); rk.graph.on () try ({ curve (dnbinom(x, size=12, prob=0.75), from=0, to=24, n=25, type="p") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/negative_binomial_quantiles.rkcommands.R0000644000175000017500000000063212124345417026451 0ustar thomasthomaslocal({ ## Compute result <- (qnbinom (p = c (0.95), size = 4, prob = 0.50, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Negative Binomial quantile", list ("Vector of probabilities", "c (0.95)", "Size", "4", "Probability of success in each trial", "0.50", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Negative Binomial quantiles") }) rkward-0.6.1/tests/distributions/plot_hypergeometric_distribution.rkout0000644000175000017500000000056012124345417026401 0ustar thomasthomas

Hypergeometric distribution function

Parameters

  • Lower quantile: 0
  • Upper quantile: 12
  • Number of white balls: 12
  • Number of black balls: 12
  • Number of balls drawn: 15
  • Scale: normal
  • Tail: Lower
  • Function: phyper
DATE

rkward-0.6.1/tests/distributions/cauchy_probabilities.rkout0000644000175000017500000000105312124345417023700 0ustar thomasthomas

Cauchy probabilities

Parameters

  • Vector of quantiles: c (0.95)
  • Location: 0.03
  • Scale: 1.02
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Cauchy probabilities: 0.73361

Cauchy probabilities

Parameters

  • Vector of quantiles: c (0.95)
  • Location: -0.02
  • Scale: 1.03
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Cauchy probabilities: -1.3488

rkward-0.6.1/tests/distributions/negative_binomial_probabilities.rkout0000644000175000017500000000050012124345417026074 0ustar thomasthomas

Negative Binomial probability

Parameters

  • Vector of quantiles: c (0.95)
  • Size: 3
  • Probability of success in each trial: 0.50
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = TRUE
DATE

Negative Binomial probabilities: -2.0794

rkward-0.6.1/tests/distributions/plot_chi_squared_distribution.rkout0000644000175000017500000000053512124345417025644 0ustar thomasthomas

Chisquare density function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.30
  • Upper quantile: 24.10
  • Degrees of freedom: 4.00
  • Non-centrality parameter: 0.00
  • Scale: normal
  • Function: dchisq
DATE

rkward-0.6.1/tests/distributions/geom_probabilities.rkcommands.R0000644000175000017500000000056412124345417024553 0ustar thomasthomaslocal({ ## Compute result <- (pgeom (q = c (0.95), prob = 0.50, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Geometric probability", list ("Vector of quantiles", "c (0.95)", "Probability of success in each trial", "0.50", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Geometric probabilities") }) rkward-0.6.1/tests/distributions/wilcoxon_probabilities.rkcommands.R0000644000175000017500000000071012124345417025457 0ustar thomasthomaslocal({ ## Compute result <- (pwilcox (q = c (0.95), m = 2, n = 1, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Wilcoxon Rank Sum probability", list ("Vector of quantiles", "c (0.95)", "m (Numbers of observations in the first sample)", "2", "n (Numbers of observations in the second sample)", "1", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Wilcoxon Rank Sum probabilities") }) rkward-0.6.1/tests/distributions/cauchy_quantiles.rkout0000644000175000017500000000105312124345417023055 0ustar thomasthomas

Cauchy quantiles

Parameters

  • Vector of probabilities: c (0.95)
  • Location: -0.03
  • Scale: 1.03
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Cauchy quantiles: 6.4732

Cauchy quantiles

Parameters

  • Vector of probabilities: c (-1, -2)
  • Location: 0.02
  • Scale: 0.98
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Cauchy quantiles: 0.45186 2.1844

rkward-0.6.1/tests/distributions/gumbel_quantiles.rkout0000644000175000017500000000041612124345417023056 0ustar thomasthomas

Gumbel quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Shape: 1.00
  • Scale: 1.00
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = FALSE
DATE

Gumbel quantiles: -2.9702

rkward-0.6.1/tests/distributions/sf_test.rkout0000644000175000017500000000054612124345417021171 0ustar thomasthomas

Shapiro-Francia Normality Test

DATE
Variable NameLengthNAsStatisticp-value
shape480W = 0.9037160331358350.0014382
perm480W = 0.8146652598042221.2468e-05
rkward-0.6.1/tests/distributions/weibull_clt.rkout0000644000175000017500000000006312124345417022021 0ustar thomasthomas
rkward-0.6.1/tests/distributions/wilcoxon_quantiles.rkcommands.R0000644000175000017500000000070512124345417024640 0ustar thomasthomaslocal({ ## Compute result <- (qwilcox (p = c (0.95), m = 1, n = 2, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Wilcoxon Rank Sum quantile", list ("Vector of probabilities", "c (0.95)", "m (Numbers of observations in the first sample)", "1", "n (Numbers of observations in the second sample)", "2", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Wilcoxon Rank Sum quantiles") }) rkward-0.6.1/tests/distributions/tukey_probabilities.rkout0000644000175000017500000000060212124345417023564 0ustar thomasthomas

Studentized Range probability

Parameters

  • Vector of quantiles: c (0.95)
  • Sample size for range: 2
  • Degrees of freedom for s: 5
  • Number of groups whose maximum range is considered: 1
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Studentized Range probabilities: 0.46848

rkward-0.6.1/tests/distributions/log_normal_probabilities.rkout0000644000175000017500000000043212124345417024555 0ustar thomasthomas

Log Normal probability

Parameters

  • Vector of quantiles: c (0.95)
  • meanlog: 0.00
  • sdlog: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Log Normal probabilities: 0.47955

rkward-0.6.1/tests/distributions/plot_tukey_distribution.rkcommands.R0000644000175000017500000000070112124345417025703 0ustar thomasthomaslocal({ ## Print result rk.header ("Tukey distribution function", list ("Number of Observations", "101", "Lower quantile", "-1.00", "Upper quantile", "8.00", "Sample size for range", "6", "Degreed of freedom for s", "5.00", "Number of groups", "1", "Scale", "normal", "Tail","Lower", "Function", "ptukey")); rk.graph.on () try ({ curve (ptukey(x, nmeans=6, df=5.00, nranges=1, lower.tail = TRUE), from=-1.00, to=8.00, n=101) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/pearson_test.rkout0000644000175000017500000000225512124345417022227 0ustar thomasthomas

Pearson chi-square Normality Test

Parameters

  • chi-square distribution with n.classes-3 df (TRUE) or chi-square distribution with n.classes-1 df (FALSE): adjust = TRUE
DATE
Variable NameLengthNAsStatisticp-valuenumber of classesdegrees of freedom
shape480P = 15.33333333333330.031956107
perm480P = 725.82e-13107

Pearson chi-square Normality Test

Parameters

  • chi-square distribution with n.classes-3 df (TRUE) or chi-square distribution with n.classes-1 df (FALSE): adjust = FALSE
DATE
Variable NameLengthNAsStatisticp-valuenumber of classesdegrees of freedom
shape480P = 15.33333333333330.082177109
perm480P = 726.1643e-12109
rkward-0.6.1/tests/distributions/t_quantiles.rkcommands.R0000644000175000017500000000057312124345417023244 0ustar thomasthomaslocal({ ## Compute result <- (qt (p = c (0.95), df = 1.00, ncp = 0.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("t quantile", list ("Vector of probabilities", "c (0.95)", "Degrees of freedom", "1.00", "non-centrality parameter", "0.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="t quantiles") }) rkward-0.6.1/tests/distributions/beta_probabilities.rkout0000644000175000017500000000116512124345417023343 0ustar thomasthomas

Beta probability

Parameters

  • Vector of quantiles: c (0.95)
  • Shape 1: 1.00
  • Shape 2: 1.00
  • non-centrality parameter (ncp): 0.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Beta probability: 0.95

Beta probability

Parameters

  • Vector of quantiles: c (0.96)
  • Shape 1: 1.01
  • Shape 2: 1.01
  • non-centrality parameter (ncp): 0.02
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Beta probability: -3.2317

rkward-0.6.1/tests/distributions/plot_cauchy_distribution.rkout0000644000175000017500000000047612124345417024635 0ustar thomasthomas

Cauchy density function

Parameters

  • Number of Observations: 100
  • Lower quantile: -3.29
  • Upper quantile: 3.29
  • Location: 0.00
  • Scale: 1.00
  • Scale: normal
  • Function: dcauchy
DATE

rkward-0.6.1/tests/distributions/gamma_clt.rkout0000644000175000017500000000006312124345417021440 0ustar thomasthomas
rkward-0.6.1/tests/distributions/f_probabilities.rkcommands.R0000644000175000017500000000070412124345417024045 0ustar thomasthomaslocal({ ## Compute result <- (pf (q = c (.1, .2), df1 = 1.02, df2 = 1.11, ncp = 0.02, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("F probability", list ("Vector of quantiles", "c (.1, .2)", "Numerator degrees of freedom", "1.02", "Denominator degrees of freedom", "1.11", "non-centrality parameter", "0.02", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="F probabilities") }) rkward-0.6.1/tests/distributions/binomial_probabilities.rkout0000644000175000017500000000047512124345417024225 0ustar thomasthomas

Binomial tail probability

Parameters

  • Vector of quantiles: c (0.95, 2)
  • Binomial trials: 3
  • Probability of success: 0.50
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Binomial tail probabilities: 0.125 0.875

rkward-0.6.1/tests/distributions/binomial_clt.rkcommands.R0000644000175000017500000000155112124345417023345 0ustar thomasthomaslocal({ ## Print result # parameters: size <- 11; prob <- 0.50; # mean and variances of the distribution of sample averages: avg.exp <- size*prob; avg.var <- (size*prob*(1-prob))/1; # generate the entire data: data <- matrix(rbinom(n=1000, size=size, prob=prob), nrow=1); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks=seq (floor (min (avg, na.rm=TRUE))-0.5, ceiling (max (avg, na.rm=TRUE))+0.5)); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Binomial") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_negbinomial_distribution.rkout0000644000175000017500000000053112124345417025635 0ustar thomasthomas

Negative Binomial density function

Parameters

  • Lower quantile: 0
  • Upper quantile: 24
  • Target for number of successful trials: 12
  • Probability of success in each trial: 0.75
  • Scale: normal
  • Function: dnbinom
DATE

rkward-0.6.1/tests/distributions/binomial_quantiles.rkcommands.R0000644000175000017500000000062712124345417024573 0ustar thomasthomaslocal({ ## Compute result <- (qbinom (p = c (0.95, .5), size = 3, prob = 0.50, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Binomial quantile", list ("Vector of quantiles probabilities", "c (0.95, .5)", "Binomial trials", "3", "Probability of success", "0.50", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Binomial quantiles") }) rkward-0.6.1/tests/distributions/hypergeometric_quantiles.rkout0000644000175000017500000000056612124345417024637 0ustar thomasthomas

Hypergeometric quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Number of white balls in the urn: 1
  • Number of black balls in the urn: 1
  • Number of balls drawn from the urn: 1
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Hypergeometric quantiles: 1

rkward-0.6.1/tests/distributions/binomial_quantiles.rkout0000644000175000017500000000046312124345417023377 0ustar thomasthomas

Binomial quantile

Parameters

  • Vector of quantiles probabilities: c (0.95, .5)
  • Binomial trials: 3
  • Probability of success: 0.50
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Binomial quantiles: 3 1

rkward-0.6.1/tests/distributions/gumbel_probabilities.rkcommands.R0000644000175000017500000000056712124345417025102 0ustar thomasthomaslocal({ ## Compute result <- (pweibull (q = exp(c (0.95)), shape = 1.03, scale = 1.04, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Gumbel probability", list ("Vector of quantiles", "c (0.95)", "Shape", "1.03", "Scale", "1.04", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Gumbel probabilities") }) rkward-0.6.1/tests/distributions/gamma_probabilities.rkcommands.R0000644000175000017500000000055412124345417024705 0ustar thomasthomaslocal({ ## Compute result <- (pgamma (q = c (0.95), shape = 1.00, rate = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Gamma probability", list ("Vector of quantiles", "c (0.95)", "Shape", "1.00", "Rate", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Gamma probabilities") }) rkward-0.6.1/tests/distributions/t_quantiles.rkout0000644000175000017500000000044212124345417022045 0ustar thomasthomas

t quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Degrees of freedom: 1.00
  • non-centrality parameter: 0.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

t quantiles: 6.3138

rkward-0.6.1/tests/distributions/t_clt.rkcommands.R0000644000175000017500000000140412124345417022013 0ustar thomasthomaslocal({ ## Print result # parameters: df <- 3.0; ncp <- 0.0; # mean and variances of the distribution of sample averages: avg.exp <- 0; avg.var <- df/((df-2)*10); # generate the entire data: data <- matrix(rt(n=10000, df=df, ncp=ncp), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="t") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_poisson_distribution.rkout0000644000175000017500000000037112124345417025045 0ustar thomasthomas

Poisson density function

Parameters

  • Lower quantile: 0
  • Upper quantile: 12
  • Mean: 5.00
  • Scale: normal
  • Function: dpois
DATE

rkward-0.6.1/tests/distributions/poisson_probabilities.rkout0000644000175000017500000000037312124345417024122 0ustar thomasthomas

Poisson probability

Parameters

  • Vector of quantiles: c (0.95)
  • Lambda: 1.07
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = TRUE
DATE

Poisson probabilities: -1.07

rkward-0.6.1/tests/distributions/tukey_quantiles.rkout0000644000175000017500000000070112124345417022741 0ustar thomasthomas

Studentized Range quantiles

Parameters

  • Vector of probabilities: c (0.95)
  • Sample size for range: 2
  • Degrees of freedom for s: 2:11
  • Number of groups whose maximum range is considered: 1
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Studentized Range quantiles: 6.0796 4.5007 3.9265 3.6354 3.4605 3.3441 3.2612 3.1992 3.1511 3.1127

rkward-0.6.1/tests/distributions/plot_weibull_distribution.rkcommands.R0000644000175000017500000000053612124345417026213 0ustar thomasthomaslocal({ ## Print result rk.header ("Weibull density function", list ("Number of Observations", "100", "Lower quantile", "0.00", "Upper quantile", "5.00", "Shape", "2.00", "Scale", "1.00", "Scale", "normal", "Function", "dweibull")); rk.graph.on () try ({ curve (dweibull(x, shape=2.00, scale=1.00), from=0.00, to=5.00, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/weibull_quantiles.rkout0000644000175000017500000000041612124345417023246 0ustar thomasthomas

Weibull quantile

Parameters

  • Vector of probabilities: c (0.95)
  • Shape: 1.00
  • Scale: 1.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Weibull quantiles: 2.9957

rkward-0.6.1/tests/distributions/chi_squared_probabilities.rkout0000644000175000017500000000117712124345417024722 0ustar thomasthomas

Chi-squared probability

Parameters

  • Vector of quantiles: c (0.97, 0.65)
  • Degrees of Freedom: 3.00
  • non-centrality parameter: 0.05
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Chi-squared probabilities: 0.18762 0.11261

Chi-squared probability

Parameters

  • Vector of quantiles: c (1)
  • Degrees of Freedom: 1.01
  • non-centrality parameter: 0.02
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Chi-squared probabilities: -1.1229

rkward-0.6.1/tests/distributions/sf_test.rkcommands.R0000644000175000017500000000104412124345417022355 0ustar thomasthomaslocal({ ## Prepare require(nortest) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- sf.test (var) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Shapiro-Francia Normality Test") rk.results (results) }) rkward-0.6.1/tests/distributions/plot_gamma_distribution.rkcommands.R0000644000175000017500000000052612124345417025631 0ustar thomasthomaslocal({ ## Print result rk.header ("Gamma density function", list ("Number of Observations", "100", "Lower quantile", "0.01", "Upper quantile", "4.60", "Shape", "1.61", "Rate", "0.87", "Scale", "normal", "Function", "dgamma")); rk.graph.on () try ({ curve (dgamma(x, shape=1.61, rate=0.87), from=0.01, to=4.60, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/t_probabilities.rkout0000644000175000017500000000044612124345417022674 0ustar thomasthomas

t probability

Parameters

  • Vector of quantiles: c (0.95)
  • Degrees of Freedom: 1.00
  • non-centrality parameter: 0.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

t probabilities: 0.74184

rkward-0.6.1/tests/distributions/f_probabilities.rkout0000644000175000017500000000055012124345417022652 0ustar thomasthomas

F probability

Parameters

  • Vector of quantiles: c (.1, .2)
  • Numerator degrees of freedom: 1.02
  • Denominator degrees of freedom: 1.11
  • non-centrality parameter: 0.02
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

F probabilities: 0.19324 0.26733

rkward-0.6.1/tests/distributions/plot_logistic_distribution.rkout0000644000175000017500000000047712124345417025177 0ustar thomasthomas

Logistic density function

Parameters

  • Number of Observations: 100
  • Lower quantile: -3.29
  • Upper quantile: 3.29
  • Location: 0.00
  • Scale: 1.00
  • Scale: normal
  • Function: dlogis
DATE

rkward-0.6.1/tests/distributions/log_normal_probabilities.rkcommands.R0000644000175000017500000000057412124345417025756 0ustar thomasthomaslocal({ ## Compute result <- (plnorm (q = c (0.95), meanlog = 0.00, sdlog = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Log Normal probability", list ("Vector of quantiles", "c (0.95)", "meanlog", "0.00", "sdlog", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")) rk.results (result, titles="Log Normal probabilities") }) rkward-0.6.1/tests/distributions/chi_squared_probabilities.rkcommands.R0000644000175000017500000000146412124345417026113 0ustar thomasthomaslocal({ ## Compute result <- (pchisq (q = c (0.97, 0.65), df = 3.00, ncp = 0.05, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Chi-squared probability", list ("Vector of quantiles", "c (0.97, 0.65)", "Degrees of Freedom", "3.00", "non-centrality parameter", "0.05", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Chi-squared probabilities") }) local({ ## Compute result <- (pchisq (q = c (1), df = 1.01, ncp = 0.02, lower.tail=FALSE, log.p = TRUE)) ## Print result rk.header ("Chi-squared probability", list ("Vector of quantiles", "c (1)", "Degrees of Freedom", "1.01", "non-centrality parameter", "0.02", "Tail", "lower.tail=FALSE", "Probabilities p are given as", "log.p = TRUE")); rk.results (result, titles="Chi-squared probabilities") }) rkward-0.6.1/tests/distributions/geometric_clt.rkout0000644000175000017500000000006312124345417022334 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_exponential_distribution.rkout0000644000175000017500000000050112124345417025674 0ustar thomasthomas

Exponential distribution function

Parameters

  • Number of Observations: 100
  • Lower quantile: 0.00
  • Upper quantile: 10.00
  • Rate: 1.00
  • Scale: normal
  • Tail: Upper
  • Function: pexp
DATE

rkward-0.6.1/tests/distributions/beta_quantiles.rkout0000644000175000017500000000116212124345417022515 0ustar thomasthomas

Beta quantiles

Parameters

  • Vector of probabilities: c (0.95)
  • Shape 1: 1.00
  • Shape 2: 1.00
  • non-centrality parameter (ncp): 0.00
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Beta quantiles: 0.95

Beta quantiles

Parameters

  • Vector of probabilities: c (-1)
  • Shape 1: 1.04
  • Shape 2: 1.03
  • non-centrality parameter (ncp): 0.08
  • Tail: lower.tail=FALSE
  • Probabilities p are given as: log.p = TRUE
DATE

Beta quantiles: 0.6414

rkward-0.6.1/tests/distributions/shapiro_wilk_test.rkcommands.R0000644000175000017500000000101012124345417024431 0ustar thomasthomaslocal({ ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- shapiro.test (var) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Shapiro-Wilk Normality Test") rk.results (results) }) rkward-0.6.1/tests/distributions/log_normal_clt.rkout0000644000175000017500000000006312124345417022507 0ustar thomasthomas
rkward-0.6.1/tests/distributions/plot_poisson_distribution.rkcommands.R0000644000175000017500000000043112124345417026234 0ustar thomasthomaslocal({ ## Print result rk.header ("Poisson density function", list ("Lower quantile", "0", "Upper quantile", "12", "Mean", "5.00", "Scale", "normal", "Function", "dpois")); rk.graph.on () try ({ curve (dpois(x, lambda=5.00), from=0, to=12, n=13, type="p") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/cvm_test.rkout0000644000175000017500000000054612124345417021346 0ustar thomasthomas

Cramer-von Mises Normality Test

DATE
Variable NameLengthNAsStatisticp-value
shape480W = 0.2326430416783550.0019712
perm480W = 0.725618397503253.7586e-08
rkward-0.6.1/tests/distributions/jb_test.rkout0000644000175000017500000000070512124345417021151 0ustar thomasthomas

Jarque-Bera Normality Test

Parameters

  • Exclude NAs: YES
DATE
Variable NameLengthNAsStatisticdfp-value
shape480X-squared = 13.402099226758920.0012296
perm480X-squared = 5.9507590669472920.051028
rkward-0.6.1/tests/distributions/cvm_test.rkcommands.R0000644000175000017500000000104412124345417022532 0ustar thomasthomaslocal({ ## Prepare require(nortest) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- cvm.test (var) results[i, 'Statistic'] <- paste (names (test$statistic), test$statistic, sep=" = ") results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Cramer-von Mises Normality Test") rk.results (results) }) rkward-0.6.1/tests/distributions/wilcoxon_probabilities.rkout0000644000175000017500000000056512124345417024275 0ustar thomasthomas

Wilcoxon Rank Sum probability

Parameters

  • Vector of quantiles: c (0.95)
  • m (Numbers of observations in the first sample): 2
  • n (Numbers of observations in the second sample): 1
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Wilcoxon Rank Sum probabilities: 0.33333

rkward-0.6.1/tests/distributions/plot_hypergeometric_distribution.rkcommands.R0000644000175000017500000000063412124345417027575 0ustar thomasthomaslocal({ ## Print result rk.header ("Hypergeometric distribution function", list ("Lower quantile", "0", "Upper quantile", "12", "Number of white balls", "12", "Number of black balls", "12", "Number of balls drawn", "15", "Scale", "normal", "Tail","Lower", "Function", "phyper")); rk.graph.on () try ({ curve (phyper(x, m=12, n=12, k=15, lower.tail = TRUE), from=0, to=12, n=13, type="p") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/exponential_probabilities.rkout0000644000175000017500000000040612124345417024753 0ustar thomasthomas

Exponential probabilities

Parameters

  • Vector of quantiles: c (0.96)
  • Rate: 1.07
  • Tail: lower.tail=TRUE
  • Probabilities p are given as: log.p = FALSE
DATE

Exponential probabilities: 0.64199

rkward-0.6.1/tests/distributions/hypergeometric_clt.rkcommands.R0000644000175000017500000000146712124345417024607 0ustar thomasthomaslocal({ ## Print result # parameters: m <- 12; n <- 12; k <- 15; # mean and variances of the distribution of sample averages: avg.exp <- k*m/(m+n); avg.var <- (k*m*n*(m+n-k)/((m+n)^2*(m+n-1)))/10; # generate the entire data: data <- matrix(rhyper(nn=10000, m=m, n=n, k=k), nrow=10); # get the sample averages: avg <- colMeans(data); # generate random normal samples: normX <- seq(from=min(avg), to=max(avg), length=1000); normY <- dnorm (normX, mean = avg.exp, sd = sqrt(avg.var)); dist.hist <- hist(avg, plot=FALSE, breaks="Sturges"); # calculate the ylims appropriately: ylim <- c(0,max(c(dist.hist$density, normY))); rk.graph.on () try ({ plot(dist.hist, ylim=ylim, freq=FALSE, lty="solid", density=-1, xlab="Sample Averages", main="Hypergeometric") lines (x=normX, y=normY, type="l", col="red") }) rk.graph.off () }) rkward-0.6.1/tests/distributions/plot_wilcoxon_distribution.rkout0000644000175000017500000000044512124345417025217 0ustar thomasthomas

Binomial density function

Parameters

  • Lower quantile: 0
  • Upper quantile: 24
  • First sample size: 4
  • Second sample size: 6
  • Scale: normal
  • Function: dwilcox
DATE

rkward-0.6.1/tests/distributions/plot_exponential_distribution.rkcommands.R0000644000175000017500000000054612124345417027077 0ustar thomasthomaslocal({ ## Print result rk.header ("Exponential distribution function", list ("Number of Observations", "100", "Lower quantile", "0.00", "Upper quantile", "10.00", "Rate", "1.00", "Scale", "normal", "Tail","Upper", "Function", "pexp")); rk.graph.on () try ({ curve (pexp(x, rate=1.00, lower.tail = FALSE), from=0.00, to=10.00, n=100) }) rk.graph.off () }) rkward-0.6.1/tests/distributions/normal_probabilities.rkcommands.R0000644000175000017500000000055112124345417025110 0ustar thomasthomaslocal({ ## Compute result <- (pnorm (q = c (0.95), mean = 0.00, sd = 1.00, lower.tail=TRUE, log.p = FALSE)) ## Print result rk.header ("Normal probability", list ("Vector of quantiles", "c (0.95)", "mu", "0.00", "sigma", "1.00", "Tail", "lower.tail=TRUE", "Probabilities p are given as", "log.p = FALSE")); rk.results (result, titles="Normal probabilities") }) rkward-0.6.1/tests/item_response_theory.R0000644000175000017500000003455012124345417020125 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="item_response_theory", libraries = c ("ltm", "eRm"), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { ## these are example data sets from the ltm package library ("ltm") # load ltm library (Rasch, 2PL, 3PL) # dichotomous data: data("LSAT") # Rasch & 3 parameter model, Cronbach's alpha data("WIRS") # 2 parameter model # polytomous data: data("Environment") # graded response model ## these are example data sets from the eRm package library ("eRm") # load eRm library (LLTM) # dichotomous data: data("lltmdat1") # linear logistic test model # polytomous data: data("rsmdat") # rating scale model data("pcmdat") # partial credit model data("Science") # generalized partial credit model data("lrsmdat") # linear rating scale model data("lpcmdat") # linear partial credit model }, function () { # some tests depend on results of earlier tests, # so we'll store those in a list in .GlobalEnv estimates <<- list () } ## the tests ), tests = list ( ## first, let's test all parameter estimations ## some parameters are later recycled for fitting tests and plotting new ("RKTest", id="Rasch_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_rasch", save_name.active="1", constraint.available="", ghk_rasch.real="21.00", irtparam.state="TRUE", iterqn_rasch.real="150.00", naaction.state="", optimeth.string="BFGS", save_name.objectname="estimates.rasch", startval.string="NULL", verbose.state="", x.available="LSAT", submit.mode="submit") estimates$rasch <<- estimates.rasch }), new ("RKTest", id="2PL_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_2pl", save_name.active="1", constraint.available="", ghk_2pl.real="15.00", interact.state="TRUE", irtparam.state="TRUE", iterem.real="40.00", iterqn_2pl.real="150.00", naaction.state="", optimeth.string="BFGS", startval.string="NULL", verbose.state="", x.available="WIRS", submit.mode="submit") estimates$"2pl" <<- estimates.2pl }), new ("RKTest", id="3PL_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_3pl", save_name.active="1", constraint.available="", epshess.real="0.001", ghk_3pl.real="21.00", irtparam.state="TRUE", iterqn_3pl.real="1000.00", maxguess.real="1.00", naaction.state="", optimeth.string="BFGS", optimizer.string="optim", startval.string="NULL", type.state="", verbose.state="", x.available="LSAT", submit.mode="submit") estimates$"3pl" <<- estimates.3pl }), new ("RKTest", id="LLTM_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_lltm", save_name.active="1", design.string="auto", etastart.string="NULL", groups.string="1", mpoints.real="2.00", stderr.state="se", sumnull.state="sum0", x.available="lltmdat1", submit.mode="submit") }), new ("RKTest", id="GRM_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_grm", save_name.active="1", constraint.state="", dig_abbrv.real="6.00", ghk_grm.real="21.00", hessian.state="", irtparam.state="TRUE", iterqn_grm.real="150.00", naaction.state="", optimeth.string="BFGS", startval.string="NULL", verbose.state="", x.available="Environment", submit.mode="submit") estimates$grm <<- estimates.grm }), new ("RKTest", id="RSM_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_rsm", save_name.active="1", design.string="auto", etastart.string="NULL", stderr.state="se", sumnull.state="sum0", x.available="rsmdat", submit.mode="submit") estimates$rsm <<- estimates.rsm }), new ("RKTest", id="PCM_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_pcm", save_name.active="1", design.string="auto", etastart.string="NULL", stderr.state="se", sumnull.state="sum0", x.available="pcmdat", submit.mode="submit") estimates$pcm <<- estimates.pcm }), new ("RKTest", id="GPCM_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_gpcm", save_name.active="1", chk_select.state="select", constraint.string="rasch", epshess.real="0.000001", ghk_gpcm.real="21.00", inp_items.available="Science[[\"Work\"]]\nScience[[\"Industry\"]]\nScience[[\"Future\"]]\nScience[[\"Benefit\"]]", irtparam.state="TRUE", iterqn_gpcm.real="150.00", naaction.state="", numrderiv.string="fd", optimeth.string="BFGS", optimizer.string="optim", save_name.objectname="estimates.gpcm", startval.string="NULL", verbose.state="", x.available="Science", submit.mode="submit") estimates$gpcm <<- estimates.gpcm }), new ("RKTest", id="LRSM_parameter_estimation", call=function () { rk.call.plugin ("rkward::par_est_lrsm", save_name.active="1", design.string="auto", etastart.string="NULL", groups.string="1", mpoints.real="2.00", stderr.state="", sumnull.state="", x.available="lrsmdat", submit.mode="submit") }), new ("RKTest", id="LPCM_parameter_estimation", call=function () { G <<- c(rep(1,10),rep(2,10)) # group vector, see example section of help("LPCM") rk.sync.global () rk.call.plugin ("rkward::par_est_lpcm", save_name.active="1", design.string="auto", etastart.string="NULL", group_vec.available="G", groups.string="contrasts", mpoints.real="2.00", stderr.state="se", sumnull.state="sum0", x.available="lpcmdat", submit.mode="submit") }), ## testing cronbach's alpha new ("RKTest", id="Cronbach_alpha", call=function () { rk.call.plugin ("rkward::ltm_cronbach_alpha", chk_bsci.state="bsci", chk_na.state="", chk_select.state="select", chk_standard.state="", inp_items.available="LSAT[[\"Item 1\"]]\nLSAT[[\"Item 2\"]]\nLSAT[[\"Item 3\"]]\nLSAT[[\"Item 4\"]]\nLSAT[[\"Item 5\"]]", spin_ci.real="0.95", spin_samples.real="1000.00", x.available="LSAT", submit.mode="submit") }, fuzzy_output=TRUE), # bootstrap, varies a little ## now that our estimates are calculated, let's have a look at goodnes of fit new ("RKTest", id="goodnes-of-fit_Rasch", call=function () { estimates.rasch <<- estimates$rasch rk.sync.global () rk.call.plugin ("rkward::ltm_gof_rasch", spin_samples.real="49.00", x.available="estimates.rasch", submit.mode="submit") }, fuzzy_output=TRUE), # p values tend to be a little fuzzy here (.8-.9) new ("RKTest", id="unidimensional", call=function () { estimates.rasch <<- estimates$rasch rk.sync.global () rk.call.plugin ("rkward::ltm_unidimensional", spin_samples.real="100.00", x.available="estimates.rasch", submit.mode="submit") }, fuzzy_output=TRUE), # average of second eigenvalues in monte carlo samples (~ .25) and p values (~ .65) vary from time to time new ("RKTest", id="item_fit_statistics", call=function () { estimates.rasch <<- estimates$rasch rk.sync.global () rk.call.plugin ("rkward::ltm_item_fit", drop_sumgroups.string="median", rad_pvalue.string="chi2", spin_groups.real="10.00", x.available="estimates.rasch", submit.mode="submit") }), new ("RKTest", id="person_fit_statistics", call=function () { estimates.rasch <<- estimates$rasch rk.sync.global () rk.call.plugin ("rkward::ltm_person_fit", rad_hypot.string="less", rad_pvalue.string="normal", rad_resppat.string="observed", x.available="estimates.rasch", submit.mode="submit") }), new ("RKTest", id="Wald_test", call=function () { estimates.rsm <<- estimates$rsm rk.sync.global () # this test should eliminate four items and give a warning! rk.call.plugin ("rkward::eRm_waldtest", drop_optimizer.string="optim", rad_splitcr.string="median", x.available="estimates.rsm", submit.mode="submit") }), new ("RKTest", id="Andersen_LR_plot", call=function () { estimates.pcm <<- estimates$pcm rk.sync.global () rk.call.plugin ("rkward::eRm_plotLR", annotation.string="items", chk_confint.state="conf", chk_ctrline.state="ctrline", chk_se.state="se", inp_items.text="", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rad_splitcr.string="median", spin_abilfrom.real="-3.00", spin_abilto.real="3.00", spin_confint.real="0.95", spin_ctrline.real="0.95", x.available="estimates.pcm", submit.mode="submit") }), ## finally, test the plot functions new ("RKTest", id="plot_Rasch", call=function () { estimates.rasch <<- estimates$rasch rk.sync.global () rk.call.plugin ("rkward::plot_rasch", annotation.string="legend", inp_items.text="", plot_type.string="items", plot_type_item.string="ICC", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", spin_from.real="-3.80", spin_to.real="3.80", x.available="estimates.rasch", submit.mode="submit") }), new ("RKTest", id="plot_2PL", call=function () { estimates.2pl <<- estimates$"2pl" rk.sync.global () rk.call.plugin ("rkward::plot_ltm", annotation.string="annot", inp_items.text="1", plot_type.string="items", plot_type_item.string="ICC", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", spin_from.real="-3.80", spin_to.real="3.80", x.available="estimates.2pl", submit.mode="submit") }), new ("RKTest", id="plot_3PL", call=function () { estimates.3pl <<- estimates$"3pl" rk.sync.global () # this time, plot the test information curve rk.call.plugin ("rkward::plot_tpm", annotation.string="annot", plot_type.string="TIC", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", spin_from.real="-3.80", spin_to.real="3.80", x.available="estimates.3pl", submit.mode="submit") }), new ("RKTest", id="plot_GRM", call=function () { estimates.grm <<- estimates$grm rk.sync.global () rk.call.plugin ("rkward::plot_grm", annotation.string="annot", inp_items.text="6", plot_type.string="items", plot_type_item.string="ICC", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", spin_categ.real="0.00", spin_from.real="-3.80", spin_to.real="3.80", x.available="estimates.grm", submit.mode="submit") }), new ("RKTest", id="plot_RSM", call=function () { estimates.rsm <<- estimates$rsm rk.sync.global () # plot the first three items in one image rk.call.plugin ("rkward::plot_rsm", annotation.string="legend", chk_ask.state="", chk_mplot.state="mplot", inp_items.text="1:3", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", spin_abilfrom.real="-4.00", spin_abilto.real="4.00", spin_probfrom.real="0.00", spin_probto.real="1.00", x.available="estimates.rsm", submit.mode="submit") }), new ("RKTest", id="plot_PCM", call=function () { estimates.pcm <<- estimates$pcm rk.sync.global () # here we plot items 3 to 6 rk.call.plugin ("rkward::plot_pcm", annotation.string="legend", chk_ask.state="", chk_mplot.state="mplot", inp_items.text="3:6", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", spin_abilfrom.real="-4.00", spin_abilto.real="4.00", spin_probfrom.real="0.00", spin_probto.real="1.00", x.available="estimates.pcm", submit.mode="submit") }) ), # like initCalls: run after all tests to clean up. postCalls = list ( function(){ rm(list=c("LSAT","WIRS","lltmdat1","Environment","Science","pcmdat","rsmdat","lrsmdat","lpcmdat","estimates"), envir=globalenv()) } ) ) rkward-0.6.1/tests/import_export_plugins.R0000644000175000017500000001450712124345417020333 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="import_export_plugins", # place here libraries that are required for *all* tests in this suite, or highly likely to be installed libraries = c ("datasets"), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { # prepare some different files for loading library ("datasets") assign("women.data", datasets::women, pos=globalenv()) } ## the tests ), tests = list ( new ("RKTest", id="load_r_object", call=function () { save (women.data, file="women.RData") rk.call.plugin ("rkward::load_r_object", file.selection="women.RData", envir.active="0", submit.mode="submit") stopifnot (all.equal (.GlobalEnv$women.data, datasets::women)) }), new ("RKTest", id="import_csv", call=function () { write.csv (women.data, file="women.csv") rk.call.plugin ("rkward::import_csv", allow_escapes.state="", blanklinesskip.state="TRUE", checkname.state="TRUE", colclass.string="", colname.string="", dec.string="'.'", doedit.state="0", file.selection="women.csv", flush.state="", na.text="NA", name.objectname="women", nrows.text="-1", quick.string="csv", quote.string="'\\\"'", sep.string="','", skip.text="0", strings_as_factors.string="", stripwhite.state="FALSE", rowname.string="rowcol", nomrow.text="1", submit.mode="submit") stopifnot (all.equal (.GlobalEnv$women, datasets::women)) }), new ("RKTest", id="import_csv_overwrite", call=function () { assign ("women", datasets::women, envir=globalenv ()) rk.sync.global () # this one is expected to fail, as it would overwrite the existing "women" in globalenv() rk.call.plugin ("rkward::import_csv", file.selection="women.csv", name.objectname="women", submit.mode="submit") }, expect_error=TRUE), new ("RKTest", id="setworkdir", call=function () { oldwd <- getwd () on.exit (setwd (oldwd)) # we can only use relative paths, here, to make sure the tests produce identical commands on all systems rk.call.plugin ("rkward::setworkdir", dir.selection="..", submit.mode="submit") stopifnot (oldwd != getwd ()) rk.call.plugin ("rkward::setworkdir", dir.selection="import_export_plugins", submit.mode="submit") stopifnot (oldwd == getwd ()) }), new ("RKTest", id="import_spss", call=function () { rk.call.plugin ("rkward::import_spss", convert_var_labels.state="1", data_frame.state="1", do_locale_conversion.state="0", doedit.state="0", file.selection="import_export_plugins_testfile.sav", labels_limit.real="1.00", saveto.objectname="my.spss.data", trim_labels.state="0", use_labels.state="1", submit.mode="submit") # In order to check, whether the import was correct rk.print (my.spss.data) for (var in my.spss.data) rk.print (rk.get.description(var)) # WARNING: TODO: We don't use the value labels of the third # variable, yet. }, libraries=c("foreign"), files=c("../import_export_plugins_testfile.sav")), new ("RKTest", id="import_stata", call=function () { rk.call.plugin ("rkward::import_stata", convert_dates.state="1", convert_factors.state="1", convert_underscore.state="0", doedit.state="0", file.selection="import_export_plugins_testfile.dta", missing_type.state="0", saveto.objectname="my.stata.data", submit.mode="submit") # In order to check, whether the import was correct rk.print (my.stata.data) for (var in my.stata.data) rk.print (rk.get.description(var)) }, libraries=c("foreign"), files=c("../import_export_plugins_testfile.dta")), new ("RKTest", id="load_source", call=function () { stopifnot (!exists ("testx", globalenv ())) cat ("testx <- c (20:30)\nprint (\"ok\")\n", file="source.R") rk.call.plugin ("rkward::load_source", chdir.state="FALSE", echo.state="0", file.selection="source.R", local.state="TRUE", printeval.state="FALSE", submit.mode="submit") stopifnot (!exists ("testx", globalenv ())) rk.call.plugin ("rkward::load_source", chdir.state="FALSE", echo.state="1", file.selection="source.R", local.state="FALSE", printeval.state="FALSE", submit.mode="submit") stopifnot (globalenv()$testx == c (20:30)) }), new ("RKTest", id="save_r_object", call=function () { # in this test we try to save to object with different settings, then reload them. assign ("testx", datasets::warpbreaks, envir=globalenv()) assign ("testy", datasets::volcano, envir=globalenv()) rk.sync.global() rk.call.plugin ("rkward::save_r", ascii.state="true", complevel.real="6.00", compress.string="gzip", data.available="testx", file.selection="x.RData", submit.mode="submit") rk.call.plugin ("rkward::save_r", ascii.state="", compress.string="xz", complevel.real="9.00", xzextreme.state="true", data.available="testy", file.selection="y.RData", submit.mode="submit") rm (testx, testy, envir=globalenv()) load ("x.RData") stopifnot (testx == datasets::warpbreaks) load ("y.RData") stopifnot (testy == datasets::volcano) }), new ("RKTest", id="write_vector_matrix", call=function () { assign ("testx", c (1:10), globalenv()) rk.sync.global() rk.call.plugin ("rkward::save_variables", append.state="FALSE", data.available="testx", file.selection="data", ncolumns.real="2.", sep.string=",", submit.mode="submit") x <- readLines ("data") for (line in x) rk.print (line) }), new ("RKTest", id="write_table", call=function () { assign ("women", datasets::women, globalenv()) rk.sync.global() rk.call.plugin ("rkward::save_table", append.state="FALSE", columns.string="TRUE", data.available="women", dec.string="'.'", eol.text="\\n", file.selection="data", na.text="NA", qmethod.string="'escape'", quote.state="TRUE", rows.string="FALSE", sep.string="'\\t'", submit.mode="submit") x <- readLines ("data") for (line in x) rk.print (line) }), new ("RKTest", id="package_skeleton", call=function () { # create two functions to use assign ("skel.func1", rkwardtests::rktest.getTempDir, envir=globalenv()) assign ("skel.func2", rkwardtests::rktest.getTempDir, envir=globalenv()) rk.sync.global() rk.call.plugin ("rkward::save_skeleton", data.available="skel.func1\nskel.func2", force.state="TRUE", name.text="anRpackage", path.selection=".", submit.mode="submit") rm (skel.func1, skel.func2, envir=globalenv()) }) ), postCalls = list ( function(){rm("women.data", pos=globalenv())} ) # like initCalls: run after all tests to clean up. Empty in this case. ) rkward-0.6.1/tests/plots.R0000644000175000017500000004543612124345417015025 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="plots", # place here libraries that are required for *all* tests in this suite, or highly likely to be installed libraries = c ("datasets", "graphics"), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { # prepare some different files for loading library ("datasets") data (women) data (swiss) data (warpbreaks) x <- data.frame ("A" = rep (c (1, 2), 8), "B" = rep (c (1, 1, 2, 2), 4), "C" = rep (c (1, 1, 1, 1, 2, 2, 2, 2), 2), "D"= c (rep (1, 8), rep (2, 8))) x[2,2] <- NA assign ("test_table", x, envir=globalenv()) } ## the tests ), tests = list ( new ("RKTest", id="barplot", call=function () { rk.call.plugin ("rkward::barplot", barplot_embed.colors.string="rainbow", barplot_embed.labels.state="1", barplot_embed.legend.state="0", barplot_embed.place.string="3", barplot_embed.plotoptions.add_grid.state="0", barplot_embed.plotoptions.asp.real="0.00", barplot_embed.plotoptions.main.text="", barplot_embed.plotoptions.pointcolor.color.string="", barplot_embed.plotoptions.pointtype.string="", barplot_embed.plotoptions.sub.text="", barplot_embed.plotoptions.xaxt.state="", barplot_embed.plotoptions.xlab.text="", barplot_embed.plotoptions.xlog.state="", barplot_embed.plotoptions.xmaxvalue.text="", barplot_embed.plotoptions.xminvalue.text="", barplot_embed.plotoptions.yaxt.state="", barplot_embed.plotoptions.ylab.text="", barplot_embed.plotoptions.ylog.state="", barplot_embed.plotoptions.ymaxvalue.text="", barplot_embed.plotoptions.yminvalue.text="", barplot_embed.type.string="juxtaposed", names_exp.text="rownames (swiss)", names_mode.string="rexp", tabulate.checked="0", x.available="swiss[[\"Catholic\"]]", submit.mode="submit") rk.call.plugin ("rkward::barplot", barplot_embed.colors.string="default", barplot_embed.legend.state="1", barplot_embed.plotoptions.add_grid.state="0", barplot_embed.plotoptions.asp.real="0.00", barplot_embed.plotoptions.main.text="", barplot_embed.plotoptions.pointcolor.color.string="", barplot_embed.plotoptions.pointtype.string="", barplot_embed.plotoptions.sub.text="", barplot_embed.plotoptions.xaxt.state="", barplot_embed.plotoptions.xlab.text="", barplot_embed.plotoptions.xlog.state="", barplot_embed.plotoptions.xmaxvalue.text="", barplot_embed.plotoptions.xminvalue.text="", barplot_embed.plotoptions.yaxt.state="", barplot_embed.plotoptions.ylab.text="", barplot_embed.plotoptions.ylog.state="", barplot_embed.plotoptions.ymaxvalue.text="", barplot_embed.plotoptions.yminvalue.text="", barplot_embed.type.string="stacked", names_exp.text="names (x)", names_mode.string="default", tabulate.checked="0", x.available="test_table", submit.mode="submit") rk.call.plugin ("rkward::barplot", barplot_embed.colors.string="rainbow", barplot_embed.labels.state="1", barplot_embed.legend.state="1", barplot_embed.place.string="3", barplot_embed.plotoptions.add_grid.state="0", barplot_embed.plotoptions.asp.real="0.00", barplot_embed.plotoptions.main.text="", barplot_embed.plotoptions.pointcolor.color.string="", barplot_embed.plotoptions.pointtype.string="", barplot_embed.plotoptions.sub.text="", barplot_embed.plotoptions.xaxt.state="", barplot_embed.plotoptions.xlab.text="", barplot_embed.plotoptions.xlog.state="", barplot_embed.plotoptions.yaxt.state="", barplot_embed.plotoptions.ylab.text="", barplot_embed.plotoptions.ylog.state="", barplot_embed.type.string="juxtaposed", limit.checked="0", names_mode.string="default", tabulate.checked="1", tabulate_options.groups.available="warpbreaks[[\"wool\"]]\nwarpbreaks[[\"tension\"]]", tabulate_options.outcome.available="warpbreaks[[\"breaks\"]]", tabulate_options.stat.string="sum", submit.mode="submit") }), new ("RKTest", id="boxplot", call=function () { rk.call.plugin ("rkward::box_plot", boxwex.real="0.80", cex_sd_mean.real="1.00", data_mode.string="separate_vars", mean.checked="1", names_mode.string="default", notch.state="FALSE", orientation.string="FALSE", outline.state="TRUE", pch_mean.real="15.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.cexaxis.text="", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.ticklblrot.string="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", sd.checked="0", sd_mean_color.color.string="blue", trim.real="0.00", type_of_mean.string="arithmetic_mean", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]", submit.mode="submit") rk.call.plugin ("rkward::box_plot", boxwex.real="0.80", cex_sd_mean.real="1.00", data_mode.string="separate_vars", mean.checked="1", names_mode.string="default", notch.state="FALSE", orientation.string="FALSE", outline.state="TRUE", pch_mean.real="15.00", pch_sd_high.real="3.00", pch_sd_low.real="3.00", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.cexaxis.text="", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.ticklblrot.string="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", sd.checked="1", sd_mean_color.color.string="blue", type_of_mean.string="geometric_mean", x.available="women[[\"weight\"]]\nwomen[[\"height\"]]", submit.mode="submit") }), new ("RKTest", id="boxplot_grouped", call=function () { rk.call.plugin ("rkward::box_plot", boxwex.real="0.80", data_mode.string="grouped_outcome", dodges.real="0.00", groups.available="warpbreaks[[\"tension\"]]\nwarpbreaks[[\"wool\"]]", mean.checked="0", names_mode.string="default", notch.state="FALSE", orientation.string="TRUE", outcome.available="warpbreaks[[\"breaks\"]]", outline.state="FALSE", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.cexaxis.text="", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.ticklblrot.string="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", sd.checked="0", submit.mode="submit") rk.call.plugin ("rkward::box_plot", boxwex.real="0.80", data_mode.string="grouped_outcome", dodges.real="1.00", groups.available="warpbreaks[[\"tension\"]]\nwarpbreaks[[\"wool\"]]", mean.checked="0", names_mode.string="default", notch.state="FALSE", orientation.string="TRUE", outcome.available="warpbreaks[[\"breaks\"]]", outline.state="FALSE", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.cexaxis.text="", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.ticklblrot.string="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", sd.checked="0", submit.mode="submit") }), new ("RKTest", id="density_plot", call=function () { # Get rid of the warning about results differing from R < 2.2 from sample() suppressWarnings (sample (rnorm (500), 500, TRUE, rep (.1, length.out=500))) rk.call.plugin ("rkward::density_plot", adjust.real="1.00", bw.string="nrd0", kern.string="gaussian", n.real="512.00", narm.state="na.rm=TRUE", plot_type.string="hdr_plot", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rug.state="0", x.available="women[[\"height\"]]", submit.mode="submit") }, libraries = c ("hdrcde")), new ("RKTest", id="dotchart", call=function () { rk.call.plugin ("rkward::dotchart", names_exp.text="women$weight", names_mode.string="rexp", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="This is a test", plotoptions.mainisquote.state="1", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="This is a subtitle", plotoptions.subisquote.state="1", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", tabulate.checked="0", x.available="women[[\"height\"]]", submit.mode="submit") rk.call.plugin ("rkward::dotchart", limit.checked="0", names_mode.string="default", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", tabulate.checked="1", tabulate_options.custom_stat.text="mean (x)", tabulate_options.groups.available="warpbreaks[[\"tension\"]]\nwarpbreaks[[\"wool\"]]", tabulate_options.outcome.available="warpbreaks[[\"breaks\"]]", tabulate_options.stat.string="custom", submit.mode="submit") }), new ("RKTest", id="ecdf_plot", call=function () { rk.call.plugin ("rkward::ecdf_plot", adjust_th_pnorm.state="1", col_rug.color.string="", col_thnorm.color.string="blue", lwd.real="0.50", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", rug.state="1", side.string="side = 3", stepfun_options.addtoplot.state="", stepfun_options.col_hor.color.string="", stepfun_options.col_points.color.string="", stepfun_options.col_y0.color.string="", stepfun_options.col_y1.color.string="", stepfun_options.do_points.state="1", stepfun_options.linetype.string="", stepfun_options.verticals.state="", th_pnorm.state="1", ticksize.real="0.03", x.available="swiss[[\"Catholic\"]]", submit.mode="submit") }), new ("RKTest", id="generic_plot", call=function () { rk.call.plugin ("rkward::plot", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", xvarslot.available="swiss", yvarslot.available="", submit.mode="submit") }), new ("RKTest", id="plot_options", call=function () { rk.call.plugin ("rkward::plot", plotoptions.add_grid.state="1", plotoptions.asp.real="0.00", plotoptions.cexaxis.text="1.1", plotoptions.custom_margins.checked="1", plotoptions.grid_options.col.color.string="blue", plotoptions.grid_options.custlwd.state="", plotoptions.grid_options.equilogs.state="1", plotoptions.grid_options.linetype.string="dashed", plotoptions.grid_options.nx.string="NA", plotoptions.grid_options.ny.string="NULL", plotoptions.main.text="This is a test", plotoptions.mainisquote.state="1", plotoptions.margin_bottom.real="5.0", plotoptions.margin_left.real="4.0", plotoptions.margin_right.real="2.0", plotoptions.margin_top.real="4.9", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="b", plotoptions.sub.text="subtitle", plotoptions.subisquote.state="1", plotoptions.ticklblrot.string="2", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="200", plotoptions.yminvalue.text="100", xvarslot.available="women[[\"weight\"]]", yvarslot.available="", submit.mode="submit") }), new ("RKTest", id="histogram", call=function () { rk.call.plugin ("rkward::histogram", adjust.real="4.00", bw.string="nrd", col_density.color.string="blue", density.state="1", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="1", histogram_opt.density.real="-1.", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="vec", histogram_opt.histbreaks_veclength.real="6.", histogram_opt.histlinetype.string="solid", histogram_opt.include_lowest.state="1", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="", n.real="512.00", narm.state="na.rm=TRUE", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", x.available="swiss[[\"Education\"]]", submit.mode="submit") }), new ("RKTest", id="pareto_chart", call=function () { rk.call.plugin ("rkward::pareto", descriptives.state="TRUE", limit.checked="1", limit_options.cutoff.real="10.00", limit_options.include_others.checked="0", limit_options.sorting.string="largest", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", tabulate.checked="0", x.available="swiss[[\"Education\"]]", submit.mode="submit") rk.call.plugin ("rkward::pareto", descriptives.state="TRUE", limit.checked="0", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", tabulate.checked="1", tabulate_options.groups.available="warpbreaks[[\"wool\"]]\nwarpbreaks[[\"tension\"]]", tabulate_options.outcome.available="warpbreaks[[\"breaks\"]]", tabulate_options.stat.string="sum", submit.mode="submit") }, libraries=c("qcc", "xtable")), new ("RKTest", id="piechart", call=function () { rk.call.plugin ("rkward::piechart", angle.real="45.00", angle_inc.real="6.00", clockwise.state="1", colors.string="grayscale", density.real="3.00", density_inc.real="1.00", names_exp.text="names (x)", names_mode.string="default", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", radius.real="0.80", tabulate.checked="0", x.available="test_table[[\"A\"]]", submit.mode="submit") rk.call.plugin ("rkward::piechart", clockwise.state="0", colors.string="default", density.real="-1", density_inc.real="0", limit.checked="0", names_mode.string="default", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", radius.real="0.80", tabulate.checked="1", tabulate_options.groups.available="test_table[[\"A\"]]\ntest_table[[\"B\"]]\ntest_table[[\"C\"]]", tabulate_options.stat.string="freq", submit.mode="submit") }), new ("RKTest", id="scatterplot", call=function () { rk.call.plugin ("rkward::scatterplot", cex.text="1", col.text="c ('black', 'red')", color.string="each", isCex.string="all", isPch.string="all", pch.text="1", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", pointtype.string="p", type_mode.string="all", x.available="women[[\"weight\"]]\nswiss[[\"Education\"]]", y.available="women[[\"height\"]]\nswiss[[\"Catholic\"]]", submit.mode="submit") }), new ("RKTest", id="scatterplot_matrix", call=function () { rk.call.plugin ("rkward::scatterplot_matrix", diag.string="histogram", ellipse.state="FALSE", plot_points.state="TRUE", smooth.state="FALSE", x.available="swiss", submit.mode="submit") }, libraries=c ("car")), new ("RKTest", id="stem_leaf_plot", call=function () { rk.call.plugin ("rkward::stem", atom.real="0.01", scale.real="1.50", width.real="80.00", x.available="swiss[[\"Fertility\"]]", submit.mode="submit") }), new ("RKTest", id="stripchart", call=function () { rk.call.plugin ("rkward::stripchart", g.available="warpbreaks[[\"tension\"]]", method.string="stack", offset.real="0.50", orientation.string="Horizontal", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", x.available="warpbreaks[[\"breaks\"]]", submit.mode="submit") }) ), postCalls = list ( # like initCalls: run after all tests to clean up. function () { suppressWarnings (rm (list=c ("women", "swiss", "warpbreaks", "test_table"), envir=globalenv())) } ) ) rkward-0.6.1/tests/import_export_plugins_testfile.dta0000644000175000017500000000157212124345417022577 0ustar thomasthomasqtestvarspecialcharsstrings%10.0g%8.0%10.0g%8.0%8sspecialcharsVariable label 1Variable label 2 with some special chars: #+߀??a string@@another@@text@test?@@$@@ @last8specialcharsvalue1value2value3rkward-0.6.1/tests/rkward_application_tests.R0000644000175000017500000002571712124345417020763 0ustar thomasthomas## definition of the test suite suite <- new ("RKTestSuite", id="rkward_application_tests", # place here libraries that are required for *all* tests in this suite, or highly likely to be installed libraries = character (0), # initCalls are run *before* any tests. Use this to set up the environment initCalls = list ( function () { } ## the tests ), tests = list ( new ("RKTest", id="active_binding", call=function () { .GlobalEnv$active.binding.value <- 1 makeActiveBinding ("active.binding", function () { message ("active.binding"); .GlobalEnv$active.binding.value }, .GlobalEnv) rk.sync.global () message ("after sync") stopifnot (.GlobalEnv$active.binding == .GlobalEnv$active.binding.value) .GlobalEnv$active.binding.value <- 123 stopifnot (.GlobalEnv$active.binding == 123) stopifnot (bindingIsActive ("active.binding", rkward::.rk.watched.symbols)) # NOTE: the message "active.binding" should be displayed in the message output }), new ("RKTest", id="promise_in_globalenv", call=function () { .GlobalEnv$promised.value <- 1 delayedAssign ("promise.symbol", { message ("delayed assign"); promised.value }, eval.env=.GlobalEnv, assign.env=.GlobalEnv) rk.sync.global () # should evaluate the promise, but not force it permanently message ("after sync") .GlobalEnv$promised.value <- 123 # promise should be permanently forced at this point: stopifnot (.GlobalEnv$promise.symbol == .GlobalEnv$promised.value) # promise should not be evaluated again .GlobalEnv$promised.value <- 245 stopifnot (.GlobalEnv$promise.symbol == 123) }), new ("RKTest", id="output_graphics_formats", call=function () { rk.graph.on(); plot (1, 1); rk.graph.off() # should produce PNG, 480*480 old.options <- options() options (rk.graphics.type="JPG", rk.graphics.width=500, rk.graphics.height=500, rk.graphics.jpg.quality=34) rk.graph.on(); plot (1, 1); rk.graph.off() # restore options options (rk.graphics.type=old.options$rk.graphics.type, rk.graphics.width=old.options$rk.graphics.width, rk.graphics.height=old.options$rk.graphics.height, rk.graphics.jpg.quality=old.options$rk.graphics.jpg.quality) rk.graph.on (device.type="SVG", width=300); plot (1, 1); rk.graph.off () }), new ("RKTest", id="no_crash_on_strange_objects", call=function () { # This object was created by library (XML) v. 3.1-0 # xmlTreeParse ("An unclosed quote\"") # # In R 2.11.0, str (x) produces an error "subecript out of bounds" (only if library (XML) is loaded! # The main concern is that we should handle this object gracefully, i.e. do not crash while syncing it. load ("rkward_application_tests_strange_object.RData") rk.sync.global () rk.sync (x) }, libraries=c ("XML"), files=c("../rkward_application_tests_strange_object.RData")), new ("RKTest", id="dev_off_bug", call=function () { graphics.off() stopifnot (is.null (dev.list ())) plot (1, 1); x11(); plot (2, 2) stopifnot (all.equal (as.numeric (dev.list ()), c (2, 3))) dev.off (2) stopifnot (all.equal (as.numeric (dev.list ()), 3)) dev.off () stopifnot (is.null (dev.list ())) }), new ("RKTest", id="plot_history_basics", call=function () { le <- "package:lattice" %in% search () compareCurrentPlotWith <- function (x) { if (inherits (x, "trellis")) { matches <- identical (trellis.last.object (), x) } else { matches <- identical (recordPlot (), x) } if (!matches) { message ("Current plot does not match with ", deparse (substitute (x))) } } graphics.off() rk.clear.plot.history() options(rk.graphics.hist.max.plotsize=1000) rk.toggle.plot.history(TRUE) rk.verify.plot.hist.limits (5) assign (".pop.notify", FALSE, envir=rk.record.plot) plots <- list () plot (1, 1) plots[[1]] <- recordPlot() if (le) { print (xyplot (2~2)) plots[[2]] <- trellis.last.object () } else { plot (2,2) plots[[2]] <- recordPlot() } plot (3, 3) plots[[3]] <- recordPlot() rk.force.append.plot () stopifnot (dev.cur() == 2) x11 () plot (4, 4) plots[[4]] <- recordPlot() if (le) { print (xyplot (5~5)) plots[[5]] <- trellis.last.object () } else { plot (5,5) plots[[5]] <- recordPlot() } stopifnot (dev.cur() == 3) ## Navigation message ("mark 1") rk.previous.plot (2) stopifnot (dev.cur() == 3) dev.set (2) compareCurrentPlotWith (plots[[2]]) rk.next.plot (2) compareCurrentPlotWith (plots[[3]]) rk.previous.plot (3) dev.set (3) compareCurrentPlotWith (plots[[4]]) rk.next.plot (3) compareCurrentPlotWith (plots[[5]]) dev.set (2) rk.goto.plot (2, 1) compareCurrentPlotWith (plots[[1]]) ## Removing message ("mark 2") # The plot should be removed in device 3, too rk.removethis.plot (2) compareCurrentPlotWith (plots[[2]]) message ("mark 3") dev.set (3) rk.first.plot (3) compareCurrentPlotWith (plots[[2]]) message ("mark 4") # this time, the plot was shown in both devices. It should not have be removed in the other! rk.removethis.plot (3) compareCurrentPlotWith (plots[[3]]) dev.set (2) compareCurrentPlotWith (plots[[2]]) ## Reaching the history limit message ("mark 5") # three plots in history at this time, and one pending in device 2 dev.set (3) rk.first.plot () compareCurrentPlotWith (plots[[3]]) rk.last.plot () compareCurrentPlotWith (plots[[5]]) dev.set (2) plot (1, 1) plot (1, 1) # five plots in history at this time, and one pending in device 2 rk.force.append.plot () # first should have been popped, now rk.first.plot () compareCurrentPlotWith (plots[[4]]) ## Duplicating plots message ("mark 6") rk.verify.plot.hist.limits (10) rk.duplicate.device () stopifnot (dev.cur() == 4) title (main = "plot [[4]]: duplicated") plots[[6]] <- recordPlot () rk.first.plot () # at this stage 6 plots are in history, duplicated plot is at pos = 6 dev.set (2) compareCurrentPlotWith (plots[[4]]) message ("mark 7") title (main = "plot [[4]]: altered") plots[[7]] <- recordPlot () rk.next.plot (); rk.previous.plot (); # overwrites at pos = 1 compareCurrentPlotWith (plots[[7]]) dev.set (4) rk.force.append.plot () # original plot 4, is now at position 7 compareCurrentPlotWith (plots[[4]]) rk.previous.plot (); # duplicated plot compareCurrentPlotWith (plots[[6]]) graphics.off () rk.clear.plot.history() ## Manage only screen devices message ("mark 8") plot (1, 1) fname <- rk.get.tempfile.name () message ("mark 8a") jpeg (filename = fname) plot (2,2) x11 () plot (3,3) stopifnot (identical (c(1,2,4), as.numeric (rk.record.plot$.hP.names))) graphics.off () rk.clear.plot.history() file.remove (fname) ## Switching plot history on/off message ("mark 9") plots <- list () plot (1,1); plots[[1]] <- recordPlot() plot (2,2); plots[[2]] <- recordPlot() plot (3,3); plots[[3]] <- recordPlot() x11 () plot (4,4); plots[[4]] <- recordPlot() rk.toggle.plot.history(FALSE) stopifnot (rk.record.plot$sP.length == 4) plot (5,5) plot (6,6); plots[[6]] <- recordPlot() dev.set (2) plot (7,7); plots[[7]] <- recordPlot() stopifnot (rk.record.plot$sP.length == 4) rk.toggle.plot.history(TRUE) rk.force.append.plot () compareCurrentPlotWith (plots[[7]]) dev.set (3) rk.force.append.plot () compareCurrentPlotWith (plots[[6]]) stopifnot (rk.record.plot$sP.length == 6) graphics.off () rk.clear.plot.history() message ("mark 10") }, libraries=c ("lattice")), new ("RKTest", id="device_capturing_stress_test", call=function () { # This test checks for the "figure margins too large" error, that used to occur when plotting on a fresh device, sometimes. # Since the error only appeared occasionally, we try 100 times to produce it. Unfortunately, that does make the test run annoyingly long... graphics.off() for (i in 1:100) { rk.screen.device () plot (rnorm (100), main=paste (i, "/ 100")) dev.off () } }), new ("RKTest", id="output_capture_interleaving_test", call=function () { rk.call.plugin ("rkward::testing_run_code", codetorun.text=' for (i in 1:20) { cat ("A") system ("echo B") } ', submit.mode="submit") }), new ("RKTest", id="run_again_links", call=function () { # usually, commands to generate run-again-links are not included in the command recording, since these can sometimes change at a large scale (e.g. if the plot-options plugin gains a new option), and this is rarely of interest. Here, we do include a test to catch any grave problems. For this purpose, we simply call some complex plugins. rk.call.plugin ("rkward::plot_beta_clt", a.real="2.00", b.real="2.00", drawnorm.state="1", function.string="hist", histogram_opt.addtoplot.state="", histogram_opt.barlabels.state="1", histogram_opt.density.real="-1.00", histogram_opt.doborder.state="1", histogram_opt.freq.state="0", histogram_opt.histbordercol.color.string="", histogram_opt.histbreaksFunction.string="Sturges", histogram_opt.histfillcol.color.string="azure", histogram_opt.histlinetype.string="solid", histogram_opt.rightclosed.state="1", histogram_opt.usefillcol.state="1", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", submit.mode="submit") rk.call.plugin ("rkward::plot_normal_clt", dist_stepfun.addtoplot.state="", dist_stepfun.col_hor.color.string="blue", dist_stepfun.col_vert.color.string="blue", dist_stepfun.col_y0.color.string="gold", dist_stepfun.col_y1.color.string="cyan", dist_stepfun.do_points.state="", dist_stepfun.linetype.string="", dist_stepfun.verticals.state="1", drawnorm.state="1", function.string="dist", mean.real="0.00", nAvg.real="10.00", nDist.real="1000.00", normlinecol.color.string="red", normpointtype.string="l", plotoptions.add_grid.state="0", plotoptions.asp.real="0.00", plotoptions.main.text="", plotoptions.pointcolor.color.string="", plotoptions.pointtype.string="", plotoptions.sub.text="", plotoptions.xaxt.state="", plotoptions.xlab.text="", plotoptions.xlog.state="", plotoptions.xmaxvalue.text="", plotoptions.xminvalue.text="", plotoptions.yaxt.state="", plotoptions.ylab.text="", plotoptions.ylog.state="", plotoptions.ymaxvalue.text="", plotoptions.yminvalue.text="", scalenorm.state="0", sd.real="1.00", submit.mode="submit") }, record.all.commands=TRUE) # postCalls are run *after* all tests. Use this to clean up ), postCalls = list ( function () { } ) ) rkward-0.6.1/tests/analysis_plugins/0000755000175000017500000000000012124345417017111 5ustar thomasthomasrkward-0.6.1/tests/analysis_plugins/kpss_test.rkout0000644000175000017500000000110512124345417022213 0ustar thomasthomas

KPSS Test for Level Stationarity

Parameters

  • null hypothesis: Trend
  • version of truncation lag parameter: long
DATE
Variable NameLengthNAsKPSS TrendTruncation lag parameterp-value
test50x5000.1024150.1
test50y5000.137850.065181
test50z5000.09972250.1
rkward-0.6.1/tests/analysis_plugins/ansari_bradley_test.rkout0000644000175000017500000000177712124345417024231 0ustar thomasthomas

Ansari-Bradley test

Parameters

  • Comparing: test50x against test10y
  • Alternative Hypothesis: true ratio of scales is not equal to 1
  • Compute exact p-value: yes
  • Confidence Level: 0.95
DATE
Variable Namesstatisticnull.valuepconfidence interval percentconfidence interval of differenceestimate of the ratio of scales
test50x
test10y
87511.3814e-05950.56158
0.70792
0.58206

Ansari-Bradley test

Parameters

  • Comparing: test50x against test50y
  • Alternative Hypothesis: true ratio of scales is less than 1
  • Compute exact p-value: automatic
DATE
Variable Namesstatisticnull.valuep
test50x
test50y
127510.5
rkward-0.6.1/tests/analysis_plugins/ansari_bradley_exact_test.rkout0000644000175000017500000000172712124345417025410 0ustar thomasthomas

Ansari-Bradley test

Parameters

  • Comparing: test50x against test10y
  • H1: true ratio of scales is not equal to 1
  • Compute exact p-value: yes
  • Confidence Level: 0.95
DATE
Variable Namesstatisticnull.valuepconfidence interval percentconfidence interval of differenceestimate of the ratio of scales
test50x
test10y
87511.3814e-05950.56158
0.70792
0.58206

Ansari-Bradley test

Parameters

  • Comparing: test50x against test50y
  • H1: true ratio of scales is less than 1
  • Compute exact p-value: automatic
DATE
Variable Namesstatisticnull.valuep
test50x
test50y
127510.5
rkward-0.6.1/tests/analysis_plugins/ansari_bradley_exact_test.rkcommands.R0000644000175000017500000000233212124345417026573 0ustar thomasthomaslocal({ ## Prepare require(exactRankTests) names <- rk.get.description (test50x, test10y) ## Compute result <- ansari.exact (test50x, test10y, alternative = "two.sided", exact=TRUE, conf.int = TRUE) ## Print result rk.header (result$method, parameters=list ("Comparing", paste (names[1], "against", names[2]), 'H1', rk.describe.alternative (result), "Compute exact p-value", "yes", "Confidence Level", "0.95" )) rk.results (list ( 'Variable Names'=names, 'statistic'=result$statistic, 'null.value'=result$null.value, p=result$p.value, 'confidence interval percent'=(100 * attr(result$conf.int, "conf.level")), 'confidence interval of difference'=result$conf.int, 'estimate of the ratio of scales'=result$estimate)) }) local({ ## Prepare require(exactRankTests) names <- rk.get.description (test50x, test50y) ## Compute result <- ansari.exact (test50x, test50y, alternative = "less", conf.int = FALSE) ## Print result rk.header (result$method, parameters=list ("Comparing", paste (names[1], "against", names[2]), 'H1', rk.describe.alternative (result), "Compute exact p-value", "automatic")) rk.results (list ( 'Variable Names'=names, 'statistic'=result$statistic, 'null.value'=result$null.value, p=result$p.value)) }) rkward-0.6.1/tests/analysis_plugins/basic_statistics_a.rkout0000644000175000017500000000257112124345417024037 0ustar thomasthomas

Univariate statistics

Parameters

  • Remove Missing values: TRUE
  • Trimmed value for trimmed mean: 0.05
  • Constant for the MAD estimation: 1.4628
  • Winsorized values for Huber estimator: 1.50
  • Tolerance in Huber estimator: 0.07
  • Mu for Huber estimator: 3
  • S for Huber estimator:
  • Initial value: median
DATE
Variable NameNumber of obsNumber of missing valuesMeanVarianceSdMinimumMaximumMedianInter Quartile RangeQuartilesQuantilesTrimmed MeanMedian Absolute DeviationHuber M-Estimator
weight150136.73240.2115.49911516413523.50%: 115 25%: 124.5 50%: 135 75%: 148 100%: 1640%: 115 20%: 122.4 40%: 130.8 60%: 140.2 80%: 150.8 100%: 164136.7317.5543: 143.017677999144
test50x500125.5212.514.577101150125.524.50%: 101 25%: 113.25 50%: 125.5 75%: 137.75 100%: 1500%: 101 20%: 110.8 40%: 120.6 60%: 130.4 80%: 140.2 100%: 150125.518.2853: 138.260549866364
rkward-0.6.1/tests/analysis_plugins/hp_filter.rkcommands.R0000644000175000017500000000135512124345417023351 0ustar thomasthomaslocal({ ## Print result rk.header ("Hodrick-Prescott Filter", parameters=list("Lambda", 1600)) x <- co2 lambda <- 1600 if (any (is.na (x))) stop ("Missing values cannot be handled") i <- diag(length(x)) trend <- solve(i + lambda * crossprod(diff(i, lag=1, d=2)), x) # The HP Filter itself. Thanks to Grant V. Farnsworth cycle <- x - trend if (is.ts(x)) { trend <- ts(trend,start(x),frequency=frequency(x)) cycle <- ts(cycle,start(x),frequency=frequency(x)) } .GlobalEnv$hptrend <- trend .GlobalEnv$hpcycle <- cycle rk.graph.on () try({ par(mfrow=c(2,1),mar=c(2,4,2,2)+0.1) plot.ts(cbind(x, trend), ylab="co2, Trend", col=c("blue", "red"),lwd=c(1,1), plot.type="single") plot.ts(cycle, ylab="Cycle", col="green4", lwd=1) }) rk.graph.off () }) rkward-0.6.1/tests/analysis_plugins/F_test.rkout0000644000175000017500000000076312124345417021431 0ustar thomasthomas

F test to compare two variances

Parameters

  • Confidence Level: 0.95
  • Alternative Hypothesis: true ratio of variances is not equal to 1
DATE
VariablesFNumerator DFDenominator DFp-valueLower CIUpper CIratio of variances
test50z
test50y
16494909.079628.19516
rkward-0.6.1/tests/analysis_plugins/bartlett_test.rkcommands.R0000644000175000017500000000064012124345417024251 0ustar thomasthomaslocal({ ## Compute result <- bartlett.test (list (warpbreaks[["breaks"]], test50z, test50y, test50x, test10z, test10y, test10x)) ## Print result names <- rk.get.description (warpbreaks[["breaks"]], test50z, test50y, test50x, test10z, test10y, test10x) rk.header (result$method) rk.results (list ( 'Variables'=names, 'Bartlett s K-squared'=result$statistic, 'df'=result$parameter, 'p-value'=result$p.value)) }) rkward-0.6.1/tests/analysis_plugins/outlier.rkout0000644000175000017500000000140412124345417021661 0ustar thomasthomas

Find potential outlier

Parameters

  • Opposite: FALSE
DATE
Variable NameLengthNAsOutlier
breaks54070
test50z500200

Find potential outlier

Parameters

  • Opposite: TRUE
DATE
Variable NameOutlierMeanStandard DeviationMedianMinimumMaximum
breaks1028.14813.199261070
test50z410258.311024200
rkward-0.6.1/tests/analysis_plugins/t_test.rkout0000644000175000017500000000300412124345417021476 0ustar thomasthomas

Welch Two Sample t-test

Parameters

  • Comparing: test50x against test50y
  • H1: true difference in means is not equal to 0
  • Equal variances: not assumed
DATE
Variable Nameestimated meandegrees of freedomtpconfidence interval percentconfidence interval of difference
test50x
test50y
125.5
225.5
98-34.32.1436e-5695-105.79
-94.214

Paired t-test

Parameters

  • Comparing: test10y against test10z
  • H1: true difference in means is less than 0
DATE
Variable Nameestimated meandegrees of freedomtpconfidence interval percentconfidence interval of difference
test10y
test10z
183.5963.886199-Inf
191.6

One Sample t-test

Parameters

  • Comparing: test10z against constant
  • H1: true mean is not equal to 20
DATE
Variable Nameestimated meandegrees of freedomtpconfidence interval percentconfidence interval of difference
test10z2290.522230.614129513.337
30.663
rkward-0.6.1/tests/analysis_plugins/agostino_test.rkcommands.R0000644000175000017500000000164712124345417024263 0ustar thomasthomaslocal({ ## Prepare require(moments) ## Compute vars <- rk.list (warpbreaks[["breaks"]], test50z, test10x) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- agostino.test (var, alternative = "two.sided") results[i, 'skewness estimator (skew)'] <- t$statistic["skew"] results[i, 'transformation (z)'] <- t$statistic["z"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis'] <- rk.describe.alternative (t) NA # no error }, error=function (e) e$message) # catch any errors results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("D'Agostino test of skewness", parameters=list ("Alternative Hypothesis", "two.sided")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/chisq_out_test.rkout0000644000175000017500000000354512124345417023243 0ustar thomasthomas

Chi-squared test for outlier

Parameters

  • Opposite: FALSE
DATE
Variable NameLengthNAsX-squaredp-valueAlternative HypothesisVarianceMeanStandard DeviationMedianMinimumMaximum
shape4808.68130.0032149highest value 0.464125 is an outlier0.00697170.218110.0834960.198860.090330.46413
perm4804.08190.043346highest value 1300 is an outlier191685415.45437.82130.56.31300
peri4802.74870.097335lowest value 308.642 is an outlier20496542682.21431.72536.2308.644864.2
area4805.28810.021472lowest value 1016 is an outlier72030457187.72683.87487101612212

Chi-squared test for outlier

Parameters

  • Opposite: TRUE
DATE
Variable NameX-squaredp-valueAlternative HypothesisVariance
shape2.3420.12592lowest value 0.0903296 is an outlier0.0069717
perm0.873330.35004lowest value 6.3 is an outlier191685
peri2.32290.12748highest value 4864.22 is an outlier2049654
area3.50450.061201highest value 12212 is an outlier7203045
rkward-0.6.1/tests/analysis_plugins/box_test.rkcommands.R0000644000175000017500000000111012124345417023211 0ustar thomasthomaslocal({ ## Compute vars <- rk.list (test50x, test10y) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- Box.test (var, lag = 1, type = "Box-Pierce") results[i, 'X-squared'] <- test$statistic results[i, 'degrees of freedom'] <- test$parameter results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Box-Pierce Test", parameters=list ("lag", "1", "type", "Box-Pierce")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/wilcoxon_tests.rkcommands.R0000644000175000017500000000602212124345417024455 0ustar thomasthomaslocal({ ## Prepare names <- rk.get.description (test50x) ## Compute wcox.result <- wilcox.test( x=test50x, exact=TRUE, conf.int=TRUE ) ## Print result rk.header (wcox.result$method, parameters=list ("Comparing", paste (names, collapse=" against "), "H1", rk.describe.alternative (wcox.result), "Continuity correction in normal approximation for p-value", "FALSE", "Compute exact p-value", "TRUE", "Paired test", "FALSE", "mu", "0.00")) rk.results (list ( "Variable Names"=names, "Statistic"=wcox.result$statistic, "Location Shift"=wcox.result$null.value, "Hypothesis"=wcox.result$alternative, p=wcox.result$p.value, "Confidence interval percent"=(100 * attr(wcox.result$conf.int, "conf.level")), "Confidence interval of difference"=wcox.result$conf.int, "Difference in Location"=wcox.result$estimate)) }) local({ ## Prepare names <- rk.get.description (test50x, test50y) ## Compute wcox.result <- wilcox.test( x=test50x, y=test50y, alternative="less", paired=TRUE, correct=TRUE ) ## Print result rk.header (wcox.result$method, parameters=list ("Comparing", paste (names, collapse=" against "), "H1", rk.describe.alternative (wcox.result), "Continuity correction in normal approximation for p-value", "TRUE", "Compute exact p-value", "automatic", "Paired test", "TRUE", "mu", "0.00")) rk.results (list ( "Variable Names"=names, "Statistic"=wcox.result$statistic, "Location Shift"=wcox.result$null.value, "Hypothesis"=wcox.result$alternative, p=wcox.result$p.value)) }) local({ ## Prepare require(exactRankTests) names <- rk.get.description (test50x) ## Compute wcox.result <- wilcox.exact( x=test50x, exact=TRUE, conf.int=TRUE ) ## Print result rk.header (wcox.result$method, parameters=list ("Comparing", paste (names, collapse=" against "), "H1", rk.describe.alternative (wcox.result), "Continuity correction in normal approximation for p-value", "FALSE", "Compute exact p-value", "TRUE", "Paired test", "FALSE", "mu", "0.00")) rk.results (list ( "Variable Names"=names, "Statistic"=wcox.result$statistic, "Location Shift"=wcox.result$null.value, "Hypothesis"=wcox.result$alternative, p=wcox.result$p.value, "Confidence interval percent"=(100 * attr(wcox.result$conf.int, "conf.level")), "Confidence interval of difference"=wcox.result$conf.int, "Difference in Location"=wcox.result$estimate)) }) local({ ## Prepare require(exactRankTests) names <- rk.get.description (test50x, test50y) ## Compute wcox.result <- wilcox.exact( x=test50x, y=test50y, alternative="less", paired=TRUE, correct=TRUE ) ## Print result rk.header (wcox.result$method, parameters=list ("Comparing", paste (names, collapse=" against "), "H1", rk.describe.alternative (wcox.result), "Continuity correction in normal approximation for p-value", "TRUE", "Compute exact p-value", "automatic", "Paired test", "TRUE", "mu", "0.00")) rk.results (list ( "Variable Names"=names, "Statistic"=wcox.result$statistic, "Location Shift"=wcox.result$null.value, "Hypothesis"=wcox.result$alternative, p=wcox.result$p.value)) }) rkward-0.6.1/tests/analysis_plugins/dixon_test.rkcommands.R0000644000175000017500000000367412124345417023563 0ustar thomasthomaslocal({ ## Prepare require(outliers) ## Compute vars <- rk.list (women[["weight"]], women[["height"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) var <- na.omit (var) # omit NAs for all further calculations results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- dixon.test (var, type = 0, opposite = FALSE, two.sided = TRUE) results[i, 'Dixon Q-statistic'] <- t$statistic["Q"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis']<- rk.describe.alternative (t) results[i, 'Mean'] <- mean (var) results[i, 'Standard Deviation'] <- sd (var) results[i, 'Median'] <- median (var) results[i, 'Minimum'] <- min (var) results[i, 'Maximum'] <- max (var) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Dixon test for outlier", parameters=list ("Type", "0", "Opposite", "FALSE", "two-sided", "TRUE")) rk.results (results) }) local({ ## Prepare require(outliers) ## Compute vars <- rk.list (women[["weight"]], women[["height"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- na.omit (vars[[i]]) results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- dixon.test (var, type = 0, opposite = TRUE, two.sided = FALSE) results[i, 'Dixon Q-statistic'] <- t$statistic["Q"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis']<- rk.describe.alternative (t) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Dixon test for outlier", parameters=list ("Type", "0", "Opposite", "TRUE", "two-sided", "FALSE")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/grubbs_test.rkout0000644000175000017500000000251612124345417022526 0ustar thomasthomas

Grubbs tests for one or two outliers in data sample

Parameters

  • Type: 10
  • Opposite: FALSE
  • two-sided: TRUE
DATE
Variable NameLengthNAsGUp-valueAlternative Hypothesis
breaks5403.17090.806710.047523highest value 70 is an outlier
test10z1111.48630.727270.78497highest value 40 is an outlier

Grubbs tests for one or two outliers in data sample

Parameters

  • Type: 11
  • Opposite: TRUE
  • two-sided: FALSE
DATE
Variable NameLengthNAsGUp-valueAlternative HypothesisMeanStandard DeviationMedianMinimumMaximum
breaks5404.54590.77345110 and 70 are outliers28.14813.199261070
test10z1112.97260.5090914 and 40 are outliers2212.11122440
rkward-0.6.1/tests/analysis_plugins/box_test.rkout0000644000175000017500000000066012124345417022030 0ustar thomasthomas

Box-Pierce Test

Parameters

  • lag: 1
  • type: Box-Pierce
DATE
Variable NameLengthNAsX-squareddegrees of freedomp-value
test50x50044.1812.9953e-11
test10y1114.910.026857
rkward-0.6.1/tests/analysis_plugins/chisq_out_test.rkcommands.R0000644000175000017500000000367112124345417024435 0ustar thomasthomaslocal({ ## Prepare require(outliers) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]], rock[["peri"]], rock[["area"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) var <- na.omit (var) # omit NAs for all further calculations results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- chisq.out.test (var, opposite = FALSE) results[i, 'X-squared'] <- t$statistic results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis']<- rk.describe.alternative (t) results[i, 'Variance'] <- var (var) results[i, 'Mean'] <- mean (var) results[i, 'Standard Deviation'] <- sd (var) results[i, 'Median'] <- median (var) results[i, 'Minimum'] <- min (var) results[i, 'Maximum'] <- max (var) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Chi-squared test for outlier", parameters=list ("Opposite", "FALSE")) rk.results (results) }) local({ ## Prepare require(outliers) ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]], rock[["peri"]], rock[["area"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- na.omit (vars[[i]]) results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- chisq.out.test (var, opposite = TRUE) results[i, 'X-squared'] <- t$statistic results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis']<- rk.describe.alternative (t) results[i, 'Variance'] <- var (var) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Chi-squared test for outlier", parameters=list ("Opposite", "TRUE")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/anscombe_test.rkcommands.R0000644000175000017500000000160212124345417024216 0ustar thomasthomaslocal({ ## Prepare require(moments) ## Compute vars <- rk.list (warpbreaks[["breaks"]], test50z, test10y) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Error'] <- tryCatch ({ t <- anscombe.test (var, alternative = "two.sided") results[i, 'Kurtosis estimator (tau)'] <- t$statistic["kurt"] results[i, 'Transformation (z)'] <- t$statistic["z"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis'] <- rk.describe.alternative (t) NA # no error }, error=function (e) e$message) # catch any errors results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Anscombe-Glynn test of kurtosis", parameters=list ("Alternative Hypothesis", "two.sided")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/crosstab_multi.rkout0000644000175000017500000000570212124345417023235 0ustar thomasthomas

Crosstabs (n to n)

Parameters

  • Variables: A, B, C, D
DATE

test_table[["D"]] 1 2
test_table[["A"]] test_table[["B"]] test_table[["C"]]
1 1 1 1 1
2 1 1
2 1 1 1
2 1 1
2 1 1 0 1
2 1 1
2 1 1 1
2 1 1

rkward-0.6.1/tests/analysis_plugins/outlier.rkcommands.R0000644000175000017500000000304712124345417023060 0ustar thomasthomaslocal({ ## Prepare require(outliers) ## Compute vars <- rk.list (warpbreaks[["breaks"]], test50z) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) var <- na.omit (var) # omit NAs for all further calculations results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- outlier (var, opposite = FALSE) results[i, 'Outlier'] <- t NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Find potential outlier", parameters=list ("Opposite", "FALSE")) rk.results (results) }) local({ ## Prepare require(outliers) ## Compute vars <- rk.list (warpbreaks[["breaks"]], test50z) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- na.omit (vars[[i]]) results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- outlier (var, opposite = TRUE) results[i, 'Outlier'] <- t results[i, 'Mean'] <- mean (var) results[i, 'Standard Deviation'] <- sd (var) results[i, 'Median'] <- median (var) results[i, 'Minimum'] <- min (var) results[i, 'Maximum'] <- max (var) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Find potential outlier", parameters=list ("Opposite", "TRUE")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/basic_statistics_b.rkcommands.R0000644000175000017500000000113212124345417025222 0ustar thomasthomaslocal({ ## Compute vars <- rk.list (test10x, women[["height"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] if (length (var) >= 2) { results[i, 'Minimum values'] <- paste (sort(var, decreasing=FALSE, na.last=TRUE)[1:2], collapse=" ") } if (length (var) >= 3) { results[i, 'Maximum values'] <- paste (sort(var, decreasing=TRUE, na.last=TRUE)[1:3], collapse=" ") } #robust statistics } ## Print result rk.header ("Univariate statistics", parameters=list ( "Remove Missing values", TRUE)) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/descriptive_stats.rkcommands.R0000644000175000017500000000205612124345417025133 0ustar thomasthomaslocal({ ## Compute vars <- rk.list (women[["height"]], test10z) results <- data.frame ('Object'=I(names (vars))) for (i in 1:length (vars)) { var <- vars[[i]] # we wrap each single call in a "try" statement to always continue on errors. results[i, 'mean'] <- try (mean (var, trim = 0.00, na.rm=TRUE)) results[i, 'median'] <- try (median (var, na.rm=TRUE)) try ({ range <- try (range (var, na.rm=TRUE)) results[i, 'min'] <- range[1] results[i, 'max'] <- range[2] }) results[i, 'standard deviation'] <- try (sd (var, na.rm=TRUE)) results[i, 'sum'] <- try (sum (var, na.rm=TRUE)) results[i, 'product'] <- try (prod (var, na.rm=TRUE)) results[i, 'Median Absolute Deviation'] <- try (mad (var, constant = 1.4628, na.rm=TRUE)) results[i, 'length of sample'] <- length (var) results[i, 'number of NAs'] <- sum (is.na(var)) } ## Print result rk.header ("Descriptive statistics", parameters=list ( "Trim of mean", 0.00, "Median Absolute Deviation", paste ("constant:", 1.4628, "average"))) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/descriptive_stats.rkout0000644000175000017500000000127512124345417023743 0ustar thomasthomas

Descriptive statistics

Parameters

  • Trim of mean: 0
  • Median Absolute Deviation: constant: 1.4628 average
DATE
Objectmeanmedianminmaxstandard deviationsumproductMedian Absolute Deviationlength of samplenumber of NAs
height656558724.47219751.511e+275.8512150
test10z222244012.1112203.8051e+1214.628111
rkward-0.6.1/tests/analysis_plugins/fligner_test.rkcommands.R0000644000175000017500000000071512124345417024061 0ustar thomasthomaslocal({ ## Compute result <- fligner.test (list (women[["weight"]], women[["height"]], test50z, test50y, test50x, test10z, test10y, test10x)) ## Print result names <- rk.get.description (women[["weight"]], women[["height"]], test50z, test50y, test50x, test10z, test10y, test10x) rk.header (result$method) rk.results (list ( 'Variables'=names, 'Fligner-Killeen:med X^2 test statistic'=result$statistic, 'df'=result$parameter, 'p-value'=result$p.value)) }) rkward-0.6.1/tests/analysis_plugins/levene_test.rkout0000644000175000017500000000170012124345417022512 0ustar thomasthomas

Levene's Test

Parameters

  • response variable: breaks
  • groups: tension
DATE

Levene's Test for Homogeneity of Variance (center = median)

DfF valuePr(>F)
group 2 2.82 0.069 .
51

--- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

rkward-0.6.1/tests/analysis_plugins/levene_test.rkcommands.R0000644000175000017500000000047512124345417023714 0ustar thomasthomaslocal({ ## Prepare require(car) ## Compute result <- leveneTest (warpbreaks[["breaks"]], warpbreaks[["tension"]]) ## Print result names <- rk.get.description (warpbreaks[["breaks"]], warpbreaks[["tension"]]) rk.header ("Levene's Test", list ("response variable", names[1], "groups", names[2])) rk.print (result) }) rkward-0.6.1/tests/analysis_plugins/crosstab_n_to_1.rkcommands.R0000644000175000017500000000652112124345417024454 0ustar thomasthomaslocal({ ## Compute x <- rk.list (warpbreaks[["tension"]]) yvars <- rk.list (warpbreaks[["wool"]], warpbreaks[["tension"]]) results <- list() chisquares <- list () # calculate crosstabs for (i in 1:length (yvars)) { count <- table(x[[1]], yvars[[i]]) chisquares[[i]] <- chisq.test (count, simulate.p.value = FALSE) results[[i]] <- count } ## Print result rk.header ("Crosstabs (n to 1)", level=1) for (i in 1:length (results)) { rk.header ("Crosstabs (n to 1)", parameters=list ("Dependent", names (x)[1], "Independent", names (yvars)[i]), level=2) rk.results (results[[i]], titles=c(names (x)[1], names (yvars)[i])) rk.header ("Pearson's Chi Square Test for Crosstabs", list ("Dependent", names (x)[1], "Independent", names (yvars)[i], "Method", chisquares[[i]][["method"]]), level=2) rk.results (list ('Statistic'=chisquares[[i]][['statistic']], 'df'=chisquares[[i]][['parameter']], 'p'=chisquares[[i]][['p.value']])) rk.header ("Barplot for Crosstabs", list ("Dependent"=names (x)[1], "Independent"=names (yvars)[i], "colors"="default", "Type"="juxtaposed", "Legend"="FALSE"), level=2) rk.graph.on () try ({ counts <- results[[i]] barplot(counts, beside=TRUE) }) rk.graph.off () } }) local({ ## Prepare # convenience function to bind together several two dimensional tables into a single three dimensional table bind.tables <- function (...) { tables <- list (...) output <- unlist (tables) dim (output) <- c (dim (tables[[1]]), length (tables)) dimnames (output) <- c (dimnames (tables[[1]]), list (statistic=names(tables))) output } ## Compute x <- rk.list (warpbreaks[["tension"]]) yvars <- rk.list (warpbreaks[["wool"]], warpbreaks[["tension"]]) results <- list() chisquares <- list () # calculate crosstabs for (i in 1:length (yvars)) { count <- table(x[[1]], yvars[[i]]) chisquares[[i]] <- chisq.test (count, simulate.p.value = FALSE) results[[i]] <- bind.tables ("count"=addmargins (count), "% of row"=addmargins (prop.table(count, 1) * 100, quiet=TRUE, FUN=function(x) NA), "% of column"=addmargins (prop.table(count, 2) * 100, quiet=TRUE, FUN=function(x) NA), "% of total"=addmargins (prop.table(count) * 100), "expected"=addmargins (chisquares[[i]]$expected, quiet=TRUE, FUN=function(x) NA)) } ## Print result rk.header ("Crosstabs (n to 1)", level=1) for (i in 1:length (results)) { rk.header ("Crosstabs (n to 1)", parameters=list ("Dependent", names (x)[1], "Independent", names (yvars)[i]), level=2) rk.print (ftable (results[[i]], col.vars=2)) rk.header ("Pearson's Chi Square Test for Crosstabs", list ("Dependent", names (x)[1], "Independent", names (yvars)[i], "Method", chisquares[[i]][["method"]]), level=2) rk.results (list ('Statistic'=chisquares[[i]][['statistic']], 'df'=chisquares[[i]][['parameter']], 'p'=chisquares[[i]][['p.value']])) rk.header ("Barplot for Crosstabs", list ("Dependent"=names (x)[1], "Independent"=names (yvars)[i], "colors"="rainbow", "Type"="juxtaposed", "Legend"="FALSE"), level=2) rk.graph.on () try ({ counts <- results[[i]][, , "count"] # adjust the range so that the labels will fit yrange <- range (counts, na.rm=TRUE) * 1.2 if (yrange[1] > 0) yrange[1] <- 0 if (yrange[2] < 0) yrange[2] <- 0 bplot <- barplot(counts, col=rainbow (if(is.matrix(counts)) dim(counts) else length(counts)), beside=TRUE, ylim = yrange) text (bplot,counts, labels=counts, pos=3, offset=.5) }) rk.graph.off () } }) rkward-0.6.1/tests/analysis_plugins/anscombe_test.rkout0000644000175000017500000000130212124345417023021 0ustar thomasthomas

Anscombe-Glynn test of kurtosis

Parameters

  • Alternative Hypothesis: two.sided
DATE
Variable NameKurtosis estimator (tau)Transformation (z)p-valueAlternative HypothesisLengthNAs
breaks4.4992.09970.035759kurtosis is not equal to 3540
test50z1.799-3.29040.0010006kurtosis is not equal to 3500
test10y1.7758-0.981640.32628kurtosis is not equal to 3111
rkward-0.6.1/tests/analysis_plugins/correlation_matrix_plot.rkcommands.R0000644000175000017500000000215412124345417026336 0ustar thomasthomaslocal({ ## Prepare cor.graph <- function(x) { panel.cor <- function(x, y, digits=3, cex.cor, use="pairwise.complete.obs", method="pearson", scale=TRUE) { usr <- par("usr"); on.exit(par(usr)) par(usr = c(0, 1, 0, 1)) r <- abs(cor(x, y, use=use, method=method)) txt <- format(c(r, 0.123456789), digits=digits)[1] if(missing(cex.cor)) cex <- 0.8/strwidth(txt) test <- cor.test(x,y, use=use, method=method) Signif <- symnum(test$p.value, corr = FALSE, na = FALSE, cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " ")) if(scale) text(0.5, 0.5, txt, cex = cex * r) else text(0.5, 0.5, txt, cex = cex) text(.8, .8, Signif, cex=cex, col=2) } pairs(x, lower.panel=panel.smooth, upper.panel=panel.cor) } ## Print result data <- data.frame (rock) rk.header ("Correlation Matrix Plot", parameters=list ("Method", "pearson", "Exclusion", "pairwise.complete.obs", "Precision", "3 digits", "Scale text", "TRUE")) rk.graph.on () try ({ cor.graph (data) }) rk.graph.off () rk.print("Legend:\t'***': p < 0.001 -- '**': p < 0.01 -- '*': p < 0.05 -- '.'': p < 0.1") }) rkward-0.6.1/tests/analysis_plugins/moments_moment.rkout0000644000175000017500000000100312124345417023232 0ustar thomasthomas

Statistical Moment

Parameters

  • Order: 1
  • Compute central moments: FALSE
  • Compute absolute moments: FALSE
  • Remove missing values: TRUE
DATE
Variable NameMoment
test50z102
test50y225.5
test50x125.5
test10z22
test10y205.5
test10x105.5
rkward-0.6.1/tests/analysis_plugins/wilcoxon_tests.rkout0000644000175000017500000000466212124345417023273 0ustar thomasthomas

Wilcoxon signed rank test

Parameters

  • Comparing: test50x
  • H1: true location is not equal to 0
  • Continuity correction in normal approximation for p-value: FALSE
  • Compute exact p-value: TRUE
  • Paired test: FALSE
  • mu: 0.00
DATE
Variable NamesStatisticLocation ShiftHypothesispConfidence interval percentConfidence interval of differenceDifference in Location
test50x12750two.sided1.7764e-1595121
130
125.5

Wilcoxon signed rank test with continuity correction

Parameters

  • Comparing: test50x against test50y
  • H1: true location shift is less than 0
  • Continuity correction in normal approximation for p-value: TRUE
  • Compute exact p-value: automatic
  • Paired test: TRUE
  • mu: 0.00
DATE
Variable NamesStatisticLocation ShiftHypothesisp
test50x
test50y
00less8.0007e-13

Exact Wilcoxon signed rank test

Parameters

  • Comparing: test50x
  • H1: true mu is not equal to 0
  • Continuity correction in normal approximation for p-value: FALSE
  • Compute exact p-value: TRUE
  • Paired test: FALSE
  • mu: 0.00
DATE
Variable NamesStatisticLocation ShiftHypothesispConfidence interval percentConfidence interval of differenceDifference in Location
test50x12750two.sided1.7764e-1595121
130
125.5

Asymptotic Wilcoxon signed rank test

Parameters

  • Comparing: test50x against test50y
  • H1: true mu is less than 0
  • Continuity correction in normal approximation for p-value: TRUE
  • Compute exact p-value: automatic
  • Paired test: TRUE
  • mu: 0.00
DATE
Variable NamesStatisticLocation ShiftHypothesisp
test50x
test50y
00less7.6873e-13
rkward-0.6.1/tests/analysis_plugins/basic_statistics_b.rkout0000644000175000017500000000051512124345417024034 0ustar thomasthomas

Univariate statistics

Parameters

  • Remove Missing values: TRUE
DATE
Variable NameMinimum valuesMaximum values
test10x101 102110 109 108
height58 5972 71 70
rkward-0.6.1/tests/analysis_plugins/basic_statistics_a.rkcommands.R0000644000175000017500000000333512124345417025230 0ustar thomasthomaslocal({ ## Compute vars <- rk.list (women[["weight"]], test50x) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Number of obs'] <- length(var) results[i, 'Number of missing values'] <- sum(is.na(var)) results[i, 'Mean'] <- mean(var,na.rm=TRUE) results[i, 'Variance'] <- var(var,na.rm=TRUE) results[i, 'Sd'] <- sd(var,na.rm=TRUE) results[i, 'Minimum'] <- min(var,na.rm=TRUE) results[i, 'Maximum'] <- max(var,na.rm=TRUE) results[i, 'Median'] <- median(var,na.rm=TRUE) results[i, 'Inter Quartile Range'] <- IQR(var,na.rm=TRUE) temp <- quantile (var,na.rm=TRUE) results[i, 'Quartiles'] <- paste (names (temp), temp, sep=": ", collapse=" ") temp <- quantile (var, probs=seq (0, 1, length.out=6), na.rm=TRUE) results[i, 'Quantiles'] <- paste (names (temp), temp, sep=": ", collapse=" ") #robust statistics results[i, 'Trimmed Mean'] <- mean (var, trim=0.05, na.rm=TRUE) results[i, 'Median Absolute Deviation'] <- mad (var, constant=1.4628, na.rm=TRUE) require ("MASS") temp <- list (c('Location Estimate','Mad scale estimate'), c(NA,NA)) try({ temp <- hubers (var, k = 1.50,tol=0.07, mu=3, s=,initmu =median(var)) }) results[i, 'Huber M-Estimator'] <- paste (temp[[1]], temp[[2]], sep=": ", collapse=" ") } # store results .GlobalEnv$my.data <- results ## Print result rk.header ("Univariate statistics", parameters=list ( "Remove Missing values", TRUE, "Trimmed value for trimmed mean", "0.05" , "Constant for the MAD estimation", "1.4628" , "Winsorized values for Huber estimator", "1.50" , "Tolerance in Huber estimator", "0.07" , "Mu for Huber estimator", "3" , "S for Huber estimator", "" , "Initial value", "median" )) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/pp_test.rkcommands.R0000644000175000017500000000125212124345417023047 0ustar thomasthomaslocal({ ## Compute vars <- rk.list (rock[["shape"]], rock[["perm"]], rock[["peri"]], rock[["area"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- PP.test (var, lshort = FALSE) results[i, 'Dickey-Fuller'] <- test$statistic results[i, 'Truncation lag parameter'] <- test$parameter results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("Phillips-Perron Test for Unit Roots", parameters=list ("Truncation lag parameter short ('TRUE') or long ('FALSE')", "FALSE")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/bartlett_test.rkout0000644000175000017500000000050112124345417023053 0ustar thomasthomas

Bartlett test of homogeneity of variances

DATE
VariablesBartlett s K-squareddfp-value
breaks
test50z
test50y
test50x
test10z
test10y
test10x
249.6464.9026e-51
rkward-0.6.1/tests/analysis_plugins/correlation_matrix.rkcommands.R0000644000175000017500000000504512124345417025302 0ustar thomasthomaslocal({ ## Compute # cor requires all objects to be inside the same data.frame. # Here we construct such a temporary frame from the input variables data.list <- rk.list (test50x, test50y, test50z) data <- as.data.frame (data.list, check.names=FALSE) # calculate correlation matrix result <- cor (data, use="pairwise.complete.obs", method="pearson") # calculate matrix of probabilities result.p <- matrix (nrow = length (data), ncol = length (data), dimnames=list (names (data), names (data))) for (i in 1:length (data)) { for (j in i:length (data)) { if (i != j) { t <- cor.test (data[[i]], data[[j]], method="pearson") result.p[i, j] <- t$p.value result.p[j, i] <- sum (complete.cases (data[[i]], data[[j]])) } } } ## Print result rk.header ("Correlation Matrix", parameters=list ("Method", "pearson", "Exclusion", "pairwise.complete.obs")) rk.results (data.frame (result, check.names=FALSE), titles=c ("Coefficient", names (data))) rk.header ("p-values and sample size", level=4) rk.results (data.frame (result.p, check.names=FALSE), titles=c ("n \\ p", names (data))) }) local({ ## Prepare require(polycor) ## Compute # cor requires all objects to be inside the same data.frame. # Here we construct such a temporary frame from the input variables data.list <- rk.list (test10y, test10a) data <- as.data.frame (data.list, check.names=FALSE) # calculate correlation matrix result <- matrix (nrow = length (data), ncol = length (data), dimnames=list (names (data), names (data))) # calculate matrix of probabilities result.p <- matrix (nrow = length (data), ncol = length (data), dimnames=list (names (data), names (data))) for (i in 1:length (data)) { for (j in i:length (data)) { if (i != j) { t <- polychor(data[[i]], data[[j]]) result[i, j] <- result[j, i] <- t } } } ## Print result rk.header ("Correlation Matrix", parameters=list ("Method", "polychoric", "Exclusion", "pairwise")) rk.results (data.frame (result, check.names=FALSE), titles=c ("Coefficient", names (data))) }) local({ ## Compute # cor requires all objects to be inside the same data.frame. # Here we construct such a temporary frame from the input variables data.list <- rk.list (women[["weight"]], women[["height"]]) data <- as.data.frame (data.list, check.names=FALSE) # calculate correlation matrix result <- cor (data, use="pairwise.complete.obs", method="pearson") ## Print result rk.header ("Correlation Matrix", parameters=list ("Method", "pearson", "Exclusion", "pairwise.complete.obs")) rk.results (data.frame (result, check.names=FALSE), titles=c ("Coefficient", names (data))) }) rkward-0.6.1/tests/analysis_plugins/grubbs_test.rkcommands.R0000644000175000017500000000424112124345417023715 0ustar thomasthomaslocal({ ## Prepare require(outliers) ## Compute vars <- rk.list (warpbreaks[["breaks"]], test10z) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) var <- na.omit (var) # omit NAs for all further calculations results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- grubbs.test (var, type = 10, opposite = FALSE, two.sided = TRUE) results[i, 'G'] <- t$statistic["G"] results[i, 'U'] <- t$statistic["U"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis']<- rk.describe.alternative (t) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Grubbs tests for one or two outliers in data sample", parameters=list ("Type", "10", "Opposite", "FALSE", "two-sided", "TRUE")) rk.results (results) }) local({ ## Prepare require(outliers) ## Compute vars <- rk.list (warpbreaks[["breaks"]], test10z) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) var <- na.omit (var) # omit NAs for all further calculations results[i, 'Error'] <- tryCatch ({ # This is the core of the calculation t <- grubbs.test (var, type = 11, opposite = TRUE, two.sided = FALSE) results[i, 'G'] <- t$statistic["G"] results[i, 'U'] <- t$statistic["U"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis']<- rk.describe.alternative (t) results[i, 'Mean'] <- mean (var) results[i, 'Standard Deviation'] <- sd (var) results[i, 'Median'] <- median (var) results[i, 'Minimum'] <- min (var) results[i, 'Maximum'] <- max (var) NA # no error }, error=function (e) e$message) # catch any errors } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Grubbs tests for one or two outliers in data sample", parameters=list ("Type", "11", "Opposite", "TRUE", "two-sided", "FALSE")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/t_test.rkcommands.R0000644000175000017500000000342712124345417022701 0ustar thomasthomaslocal({ ## Prepare names <- rk.get.description (test50x, test50y) ## Compute result <- t.test (x=test50x, y=test50y, alternative="two.sided") ## Print result rk.header (result$method, parameters=list ("Comparing"=paste (names[1], "against", names[2]), "H1"=rk.describe.alternative (result), "Equal variances"="not assumed")) rk.results (list ( 'Variable Name'=names, 'estimated mean'=result$estimate, 'degrees of freedom'=result$parameter, t=result$statistic, p=result$p.value, 'confidence interval percent'=(100 * attr(result$conf.int, "conf.level")), 'confidence interval of difference'=result$conf.int )) }) local({ ## Prepare names <- rk.get.description (test10y, test10z) ## Compute result <- t.test (x=test10y, y=test10z, alternative="less", paired=TRUE, conf.level=0.99) ## Print result rk.header (result$method, parameters=list ("Comparing"=paste (names[1], "against", names[2]), "H1"=rk.describe.alternative (result))) rk.results (list ( 'Variable Name'=names, 'estimated mean'=result$estimate, 'degrees of freedom'=result$parameter, t=result$statistic, p=result$p.value, 'confidence interval percent'=(100 * attr(result$conf.int, "conf.level")), 'confidence interval of difference'=result$conf.int )) }) local({ ## Prepare names <- rk.get.description (test10z) ## Compute result <- t.test (x=test10z, mu=20.00, alternative="two.sided") ## Print result rk.header (result$method, parameters=list ("Comparing"=paste (names[1], "against constant"), "H1"=rk.describe.alternative (result))) rk.results (list ( 'Variable Name'=names, 'estimated mean'=result$estimate, 'degrees of freedom'=result$parameter, t=result$statistic, p=result$p.value, 'confidence interval percent'=(100 * attr(result$conf.int, "conf.level")), 'confidence interval of difference'=result$conf.int )) }) rkward-0.6.1/tests/analysis_plugins/skewness_kurtosis.rkout0000644000175000017500000000101512124345417024001 0ustar thomasthomas

Skewness and Kurtosis

DATE
Variable NameSkewnessKurtosisExcess KurtosisGeary KurtosisLengthNAs
weight0.252471.9002-1.09980.86258150
height01.7893-1.21070.8641150
breaks1.2724.4991.4990.75029540
rkward-0.6.1/tests/analysis_plugins/crosstab_multi.rkcommands.R0000644000175000017500000000064512124345417024430 0ustar thomasthomaslocal({ ## Prepare data <- data.frame (test_table[["A"]],test_table[["B"]],test_table[["C"]],test_table[["D"]], check.names=FALSE) datadescription <- paste (rk.get.description (test_table[["A"]],test_table[["B"]],test_table[["C"]],test_table[["D"]]), collapse=", "); ## Compute result <- ftable (data); ## Print result rk.header ("Crosstabs (n to n)", parameters=list ("Variables"=datadescription)) rk.print (result) }) rkward-0.6.1/tests/analysis_plugins/agostino_test.rkout0000644000175000017500000000121112124345417023054 0ustar thomasthomas

D'Agostino test of skewness

Parameters

  • Alternative Hypothesis: two.sided
DATE
Variable Nameskewness estimator (skew)transformation (z)p-valueAlternative HypothesisLengthNAs
breaks1.2722.31450.020643data have a skewness540
test50z001data have a skewness500
test10x001data have a skewness111
rkward-0.6.1/tests/analysis_plugins/kpss_test.rkcommands.R0000644000175000017500000000125712124345417023415 0ustar thomasthomaslocal({ ## Prepare require (tseries) ## Compute vars <- rk.list (test50x, test50y, test50z) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) try ({ test <- kpss.test (var, null = "Trend", lshort = FALSE) results[i, 'KPSS Trend'] <- test$statistic results[i, 'Truncation lag parameter'] <- test$parameter results[i, 'p-value'] <- test$p.value }) } ## Print result rk.header ("KPSS Test for Level Stationarity", parameters=list ("null hypothesis"="Trend", "version of truncation lag parameter"="long")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/mood_test.rkcommands.R0000644000175000017500000000053412124345417023370 0ustar thomasthomaslocal({ ## Compute result <- mood.test (test50z, test50x, alternative = "two.sided") ## Print result names <- rk.get.description (test50z, test50x) rk.header (result$method, parameters=list ("Alternative Hypothesis", rk.describe.alternative (result))) rk.results (list ( 'Variables'=names, 'Z'=result$statistic, 'p-value'=result$p.value)) }) rkward-0.6.1/tests/analysis_plugins/fligner_test.rkout0000644000175000017500000000054612124345417022671 0ustar thomasthomas

Fligner-Killeen test of homogeneity of variances

DATE
VariablesFligner-Killeen:med X^2 test statisticdfp-value
weight
height
test50z
test50y
test50x
test10z
test10y
test10x
112.8772.3321e-21
rkward-0.6.1/tests/analysis_plugins/bonett_test.rkcommands.R0000644000175000017500000000163312124345417023726 0ustar thomasthomaslocal({ ## Prepare require(moments) ## Compute vars <- rk.list (test50z, test50y, test50x, test10z, test10y, test10x) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] results[i, 'Error'] <- tryCatch ({ t <- bonett.test (var, alternative = "two.sided") results[i, 'Kurtosis estimator (tau)'] <- t$statistic["tau"] results[i, 'Transformation (z)'] <- t$statistic["z"] results[i, 'p-value'] <- t$p.value results[i, 'Alternative Hypothesis'] <- rk.describe.alternative (t) NA # no error }, error=function (e) e$message) # catch any errors results[i, 'Length'] <- length (var) results[i, 'NAs'] <- length (which(is.na(var))) } if (all (is.na (results$'Error'))) results$'Error' <- NULL ## Print result rk.header ("Bonett-Seier test of Geary's kurtosis", parameters=list ("Alternative Hypothesis", "two.sided")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/skewness_kurtosis.rkcommands.R0000644000175000017500000000120612124345417025175 0ustar thomasthomaslocal({ ## Prepare require(moments) ## Compute vars <- rk.list (women[["weight"]], women[["height"]], warpbreaks[["breaks"]]) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] try ({ results[i, 'Skewness'] <- skewness (var, na.rm=TRUE) results[i, 'Kurtosis'] <- kurtosis (var, na.rm=TRUE) results[i, 'Excess Kurtosis'] <- results[i, 'Kurtosis'] - 3 results[i, 'Geary Kurtosis'] <- geary (var, na.rm=TRUE) }) results[i, 'Length'] <- length (var) results[i, 'NAs'] <- sum (is.na(var)) } ## Print result rk.header ("Skewness and Kurtosis") rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/kpss_test.messages.txt0000644000175000017500000000031612124345417023477 0ustar thomasthomasWarning messages: 1: In kpss.test(var, null = "Trend", lshort = FALSE) : p-value greater than printed p-value 2: In kpss.test(var, null = "Trend", lshort = FALSE) : p-value greater than printed p-value rkward-0.6.1/tests/analysis_plugins/moments_moment.rkcommands.R0000644000175000017500000000105612124345417024434 0ustar thomasthomaslocal({ ## Prepare require(moments) ## Compute vars <- rk.list (test50z, test50y, test50x, test10z, test10y, test10x) results <- data.frame ('Variable Name'=I(names (vars)), check.names=FALSE) for (i in 1:length (vars)) { var <- vars[[i]] try (results[i, 'Moment'] <- moment (var, order = 1, central = FALSE, absolute = FALSE, na.rm = TRUE)) } ## Print result rk.header ("Statistical Moment", parameters=list ("Order", "1", "Compute central moments", "FALSE", "Compute absolute moments", "FALSE", "Remove missing values", "TRUE")) rk.results (results) }) rkward-0.6.1/tests/analysis_plugins/ansari_bradley_test.rkcommands.R0000644000175000017500000000233012124345417025405 0ustar thomasthomaslocal({ ## Prepare names <- rk.get.description (test50x, test10y) ## Compute result <- ansari.test (test50x, test10y, alternative = "two.sided", exact=TRUE, conf.int = TRUE) ## Print result rk.header (result$method, parameters=list ( "Comparing", paste (names[1], "against", names[2]), "Alternative Hypothesis", rk.describe.alternative(result), "Compute exact p-value", "yes", "Confidence Level", "0.95" )) rk.results (list ( 'Variable Names'=names, 'statistic'=result$statistic, 'null.value'=result$null.value, p=result$p.value, 'confidence interval percent'=(100 * attr(result$conf.int, "conf.level")), 'confidence interval of difference'=result$conf.int, 'estimate of the ratio of scales'=result$estimate)) }) local({ ## Prepare names <- rk.get.description (test50x, test50y) ## Compute result <- ansari.test (test50x, test50y, alternative = "less", conf.int = FALSE) ## Print result rk.header (result$method, parameters=list ( "Comparing", paste (names[1], "against", names[2]), "Alternative Hypothesis", rk.describe.alternative(result), "Compute exact p-value", "automatic")) rk.results (list ( 'Variable Names'=names, 'statistic'=result$statistic, 'null.value'=result$null.value, p=result$p.value)) }) rkward-0.6.1/tests/analysis_plugins/correlation_matrix.rkout0000644000175000017500000000253512124345417024111 0ustar thomasthomas

Correlation Matrix

Parameters

  • Method: pearson
  • Exclusion: pairwise.complete.obs
DATE
Coefficienttest50xtest50ytest50z
test50x111
test50y111
test50z111

p-values and sample size


n \ ptest50xtest50ytest50z
test50xNA00
test50y50NA0
test50z5050NA

Correlation Matrix

Parameters

  • Method: polychoric
  • Exclusion: pairwise
DATE
Coefficienttest10ytest10a
test10yNA0.60718
test10a0.60718NA

Correlation Matrix

Parameters

  • Method: pearson
  • Exclusion: pairwise.complete.obs
DATE
Coefficientweightheight
weight10.99549
height0.995491
rkward-0.6.1/tests/analysis_plugins/hp_filter.rkout0000644000175000017500000000222112124345417022150 0ustar thomasthomas

Hodrick-Prescott Filter

Parameters

  • Lambda: 1600
DATE

Min.1st Qu.MedianMean3rd Qu.Max.
316 323 335 337 351 363

Min.1st Qu.MedianMean3rd Qu.Max.
-3.72 -1.66 0.25 0.00 1.80 3.92

rkward-0.6.1/tests/analysis_plugins/dixon_test.rkout0000644000175000017500000000227112124345417022361 0ustar thomasthomas

Dixon test for outlier

Parameters

  • Type: 0
  • Opposite: FALSE
  • two-sided: TRUE
DATE
Variable NameLengthNAsDixon Q-statisticp-valueAlternative HypothesisMeanStandard DeviationMedianMinimumMaximum
weight1500.227270.76454highest value 164 is an outlier136.7315.499135115164
height1500.166670.4514highest value 72 is an outlier654.4721655872

Dixon test for outlier

Parameters

  • Type: 0
  • Opposite: TRUE
  • two-sided: FALSE
DATE
Variable NameDixon Q-statisticp-valueAlternative Hypothesis
weight0.128210.86257lowest value 115 is an outlier
height0.166670.7743lowest value 58 is an outlier
rkward-0.6.1/tests/analysis_plugins/pp_test.rkout0000644000175000017500000000122512124345417021655 0ustar thomasthomas

Phillips-Perron Test for Unit Roots

Parameters

  • Truncation lag parameter short ('TRUE') or long ('FALSE'): FALSE
DATE
Variable NameLengthNAsDickey-FullerTruncation lag parameterp-value
shape480-8.262190.01
perm480-2.430290.40232
peri480-3.482390.054578
area480-4.027390.01627
rkward-0.6.1/tests/analysis_plugins/bonett_test.rkout0000644000175000017500000000216212124345417022532 0ustar thomasthomas

Bonett-Seier test of Geary's kurtosis

Parameters

  • Alternative Hypothesis: two.sided
DATE
Variable NameKurtosis estimator (tau)Transformation (z)p-valueAlternative HypothesisLengthNAs
test50z50-2.22240.026254kurtosis is not equal to sqrt(2/pi)500
test50y12.5-2.22240.026254kurtosis is not equal to sqrt(2/pi)500
test50x12.5-2.22240.026254kurtosis is not equal to sqrt(2/pi)500
test10z10-1.13040.25832kurtosis is not equal to sqrt(2/pi)111
test10y2.5-1.13040.25832kurtosis is not equal to sqrt(2/pi)111
test10x2.5-1.13040.25832kurtosis is not equal to sqrt(2/pi)111
rkward-0.6.1/tests/analysis_plugins/mood_test.rkout0000644000175000017500000000042612124345417022176 0ustar thomasthomas

Mood two-sample test of scale

Parameters

  • Alternative Hypothesis: two.sided
DATE
VariablesZp-value
test50z
test50x
6.32172.5873e-10
rkward-0.6.1/tests/analysis_plugins/correlation_matrix_plot.rkout0000644000175000017500000000055212124345417025144 0ustar thomasthomas

Correlation Matrix Plot

Parameters

  • Method: pearson
  • Exclusion: pairwise.complete.obs
  • Precision: 3 digits
  • Scale text: TRUE
DATE

Legend: '***': p < 0.001 -- '**': p < 0.01 -- '*': p < 0.05 -- '.'': p < 0.1

rkward-0.6.1/tests/analysis_plugins/linear_regression.rkout0000644000175000017500000000443612124345417023720 0ustar thomasthomas

Linear Regression

DATE


  • Call: lm(formula = warpbreaks[["breaks"]] ~ warpbreaks[["tension"]] + Call: warpbreaks[["wool"]])
  • Residuals

    Min1QMedian3QMax
    -19.5 -8.1 -2.1 6.5 30.7


  • Coefficients

    EstimateStd. Errort valuePr(>|t|)
    (Intercept) 39.28 3.16 12.42 < 2e-16 ***
    warpbreaks[["tension"]]M -10.00 3.87 -2.58 0.01279 *
    warpbreaks[["tension"]]H -14.72 3.87 -3.80 0.00039 ***
    warpbreaks[["wool"]]B -5.78 3.16 -1.83 0.07361 .

    --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1


  • Residuals standard error: 11.617 on 50 degrees of freedom
  • Multiple R-Squared:0.269
  • Adjusted R-Squared:0.225
  • F-statistics: 6.138 on 3 and 50 DF. P-value:0.001.rkward-0.6.1/tests/analysis_plugins/F_test.rkcommands.R0000644000175000017500000000111512124345417022613 0ustar thomasthomaslocal({ ## Compute result <- var.test (test50z, test50y, alternative = "two.sided", ratio = 1.00) ## Print result names <- rk.get.description (test50z, test50y) rk.header (result$method, parameters=list ("Confidence Level", "0.95", "Alternative Hypothesis", rk.describe.alternative(result))) rk.results (list ( 'Variables'=names, 'F'=result$statistic["F"], 'Numerator DF'=result$parameter["num df"], 'Denominator DF'=result$parameter["denom df"], 'p-value'=result$p.value, 'Lower CI'=result$conf.int[1], 'Upper CI'=result$conf.int[2], 'ratio of variances'=result$estimate)) }) rkward-0.6.1/tests/analysis_plugins/crosstab_n_to_1.rkout0000644000175000017500000003505712124345417023270 0ustar thomasthomas

    Crosstabs (n to 1)

    DATE

    Crosstabs (n to 1)

    Parameters

    • Dependent: tension
    • Independent: wool

    wool = Awool = B
    tension = L99
    tension = M99
    tension = H99

    Pearson's Chi Square Test for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: wool
    • Method: Pearson's Chi-squared test

    Statisticdfp
    021

    Barplot for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: wool
    • colors: default
    • Type: juxtaposed
    • Legend: FALSE


    Crosstabs (n to 1)

    Parameters

    • Dependent: tension
    • Independent: tension

    tension = Ltension = Mtension = H
    tension = L1800
    tension = M0180
    tension = H0018

    Pearson's Chi Square Test for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: tension
    • Method: Pearson's Chi-squared test

    Statisticdfp
    10841.9429e-22

    Barplot for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: tension
    • colors: default
    • Type: juxtaposed
    • Legend: FALSE


    Crosstabs (n to 1)

    DATE

    Crosstabs (n to 1)

    Parameters

    • Dependent: tension
    • Independent: wool

    A B Sum
    statistic
    L count 9.000 9.000 18.000
    % of row 50.000 50.000 NA
    % of column 33.333 33.333 NA
    % of total 16.667 16.667 33.333
    expected 9.000 9.000 NA
    M count 9.000 9.000 18.000
    % of row 50.000 50.000 NA
    % of column 33.333 33.333 NA
    % of total 16.667 16.667 33.333
    expected 9.000 9.000 NA
    H count 9.000 9.000 18.000
    % of row 50.000 50.000 NA
    % of column 33.333 33.333 NA
    % of total 16.667 16.667 33.333
    expected 9.000 9.000 NA
    Sum count 27.000 27.000 54.000
    % of row NA NA NA
    % of column NA NA NA
    % of total 50.000 50.000 100.000
    expected NA NA NA

    Pearson's Chi Square Test for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: wool
    • Method: Pearson's Chi-squared test

    Statisticdfp
    021

    Barplot for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: wool
    • colors: rainbow
    • Type: juxtaposed
    • Legend: FALSE


    Crosstabs (n to 1)

    Parameters

    • Dependent: tension
    • Independent: tension

    L M H Sum
    statistic
    L count 18.000 0.000 0.000 18.000
    % of row 100.000 0.000 0.000 NA
    % of column 100.000 0.000 0.000 NA
    % of total 33.333 0.000 0.000 33.333
    expected 6.000 6.000 6.000 NA
    M count 0.000 18.000 0.000 18.000
    % of row 0.000 100.000 0.000 NA
    % of column 0.000 100.000 0.000 NA
    % of total 0.000 33.333 0.000 33.333
    expected 6.000 6.000 6.000 NA
    H count 0.000 0.000 18.000 18.000
    % of row 0.000 0.000 100.000 NA
    % of column 0.000 0.000 100.000 NA
    % of total 0.000 0.000 33.333 33.333
    expected 6.000 6.000 6.000 NA
    Sum count 18.000 18.000 18.000 54.000
    % of row NA NA NA NA
    % of column NA NA NA NA
    % of total 33.333 33.333 33.333 100.000
    expected NA NA NA NA

    Pearson's Chi Square Test for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: tension
    • Method: Pearson's Chi-squared test

    Statisticdfp
    10841.9429e-22

    Barplot for Crosstabs

    Parameters

    • Dependent: tension
    • Independent: tension
    • colors: rainbow
    • Type: juxtaposed
    • Legend: FALSE


    rkward-0.6.1/tests/analysis_plugins/linear_regression.rkcommands.R0000644000175000017500000000027512124345417025107 0ustar thomasthomaslocal({ ## Compute results <- summary.lm (lm (warpbreaks[["breaks"]] ~ warpbreaks[["tension"]] + warpbreaks[["wool"]])) ## Print result rk.header ("Linear Regression") rk.print(results) }) rkward-0.6.1/rkward/0000755000175000017500000000000012124351133013645 5ustar thomasthomasrkward-0.6.1/rkward/CMakeLists.txt0000644000175000017500000000772612124345412016424 0ustar thomasthomasIF(NOT ${PROJECT_NAME} STREQUAL "rkward") MESSAGE (FATAL_ERROR "Build triggered from wrong subdirectory. Please point cmake to the parent of this directory, instead.") ENDIF(NOT ${PROJECT_NAME} STREQUAL "rkward") INCLUDE(SetVersionNumber.cmake) IF(Q_WS_MAC) SET(RKWARD_FRONTEND_LOCATION ${BIN_INSTALL_DIR}/rkward.frontend.app/Contents/MacOS) SET(CPACK_BUNDLE_ICON rkward.icns) SET(CPACK_BUNDLE_NAME RKWard) SET(CPACK_BUNDLE_STARTUP_COMMAND rkward) SET(KDE_START_DBUS "launchctl load -w /opt/rkward/Library/LaunchAgents/org.freedesktop.dbus-session.plist") # SET(CPACK_BUNDLE_PLIST ${CMAKE_SOURCE_DIR}/rkward/Info.plist) ELSE(Q_WS_MAC) SET(RKWARD_FRONTEND_LOCATION ${LIBEXEC_INSTALL_DIR}) ENDIF(Q_WS_MAC) ADD_SUBDIRECTORY( dataeditor ) ADD_SUBDIRECTORY( settings ) ADD_SUBDIRECTORY( plugin ) ADD_SUBDIRECTORY( agents ) ADD_SUBDIRECTORY( rbackend ) ADD_SUBDIRECTORY( dialogs ) ADD_SUBDIRECTORY( scriptbackends ) ADD_SUBDIRECTORY( misc ) ADD_SUBDIRECTORY( core ) ADD_SUBDIRECTORY( icons ) IF(WIN32) ADD_SUBDIRECTORY( qwinhost ) LIST(APPEND RKWARD_ADDLIBS qwinhost) ELSE(WIN32) LIST(APPEND RKWARD_ADDLIBS ${X11_X11_LIB}) ENDIF(WIN32) ADD_SUBDIRECTORY( windows ) ADD_SUBDIRECTORY( syntax ) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ${X11_X11_INCLUDE_PATH} ) SET(RKWard_Sources rkward.cpp main.cpp rkglobals.cpp robjectviewer.cpp rkconsole.cpp rkwardapplication.cpp ) # auto-gen sources #QT4_AUTOMOC(${RKWard_Sources}) # not needed here, as KDE4_ADD_EXECUTABLE mocs the sources in this dir. # somehow the needed libdirs for R do not get passed down automatically GET_DIRECTORY_PROPERTY(R_SHAREDLIBDIR DIRECTORY rbackend LINK_DIRECTORIES) LINK_DIRECTORIES(${R_SHAREDLIBDIR}) KDE4_ADD_EXECUTABLE(rkward.frontend ${RKWard_Sources}) SET_TARGET_PROPERTIES(rkward.frontend PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "RKWard") # wrapper script GET_DIRECTORY_PROPERTY(R_EXECUTABLE DIRECTORY rbackend DEFINITION R_EXECUTABLE) IF(WIN32) SET(RKWARD_WRAPPER_TEMPLATE rkward.bat.in) SET(RKWARD_WRAPPER_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/rkward.bat) # For now use wrapper binary on Windows, only, and only as an alternative to rkward.bat. # Will become standard startup mechanism on all platforms, in a later release ADD_SUBDIRECTORY( wrapper ) ELSE(WIN32) SET(RKWARD_WRAPPER_TEMPLATE rkward.sh.in) SET(RKWARD_WRAPPER_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/rkward) ENDIF(WIN32) CONFIGURE_FILE( ${RKWARD_WRAPPER_TEMPLATE} ${RKWARD_WRAPPER_SCRIPT} @ONLY) ADD_DEPENDENCIES(rkward.frontend ${RKWARD_WRAPPER_SCRIPT}) IF(Q_WS_MAC) SET(RKWARD_INFOPLIST_TEMPLATE Info.plist.in) SET(RKWARD_INFOPLIST_FILE ${CMAKE_SOURCE_DIR}/rkward/Info.plist) CONFIGURE_FILE( ${RKWARD_INFOPLIST_TEMPLATE} ${RKWARD_INFOPLIST_FILE} @ONLY) ENDIF(Q_WS_MAC) TARGET_LINK_LIBRARIES(rkward.frontend ${KDE4_KDECORE_LIBS} windows ${RKWARD_ADDLIBS} agents dialogs plugin settings dataeditor core scriptbackends rbackend misc ktexteditor ${KDE4_KHTML_LIBS} ${KDE4_KFILE_LIBS} ${KDE4_KDEUI_LIBS} ${KDE4_KROSSCORE_LIBS} ${QT_QTSCRIPT_LIBRARY} ${QT_QTNETWORK_LIBRARY}) ########### install files ############### INSTALL(DIRECTORY plugins/ pages DESTINATION ${DATA_INSTALL_DIR}/rkward PATTERN .svn EXCLUDE) INSTALL(FILES resource.ver rkwardui.rc rkconsolepart.rc DESTINATION ${DATA_INSTALL_DIR}/rkward ) IF(Q_WS_MAC) INSTALL(TARGETS rkward.frontend DESTINATION ${BIN_INSTALL_DIR}) INSTALL(PROGRAMS ${RKWARD_WRAPPER_SCRIPT} DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents/MacOS) INSTALL(FILES ${CMAKE_SOURCE_DIR}/rkward/icons/app-icon/rkward.icns DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents/Resources) INSTALL(FILES ${RKWARD_INFOPLIST_FILE} DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents) ELSE(Q_WS_MAC) INSTALL(TARGETS rkward.frontend DESTINATION ${LIBEXEC_INSTALL_DIR}) INSTALL(PROGRAMS ${RKWARD_WRAPPER_SCRIPT} DESTINATION ${BIN_INSTALL_DIR}) ENDIF(Q_WS_MAC) INSTALL(FILES rkward.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) rkward-0.6.1/rkward/rkward.bat.in0000644000175000017500000000132312124345412016236 0ustar thomasthomas@ECHO off REM Wrapper script to start RKWard. REM If the *first* parameter is "--debugger", run through the specified debugger REM ATTENTION: The SET R_BINARY=... line should remain on line number 10 of this script. REM This is where the NSIS installer assumes to find it. SET R_BINARY=@R_EXECUTABLE@ REM Explicit initialization of KDE, in case Windows 7 asks for admin priviledges ECHO Initializing KDE %~dsp0\kdeinit4.exe ECHO Starting RKWard SET RKWARD.BIN=%~dsp0\rkward.frontend.exe SET RKWARD_ENSURE_PREFIX=%~dsp0\.. SET PATH=%~dsp0;%PATH% SET DEBUGGER= IF NOT "%1" == "--debugger" GOTO run REM else: SHIFT SET DEBUGGER=%~s1 SHIFT :run CALL "%R_BINARY%" CMD %DEBUGGER% %RKWARD.BIN% %1 %2 %3 %4 %5 %6 %7 %8 %9 rkward-0.6.1/rkward/dialogs/0000755000175000017500000000000012124345414015274 5ustar thomasthomasrkward-0.6.1/rkward/dialogs/CMakeLists.txt0000644000175000017500000000140412124345414020033 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(dialogs_STAT_SRCS startupdialog.cpp rkloadlibsdialog.cpp rkreadlinedialog.cpp rkimportdialog.cpp rkselectlistdialog.cpp rkrecoverdialog.cpp ) QT4_AUTOMOC(${dialogs_STAT_SRCS}) ADD_LIBRARY(dialogs STATIC ${dialogs_STAT_SRCS}) ########### install files ############### #original Makefile.am contents follow: #INCLUDES = $(all_includes) #METASOURCES = AUTO #noinst_LIBRARIES = libdialogs.a #noinst_HEADERS = startupdialog.h rkloadlibsdialog.h rkreadlinedialog.h rkimportdialog.h #libdialogs_a_SOURCES = startupdialog.cpp rkloadlibsdialog.cpp rkreadlinedialog.cpp rkimportdialog.cpp rkward-0.6.1/rkward/dialogs/rkloadlibsdialog.cpp0000644000175000017500000013075712124345414021323 0ustar thomasthomas/*************************************************************************** rkloadlibsdialog - description ------------------- begin : Mon Sep 6 2004 copyright : (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkloadlibsdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "../settings/rksettingsmodulegeneral.h" #include "../settings/rksettings.h" #include "../core/robjectlist.h" #include "../misc/rkprogresscontrol.h" #include "../misc/rkstandardicons.h" #include "../misc/rkcommonfunctions.h" #include "../debug.h" #include #define GET_CURRENT_LIBLOCS_COMMAND 1 RKLoadLibsDialog::RKLoadLibsDialog (QWidget *parent, RCommandChain *chain, bool modal) : KPageDialog (parent) { RK_TRACE (DIALOGS); RKLoadLibsDialog::chain = chain; installation_process = 0; setFaceType (KPageDialog::Tabbed); setModal (modal); setCaption (i18n ("Configure Packages")); setButtons (KDialog::Ok | KDialog::Apply | KDialog::Cancel | KDialog::User1); LoadUnloadWidget *luwidget = new LoadUnloadWidget (this); addPage (luwidget, i18n ("Local packages")); connect (this, SIGNAL (installedPackagesChanged ()), luwidget, SLOT (updateInstalledPackages ())); install_packages_widget = new InstallPackagesWidget (this); install_packages_pageitem = addPage (install_packages_widget, i18n ("Install / Update / Remove")); setButtonText (KDialog::User1, i18n ("Configure Repositories")); connect (this, SIGNAL (currentPageChanged(KPageWidgetItem*,KPageWidgetItem*)), this, SLOT (slotPageChanged())); QTimer::singleShot (0, this, SLOT (slotPageChanged())); num_child_widgets = 3; accepted = false; RKGlobals::rInterface ()->issueCommand (".libPaths ()", RCommand::App | RCommand::GetStringVector, QString (), this, GET_CURRENT_LIBLOCS_COMMAND, chain); } RKLoadLibsDialog::~RKLoadLibsDialog () { RK_TRACE (DIALOGS); if (accepted) KPageDialog::accept (); else KPageDialog::reject (); } void RKLoadLibsDialog::slotPageChanged () { RK_TRACE (DIALOGS); if (!currentPage ()) return; QTimer::singleShot (0, currentPage ()->widget (), SLOT (activated())); } //static void RKLoadLibsDialog::showInstallPackagesModal (QWidget *parent, RCommandChain *chain, const QString &package_name) { RK_TRACE (DIALOGS); RKLoadLibsDialog *dialog = new RKLoadLibsDialog (parent, chain, true); dialog->auto_install_package = package_name; QTimer::singleShot (0, dialog, SLOT (automatedInstall ())); // to get past the dialog->exec, below dialog->setCurrentPage (dialog->install_packages_pageitem); dialog->exec (); RK_TRACE (DIALOGS); } void RKLoadLibsDialog::automatedInstall () { RK_TRACE (DIALOGS); install_packages_widget->initialize (); install_packages_widget->trySelectPackage (auto_install_package); } void RKLoadLibsDialog::tryDestruct () { RK_TRACE (DIALOGS); if (num_child_widgets <= 0) { deleteLater (); } } void RKLoadLibsDialog::childDeleted () { RK_TRACE (DIALOGS); --num_child_widgets; tryDestruct (); } void RKLoadLibsDialog::slotButtonClicked (int button) { RK_TRACE (DIALOGS); switch (button) { case KDialog::Ok: accepted = true; hide (); emit (okClicked ()); // will self-destruct via childDeleted () break; case KDialog::Cancel: accepted = false; hide (); emit (cancelClicked ()); // will self-destruct via childDeleted () break; case KDialog::Apply: emit (applyClicked ()); break; case KDialog::User1: RKSettings::configureSettings (RKSettings::PageRPackages, this, chain); break; } } void RKLoadLibsDialog::closeEvent (QCloseEvent *e) { RK_TRACE (DIALOGS); e->accept (); // do as if cancel button was clicked: slotButtonClicked (KDialog::Cancel); } void RKLoadLibsDialog::rCommandDone (RCommand *command) { RK_TRACE (DIALOGS); if (command->getFlags () == GET_CURRENT_LIBLOCS_COMMAND) { RK_ASSERT (command->getDataType () == RData::StringVector); RK_ASSERT (command->getDataLength () > 0); library_locations = command->stringVector (); emit (libraryLocationsChanged (library_locations)); } else { RK_ASSERT (false); } } void RKLoadLibsDialog::addLibraryLocation (const QString& new_loc) { RK_TRACE (DIALOGS); if (library_locations.contains (new_loc)) return; if (QDir ().mkpath (new_loc)) RKSettingsModuleRPackages::addLibraryLocation (new_loc, chain); library_locations.prepend (new_loc); emit (libraryLocationsChanged (library_locations)); } bool RKLoadLibsDialog::removePackages (QStringList packages, QStringList from_liblocs) { RK_TRACE (DIALOGS); bool as_root = false; QStringList not_removing; QStringList not_writable; QList not_writable_int; for (int i = 0; i < packages.count (); ++i) { if (RKSettingsModuleRPackages::essentialPackages ().contains (packages[i])) { not_removing.append (i18n ("Package %1 at %2", packages[i], from_liblocs[i])); packages.removeAt (i); from_liblocs.removeAt (i); --i; } else { QFileInfo fi (from_liblocs[i]); if (!fi.isWritable ()) { not_writable.append (i18n ("Package %1 at %2", packages[i], from_liblocs[i])); not_writable_int.append (i); } } } if (!not_removing.isEmpty ()) { KMessageBox::informationList (this, i18n ("The following packages, which you have selected for removal, are essential to the operation of RKWard, and will not be removed. If you are absolutely sure, that you want to remove these packages, please do so on the R command line."), not_removing, i18n ("Not removing certain packages")); } if (packages.isEmpty ()) return false; if (!not_writable.isEmpty ()) { #ifdef Q_OS_WIN KMessageBox::informationList (this, i18n ("Your current user permissions do not allow removing the following packages. These will be skipped."), not_writable, i18n ("Insufficient user permissions")); int res = KMessageBox::No; #else int res = KMessageBox::questionYesNoList (this, i18n ("Your current user permissions do not allow removing the following packages. Do you want to skip these packages, or do you want to proceed with administrator privileges (you will be prompted for the password)?"), not_writable, i18n ("Insufficient user permissions"), KGuiItem ("Become root"), KGuiItem ("Skip these packages")); #endif if (res == KMessageBox::Yes) as_root = true; else { for (int i = not_writable_int.count () - 1; i >= 0; --i) { packages.removeAt (not_writable_int[i]); from_liblocs.removeAt (not_writable_int[i]); } } } if (packages.isEmpty ()) return false; RK_ASSERT (packages.count () == from_liblocs.count ()); QStringList descriptions; QString command; for (int i = 0; i < packages.count (); ++i) { descriptions.append (i18n ("Package %1 at %2", packages[i], from_liblocs[i])); // NOTE: the "lib"-parameter to remove.packages is NOT matched to the pkgs-parameter. Therefore, we simply concatenate a bunch of single removals. command.append ("remove.packages (" + RObject::rQuote (packages[i]) + ", " + RObject::rQuote (from_liblocs[i]) + ")\n"); } // last check. This may be an annoying third dialog, in the worst case, but at least it can be turned off. int res = KMessageBox::warningContinueCancelList (this, i18n ("You are about to remove the following packages. Are you sure you want to proceed?"), descriptions, i18n ("About to remove packages"), KStandardGuiItem::cont(), KStandardGuiItem::cancel(), "remove_packages_warning"); if (res != KMessageBox::Continue) return false; runInstallationCommand (command, as_root, i18n ("Please stand by while removing selected packages"), i18n ("Removing packages")); return true; } bool RKLoadLibsDialog::installPackages (const QStringList &packages, QString to_libloc, bool install_suggested_packages, const QStringList& repos) { RK_TRACE (DIALOGS); if (packages.isEmpty ()) return false; bool as_root = false; QString altlibloc = QDir (RKSettingsModuleGeneral::filesPath ()).absoluteFilePath ("library"); QFileInfo fi = QFileInfo (to_libloc); if (!fi.isWritable ()) { QString mcaption = i18n ("Selected library location not writable"); QString message = i18n ("

    The directory you have selected for installation (%1) is not writable with your current user permissions.

    " "

    Would you like to install to %2, instead (you can also press \"Cancel\" and use the \"Configure Repositories\"-button to set up a different directory)?

    ", to_libloc, altlibloc); #ifdef Q_WS_WIN message.append (i18n ("

    Alternatively, if you have access to an administrator account on this machine, you can use that to install the package(s), or " "you could change the permissions of '%1'. Sorry, automatic switching to Administrator is not yet supported in RKWard on Windows.

    ", to_libloc)); int res = KMessageBox::warningContinueCancel (this, message, mcaption, KGuiItem (i18n ("Install to %1", altlibloc))); if (res == KMessageBox::Continue) to_libloc = altlibloc; #else message.append (i18n ("

    Alternatively, if you are the administrator of this machine, you can try to install the packages as root (you'll be prompted for the root password).

    ")); int res = KMessageBox::warningYesNoCancel (this, message, mcaption, KGuiItem (i18n ("Install to %1", altlibloc)), KGuiItem (i18n ("Become root"))); if (res == KMessageBox::Yes) to_libloc = altlibloc; if (res == KMessageBox::No) as_root = true; #endif if (res == KMessageBox::Cancel) return false; } addLibraryLocation (to_libloc); QString command_string = "install.packages (pkgs=c (\"" + packages.join ("\", \"") + "\")" + ", lib=\"" + to_libloc + "\""; QString downloaddir = QDir (RKSettingsModuleGeneral::filesPath ()).filePath ("package_archive"); if (RKSettingsModuleRPackages::archivePackages ()) { QDir (RKSettingsModuleGeneral::filesPath ()).mkdir ("package_archive"); command_string += ", destdir=\"" + downloaddir + "\""; } if (install_suggested_packages) command_string += ", suggested_packages=TRUE"; command_string += ")\n"; QString repos_string = "options (repos= c("; for (int i = 0; i < repos.count (); ++i) { if (i) repos_string.append (", "); repos_string.append (RObject::rQuote (repos[i])); } repos_string.append ("))\n"); repos_string.append (RKSettingsModuleRPackages::pkgTypeOption ()); if (as_root) { KUser user; command_string.append ("system (\"chown " + user.loginName() + ' ' + downloaddir + "/*\")\n"); } runInstallationCommand (repos_string + command_string, as_root, i18n ("Please stand by while installing selected packages"), i18n ("Installing packages")); return true; } void RKLoadLibsDialog::runInstallationCommand (const QString& command, bool as_root, const QString& message, const QString& title) { RK_TRACE (DIALOGS); // TODO: won't work with some versions of GCC (which ones exactly)? // QFile file (QDir (RKSettingsModuleGeneral::filesPath ()).filePath ("install_script.R")); // WORKAROUND: QDir dir = RKSettingsModuleGeneral::filesPath (); QFile file (dir.filePath ("install_script.R")); // WORKADOUND END if (file.open (QIODevice::WriteOnly)) { QTextStream stream (&file); stream << command; stream << "q ()\n"; file.close(); } else { RK_ASSERT (false); } QString R_binary (getenv ("R_binary")); QString call; QStringList params; #ifdef Q_WS_WIN RK_ASSERT (!as_root); call = R_binary; #else if (as_root) { call = KStandardDirs::findExe ("kdesu"); params << "-t" << "--" << R_binary; } else { call = R_binary; } #endif params << "--no-save" << "--no-restore" << "--file=" + file.fileName (); installation_process = new QProcess (); installation_process->setProcessChannelMode (QProcess::SeparateChannels); connect (installation_process, SIGNAL (finished(int,QProcess::ExitStatus)), this, SLOT (processExited(int,QProcess::ExitStatus))); connect (installation_process, SIGNAL (readyReadStandardOutput()), this, SLOT (installationProcessOutput())); connect (installation_process, SIGNAL (readyReadStandardError()), this, SLOT (installationProcessError())); RKProgressControl *installation_progress = new RKProgressControl (this, message, title, RKProgressControl::CancellableProgress); connect (this, SIGNAL (installationComplete()), installation_progress, SLOT (done())); connect (this, SIGNAL (installationOutput(const QString&)), installation_progress, SLOT (newOutput(const QString&))); connect (this, SIGNAL (installationError(const QString&)), installation_progress, SLOT (newError(const QString&))); installation_process->start (call, params, QIODevice::ReadWrite | QIODevice::Unbuffered); if (!installation_progress->doModal (true)) { installation_process->kill (); installation_process->waitForFinished (5000); } file.remove (); delete installation_process; installation_process = 0; emit (installedPackagesChanged ()); } void RKLoadLibsDialog::installationProcessOutput () { RK_TRACE (DIALOGS); RK_ASSERT (installation_process); emit (installationOutput (QString::fromLocal8Bit (installation_process->readAllStandardOutput()))); } void RKLoadLibsDialog::installationProcessError () { RK_TRACE (DIALOGS); RK_ASSERT (installation_process); emit (installationError (QString::fromLocal8Bit (installation_process->readAllStandardError ()))); } void RKLoadLibsDialog::processExited (int exitCode, QProcess::ExitStatus exitStatus) { RK_TRACE (DIALOGS); if (exitCode || (exitStatus != QProcess::NormalExit)) { installationError ("\n" + i18n ("Installation process died with exit code %1", exitCode)); } emit (installationComplete ()); } ////////////////////// LoadUnloadWidget //////////////////////////// #define GET_INSTALLED_PACKAGES 1 #define GET_LOADED_PACKAGES 2 #define LOAD_PACKAGE_COMMAND 3 LoadUnloadWidget::LoadUnloadWidget (RKLoadLibsDialog *dialog) : QWidget (0) { RK_TRACE (DIALOGS); LoadUnloadWidget::parent = dialog; QVBoxLayout *mvbox = new QVBoxLayout (this); mvbox->setContentsMargins (0, 0, 0, 0); QHBoxLayout *hbox = new QHBoxLayout (); mvbox->addLayout (hbox); hbox->setContentsMargins (0, 0, 0, 0); QVBoxLayout *instvbox = new QVBoxLayout (); hbox->addLayout (instvbox); instvbox->setContentsMargins (0, 0, 0, 0); QVBoxLayout *buttonvbox = new QVBoxLayout (); hbox->addLayout (buttonvbox); buttonvbox->setContentsMargins (0, 0, 0, 0); QVBoxLayout *loadedvbox = new QVBoxLayout (); hbox->addLayout (loadedvbox); loadedvbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (i18n ("Installed packages"), this); installed_view = new QTreeWidget (this); installed_view->setHeaderLabels (QStringList () << i18n ("Name") << i18n ("Title") << i18n ("Version") << i18n ("Location")); installed_view->setSelectionMode (QAbstractItemView::ExtendedSelection); instvbox->addWidget (label); instvbox->addWidget (installed_view); load_button = new QPushButton (RKStandardIcons::getIcon (RKStandardIcons::ActionAddRight), i18n ("Load"), this); connect (load_button, SIGNAL (clicked ()), this, SLOT (loadButtonClicked ())); detach_button = new QPushButton (RKStandardIcons::getIcon (RKStandardIcons::ActionRemoveLeft), i18n ("Unload"), this); connect (detach_button, SIGNAL (clicked ()), this, SLOT (detachButtonClicked ())); buttonvbox->addStretch (1); buttonvbox->addWidget (load_button); buttonvbox->addWidget (detach_button); buttonvbox->addStretch (2); label = new QLabel (i18n ("Loaded packages"), this); loaded_view = new QTreeWidget (this); loaded_view->setHeaderLabel (i18n ("Name")); loaded_view->setSelectionMode (QAbstractItemView::ExtendedSelection); loadedvbox->addWidget (label); loadedvbox->addWidget (loaded_view); connect (loaded_view, SIGNAL (itemSelectionChanged()), this, SLOT (updateButtons())); connect (installed_view, SIGNAL (itemSelectionChanged()), this, SLOT (updateButtons())); connect (dialog, SIGNAL (okClicked ()), this, SLOT (ok ())); connect (dialog, SIGNAL (applyClicked ()), this, SLOT (apply ())); connect (dialog, SIGNAL (cancelClicked ()), this, SLOT (cancel ())); connect (this, SIGNAL (destroyed ()), dialog, SLOT (childDeleted ())); updateInstalledPackages (); updateButtons (); } LoadUnloadWidget::~LoadUnloadWidget () { RK_TRACE (DIALOGS); } void LoadUnloadWidget::activated () { RK_TRACE (DIALOGS); installed_view->setFocus (); } void LoadUnloadWidget::rCommandDone (RCommand *command) { RK_TRACE (DIALOGS); if (command->failed ()) return; if (command->getFlags () == GET_INSTALLED_PACKAGES) { RK_ASSERT (command->getDataLength () == 5); RData::RDataStorage data = command->structureVector (); QStringList package = data.at (0)->stringVector (); QStringList title = data.at (1)->stringVector (); QStringList version = data.at (2)->stringVector (); QStringList libpath = data.at (3)->stringVector (); int count = package.size (); RK_ASSERT (count == title.size ()); RK_ASSERT (count == version.size ()); RK_ASSERT (count == libpath.size ()); for (int i=0; i < count; ++i) { QTreeWidgetItem* item = new QTreeWidgetItem (installed_view); item->setText (0, package.at (i)); item->setText (1, title.at (i)); item->setText (2, version.at (i)); item->setText (3, libpath.at (i)); } installed_view->resizeColumnToContents (0); installed_view->setSortingEnabled (true); installed_view->sortItems (0, Qt::AscendingOrder); } else if (command->getFlags () == GET_LOADED_PACKAGES) { RK_ASSERT (command->getDataType () == RData::StringVector); QStringList data = command->stringVector (); for (int i=0; i < data.size (); ++i) { QTreeWidgetItem* item = new QTreeWidgetItem (loaded_view); item->setText (0, data.at (i)); if (RKSettingsModuleRPackages::essentialPackages ().contains (data.at (i))) { #if QT_VERSION >= 0x040400 item->setFlags (Qt::NoItemFlags); #else item->setFlags (0); #endif } } loaded_view->resizeColumnToContents (0); loaded_view->setSortingEnabled (true); loaded_view->sortItems (0, Qt::AscendingOrder); updateCurrentList (); } else if (command->getFlags () == LOAD_PACKAGE_COMMAND) { emit (loadUnloadDone ()); } else { RK_ASSERT (false); } } void LoadUnloadWidget::updateInstalledPackages () { RK_TRACE (DIALOGS); installed_view->clear (); loaded_view->clear (); RKGlobals::rInterface ()->issueCommand (".rk.get.installed.packages ()", RCommand::App | RCommand::Sync | RCommand::GetStructuredData, QString::null, this, GET_INSTALLED_PACKAGES, parent->chain); RKGlobals::rInterface ()->issueCommand (".packages ()", RCommand::App | RCommand::Sync | RCommand::GetStringVector, QString::null, this, GET_LOADED_PACKAGES, parent->chain); } void LoadUnloadWidget::loadButtonClicked () { RK_TRACE (DIALOGS); loaded_view->clearSelection (); QList sel = installed_view->selectedItems (); for (int i = 0; i < sel.size (); ++i) { QString package_name = sel[i]->text (0); // is this package already loaded? QList loaded = loaded_view->findItems (package_name, Qt::MatchExactly, 0); if (loaded.isEmpty ()) { QTreeWidgetItem* item = new QTreeWidgetItem (loaded_view); item->setText (0, package_name); item->setSelected (true); } } } void LoadUnloadWidget::detachButtonClicked () { RK_TRACE (DIALOGS); installed_view->clearSelection (); QList sel = loaded_view->selectedItems (); for (int i = 0; i < sel.size (); ++i) { QString package_name = sel[i]->text (0); delete (sel[i]); // remove from list of loaded packages // select corresponding package in list of available packages QList installed = installed_view->findItems (package_name, Qt::MatchExactly, 0); if (!installed.isEmpty ()) { //RK_ASSERT (installed.count () == 1); // In fact, several versions of one package can be installed in several library locations installed[0]->setSelected (true); } } } void LoadUnloadWidget::updateButtons () { RK_TRACE (DIALOGS); detach_button->setEnabled (!loaded_view->selectedItems ().isEmpty ()); load_button->setEnabled (!installed_view->selectedItems ().isEmpty ()); } void LoadUnloadWidget::ok () { RK_TRACE (DIALOGS); doLoadUnload (); deleteLater (); } void LoadUnloadWidget::updateCurrentList () { RK_TRACE (DIALOGS); prev_packages.clear (); for (int i = 0; i < loaded_view->topLevelItemCount (); ++i) { prev_packages.append (loaded_view->topLevelItem (i)->text (0)); } } void LoadUnloadWidget::doLoadUnload () { RK_TRACE (DIALOGS); RKProgressControl *control = new RKProgressControl (this, i18n ("There has been an error while trying to load / unload packages. See transcript below for details"), i18n ("Error while handling packages"), RKProgressControl::DetailedError); connect (this, SIGNAL (loadUnloadDone ()), control, SLOT (done ())); // load packages previously not loaded for (int i = 0; i < loaded_view->topLevelItemCount (); ++i) { QTreeWidgetItem* loaded = loaded_view->topLevelItem (i); if (!prev_packages.contains (loaded->text (0))) { RCommand *command = new RCommand ("library (\"" + loaded->text (0) + "\")", RCommand::App | RCommand::ObjectListUpdate); control->addRCommand (command); RKGlobals::rInterface ()->issueCommand (command, parent->chain); } } // detach packages previously attached QStringList packages_to_remove; for (QStringList::Iterator it = prev_packages.begin (); it != prev_packages.end (); ++it) { QList loaded = loaded_view->findItems ((*it), Qt::MatchExactly, 0); if (loaded.isEmpty ()) { // no longer in the list packages_to_remove.append ("package:" + *it); } } if (!packages_to_remove.isEmpty ()) { QStringList messages = RObjectList::getObjectList ()->detachPackages (packages_to_remove, parent->chain, control); if (!messages.isEmpty ()) KMessageBox::sorry (this, messages.join ("\n")); } // find out, when we're done RCommand *command = new RCommand (QString (), RCommand::EmptyCommand, QString (), this, LOAD_PACKAGE_COMMAND); RKGlobals::rInterface ()->issueCommand (command, parent->chain); control->doNonModal (true); } void LoadUnloadWidget::apply () { RK_TRACE (DIALOGS); doLoadUnload (); updateCurrentList (); } void LoadUnloadWidget::cancel () { RK_TRACE (DIALOGS); deleteLater (); } /////////////////////// InstallPackagesWidget ////////////////////////// InstallPackagesWidget::InstallPackagesWidget (RKLoadLibsDialog *dialog) : QWidget (0) { RK_TRACE (DIALOGS); InstallPackagesWidget::parent = dialog; QVBoxLayout *mvbox = new QVBoxLayout (this); mvbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (i18n ("Many packages are available on CRAN (Comprehensive R Archive Network), and other repositories
    (click \"Configure Repositories\" to add more sources)."), this); mvbox->addWidget (label); QHBoxLayout *hbox = new QHBoxLayout (); mvbox->addLayout (hbox); hbox->setContentsMargins (0, 0, 0, 0); packages_status = new RKRPackageInstallationStatus (this); packages_view = new QTreeView (this); packages_view->setSortingEnabled (true); model = new RKRPackageInstallationStatusSortFilterModel (this); model->setSourceModel (packages_status); model->setFilterCaseSensitivity (Qt::CaseInsensitive); model->setSortCaseSensitivity (Qt::CaseInsensitive); packages_view->setModel (model); packages_view->setEnabled (false); packages_view->setMinimumHeight (packages_view->sizeHintForRow (0) * 15); // force a decent height hbox->addWidget (packages_view); hbox->setStretchFactor (packages_view, 2); QVBoxLayout *buttonvbox = new QVBoxLayout (); hbox->addLayout (buttonvbox); buttonvbox->setContentsMargins (0, 0, 0, 0); label = new QLabel (i18n ("Show only packages matching:"), this); filter_edit = new QLineEdit ("*", this); RKCommonFunctions::setTips (i18n ("

    You can limit the packages displayed in the list to with names or titles matching a filter string.

    Note: To search for partial strings, add '*' to the start and / or end of the filter, e.g. '*stat*'.

    "), label, filter_edit); connect (filter_edit, SIGNAL (textChanged(const QString&)), this, SLOT (filterStringChanged(const QString&))); filterStringChanged (filter_edit->text ()); mark_all_updates_button = new QPushButton (i18n ("Select all updates"), this); connect (mark_all_updates_button, SIGNAL (clicked()), this, SLOT (markAllUpdates())); install_params = new PackageInstallParamsWidget (this); connect (parent, SIGNAL (libraryLocationsChanged (const QStringList &)), install_params, SLOT (liblocsChanged (const QStringList &))); buttonvbox->addWidget (label); buttonvbox->addWidget (filter_edit); buttonvbox->addStretch (1); buttonvbox->addWidget (mark_all_updates_button); buttonvbox->addStretch (1); buttonvbox->addWidget (install_params); buttonvbox->addStretch (1); connect (dialog, SIGNAL (okClicked ()), this, SLOT (ok ())); connect (dialog, SIGNAL (applyClicked ()), this, SLOT (apply ())); connect (dialog, SIGNAL (cancelClicked ()), this, SLOT (cancel ())); connect (this, SIGNAL (destroyed ()), dialog, SLOT (childDeleted ())); } InstallPackagesWidget::~InstallPackagesWidget () { RK_TRACE (DIALOGS); } void InstallPackagesWidget::activated () { RK_TRACE (DIALOGS); filter_edit->setFocus (); if (!packages_status->initialized ()) { initialize (); packages_view->sortByColumn (RKRPackageInstallationStatus::PackageName, Qt::AscendingOrder); } } void InstallPackagesWidget::initialize () { RK_TRACE (DIALOGS); packages_status->initialize (parent->chain); packages_view->setEnabled (true); for (int i = 0; i <= RKRPackageInstallationStatus::PackageName; ++i) { packages_view->resizeColumnToContents (i); #ifdef Q_WS_MAC // HACK: Without this, the column is just too narrow on MacOS X, and the icon is hidden if (i == RKRPackageInstallationStatus::EnhancesRKWard) packages_view->setColumnWidth (i, packages_view->columnWidth (i) + 16); #endif } } void InstallPackagesWidget::filterStringChanged (const QString& new_filter) { RK_TRACE (DIALOGS); QString f = new_filter; if (f.isEmpty ()) f = "*"; model->setFilterWildcard (f); } void InstallPackagesWidget::trySelectPackage (const QString &package_name) { RK_TRACE (DIALOGS); QModelIndex index = packages_status->markPackageForInstallation (package_name); if (!index.isValid ()) { KMessageBox::sorry (0, i18n ("The package requested by the backend (\"%1\") was not found in the package repositories. Maybe the package name was mis-spelled. Or maybe you need to add additional repositories via the \"Configure Repositories\"-button.", package_name), i18n ("Package not available")); } else { packages_view->scrollTo (model->mapFromSource (index)); } } void InstallPackagesWidget::markAllUpdates () { RK_TRACE (DIALOGS); QModelIndex index = packages_status->markAllUpdatesForInstallation (); packages_view->setExpanded (model->mapFromSource (index), true); packages_view->scrollTo (model->mapFromSource (index)); } void InstallPackagesWidget::doInstall (bool refresh) { RK_TRACE (DIALOGS); bool changed = false; QStringList remove; QStringList remove_locs; packages_status->packagesToRemove (&remove, &remove_locs); if (!remove.isEmpty ()) { RK_ASSERT (remove.count () == remove_locs.count ()); changed |= parent->removePackages (remove, remove_locs); } QStringList install = packages_status->packagesToInstall (); if (!install.isEmpty ()) { QString dest = install_params->installLocation (); if (!dest.isEmpty ()) { changed |= parent->installPackages (install, dest, install_params->installSuggestedPackages (), packages_status->currentRepositories ()); } } if (changed && refresh) { packages_status->clearStatus (); initialize (); } } void InstallPackagesWidget::apply () { RK_TRACE (DIALOGS); doInstall (true); } void InstallPackagesWidget::ok () { RK_TRACE (DIALOGS); doInstall (false); deleteLater (); } void InstallPackagesWidget::cancel () { RK_TRACE (DIALOGS); deleteLater (); } /////////////////////// PackageInstallParamsWidget ////////////////////////// #include #include PackageInstallParamsWidget::PackageInstallParamsWidget (QWidget *parent) : QWidget (parent) { RK_TRACE (DIALOGS); QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); vbox->addWidget (new QLabel (i18n ("Install packages to:"), this)); libloc_selector = new QComboBox (this); vbox->addWidget (libloc_selector); suggested_packages = new QCheckBox (i18n ("Install suggested packages"), this); suggested_packages->setChecked (false); RKCommonFunctions::setTips (QString ("

    %1

    ").arg (i18n ("Some packages \"suggest\" additional packages, which are not strictly necessary for using that package, but which may provide additional related functionality. Check this option to include such additional suggested packages.")), suggested_packages); vbox->addStretch (); vbox->addWidget (suggested_packages); } PackageInstallParamsWidget::~PackageInstallParamsWidget () { RK_TRACE (DIALOGS); } bool PackageInstallParamsWidget::installSuggestedPackages () { RK_TRACE (DIALOGS); return suggested_packages->isChecked (); } QString PackageInstallParamsWidget::installLocation () { RK_TRACE (DIALOGS); return libloc_selector->currentText (); } void PackageInstallParamsWidget::liblocsChanged (const QStringList &newlist) { RK_TRACE (DIALOGS); libloc_selector->clear (); libloc_selector->insertItems (0, newlist); } /////////// RKRPackageInstallationStatus ///////////////// RKRPackageInstallationStatus::RKRPackageInstallationStatus (QObject* parent) : QAbstractItemModel (parent) { RK_TRACE (DIALOGS); _initialized = false; } RKRPackageInstallationStatus::~RKRPackageInstallationStatus () { RK_TRACE (DIALOGS); } QModelIndex RKRPackageInstallationStatus::markAllUpdatesForInstallation () { RK_TRACE (DIALOGS); // inefficient, but so what... for (int i = updateable_packages_in_installed.count () - 1; i >= 0; --i) { markPackageForInstallation (installed_packages[updateable_packages_in_installed[i]]); } return index (UpdateablePackages, 0, QModelIndex ()); } QModelIndex RKRPackageInstallationStatus::markPackageForInstallation (const QString& package_name) { RK_TRACE (DIALOGS); // is the package available at all? QModelIndex pindex; int row = available_packages.indexOf (package_name); if (row < 0) return pindex; // find out, whether it is a new or and updateable package QModelIndex parent; int urow = updateable_packages_in_available.indexOf (row); if (urow >= 0) { parent = index (UpdateablePackages, 0); row = urow; } else { row = new_packages_in_available.indexOf (row); parent = index (NewPackages, 0); } if (row < 0) { RK_ASSERT (false); return pindex; } // mark for installation pindex = index (row, InstallationStatus, parent); setData (pindex, QVariant (Qt::Checked), Qt::CheckStateRole); return pindex; } void RKRPackageInstallationStatus::initialize (RCommandChain *chain) { RK_TRACE (DIALOGS); _initialized = true; // will be re-set to false, should the command fail / be cancelled RCommand *command = new RCommand (".rk.get.package.intallation.state ()", RCommand::App | RCommand::GetStructuredData); connect (command->notifier (), SIGNAL (commandFinished(RCommand*)), this, SLOT (statusCommandFinished(RCommand*))); RKProgressControl *control = new RKProgressControl (this, i18n ("

    Please stand by while searching for installed and available packages.

    Note: This requires a working internet connection, and may take some time, esp. if one or more repositories are temporarily unavailable.

    "), i18n ("Searching for packages"), RKProgressControl::CancellableProgress | RKProgressControl::AutoCancelCommands); control->addRCommand (command, true); RKGlobals::rInterface ()->issueCommand (command, chain); control->doModal (true); } void RKRPackageInstallationStatus::statusCommandFinished (RCommand *command) { RK_TRACE (DIALOGS); if (!command->succeeded ()) { RK_ASSERT (false); _initialized = false; return; } RK_ASSERT (command->getDataType () == RCommand::StructureVector); RK_ASSERT (command->getDataLength () == 5); RData::RDataStorage top = command->structureVector (); RData::RDataStorage available = top[0]->structureVector (); available_packages = available[0]->stringVector (); available_titles = available[1]->stringVector (); available_versions = available[2]->stringVector (); available_repos = available[3]->stringVector (); enhance_rk_in_available = available[4]->intVector (); RData::RDataStorage installed = top[1]->structureVector (); installed_packages = installed[0]->stringVector (); installed_titles = installed[1]->stringVector (); installed_versions = installed[2]->stringVector (); installed_libpaths = installed[3]->stringVector (); enhance_rk_in_installed = installed[4]->intVector (); installed_has_update.fill (false, installed_packages.count ()); new_packages_in_available = top[2]->intVector (); RData::RDataStorage updateable = top[3]->structureVector (); updateable_packages_in_installed = updateable[0]->intVector (); updateable_packages_in_available = updateable[1]->intVector (); for (int i = updateable_packages_in_installed.count () - 1; i >= 0; --i) { installed_has_update[updateable_packages_in_installed[i]] = true; } current_repos = top[4]->stringVector (); clearStatus (); } void RKRPackageInstallationStatus::clearStatus () { RK_TRACE (DIALOGS); available_status.fill (NoAction, available_packages.count ()); installed_status.fill (NoAction, installed_packages.count ()); reset (); } QVariant RKRPackageInstallationStatus::headerData (int section, Qt::Orientation orientation, int role) const { if (orientation != Qt::Horizontal) return QVariant (); if ((role == Qt::DecorationRole) && (section == EnhancesRKWard)) return QApplication::windowIcon (); if (role == Qt::DisplayRole) { if (section == InstallationStatus) return QVariant (i18n ("Status")); if (section == PackageName) return QVariant (i18n ("Name")); if (section == PackageTitle) return QVariant (i18n ("Title")); if (section == Version) return QVariant (i18n ("Version")); if (section == Location) return QVariant (i18n ("Location")); } if ((role == Qt::ToolTipRole) || (role == Qt::WhatsThisRole)) { if (section == EnhancesRKWard) return QVariant (i18n ("

    Packages marked with an RKWard icon in this column provide enhancements to RKWard, typically in the form of additional graphical dialogs.

    ")); if (section == InstallationStatus) return QVariant (i18n ("

    You can select packages for installation / removal by checking / unchecking the corresponding boxes in this column.

    ")); if (section == PackageName) return QVariant (i18n ("

    The name of the package.

    ")); if (section == PackageTitle) return QVariant (i18n ("

    A descriptive title for the package. Currently this is not available for packages in non-local repositories.

    ")); if (section == Version) return QVariant (i18n ("

    Installed and / or available version of the package

    ")); if (section == Location) return QVariant (i18n ("

    Location where the package is installed / available

    ")); } return QVariant (); } int RKRPackageInstallationStatus::rowCount (const QModelIndex &parent) const { if (!parent.isValid ()) return TOPLEVELITEM_COUNT; // top level if (parent.parent ().isValid ()) return 0; // model has exactly two levels int row = parent.row (); if (row == UpdateablePackages) return updateable_packages_in_available.count (); if (row == NewPackages) return new_packages_in_available.count (); if (row == InstalledPackages) return installed_packages.count (); RK_ASSERT (false); return 0; } QVariant RKRPackageInstallationStatus::data (const QModelIndex &index, int role) const { if (!index.isValid ()) return QVariant (); if (!index.parent ().isValid ()) { // top level item int row = index.row (); if (row == UpdateablePackages) { if ((role == Qt::DisplayRole) && (index.column () == PackageName)) return QVariant (i18n ("Updateable Packages")); if (role == Qt::ToolTipRole) return QVariant (i18n ("Packages for which an update is available. This may include packages which were merely built against a newer version of R.")); } else if (row == NewPackages) { if ((role == Qt::DisplayRole) && (index.column () == PackageName)) return QVariant (i18n ("New Packages")); if (role == Qt::ToolTipRole) return QVariant (i18n ("Packages which are available for installation, but which are not currently installed.")); } else if (row == InstalledPackages) { if ((role == Qt::DisplayRole) && (index.column () == PackageName)) return QVariant (i18n ("Installed Packages")); if (role == Qt::ToolTipRole) return QVariant (i18n ("Packages which are installed locally. Note that updates may be available for these packages.")); } if (role == Qt::BackgroundColorRole) return QVariant (QColor (200, 200, 200)); } else if (!index.parent ().parent ().isValid ()) { // model has exactly two levels int col = index.column (); int prow = index.parent ().row (); int arow, irow; // row numbers in the lists of available_packages / installed_packages if (prow == UpdateablePackages) { arow = updateable_packages_in_available.value (index.row ()); irow = updateable_packages_in_installed.value (index.row ()); } else if (prow == NewPackages) arow = new_packages_in_available.value (index.row ()); else irow = index.row (); if (col == InstallationStatus) { PackageStatusChange stat; if (prow == InstalledPackages) stat = installed_status.value (irow, NoAction); else stat = available_status.value (arow, NoAction); if (stat == NoAction) { if (role == Qt::CheckStateRole) { if (prow == InstalledPackages) return Qt::PartiallyChecked; return Qt::Unchecked; } } else if (stat == Install) { if (role == Qt::CheckStateRole) return Qt::Checked; if (role == Qt::DisplayRole) return QVariant (i18n ("Install")); } else { if (role == Qt::CheckStateRole) return Qt::Unchecked; if (role == Qt::DisplayRole) return QVariant (i18n ("Remove")); } } else if (col == EnhancesRKWard) { if (role == Qt::DisplayRole) return QVariant (QString (" ")); // must have a placeholder, here, or Qt will collapse the column if ((role == Qt::DecorationRole) || (role == Qt::UserRole)) { bool enhance_rk; if (prow == InstalledPackages) enhance_rk = enhance_rk_in_installed.value (irow); else enhance_rk = enhance_rk_in_available.value (arow); if (role == Qt::UserRole) return QVariant (enhance_rk); if (enhance_rk) return QApplication::windowIcon (); } } else if (col == PackageName) { if (role == Qt::DisplayRole) { if (prow == InstalledPackages) return installed_packages.value (irow); else return available_packages.value (arow); } } else if (col == PackageTitle) { if (role == Qt::DisplayRole) { if (prow == InstalledPackages) return installed_titles.value (irow); else return available_titles.value (arow); } } else if (col == Version) { if (role == Qt::DisplayRole) { if (prow == InstalledPackages) return installed_versions.value (irow); else if (prow == NewPackages) return available_versions.value (arow); else return QVariant (installed_versions.value (irow) + " -> " + available_versions.value (arow)); } } else if (col == Location) { if (role == Qt::DisplayRole) { if (prow == InstalledPackages) return installed_libpaths.value (irow); else if (prow == NewPackages) return available_repos.value (arow); else return QVariant (installed_libpaths.value (irow) + " -> " + available_repos.value (arow)); } } } return QVariant (); } Qt::ItemFlags RKRPackageInstallationStatus::flags (const QModelIndex &index) const { qint64 pos = index.internalId (); Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled; if (pos >= 0) flags |= Qt::ItemIsUserCheckable; if (pos == InstalledPackages) flags |= Qt::ItemIsTristate; return flags; } QModelIndex RKRPackageInstallationStatus::index (int row, int column, const QModelIndex &parent) const { if (!parent.isValid ()) return createIndex (row, column, -1); // toplevel items return createIndex (row, column, parent.row ()); // parent.row () identifies, which toplevel item is the parent. } QModelIndex RKRPackageInstallationStatus::parent (const QModelIndex& index) const { if (index.internalId () == -1) return QModelIndex (); return (RKRPackageInstallationStatus::index (index.internalId (), 0, QModelIndex ())); } bool RKRPackageInstallationStatus::setData (const QModelIndex &index, const QVariant &value, int role) { RK_TRACE (DIALOGS); if (role != Qt::CheckStateRole) return false; if (!index.isValid ()) return false; if (!index.parent ().isValid ()) return false; QModelIndex bindex; PackageStatusChange stat = NoAction; int irow = -1; int arow = -1; if (value.toInt () == Qt::Checked) stat = Install; else if (value.toInt () == Qt::Unchecked) stat = Remove; if (index.internalId () == InstalledPackages) { irow = index.row (); if ((stat == Install) && (installed_status[irow] == Remove)) stat = NoAction; if (installed_has_update.value (irow, false)) { // NOTE: installed, and updatable packages are coupled int urow = updateable_packages_in_installed.indexOf (irow); RK_ASSERT (urow >= 0); arow = updateable_packages_in_available.value (urow); bindex = RKRPackageInstallationStatus::index (urow, InstallationStatus, RKRPackageInstallationStatus::index (UpdateablePackages, 0)); } } else { if (stat == Remove) stat = NoAction; if (index.internalId () == UpdateablePackages) { // NOTE: installed, and updatable packages are coupled irow = updateable_packages_in_installed.value (index.row ()); arow = updateable_packages_in_available.value (index.row ()); bindex = RKRPackageInstallationStatus::index (irow, InstallationStatus, RKRPackageInstallationStatus::index (InstalledPackages, 0)); } else { arow = new_packages_in_available.value (index.row ()); } } if (irow >= 0) installed_status[irow] = stat; if (arow >= 0) available_status[arow] = stat; dataChanged (index, index); if (bindex.isValid ()) dataChanged (bindex, bindex); return true; } QStringList RKRPackageInstallationStatus::packagesToInstall () const { RK_TRACE (DIALOGS); QStringList ret; for (int i = installed_status.count () - 1; i >= 0; --i) { if (installed_status[i] == Install) ret.append (installed_packages[i]); } for (int i = available_status.count () - 1; i >= 0; --i) { if (available_status[i] == Install) { QString package = available_packages[i]; if (!ret.contains (package)) ret.append (package); } } return ret; } bool RKRPackageInstallationStatus::packagesToRemove (QStringList *packages, QStringList *liblocs) { RK_TRACE (DIALOGS); bool anyfound = false; for (int i = installed_status.count () - 1; i >= 0; --i) { if (installed_status[i] == Remove) { packages->append (installed_packages[i]); liblocs->append (installed_libpaths[i]); anyfound = true; } } return anyfound; } RKRPackageInstallationStatusSortFilterModel::RKRPackageInstallationStatusSortFilterModel (QObject* parent) : QSortFilterProxyModel (parent) { RK_TRACE (DIALOGS); } RKRPackageInstallationStatusSortFilterModel::~RKRPackageInstallationStatusSortFilterModel () { RK_TRACE (DIALOGS); } bool RKRPackageInstallationStatusSortFilterModel::lessThan (const QModelIndex &left, const QModelIndex &right) const { if (!left.parent ().isValid ()) { // Disable sorting for the top level items return (left.row () > right.row ()); } if (left.column () == RKRPackageInstallationStatus::EnhancesRKWard) { return (!left.data (Qt::UserRole).toBool ()); } return QSortFilterProxyModel::lessThan (left, right); } bool RKRPackageInstallationStatusSortFilterModel::filterAcceptsRow (int source_row, const QModelIndex &source_parent) const { if (!source_parent.isValid ()) return true; // Never filter the top level item // filter on Name and Title QString name = source_parent.child (source_row, RKRPackageInstallationStatus::PackageName).data ().toString (); if (filterRegExp ().exactMatch (name)) return true; QString title = source_parent.child (source_row, RKRPackageInstallationStatus::PackageTitle).data ().toString (); return (filterRegExp ().exactMatch (title)); } #include "rkloadlibsdialog.moc" rkward-0.6.1/rkward/dialogs/rkrecoverdialog.cpp0000644000175000017500000000640212124345414021164 0ustar thomasthomas/*************************************************************************** rkrecoverdialog - description ------------------- begin : Fri Feb 04 2011 copyright : (C) 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkrecoverdialog.h" #include #include #include #include #include #include "../settings/rksettingsmodulegeneral.h" #include "../debug.h" RKRecoverDialog::RKRecoverDialog (const QStringList &recovery_files) { RK_TRACE (DIALOGS); RK_ASSERT (!recovery_files.isEmpty ()); const QString caption = i18n ("Crash recovery file detected"); setCaption (caption); setButtons (KDialog::Ok | KDialog::Cancel | KDialog::User1); setButtonText (KDialog::User1, i18n ("Show in file browser")); setButtonText (KDialog::Ok, i18n ("Recover")); connect (this, SIGNAL (user1Clicked()), this, SLOT (showButtonClicked ())); QLabel *label = new QLabel (this); QString text = QString ("

    %1

    ").arg (caption); text.append (i18n ("

    It looks like RKWard has crashed, recently. We are sorry about that! However, not everything is lost, and with a bit of luck, your data has been saved in time.

    ")); text.append (i18np ("

    A workspace recovery file exists in %2 as %3.

    ", "

    %1 workspace recovery files exist in %2, the most recent one of which is %3.

    ", recovery_files.count (), RKSettingsModuleGeneral::filesPath (), recovery_files.first ())); text.append (i18n ("

    Do you want to open this file, now? Note: You will be prompted again, next time you start RKWard, until you remove/rename the file, manually.

    ")); label->setText (text); label->setWordWrap (true); setMainWidget (label); } RKRecoverDialog::~RKRecoverDialog () { RK_TRACE (DIALOGS); } void RKRecoverDialog::showButtonClicked () { RK_TRACE (DIALOGS); new KRun (KUrl::fromLocalFile (RKSettingsModuleGeneral::filesPath ()), this); // KRun auto-deletes itself by default reject (); } //static KUrl RKRecoverDialog::checkRecoverCrashedWorkspace () { RK_TRACE (DIALOGS); QDir dir (RKSettingsModuleGeneral::filesPath ()); dir.setNameFilters (QStringList ("rkward_recover*.RData")); QStringList matches = dir.entryList (QDir::Files, QDir::Time); if (!matches.isEmpty ()) { RKRecoverDialog dialog (matches); dialog.exec (); if (dialog.result () == QDialog::Accepted) return (KUrl::fromLocalFile (dir.absoluteFilePath (matches.first ()))); } return KUrl (); } #include "rkrecoverdialog.moc" rkward-0.6.1/rkward/dialogs/rkloadlibsdialog.h0000644000175000017500000002202312124345414020752 0ustar thomasthomas/*************************************************************************** rkloadlibsdialog - description ------------------- begin : Mon Sep 6 2004 copyright : (C) 2004, 2006, 2007, 2009, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKLOADLIBSDIALOG_H #define RKLOADLIBSDIALOG_H #include #include #include #include #include "../settings/rksettingsmoduler.h" #include "../rbackend/rcommandreceiver.h" class QLineEdit; class QTreeView; class QTreeWidget; class QSortFilterProxyModel; class QComboBox; class QPushButton; class RKProgressControl; class QWidget; class QCloseEvent; class RCommandChain; class QCheckBox; class PackageInstallParamsWidget; class InstallPackagesWidget; /** Dialog which excapsulates widgets to load/unload, update and install R packages @author Thomas Friedrichsmeier */ // TODO: add a static member to create (single) instance of the dialog class RKLoadLibsDialog : public KPageDialog, public RCommandReceiver { Q_OBJECT public: RKLoadLibsDialog (QWidget *parent, RCommandChain *chain, bool modal=false); ~RKLoadLibsDialog (); bool installPackages (const QStringList &packages, QString to_libloc, bool install_suggested_packages, const QStringList& repos); bool removePackages (QStringList packages, QStringList from_liblocs); /** opens a modal RKLoadLibsDialog with the "Install new Packages" tab on front (To be used when a require () fails in the R backend @param parent parent QWidget. The dialog will be centered there @param chain RCommandChain to run the necessary commands in @param package_name name of the required package */ static void showInstallPackagesModal (QWidget *parent, RCommandChain *chain, const QString &package_name); QStringList currentLibraryLocations () const { return library_locations; }; signals: void downloadComplete (); void installationComplete (); void libraryLocationsChanged (const QStringList &liblocs); void installationOutput (const QString &output); void installationError (const QString &error); void installedPackagesChanged (); protected: void rCommandDone (RCommand *command); void closeEvent (QCloseEvent *e); protected slots: /** overloaded to catch button presses. */ void slotButtonClicked (int button); void childDeleted (); void processExited (int exitCode, QProcess::ExitStatus exitStatus); void installationProcessOutput (); void installationProcessError (); void automatedInstall (); void slotPageChanged (); private: void addLibraryLocation (const QString &new_loc); void tryDestruct (); void runInstallationCommand (const QString& command, bool as_root, const QString& message, const QString& title); friend class LoadUnloadWidget; friend class InstallPackagesWidget; RCommandChain *chain; InstallPackagesWidget *install_packages_widget; // needed for automated installation KPageWidgetItem *install_packages_pageitem; QStringList library_locations; QString auto_install_package; int num_child_widgets; bool accepted; QProcess* installation_process; }; /** Shows which packages are available (installed) / loaded, and lets the user load or detach packages. To be used in RKLoadLibsDialog @author Thomas Friedrichsmeier */ class LoadUnloadWidget : public QWidget, public RCommandReceiver { Q_OBJECT public: LoadUnloadWidget (RKLoadLibsDialog *dialog); ~LoadUnloadWidget (); signals: void loadUnloadDone (); public slots: void loadButtonClicked (); void detachButtonClicked (); void ok (); void apply (); void cancel (); void updateInstalledPackages (); void updateButtons (); void activated (); protected: void rCommandDone (RCommand *command); private: void updateCurrentList (); void doLoadUnload (); QTreeWidget *loaded_view; QTreeWidget *installed_view; QPushButton *load_button; QPushButton *detach_button; QStringList prev_packages; RKLoadLibsDialog *parent; }; /** Item model and encapsulation for package status (used in InstallPackagesWidget) */ class RKRPackageInstallationStatus : public QAbstractItemModel { Q_OBJECT public: RKRPackageInstallationStatus (QObject* parent); ~RKRPackageInstallationStatus (); void initialize (RCommandChain *chain); enum Columns { EnhancesRKWard, InstallationStatus, PackageName, PackageTitle, Version, Location, COLUMN_COUNT }; enum ToplevelItems { UpdateablePackages, NewPackages, InstalledPackages, TOPLEVELITEM_COUNT }; enum PackageStatusChange { Install, Remove, NoAction }; /* Item model implementation */ int rowCount (const QModelIndex &parent = QModelIndex()) const; int columnCount (const QModelIndex &) const { return COLUMN_COUNT; }; QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const; Qt::ItemFlags flags (const QModelIndex &index) const; QModelIndex index (int row, int column, const QModelIndex &parent=QModelIndex()) const; QModelIndex parent (const QModelIndex &index) const; bool setData (const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); /** returns a list of packages selected for installation / update */ QStringList packagesToInstall () const; /** fills a list of packages selected for removal, and a parallel list of the locations, from which to remove. * @return true, if any packages are marked for removal, false otherwise. */ bool packagesToRemove (QStringList *packages, QStringList *liblocs); /** mark a package for installation. * @returns the index of the package, if the package is available, an invalid index, if it is not available */ QModelIndex markPackageForInstallation (const QString& package_name); /** mark all available updates for installation. * @returns the index of the "Updateable Packages" item */ QModelIndex markAllUpdatesForInstallation (); /** reset all installation states to NoAction */ void clearStatus (); QStringList currentRepositories () const { return current_repos; }; bool initialized () const { return _initialized; }; private slots: void statusCommandFinished (RCommand *command); private: QStringList available_packages, available_titles, available_versions, available_repos; QStringList installed_packages, installed_titles, installed_versions, installed_libpaths; RData::IntStorage enhance_rk_in_available; RData::IntStorage enhance_rk_in_installed; RData::IntStorage new_packages_in_available; RData::IntStorage updateable_packages_in_available; RData::IntStorage updateable_packages_in_installed; QVector installed_status; QVector available_status; QVector installed_has_update; bool _initialized; QStringList current_repos; }; class RKRPackageInstallationStatusSortFilterModel : public QSortFilterProxyModel { public: RKRPackageInstallationStatusSortFilterModel (QObject* parent = 0); ~RKRPackageInstallationStatusSortFilterModel (); protected: bool lessThan (const QModelIndex &left, const QModelIndex &right) const; bool filterAcceptsRow (int source_row, const QModelIndex &source_parent) const; }; /** Allows the user to update / install R packages. To be used in RKLoadLibsDialog. @author Thomas Friedrichsmeier */ class InstallPackagesWidget : public QWidget { Q_OBJECT public: InstallPackagesWidget (RKLoadLibsDialog *dialog); ~InstallPackagesWidget (); void trySelectPackage (const QString &package_name); void initialize (); public slots: void ok (); void apply (); void cancel (); void filterStringChanged (const QString &new_filter); void activated (); void markAllUpdates (); private: void doInstall (bool refresh); QTreeView *packages_view; RKRPackageInstallationStatus *packages_status; QSortFilterProxyModel *model; QPushButton *mark_all_updates_button; QLineEdit *filter_edit; PackageInstallParamsWidget *install_params; RKLoadLibsDialog *parent; }; /** Simple helper class for RKLoadLibsDialog to allow selection of installation parameters @author Thomas Friedrichsmeier */ class PackageInstallParamsWidget : public QWidget { Q_OBJECT public: PackageInstallParamsWidget (QWidget *parent); ~PackageInstallParamsWidget (); bool installSuggestedPackages (); QString installLocation (); public slots: void liblocsChanged (const QStringList &newlist); private: QComboBox *libloc_selector; QCheckBox *suggested_packages; }; #endif rkward-0.6.1/rkward/dialogs/rkreadlinedialog.h0000644000175000017500000000456412124345414020756 0ustar thomasthomas/*************************************************************************** rkreadlinedialog - description ------------------- begin : Fri Sep 15 2006 copyright : (C) 2006, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKREADLINEDIALOG_H #define RKREADLINEDIALOG_H #include class QLineEdit; class QWidget; class RCommand; /** This class represent a dialog asking for a line of input. It is used, when the backend calls readline(). This dialog displays the question asked, the output context (as often times the question is not meaningful without that context), and a QLineEdit to get the user response. @author Thomas Friedrichsmeier */ class RKReadLineDialog : public KDialog { public: /** Construct and run modal RKReadLineDialog. @param parent QWidget to center the modal dialog on (0 for application) @param prompt The question @param command The command the readline() has arisen from. This is used to get the relevant output context @param result The answer to the question (the line read) will be stored in this string @returns true if ok was pressed (or the dialog was closed), false if cancel was pressed (i.e. the command should be cancelled) */ static bool readLine (QWidget *parent, const QString &caption, const QString &prompt, RCommand *command, QString *result); protected: /** ctor. Use the static readLine() instead. */ RKReadLineDialog (QWidget *parent, const QString &caption, const QString &prompt, RCommand *command); /** destructor */ ~RKReadLineDialog (); private: QLineEdit *input; static QByteArray stored_geom; }; #endif rkward-0.6.1/rkward/dialogs/rkimportdialog.h0000644000175000017500000000505012124345414020474 0ustar thomasthomas/*************************************************************************** rkimportdialog - description ------------------- begin : Tue Jan 30 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKIMPORTDIALOG_H #define RKIMPORTDIALOG_H #include #include #include class QComboBox; class RKContextMap; class RKImportDialogFormatSelector; /** This dialog is designed to allow the user to select a file, and file format. After that a suitable plugin is opened automatically to deal with this type of file . */ class RKImportDialog : public KFileDialog { Q_OBJECT public: /** constructor @param context_id The id of the context containing the relevant plugins @param parent Parent widget (dialog will be centered on this widget, if non-zeor */ RKImportDialog (const QString &context_id, QWidget *parent); /** dtor */ ~RKImportDialog (); public slots: /** The currently selected file extension filter was changed. Update the file format selection box accordingly. */ void filterWasChanged (const QString &); protected: /** reimplemented to a) invoke the relevant plugin, b) trigger self-destruction of the dialog */ void accept (); /** reimplemented to trigger self-destruction of the dialog */ void reject (); private: int format_count; RKImportDialogFormatSelector *format_selector; QStringList format_labels; QStringList filters; QStringList component_ids; RKContextMap *context; }; /** Internal helper class to RKImportDialog. Needed solely to work around a design flaw in the KFileDialog API */ class RKImportDialogFormatSelector : public KHBox { friend class RKImportDialog; private: RKImportDialogFormatSelector (); ~RKImportDialogFormatSelector () {}; QComboBox *combo; }; #endif rkward-0.6.1/rkward/dialogs/startupdialog.cpp0000644000175000017500000001522112124345414020663 0ustar thomasthomas/*************************************************************************** startupdialog - description ------------------- begin : Thu Aug 26 2004 copyright : (C) 2004, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "startupdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../settings/rksettingsmodulegeneral.h" #include "../misc/rkcommonfunctions.h" #include "../debug.h" StartupDialog::StartupDialog (QWidget *parent, StartupDialogResult *result, KRecentFilesAction *recent_files) : KDialog (parent) { RK_TRACE (DIALOGS); setModal (true); setButtons (KDialog::Ok | KDialog::Cancel); StartupDialog::result = result; setCaption (i18n ("What would you like to do?")); KVBox *vbox = new KVBox (this); setMainWidget (vbox); QLabel *pic = new QLabel (vbox); pic->setPixmap (QPixmap (RKCommonFunctions::getRKWardDataDir () + "icons/rkward_logo.png")); choser = new QButtonGroup (this); QGroupBox* choser_box = new QGroupBox (vbox); QVBoxLayout* choser_layout = new QVBoxLayout(choser_box); choser_layout->addWidget (empty_workspace_button = new QRadioButton (i18n ("Start with an empty workspace"), choser_box)); choser->addButton (empty_workspace_button); choser_layout->addWidget (empty_table_button = new QRadioButton (i18n ("Start with an empty table"), choser_box)); choser->addButton (empty_table_button); KUrl rdata_file = getRestoreFile (); choser_layout->addWidget (restore_workspace_button = new QRadioButton (choser_box)); choser->addButton (restore_workspace_button); if (rdata_file.isEmpty ()) { restore_workspace_button->setEnabled (false); restore_workspace_button->setText (i18n ("Load workspace from current directory")); } else restore_workspace_button->setText (i18n ("Load workspace from current directory:\n%1", rdata_file.toLocalFile ())); choser_layout->addWidget (open_button = new QRadioButton (i18n ("Load an existing workspace:"), choser_box)); choser->addButton (open_button); connect (open_button, SIGNAL (toggled (bool)), this, SLOT (openButtonSelected (bool))); empty_table_button->setChecked (true); file_list = new QListWidget (choser_box); file_list->setSelectionMode (QAbstractItemView::SingleSelection); file_list->setSortingEnabled (false); chose_file_item = new QListWidgetItem (i18n ("<>"), file_list); if (recent_files) { file_list->addItems (recent_files->urls ().toStringList ()); } connect (file_list, SIGNAL (itemClicked (QListWidgetItem*)), this, SLOT (listClicked (QListWidgetItem*))); connect (file_list, SIGNAL (itemDoubleClicked (QListWidgetItem*)), this, SLOT (listDoubleClicked (QListWidgetItem*))); choser_layout->addWidget (file_list); choser_layout->addWidget (remember_box = new QCheckBox (i18n ("Always do this on startup"), choser_box)); } StartupDialog::~StartupDialog() { RK_TRACE (DIALOGS); } void StartupDialog::accept () { RK_TRACE (DIALOGS); if (empty_workspace_button->isChecked ()) { result->result = EmptyWorkspace; } else if (empty_table_button->isChecked ()) { result->result = EmptyTable; } else if (restore_workspace_button->isChecked ()) { result->result = RestoreFromWD; result->open_url = getRestoreFile (); } else if (open_button->isChecked ()) { QListWidgetItem *item = file_list->currentItem (); if (item == chose_file_item) { result->result = ChoseFile; } else { result->result = OpenFile; result->open_url = KUrl (item->text ()); } } else { RK_ASSERT (false); } if (remember_box->isChecked ()) RKSettingsModuleGeneral::setStartupAction (result->result); QDialog::accept (); } void StartupDialog::reject () { RK_TRACE (DIALOGS); result->result = EmptyWorkspace; QDialog::reject (); } void StartupDialog::listDoubleClicked (QListWidgetItem *item) { RK_TRACE (DIALOGS); if (item) { open_button->setChecked (true); file_list->setCurrentItem (item); item->setSelected (true); accept (); } } void StartupDialog::listClicked (QListWidgetItem *item) { RK_TRACE (DIALOGS); if (item) { open_button->setChecked (true); openButtonSelected (true); // always do processing } } void StartupDialog::openButtonSelected (bool checked) { RK_TRACE (DIALOGS); if (checked) { if (!file_list->currentItem ()) { file_list->setCurrentRow (0); } if (file_list->currentItem () != chose_file_item) { remember_box->setChecked (false); remember_box->setEnabled (false); } else { remember_box->setEnabled (true); } } else { remember_box->setEnabled (true); } } void StartupDialog::showEvent (QShowEvent *event) { RK_TRACE (DIALOGS); // somehow, trying to achieve this in the ctor leads to the dialog never actually being shown (KDE4.0 beta) setFixedWidth (width ()); KDialog::showEvent (event); } // static KUrl StartupDialog::getRestoreFile () { RK_TRACE (DIALOGS); QFileInfo rdata_file (".RData"); if (rdata_file.exists ()) return KUrl::fromLocalFile (rdata_file.absoluteFilePath ()); return KUrl (); } //static StartupDialog::StartupDialogResult StartupDialog::getStartupAction (QWidget *parent, KRecentFilesAction *recent_files) { RK_TRACE (DIALOGS); StartupDialogResult result; result.result = RKSettingsModuleGeneral::startupAction (); if (result.result == RestoreFromWD) { result.open_url = getRestoreFile (); if (result.open_url.isEmpty ()) result.result = NoSavedSetting; } if (result.result != NoSavedSetting) { return result; } StartupDialog *dialog = new StartupDialog (parent, &result, recent_files); dialog->exec (); delete dialog; RK_DEBUG (DIALOGS, DL_DEBUG, "startup-dialog result: %d, url: %s", result.result, qPrintable (result.open_url.url ())); return result; } #include "startupdialog.moc" rkward-0.6.1/rkward/dialogs/startupdialog.h0000644000175000017500000000640112124345414020330 0ustar thomasthomas/*************************************************************************** startupdialog - description ------------------- begin : Thu Aug 26 2004 copyright : (C) 2004, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef STARTUPDIALOG_H #define STARTUPDIALOG_H #include #include class QCheckBox; class QButtonGroup; class QRadioButton; class QListWidget; class QListWidgetItem; class KRecentFilesAction; /** This class represents the startup dialog asking you whether to open a recent file, start with an empty workspace, etc. It's probably only ever used in one place, namely RKWard startup. The normal way to invoke it is via the static member-function getStartupAction. The selected action is returned in a StartupDialogResult. Remember to delete that struct after you read it. @author Thomas Friedrichsmeier */ /// the startup dialog class StartupDialog : public KDialog { Q_OBJECT public: /** enum to hold result of StartupDialog. WARNING: do not change the numeric values! They are saved as user settings in the config (@see RKSettingsModuleGeneral). */ enum Result { EmptyWorkspace=0, /**< start with an empty workspace */ EmptyTable=1, /**< start with an empty table */ ChoseFile=2, /**< chose file to open */ NoSavedSetting=3, /**< not acutally returned as a result. Used in RKSettingsModuleGeneral. This is saved, if user wants to be asked on every startup */ OpenFile=4, /**< open a recent file (already specified) */ RestoreFromWD=5 /**< load workspace from current directory, if available (R option --restore). */ }; struct StartupDialogResult { Result result; KUrl open_url; }; StartupDialog (QWidget *parent, StartupDialogResult *result, KRecentFilesAction *recent_files); ~StartupDialog(); static StartupDialogResult getStartupAction (QWidget *parent, KRecentFilesAction *recent_files); static KUrl getRestoreFile (); public slots: void accept (); void reject (); void listDoubleClicked (QListWidgetItem* item); void listClicked (QListWidgetItem* item); void openButtonSelected (bool checked); protected: /** reimplemented from QWidget to achieve fixed width */ void showEvent (QShowEvent *event); private: QRadioButton *empty_workspace_button; QRadioButton *empty_table_button; QRadioButton *restore_workspace_button; QRadioButton *open_button; QCheckBox *remember_box; QButtonGroup *choser; QListWidget *file_list; QListWidgetItem *chose_file_item; StartupDialogResult *result; }; #endif rkward-0.6.1/rkward/dialogs/rkreadlinedialog.cpp0000644000175000017500000000661412124345414021307 0ustar thomasthomas/*************************************************************************** rkreadlinedialog - description ------------------- begin : Fri Sep 15 2006 copyright : (C) 2006, 2007, 2008, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkreadlinedialog.h" #include #include #include #include #include #include #include #include #include #include #include "../rbackend/rcommand.h" #include "../debug.h" QByteArray RKReadLineDialog::stored_geom; RKReadLineDialog::RKReadLineDialog (QWidget *parent, const QString &caption, const QString &prompt, RCommand *command) : KDialog (parent) { RK_TRACE (DIALOGS); RK_ASSERT (command); setModal (true); setCaption (caption); setButtons (KDialog::Ok | KDialog::Cancel); KVBox *page = new KVBox (); setMainWidget (page); new QLabel (caption, page); int screen_width = qApp->desktop ()->width () - 2*marginHint() - 2*spacingHint (); // TODO is this correct on xinerama? QString context = command->fullOutput (); if (!context.isEmpty ()) { new QLabel (i18n ("Context:"), page); QTextEdit *output = new QTextEdit (page); output->setUndoRedoEnabled (false); output->setPlainText (QString ()); output->setCurrentFont (KGlobalSettings::fixedFont ()); output->setLineWrapMode (QTextEdit::NoWrap); output->insertPlainText (context); output->setReadOnly (true); // there seems to be no easier way to get at the contents width... int cwidth = output->horizontalScrollBar ()->maximum () + output->width (); output->setMinimumWidth (screen_width < cwidth ? screen_width : cwidth); output->moveCursor (QTextCursor::End); output->setFocusPolicy (Qt::NoFocus); page->setStretchFactor (output, 10); } QLabel *promptl = new QLabel (prompt, page); promptl->setWordWrap (true); input = new QLineEdit (QString (), page); input->setMinimumWidth (fontMetrics ().maxWidth ()*20); input->setFocus (); } RKReadLineDialog::~RKReadLineDialog () { RK_TRACE (DIALOGS); } //static bool RKReadLineDialog::readLine (QWidget *parent, const QString &caption, const QString &prompt, RCommand *command, QString *result) { RK_TRACE (DIALOGS); RK_ASSERT (result); RKReadLineDialog *dialog = new RKReadLineDialog (parent, caption, prompt, command); if (!stored_geom.isNull ()) dialog->restoreGeometry (stored_geom); QTimer::singleShot (0, dialog->input, SLOT(setFocus())); int res = dialog->exec (); *result = dialog->input->text (); stored_geom = dialog->saveGeometry (); delete dialog; return (res != QDialog::Rejected); } rkward-0.6.1/rkward/dialogs/rkselectlistdialog.cpp0000644000175000017500000000654712124345414021704 0ustar thomasthomas/*************************************************************************** rkselectlistdialog - description ------------------- begin : Thu Mar 18 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkselectlistdialog.h" #include #include #include #include #include "../debug.h" RKSelectListDialog::RKSelectListDialog (QWidget *parent, const QString &caption, const QStringList& choices, const QStringList& preselected, bool multiple) : KDialog (parent) { RK_TRACE (DIALOGS); setModal (true); setCaption (caption); setButtons (KDialog::Ok | KDialog::Cancel); KVBox *page = new KVBox (); setMainWidget (page); if (multiple) new QLabel (i18n ("Select one or more:"), page); else new QLabel (i18n ("Select one:"), page); new QLabel (caption, page); input = new QListWidget (page); input->addItems (choices); if (multiple) input->setSelectionMode (QAbstractItemView::MultiSelection); else input->setSelectionMode (QAbstractItemView::SingleSelection); for (int i = 0; i < preselected.count (); ++i) { int pos = choices.indexOf (preselected[i]); if (pos >= 0) input->item (pos)->setSelected (true); } QSize base_hint = minimumSizeHint (); int other_height = base_hint.height () - input->minimumSizeHint ().height (); // height of all other things besides the list widget int ideal_height = other_height + qMax (input->sizeHintForRow (0)*input->count (), 50); // KDialog appears to be smart enough to limit this to the available screen geometry setInitialSize (QSize (base_hint.width (), ideal_height)); connect (input, SIGNAL (itemSelectionChanged()), this, SLOT (updateState())); updateState (); } RKSelectListDialog::~RKSelectListDialog () { RK_TRACE (DIALOGS); } void RKSelectListDialog::updateState () { RK_TRACE (DIALOGS); // TODO is there no QListWidget::hasSelection()? if (input->selectedItems ().isEmpty ()) enableButtonOk (false); else enableButtonOk (true); } //static QStringList RKSelectListDialog::doSelect (QWidget *parent, const QString &caption, const QStringList& choices, const QStringList& preselected, bool multiple) { RK_TRACE (DIALOGS); RKSelectListDialog *dialog = new RKSelectListDialog (parent, caption, choices, preselected, multiple); int res = dialog->exec (); if (res != QDialog::Accepted) return QStringList (); QStringList list; QList selected = dialog->input->selectedItems (); for (int i = 0; i < selected.count (); ++i) { list.append (selected[i]->text ()); } return (list); } #include "rkselectlistdialog.moc" rkward-0.6.1/rkward/dialogs/rkselectlistdialog.h0000644000175000017500000000432312124345414021337 0ustar thomasthomas/*************************************************************************** rkselectlistdialog - description ------------------- begin : Thu Mar 18 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSELECTLISTDIALOG_H #define RKSELECTLISTDIALOG_H #include class QListWidget; class QWidget; /** This class represent a dialog asking for a choice among several optiosn. It is used, when the backend calls select.list() / menu(). @author Thomas Friedrichsmeier */ class RKSelectListDialog : public KDialog { Q_OBJECT public: /** Construct and run modal RKSelectListDialog. @param parent QWidget to center the modal dialog on (0 for application) @param caption Dialog title @param choices The list of available choices @param preselected The preselected choices (QStringList ()) for no preselects @param multiple Whether multiple items may be selected @returns The selected option(s). An empty list, if cancel was pressed. */ static QStringList doSelect (QWidget *parent, const QString &caption, const QStringList& choices, const QStringList& preselected, bool multiple); protected: /** ctor. Use the doSelect() instead. */ RKSelectListDialog (QWidget *parent, const QString &caption, const QStringList& choices, const QStringList& preselected, bool multiple); /** destructor */ ~RKSelectListDialog (); private slots: void updateState (); private: QListWidget *input; }; #endif rkward-0.6.1/rkward/dialogs/rkimportdialog.cpp0000644000175000017500000000774612124345414021045 0ustar thomasthomas/*************************************************************************** rkimportdialog - description ------------------- begin : Tue Jan 30 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkimportdialog.h" #include #include #include #include #include #include "../plugin/rkcomponentmap.h" #include "../plugin/rkcomponentcontext.h" #include "../debug.h" RKImportDialogFormatSelector::RKImportDialogFormatSelector () : KHBox () { RK_TRACE (DIALOGS); new QLabel (i18n ("File format: "), this); combo = new QComboBox (this); } RKImportDialog::RKImportDialog (const QString &context_id, QWidget *parent) : KFileDialog (KUrl (), QString (), parent, format_selector=new RKImportDialogFormatSelector ()) { RK_TRACE (DIALOGS); setModal (false); context = RKComponentMap::getContext (context_id); if (!context) { KMessageBox::sorry (this, i18n ("No plugins defined for context '%1'", context_id)); return; } component_ids = context->components (); QString formats = "*|" + i18n ("All Files") + " (*)\n"; int format_count = 0; for (QStringList::const_iterator it = component_ids.constBegin (); it != component_ids.constEnd (); ++it) { if (format_count++) formats.append ('\n'); RKComponentHandle *handle = RKComponentMap::getComponentHandle (*it); if (!handle) { RK_ASSERT (false); continue; } QString filter = handle->getAttributeValue ("format"); QString label = handle->getAttributeLabel ("format"); QString elabel = label; elabel.replace ('/', "\\/"); elabel.replace ('|', "\\|"); formats.append (filter + '|' + elabel + " (" + filter + ')'); format_labels.append (label); filters.append (filter); } // file format selection box format_selector->combo->insertItems (0, format_labels); // initialize setMode (KFile::File | KFile::ExistingOnly | KFile::LocalOnly); setFilter (formats); connect (this, SIGNAL (filterChanged (const QString&)), this, SLOT (filterWasChanged (const QString&))); filterWasChanged (QString ()); show (); } RKImportDialog::~RKImportDialog () { RK_TRACE (DIALOGS); } void RKImportDialog::filterWasChanged (const QString &) { RK_TRACE (DIALOGS); int index = filters.indexOf (filterWidget ()->currentFilter ()); if (index < 0) { // All files format_selector->combo->setEnabled (true); } else { format_selector->combo->setEnabled (false); format_selector->combo->setCurrentIndex (index); } } void RKImportDialog::accept () { RK_TRACE (DIALOGS); KFileDialog::accept (); int index = format_selector->combo->currentIndex (); QString cid = component_ids[index]; RKComponentHandle *handle = RKComponentMap::getComponentHandle (cid); RKContextHandler *chandler = context->makeContextHandler (this, false); if (!(handle && chandler)) { RK_ASSERT (false); } else { RKComponentPropertyBase *filename = new RKComponentPropertyBase (chandler, false); filename->setValue (selectedFile ()); chandler->addChild ("filename", filename); chandler->invokeComponent (handle); } deleteLater (); } void RKImportDialog::reject () { RK_TRACE (DIALOGS); KFileDialog::reject (); deleteLater (); } #include "rkimportdialog.moc" rkward-0.6.1/rkward/dialogs/rkrecoverdialog.h0000644000175000017500000000317512124345414020635 0ustar thomasthomas/*************************************************************************** rkrecoverdialog - description ------------------- begin : Fri Feb 04 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKRECOVERDIALOG_H #define RKRECOVERDIALOG_H #include #include /** Dialog to offer loading of recovery files during startup. */ class RKRecoverDialog : public KDialog { Q_OBJECT public: /** Check whether a crash recovery file is available. If so, display a dialog, offering to load the recovery file. @returns The url of the recovery file, if user selected to load it. An empty KUrl otherwise. */ static KUrl checkRecoverCrashedWorkspace (); protected: RKRecoverDialog (const QStringList &recovery_files); ~RKRecoverDialog (); private slots: void showButtonClicked (); }; #endif rkward-0.6.1/rkward/ver.R.in0000644000175000017500000000025112124345416015176 0ustar thomasthomas# DO NOT CHANGE THIS FILE MANUALLY! # version number will be updated by cmake, see # rkward/SetVersionNumber.cmake #' @export ".rk.app.version" <- "@RKVERSION_NUMBER@" rkward-0.6.1/rkward/syntax/0000755000175000017500000000000012124345414015200 5ustar thomasthomasrkward-0.6.1/rkward/syntax/CMakeLists.txt0000644000175000017500000000027012124345414017737 0ustar thomasthomasINSTALL(FILES rkward.xml DESTINATION ${DATA_INSTALL_DIR}/katepart/syntax/) IF(NOT NO_R_XML) INSTALL(FILES r.xml DESTINATION ${DATA_INSTALL_DIR}/katepart/syntax/) ENDIF(NOT NO_R_XML) rkward-0.6.1/rkward/syntax/r.xml0000644000175000017500000001550012124345414016164 0ustar thomasthomas for in next break while repeat if else switch function TRUE FALSE NULL NA NA_integer_ NA_real_ NA_complex_ NA_character_ Inf NaN rkward-0.6.1/rkward/syntax/r-syntax-test.R0000644000175000017500000000321412124345414020065 0ustar thomasthomas## This is a Headline # This is a Comment myBoolean <- TRUE myNa <- NA myString <- "This is a String" "String 2" -> myString2 myString3 <<- "global assignment" myString4 <- as.character( 3 + 4 ) myMatrix <- matrix( 1:6, nrow = 3, ncol = 2 ) myMatrix2 <- myMatrix + 4 myMatrix3 <- t( myMatrix ) %*% myMatrix myMatrix[ myMatrix < 4 ] <- 0 myMatrix[ myMatrix == 4 ] <- 10 myFloat = 1.234 myBooleanVector <- c( 1, 5 ) %in% c( 1, 2, 3, 4 ) if( 3 > 4 ) { stop( "Error: 3 is not graeter than 4!!!" ) } else if( 3 == 4 ) { stop( "Error: 3 is not equal to 4!!!" ) } for( i in 2:5 ) { print( paste( "No. ", as.character( i + ( 3 + i ) ), sep = "" ) ) } try ( { x <<- 1 x <<<- 1 # syntax error x <- * 1 # syntax error x += 1 -= x1 *= x2 # syntax error x =* 1 =/ x1 // x2 # syntax error x +!= y +-= z +!/ 2 # syntax error x =+ 1 =- x1 # These look misleading, but are legal 1 +-!-++--!!+ 1 # Crazy, but legal x <- ~1 # ERROR: Actually, this is legal, but it's marked up as an error "%my 1st infix%" <- function (x, y) { x + y } # legal infix 3 %my 1st infix% 4 "%my%infix%" <- function (x, y) { x + y } # illegal infix 3 %my%infix% 4 # syntax error 3 %my%infix%other% 4 # but could be continued to something syntactically legal ) # unexpected closing ')' (}) # unexpected closing '}' }, silent=FALSE) myList <- list( a = 1, a2 = 2, a2_b = 3 ) x <- 1 print ("hi", quote=(x==1)) # quotes: cat ("normal quote", 'single quoted', "with escapes \" ' ", 'with escapes 2 \' " ') `backquoted symbol name` <- 1 "backquoted symbol name" # This will print the string `backquoted symbol name` # This will print the value (1) cat( "\nNo Errors!\n" ) rkward-0.6.1/rkward/syntax/rkward.xml0000644000175000017500000002170512124345414017221 0ustar thomasthomas for in next break while repeat if else switch function TRUE FALSE NULL NA NA_integer_ NA_real_ NA_complex_ NA_character_ Inf NaN rkward-0.6.1/rkward/rkconsole.cpp0000644000175000017500000010175212124345412016361 0ustar thomasthomas/*************************************************************************** rkconsole - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004, 2006, 2007, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkconsole.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "rkglobals.h" #include "rkward.h" #include "windows/rkhelpsearchwindow.h" #include "rbackend/rinterface.h" #include "rbackend/rcommand.h" #include "settings/rksettings.h" #include "settings/rksettingsmoduleconsole.h" #include "misc/rkcommonfunctions.h" #include "misc/rkstandardicons.h" #include "misc/rkstandardactions.h" #include "core/robjectlist.h" #include "core/rfunctionobject.h" #include "debug.h" // static RKConsole* RKConsole::main_console = 0; RKConsole::RKConsole (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, RKMDIWindow::ConsoleWindow, tool_window, name), commands_history (false, false) { RK_TRACE (APP); QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); // create a Kate-part as command-editor KTextEditor::Editor* editor = KTextEditor::editor ("katepart"); if (!editor) { RK_ASSERT (false); KMessageBox::error (this, i18n ("The 'katepart' component could not be loaded. RKWard cannot run without katepart, and will exit, now. Please install katepart, and try again."), i18n ("'katepart' component could not be found")); exit (1); } doc = editor->createDocument (this); view = doc->createView (this); layout->addWidget (view); KTextEditor::ConfigInterface *confint = qobject_cast (view); RK_ASSERT (view); confint->setConfigValue ("dynamic-word-wrap", false); KTextEditor::CodeCompletionInterface *iface = qobject_cast (view); if (iface) iface->setAutomaticInvocationEnabled (false); setFocusProxy (view); setFocusPolicy (Qt::StrongFocus); /* We need to disable kactions that were plugged to the KateViewInternal in kateview.cpp. These actions include Key_Up, Key_Down, etc. */ kate_edit_actions = view->findChild ("edit_actions"); if (!kate_edit_actions) { kate_edit_actions=view->actionCollection(); } if (kate_edit_actions) { // make sure these actions never get triggered by a shortcut QList noshort; noshort.append (QKeySequence ()); // no primary noshort.append (QKeySequence ()); // no secondary noshort.append (QKeySequence ()); // for good measure QList keas = kate_edit_actions->actions (); for (int i = 0; i < keas.size (); ++i) { keas[i]->setShortcuts (noshort); } } else { RK_DEBUG (APP, DL_ERROR, "Could not retrieve the katepart's edit action collection"); } if (view->focusProxy ()) view->focusProxy()->installEventFilter(this); view->installEventFilter(this); doc->setModified (false); hinter = new RKFunctionArgHinter (this, view); setCaption (i18n ("R Console")); console_part = new RKConsolePart (this); setPart (console_part); setMetaInfo (shortCaption (), "rkward://page/rkward_console", RKSettings::PageConsole); initializeActivationSignals (); initializeActions (getPart ()->actionCollection ()); nprefix = "> "; iprefix = "+ "; prefix = nprefix; // KDE4: a way to do this? // doc->setUndoSteps (0); clear (); RKCommandHighlighter::setHighlighting (doc, RKCommandHighlighter::RInteractiveSession); commands_history.setHistory (RKSettingsModuleConsole::loadCommandHistory ()); current_command = 0; current_command_displayed_up_to = 0; tab_key_pressed_before = false; previous_chunk_was_piped = false; // KDE4 TODO: workaround for KDE 4 pre-release versions. Hope this gets fixed before 4.0 // see http://lists.kde.org/?l=kwrite-devel&m=119721420603507&w=2 setMinimumHeight (50); } RKConsole::~RKConsole () { RK_TRACE (APP); delete hinter; RKSettingsModuleConsole::saveCommandHistory (commands_history.getHistory ()); } QAction* RKConsole::addProxyAction (const QString& actionName, const QString& label) { RK_TRACE (APP); RK_ASSERT (getPart ()); RK_ASSERT (view); // katepart has more than one actionCollection QList acs = view->findChildren(); acs.append (view->actionCollection ()); QAction* found = 0; foreach (KActionCollection* ac, acs) { found = ac->action (actionName); if (found) break; } if (found) { QAction* ret = new KAction (getPart ()); if (label.isEmpty ()) ret->setText (found->text ()); else ret->setText (label); ret->setIcon (found->icon ()); ret->setIconText (found->iconText ()); ret->setToolTip (found->toolTip ()); ret->setStatusTip (found->statusTip ()); ret->setCheckable (found->isCheckable ()); ret->setChecked (found->isChecked ()); // TODO: ideally, we'd also relay enabledness, checked state, etc. That would probably require a separate class, // and is not currently needed for the actions that we copy connect (ret, SIGNAL (triggered(bool)), found, SLOT (trigger())); connect (ret, SIGNAL (toggled(bool)), found, SLOT (toggle())); getPart ()->actionCollection ()->addAction (actionName, ret); return ret; } else { return 0; } } void RKConsole::triggerEditAction (QString name) { RK_TRACE (APP); if (!kate_edit_actions) return; QAction *action = kate_edit_actions->action (name); if (action) action->trigger (); else RK_ASSERT (false); } void RKConsole::setCursorClear (int line, int col) { RK_TRACE (APP); view->setCursorPosition (KTextEditor::Cursor (line, col)); view->removeSelection (); } bool RKConsole::handleKeyPress (QKeyEvent *e) { KTextEditor::Cursor c = view->cursorPosition (); int para=c.line (); int pos=c.column (); int key = e->key (); bool is_modifier_key = ((key == Qt::Key_Shift) || (key == Qt::Key_Control) || (key == Qt::Key_Meta) || (key == Qt::Key_Alt)); if (view->selection ()) { KTextEditor::Range selrange = view->selectionRange (); if (selrange.start ().line () < (doc->lines () - 1) || selrange.start ().column () < prefix.length ()) { // There is a selection outside the command line // If it's a modifier key, that's quite ok. Otherwise, we need to take off the selection, then proceed to handling the key press if (is_modifier_key) return true; view->setSelection (KTextEditor::Range ()); } } if (para < doc->lines () - 1 || pos < prefix.length ()) { // not inside the last line? if (!is_modifier_key) cursorAtTheEnd (); // adjust position before interpreting non-modifier keystroke } if (current_command) { e->ignore (); return true; } previous_chunk_was_piped = false; // Apparently, on MacOSX, additional modifiers may sometimes be present (KeypadModifier?), which we want to ignore. const int modifier_mask = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier; Qt::KeyboardModifiers modifier = e->modifiers () & modifier_mask; if ((key == Qt::Key_Up) || (key == Qt::Key_Down)) { KTextEditor::CodeCompletionInterface *iface = qobject_cast (view); if (iface && iface->isCompletionActive ()) { if (key == Qt::Key_Up) triggerEditAction ("move_line_up"); else triggerEditAction ("move_line_down"); return true; } // showing completion list during history navigation is not a good idea, since it uses the same keys bool auto_inv = (iface && iface->isAutomaticInvocationEnabled ()); if (iface) iface->setAutomaticInvocationEnabled (false); if (key == Qt::Key_Up) commandsListUp (RKSettingsModuleConsole::shouldDoHistoryContextSensitive (modifier)); else commandsListDown (RKSettingsModuleConsole::shouldDoHistoryContextSensitive (modifier)); if (iface) iface->setAutomaticInvocationEnabled (auto_inv); return true; } if (key == Qt::Key_Home) { if (modifier == Qt::ShiftModifier) { int lastline = doc->lines () - 1; int firstcol = prefix.length (); KTextEditor::Range newrange (lastline, firstcol, lastline, pos); if (view->selection ()) { KTextEditor::Range oldrange = view->selectionRange (); if (oldrange.end ().column () == pos) { newrange.setBothColumns (firstcol); } else { newrange.expandToRange (oldrange); } } view->setSelection (newrange); } cursorAtTheBeginning (); return true; } else if (key == Qt::Key_End) { if (modifier == Qt::ShiftModifier) { int lastline = doc->lines () - 1; int lastcol = doc->lineLength (lastline); KTextEditor::Range newrange (lastline, pos, lastline, lastcol); if (view->selection ()) { KTextEditor::Range oldrange = view->selectionRange (); if (oldrange.end ().column () == pos) { newrange.expandToRange (oldrange); } else { newrange.setBothColumns (lastcol); } } view->setSelection (newrange); } cursorAtTheEnd (); return true; } else if (key == Qt::Key_Enter || key == Qt::Key_Return) { // currently, these are auto-text hints, only KTextEditor::CodeCompletionInterface *iface = qobject_cast (view); if (iface && iface->isCompletionActive ()) { iface->forceCompletion (); return true; } hinter->hideArgHint (); commands_history.append (currentEditingLine ()); submitCommand (); return true; } else if (key == Qt::Key_Left){ if (pos <= prefix.length ()) return true; if (modifier == Qt::NoModifier) setCursorClear (para, pos - 1); else if (modifier == Qt::ShiftModifier) triggerEditAction ("select_char_left"); else if (modifier == Qt::ControlModifier) triggerEditAction ("word_left"); else if (modifier == (Qt::ControlModifier + Qt::ShiftModifier)) triggerEditAction ("select_word_left"); else return false; return true; } else if (key == Qt::Key_Right){ if (pos >= doc->lineLength (para)) return true; if (modifier == Qt::NoModifier) setCursorClear (para, pos + 1); else if (modifier == Qt::ShiftModifier) triggerEditAction ("select_char_right"); else if (modifier == Qt::ControlModifier) triggerEditAction ("word_right"); else if (modifier == (Qt::ControlModifier + Qt::ShiftModifier)) triggerEditAction ("select_word_right"); else return false; return true; } else if (key == Qt::Key_Backspace){ if(pos<=prefix.length ()) return true; if (view->selection ()) { doc->removeText (view->selectionRange ()); view->removeSelection (); } else { doc->removeText (KTextEditor::Range (para, pos, para, pos-1)); } return true; } else if (key == Qt::Key_Delete) { // not currently handled by an action in kateview internal, but better not rely on that fact! if (view->selection ()) { doc->removeText (view->selectionRange ()); view->removeSelection (); } else { doc->removeText (KTextEditor::Range (para, pos, para, pos + 1)); } return true; } else if (key == Qt::Key_Tab) { KTextEditor::CodeCompletionInterface *iface = qobject_cast (view); if (iface && iface->isCompletionActive ()) { return false; } doTabCompletion (); return true; } return false; } QString RKConsole::provideContext (int line_rev) { RK_TRACE (COMMANDEDITOR); QString ret; if (line_rev == 0) ret = currentEditingLine ().left (currentCursorPositionInCommand ()); else if (!incomplete_command.isEmpty ()) { QStringList lines = incomplete_command.split ("\n"); if (lines.size () > line_rev) { ret = lines[lines.size () - line_rev - 1]; } } return ret; } void RKConsole::insertCompletion (int line_num, int word_start, int word_end, const QString &completion) { RK_TRACE (APP); int offset = prefix.length (); doc->replaceText (KTextEditor::Range (line_num, offset + word_start, line_num, offset + word_end), completion); } bool RKConsole::doTabCompletionHelper (int line_num, const QString &line, int word_start, int word_end, const QStringList &entries) { RK_TRACE (APP); int count = entries.count (); QStringList::const_iterator it; if (!count) return false; if (count == 1) { it = entries.constBegin (); insertCompletion (line_num, word_start, word_end, *it); } else if (tab_key_pressed_before) { int i=0; for (it = entries.constBegin (); it != entries.constEnd (); ++it) { if (i % 3) { doc->insertText (KTextEditor::Cursor (doc->lines () - 1, 0), (*it).leftJustified (35)); } else { doc->insertLine (doc->lines (), *it); } ++i; } doc->insertLine (doc->lines (), prefix + line); cursorAtTheEnd (); } else { tab_key_pressed_before = true; // do all entries have a common start? QString common; bool done = false; int i = 0; while (!done) { bool ok = true; QChar current; for (it = entries.constBegin (); it != entries.constEnd (); ++it) { if ((*it).length () <= i) { ok = false; break; } if (it == entries.constBegin ()) { current = (*it).at(i); } else if ((*it).at(i) != current) { ok = false; break; } } if (ok) common.append (current); else break; ++i; } if (i > 0) { if ((int) common.length() > (word_end - word_start)) { // more than there already is insertCompletion (line_num, word_start, word_end, common); return false; // will beep to signal completion is not complete } } return true; } tab_key_pressed_before = false; return true; } void RKConsole::doTabCompletion () { RK_TRACE (APP); QString current_line = currentEditingLine (); int current_line_num = doc->lines () - 1; int word_start; int word_end; int cursor_pos = currentCursorPositionInCommand (); if (cursor_pos < 0) cursor_pos = current_line.length (); RKCommonFunctions::getCurrentSymbolOffset (current_line, cursor_pos, false, &word_start, &word_end); QString current_symbol = current_line.mid (word_start, word_end - word_start); // as a very simple heuristic: If the current symbol starts with a quote, we should probably attempt file name completion, instead of symbol name completion if (current_symbol.startsWith ("\"") || current_symbol.startsWith ("\'") || current_symbol.startsWith ("`")) { KUrlCompletion comp (KUrlCompletion::FileCompletion); comp.setDir (QDir::currentPath ()); comp.makeCompletion (current_symbol.mid (1)); if (doTabCompletionHelper (current_line_num, current_line, word_start + 1, word_end, comp.allMatches ())) return; } else if (!current_symbol.isEmpty ()) { RObject::RObjectSearchMap map; RObjectList::getObjectList ()->findObjectsMatching (current_symbol, &map); if (doTabCompletionHelper (current_line_num, current_line, word_start, word_end, map.keys ())) return; } // no completion was possible KApplication::kApplication ()->beep (); } bool RKConsole::eventFilter (QObject *o, QEvent *e) { if (o == getPart ()) { return RKMDIWindow::eventFilter (o, e); } if (e->type () == QEvent::KeyPress) { QKeyEvent *k = (QKeyEvent *)e; return (handleKeyPress (k)); } else if (e->type () == QEvent::MouseButtonPress) { // we seem to need this, as the kateview will swallow the contextMenuEvent, otherwise QMouseEvent *m = (QMouseEvent *)e; if (m->button() == Qt::RightButton) { qApp->sendEvent (this, new QContextMenuEvent (QContextMenuEvent::Other, m->globalPos ())); return (true); } } else if (e->type () == QEvent::MouseButtonRelease){ QMouseEvent *m = (QMouseEvent *)e; if (m->button() == Qt::MidButton) { QClipboard *cb = QApplication::clipboard (); submitBatch (cb->text (QClipboard::Selection)); return (true); } /* else if (m->button () == Qt::LeftButton) { // prevent cursor from leaving last line uint para=0; uint p=0; view->cursorPosition (¶, &p); if (para != doc->lines () - 1) { int y = view->y (); view->setCursorPosition (doc->lines() -1, p); int y2 = view->y (); qDebug ("%d, %d", y, y2); view->scroll (0, y - y2); } } */ // not good, yet: always jumps to bottom of view } if (acceptsEventsFor (o)) return RKMDIWindow::eventFilter (o, e); return false; } QString RKConsole::currentEditingLine () const { RK_TRACE (APP); if (current_command) return QString (); // it doesn't count as "editing" line, if a command is currently being executed return (doc->line (doc->lines () - 1).mid (prefix.length ())); } void RKConsole::setCurrentEditingLine (const QString &command) { RK_TRACE (APP); int lastline = doc->lines () - 1; doc->replaceText (KTextEditor::Range (lastline, prefix.length (), lastline, doc->lineLength (lastline)), command); cursorAtTheEnd (); } void RKConsole::cursorAtTheEnd () { RK_TRACE (APP); view->setCursorPosition (doc->endOfLine (doc->lines () - 1)); // KDE4 TODO: view->scrollDown (); } void RKConsole::cursorAtTheBeginning () { RK_TRACE (APP); // KDE4 TODO: view->scrollDown (); view->setCursorPosition (KTextEditor::Cursor (doc->lines() - 1, prefix.length ())); } void RKConsole::submitCommand () { RK_TRACE (APP); QString command = incomplete_command + currentEditingLine (); if (!input_buffer.isEmpty ()) { int last_line_end = input_buffer.lastIndexOf ('\n'); if (last_line_end < 0) { last_line_end = 0; RK_ASSERT (false); } command.append (input_buffer.left (last_line_end)); if (last_line_end < (input_buffer.size () - 1)) { input_buffer = input_buffer.mid (last_line_end + 1); } else { input_buffer.clear (); } } else { RK_ASSERT (!command.endsWith ('\n')); command.append ('\n'); } current_command_displayed_up_to = incomplete_command.length (); setCurrentEditingLine (command.mid (current_command_displayed_up_to, command.indexOf ('\n', current_command_displayed_up_to) - current_command_displayed_up_to)); current_command_displayed_up_to += currentEditingLine ().length (); skip_command_display_lines = incomplete_command.count ('\n') + 1; // incomplete command, and first line have already been shown. doc->insertLine (doc->lines (), QString ()); if (!command.isEmpty ()) { current_command = new RCommand (command, RCommand::User | RCommand::Console, QString (), this); RKGlobals::rInterface ()->issueCommand (current_command); interrupt_command_action->setEnabled (true); } else { showPrompt (); tryNextInBuffer (); } } void RKConsole::commandsListUp (bool context_sensitive) { RK_TRACE (APP); bool found = commands_history.up (context_sensitive, currentEditingLine ()); if (found) setCurrentEditingLine (commands_history.current ()); else KApplication::kApplication ()->beep (); } void RKConsole::commandsListDown (bool context_sensitive) { RK_TRACE (APP); bool found = commands_history.down (context_sensitive, currentEditingLine ()); if (found) setCurrentEditingLine (commands_history.current ()); else KApplication::kApplication ()->beep (); } void RKConsole::rCommandDone (RCommand *command) { RK_TRACE (APP); current_command = 0; if (command->errorSyntax () && command->error ().isEmpty ()) { doc->insertLine (doc->lines () - 1, i18n ("Syntax error\n")); } if (command->errorIncomplete ()) { prefix = iprefix; incomplete_command = command->remainingCommand (); } else { prefix = nprefix; incomplete_command.clear (); } commands_history.goToEnd (); showPrompt (); tryNextInBuffer (); } void RKConsole::newOutput (RCommand *, ROutput *output) { RK_TRACE (APP); int start_line = doc->lines () -1; // split by and handle carriage returns const QString outstr = output->output; int start_pos = 0; int end_pos = outstr.size () - 1; QChar c; for (int pos = 0; pos <= end_pos; ++pos) { c = output->output.at (pos); if (c == '\r') { /* NOTE: My first approach was to split the whole string by newlines, and insert each line separately. This allowed for a minor * optimization when hitting a carriage return (the string before the '\r' could simply be ignored, then), however it caused * around 10% slowdown when printing large amounts of output. * Thus, instead, when hitting a CR, we first insert everything before that into the document, then reset the line. */ doc->insertText (doc->documentEnd (), outstr.mid (start_pos, pos - start_pos)); doc->removeLine (doc->lines () - 1); doc->insertLine (doc->lines (), QString ()); start_pos = pos + 1; } } if (start_pos <= end_pos) doc->insertText (doc->documentEnd (), outstr.mid (start_pos, end_pos - start_pos + 1)); int end_line = doc->lines () -1; if (output->type != ROutput::Output) { KTextEditor::MarkInterface *markiface = qobject_cast (doc); RK_ASSERT (markiface); for (int line = start_line; line < end_line; ++line) { markiface->addMark (line, KTextEditor::MarkInterface::BreakpointActive); } } if (RKSettingsModuleConsole::maxConsoleLines ()) { uint c = (uint) doc->lines(); // We remove the superflous lines in chunks of 20 while handling output for better performance. Later, in showPrompt(), we trim down to the correct size. if (c > (RKSettingsModuleConsole::maxConsoleLines () + 20)) { // KDE4: does the setUpdatesEnabled (false) still affect performance? view->setUpdatesEnabled (false); // major performance boost while removing lines! doc->removeText (KTextEditor::Range (0, 0, c - RKSettingsModuleConsole::maxConsoleLines (), 0)); view->setUpdatesEnabled (true); } } cursorAtTheEnd (); } void RKConsole::userCommandLineIn (RCommand* cmd) { RK_TRACE (APP); RK_ASSERT (cmd == current_command); if (--skip_command_display_lines >= 0) return; QString line = cmd->command ().mid (current_command_displayed_up_to + 1); line = line.section ('\n', 0, 0) + '\n'; current_command_displayed_up_to += line.length (); if (line.length () < 2) return; // omit empty lines (esp. the trailing newline of the command!) prefix = iprefix; showPrompt (); setCurrentEditingLine (line); } void RKConsole::submitBatch (const QString &batch) { RK_TRACE (APP); previous_chunk_was_piped = false; input_buffer.append (batch); if (!current_command) { // pasting into the middle of the command line QString line = currentEditingLine (); int pos = currentCursorPositionInCommand (); if (pos >= 0) { setCurrentEditingLine (line.left (pos)); input_buffer.append (line.mid (pos)); } } if (!current_command) tryNextInBuffer (); } void RKConsole::showPrompt () { RK_TRACE (APP); if ((!doc->lines ()) || (!doc->line (doc->lines () - 1).isEmpty ())) { if (RKSettingsModuleConsole::maxConsoleLines ()) { uint c = doc->lines(); if (c > RKSettingsModuleConsole::maxConsoleLines ()) { // KDE4 TODO: setUpdatesEnabled(false) still faster? view->setUpdatesEnabled (false); doc->removeText (KTextEditor::Range (0, 0, c - RKSettingsModuleConsole::maxConsoleLines (), 0)); view->setUpdatesEnabled (true); } } doc->insertLine (doc->lines (), QString ()); } doc->insertText (KTextEditor::Cursor (doc->lines () - 1, 0), prefix); // doc->insertLine (doc->lines (), prefix); // somehow, it seems to be safer to do this after removing superfluous lines, than before cursorAtTheEnd (); } void RKConsole::tryNextInBuffer () { RK_TRACE (APP); if (!input_buffer.isEmpty ()) { if (input_buffer.contains ('\n')) { submitCommand (); // will submit and clear the buffer return; } else { setCurrentEditingLine (currentEditingLine () + input_buffer); input_buffer.clear (); } } interrupt_command_action->setEnabled (!incomplete_command.isEmpty ()); } bool RKConsole::isBusy () const { if (current_command) return true; if (!incomplete_command.isEmpty ()) return true; if (!currentEditingLine ().isEmpty ()) return true; if (!input_buffer.isEmpty ()) return true; return false; } void RKConsole::paste () { RK_TRACE (APP); QClipboard *cb = QApplication::clipboard (); submitBatch (cb->text ()); } void RKConsole::clear () { RK_TRACE (APP); doc->clear (); showPrompt (); } void RKConsole::setCommandHistory (const QStringList &new_history, bool append) { RK_TRACE (APP); commands_history.setHistory (new_history, append); } void RKConsole::userLoadHistory (const KUrl &_url) { RK_TRACE (APP); KUrl url = _url; if (url.isEmpty ()) { url = KFileDialog::getOpenUrl (KUrl (), i18n ("*.Rhistory|R history files (*.Rhistory)\n*|All files (*)"), this, i18n ("Select command history file to load")); if (url.isEmpty ()) return; } QString tempfile; KIO::NetAccess::download (url, tempfile, this); QFile file (tempfile); if (!file.open (QIODevice::Text | QIODevice::ReadOnly)) return; setCommandHistory (QString (file.readAll ()).split ('\n', QString::SkipEmptyParts), false); file.close (); KIO::NetAccess::removeTempFile (tempfile); } void RKConsole::userSaveHistory (const KUrl &_url) { RK_TRACE (APP); KUrl url = _url; if (url.isEmpty ()) { url = KFileDialog::getSaveUrl (KUrl (), i18n ("*.Rhistory|R history files (*.Rhistory)\n*|All files (*)"), this, i18n ("Select filename to save command history") #if KDE_IS_VERSION(4,4,0) , KFileDialog::ConfirmOverwrite #endif ); if (url.isEmpty ()) return; } KTemporaryFile tempfile; tempfile.open (); tempfile.write (QString (commandHistory ().join ("\n") + "\n").toLocal8Bit ().data ()); tempfile.close (); KIO::NetAccess::upload (tempfile.fileName (), url, this); } QString RKConsole::cleanSelection (const QString &origin) { RK_TRACE (APP); QString ret; ret.reserve (origin.length ()); QStringList lines = origin.split ("\n"); foreach (QString line, lines) { if (line.startsWith (nprefix)) { ret.append (line.mid (nprefix.length ())); } else if (line.startsWith (iprefix)) { ret.append (line.mid (iprefix.length ())); } else { ret.append (line); } ret.append ('\n'); } return ret; } void RKConsole::copyCommands () { RK_TRACE (APP); KTextEditor::Range sel = view->selectionRange (); if (!sel.isValid ()) return; // we use this somewhat cumbersome (and inefficient) approach as it should also be correct in case of blockwise selections QStringList command_lines = view->selectionText ().split ("\n"); int i = 0; for (int l = sel.start ().line (); l <= sel.end ().line (); ++l) { QString line = doc->line (l); if (!(line.startsWith (iprefix) || line.startsWith (nprefix))) { command_lines.removeAt (i); --i; } ++i; } QApplication::clipboard()->setText (cleanSelection (command_lines.join ("\n"))); } void RKConsole::literalCopy () { RK_TRACE (APP); QApplication::clipboard()->setText (view->selectionText ()); } int RKConsole::currentCursorPositionInCommand(){ RK_TRACE (APP); KTextEditor::Cursor c = view->cursorPosition (); if (c.line () < (doc->lines () - 1)) return -1; return (c.column () - prefix.length()); } void RKConsole::resetConsole () { RK_TRACE (APP); RK_DEBUG (APP, DL_DEBUG, "received interrupt signal in console"); input_buffer.clear (); if (current_command) { RKGlobals::rInterface ()->cancelCommand (current_command); } else { prefix = nprefix; incomplete_command.clear (); showPrompt (); tryNextInBuffer (); // well, the buffer is empty, but this also sets the interrupt_command_action's state, etc. } } void RKConsole::runSelection () { RK_TRACE (APP); pipeUserCommand (cleanSelection (view->selectionText ())); } void RKConsole::copyLinesToOutput () { RK_TRACE (APP); RKCommandHighlighter::copyLinesToOutput (view, RKCommandHighlighter::RInteractiveSession); } void RKConsole::showContextHelp () { RK_TRACE (APP); RKHelpSearchWindow::mainHelpSearch ()->getContextHelp (currentEditingLine (), currentCursorPositionInCommand ()); } void RKConsole::initializeActions (KActionCollection *ac) { RK_TRACE (APP); #ifdef Q_WS_MAC # define REAL_CTRL_KEY Qt::MetaModifier # define REAL_CMD_KEY Qt::ControlModifier #else # define REAL_CTRL_KEY Qt::ControlModifier # define REAL_CMD_KEY Qt::MetaModifier #endif RKStandardActions::copyLinesToOutput (this, this, SLOT (copyLinesToOutput())); context_help_action = RKStandardActions::functionHelp (this, this, SLOT(showContextHelp())); run_selection_action = RKStandardActions::runSelection (this, this, SLOT (runSelection())); interrupt_command_action = ac->addAction ("interrupt", this, SLOT (resetConsole())); interrupt_command_action->setText (i18n ("Interrupt running command")); interrupt_command_action->setShortcut (REAL_CTRL_KEY + Qt::Key_C); interrupt_command_action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionInterrupt)); interrupt_command_action->setEnabled (false); copy_literal_action = ac->addAction ("rkconsole_copy_literal", this, SLOT (literalCopy())); copy_literal_action->setShortcut (REAL_CMD_KEY + Qt::Key_C); copy_literal_action->setText (i18n ("Copy selection literally")); copy_commands_action = ac->addAction ("rkconsole_copy_commands", this, SLOT (copyCommands())); copy_commands_action->setText (i18n ("Copy commands, only")); RKStandardActions::pasteSpecial (this, this, SLOT (submitBatch(const QString&))); ac->addAction (KStandardAction::Clear, "rkconsole_clear", this, SLOT (clear())); paste_action = ac->addAction (KStandardAction::Paste, "rkconsole_paste", this, SLOT (paste())); addProxyAction ("file_print", i18n ("Print Console")); addProxyAction ("file_export_html"); addProxyAction ("view_dynamic_word_wrap"); addProxyAction ("view_inc_font_sizes"); addProxyAction ("view_dec_font_sizes"); KAction *action = ac->addAction ("loadhistory", this, SLOT (userLoadHistory ())); action->setText (i18n ("Import command history...")); action = ac->addAction ("savehistory", this, SLOT (userSaveHistory ())); action->setText (i18n ("Export command history...")); } void RKConsole::pipeUserCommand (const QString &command) { RK_TRACE (APP); if (RKSettingsModuleConsole::pipeUserCommandsThroughConsole ()) { RKConsole::mainConsole ()->pipeCommandThroughConsoleLocal (command); } else { RCommand *cmd = new RCommand (command, RCommand::User); RKGlobals::rInterface ()->issueCommand (cmd); } } void RKConsole::pipeCommandThroughConsoleLocal (const QString &command_string) { RK_TRACE (APP); activate (false); if (isBusy () && (!previous_chunk_was_piped)) { int res = KMessageBox::questionYesNoCancel (this, i18n ("You have configured RKWard to pipe script editor commands through the R Console. However, another command is currently active in the console. Do you want to append it to the command in the console, or do you want to reset the console, first? Press cancel if you do not wish to run the new command, now."), i18n ("R Console is busy"), KGuiItem (i18n ("Append")), KGuiItem (i18n ("Reset, then submit"))); if (res == KMessageBox::No) { resetConsole (); } else if (res != KMessageBox::Yes) { return; } } if (RKSettingsModuleConsole::addPipedCommandsToHistory() != RKSettingsModuleConsole::DontAdd) { QStringList lines = command_string.split ('\n', QString::SkipEmptyParts); if ((RKSettingsModuleConsole::addPipedCommandsToHistory() == RKSettingsModuleConsole::AlwaysAdd) || (lines.count () == 1)) { for (int i = 0; i < lines.count (); ++i) { commands_history.append (lines[i]); } } } cursorAtTheEnd (); submitBatch (command_string + '\n'); previous_chunk_was_piped = true; } void RKConsole::contextMenuEvent (QContextMenuEvent * event) { RK_TRACE (APP); copy_commands_action->setEnabled (view->selection ()); copy_literal_action->setEnabled (view->selection ()); run_selection_action->setEnabled (view->selection ()); console_part->showPopupMenu (event->pos ()); run_selection_action->setEnabled (true); copy_literal_action->setEnabled (true); copy_commands_action->setEnabled (true); } void RKConsole::activate (bool with_focus) { RK_TRACE (APP); // see http://www.mail-archive.com/rkward-devel@lists.sourceforge.net/msg00933.html if (with_focus) view->removeSelection (); RKMDIWindow::activate (with_focus); } ///################### END RKConsole ######################## ///################### BEGIN RKConsolePart #################### RKConsolePart::RKConsolePart (RKConsole *console) : KParts::Part (0) { RK_TRACE (APP); setComponentData (KGlobal::mainComponent ()); setWidget (console); setXMLFile ("rkconsolepart.rc"); } RKConsolePart::~RKConsolePart () { RK_TRACE (APP); } void RKConsolePart::showPopupMenu (const QPoint &pos) { RK_TRACE (APP); QMenu *menu = static_cast (factory ()->container ("rkconsole_context_menu", this)); if (!menu) { RK_ASSERT (false); return; } menu->exec (pos); } #include "rkconsole.moc" rkward-0.6.1/rkward/agents/0000755000175000017500000000000012124345410015127 5ustar thomasthomasrkward-0.6.1/rkward/agents/CMakeLists.txt0000644000175000017500000000064312124345410017672 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(agents_STAT_SRCS rkdebughandler.cpp rkeditobjectagent.cpp rkloadagent.cpp rkprintagent.cpp rkquitagent.cpp rksaveagent.cpp showedittextfileagent.cpp ) QT4_AUTOMOC(${agents_STAT_SRCS}) ADD_LIBRARY(agents STATIC ${agents_STAT_SRCS}) rkward-0.6.1/rkward/agents/rkdebughandler.cpp0000644000175000017500000000522612124345410020621 0ustar thomasthomas/*************************************************************************** rkdebughandler - description ------------------- begin : Wed Oct 19 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkdebughandler.h" #include "../rbackend/rkrbackendprotocol_frontend.h" #include "../debug.h" RKDebugHandler* RKDebugHandler::_instance = 0; RKDebugHandler::RKDebugHandler (QObject *parent) : QObject (parent) { RK_TRACE (APP); _state = NotInDebugger; _request = 0; _command = 0; _instance = this; } RKDebugHandler::~RKDebugHandler () { RK_TRACE (APP); } void RKDebugHandler::debugCall (RBackendRequest *request, RCommand *command) { RK_TRACE (APP); _command = command; _request = request; if (command) _output_context = command->fullOutput (); else _output_context.clear (); _calls = request->params["calls"].toStringList (); _functions = request->params["funs"].toStringList (); _environments = request->params["envs"].toStringList (); _locals = request->params["locals"].toStringList (); _prompt = request->params["prompt"].toString (); QStringList dummy = request->params["relsrclines"].toStringList (); _rel_src_lines.clear (); for (int i = 0; i < dummy.size (); ++i) _rel_src_lines.append (dummy.at (i).toInt ()); _state = InDebugPrompt; newDebugState (); } void RKDebugHandler::sendCancel () { RK_TRACE (APP); RK_ASSERT (_request); submitDebugString ("Q\n"); } void RKDebugHandler::submitDebugString (const QString &command) { RK_TRACE (APP); if (!_request) { RK_ASSERT (false); return; } _request->params["result"] = command; RKRBackendProtocolFrontend::setRequestCompleted (_request); _command = 0; _state = InDebugRun; newDebugState (); } void RKDebugHandler::endDebug () { RK_TRACE (APP); _command = 0; _request = 0; _state = NotInDebugger; newDebugState (); } #include "rkdebughandler.moc" rkward-0.6.1/rkward/agents/rkprintagent.cpp0000644000175000017500000000702612124345410020350 0ustar thomasthomas/*************************************************************************** rkprintagent - description ------------------- begin : Mon Aug 01 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkprintagent.h" #include #include #include #include #include #include #include #include "../rkward.h" #include "../debug.h" RKPrintAgent::RKPrintAgent () : QObject () { RK_TRACE (APP) } RKPrintAgent::~RKPrintAgent () { RK_TRACE (APP) if (delete_file) QFile (file).remove (); if (provider) provider->deleteLater (); } void RKPrintAgent::printPostscript (const QString &file, bool delete_file) { RK_TRACE (APP) KService::Ptr service = KService::serviceByDesktopPath ("okular_part.desktop"); if (!service) service = KService::serviceByDesktopPath ("kpdf_part.desktop"); KParts::ReadOnlyPart *provider = 0; if (service) provider = service->createInstance (0); else RK_DEBUG (APP, DL_WARNING, "No KDE service found for postscript printing"); QAction *printaction = 0; if (provider) { printaction = provider->action ("print"); if (!printaction) printaction = provider->action ("file_print"); if (!printaction) { QAction *a = new QAction (provider); bool ok = connect (a, SIGNAL (triggered()), provider, SLOT (slotPrint())); if (ok) printaction = a; } if (!(printaction && provider->openUrl (KUrl::fromLocalFile (file)))) { RK_DEBUG (APP, DL_WARNING, "No print action in postscript provider"); delete provider; provider = 0; } } if (!provider) { RK_DEBUG (APP, DL_WARNING, "No valid postscript postscript provider was found"); KMessageBox::sorry (RKWardMainWindow::getMain (), i18n ("No service was found to provide a KDE print dialog for postscript files. We will try to open a generic postscript viewer (if any), instead.

    Consider installing 'okular', or configure RKWard not to attempt to print using a KDE print dialog."), i18n ("Unable to open KDE print dialog")); // fallback: If we can't find a proper part, try to invoke a standalone PS reader, instead KRun::runUrl (KUrl::fromLocalFile (file), "appication/postscript", RKWardMainWindow::getMain ()); return; } RKPrintAgent *agent = new RKPrintAgent (); agent->file = file; agent->delete_file = delete_file; agent->provider = provider; // very hacky heuristic to try to find out, whether the print action is synchronous or asnchronous. If the latter, delete after half an hour. If the former delete after printing. QTime ts; ts.start (); printaction->trigger (); if (ts.elapsed () < 5000) { QTimer::singleShot (1800000, agent, SLOT (deleteLater ())); } else { agent->deleteLater (); } } #include "rkprintagent.moc" rkward-0.6.1/rkward/agents/showedittextfileagent.cpp0000644000175000017500000001064612124345410022254 0ustar thomasthomas/*************************************************************************** showedittextfileagent - description ------------------- begin : Tue Sep 13 2005 copyright : (C) 2005, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "showedittextfileagent.h" #include #include #include #include #include #include #include #include "../windows/rkcommandeditorwindow.h" #include "../rbackend/rinterface.h" #include "../rbackend/rkrbackendprotocol_frontend.h" #include "../windows/rkworkplace.h" #include "../rkglobals.h" #include "../rkward.h" #include "../debug.h" ShowEditTextFileAgent::ShowEditTextFileAgent (RBackendRequest *request, const QString &text, const QString &caption) : QObject (RKWardMainWindow::getMain ()) { RK_TRACE (APP); ShowEditTextFileAgent::request = request; dialog = new KDialog (0); // dialog setup dialog->setCaption (caption); dialog->setButtons (KDialog::Ok); dialog->setModal (false); QWidget *page = new QWidget (dialog); dialog->setMainWidget (page); QVBoxLayout *layout = new QVBoxLayout (page); layout->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (text, page); label->setWordWrap (true); layout->addWidget (label); dialog->setButtonText (KDialog::Ok, i18n ("Done")); connect (dialog, SIGNAL (finished ()), this, SLOT (deleteLater ())); // do it dialog->show (); } ShowEditTextFileAgent::~ShowEditTextFileAgent () { RK_TRACE (APP); RKRBackendProtocolFrontend::setRequestCompleted (request); dialog->deleteLater (); } // static void ShowEditTextFileAgent::showEditFiles (RBackendRequest *request) { RK_TRACE (APP); if (!request) return; QStringList files = request->params["files"].toStringList (); QStringList titles = request->params["titles"].toStringList (); QString wtitle = request->params["wtitle"].toString (); bool prompt = request->params["prompt"].toBool (); int count = files.count (); RK_ASSERT (titles.count () == count); QStringList display_titles; for (int n = 0; n < count; ++n) { QString title; if (!titles[n].isEmpty ()) title = titles[n]; else if (count > 1) title = files[n]; if (!wtitle.isEmpty ()) { if (!title.isEmpty ()) title.prepend (": "); title.prepend (wtitle); } display_titles.append (title); } bool r_highlighting = false; bool read_only = true; bool delete_files = false; if (request->type == RBackendRequest::ShowFiles) { RK_ASSERT (!request->synchronous); if (prompt) KMessageBox::informationList (RKWardMainWindow::getMain (), i18n ("A command running in the R-engine wants you to see the following file(s):\n"), display_titles, i18n ("Showing file(s)"), "show_files"); delete_files = request->params["delete"].toBool (); RKRBackendProtocolFrontend::setRequestCompleted (request); } else if (request->type == RBackendRequest::EditFiles) { if (prompt) { new ShowEditTextFileAgent (request, i18n ("A command running in the R-engine wants you to edit one or more file(s). Please look at these files, edit them as appropriate, and save them. When done, press the \"Done\"-button, or close this dialog to resume.\n\n") + display_titles.join ("\n"), i18n ("Edit file(s)")); } else { RKRBackendProtocolFrontend::setRequestCompleted (request); } r_highlighting = true; read_only = false; } else { RK_ASSERT (false); } // do this last, as it may produce error messages, if some of the files could not be opened. for (int n = 0; n < count; ++n) { RKWorkplace::mainWorkplace ()->openScriptEditor (KUrl::fromLocalFile (files[n]), QString (), r_highlighting, read_only, display_titles[n], delete_files); } } rkward-0.6.1/rkward/agents/rkprintagent.h0000644000175000017500000000323012124345410020006 0ustar thomasthomas/*************************************************************************** rkprintagent - description ------------------- begin : Mon Aug 01 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPRINTAGENT_H #define RKPRINTAGENT_H #include #include /** The main purpose of this class is to cope with the lack of kprinter in KDE 4. Tries * to offer a KDE print dialog for an existing postscript file. */ class RKPrintAgent : public QObject { Q_OBJECT public: /** print the given postscript file. * @param delete_file : Try to delete the file after printing. Note: This is not guaranteed to work. */ static void printPostscript (const QString &file, bool delete_file=false); protected: RKPrintAgent (); ~RKPrintAgent (); QString file; KParts::ReadOnlyPart *provider; bool delete_file; }; #endif rkward-0.6.1/rkward/agents/rkeditobjectagent.h0000644000175000017500000000330712124345410020773 0ustar thomasthomas/*************************************************************************** rkeditobjectagent - description ------------------- begin : Fri Feb 16 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKEDITOBJECTAGENT_H #define RKEDITOBJECTAGENT_H #include #include "../rbackend/rcommandreceiver.h" #include #include /** This agent gets called, when an rk.edit() command was run in the backend. The purpose is to first update the structure information for the object(s), and then try to open it/them. @author Thomas Friedrichsmeier */ class RKEditObjectAgent : public QObject, public RCommandReceiver { Q_OBJECT public: RKEditObjectAgent (const QStringList &object_names, RCommandChain *chain); ~RKEditObjectAgent (); protected: void rCommandDone (RCommand *command); private: QStringList object_names; int done_command_id; }; #endif rkward-0.6.1/rkward/agents/rkquitagent.h0000644000175000017500000000370112124345410017637 0ustar thomasthomas/*************************************************************************** rkquitagent - description ------------------- begin : Thu Jan 18 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKQUITAGENT_H #define RKQUITAGENT_H #include #include "../rbackend/rcommandreceiver.h" class RKProgressControl; /** The purpose of RKQuitAgent is to delay the actual destruction of the app until all commands have finished in the backend. The quit agent can NOT handle queries for saving some more data, or similar things. Do not call before you really want to quit the application. @author Thomas Friedrichsmeier */ class RKQuitAgent : public QObject, public RCommandReceiver { Q_OBJECT public: /** Constructor. As soon as you contruct an object of this type, the RKWard application *will* quit (but maybe with a short delay)! */ RKQuitAgent (QObject *parent); ~RKQuitAgent (); static bool quittingInProgress () { return quitting; }; public slots: void doQuitNow (); void showWaitDialog (); protected: void rCommandDone (RCommand *command); private: RKProgressControl *cancel_dialog; static bool quitting; }; #endif rkward-0.6.1/rkward/agents/rkquitagent.cpp0000644000175000017500000000537212124345410020200 0ustar thomasthomas/*************************************************************************** rkquitagent - description ------------------- begin : Thu Jan 18 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkquitagent.h" #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "../rkward.h" #include "../misc/rkprogresscontrol.h" #include "../debug.h" //static bool RKQuitAgent::quitting = false; RKQuitAgent::RKQuitAgent (QObject *parent) : QObject (parent) { RK_TRACE (APP); quitting = true; RCommand *command = new RCommand (QString (), RCommand::EmptyCommand | RCommand::QuitCommand, QString (), this); RKWardMainWindow::getMain ()->hide (); cancel_dialog = new RKProgressControl (this, i18n ("Waiting for remaining R commands to finish. To quit immediately, press Cancel (WARNING: This may result in loss of data)"), i18n ("Waiting for R to finish"), RKProgressControl::AllowCancel | RKProgressControl::ShowAtOnce); cancel_dialog->addRCommand (command, true); connect (cancel_dialog, SIGNAL (cancelled ()), this, SLOT (doQuitNow ())); if (RKGlobals::rInterface ()->backendIsDead ()) { // nothing to loose QTimer::singleShot (0, this, SLOT (doQuitNow ())); return; } else if (RKGlobals::rInterface ()->backendIsIdle ()) { // there should be no problem while quitting. If there is, show the dialog after 300 msec QTimer::singleShot (300, this, SLOT (showWaitDialog ())); } else { showWaitDialog (); } RKGlobals::rInterface ()->issueCommand (command); } RKQuitAgent::~RKQuitAgent () { RK_TRACE (APP); } void RKQuitAgent::showWaitDialog () { RK_TRACE (APP); cancel_dialog->doNonModal (true); } void RKQuitAgent::doQuitNow () { RK_TRACE (APP); RKWardMainWindow::getMain ()->close (); // this will kill the agent as well. } void RKQuitAgent::rCommandDone (RCommand *) { RK_TRACE (APP); QTimer::singleShot (0, this, SLOT (doQuitNow ())); } #include "rkquitagent.moc" rkward-0.6.1/rkward/agents/showedittextfileagent.h0000644000175000017500000000641212124345410021715 0ustar thomasthomas/*************************************************************************** showedittextfileagent - description ------------------- begin : Tue Sep 13 2005 copyright : (C) 2005, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SHOWEDITTEXTFILEAGENT_H #define SHOWEDITTEXTFILEAGENT_H #include struct RBackendRequest; class KDialog; /** The purpose of this agent is to display text files for showing and/or editing on request of the R backend. Technically speaking, it gets invoked, whenever the standard R callbacks (ptr_)R_ShowFiles, (ptr_)R_EditFiles, or (ptr_)R_EditFile are called. While the task of simply opening such files for display/editing is rather simple, there is one slightly more difficult issue involved (and hence this class to handle it): In standard R, all these calls are blocking further processing, until the user has closed the shown/edited files. In some cases this may be necessary (for instance if R wants to use with the edited files immediately), in some cases this is an unnecessary nuisance (such as when R simply wants to display a help page or some other purely informational text). The solution to this, used in this agent, is to display a non-modal dialog with a "Done"-button, and thereby leave the decision to the user. Whenever the user thinks, it's safe to resume processing, the "Done"-button can be pressed, even if the files are still open. Until that time, processing is halted. You probably don't want to create an instance of this agent directly. Rather use the static showEditFiles (). @author Thomas Friedrichsmeier */ class ShowEditTextFileAgent : public QObject { public: /** constructor. Do not use directly. Use the static showEditFiles () instead. @param args The corresponding RCallbackArgs-record @param text Text to display in the dialog. */ ShowEditTextFileAgent (RBackendRequest *request, const QString &text, const QString &caption); /** destructor. Called when the user presses the done button (or closes the notification dialog). Resumes processing in the backend, deletes the agent */ ~ShowEditTextFileAgent (); /** This gets called by RInterface, in order to show/edit the files in question. The RCallbackArgs-struct is passed in raw form, and only this function sorts out, what exactly needs to be done. Note that this is a static member. It will take care of creating/deleting an agent on its own. */ static void showEditFiles (RBackendRequest *request); private: RBackendRequest *request; KDialog *dialog; }; #endif rkward-0.6.1/rkward/agents/rksaveagent.h0000644000175000017500000000440512124345410017615 0ustar thomasthomas/*************************************************************************** rksaveagent - description ------------------- begin : Sun Aug 29 2004 copyright : (C) 2004, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSAVEAGENT_H #define RKSAVEAGENT_H #include "../rbackend/rcommandreceiver.h" #include #include class RCommandChain; /** This class basically provides a mechanism to let the user save a workspace, find out whether saving was successful and - if it was not - to ask for a new filename or the like. @author Thomas Friedrichsmeier */ class RKSaveAgent : public RCommandReceiver, public QObject { public: enum DoneAction { DoNothing=0, Load=1 }; /** creates a new RKSaveAgent. If when_done == Quit, the RKSaveAgent will quit the application as soon as saving was successful (or it asked to by the user). Similarly, if when_done==Load, it will load a new workspace after saving (specify the url in load_url). If url is given (not empty), and not save_file_as, the agent will try to save to the given url, else it will ask the user to specify a url. RKSaveAgent will self destruct when done. */ explicit RKSaveAgent (KUrl url, bool save_file_as=false, DoneAction when_done=DoNothing, KUrl load_url=KUrl()); ~RKSaveAgent (); protected: void rCommandDone (RCommand *command); private: bool askURL (); void done (); RCommandChain *save_chain; KUrl save_url; KUrl load_url; KUrl previous_url; DoneAction when_done; }; #endif rkward-0.6.1/rkward/agents/rksaveagent.cpp0000644000175000017500000000750112124345410020150 0ustar thomasthomas/*************************************************************************** rksaveagent - description ------------------- begin : Sun Aug 29 2004 copyright : (C) 2004, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksaveagent.h" #include #include #include #include #include "../rbackend/rinterface.h" #include "../core/robjectlist.h" #include "../rkglobals.h" #include "../rkward.h" #include "../settings/rksettingsmodulegeneral.h" #include "../windows/rkworkplace.h" #include "../debug.h" RKSaveAgent::RKSaveAgent (KUrl url, bool save_file_as, DoneAction when_done, KUrl load_url) : QObject () { RK_TRACE (APP); save_url = url; RKSaveAgent::when_done = when_done; RKSaveAgent::load_url = load_url; previous_url = RKWorkplace::mainWorkplace ()->workspaceURL (); save_chain = 0; if (save_url.isEmpty () || save_file_as) { if (!askURL ()) { deleteLater(); return; } } RKWorkplace::mainWorkplace ()->flushAllData (); save_chain = RKGlobals::rInterface ()->startChain (0); RKWorkplace::mainWorkplace ()->setWorkspaceURL (save_url, true); RKWorkplace::mainWorkplace ()->saveWorkplace (save_chain); RKGlobals::rInterface ()->issueCommand (new RCommand ("save.image (\"" + save_url.toLocalFile () + "\")", RCommand::App, QString::null, this), save_chain); } RKSaveAgent::~RKSaveAgent () { RK_TRACE (APP); } bool RKSaveAgent::askURL () { RK_TRACE (APP); save_url = KFileDialog::getSaveFileName (save_url, i18n ("%1|R Workspace Files (%1)\n*|All files", RKSettingsModuleGeneral::workspaceFilenameFilter ())); if (save_url.isEmpty ()) { if (when_done != DoNothing) { if (KMessageBox::warningYesNo (0, i18n ("No filename given. Your data was NOT saved. Do you still want to proceed?")) != KMessageBox::Yes) when_done = DoNothing; } return false; } return true; } void RKSaveAgent::rCommandDone (RCommand *command) { RK_TRACE (APP); if (command->hasError ()) { RKWorkplace::mainWorkplace ()->setWorkspaceURL (previous_url); int res; if (when_done != DoNothing) { res = KMessageBox::warningYesNoCancel (0, i18n ("Saving to file '%1' failed. What do you want to do?", save_url.path ()), i18n ("Save failed"), KGuiItem (i18n ("Try saving with a different filename")), KGuiItem (i18n ("Saving failed"))); } else { res = KMessageBox::warningYesNo (0, i18n ("Saving to file '%1' failed. Do you want to try saving to a different filename?", save_url.path ())); } if (res == KMessageBox::Yes) { if (askURL ()) { RKGlobals::rInterface ()->issueCommand (new RCommand ("save.image (\"" + save_url.toLocalFile () + "\")", RCommand::App, QString::null, this), save_chain); return; } } else if (res == KMessageBox::No) { done (); return; } // else when_done = DoNothing; } done (); } void RKSaveAgent::done () { RK_TRACE (APP); if (save_chain) { RKGlobals::rInterface ()->closeChain (save_chain); } if (when_done == Load) { RKWardMainWindow::getMain ()->fileOpenNoSave (load_url); } deleteLater (); } rkward-0.6.1/rkward/agents/rkdebughandler.h0000644000175000017500000000457412124345410020273 0ustar thomasthomas/*************************************************************************** rkdebughandler - description ------------------- begin : Wed Oct 19 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKDEBUGHANDLER_H #define RKDEBUGHANDLER_H #include #include "../rbackend/rcommand.h" class RBackendRequest; /** A central handler, responsible for keeping all debug related widgets up-to-date */ class RKDebugHandler : public QObject { Q_OBJECT public: RKDebugHandler (QObject *parent); ~RKDebugHandler (); static RKDebugHandler *instance () { return _instance; }; void debugCall (RBackendRequest *request, RCommand *command); void submitDebugString (const QString &command); void sendCancel (); void endDebug (); enum DebugState { NotInDebugger, InDebugPrompt, InDebugRun }; DebugState state () const { return _state; }; QString outputContext () const { return _output_context; }; QStringList calls () const { return _calls; }; QStringList functions () const { return _functions; }; QStringList environments () const { return _environments; }; QStringList locals () const { return _locals; }; QList relativeSourceLines () const { return _rel_src_lines; }; QString debugPrompt () const { return _prompt; }; RCommand *command () const { return _command; }; signals: void newDebugState (); private: RCommand *_command; QStringList _calls, _functions, _environments, _locals; QList _rel_src_lines; QString _prompt, _output_context; DebugState _state; RBackendRequest *_request; static RKDebugHandler *_instance; }; #endif rkward-0.6.1/rkward/agents/rkloadagent.h0000644000175000017500000000326312124345410017577 0ustar thomasthomas/*************************************************************************** rkloadagent - description ------------------- begin : Sun Sep 5 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKLOADAGENT_H #define RKLOADAGENT_H #include #include "../rbackend/rcommandreceiver.h" #include #include /** The RKLoadAgent is really a rather simple agent. All it needs to do is display an error message, if loading fails. No further action is required. Like all agents, the RKLoadAgent self-destructs when done. @author Thomas Friedrichsmeier */ class RKLoadAgent : public QObject, public RCommandReceiver { Q_OBJECT public: explicit RKLoadAgent (const KUrl &url, bool merge=false); ~RKLoadAgent (); protected: void rCommandDone (RCommand *command); private: /// needed if file to be loaded is remote QString tmpfile; }; #endif rkward-0.6.1/rkward/agents/rkloadagent.cpp0000644000175000017500000000660612124345410020136 0ustar thomasthomas/*************************************************************************** rkloadagent - description ------------------- begin : Sun Sep 5 2004 copyright : (C) 2004, 2007, 2009, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkloadagent.h" #include #include #include #include #include #include "../rkglobals.h" #include "../core/robjectlist.h" #include "../rbackend/rinterface.h" #include "../rkward.h" #include "../windows/rkworkplace.h" #include "../settings/rksettingsmodulegeneral.h" #include "../debug.h" #define WORKSPACE_LOAD_COMMAND 1 RKLoadAgent::RKLoadAgent (const KUrl &url, bool merge) { RK_TRACE (APP); RKWardMainWindow::getMain ()->slotSetStatusBarText (i18n ("Loading Workspace ...")); QString filename; if (!url.isLocalFile ()) { KIO::NetAccess::download (url, tmpfile, RKWardMainWindow::getMain ()); filename = tmpfile; } else { filename = url.toLocalFile (); } RCommand *command; if (!merge) { RKWardMainWindow::getMain ()->slotCloseAllWindows (); command = new RCommand ("remove (list=ls (all.names=TRUE))", RCommand::App | RCommand::ObjectListUpdate); RKGlobals::rInterface ()->issueCommand (command); } command = new RCommand ("load (\"" + filename + "\")", RCommand::App | RCommand::ObjectListUpdate, QString::null, this, WORKSPACE_LOAD_COMMAND); RKGlobals::rInterface ()->issueCommand (command); RKWorkplace::mainWorkplace ()->setWorkspaceURL (url); } RKLoadAgent::~RKLoadAgent () { RK_TRACE (APP); } void RKLoadAgent::rCommandDone (RCommand *command) { RK_TRACE (APP); if (command->getFlags () == WORKSPACE_LOAD_COMMAND) { if (!tmpfile.isEmpty ()) KIO::NetAccess::removeTempFile (tmpfile); if (command->failed ()) { KMessageBox::error (0, i18n ("There has been an error opening file '%1':\n%2", RKWorkplace::mainWorkplace ()->workspaceURL ().path (), command->error ()), i18n ("Error loading workspace")); RKWorkplace::mainWorkplace ()->setWorkspaceURL (KUrl()); } else { RKWorkplace::mainWorkplace ()->restoreWorkplace (); if (RKSettingsModuleGeneral::cdToWorkspaceOnLoad ()) { if (RKWorkplace::mainWorkplace ()->workspaceURL ().isLocalFile ()) { RKGlobals::rInterface ()->issueCommand ("setwd (" + RObject::rQuote (RKWorkplace::mainWorkplace ()->workspaceURL ().directory ()) + ")", RCommand::App); } } } RKWardMainWindow::getMain ()->slotSetStatusReady (); RKWardMainWindow::getMain ()->setCaption (QString::null); // trigger update of caption delete this; return; } else { RK_ASSERT (false); } } #include "rkloadagent.moc" rkward-0.6.1/rkward/agents/rkeditobjectagent.cpp0000644000175000017500000000526112124345410021327 0ustar thomasthomas/*************************************************************************** rkeditobjectagent - description ------------------- begin : Fri Feb 16 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkeditobjectagent.h" #include #include #include "../rkglobals.h" #include "../core/robjectlist.h" #include "../rbackend/rinterface.h" #include "../rkward.h" #include "../windows/rkworkplace.h" #include "../debug.h" RKEditObjectAgent::RKEditObjectAgent (const QStringList &object_names, RCommandChain *chain) { RK_TRACE (APP); RKEditObjectAgent::object_names = object_names; // first issue an empty command to trigger an update of the object list RKGlobals::rInterface ()->issueCommand (new RCommand (QString::null, RCommand::EmptyCommand | RCommand::ObjectListUpdate, QString::null, this), chain); // now add another empty command to find out, when the update is complete RCommand *command = new RCommand (QString::null, RCommand::EmptyCommand, QString::null, this); done_command_id = command->id (); RKGlobals::rInterface ()->issueCommand (command, chain); } RKEditObjectAgent::~RKEditObjectAgent () { RK_TRACE (APP); } void RKEditObjectAgent::rCommandDone (RCommand *command) { RK_TRACE (APP); if (command->id () == done_command_id) { for (QStringList::const_iterator it = object_names.constBegin (); it != object_names.constEnd (); ++it) { QString object_name = *it; RObject *obj = RObjectList::getObjectList ()->findObject (object_name); if (!(obj && RKWorkplace::mainWorkplace()->editObject (obj))) { KMessageBox::information (0, i18n ("The object '%1', could not be opened for editing. Either it does not exist, or RKWard does not support editing this type of object, yet.", object_name), i18n ("Cannot edit '%1'", object_name)); } } // we're done deleteLater (); } } #include "rkeditobjectagent.moc" rkward-0.6.1/rkward/version.h.in0000644000175000017500000000011412124345412016107 0ustar thomasthomas/* Version number of package */ #define RKWARD_VERSION "@RKVERSION_NUMBER@" rkward-0.6.1/rkward/rkglobals.cpp0000644000175000017500000000253312124345412016337 0ustar thomasthomas/*************************************************************************** rkglobals - description ------------------- begin : Wed Aug 18 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkglobals.h" #include RInterface *RKGlobals::rinter; RKModificationTracker *RKGlobals::mtracker; RKGlobals::RKGlobals () { } RKGlobals::~RKGlobals () { } #include int RKGlobals::marginHint () { return KDialog::marginHint (); } int RKGlobals::spacingHint () { return KDialog::spacingHint (); } rkward-0.6.1/rkward/rkwardapplication.h0000644000175000017500000000547112124345416017552 0ustar thomasthomas/*************************************************************************** rkwardapplication - description ------------------- begin : Sun Nov 26 2006 copyright : (C) 2006, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKWARDAPPLICATION_H #define RKWARDAPPLICATION_H #include #include class RKMDIWindow; /** The purpose of subclassing KApplication as RKWardApplication, is to obtain raw access to X11 events. This is needed to detect the creation of new toplevel windows (R X11 windows), and changed in the caption of those windows. */ class RKWardApplication : public KApplication { public: RKWardApplication (); ~RKWardApplication (); /** like KApplication::kApplication () (and actually, this should always return the same pointer), but without the need to cast */ static RKWardApplication *getApp (); /** start looking for new top-level windows created on the screen */ void startWindowCreationDetection (); /** stop looking for new top-level windows created on the screen @returns the window id of the last top-level window created after the last call to startWindowCreation, hoping it was only one. 0 if no window was created/detected. */ WId endWindowCreationDetection (); #ifdef Q_WS_X11 /** watch the given window for changes in its WM_NAME property (i.e. changes in caption). When a change is detected, the caption will be set on watcher. WARNING: Do not use to watch windows managed by Qt! Will override the event mask for this window (within qt_xdisplay ()). WARNING: Remember to call unregisterNameWatcher, when watcher is deleted! */ void registerNameWatcher (WId watched, RKMDIWindow *watcher); /** remove a watch created with registerNameWatcher */ void unregisterNameWatcher (WId watched); /** reimplemented from KApplication to look for CreateNotify and PropertyNotify events */ bool x11EventFilter (XEvent *e); #endif private: static RKWardApplication *rkapp; bool detect_x11_creations; WId created_window; QMap name_watchers_list; }; #endif rkward-0.6.1/rkward/Info.plist.in0000644000175000017500000000240712124345411016227 0ustar thomasthomas CFBundleDevelopmentRegion English CFBundleExecutable rkward CFBundleGetInfoString KDE frontend to the R statistics language CFBundleIconFile rkward.icns CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString @RKVERSION_NUMBER@ CFBundleName RKWard CFBundlePackageType APPL CFBundleShortVersionString @RKVERSION_NUMBER@ CFBundleSignature ???? CFBundleVersion CSResourcesFileMapped LSRequiresCarbon NSHumanReadableCopyright rkward-0.6.1/rkward/pages/0000755000175000017500000000000012124345411014746 5ustar thomasthomasrkward-0.6.1/rkward/pages/rkward_workspace_browser.rkh0000644000175000017500000001163712124345411022577 0ustar thomasthomas Workspace Browser The workspace browser allows to view and manipulate R objects. This includes both your own objects (data, functions), and so-called "package environments". As a rough analogy, this is similar to a regular file-system browser, expect you browser R objects in your workspace, instead of files on your computer. The workspace browser can be invoked using Windows->Activate->Show / Hide Workspace Browser (default shortcut is Alt+1), or by clicking on the "Workspace" icon, which is located on the top of the left window border, by default.
    Literally hundreds or even thousands of objects are present in a typical R session. This can be overwhelming at first, therefore the workspace browser offers to show only a certain subset of objects. The options here are "Show Hidden Objects", "All vs. Non-Functions vs. Functions", and "Show All Environments" (available at the top of the browser window, or chosing "Show Objects" from the context menu). The first should be obvious. It controls whether objects whose name start with a dot ('.') are shown or not. Those are often used for internal objects, which are not meant for direct use, so it's generally safe to hide them from view. The second allows to select by the type of object. "All" does not filter, while "Functions" shows only functions, and "Non-Functions" shows all other objects (typically data). The "Show All Environments" option controls, whether package environments and their objects are shown. Roughly speaking, if you turn off this option, only your "own" objects are shown, while with the option turned on, all pre-defined objects are also shown. More technically speaking, when the option is turned off, only the .GlobalEnv (see ) is shown, which is the environment, in which you create and edit your data. Note that objects are organized in a hierarchy, i.e. some types of objects contain further "child" objects. This is indicated by a "+" symbol to the left of the object name. Clicking on this will expand the view to show all the children of the object. Hovering the mouse pointer over an object will show a short summary of the objects' basic properties.
    Several actions are available from the context menu (by right-clicking on one of the objects), however some of these actions are only available for some types of objects. The most important actions for objects in package environments:
    • Search Help: This will try to locate and show a relevant R help page on the object.
    • View: Open a window with detailed information about the object. This will, among others, use the R commands print and summary to show more information.
    • Copy to new symbol / Copy to .GlobalEnv: In order to manipulate objects, you need to copy them to the .GlobalEnv. For instance, you could copy an object from the environment "package:datasets" into the .GlobalEnv, and in a second step, edit it.
    Further actions available for objects in the .GlobalEnv:
    • Edit: Open the object in a data editor. Currently editing is only supported for data.frames.
    • Rename / Delete: These should be obvious.
    Some default settings for the Workspace Browser can be configured using Settings->Configure RKWard->Workspace, or by selecting "Configure Defaults" from the context menu:
    • Show hidden objects / show all environments: See above. In contrast to the settings made directly in the workspace browser, these configure the default settings in the workspace browser (i.e. those that are effectively after restarting RKWard).
    • Show objects with children: Controls whether objects with children (such as environments, lists) are shown, even if they do not correspond to the current filter.
    • Show variables / functions: Equivalent to the "All vs. Non-Function vs. Functions" control described above.
    • Label field / Type field / Class field: Which columns are shown for each object?
    • Never fetch the structure of these packages: Some (few) R packages contain very many small objects (tens of thousands). In the worst case, trying to fetch structure information on those (i.e. fetching the information to be shown in the workspace browser) can consume a lot of resources and make RKWard unresponsive. Package "GO" is one such package, and is "blacklisted" by default. If you note that loading a package takes exceedingly long, you may consider adding it to this list.
    rkward-0.6.1/rkward/pages/rkward_for_rkward_devs.rkh0000644000175000017500000000255512124345411022216 0ustar thomasthomas For RKWard Developers List of various "internal" functions which are generally not of interest to regular users but may be to those who are interested in writing (or extending) plugins or contributing to other areas of RKWard. Make sure to read the warnings and special comments wherever noted.
    • Call or list available plugins: For automated testing of plugins see .
    • Various labels and names related functions are documented here: .
    • Sync: these functions are useful in automated testing:
    • For more functions of interest see:
    • Do read the the online wiki as well.
    • To write and share your own GUI dialogs, see the Introduction to Writing Plugins for RKWard.
    TODO: Make this more developer centric with as many links as possible (doc writing, plugin pages, etc)
    rkward-0.6.1/rkward/pages/rkward_output.css0000644000175000017500000000156612124345411020402 0ustar thomasthomaspre.code { margin-left: 2em; } pre.code:before { display: block; content: "> "; width: 2em; color: black; float: left; margin-left: -2em; } pre.output_normal { clear: both; /* make sure never to float around the "> " marker */ } pre.output_warning { clear: both; /* make sure never to float around the "> " marker */ background-color: #ffaaaa; } table { border-spacing: 0px; } /* TOC menu */ .RKTOC { background-color: #eeeeff; position: fixed; top: 0px; right: 0px; height: 100%; width: 25%; padding: 7px; display: none; overflow: auto; } .RKTOChidden { display: inline; height: 1em; overflow: hidden; } .toggleTOC:link, .toggleTOC:visited { color: blue; font-weight: bold; } .right { position: absolute; right: 7px; text-align: right; } .center { position: absolute; right: 25%; left: 25%; top: 7px; text-align: center; } /* end TOC menu */ rkward-0.6.1/rkward/pages/rkward_console.rkh0000644000175000017500000001432612124345411020476 0ustar thomasthomas Using the RKWard R Console Describe features and settings regarding the RKWard R Console. The console can - by default - be found at the bottom of the application window. Press the tool button labelled "R Console" to invoke it.
    RKWard is based on the R language for statistical computing. The console allows you to enter R commands directly. Obviously, to use this, you need to know some basics of the R language. Select Help->Help on R for some introductory information. The console is meant for interactive use and small commands. For editing complex commands / scripts, using the Script File Editor (File->New->Script File) is much more comfortable. Many console features are available from the context menu. To invoke the context menu, click the right mouse button inside the console window.
    To interrupt a running command, press Ctrl+C, or chose "Interrupt running command" from the context menu. Note that the command will not necessarily end immediately. If there are several other commands running at the same time (e.g. some action you invoked from the Analysis menu), the console will only become available again, when the R backend becomes idle.
    To re-run (a sequence of) selected commands, select them using the mouse. Then chose "Run selection" from the context menu (default shortcut is F8). Leading "> " and "+ " on the selected lines will be removed automatically.
    There are two copy modes available from the context menu (or the Edit menu). One allows you to copy the selection literally, i.e. including the prompts "> " and "+ ". In contrast, "Copy selection cleaned" will remove the prompts from the text copied into the clipboard. Note that the customary shortcut for copying text - Ctrl+C - does NOT work in the console, as Ctrl+C already means interrupting the current command.
    Pressing F2 (or selecting "Function reference" from the context menu) will try to look up the R help page for whichever keyword the cursor is currently on.
    The console provides a mechanism to recall recent commands, similar to the readline functionality offered in R or most shells. To recall the previous command, simply press the up arrow. Press the up arrow repeatedly to recall the command before that, and so on. Similarily, pressing the down arrow goes downwards in the command history. Of course, you can also edit a recalled command line. It is also possible to search the command history for lines starting with a specified string. To use this, enter - for example - "print" in the console. Now use Shift+Up / Shift+Down. You will note, that only those recent command lines that started with "print" will be shown. It is possible to make the second mode of searching the command history the default. In this case, pressing Shift+Up/Down will navigate all commands, while pressing Up/Down without the Shift key will show only matching lines. (see Section settings). You can also save / load a command history at any time during your session, using File->Import / Export command history or the R commands savehistory() and loadhistory().
    Pressing the Tab key while typing the name of an R object will try to complete the name of that R object. If several objects start with the typed characters, a list of all those objects will be shown. For an example, enter "base::pa" in the console, then press Tab. This will list all objects from package base starting with "pa". Now append an "s", and press Tab again. The word will be changed to "paste", as that is the only matching object name. Based on some simple heuristics, RKWard will try to complete file names instead of object names, where appropriate. This is done, when the cursor seems to be inside a quoted string that does not seem to be part of an object name.
    To configure the behavior of the console, select "Configure" from the context menu. The following options are configurable:
    • Load/save command history: Whether the command history is saved when closing RKWard, and reloaded when next starting RKWard again. If this is not checked, each session of RKWard will start out with an empty command history.
    • Maximum length command history: Only this many lines are kept in the command history.
    • Maximum number of paragraphs/lines to display in the console: No more than this many total lines (commands and output) will be shown in the console. When this number of lines is exceeded, lines will be removed at the top of the console window. To clear the console entirely, chose "Clear" from the context menu or the Edit menu.
    • Run commands from script editor throught the console: Commands coming from script editors may be sent through the console, i.e. the commands and their results will be shown in the console. If this option is not checked, the commands will only be visible in the Command log, but not in the console.
    • Also add those commands to console history: If the above option is checked, this affects, whether such commands are also added to the console history. Turning off this option may help to keep the console history "clean".
    • Command history is context sensitive by default: If this is checked, the context sensitive mode of navigating the command history is the default, i.e. available with Up/Down without Shift. Else the key binding for this is Shift+Up/Down.
    rkward-0.6.1/rkward/pages/rkward_for_r_users.rkh0000644000175000017500000001452012124345411021360 0ustar thomasthomas RKWard for R Users Briefly explains the main components of RKWard, assuming the user is already familiar with basic concepts of R.
    First things first: An emulation of the standard R console can be found at the bottom on the screen. There you will notice several buttons, one of which is labelled "R Console" and has a console icon. This console works almost exactly like the regular R text console, so you can start working right away. Differences include:
    • Syntax highlighting
    • Pressing the Tab key will not complete local file paths (at the moment), but the names of R symbols and functions
    • While typing function calls, a list of arguments to that function is shown in a box (argument hinting)
    • While the cursor is on an R symbol or function, pressing F2 will search the R help for that symbol. Also available from the Help menu, or the right mouse button menu
    See for more details.
    Often it is more convenient to write scripts in a separate file, instead of typing them directly in the console. To open a new script editor (with syntax highlighting, and many more features), chose File->New->Script File, or open an already existing Script file using File->Open R Script File. You will note that the editor opens in a new window in the main workplace (the area of the window, that you are most likely reading this text, in). You can open any number of Script editor windows at the same time. To run the code in a script editor window, either copy and paste it to the console, or chose one of the actions in the Run menu. such as Run All or Run Selection. Note: The contents of the menus may change according to the type of active window. Hence, if you look at the Run menu while reading this, there will be no entries.
    RKWard comes with a "workspace view" or "object browser". By default this is available by clicking on "Workspace" on the left side of the application window. This allows you to examine and manipulate all objects in the R workspace. In case you are not familiar with this aspect of R (usually not directly visible): All the symbols you create are children of the so-called ".GlobalEnv" environment (see ). Symbols defined in loaded libraries are located in their own environments. The object browser provides function to select with types of object are shown (on the top). Hovering the mouse over an item will show some additional information on the symbol. Right-clicking on an item will show available actions. See for details.
    By default R help pages are shown as HTML, inside RKWard. You can invoke the help in the usual way by running e.g. "?print" or "help (print)" or "help.start ()" in the console. Additionally, there is a tool window to search your installed R help pages. This is accessible using a button located at the bottom of the window (next to the console button). To view a help page found using this tool, double click on it.
    RKWard provides an advanced dialog to have installation, updating, and loading of packages. This is available from Workspace->Configure Packages.
    All windows shown in the main view area can be detached to a separate top level window using Windows->Detach. Similarly, detached windows can be attached to the main workplace using Window->Attach. Windows can be closed using Windows->Close (Ctrl+W by default). Tool windows (e.g. the R Console) can be detached and re-attached using the arrow-icon in their window border.
    RKWard provides a buit-in editor for data.frames. In fact, you can edit many data.frames at the same time, and even while running lengthy calculations. Still the data is stored as a regular data.frame in R. To explore the data editor, either chose File->New->Dataset, or right click a data.frame in the Workspace browser, and chose Edit from the menu. Support for adding other types of data, esp. single vectors is planned, but not currently supported.
    R has a few immensely powerful graphics systems (although not interactive) provided by various packages such as graphics and lattice. RKWard wraps around the standard platform-dependent screen device to provide a uniform experience. In additional to the standard functionality of these packages, RKWard provides a screen device history mechanism to store and browse your plots. See for details.
    RKWard provides various utility functions which are described here:
    You will notice that RKWard provides a lot of further menu options. These provide access to functionality in R. In fact, they do so by generating R syntax from settings made in a graphical dialog. For instance, select Analysis->Descriptive Statistics. You will notice a small window at the bottom (can be toggled on or off using the "Code" button) that contains the R code needed to generate these statistics. This way, even if you prefer to script your code by hand, you can use dialogs to gain snippets of code for functions you are less familiar with in R. Also, all commands that are executed get shown in the Command Log, available as a tool window next to the R Console.
    • For an introduction to some more basic concepts
    TODO: Each of the above sections should eventually get a dedicated page of its own with more detailed information
    rkward-0.6.1/rkward/pages/rkward_welcome.rkh0000644000175000017500000000460212124345411020463 0ustar thomasthomas Welcome to RKWard This help page gives a rough overview of the most important parts of RKWard. By default, this page is shown each time RKWard is started. You can disable or re-enable this behavior under Settings->Configure RKWard->General.
    RKWard is a GUI frontend and IDE to R, a powerful scripting language for statistical computing. It aims to provide useful features both to experienced users of R, wishing to exploit R's scripting capabilities, as well as to users new to R, looking for an easy way to carry out statistical computation tasks.
    Due to the large differences in prior knowledge of R, we provide two different guides for getting started with RKWard. The first is aimed at users with some knowledge of the R language, and focuses on introducing the IDE features of RKWard: . The second gives a more hands on introduction to getting started with RKWard, but does not go quite as deep. If you have never users R or RKWard before, you should start with this guide, then later read the above page link: .
    For more general information on RKWard, who writes it, how to help, further questions, etc. refer to the project homepage.
    For more information on RKWard, mainly of interest to developers see page for developers.
    If you encounter problems please feel free to search in Trouble Shooting first.
    Are you missing a particular GUI dialog in the current menu? Check out the Introduction to Writing Plugins for RKWard to learn how easy it is to enhance RKWard with your custom dialogs. And if you like, how to share your work with the community of RKWard users.
    rkward-0.6.1/rkward/pages/rkward_plot_history.rkh0000644000175000017500000001645012124345411021573 0ustar thomasthomas Screen device history The screen device history provides an interface to flip through your plots, similar a web browser. The current implementation understands most function calls from the graphics and lattice packages. Adding other graphical engines is planned for future. See the Technical Details section below for more information. The screen device history is only accessible from an open screen device, under the History menu. It is available on most screen device windows. Such devices are called "managed" devices for the purpose of this help page. File devices, such as png, pdf, etc. are not, obviously, affected by this screen history implementation, and hence they are not managed. In addition, "preview" devices, which are available on some of the plugins are not managed either.
    Several actions are available either from the History menu or from the toolbar icons on a managed device. The displayed icons on the toolbar can be configured from the device window's Settings->Configure Toolbars menu item.
    • Go to plot: This provides a drop down list of _all_ the plots stored in the history; giving an easily accessible "jumping" action. RKWard tries hard to identify the appropriate plot calls, but this is not always feasible. In such cases a further attempt is made to identify the X label, Y label and the Main titles of the plot and the displayed string looks like "X: xlab; Y: ylab; main". Sometimes even that is not possible (indicated by <Unknown>). Plots which are pending to be saved are indicated by <Unsaved plot>. The displayed strings are prepended with their corresponding position in the history. For the usual "linear browsing" see first / previous / next / last actions below.
    • First, Previous, Next, and Last plot: Obvious browsing (or replaying) actions. These will try to save any unsaved/pending plot before displaying/replaying the intended (first / previous / next / last) plot. This should be very helpful for browsing to an already stored in the history and update it. For example, a base graphics plot modified by, say, abline(h=0, v=0) will automatically get stored "in-place" in the history.
    • Append this plot: This action is provided to forcefully append the displayed plot to the end of the history, irrespective of its status (saved / unsaved) and type (graphics / lattice / ...). In cases when a plot does not automatically get stored in the history, this action should come in handy. But this flexibility comes at the cost of not being able to identify the plot call.
    • Remove this plot: This will remove the currently displayed from the history (if it is stored) and replay the next "available" plot. When multiple devices are displaying the same plot (to be precise, same position in the history), then removing a plot from one device will not remove it from other devices; instead it will set the status of this plot on the other devices as new / pending. Thus, if you happen to remove one by mistake, and if it happens to be displayed on a second device, then you can re-add it to the history from the second device.
    • Clear history: As the name suggests, this action will clear the plotting history. But the plots currently displayed on the devices, upon further action, will get added back to the history. To completely reset the screen device history close all open devices and call rk.clear.plot.history()
    • Plot properties: This shows some additional information such as the size of the displayed plot as stored in the memory, the position of the current plot in the history, and, whenever possible the complete plot call.
    Some default settings for the Screen device history can be configured from Settings->Configure RKWard->Onscreen Graphics:
    • Screen device history: Enables / disables the recording of plots globally. You can toggle this from within a running RKWard session which will affect all currently open and future screen devices. When unchecked, RKWard will not store any further plots in the history; although, the ones already stored are not lost! You can access the stored plots by re-enabling this. When toggling this, RKWard tries to save any unsaved plots, but be careful especially when the maximum history length is small (see below). You may want to disable this when the implemented history behavior seems non-intuitive or when dealing with large plots.
    • Maximum number of recorded plots: Controls the maximum number of plots that can be stored in the history. When this limit is reached, plots from the beginning of the history will get removed one by one, much like a push-pop stack. A warning dialog is shown when this happens. Be careful when setting this below the number of already stored plots. In that case an appropriate number of plots from the beginning of the history stack will get removed, which may not be desirable.
    • Maximum size of a single recorded plot: Controls the maximum allowed size (in KB) of a single plot that can be stored in the history. For a plot larger than this specified size, a dialog box, to save or to ignore the plot, will be presented. Unlike the above length restriction, this setting will affect only the future plots (that is, will not remove any already stored, yet large, plots).
    Some assorted technical details:
    • rk.plot.history.summary(which,type): this helper function provides some summaries about the screen device history. Here, which is a "device id" (default is NULL: summaries about all managed devices) and type is either devices (returns device specific information) or history (returns information on all the saved plots in the history).
    • Technically speaking, function calls that pass through either graphics::plot.new() or graphics::persp() or lattice::print.trellis() are captured.
    • The base graphics plots are recorded and replayed using recordPlot() and replayPlot().
    • The lattice plots are added to the history using a custom print.trellis() function set by lattice.options("print.function"). So, you are warned against resetting or modifying this from a running RKWard session. Similarly, you are very strongly advised agiainst using the plot method on a trellis object since it will not pass through print.trellis() and hence not be stored in the history. This may seem innocuous, but it will have irreparable consequences when trying to use trellis.last.object(), thereafter. You have been warned!
    • (needs lattice)
    • (needs lattice)
    rkward-0.6.1/rkward/pages/rkward_help.css0000644000175000017500000000155012124345411017763 0ustar thomasthomas#main { margin-right: 11em; } #main h1 { font-size: 1.5em; color: gray; text-align: center; margin-top: 1em; margin-bottom: 1em; padding: 0; } #main h2 { font-size: 1.2em; color: gray; margin-top: 1em; margin-bottom: 0.5em; padding: 0; } #main h3 { font-size: 1.1em; color: gray; margin-top: 1em; margin-bottom: 0em; padding: 0; } #main h4 { font-size: 1em; font-weight: bold; color: gray; margin-top: 0.5em; margin-bottom: 0em; padding: 0; } #main p { margin-top: 0em; margin-bottom: 0.5em; padding: 0; } #navigation { position: fixed; top: 1em; right: 0.5em; width: 10em; border: 1px solid silver; } #navigation h1 { font-size: 1em; color: gray; margin-top: 0em; margin-bottom: 0.5em; } #navigation p { font-size: 0.9em; margin-top: 0em; margin-bottom: 0.5em; text-indent: -1em; margin-left: 1.5em; margin-right: 0.2em; }rkward-0.6.1/rkward/pages/rkward_public_functions.rkh0000644000175000017500000000220212124345411022370 0ustar thomasthomas Utility functions in RKWard This help page links to the man pages of various utility functions available in RKWard which are accessible to the user.
    • See or .
    • See
    • See
    • Various editing (object and files) related functions are documented here: .
    • Various output and results related functions are documented here: .
    • Various file name related functions are documented here: .
    • Message boxes and selection lists: see .
    • Misc functions: .
    rkward-0.6.1/rkward/pages/rkward_output.rkh0000644000175000017500000000223712124345411020372 0ustar thomasthomas RKWard Output Describe the RKWard output window, and how to make use of the generated output. TODO: This page is incomplete.
    One of the many goals of RKWard is to have a seamless integration with an office-suite. Future plans of RKWard include the usage of the "OASIS Open Document Format for Office Applications (ODF)". But right now there is only support for HTML output (including images as png) of your results. HTML can be read and worked on with any modern office suite. The easiest way to get output into your office suite, is to first select the relevant portions, copy them (Edit->Copy), then paste them. This works well, at least in OpenOffice. You can also drag and drop images from the output to an OpenOffice document. If you need access to the raw HTML and image files, these are stored in a hidden directory. By default this is a sub-folder called ".rkward" of your home directory (Settings->Configure RKWard->General). You'll want the files "rk_out.html" and the "graph*.png" files.
    rkward-0.6.1/rkward/pages/rkward_shortcuts.rkh0000644000175000017500000000607612124345411021075 0ustar thomasthomas RKWard Shortcut keys You can control RKWard in many situations without using a mouse device, using only the keyboard. Most shortcuts are configurable, using Settings->Configure Shortcuts. For technical reasons, only the shortcuts of those components will be listed that are active at that time. Hence, for example, if you want to edit the shortcuts for the data editor, first open a data editor, then select Settings->Configure Shortcuts. Most shortcuts for the script editor are managed separately using Settings->Configure Editor->Shortcuts. On most systems, you can also configure shortcuts by right-clicking on the respective menu item.
    File Menu
    Create new scriptCtrl + N
    PrintCtrl + P
    Quit RKWardShift + Q
    Open existing ScriptCtrl + O
    Edit Menu
    CopyCtrl + C
    FindCtrl + F
    Find PreviousShift + F3
    Find NextF3
    Select AllCtrl + A
    View Menu
    Decrease font sizeCtrl + -
    Increase font sizeCtrl + +
    Show Document InformationCtrl + I
    View SourceCtrl + U
    Workspace Menu
    Open WorkspaceCtrl + O
    Save WorkspaceCtrl + S
    Run Menu
    Run the current lineShift + F7
    Add a line break and run the lineCtrl + Enter
    Run the current selectionShift + F8
    Run the current scriptShift + F9
    Interrupt all running commandsShift + Esc
    Windows Menu
    Close WindowCtrl + W
    Previous WindowAlt + < or Alt + ,
    Next WindowAlt + > or Alt + .
    Left WindowCtrl + < or Ctrl + ,
    Right WindowCtrl + > or Ctrl + .
    Activate Document viewAlt + 0
    Show/Hide Workspace BrowserAlt + 1
    Show/Hide Command LogAlt + 2
    Show/Hide Pending JobsAlt + 3
    Show/Hide ConsoleAlt + 4
    Show/Hide R Help SearchAlt + 5
    Switch between WindowsCtrl+Tab
    Help Menu
    Start HelpF1
    What's thisShift + F1
    rkward-0.6.1/rkward/pages/rkward_for_new_users.rkh0000644000175000017500000001144012124345411021706 0ustar thomasthomas RKWard for new Users Provide some starting points for users new to R and RKWard. For a more in depth guide see .
    If you have previously used different statistics tools, you may be accustomed to the idea, that all your data is basically stored in one single spreadsheet, and that spreadsheet is visible all of the time. While, of course, R can deal with this sort of data (technically called a "data.frame"), it is much more flexible, and may be slightly confusing at first. R - and hence RKWard - can deal with a large number of different types of data: The well known spreadsheets, but also single vectors of data (like a column in a spreadsheet), so called "list"s of different vectors or other objects that may have different lengths, single data points, etc. Even most of the language itself, the functions, are stored just like data and can also be edited. At the same time, R is not confined to working with just one piece of data at a time, but rather you have a "Workspace", where all your different variables, tables, etc. are accessible. You can have many data.frames at once, and additional data of other types. At the left side of the application window, there should be an icon labelled "Workspace". You can click on this to see all the objects present in your workspace. All the objects you create or modify will be visible inside the ".GlobalEnv". Most other objects are predefined in libraries, such as "package:base". See for details. You do not need to worry about all these details. To create a new spreadsheet (data.frame), chose File->New->Dataset from the menu. All you need to do is to assign a name to this table, then you can start editing. To work with pre-existing data, chose File->Import->Load data, to load data in CSV (comma separated value) format.
    In this section you will learn about some basic methods how to make use of your results in external applications. Suppose you produced a textual output from tests you performed. Such will be presented in the "output window" of RKWard. It's easy to keep track on your work since a standard of RKWard is to show everything in chronological order together with the date of creation. See for details on working with the output. The easiest method of reusing the output is to select the relevant portion, and copy and paste them to an office suite.
    In order to familiarize yourself with RKWard (or with your data), one of the first things to do might be to chose Analysis->Descriptive Statistics from the Menu. You will be presented with a dialog that allows you to select one or more variables to analyse. This looks similar to the workspace browser introduced above. On the additional tabs you can chose which types of descriptive statistics should be calculated. At the lower right of the dialog, there is a button labelled "Code". Using this, you can show/hide a text area. If you look at the contents of this text area (you may have to resize the window to view it more comfortably), you can see the text changing according to the settings you chose in the dialog. This text is actually R syntax. It is the code that is needed to perform these calculations in R. Most of RKWard is based on generating this code for you, and then running it inside R. Later, when you feel more comfortable, have specific needs not covered by RKWard, or you want to automate repetitive tasks, you can use this syntax to literally program your analyses. For now, just click submit, once you've made your choices, and watch the results show up in a new window.
    The purpose of RKWard is to make the power of the R language easily accessible to the user, without having to learn a full programming language, first. However, for advanced needs, you may want to make use of the full flexibility of the R language. RKWard offers a lot of tools to make this easier, both for users new to R, and R experts. Read on in for more on this. Also, you may want to select Help->Help on R from the menu for some starting points in learning R.
    rkward-0.6.1/rkward/pages/rkward_trouble_shooting.rkh0000644000175000017500000001332312124345411022416 0ustar thomasthomas Trouble Shooting RKWard is far from complete and certainly there are many issues that need to be fixed. However, some of the things you notice are not due to the nature of RKWard but R or something else. This section will try to cover some common issues. See also the online FAQ.
    Yes, it's a very odd name. ;) However, R comes obviously from the R-language which is the statistical basis of RKWard. K is derived from KDE which delivered the basic GUI technologies for RKWard. And Ward? That's another story.
    This happens because RKWard starts first and subsequent R is started in the background. Depending on the speed of your machine it can take some time to start R. In any case you can check the state of R within RKWard. Just look at the little box on the right bottom corner of RKWard. If it is green you can go ahead. You can start submitting commands while the backend has not yet started, or while another lengthy calculation is still taking place. In this case your commands will be placed into a queue, first, and executed as soon as the backend becomes available, again.
    RKWard has basically all the functionality which comes with the standard packages of R. But RKWard is at the same time rather extensible. Many developers made use of this and thus some of the procedures in RKWard depend on "external" packages (obtained from The Comprehensive R Archive Network (CRAN)) to perform a task. Here is an example. All tests related to skewness and kurtosis (which you would certainly expect to be shipped as a base package of R) are performed from an external package. If you read this the first time or restarted RKWard after you installed it and try to follow the link you will be out of luck. First you need to run a test from Analysis->Moment in order to achieve this. Typically you would call them from R via update.packages and library to achieve this. But RKWard simplifies this for you. You'll be guided through the install procedure for the required package. Please note you need root privileges in certain situations.
    We agree that RKWard is still very lacking when it comes to office integration, and "seamless" integration is still far away. Refer to for information on how to accomplish the most important things right now.
    This depends. Some test and plots just need some time if you have huge amounts of data or sophisticated calculations. Therefore patience is sometimes needed. In any case you can check the state of R within RKWard. Just look at the little box on the right bottom corner of RKWard. Red means there is still something to calculate or plot. If it's green, R is done calculating. But some statistical test are rather memory and stack hungry and can make the entire system unresponsive, if there is a lot of swapping. This is not a bug in RKWard or R, just the calculation taking your system to its limits. An example of very memory hungry tests are the Wilcoxon Rank Sum and Signed Rank Tests. Therefore it's important you know the test. Moreover it's very important to save the workspace and other sections you worked on before you do such operations. There is currently no recovery functionality within RKWard in case of a crash! You can find build-in tests from R to address this memory issue (see: , and ).
    Right now RKWard doesn't have "undo" or "redo" functionality in all places. For example there is such functionality for the script editor, but there is no undo or redo for finished plots or tests. Therefore it's important that you know what you do before you start. It's recommended to use copies of original data and to give everything a meaningful name. However, RKWard tries to give you as much information as possible about things you have done. For tests and plots that you run from the menu, the will contain a "run again" link below the output. You can use this to re-do this action with identical or slighly modified settings. Also, tests and plots try to show the most relevant settings in combination with the creation date. Moreover you can check and copy any code generated for your documentation purposes.
    rkward-0.6.1/rkward/plugin/0000755000175000017500000000000012124345411015145 5ustar thomasthomasrkward-0.6.1/rkward/plugin/rkpluginframe.h0000644000175000017500000000415012124345411020164 0ustar thomasthomas/*************************************************************************** rkpluginframe.cpp - description ------------------- begin : Sat Jun 4 2011 copyright : (C) 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPLUGINFRAME_H #define RKPLUGINFRAME_H #include "rkcomponent.h" class QDomElement; class QGroupBox; class KVBox; /** A passive component acting as a group box. Provides property "checked". @author Thomas Friedrichsmeier */ class RKPluginFrame : public RKComponent { Q_OBJECT public: RKPluginFrame (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKPluginFrame (); /** returns the page child elements should be drawn in */ KVBox *getPage () { return page; }; int type () { return ComponentFrame; }; /** reimplemented to return the value of the checked property by default */ QVariant value (const QString &modifier=QString ()); /** re-implemented to create "checked" property on demand. */ RKComponentBase* lookupComponent (const QString &identifier, QString *remainder); private slots: /** called when checked property changes */ void propertyChanged (RKComponentPropertyBase *property); void checkedChanged (bool new_state); private: void initCheckedProperty (); RKComponentPropertyBool *checked; KVBox *page; QGroupBox *frame; }; #endif rkward-0.6.1/rkward/plugin/CMakeLists.txt0000644000175000017500000000327512124345411017714 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(plugin_STAT_SRCS rkcomponentmap.cpp rkcomponentmeta.cpp rkcomponentproperties.cpp rkcomponent.cpp rkstandardcomponent.cpp rkvarselector.cpp rkvarslot.cpp rkformula.cpp rkradio.cpp rkcheckbox.cpp rkpluginspinbox.cpp rkinput.cpp rkpluginbrowser.cpp rktext.cpp rktabpage.cpp rkstandardcomponentgui.cpp rkdropdown.cpp rkcomponentcontext.cpp rkpreviewbox.cpp rkpluginsaveobject.cpp rkabstractoptionselector.cpp rkpluginframe.cpp rkoptionset.cpp rkmatrixinput.cpp ) QT4_AUTOMOC(${plugin_STAT_SRCS}) ADD_LIBRARY(plugin STATIC ${plugin_STAT_SRCS}) ########### install files ############### #original Makefile.am contents follow: #INCLUDES = $(all_includes) #METASOURCES = AUTO #noinst_LIBRARIES = libplugin.a #libplugin_a_SOURCES = rkcomponentmap.cpp rkcomponentproperties.cpp rkcomponent.cpp \ # rkstandardcomponent.cpp rkvarselector.cpp rkvarslot.cpp rkformula.cpp rkradio.cpp \ # rkcheckbox.cpp rkpluginspinbox.cpp rkinput.cpp rkpluginbrowser.cpp rktext.cpp \ # rktabpage.cpp rkstandardcomponentgui.cpp rkdropdown.cpp rkcomponentcontext.cpp \ # rkpreviewbox.cpp rkpluginsaveobject.cpp rkabstractoptionselector.cpp # #noinst_HEADERS = rkcomponentmap.h rkcomponentproperties.h rkcomponent.h \ # rkstandardcomponent.h rkvarselector.h rkvarslot.h rkformula.h rkradio.h \ # rkcheckbox.h rkpluginspinbox.h rkinput.h rkpluginbrowser.h rktext.h \ # rktabpage.h rkstandardcomponentgui.h rkdropdown.h rkcomponentcontext.h \ # rkpreviewbox.h rkpluginsaveobject.h rkabstractoptionselector.h # # rkward-0.6.1/rkward/plugin/rkpluginbrowser.h0000644000175000017500000000411212124345411020553 0ustar thomasthomas/*************************************************************************** rkpluginbrowser - description ------------------- begin : Sat Mar 10 2005 copyright : (C) 2005, 2006, 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPLUGINBROWSER_H #define RKPLUGINBROWSER_H #include "rkcomponent.h" #include "rkcomponentproperties.h" class GetFileNameWidget; class QDomElement; /** RKComponent to select one or more file(s) or directories TODO: Rename to somehting like RKComponentFileSelect or a similarilly ugly name TODO: I ripped out multiple file selection for now. GetFileNameWidget should be extended to handle that internally (tfry) @author Adrien d'Hardemare */ class RKPluginBrowser : public RKComponent { Q_OBJECT public: RKPluginBrowser (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKPluginBrowser (); RKComponentPropertyBase *selection; QVariant value (const QString &modifier=QString ()) { return (selection->value (modifier)); }; int type () { return ComponentBrowser; }; bool isValid (); public slots: void textChanged (); void textChanged (RKComponentPropertyBase *); void requirednessChanged (RKComponentPropertyBase *); private: void updateColor (); GetFileNameWidget *selector; bool updating; }; #endif rkward-0.6.1/rkward/plugin/rkmatrixinput.h0000644000175000017500000001014712124345411020242 0ustar thomasthomas/*************************************************************************** rkmatrixinput - description ------------------- begin : Tue Oct 09 2012 copyright : (C) 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKMATRIXINPUT_H #define RKMATRIXINPUT_H #include #include "../dataeditor/twintablemember.h" #include #include class RKTableView; class RKMatrixInputModel; /** Provides a table for editing one- or two-dimensional data *@author Thomas Friedrichsmeier */ class RKMatrixInput : public RKComponent { Q_OBJECT public: RKMatrixInput (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKMatrixInput (); int type () { return ComponentMatrixInput; }; bool isValid () { return is_valid; }; QVariant value (const QString &modifier=QString ()); public slots: void cut (); void copy (); void paste (); void clearSelectedCells (); private slots: void dimensionPropertyChanged (RKComponentPropertyBase *property); void tsvPropertyChanged (); private: friend class RKMatrixInputModel; RKComponentPropertyInt *row_count; RKComponentPropertyInt *column_count; RKComponentPropertyBase *tsv_data; enum Mode { Integer=0, Real, String } mode; double min; double max; bool allow_missings; bool allow_user_resize_rows; bool allow_user_resize_columns; int trailing_rows; int trailing_columns; bool isValueValid (const QString &value) const; void updateAll (); void setCellValue (int row, int column, const QString& value); QString cellValue (int row, int column) const; void setColumnValue (int column, const QString& value); void updateColumn (int column); bool expandStorageForColumn (int column); QString makeColumnString (int column, const QString& sep, bool r_pasteable = true); bool isColumnValid (int column); bool is_valid; // NOTE: The storage may contain more rows / columns than the current dimensions of the table. This is so that no data gets // lost, if a user shrinks a table, accidentally, then re-grows it. struct Column { int last_valid_row; // to save validizing the entire table on each change, we keep track of validity per column QStringList storage; QString cached_tab_joined_string; }; QList columns; RKTableView *display; RKMatrixInputModel *model; // to avoid recursion: bool updating_tsv_data; }; #include class RKMatrixInputModel : public QAbstractTableModel { private: friend class RKMatrixInput; RKMatrixInputModel (RKMatrixInput *matrix); virtual ~RKMatrixInputModel (); int rowCount (const QModelIndex &parent = QModelIndex()) const; // implemented for QAbstractTableModel int columnCount (const QModelIndex &parent = QModelIndex()) const; // implemented for QAbstractTableModel QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const; // re-implemented for QAbstractTableModel bool setData (const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); // re-implemented for QAbstractTableModel Qt::ItemFlags flags (const QModelIndex &index) const; // re-implemented for QAbstractTableModel QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; // re-implemented for QAbstractTableModel RKMatrixInput *matrix; QStringList horiz_header; QStringList vert_header; }; #endif rkward-0.6.1/rkward/plugin/rkmatrixinput.cpp0000644000175000017500000004241612124345411020601 0ustar thomasthomas/*************************************************************************** rkmatrixinput - description ------------------- begin : Tue Oct 09 2012 copyright : (C) 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkmatrixinput.h" #include #include #include #include "../misc/rktableview.h" #include "../dataeditor/rktextmatrix.h" #include "kstandardaction.h" #include "kaction.h" #include "klocale.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKMatrixInput::RKMatrixInput (const QDomElement& element, RKComponent* parent_component, QWidget* parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create layout QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (xml->getStringAttribute (element, "label", i18n ("Enter data:"), DL_INFO), this); vbox->addWidget (label); display = new RKTableView (this); vbox->addWidget (display); mode = static_cast (xml->getMultiChoiceAttribute (element, "mode", "integer;real;string", 1, DL_WARNING)); if (mode == Integer) { min = xml->getIntAttribute (element, "min", INT_MIN, DL_INFO) - .1; // we'll only allow ints anyway. Make sure not to run into floating point precision issues. max = xml->getIntAttribute (element, "max", INT_MAX, DL_INFO) + .1; } else if (mode == Real) { min = xml->getDoubleAttribute (element, "min", -FLT_MAX, DL_INFO); max = xml->getDoubleAttribute (element, "max", FLT_MAX, DL_INFO); } else { min = -FLT_MAX; max = FLT_MAX; } // Note: string type matrix allows missings, implicitly (treating them as empty strings) allow_missings = xml->getBoolAttribute (element, "allow_missings", false, DL_INFO); if (mode == String) allow_missings = true; allow_user_resize_columns = xml->getBoolAttribute (element, "allow_user_resize_columns", true, DL_INFO); allow_user_resize_rows = xml->getBoolAttribute (element, "allow_user_resize_rows", true, DL_INFO); trailing_rows = allow_user_resize_rows ? 1 : 0; trailing_columns = allow_user_resize_columns ? 1 : 0; row_count = new RKComponentPropertyInt (this, false, xml->getIntAttribute (element, "rows", 2, DL_INFO)); column_count = new RKComponentPropertyInt (this, false, xml->getIntAttribute (element, "columns", 2, DL_INFO)); tsv_data = new RKComponentPropertyBase (this, false); row_count->setInternal (true); addChild ("rows", row_count); column_count->setInternal (true); addChild ("columns", column_count); addChild ("tsv", tsv_data); connect (row_count, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (dimensionPropertyChanged(RKComponentPropertyBase*))); connect (column_count, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (dimensionPropertyChanged(RKComponentPropertyBase*))); connect (tsv_data, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (tsvPropertyChanged())); updating_tsv_data = false; model = new RKMatrixInputModel (this); QString headers = xml->getStringAttribute (element, "horiz_headers", QString (), DL_INFO); if (!headers.isEmpty ()) model->horiz_header = headers.split (';'); headers = xml->getStringAttribute (element, "vert_headers", QString (), DL_INFO); if (!headers.isEmpty ()) model->vert_header = headers.split (';'); updateAll (); display->setModel (model); display->setAlternatingRowColors (true); if (xml->getBoolAttribute (element, "fixed_width", false, DL_INFO)) { int max_col = column_count->intValue () - 1; display->setFixedWidth (display->verticalHeader ()->width () + display->columnViewportPosition (max_col) + display->columnWidth (max_col) + display->verticalHeader ()->fontMetrics ().width ("0")); } if (xml->getBoolAttribute (element, "fixed_height", false, DL_INFO)) { int max_row = row_count->intValue () - 1; display->setFixedHeight (display->horizontalHeader ()->height () + display->rowViewportPosition (max_row) + display->rowHeight (max_row)); } // define standard actions KAction *cut = KStandardAction::cut (this, SLOT (cut()), this); display->addAction (cut); KAction *copy = KStandardAction::copy (this, SLOT (copy()), this); display->addAction (copy); KAction *paste = KStandardAction::paste (this, SLOT (paste()), this); display->addAction (paste); display->setContextMenuPolicy (Qt::ActionsContextMenu); display->setRKItemDelegate (new RKItemDelegate (display, model, true)); connect (display, SIGNAL (blankSelectionRequest()), this, SLOT (clearSelectedCells())); } RKMatrixInput::~RKMatrixInput () { RK_TRACE (PLUGIN); } QVariant RKMatrixInput::value (const QString& modifier) { if (modifier.isEmpty () || (modifier == "cbind")) { QStringList ret; for (int i = 0; i < column_count->intValue (); ++i) { ret.append ("\tc (" + makeColumnString (i, ", ") + ")"); } return QString ("cbind (\n" + ret.join ("\n") + "\n)"); } bool ok; int col = modifier.toInt (&ok); if ((col >= 0) && ok) { QStringList l; if (col < columns.size ()) l = columns[col].storage; while (l.size () < row_count->intValue ()) { l.append (QString ()); } if (l.size () > row_count->intValue ()) l = l.mid (0, row_count->intValue ()); return l; } return ("Modifier '" + modifier + "' not recognized\n"); } bool RKMatrixInput::expandStorageForColumn (int column) { RK_TRACE (PLUGIN); if ((column < 0) || (!allow_user_resize_columns && (column >= column_count->intValue ()))) { RK_ASSERT (false); return false; } while (column >= columns.size ()) { Column col; col.last_valid_row = -1; columns.append (col); } return true; } QString RKMatrixInput::cellValue (int row, int column) const { if ((column < 0) || (column >= columns.size ())) return (QString ()); return columns[column].storage.value (row); } void RKMatrixInput::setCellValue (int row, int column, const QString& value) { RK_TRACE (PLUGIN); if ((!expandStorageForColumn (column)) || (row < 0) || (!allow_user_resize_rows && (row >= row_count->intValue ()))) { RK_ASSERT (false); return; } Column &col = columns[column]; if (col.storage.value (row) == value) return; while (row >= col.storage.size ()) { col.storage.append (QString ()); } col.storage[row] = value; updateColumn (column); model->dataChanged (model->index (row, column), model->index (row, column)); } void RKMatrixInput::setColumnValue (int column, const QString& value) { RK_TRACE (PLUGIN); if (!expandStorageForColumn (column)) return; columns[column].storage = value.split ('\t', QString::KeepEmptyParts); updateColumn (column); model->dataChanged (model->index (0, column), model->index (row_count->intValue () + trailing_rows, column)); } void RKMatrixInput::updateColumn (int column) { RK_TRACE (PLUGIN); RK_ASSERT ((column >= 0) && (column < columns.size ())); Column &col = columns[column]; // check for trailing empty rows: int last_row = col.storage.size (); while ((--last_row >= 0) && col.storage[last_row].isEmpty ()) { // strip empty trailing strings col.storage.pop_back (); } col.last_valid_row = -1; col.cached_tab_joined_string.clear (); // == no valid cache updateAll (); } QString RKMatrixInput::makeColumnString (int column, const QString& sep, bool r_pasteable) { RK_TRACE (PLUGIN); QStringList storage; if (column < columns.size ()) { storage = columns[column].storage; } QString ret; ret.reserve (3 * row_count->intValue ()); // a rather conservative estimate for most purposes for (int i = 0; i < row_count->intValue (); ++i) { if (i > 0) ret.append (sep); const QString val = storage.value (i); if (r_pasteable) { if (mode == String) ret.append (RObject::rQuote (val)); else if (val.isEmpty ()) ret.append ("NA"); else ret.append (val); } else { ret.append (val); } } return ret; } void RKMatrixInput::updateAll () { RK_TRACE (PLUGIN); if (updating_tsv_data) return; updating_tsv_data = true; int max_row = row_count->intValue () - 1; if (allow_user_resize_rows) { max_row = -1; for (int i = columns.size () - 1; i >= 0; --i) { max_row = qMax (max_row, columns[i].storage.size () - 1); } if (max_row != row_count->intValue () - 1) { row_count->setIntValue (max_row + 1); } } int max_col = column_count->intValue () - 1; if (allow_user_resize_columns) { for (max_col = columns.size () - 1; max_col >= 0; --max_col) { if (!columns[max_col].storage.isEmpty ()) { break; } } if (max_col != column_count->intValue () - 1) { column_count->setIntValue (max_col + 1); } } QStringList tsv; int i = 0; for (; i < columns.size (); ++i) { Column& col = columns[i]; if (col.cached_tab_joined_string.isEmpty ()) { col.cached_tab_joined_string = makeColumnString (i, "\t", false); } tsv.append (col.cached_tab_joined_string); } for (; i < max_col; ++i) { tsv.append (QString (max_row, '\t')); } tsv_data->setValue (tsv.join ("\n")); updating_tsv_data = false; // finally, check whether table is valid, and signal change bool new_valid = true; for (int i = 0; i < column_count->intValue (); ++i) { if (!isColumnValid (i)) { new_valid = false; break; } } if (new_valid != is_valid) { is_valid = new_valid; model->headerDataChanged (Qt::Horizontal, 0, column_count->intValue () - 1); } changed (); } void RKMatrixInput::dimensionPropertyChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); if (allow_user_resize_rows && (property == row_count)) { RK_ASSERT (updating_tsv_data); } if (allow_user_resize_columns && (property == column_count)) { RK_ASSERT (updating_tsv_data); } if (property == row_count) { // invalidates column caches for (int i = columns.size () - 1; i >= 0; --i) { columns[i].last_valid_row = qMin (columns[i].last_valid_row, row_count->intValue () - 1); columns[i].cached_tab_joined_string.clear (); } } model->layoutAboutToBeChanged (); updateAll (); model->layoutChanged (); } void RKMatrixInput::tsvPropertyChanged () { if (updating_tsv_data) return; updating_tsv_data = true; RK_TRACE (PLUGIN); columns.clear (); QStringList coldata = fetchStringValue (tsv_data).split ('\n', QString::KeepEmptyParts); for (int i = 0; i < coldata.size (); ++i) { setColumnValue (i, coldata[i]); } updating_tsv_data = false; updateAll (); } bool RKMatrixInput::isValueValid (const QString& value) const { if (mode == String) return true; if (value.isEmpty ()) return allow_missings; bool number_ok; double val; if (mode == Integer) { val = value.toInt (&number_ok); } else { val = value.toFloat (&number_ok); } if (!number_ok) return false; if (val < min) return false; return (val <= max); } bool RKMatrixInput::isColumnValid (int column) { if (column < 0) { RK_ASSERT (false); return false; } if (mode == String) return true; if (column >= columns.size ()) return (allow_missings || (row_count->intValue () == 0)); Column &col = columns[column]; if (col.last_valid_row >= (row_count->intValue () - 1)) { return true; } else if (allow_missings && (col.last_valid_row >= (col.storage.size () - 1))) { return true; } int row = col.last_valid_row + 1; for (; row < col.storage.size (); ++row) { if (!isValueValid (col.storage[row])) { col.last_valid_row = row - 1; return false; } } col.last_valid_row = row - 1; if (col.last_valid_row < (row_count->intValue () - 1)) { return allow_missings; } return true; } void RKMatrixInput::clearSelectedCells () { RK_TRACE (PLUGIN); QItemSelectionRange range = display->getSelectionBoundaries (); if (!range.isValid ()) return; updating_tsv_data = true; for (int col = range.left (); col <= range.right (); ++col) { for (int row = range.top (); row <= range.bottom (); ++row) { setCellValue (row, col, QString ()); } } updating_tsv_data = false; updateAll (); } void RKMatrixInput::copy () { RK_TRACE (PLUGIN); QItemSelectionRange range = display->getSelectionBoundaries (); if (!range.isValid ()) return; RKTextMatrix ret; for (int col = range.left (); col <= range.right (); ++col) { for (int row = range.top (); row <= range.bottom (); ++row) { ret.setText (row - range.top (), col - range.left (), cellValue (row, col)); } } ret.copyToClipboard (); } void RKMatrixInput::cut () { RK_TRACE (PLUGIN); copy (); clearSelectedCells (); } void RKMatrixInput::paste () { RK_TRACE (PLUGIN); int left = 0; int top = 0; QItemSelectionRange range = display->getSelectionBoundaries (); if (range.isValid ()) { left = range.left (); top = range.top (); } RKTextMatrix pasted = RKTextMatrix::matrixFromClipboard (); int height = allow_user_resize_rows ? pasted.numRows () : qMin (pasted.numRows (), row_count->intValue () - top); int width = allow_user_resize_columns ? pasted.numColumns () : qMin (pasted.numColumns (), column_count->intValue () - left); updating_tsv_data = true; for (int c = 0; c < width; ++c) { for (int r = 0; r < height; ++r) { setCellValue (r + top, c + left, pasted.getText (r, c)); } } updating_tsv_data = false; updateAll (); } /////////////////////////////////////////////////////////////////////////////////////// RKMatrixInputModel::RKMatrixInputModel (RKMatrixInput* _matrix) : QAbstractTableModel (_matrix) { RK_TRACE (PLUGIN); matrix = _matrix; } RKMatrixInputModel::~RKMatrixInputModel () { RK_TRACE (PLUGIN); } int RKMatrixInputModel::columnCount (const QModelIndex& parent) const { if (parent.isValid ()) return 0; return matrix->column_count->intValue () + matrix->trailing_columns; } int RKMatrixInputModel::rowCount (const QModelIndex& parent) const { if (parent.isValid ()) return 0; return matrix->row_count->intValue () + matrix->trailing_rows; } QVariant RKMatrixInputModel::data (const QModelIndex& index, int role) const { if (!index.isValid ()) return QVariant (); int row = index.row (); int column = index.column (); // handle trailing rows / cols in user expandable tables bool trailing = false; if (row >= matrix->row_count->intValue ()) { if ((!matrix->allow_user_resize_rows) || (row >= matrix->row_count->intValue () + matrix->trailing_rows)) { RK_ASSERT (false); return QVariant (); } trailing = true; } if (column >= matrix->column_count->intValue ()) { if ((!matrix->allow_user_resize_columns) || (column >= matrix->column_count->intValue () + matrix->trailing_columns)) { RK_ASSERT (false); return QVariant (); } trailing = true; }; if (trailing) { if (role == Qt::BackgroundRole) return QVariant (QBrush (Qt::gray)); if (role == Qt::ToolTipRole || role == Qt::StatusTipRole) return QVariant (i18n ("Type on these cells to expand the table")); return QVariant (); } // regular cells QString value = matrix->cellValue (row, column); if ((role == Qt::DisplayRole) || (role == Qt::EditRole)) { return QVariant (value); } else if (role == Qt::BackgroundRole) { if (!matrix->is_valid && !matrix->isValueValid (value)) return QVariant (Qt::red); } else if ((role == Qt::ToolTipRole) || (role == Qt::StatusTipRole)) { if (!matrix->is_valid && (value.isEmpty () && !matrix->allow_missings)) return QVariant (i18n ("Empty values are not allowed")); if (!matrix->is_valid && !matrix->isValueValid (value)) return QVariant (i18n ("This value is not allowed, here")); } return QVariant (); } Qt::ItemFlags RKMatrixInputModel::flags (const QModelIndex& index) const { // handle trailing rows / cols in user expandable tables if ((index.row () > matrix->row_count->intValue ()) || (index.column () > matrix->column_count->intValue ())) { return (Qt::ItemIsEditable | Qt::ItemIsEnabled); } return (Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); } QVariant RKMatrixInputModel::headerData (int section, Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole) { const QStringList* list; if (orientation == Qt::Horizontal) list = &horiz_header; else list = &vert_header; if (section < list->size ()) return QVariant ((*list)[section]); return QVariant (QString::number (section + 1)); } else if (orientation == Qt::Horizontal) { if (section < matrix->column_count->intValue ()) { if ((role == Qt::BackgroundRole) && !matrix->isColumnValid (section)) return QVariant (Qt::red); if (((role == Qt::ToolTipRole) || (role == Qt::StatusTipRole)) && !matrix->isColumnValid (section)) return QVariant (i18n ("This column contains illegal values in some of its cells")); } } return QVariant (); } bool RKMatrixInputModel::setData (const QModelIndex& index, const QVariant& value, int role) { RK_TRACE (PLUGIN); if (!index.isValid ()) return false; if (role != Qt::EditRole) return false; matrix->setCellValue (index.row (), index.column (), value.toString ()); return true; } #include "rkmatrixinput.moc" rkward-0.6.1/rkward/plugin/rkcheckbox.h0000644000175000017500000000350312124345411017442 0ustar thomasthomas/*************************************************************************** rkcheckbox - description ------------------- begin : Fri Jul 30 2004 copyright : (C) 2004, 2006, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCHECKBOX_H #define RKCHECKBOX_H #include "rkcomponent.h" #include "rkcomponentproperties.h" #include class QCheckBox; class QDomElement; /** This RKComponent provides a checkbox @author Thomas Friedrichsmeier */ class RKCheckBox : public RKComponent { Q_OBJECT public: RKCheckBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKCheckBox (); int type () { return ComponentCheckBox; }; RKComponentPropertyBool *state; QVariant value (const QString &modifier=QString ()) { if (modifier.isEmpty ()) return state->value ("labeled"); return (state->value (modifier)); }; public slots: void changedState (int); void changedState (RKComponentPropertyBase *); private: bool updating; // prevent recursion QCheckBox *checkbox; }; #endif rkward-0.6.1/rkward/plugin/rkpluginsaveobject.h0000644000175000017500000000366712124345411021233 0ustar thomasthomas/*************************************************************************** rkpluginsaveobject - description ------------------- begin : Tue Jan 30 2007 copyright : (C) 2007, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPLUGINSAVEOBJECT_H #define RKPLUGINSAVEOBJECT_H #include "rkcomponent.h" #include "rkcomponentproperties.h" class RKSaveObjectChooser; class QDomElement; class QGroupBox; /** RKComponent to select an R object name to save something to @author Thomas Friedrichsmeier */ class RKPluginSaveObject : public RKComponent { Q_OBJECT public: RKPluginSaveObject (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKPluginSaveObject (); QVariant value (const QString &modifier=QString ()); int type () { return ComponentSaveObject; }; bool isValid (); public slots: void externalChange (); void internalChange (); private: RKSaveObjectChooser *selector; void update (); bool updating; QGroupBox* groupbox; RKComponentPropertyBase *selection; RKComponentPropertyBase *objectname; RKComponentPropertyRObjects *parent; RKComponentPropertyBool *active; }; #endif rkward-0.6.1/rkward/plugin/rkcomponent.h0000644000175000017500000003376712124345411017675 0ustar thomasthomas/*************************************************************************** rkcomponent - description ------------------- begin : Tue Dec 13 2005 copyright : (C) 2005, 2006, 2007, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMPONENT_H #define RKCOMPONENT_H #include #include #include class RKComponentPropertyBase; class RKStandardComponent; /** a very low level base for RKComponent and RKComponentProperty. */ class RKComponentBase { public: /** constructor */ RKComponentBase () { required=true; is_internal=false; }; /** destructor */ virtual ~RKComponentBase () {}; /** enum of types of properties. Used from RTTI. Don't change the values, as there are some range checks in the code (see isProperty ()) */ enum RKComponentTypes { PropertyBase = 1, PropertyBool = 2, PropertyInt = 3, PropertyDouble = 4, PropertyRObjects = 5, PropertyCode = 6, PropertyConvert = 7, PropertyStringList = 8, PropertySwitch = 9, PropertyUser = 1000, /**< for user expansion */ PropertyEnd = 1999, ComponentBase = 2001, Component = 2002, ComponentVarSelector = 2003, ComponentVarSlot = 2004, ComponentFormula = 2005, ComponentRadio = 2006, ComponentCheckBox = 2007, ComponentSpinBox = 2008, ComponentInput = 2009, ComponentBrowser = 2010, ComponentText = 2011, ComponentTab = 2012, ComponentDropDown = 2013, ComponentPreviewBox = 2014, ComponentSaveObject = 2015, ComponentFrame = 2016, ComponentOptionSet = 2017, ComponentMatrixInput = 2018, ComponentStandard = 2100, ComponentContextHandler = 2900, ComponentUser = 3000 /**< for user expansion */ }; enum UnserializeError { NoError, BadFormat, NotAllSettingsApplied, NoSuchComponent }; enum ComponentStatus { Dead, /**< one or more components are dead */ Processing, /**< one or more components are still processing. */ Unsatisfied, /**< the component is required, but it or one of its (required) children are not valid. */ Satisfied /**< the component is not required, or it, and all of its children are satisfied. */ }; /** for RTTI. see RKComponentBase::RKComponentTypes */ virtual int type () = 0; /** tries to locate a component (or property) described by identifier as a child (of any generation) of this RKComponentBase. If found, a pointer to this is returned. Also, the modifier parameter is set to hold any remaining modifier contained in the identifier. @param identifier The identifier string to look for (including a potential modifier suffix). @param remainder If a non null pointer to QString is given, this will be set to the value of the remaining modifier @returns a pointer to the RKComponentBase, if found, or the nearest parent that could be looked up */ virtual RKComponentBase* lookupComponent (const QString &identifier, QString *remainder); /** Convenience wrapper around lookupComponent(), which will only return properties or 0, and optionally warn, if no prop could be found @param remainder In contrast to lookupComponent, this can be 0. In this case only exact matches are returned. */ RKComponentPropertyBase* lookupProperty (const QString &identifier, QString *remainder=0, bool warn=true); /** Locate the component.subcomponent.property.value described by identifier and return its value as a string. Especially useful as a callback in code templates! Recursively walks subcomponents/properties until the requested value is found. @See RKComponentBase::lookupComponent */ QString fetchStringValue (const QString &identifier); static QString fetchStringValue (RKComponentBase* prop, const QString &modifier=QString ()); /** returns the "value" of this component or property. Properties generally return their value, components typically return the value of their "most important" property. Default implementation returns QString::null, and writes a debug message */ virtual QVariant value (const QString &modifier=QString ()); enum ValueTypeHint { TraditionalValue, BooleanValue, StringValue, StringlistValue, NumericValue }; QVariant fetchValue (const QString &identifier, const int type_hint); /** returns true, if this is a property */ bool isProperty () { return (type () <= PropertyEnd); }; bool isComponent () { return (type () >= ComponentBase); }; /** shorthand for recursiveStatus () == Satisfied */ bool isSatisfied () { return (recursiveStatus () == Satisfied); }; /** returns state of the component. @see ComponentStatus */ virtual ComponentStatus recursiveStatus (); /** currently valid? default implementation always returns true. @see recursiveStatus() * reimplement this in subclasses, if components may become invalid. * * @note: A component will be "satisfied" even when invalid, if is is not required. Also, a required component is implictily not satisfied, if any of its children are not statisfied. * In general, use isSatisfied() to query the status of components, not isValid(). */ virtual bool isValid () { return true; }; /** set to required: will only be satisfied if it is valid (and all it's children). Else: always satisfied (but subclasses might override to always be dissatisfied on really bad values. By default RKComponentBase is required at construction */ void setRequired (bool require) { required = require; }; /** simple convenience function to add a child to the map of children */ virtual void addChild (const QString &id, RKComponentBase *child); typedef QMap PropertyValueMap; static QString valueMapToString (const PropertyValueMap &map); static bool stringListToValueMap (const QStringList &strings, PropertyValueMap *map); /** serialize the state of this component / property and all its children. Note: Only the non-internal property-values are serialzed, not the components / properties themselves. @see fetchPropertyValuesRecursive() */ void serializeState (PropertyValueMap *map) const { fetchPropertyValuesRecursive (map, true); }; /** set values from a map as created with serializeState(). @see serializeState (), @see setPropertyValues (). @returns status code */ void applyState (const PropertyValueMap &state) { setPropertyValues (&state, true); }; QStringList matchAgainstState (const PropertyValueMap &state); /** Some properties/components will be marked as internal, such as visibility properties, which are not meant to be set directly by the user. These will be ignored in RKComponent::fetchPropertyValuesRecursive() */ void setInternal (bool internal) { is_internal = internal; }; bool isInternal () const { return is_internal; }; protected: friend class RKOptionSet; QHash child_map; bool required; /** recursively fetch the current values of all properties present as direct or indirect children of this component. Used to transfer values e.g. when switching interfaces (or to store settings per plugin in the future). Values are placed in the dictionary provided (be sure to create one first!). Internal properties are ignored (@see RKComponentPropertyBase::isInternal ()); @param list the list to store the object values in @param include_top_level include direct properties of the component in the list (or only properties of children) @param prefix used during recursion to provide full ids for the added objects @param include_inactive_elements by default, disabled / hidden elements are omitted from the value map. */ virtual void fetchPropertyValuesRecursive (PropertyValueMap *list, bool include_top_level=false, const QString &prefix=QString (), bool include_inactive_elements=false) const; friend class RKComponentBuilder; /** counterpart to fetchPropertyValuesRecursive (). Tries to apply all values from the list to properties of the given names. If some keys can not be found, or do not resolve to properties, they are ignored. @param list a list of id->value such as generated by fetchPropertyValuesRecursive () */ void setPropertyValues (const PropertyValueMap *list, bool warn = false); private: bool is_internal; }; #include "rkcomponentproperties.h" /** abstract base class of all RKComponents, including component widgets */ class RKComponent : public QWidget, public RKComponentBase { Q_OBJECT public: /** constructor. @param parent_component The parent RKComponent. If 0, this RKComponent will be a top-level component @param parent_widget The parent QWidget. This may be the same as the parent_component or a different specific widget.. If 0, this RKComponent will be represented by a top-level widget */ RKComponent (RKComponent *parent_component, QWidget *parent_widget); /** destructor */ virtual ~RKComponent (); int type () { return Component; }; /** change notification mechanism. Call this, if something in the component changed that could result in a change in code/values/satisfaction state. Default implementation propagates the change upwards to parent components, if any, but does not do anything further. Reimplement, for instance, to regenerate code */ virtual void changed (); /** The component as a wizardish (multi-page) interface. Default implementation returns false */ virtual bool isWizardish (); /** If the component isWizardish (), returns true, if it has a next/previous page @param next if true, returns true, if there is a next page (i.e. not at last page). If false, returns true if there is a previous page (i.e. not at first page). False otherwise. Default implementation returns false at all times. */ virtual bool havePage (bool next); /** go to page @param next if true, go to next (shown) page, if false go to previous (shown) page. Default implementation does nothing */ virtual void movePage (bool next); /** returns true, if the current page is satisfied (see isWizardish ()). Default implementation returns isSatisfied () */ virtual bool currentPageSatisfied () { return (isSatisfied ()); }; /** add a Page to the component. Don't worry, you'll only have to implement this is a meaningful way, if your component isWizardish (). Default implementation simply returns a new RKComponent (and raises an assert). */ virtual RKComponent *addPage (); /** For wizardish guis: this gets called to register a component on the current page during construction. The component does not get reparented. It will have to be satisfied in order to move to the next page in the wizard. See isWizardish () see addPage (). Default implementation does nothing. */ virtual void addComponentToCurrentPage (RKComponent *component); /** @returns true if the component is inactive, i.e. disabled, or hidden in the GUI */ bool isInactive (); public slots: /** This handles changes in the default properties (enabledness, visibility, requiredness). You will use similar slots in derived classes to handle specialized properties */ void propertyValueChanged (RKComponentPropertyBase *property); /** If you add an outside property to a component, connect it to this slot, so the component will update itself. used in RKComponentBuilder::parseLogic () */ void outsideValueChanged (RKComponentPropertyBase *) { changed (); } public: /** standard property controlling visibility */ RKComponentPropertyBool *visibilityProperty () { return visibility_property; }; /** standard property controlling enabledness */ RKComponentPropertyBool *enablednessProperty () { return enabledness_property; }; /** standard property controlling requiredness */ RKComponentPropertyBool *requirednessProperty () { return requiredness_property; }; /** convenience call to set requiredness property (and hence requiredness of this component) */ void setRequired (bool required); /** The parent of this component. Should be notified, whenever isSatisfied () or recursiveStatus () changed. */ RKComponent *parentComponent () const { return _parent; }; /** The standard component containing this component (if any). If @param id_adjust is given, it will be set to a relative path to the standard component. */ RKStandardComponent *standardComponent (QString *id_adjust=0); /** Like standardcomponent, but will return the topmost component in case of embedding. */ RKStandardComponent *topmostStandardComponent (); /** Find the id of this component. NOTE: this is slow. Better to store the id in the first place, if needed */ QString getIdInParent () const; protected slots: /** if a child component self-destructs, it should remove itself from its parent *before* destructing. Don't use in a regular destructor. Call only if the child dies unexpectedly */ void removeFromParent (); signals: /** emitted from changed() */ void componentChanged (RKComponent* component); protected: RKComponentPropertyBool *visibility_property; RKComponentPropertyBool *enabledness_property; RKComponentPropertyBool *requiredness_property; RKComponent *_parent; /** usually happens during construction, so you don't need to call this - unless you're RKStandardComponent, and discard the children at some point of time */ void createDefaultProperties (); /** This function is needed internally, to set the Qt enabledness of this widget, and all child component widgets. Note that the enabledness as stored in the enabledness_property is not necessarily the same as the enabledness in the GUI (and is not affected by this call). In general, a component is enabled in the GUI, if and only if a) it's enabledness_property is set to true, b) its parent widget is enabled in Qt, and c) it's parent component is also enabled. */ void updateEnablednessRecursive (bool parent_component_enabled); }; #endif rkward-0.6.1/rkward/plugin/rkcomponentproperties.cpp0000644000175000017500000013323612124345411022335 0ustar thomasthomas/*************************************************************************** rkcomponentproperties - description ------------------- begin : Fri Nov 25 2005 copyright : (C) 2005, 2006, 2007, 2008, 2009, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /** \page RKComponentProperties Components and Properties \brief Provides an overview of RKComponentProperty classes and how they are used in rkward (plugin) components This page provides a rough overview, about how the RKComponentProperty classes work (see \ref RKComponentPropertyBase to find out which classes are derived from that). \section RKComponentPropertiesIntro What are "component properties" anyway? A detailed elsewhere, RKWard is extensible using so called "components", in some cases also called plugins. These run-time created components usually provide a GUI for the user to select some variables, make some settings, and then generate some R-code to carry out the requested action. For several reasons it is desirable in components to have some separation between the actual settings/properties, and the GUI used to manipulate those settings. For instance, as the most important use case when embedding components into each other, some settings may already be preset. As an example, suppose you want to create a component to provide two simple related pieces of information on a single variable, (let's say mean and median to have a somewhat useless but simple example). You could easily do this by just creating a component that does those two actions. However, if both parts of it (mean and median) already exist, why not just reuse those? So instead we create a component that does not do anything more than simply embed the two above mentioned ones. However this poses a few practical challenges. For one thing, now you only want one varslot to select variables, while previously both components provided their own varslot. So we'll have to hide one of the varslots. Further, when the setting in that varslot changes, the other embedded component (the one with the varslot now hidded) should automatically be updated accordingly. The solution is to provide a "property" for the variable selected. This property can be connected to another "property". So in this case, we'd connect the property "variable selected for median" to the property "variable selected for mean". After that the two properties will automatically keep in sync and this without the components even knowing what's going on internally. \section RKComponentPropertyTypes Types of Properties RKComponentProperties come in a variety of types. For an up to date overview, refer to RKComponentPropertyBase and see, which classes derive from that. RKComponentPropertyBase as the base class is a property that simply represents a string. This means that all properties are able to supply their current value as a string, or to accept string values (if those can be converted to the correct data type). See RKComponentPropertyBase::value () and RKComponentPropertyBase::setValue (). Derived classes add to that by providing functions to directly set or retrieve - for instance - numeric values or RObjects. Also derived classes typically check whether they are "valid", for instance, if the number they hold is inside the valid range, etc. What the different properties do should be relatively self-explanatory (once again, refer to RKComponentPropertyBase for a complete list). A slight exception might be RKComponentPropertyConvert. This property follows slightly different rules internally. Derived from RKComponentPropertyBool it is used to do logic conversion (for instance it might AND the value of two different properties, and update its own value accordingly). \section RKComponentPropertyModifiers Modifiers: Properties of properties When fetching a property's string value with RKComponentPropertyBase::value (), you can additionally specify modifiers for some types or properties. For instance, the modifier "label" for RKComponentPropertyRObjects returns the label of the selected object(s) instead of the name. Currently these modifiers are known (but check the sources if in doubt): \subsection RKComponentPropertyBool RKComponentPropertyBool - "true" : return the string that would be returned if this property was true (regardless of its state) - "false" : return the string that would be returned if this property was false (regardless of its state) - "not" : return the opposite of the current state - "numeric" : return "1" if the property is true, or "0" if it is false \subsection RKComponentPropertyRObjects RKComponentPropertyRObjects - "shortname" : The short (as opposed to canonical) name of the current object(s). For instance the name inside a data.frame, but not the full name including the name of the data.frame - "label" : The RKWard label of the object (if available) \subsection RKComponentPropertyCode RKComponentPropertyCode - "preprocess" : return only the preprocess () section of the code - "calculate" : return only the calculate () section of the code - "printout" : return only the printout () section of the code - "cleanup" : return only the cleanup () section of the code \section RKComponentPropertyConversions Future extensions: Conversions and logic See RKComponentPropertyConvert \section RKComponentPropertyInternals Internal workings RKComponentProperties are QObjects, and communicate with each other via signals and slots. On each change they emit a RKComponentPropertyBase::valueChanged (RKComponentPropertyBase *) signal with a pointer to self as parameter. Properties can be connected to each other using RKComponentPropertyBase::connectToGovernor (). The calling property will connect to the governor's valueChange () signal, and keep itself in sync. Each property can act as a client and governor at the same time (passing through the changes from the governor to the child client(s), as a governor to many different client properties, but only as a client to one single governor. Typically properties are connected at the end of the construction of an RKComponent, and only then. Connections typically are not changed once established. \section RKComponentPropertiesAndComponents Interaction with RKComponents Each property holds two important pieces of information: RKComponentPropertyBase::isValid () and RKComponentPropertyBase::isSatisfied (). The former returns true if the value held by the property is an acceptable valid value. The latter also returns true is the property holds an invalid setting, but is not "required" (requiredness is a parameter to the constructor of the properties). The parent components will be invalid, if any of their children is not satisfied. They may however be satisfied, if they - in turn - are not required. Typically properties are owned by RKComponent (s), but this is not technically necessary. Properties and components share much common functionality. See RKComponentBase. \section TODO TODO - How should invalid values be handled? Currently we keep the bad value as the string value, but use a corrected default in the specialized properties (e.g. RKComponentPropertyInt::intValue () always returns something valid). Does this really make sense? - Maybe Int and Double properties could be joined to a numeric property? - Add something like RKComponentPropertySelect for a property that accepts one or more of a set of predefined strings (like e.g. for a radio-box) - Carefully check whether all API-elements are really needed once the implementation is complete */ #include "rkcomponentproperties.h" #include "../misc/rkcommonfunctions.h" #include #include "../debug.h" ///////////////////////////////////////////// Base ////////////////////////////////////////// RKComponentPropertyBase::RKComponentPropertyBase (QObject *parent, bool required) : QObject (parent) { RK_TRACE (PLUGIN); RKComponentPropertyBase::required = required; is_valid = true; } RKComponentPropertyBase::~RKComponentPropertyBase () { RK_TRACE (PLUGIN); } QVariant RKComponentPropertyBase::value (const QString &modifier) { RK_TRACE (PLUGIN); if (!modifier.isEmpty ()) { warnModifierNotRecognized (modifier); return QString (); } return _value; } bool RKComponentPropertyBase::setValue (const QString &string) { RK_TRACE (PLUGIN); _value = string; emit (valueChanged (this)); return true; } void RKComponentPropertyBase::connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier, bool) { RK_TRACE (PLUGIN); RK_ASSERT (governor); connect (governor, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (governorValueChanged (RKComponentPropertyBase *))); governor_modifier = modifier; // no need to reconcile any requirements, as the RKComponentPropertyBase does not have any requirements // fetch current value governorValueChanged (governor); } void RKComponentPropertyBase::governorValueChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); #warning TOOD: connected value should be stored as qvariant setValue (property->value (governor_modifier).toString ()); } void RKComponentPropertyBase::warnModifierNotRecognized (const QString &modifier) { RK_TRACE (PLUGIN); RK_DEBUG (PLUGIN, DL_ERROR, "Modifier '%s' not recognized.", modifier.toLatin1 (). data ()); } ///////////////////////////////////////// StringList /////////////////////////////////////// RKComponentPropertyStringList::RKComponentPropertyStringList (QObject *parent, bool required) : RKComponentPropertyBase (parent, required) { RK_TRACE (PLUGIN); sep = "\n"; } RKComponentPropertyStringList::~RKComponentPropertyStringList () { RK_TRACE (PLUGIN); } QVariant RKComponentPropertyStringList::value (const QString &modifier) { RK_TRACE (PLUGIN); if (modifier.isEmpty ()) { return storage; } else if (modifier == "joined") { if (_value.isNull ()) { for (int i = 0; i < storage.size (); ++i) { if (!_value.isEmpty ()) _value.append (sep); _value.append (RKCommonFunctions::escape (storage[i])); // _value acts as a cache for joined string } } return _value; } warnModifierNotRecognized (modifier); return QString (); } bool RKComponentPropertyStringList::setValue (const QString &string) { if (string.isNull ()) { setValues (QStringList ()); } else { QStringList list = string.split (sep); for (int i = 0; i < list.size (); ++i) { list[i] = RKCommonFunctions::unescape (list[i]); } setValues (list); } return true; } void RKComponentPropertyStringList::setValueAt (int index, const QString& value) { RK_TRACE (PLUGIN); while (index >= storage.size ()) storage.append (QString ()); // expand as needed storage[index] = value; doChange (); } void RKComponentPropertyStringList::governorValueChanged (RKComponentPropertyBase *property) { QVariant value = property->value (governor_modifier); if (value.type () == QVariant::StringList) { setValues (value.toStringList ()); } else { setValue (value.toString ()); } } ///////////////////////////////////////////// Bool ////////////////////////////////////////// RKComponentPropertyBool::RKComponentPropertyBool (QObject *parent, bool required, bool default_state, const QString &value_true, const QString &value_false) : RKComponentPropertyBase (parent, required) { RK_TRACE (PLUGIN); RKComponentPropertyBool::value_true = value_true; RKComponentPropertyBool::value_false = value_false; default_value = default_state; inverted = false; internalSetValue (default_state); } RKComponentPropertyBool::~RKComponentPropertyBool () { RK_TRACE (PLUGIN); } RKComponentBase* RKComponentPropertyBool::lookupComponent (const QString &identifier, QString *remainder) { RK_TRACE (PLUGIN); RKComponentBase *dummy = RKComponentPropertyBase::lookupComponent (identifier, remainder); if (dummy != this) return dummy; QString next = identifier.section (".", 0, 0); if (next == "not") { RKComponentPropertyBool *negated = new RKComponentPropertyBool (this, false, false, value_true, value_false); negated->setInverted (true); negated->setInternal (true); negated->connectToGovernor (this); *remainder = QString::null; // reset addChild ("not", negated); // so subsequent lookups will not recreate the negated property return (negated->lookupComponent (identifier.section (".", 1), remainder)); } return (this); } void RKComponentPropertyBool::internalSetValue (bool new_value) { RK_TRACE (PLUGIN); if (inverted) current_value = !new_value; else current_value = new_value; if (current_value) { _value = value_true; } else { _value = value_false; } is_valid = true; } bool RKComponentPropertyBool::stringToBool (const QString &value, bool *ok) { if (ok) *ok = true; bool _ok; bool ret = value.toInt (&_ok); if (_ok) return ret; if (value == "true") return true; if (value == "false") return false; if (ok) *ok = false; return false; } bool RKComponentPropertyBool::variantToBool (const QVariant &value, bool *ok) { if (value.type () == QVariant::Bool) { if (ok) *ok = true; return value.toBool (); } else if (value.canConvert (QVariant::Int)) { bool valid; bool ret = (bool) value.toInt (&valid); if (valid) { if (ok) *ok = true; return ret; } } return stringToBool (value.toString (), ok); } void RKComponentPropertyBool::internalSetValue (const QString &new_value) { RK_TRACE (PLUGIN); // try to convert to bool if (new_value == value_true) { internalSetValue (true); } else if (new_value == value_false) { internalSetValue (false); } else { internalSetValue (stringToBool (new_value, &is_valid)); } } void RKComponentPropertyBool::setBoolValue (bool new_value) { RK_TRACE (PLUGIN); internalSetValue (new_value); emit (valueChanged (this)); } bool RKComponentPropertyBool::boolValue () { RK_TRACE (PLUGIN); return current_value; } QVariant RKComponentPropertyBool::value (const QString &modifier) { RK_TRACE (PLUGIN); if (modifier.isEmpty () || (modifier == "numeric")) { return (int) (current_value ? 1 : 0); } if (modifier == "labeled") { return current_value ? value_true : value_false; } if (modifier == "true") return value_true; if (modifier == "false") return value_false; warnModifierNotRecognized (modifier); return QVariant (); } bool RKComponentPropertyBool::setValue (const QString &string) { RK_TRACE (PLUGIN); internalSetValue (string); emit (valueChanged (this)); return isValid (); } bool RKComponentPropertyBool::isStringValid (const QString &string) { RK_TRACE (PLUGIN); if ((string == value_true) || (string == value_false)) { return true; } return false; } void RKComponentPropertyBool::governorValueChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); QVariant value = property->value (governor_modifier); if (value.type () == QVariant::String) { // Qt's conversion from string to bool does not meet our needs internalSetValue (value.toString ()); } else if (value.canConvert (QVariant::Bool)) { internalSetValue (value.toBool ()); } else { // fallback for lists, and other stuff that really should not have been connected to a bool property, in the first place internalSetValue (value.toString ()); } emit (valueChanged (this)); } ///////////////////////////////////////////// Int ////////////////////////////////////////// RKComponentPropertyInt::RKComponentPropertyInt (QObject *parent, bool required, int default_value) : RKComponentPropertyBase (parent, required) { RK_TRACE (PLUGIN); validator = new QIntValidator (this); // accepts all ints initially RKComponentPropertyInt::default_value = default_value; internalSetValue (default_value); } RKComponentPropertyInt::~RKComponentPropertyInt () { RK_TRACE (PLUGIN); } bool RKComponentPropertyInt::setIntValue (int new_value) { RK_TRACE (PLUGIN); internalSetValue (new_value); emit (valueChanged (this)); return (isValid ()); } bool RKComponentPropertyInt::setValue (const QString &string) { RK_TRACE (PLUGIN); internalSetValue (string); emit (valueChanged (this)); return (isValid ()); } void RKComponentPropertyInt::setMin (int lower) { RK_TRACE (PLUGIN); validator->setBottom (lower); if (default_value < lower) { RK_DEBUG (PLUGIN, DL_DEBUG, "default value in integer property is lower than lower boundary"); // actually this is ok. In this case the default is simply "invalid" } if (current_value < lower) { setIntValue (lower); } } void RKComponentPropertyInt::setMax (int upper) { RK_TRACE (PLUGIN); validator->setTop (upper); if (default_value > upper) { RK_DEBUG (PLUGIN, DL_DEBUG, "default value in integer property is larger than upper boundary"); // see above } if (current_value > upper) { setIntValue (upper); } } int RKComponentPropertyInt::minValue () { RK_TRACE (PLUGIN); RK_ASSERT (validator); return (validator->bottom ()); } int RKComponentPropertyInt::maxValue () { RK_TRACE (PLUGIN); RK_ASSERT (validator); return (validator->top ()); } int RKComponentPropertyInt::intValue () { RK_TRACE (PLUGIN); return current_value; } QVariant RKComponentPropertyInt::value (const QString &modifier) { RK_TRACE (PLUGIN); if (!modifier.isEmpty ()) { warnModifierNotRecognized (modifier); return QString (); } return current_value; } bool RKComponentPropertyInt::isStringValid (const QString &string) { RK_TRACE (PLUGIN); int dummy = 0; QString string_copy = string; return (validator->validate (string_copy, dummy) == QValidator::Acceptable); } void RKComponentPropertyInt::connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier, bool reconcile_requirements) { RK_TRACE (PLUGIN); RK_ASSERT (governor); connect (governor, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (governorValueChanged (RKComponentPropertyBase *))); governor_modifier = modifier; // reconcile requirements if applicable if (reconcile_requirements && governor_modifier.isEmpty ()) { if (governor->type () == PropertyInt) { RKComponentPropertyInt *igov = static_cast (governor); // convenience pointer if (validator->bottom () > igov->minValue ()) { igov->setMin (validator->bottom ()); } if (validator->top () < igov->maxValue ()) { igov->setMax (validator->top ()); } } else if (governor->type () == PropertyDouble) { RKComponentPropertyDouble *dgov = static_cast (governor); // convenience pointer if (validator->bottom () > (int) dgov->minValue ()) { dgov->setMin (validator->bottom ()); } if (validator->top () < (int) dgov->maxValue ()) { dgov->setMax (validator->top ()); } } } // fetch current value governorValueChanged (governor); } void RKComponentPropertyInt::governorValueChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); QVariant value = property->value (governor_modifier); double val = value.toDouble (&is_valid); // QVariant's toInt() does not document rounding behavior. So we rather use a defined behavior, here. if (isValid ()) internalSetValue ((int) val); else internalSetValue (value.toString ()); emit (valueChanged (this)); } QIntValidator *RKComponentPropertyInt::getValidator () { RK_TRACE (PLUGIN); RK_ASSERT (validator); return validator; } void RKComponentPropertyInt::internalSetValue (int new_value) { current_value = new_value; _value = QString::number (current_value); is_valid = ((new_value >= validator->bottom ()) && (new_value <= validator->top ())); if (!is_valid) current_value = default_value; } void RKComponentPropertyInt::internalSetValue (const QString &new_value) { current_value = new_value.toInt (&is_valid); if (!is_valid) { _value = new_value; current_value = default_value; return; } internalSetValue (current_value); // will check range and prettify _value } ///////////////////////////////////////////// Double ////////////////////////////////////////// RKComponentPropertyDouble::RKComponentPropertyDouble (QObject *parent, bool required, double default_value) : RKComponentPropertyBase (parent, required) { RK_TRACE (PLUGIN); validator = new QDoubleValidator (this); // accepts all ints initially RKComponentPropertyDouble::default_value = default_value; precision = 2; internalSetValue (default_value); } RKComponentPropertyDouble::~RKComponentPropertyDouble () { RK_TRACE (PLUGIN); } bool RKComponentPropertyDouble::setDoubleValue (double new_value) { RK_TRACE (PLUGIN); internalSetValue (new_value); emit (valueChanged (this)); return (isValid ()); } bool RKComponentPropertyDouble::setValue (const QString &string) { RK_TRACE (PLUGIN); internalSetValue (string); emit (valueChanged (this)); return (isValid ()); } void RKComponentPropertyDouble::setMin (double lower) { RK_TRACE (PLUGIN); validator->setBottom (lower); if (default_value < lower) { RK_DEBUG (PLUGIN, DL_DEBUG, "default value in double property is lower than lower boundary"); // actually this is ok. In this case the default is simply "invalid" } if (current_value < lower) { setDoubleValue (lower); } } void RKComponentPropertyDouble::setMax (double upper) { RK_TRACE (PLUGIN); validator->setTop (upper); if (default_value > upper) { RK_DEBUG (PLUGIN, DL_DEBUG, "default value in double property is larger than upper boundary"); // see above } if (current_value > upper) { setDoubleValue (upper); } } double RKComponentPropertyDouble::minValue () { RK_TRACE (PLUGIN); RK_ASSERT (validator); return (validator->bottom ()); } double RKComponentPropertyDouble::maxValue () { RK_TRACE (PLUGIN); RK_ASSERT (validator); return (validator->top ()); } double RKComponentPropertyDouble::doubleValue () { RK_TRACE (PLUGIN); return current_value; } QVariant RKComponentPropertyDouble::value (const QString &modifier) { RK_TRACE (PLUGIN); if (modifier.isEmpty ()) return current_value; else if (modifier == "formatted") return _value; warnModifierNotRecognized (modifier); return QString (); } bool RKComponentPropertyDouble::isStringValid (const QString &string) { RK_TRACE (PLUGIN); int dummy = 0; QString string_copy = string; return (validator->validate (string_copy, dummy) == QValidator::Acceptable); } void RKComponentPropertyDouble::connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier, bool reconcile_requirements) { RK_TRACE (PLUGIN); RK_ASSERT (governor); connect (governor, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (governorValueChanged (RKComponentPropertyBase *))); governor_modifier = modifier; // reconcile requirements if applicable if (reconcile_requirements && governor_modifier.isEmpty ()) { if (governor->type () == PropertyInt) { RKComponentPropertyInt *igov = static_cast (governor); // convenience pointer if (validator->bottom () > igov->minValue ()) { igov->setMin ((int) validator->bottom ()); // no (real) need to worry about integer overflow, as we only do this if the integers bottom limit is lower. Bad things could happen, if the bottom limit of this double property is extremely large (> INT_MAX), but this should rarely happen. } if (validator->top () < igov->maxValue ()) { igov->setMax ((int) validator->top ()); // see above comment } } else if (governor->type () == PropertyDouble) { RKComponentPropertyDouble *dgov = static_cast (governor); // convenience pointer if (validator->bottom () > dgov->minValue ()) { dgov->setMin (validator->bottom ()); } if (validator->top () < dgov->maxValue ()) { dgov->setMax (validator->top ()); } } } // fetch current value governorValueChanged (governor); } void RKComponentPropertyDouble::governorValueChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); QVariant value = property->value (governor_modifier); double val = value.toDouble (&is_valid); if (is_valid) internalSetValue (val); else internalSetValue (value.toString ()); emit (valueChanged (this)); } QDoubleValidator *RKComponentPropertyDouble::getValidator () { RK_TRACE (PLUGIN); RK_ASSERT (validator); return validator; } void RKComponentPropertyDouble::internalSetValue (double new_value) { RK_TRACE (PLUGIN); current_value = new_value; // what we want is AT LEAST *precision digits, more if required. I'm sure there's a nifty algorithm for that, but this hack does the trick: _value = QString::number (current_value, 'f', 9); // 9 is an arbitrary limit to counter floating point jitter int decimal = _value.indexOf ('.'); if (decimal >= 0) { int min_digit = decimal + precision + 1; while ((min_digit < _value.length ()) && _value.endsWith ('0')) _value.chop (1); } if (_value.endsWith ('.')) _value.chop (1); is_valid = ((new_value >= validator->bottom ()) && (new_value <= validator->top ())); if (!is_valid) current_value = default_value; } void RKComponentPropertyDouble::internalSetValue (const QString &new_value) { RK_TRACE (PLUGIN); current_value = new_value.toDouble (&is_valid); if (!is_valid) { _value = new_value; current_value = default_value; return; } internalSetValue (current_value); // will check range and prettify _value } ///////////////////////////////////////////////// RObjects //////////////////////////////////////////////////////// #include "../rkglobals.h" #include "../core/robjectlist.h" #include "../core/rkvariable.h" #include "../core/rcontainerobject.h" #include "../core/rkmodificationtracker.h" #include "../misc/rkobjectlistview.h" RKComponentPropertyRObjects::RKComponentPropertyRObjects (QObject *parent, bool required) : RKComponentPropertyBase (parent, required), RObjectListener (RObjectListener::Other) { RK_TRACE (PLUGIN); // no initial requirements dims = min_length = max_length = min_num_objects = min_num_objects_if_any = max_num_objects = -1; separator = "\n"; addNotificationType (RObjectListener::ObjectRemoved); addNotificationType (RObjectListener::MetaChanged); } RKComponentPropertyRObjects::~RKComponentPropertyRObjects () { RK_TRACE (PLUGIN); setObjectValue (0); } void RKComponentPropertyRObjects::setListLength (int min_num_objects, int min_num_objects_if_any, int max_num_objects) { RK_TRACE (PLUGIN); RKComponentPropertyRObjects::min_num_objects = min_num_objects; RKComponentPropertyRObjects::min_num_objects_if_any = min_num_objects_if_any; RKComponentPropertyRObjects::max_num_objects = max_num_objects; validizeAll (); } bool RKComponentPropertyRObjects::addObjectValue (RObject *object) { RK_TRACE (PLUGIN); if (appendObject (object)) { updateValidity (); emit (valueChanged (this)); return isValid (); } return false; } bool RKComponentPropertyRObjects::appendObject (RObject *object) { if ((!object) || object_list.contains (object)) return false; object_list.append (object); QString probs = checkObjectProblems (object); if (!probs.isEmpty ()) problems.insert (object, probs); listenForObject (object); return true; } void RKComponentPropertyRObjects::objectRemoved (RObject *object) { RK_TRACE (PLUGIN); int index = object_list.indexOf (object); if (index >= 0) { object_list.removeAt (index); problems.remove (object); stopListenForObject (object); updateValidity (); emit (valueChanged (this)); } } void RKComponentPropertyRObjects::setClassFilter (const QStringList &classes) { RK_TRACE (PLUGIN); RKComponentPropertyRObjects::classes = classes; validizeAll (); } void RKComponentPropertyRObjects::setTypeFilter (const QStringList &types) { RK_TRACE (PLUGIN); RKComponentPropertyRObjects::types = types; validizeAll (); } void RKComponentPropertyRObjects::setDimensionFilter (int dimensionality, int min_length, int max_length) { RK_TRACE (PLUGIN); dims = dimensionality; RKComponentPropertyRObjects::min_length = min_length; RKComponentPropertyRObjects::max_length = max_length; validizeAll (); } bool RKComponentPropertyRObjects::setObjectValue (RObject *object) { RK_TRACE (PLUGIN); problems.clear (); while (!object_list.isEmpty ()) { stopListenForObject (object_list.takeAt (0)); } return (addObjectValue (object)); } void RKComponentPropertyRObjects::setObjectList (const RObject::ObjectList &newlist) { RK_TRACE (PLUGIN); bool changes = false; // remove items from the old list that are not in the new list for (int i = 0; i < object_list.size (); ++i) { RObject *object = object_list[i]; if (!newlist.contains (object)) { stopListenForObject (object_list.takeAt (i)); problems.remove (object); --i; changes = true; } } // now add items from the new list that are not in the old list for (int i = 0; i < newlist.size (); ++i) { RObject *obj = newlist[i]; if (appendObject (obj)) changes = true; } // emit a signal if there have been any changes if (changes) { updateValidity (); emit (valueChanged (this)); } } QString RKComponentPropertyRObjects::objectProblems (int list_index) const { return problems.value (object_list.value (list_index)); } QString RKComponentPropertyRObjects::checkObjectProblems (RObject *object) const { RK_TRACE (PLUGIN); QStringList probs; // first check dimensionality if (dims > 0) { if (object->getDimensions ().size () != dims) probs.append (i18n ("This object has %1 dimension(s), but %2 dimension(s) is/are expected.", object->getDimensions().size(), dims)); } int olength = object->getLength (); if ((min_length > 0) && (olength < min_length)) probs.append (i18n ("This object has a length of %1, but a minimum length of %2 is expected.", olength, min_length)); if ((max_length >= 0) && (olength > max_length)) probs.append (i18n ("This object has a length of %1, but a maximum length of %2 is expected.", olength, max_length)); // next, check classes if (!classes.isEmpty ()) { bool ok = false; QStringList::const_iterator it = classes.begin (); while ((!ok) && (it != classes.end ())) { if (object->inherits (*it)) { ok = true; } ++it; } if (!ok) probs.append (i18n ("This object does not appear to belong to any of the classes %1.", classes.join (", "))); } // finally, check type if (!types.isEmpty ()) { QString type = RObject::typeToText (object->getDataType ()).toLower (); if (!types.contains (type)) { probs.append (i18n ("This object's data type is %1, while allowed type(s) is/are %2.", type, types.join (", "))); } } if (probs.isEmpty ()) return QString (); return (QString ("
    • ") + probs.join ("
    • ") + "
    "); } RObject *RKComponentPropertyRObjects::objectValue () { RK_TRACE (PLUGIN); if (object_list.empty ()) return 0; return (object_list.first ()); } RObject::ObjectList RKComponentPropertyRObjects::objectList () { RK_TRACE (PLUGIN); return (object_list); } QVariant RKComponentPropertyRObjects::value (const QString &modifier) { RK_TRACE (PLUGIN); QStringList ret; if (modifier.isEmpty ()) { for (int i = 0; i < object_list.size (); ++i) { ret.append (object_list[i]->getFullName ()); } } else if (modifier == "shortname") { for (int i = 0; i < object_list.size (); ++i) { ret.append (object_list[i]->getShortName ()); } } else if (modifier == "label") { for (int i = 0; i < object_list.size (); ++i) { ret.append (object_list[i]->getLabel ()); } } else { warnModifierNotRecognized (modifier); } return ret; } bool RKComponentPropertyRObjects::setValue (const QStringList& values) { RK_TRACE (PLUGIN); setObjectValue (0); bool ok = true; for (int i = 0; i < values.size (); ++i) { RObject *obj = RObjectList::getObjectList ()->findObject (values[i]); ok = ok && appendObject (obj); } updateValidity (); emit (valueChanged (this)); return (isValid () && ok); } bool RKComponentPropertyRObjects::setValue (const QString &value) { RK_TRACE (PLUGIN); return setValue (value.split (separator, QString::SkipEmptyParts)); } bool RKComponentPropertyRObjects::isStringValid (const QString &value) { RK_TRACE (PLUGIN); QStringList slist = value.split (separator, QString::SkipEmptyParts); for (QStringList::const_iterator it = slist.begin (); it != slist.end (); ++it) { RObject *obj = RObjectList::getObjectList ()->findObject (*it); if (!(obj && checkObjectProblems (obj).isEmpty ())) { return false; } } return true; } void RKComponentPropertyRObjects::connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier, bool reconcile_requirements) { RK_TRACE (PLUGIN); RK_ASSERT (governor); connect (governor, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (governorValueChanged (RKComponentPropertyBase *))); governor_modifier = modifier; // reconcile requirements if applicable if (reconcile_requirements && governor_modifier.isEmpty ()) { if (governor->type () == PropertyRObjects) { RKComponentPropertyRObjects *ogov = static_cast (governor); // convenience pointer // reconcile dimensionality filter if (dims > 0) { if (ogov->dims <= 0) { ogov->dims = dims; } else if (ogov->dims != dims) { RK_DEBUG (PLUGIN, DL_WARNING, "Could not reconcile dimensionality in RObject properties"); } } if (ogov->min_length < min_length) { ogov->min_length = min_length; } if (max_length > 0) { if (ogov->max_length > max_length) { ogov->max_length = max_length; } } // reconcile number of objects filter if (ogov->min_num_objects < min_num_objects) { ogov->min_num_objects = min_num_objects; } if (ogov->min_num_objects_if_any < min_num_objects_if_any) { ogov->min_num_objects_if_any = min_num_objects_if_any; } if (max_num_objects && (ogov->max_num_objects > max_num_objects)) { ogov->max_num_objects = max_num_objects; } // reconcile class filter if (!classes.isEmpty ()) { if (ogov->classes.isEmpty ()) { ogov->classes= classes; } else { QStringList::Iterator it = ogov->classes.begin (); while (it != ogov->classes.end ()) { if (classes.contains (*it)) { ++it; } else { ogov->classes.erase (it); // automatically advances to the next item } } if (ogov->classes.isEmpty ()) { RK_DEBUG (PLUGIN, DL_WARNING, "Incompatible class filters for RObject properties"); ogov->classes = classes; } } } // reconcile type filter if (!types.isEmpty ()) { if (ogov->types.isEmpty ()) { ogov->types = types; } else { QStringList::Iterator it = ogov->types.begin (); while (it != ogov->types.end ()) { if (types.contains (*it)) { ++it; } else { ogov->types.erase (it); // automatically advances to the next item } } if (ogov->types.isEmpty ()) { RK_DEBUG (PLUGIN, DL_WARNING, "Incompatible type filters for RObject properties"); ogov->types = types; } } } // make governor recheck its values ogov->validizeAll (); } } // fetch current value governorValueChanged (governor); } void RKComponentPropertyRObjects::governorValueChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); if ((property->type () == PropertyRObjects) && governor_modifier.isEmpty ()) { setObjectList (static_cast (property)->objectList ()); } else { QVariant value = property->value (); if (value.type () == QVariant::StringList) { setValue (value.toStringList ()); } else { setValue (value.toString ()); } } } void RKComponentPropertyRObjects::objectMetaChanged (RObject *object) { RK_TRACE (PLUGIN); // if object list contains this object, check whether it is still valid. Otherwise check, whether it's problem set has changed, revalidize and signal change. int index = object_list.indexOf (object); if (index >= 0) { QString probs = checkObjectProblems (object); if (probs != problems.value (object)) { if (probs.isEmpty ()) problems.remove (object); else problems.insert (object, probs); updateValidity (); emit (valueChanged (this)); } } } void RKComponentPropertyRObjects::validizeAll (bool silent) { RK_TRACE (PLUGIN); bool changes = false; for (int i = 0; i < object_list.size (); ++i) { RObject *object = object_list[i]; QString probs = checkObjectProblems (object); if (probs != problems.value (object)) { if (probs.isEmpty ()) problems.remove (object); else problems.insert (object, probs); changes = true; } } updateValidity (); // we should do this even if there are no changes in the list. There might have still been changes in the filter! if (changes) { if (!silent) emit (valueChanged (this)); } } void RKComponentPropertyRObjects::updateValidity () { RK_TRACE (PLUGIN); is_valid = true; // innocent until proven guilty if (!problems.isEmpty ()) is_valid = false; else if ((min_num_objects > 0) || (max_num_objects > 0) || (min_num_objects_if_any > 0)) { int len = object_list.count (); if (len < min_num_objects) is_valid = false; if (len && (len < min_num_objects_if_any)) is_valid = false; if ((max_num_objects > 0) && (len > max_num_objects)) is_valid = false; } } bool RKComponentPropertyRObjects::atMaxLength () { RK_TRACE (PLUGIN); int len = object_list.count (); if (max_num_objects && (len >= max_num_objects)) return true; return false; } /////////////////////////////////////////// Code //////////////////////////////////////////////// RKComponentPropertyCode::RKComponentPropertyCode (QObject *parent, bool required) : RKComponentPropertyBase (parent, required) { RK_TRACE (PLUGIN); preprocess_code = calculate_code = printout_code = QString (); } RKComponentPropertyCode::~RKComponentPropertyCode () { RK_TRACE (PLUGIN); } QVariant RKComponentPropertyCode::value (const QString &modifier) { RK_TRACE (PLUGIN); if (modifier == "preprocess") return preprocess (); if (modifier == "calculate") return calculate (); if (modifier == "printout") return printout (); if (!modifier.isEmpty ()) warnModifierNotRecognized (modifier); return (preprocess () + calculate () + printout ()); } /////////////////////////////////////////// Convert //////////////////////////////////////////////// RKComponentPropertyConvert::RKComponentPropertyConvert (RKComponent *parent) : RKComponentPropertyBool (parent, false) { RK_TRACE (PLUGIN); _mode = Equals; require_true = false; c_parent = parent; // get notified of own changes connect (this, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (selfChanged (RKComponentPropertyBase *))); } RKComponentPropertyConvert::~RKComponentPropertyConvert () { RK_TRACE (PLUGIN); } void RKComponentPropertyConvert::setMode (ConvertMode mode) { RK_TRACE (PLUGIN); _mode = mode; sourcePropertyChanged (0); } void RKComponentPropertyConvert::setSources (const QStringList &source_ids) { RK_TRACE (PLUGIN); sources.clear (); for (QStringList::const_iterator it = source_ids.constBegin (); it != source_ids.constEnd (); ++it) { Source s; RKComponentBase *prop = c_parent->lookupComponent (*it, &(s.modifier)); if (prop && prop->isProperty ()) { s.property = static_cast(prop); sources.append (s); connect (s.property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (sourcePropertyChanged (RKComponentPropertyBase *))); } else { RK_DEBUG (PLUGIN, DL_WARNING, "Not found or not a property: %s", (*it).toLatin1 ().data ()); } } sourcePropertyChanged (0); } void RKComponentPropertyConvert::setStandard (const QString &standard) { RK_TRACE (PLUGIN); RKComponentPropertyConvert::standard = standard; sourcePropertyChanged (0); } void RKComponentPropertyConvert::setRange (double min, double max) { RK_TRACE (PLUGIN); RKComponentPropertyConvert::min = min; RKComponentPropertyConvert::max = max; sourcePropertyChanged (0); } void RKComponentPropertyConvert::selfChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); c_parent->changed (); } void RKComponentPropertyConvert::sourcePropertyChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); for (int i = 0; i < sources.size (); ++i) { Source source = sources[i]; // easier typing switch (_mode) { case Equals: { if (fetchStringValue (source.property, source.modifier) != standard) { setBoolValue (false); return; } break; } case NotEquals: { if (fetchStringValue (source.property, source.modifier) == standard) { setBoolValue (false); return; } break; } case Range: { bool ok; double val = source.property->value (source.modifier).toDouble (&ok); if (!ok) { val = min; RK_DEBUG (PLUGIN, DL_WARNING, "Non-numeric property in convert sources, cannot check range"); } if ((min > val) || (max < val)) { setBoolValue (false); return; } break; } case And: { bool ok; bool val = variantToBool (source.property->value (source.modifier), &ok); if (ok) { if (!val) { setBoolValue (false); return; } } else { RK_DEBUG (PLUGIN, DL_WARNING, "Non-boolean property in convert sources, cannot check AND"); } break; } case Or: { bool ok; bool val = variantToBool (source.property->value (source.modifier), &ok); if (ok) { if (val) { setBoolValue (true); return; } } else { RK_DEBUG (PLUGIN, DL_WARNING, "Non-boolean property in convert sources, cannot check OR"); } break; } } } // if we did not return above, this is the default value: switch (_mode) { case Equals: case NotEquals: case Range: case And: { setBoolValue (true); break; } case Or: { setBoolValue (false); break; } } } void RKComponentPropertyConvert::setRequireTrue (bool require_true) { RK_TRACE (PLUGIN); RKComponentPropertyConvert::require_true = require_true; required = require_true; } bool RKComponentPropertyConvert::isValid () { RK_TRACE (PLUGIN); if (require_true) { return (boolValue ()); } return is_valid; } void RKComponentPropertyConvert::connectToGovernor (RKComponentPropertyBase*, const QString&, bool) { RK_DEBUG (PLUGIN, DL_ERROR, "Cannot connect a property to a governor"); } bool RKComponentPropertyConvert::setValue (const QString&) { RK_DEBUG (PLUGIN, DL_ERROR, "Cannot set value for a property"); return false; } /////////////////////////////////////////// Switch //////////////////////////////////////////////// RKComponentPropertySwitch::RKComponentPropertySwitch (RKComponent* parent, const QStringList& def_values, const QStringList& standards) : RKComponentPropertyBase (parent, false) { RK_TRACE (PLUGIN); RKComponentPropertySwitch::def_values = def_values; RKComponentPropertySwitch::standards = standards; condition_prop = 0; c_parent = parent; connect (this, SIGNAL(valueChanged(RKComponentPropertyBase*)), this, SLOT(selfChanged(RKComponentPropertyBase*))); } RKComponentPropertySwitch::~RKComponentPropertySwitch () { RK_TRACE (PLUGIN); } void RKComponentPropertySwitch::connectToGovernor (RKComponentPropertyBase*, const QString&, bool) { RK_DEBUG (PLUGIN, DL_ERROR, "Cannot connect a property to a governor"); } bool RKComponentPropertySwitch::setValue (const QString& value) { RK_DEBUG (PLUGIN, DL_ERROR, "Cannot set value for a property"); return false; } void RKComponentPropertySwitch::selfChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); c_parent->changed (); } void RKComponentPropertySwitch::sourcePropertyChanged (RKComponentPropertyBase*) { RK_TRACE (PLUGIN); valueChanged (this); // new value will be pulled by anyone interested } QVariant RKComponentPropertySwitch::value (const QString& modifier) { RK_TRACE (PLUGIN); if (!condition_prop) { RK_ASSERT (false); return QVariant (); } QVariant cond = condition_prop->value (condition_prop_modifier); int index = 0; if (standards.isEmpty ()) { if (RKComponentPropertyBool::variantToBool (cond, 0)) index = 1; } else { index = standards.indexOf (cond.toString ()); // NOTE: list search. Could use a hash, instead, but in general there won't be more than a hand full of standards if (index < 0) index = standards.size (); // remainder-category } // First try to return matching property RKComponentPropertyBase *p = value_props.value (index); if (p) { QString mod = value_prop_mods.value (index); if (!(mod.isEmpty () || modifier.isEmpty ())) mod.append ("."); mod.append (modifier); return p->value (mod); } // If that fails, try to find a static default string if (index < def_values.size ()) { return def_values[index]; // NOTE: silently dropping modifier. This is useful for static "other" strings. } RK_DEBUG (PLUGIN, DL_ERROR, "Neither a fixed value, nor a property is defined for value %s (element %d/%d of standards)", qPrintable (cond.toString ()), index + 1, standards.size ()); return QVariant (); } void RKComponentPropertySwitch::setSources (const QString& _condition_prop, const QStringList& _value_props) { RK_TRACE (PLUGIN); RK_ASSERT (!condition_prop); // must only be called once condition_prop = c_parent->lookupProperty (_condition_prop, &condition_prop_modifier, true); if (!condition_prop) { RK_DEBUG (PLUGIN, DL_ERROR, "Not a valid condition to connect property to: %s", qPrintable (_condition_prop)); } else { connect (condition_prop, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (sourcePropertyChanged(RKComponentPropertyBase*))); } for (int i = 0; i < _value_props.size (); ++i) { QString mod; RKComponentPropertyBase *p = c_parent->lookupProperty (_value_props[i], &mod, true); value_props.append (p); // NOTE: Even if it is 0. value() takes care of that. value_prop_mods.append (mod); if (p) connect (p, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (sourcePropertyChanged(RKComponentPropertyBase*))); } } #include "rkcomponentproperties.moc" rkward-0.6.1/rkward/plugin/rkpluginsaveobject.cpp0000644000175000017500000001161212124345411021553 0ustar thomasthomas/*************************************************************************** rkpluginsaveobject - description ------------------- begin : Tue Jan 30 2007 copyright : (C) 2007, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkpluginsaveobject.h" #include #include #include #include "../misc/xmlhelper.h" #include "../misc/rksaveobjectchooser.h" #include "../rkglobals.h" #include "../debug.h" RKPluginSaveObject::RKPluginSaveObject (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // read settings XMLHelper *xml = XMLHelper::getStaticHelper (); bool checkable = xml->getBoolAttribute (element, "checkable", false, DL_INFO); bool checked = xml->getBoolAttribute (element, "checked", false, DL_INFO); bool required = xml->getBoolAttribute (element, "required", true, DL_INFO); QString label = xml->getStringAttribute (element, "label", i18n ("Save to:"), DL_INFO); QString initial = xml->getStringAttribute (element, "initial", i18n ("my.data"), DL_INFO); // create and add properties addChild ("selection", selection = new RKComponentPropertyBase (this, required)); connect (selection, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ())); selection->setInternal (true); // the two separate properties "parent" and "objectname" are used for (re-)storing. addChild ("parent", parent = new RKComponentPropertyRObjects (this, false)); connect (parent, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ())); addChild ("objectname", objectname = new RKComponentPropertyBase (this, false)); connect (objectname, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ())); addChild ("active", active = new RKComponentPropertyBool (this, false, false, "1", "0")); connect (active, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (externalChange ())); if (!checkable) active->setInternal (true); // create GUI groupbox = new QGroupBox (label, this); groupbox->setCheckable (checkable); if (checkable) groupbox->setChecked (checked); connect (groupbox, SIGNAL (toggled(bool)), this, SLOT (internalChange ())); selector = new RKSaveObjectChooser (groupbox, initial); connect (selector, SIGNAL (changed (bool)), SLOT (internalChange ())); QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QVBoxLayout *vbox_b = new QVBoxLayout (groupbox); vbox_b->setContentsMargins (0, 0, 0, 0); vbox_b->addWidget (selector); vbox->addWidget (groupbox); // initialize setRequired (required); updating = false; internalChange (); } RKPluginSaveObject::~RKPluginSaveObject () { RK_TRACE (PLUGIN); } void RKPluginSaveObject::update () { RK_TRACE (PLUGIN); if (isSatisfied ()) selector->setBackgroundColor (QColor (255, 255, 255)); else selector->setBackgroundColor (QColor (255, 0, 0)); changed (); } void RKPluginSaveObject::externalChange () { RK_TRACE (PLUGIN); if (updating) return; // NOTE: the selection-property is read-only! selector->setBaseName (fetchStringValue (objectname)); selector->setRootObject (parent->objectValue ()); if (groupbox->isCheckable ()) { groupbox->setChecked (active->boolValue ()); } // call internalChange, now, in case one or more setings could not be applied internalChange (); } void RKPluginSaveObject::internalChange () { RK_TRACE (PLUGIN); if (updating) return; updating = true; selection->setValue (selector->currentFullName ()); objectname->setValue (selector->currentBaseName ()); parent->setObjectValue (selector->rootObject ()); active->setBoolValue ((!groupbox->isCheckable()) || groupbox->isChecked()); updating = false; update (); } bool RKPluginSaveObject::isValid () { RK_TRACE (PLUGIN); if (groupbox->isCheckable () && (!groupbox->isChecked ())) return true; return (RKComponent::isValid () && selector->isOk ()); } QVariant RKPluginSaveObject::value (const QString& modifier) { // RK_TRACE (PLUGIN); return (selection->value (modifier)); } #include "rkpluginsaveobject.moc" rkward-0.6.1/rkward/plugin/rkformula.cpp0000644000175000017500000003275612124345411017670 0ustar thomasthomas/*************************************************************************** rkformula - description ------------------- begin : Thu Aug 12 2004 copyright : (C) 2004, 2006, 2007, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkformula.h" #include #include #include #include #include #include #include #include #include #include #include "rkcomponent.h" #include "../core/rcontainerobject.h" #include "../misc/xmlhelper.h" #include "../misc/rkstandardicons.h" #include "../rkglobals.h" #include "../debug.h" RKFormula::RKFormula (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // create and register properties fixed_factors = new RKComponentPropertyRObjects (this, true); connect (fixed_factors, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (factorsChanged (RKComponentPropertyBase *))); addChild ("fixed_factors", fixed_factors); fixed_factors->setInternal (true); dependent = new RKComponentPropertyRObjects (this, true); connect (dependent, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (factorsChanged (RKComponentPropertyBase *))); addChild ("dependent", dependent); dependent->setInternal (true); model = new RKComponentPropertyBase (this, true); addChild ("model", model); model->setInternal (true); table = new RKComponentPropertyBase (this, true); addChild ("table", table); table->setInternal (true); labels = new RKComponentPropertyBase (this, true); addChild ("labels", labels); labels->setInternal (true); // get xmlHelper XMLHelper *xml = XMLHelper::getStaticHelper (); // create layout QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); vbox->addWidget (new QLabel (xml->getStringAttribute (element, "label", i18n ("Specify model"), DL_INFO), this)); type_selector = new QButtonGroup (this); QRadioButton* button; vbox->addWidget (button = new QRadioButton (i18n ("Full Model"), this)); type_selector->addButton (button, (int) FullModel); vbox->addWidget (button = new QRadioButton (i18n ("Main Effects only"), this)); type_selector->addButton (button, (int) MainEffects); vbox->addWidget (button = new QRadioButton (i18n ("Custom Model:"), this)); type_selector->addButton (button, (int) Custom); connect (type_selector, SIGNAL (buttonClicked (int)), this, SLOT (typeChange (int))); custom_model_widget = new QWidget (this); QHBoxLayout *model_hbox = new QHBoxLayout (custom_model_widget); predictors_view = new QTreeWidget (custom_model_widget); predictors_view->setHeaderLabel (i18n ("Name")); predictors_view->setSelectionMode (QAbstractItemView::ExtendedSelection); predictors_view->setSortingEnabled (false); predictors_view->setRootIsDecorated (false); model_hbox->addWidget (predictors_view); model_hbox->addSpacing (6); QVBoxLayout *model_vbox = new QVBoxLayout (); model_hbox->addLayout (model_vbox); add_button = new QPushButton (QString::null, custom_model_widget); add_button->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionAddRight)); connect (add_button, SIGNAL (clicked ()), this, SLOT (addButtonClicked ())); model_vbox->addWidget (add_button); remove_button = new QPushButton (QString::null, custom_model_widget); remove_button->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionRemoveLeft)); connect (remove_button, SIGNAL (clicked ()), this, SLOT (removeButtonClicked ())); model_vbox->addWidget (remove_button); level_box = new QSpinBox (custom_model_widget); level_box->setRange (0, 0); level_box->setSpecialValueText (i18n ("Main effects")); model_vbox->addWidget (level_box); model_hbox->addSpacing (6); model_view = new QTreeWidget (custom_model_widget); model_view->setHeaderLabels (QStringList () << i18n ("Level") << i18n ("Term")); model_view->setRootIsDecorated (true); model_hbox->addWidget (model_view); vbox->addWidget (custom_model_widget); typeChange (FullModel); // initialize } RKFormula::~RKFormula () { RK_TRACE (PLUGIN); } void RKFormula::factorsChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); // trigger update: typeChange ((int) model_type); } void RKFormula::typeChange (int id) { RK_TRACE (PLUGIN); QAbstractButton* b = type_selector->button (id); RK_ASSERT (b); b->setChecked (true); if (id == (int) FullModel) { custom_model_widget->setEnabled (false); } else if (id == (int) MainEffects) { custom_model_widget->setEnabled (false); } else if (id == (int) Custom) { predictors_view->clear (); predictors_map.clear (); RObject::ObjectList fixed_list = fixed_factors->objectList (); for (int i = 0; i < fixed_list.count (); ++i) { QTreeWidgetItem *new_item = new QTreeWidgetItem (predictors_view); new_item->setText (0, fixed_list[i]->getShortName ()); predictors_map.insert (new_item, (fixed_list[i])); } checkCustomModel (); custom_model_widget->setEnabled (true); } model_type = (ModelType) id; makeModelString (); } void RKFormula::makeModelString () { RK_TRACE (PLUGIN); // first find out, whether multiple containers are involved and construct table string multitable = false; model_ok = false; QString table_string, model_string, labels_string; mangled_names.clear (); RObject *dep_var = dependent->objectValue (); RObject *container = 0; if (dep_var) { model_ok = true; } RObject::ObjectList vlist = fixed_factors->objectList (); if (vlist.empty ()) { model_ok = false; } if (dep_var) { container = dep_var->parentObject (); } else if (!vlist.empty ()) { container = vlist.first ()->parentObject (); } for (RObject::ObjectList::const_iterator it = vlist.begin (); it != vlist.end (); ++it) { if ((*it)->parentObject () != container) { multitable = true; break; } } if (multitable) { table_string = "data.frame ("; if (dep_var) table_string.append (mangleName (dep_var) + '=' + dep_var->getFullName ()); for (RObject::ObjectList::const_iterator it = vlist.begin (); it != vlist.end (); ++it) { table_string.append (", " + mangleName ((*it)) + '=' + (*it)->getFullName ()); } table_string.append (")"); } else { if (container) table_string = container->getFullName ();; } // construct model string model_string = mangleName (dep_var) + " ~ "; if (model_type == FullModel) { for (RObject::ObjectList::const_iterator it = vlist.begin (); it != vlist.end (); ++it) { if (it != vlist.begin ()) model_string.append (" * "); model_string.append (mangleName (*it)); } } else if (model_type == MainEffects) { for (RObject::ObjectList::const_iterator it = vlist.begin (); it != vlist.end (); ++it) { if (it != vlist.begin ()) model_string.append (" + "); model_string.append (mangleName (*it)); } } else if (model_type == Custom) { if (interaction_map.empty ()) model_ok = false; for (InteractionMap::Iterator it = interaction_map.begin (); it != interaction_map.end (); ++it) { if (it != interaction_map.begin ()) { model_string.append (" + "); } for (int i=0; i <= it.value ().level; ++i) { if (i) { model_string.append (":"); } model_string.append (mangleName (it.value ().vars[i])); } } } // labels labels_string = "list ("; MangledNames::const_iterator it; for (it = mangled_names.begin (); it != mangled_names.end (); ++it) { if (it != mangled_names.begin ()) { labels_string.append (", "); } labels_string.append (it.key () + "=\"" + it.value ()->getDescription () + "\""); } labels_string.append (")"); table->setValue (table_string); model->setValue (model_string); labels->setValue (labels_string); changed (); } QString RKFormula::mangleName (RObject *var) { RK_TRACE (PLUGIN); if (!var) return QString (); QString dummy = var->getShortName (); QString dummy2 = dummy; MangledNames::iterator it; int i=-1; while (((it = mangled_names.find (dummy)) != mangled_names.end ()) && (it.value () != var)) { dummy = dummy2.append (QString ().setNum (++i)); } mangled_names.insert (dummy, var); return dummy; } void RKFormula::addButtonClicked () { RK_TRACE (PLUGIN); // create an array of selected variables RObject::ObjectList varlist; QList selected_predictors = predictors_view->selectedItems (); for (int i = 0; i < selected_predictors.count (); ++i) { varlist.append (predictors_map.value (selected_predictors[i])); } if (varlist.isEmpty ()) return; // TODO: allow looping from 0 to level (i.e. adding all interactions up to level) // construct interactions int level = level_box->value (); QList interactions = makeInteractions (level, varlist); if (interactions.isEmpty ()) return; // check for duplicates (remove from old list - new terms might have a different order of naming) for (int inter = 0; inter < interactions.count (); ++inter) { Interaction new_inter = interactions[inter]; QTreeWidgetItem *dupe = 0; for (InteractionMap::Iterator it = interaction_map.begin (); it != interaction_map.end (); ++it) { Interaction existing_inter = it.value (); // BEGIN: actual comparison if (new_inter.level == existing_inter.level) { int num_matches = 0; for (int a=0; a <= new_inter.level; ++a) { if (existing_inter.vars.contains (new_inter.vars[a])) ++num_matches; } if (num_matches == (new_inter.level + 1)) { dupe = it.key (); break; } } // END: actual comparison } if (dupe) { interaction_map.remove (dupe); delete dupe; } } // add new interactions for (int i = 0; i < interactions.count (); ++i) { QString dummy; for (int j=0; j <= interactions[i].level; ++j) { RK_DEBUG (PLUGIN, DL_DEBUG, "inserting interaction %d, level %d", i, j); if (j) { dummy.append (" X "); } dummy.append (interactions[i].vars[j]->getShortName ()); } QTreeWidgetItem *item = new QTreeWidgetItem (model_view); item->setText (0, QString::number (level)); item->setText (1, dummy); interaction_map.insert (item, interactions[i]); } model_view->sortItems (0, Qt::AscendingOrder); makeModelString (); } QList RKFormula::makeInteractions (int level, RObject::ObjectList source_vars) { RK_TRACE (PLUGIN); RK_DEBUG (PLUGIN, DL_DEBUG, "makeInteractions: level %d, source_count %d", level, source_vars.count ()); RK_ASSERT (level >= 0); QList ret; int start_var; // enough vars available for this level of crossing? if (source_vars.count () < (level + 1)) return ret; // reached bottom level? if (!level) { // return an list of level 0 interactions (i.e. each var in a single "interaction") for (start_var = 0; start_var < source_vars.count (); ++start_var) { Interaction inter; inter.level = 0; inter.vars.append (source_vars[start_var]); ret.append (inter); } return ret; } // cross each input variable with all interactions of the further variables at the next lower level RObject::ObjectList sub_vars = source_vars; for (int i = 0; i < source_vars.count (); ++i) { // get the next lower level interactions sub_vars.removeFirst (); // not to be included in the sub-interactions QList sub_interactions = makeInteractions (level - 1, sub_vars); // now cross each with the current var for (int sub = 0; sub < sub_interactions.count (); ++sub) { Interaction inter; inter.level = level; // well, actually level should always be count of vars - 1, so redundant... inter.vars = sub_interactions[sub].vars; inter.vars.insert (0, source_vars[i]); ret.append (inter); } } return ret; } void RKFormula::removeButtonClicked () { RK_TRACE (PLUGIN); QList selected = model_view->selectedItems (); if (selected.isEmpty ()) return; for (int i = 0; i < selected.count (); ++i) { QTreeWidgetItem* current = selected[i]; interaction_map.remove (current); delete current; } makeModelString (); } void RKFormula::checkCustomModel () { RK_TRACE (PLUGIN); int max_level = predictors_view->topLevelItemCount () - 1; if (max_level >= 0) { level_box->setMaximum (max_level); } else { level_box->setMaximum (0); } // clear terms which are no longer valid for (InteractionMap::iterator in = interaction_map.begin (); in != interaction_map.end (); ++in) { Interaction inter = in.value (); int found_vars = 0; for (int i=0; i <= inter.level; ++i) { for (ItemMap::const_iterator item = predictors_map.constBegin (); item != predictors_map.constEnd (); ++item) { RK_DEBUG (PLUGIN, DL_DEBUG, "level %d", i); if (item.value () == inter.vars[i]) { ++found_vars; break; } } } if (found_vars < (inter.level + 1)) { delete (in.key ()); interaction_map.erase (in); } } } bool RKFormula::isValid () { RK_TRACE (PLUGIN); return (model_ok); } #include "rkformula.moc" rkward-0.6.1/rkward/plugin/rkinput.cpp0000644000175000017500000001102712124345411017346 0ustar thomasthomas/*************************************************************************** rkinput - description ------------------- begin : Sat Mar 10 2005 copyright : (C) 2005, 2006, 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkinput.h" #include #include #include #include #include #include "../misc/xmlhelper.h" #include "../rkglobals.h" #include "../debug.h" RKInput::RKInput (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); textedit = 0; lineedit = 0; // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create and add property addChild ("text", text = new RKComponentPropertyBase (this, false)); connect (text, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (textChanged (RKComponentPropertyBase *))); setRequired (xml->getBoolAttribute (element, "required", false, DL_INFO)); connect (requirednessProperty (), SIGNAL (valueChanged (RKComponentPropertyBase*)), this, SLOT (requirednessChanged (RKComponentPropertyBase*))); // do all the layouting QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (xml->getStringAttribute (element, "label", i18n ("Enter text"), DL_INFO), this); vbox->addWidget (label); int size = xml->getMultiChoiceAttribute (element, "size", "small;medium;large", 1, DL_INFO); if (size == 2) { textedit = new QTextEdit (this); QFontMetrics fm = QFontMetrics (textedit->currentFont ()); int lheight = fm.lineSpacing (); int margin = fm.descent () + 2; textedit->setMinimumSize (250, lheight * 4 + margin); vbox->addWidget (textedit); connect (textedit, SIGNAL (textChanged ()), SLOT (textChanged ())); } else { lineedit = new QLineEdit (this); vbox->addWidget (lineedit); connect (lineedit, SIGNAL (textChanged (const QString&)), SLOT (textChanged (const QString&))); } vbox->addStretch (1); // to keep the label attached // initialize updating = false; // DO NOT replace "" with QString::null, here! it is important, that this is actually an empty string, not a null string. text->setValue (xml->getStringAttribute (element, "initial", "", DL_INFO)); } RKInput::~RKInput () { RK_TRACE (PLUGIN); } void RKInput::enabledChange (bool old) { RK_TRACE (PLUGIN); updateColor (); RKComponent::enabledChange (old); } void RKInput::updateColor () { RK_TRACE (PLUGIN); QWidget *widget = lineedit; if (!widget) widget = textedit; RK_ASSERT (widget); QPalette palette = widget->palette (); if (isEnabled ()) { if (isSatisfied ()) { palette.setColor (widget->backgroundRole (), QColor (255, 255, 255)); } else { palette.setColor (widget->backgroundRole (), QColor (255, 0, 0)); } } else { palette.setColor (widget->backgroundRole (), QColor (200, 200, 200)); } widget->setPalette (palette); } void RKInput::requirednessChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); updateColor (); } void RKInput::textChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); if (updating) return; updating = true; RK_ASSERT (textedit || lineedit); if (textedit) textedit->setText (fetchStringValue (text)); else lineedit->setText (fetchStringValue (text)); updateColor (); updating = false; changed (); } void RKInput::textChanged (const QString &new_text) { RK_TRACE (PLUGIN); updating = true; text->setValue (new_text); updateColor (); updating = false; changed (); } void RKInput::textChanged () { RK_TRACE (PLUGIN); RK_ASSERT (textedit); textChanged (textedit->toPlainText ()); } bool RKInput::isValid () { RK_TRACE (PLUGIN); return (!(fetchStringValue (text).isEmpty ())); } #include "rkinput.moc" rkward-0.6.1/rkward/plugin/rkstandardcomponentgui.cpp0000644000175000017500000003764112124345411022451 0ustar thomasthomas/*************************************************************************** rkstandardcomponentgui - description ------------------- begin : Sun Mar 19 2006 copyright : (C) 2006, 2007, 2009, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkstandardcomponentgui.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "rkcomponentmap.h" #include "../misc/rkcommonfunctions.h" #include "../windows/rkworkplace.h" #include "../windows/rkcommandeditorwindow.h" #include "../rbackend/rinterface.h" #include "../rkward.h" #include "../settings/rksettingsmoduleplugins.h" #include "../rkglobals.h" #include "../debug.h" /////////////////////////////////////// RKStandardComponentGUI //////////////////////////////////////////////// RKStandardComponentGUI::RKStandardComponentGUI (RKStandardComponent *component, RKComponentPropertyCode *code_property, bool enslaved) { RK_TRACE (PLUGIN); toggle_code_button = 0; RKStandardComponentGUI::component = component; RKStandardComponentGUI::code_property = code_property; connect (code_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (codeChanged (RKComponentPropertyBase *))); connect (RKWardMainWindow::getMain(), SIGNAL (aboutToQuitRKWard()), this, SLOT (cancel())); RKStandardComponentGUI::enslaved = enslaved; // code update timer code_update_timer = new QTimer (this); code_update_timer->setSingleShot (true); connect (code_update_timer, SIGNAL (timeout ()), this, SLOT (updateCodeNow ())); if (!enslaved) { KActionCollection *action_collection = new KActionCollection (this); action_collection->addAction (KStandardAction::Copy, this, SLOT (copyCode())); } } RKStandardComponentGUI::~RKStandardComponentGUI () { RK_TRACE (PLUGIN); } void RKStandardComponentGUI::createDialog (bool switchable) { RK_TRACE (PLUGIN); QVBoxLayout *main_vbox = new QVBoxLayout (this); main_vbox->setContentsMargins (0, 0, 0, 0); QWidget *upper_widget = new QWidget (this); QHBoxLayout *hbox = new QHBoxLayout (upper_widget); // build standard elements main_widget = new KVBox (upper_widget); hbox->addWidget (main_widget); // lines QFrame *line = new QFrame (upper_widget); line->setFrameShape (QFrame::VLine); line->setFrameShadow (QFrame::Plain); hbox->addWidget (line); // buttons QVBoxLayout* vbox = new QVBoxLayout (); hbox->addLayout (vbox); vbox->setContentsMargins (0, 0, 0, 0); vbox->setSpacing (RKGlobals::spacingHint ()); ok_button = new QPushButton (i18n ("Submit"), upper_widget); connect (ok_button, SIGNAL (clicked ()), this, SLOT (ok ())); vbox->addWidget (ok_button); if (enslaved) ok_button->hide (); cancel_button = new QPushButton (i18n ("Close"), upper_widget); connect (cancel_button, SIGNAL (clicked ()), this, SLOT (cancel ())); vbox->addWidget (cancel_button); auto_close_box = new QCheckBox (i18n ("Auto close"), upper_widget); auto_close_box->setChecked (true); vbox->addWidget (auto_close_box); if (enslaved) auto_close_box->hide (); vbox->addStretch (1); help_button = new QPushButton (i18n ("Help"), upper_widget); help_button->setEnabled (component->haveHelp ()); connect (help_button, SIGNAL (clicked ()), this, SLOT (help ())); vbox->addWidget (help_button); if (switchable && (!enslaved)) { switch_button = new QPushButton (i18n ("Use Wizard"), upper_widget); connect (switch_button, SIGNAL (clicked ()), this, SLOT (switchInterface ())); vbox->addWidget (switch_button); } vbox->addStretch (2); toggle_code_button = new QPushButton (i18n ("Code"), upper_widget); toggle_code_button->setCheckable (true); connect (toggle_code_button, SIGNAL (clicked ()), this, SLOT (toggleCode ())); vbox->addWidget (toggle_code_button); if (enslaved) toggle_code_button->hide (); // code display code_display = new RKCommandEditorWindow (this, true, false); code_display->setReadOnly (true); code_display->setMinimumHeight (RKSettingsModulePlugins::defaultCodeHeight ()); code_display->hide (); main_vbox->addWidget (upper_widget); main_vbox->addWidget (code_display); if (!enslaved && RKSettingsModulePlugins::showCodeByDefault ()) { toggle_code_button->setChecked (true); // will trigger showing the code along with the dialog } } void RKStandardComponentGUI::showEvent (QShowEvent *e) { RK_TRACE (PLUGIN); QWidget::showEvent (e); // HACK: Workaround for this issue (caused by a mysterious Qt bug, apparently): http://www.mail-archive.com/rkward-devel@lists.sourceforge.net/msg01340.html QSize min = minimumSize (); if ((min.width () < 50) || (min.height () < 50)) min = sizeHint (); setMinimumSize (min.expandedTo (QSize (50, 50))); if (toggle_code_button) { // this is a dialog, not wizard QTimer::singleShot (0, this, SLOT (toggleCode ())); } } void RKStandardComponentGUI::ok () { RK_TRACE (PLUGIN); RK_ASSERT (code_property->isValid ()); QString command = "local({\n"; command.append (code_property->preprocess ()); command.append (code_property->calculate ()); command.append (code_property->printout ()); command.append ("})\n"); RKGlobals::rInterface ()->issueCommand (new RCommand (command, RCommand::Plugin | RCommand::CCOutput | RCommand::ObjectListUpdate), component->commandChain ()); // re-run link // This should be run in a separate command, in case the above command bails out with an error. Even in that case, the re-run link should be printed. command.clear (); RKComponentHandle *handle = component->getHandle (); if (handle->isAccessible ()) { RKComponent::PropertyValueMap map; component->serializeState (&map); command.append (".rk.rerun.plugin.link(plugin=\"" + RKComponentMap::getComponentId (handle) + "\", settings=\"" + RKCommonFunctions::escape (RKComponent::valueMapToString (map)) + "\", label=\"" + i18n ("Run again") + "\")\n"); // NOTE: the serialized state is quote-escape *again* for passing to R. } // separator line command.append (".rk.make.hr()\n"); RKGlobals::rInterface ()->issueCommand (new RCommand (command, RCommand::Plugin | RCommand::ObjectListUpdate | RCommand::Silent), component->commandChain ()); if (auto_close_box->isChecked ()) cancel (); } void RKStandardComponentGUI::cancel () { RK_TRACE (PLUGIN); hide (); if (!enslaved) { component->deleteLater (); } } void RKStandardComponentGUI::toggleCode () { RK_TRACE (PLUGIN); RK_ASSERT (toggle_code_button); int new_height = height (); if (toggle_code_button->isChecked ()) { new_height += RKSettingsModulePlugins::defaultCodeHeight (); code_display->show (); } else { new_height -= code_display->height (); code_display->hide (); } if (isVisible ()) { layout ()->activate (); resize (width (), new_height); } updateCode (); } void RKStandardComponentGUI::copyCode () { RK_TRACE (PLUGIN); code_display->copy (); } void RKStandardComponentGUI::help () { RK_TRACE (PLUGIN); QString id = RKComponentMap::getComponentId (component->getHandle ()); QString path = id.split ("::").join ("/"); RKWorkplace::mainWorkplace ()->openHelpWindow (KUrl ("rkward://component/" + path)); } void RKStandardComponentGUI::closeEvent (QCloseEvent *e) { RK_TRACE (PLUGIN); e->accept (); cancel (); } void RKStandardComponentGUI::enableSubmit (bool enable) { RK_TRACE (PLUGIN); ok_button->setEnabled (enable); } void RKStandardComponentGUI::codeChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); updateCode (); } void RKStandardComponentGUI::updateCode () { RK_TRACE (PLUGIN); if (code_display->isHidden ()) return; code_update_timer->start (0); } void RKStandardComponentGUI::updateCodeNow () { RK_TRACE (PLUGIN); static bool was_valid = false; if (was_valid) code_display->saveScrollPosition (); if (!code_property->isValid ()) { code_display->setText (i18n ("Processing. Please wait")); RK_DEBUG (PLUGIN, DL_DEBUG, "code not ready to be displayed: pre %d, cal %d, pri %d", !code_property->preprocess ().isNull (), !code_property->calculate ().isNull (), !code_property->printout ().isNull ()); was_valid = false; } else { code_display->setText ("local({\n" + code_property->preprocess () + code_property->calculate () + code_property->printout () + "})\n"); code_display->restoreScrollPosition (); was_valid = true; } } ///////////////////////////////// RKStandardComponentWizard ///////////////////////////////// RKStandardComponentWizard::RKStandardComponentWizard (RKStandardComponent *component, RKComponentPropertyCode *code_property, bool enslaved) : RKStandardComponentGUI (component, code_property, enslaved) { RK_TRACE (PLUGIN); submit_enabled = false; is_switchable = false; } RKStandardComponentWizard::~RKStandardComponentWizard () { RK_TRACE (PLUGIN); } void RKStandardComponentWizard::updateCode () { RK_TRACE (PLUGIN); updateState (); } void RKStandardComponentWizard::createWizard (bool switchable) { RK_TRACE (PLUGIN); is_switchable = switchable; // create main layout and stack QGridLayout *main_grid = new QGridLayout (this); main_widget = stack = new RKStandardComponentStack (this); main_grid->addWidget (stack, 0, 0, 1, 4); // build standard elements // lines QFrame *line = new QFrame (main_widget); line->setFrameShape (QFrame::HLine); line->setFrameShadow (QFrame::Plain); main_grid->addWidget (line, 1, 0, 1, 4); // buttons cancel_button = new QPushButton (i18n ("Cancel"), this); main_grid->addWidget (cancel_button, 2, 0, Qt::AlignLeft); if (enslaved) cancel_button->hide (); help_button = new QPushButton (i18n ("Help"), this); main_grid->addWidget (help_button, 2, 1, Qt::AlignLeft); prev_button = new QPushButton (QString::null, this); prev_button->setEnabled (false); main_grid->addWidget (prev_button, 2, 2, Qt::AlignRight); next_button = new QPushButton (QString::null, this); main_grid->addWidget (next_button, 2, 3, Qt::AlignRight); connect (next_button, SIGNAL (clicked ()), this, SLOT (next ())); connect (prev_button, SIGNAL (clicked ()), this, SLOT (prev ())); connect (cancel_button, SIGNAL (clicked ()), this, SLOT (cancel ())); connect (help_button, SIGNAL (clicked ()), this, SLOT (help ())); // dummy: auto_close_box = new QCheckBox(this); auto_close_box->setChecked (true); auto_close_box->hide (); } void RKStandardComponentWizard::addLastPage () { RK_TRACE (PLUGIN); if (!enslaved) { // build the last page RKComponent *last_page = stack->addPage (component); QVBoxLayout *vbox = new QVBoxLayout (last_page); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (i18n ("Below you can see the command(s) corresponding to the settings you made. Click 'Submit' to run the command(s)."), last_page); label->setWordWrap (true); code_display = new RKCommandEditorWindow (last_page, true, false); code_display->setReadOnly (true); vbox->addWidget (label); vbox->addWidget (code_display); } stack->goToFirstPage (); updateState (); } void RKStandardComponentWizard::next () { RK_TRACE (PLUGIN); RK_ASSERT (stack->currentPageSatisfied ()); if (stack->havePage (true)) { stack->movePage (true); updateState (); } else { if (enslaved) cancel (); else ok (); } } void RKStandardComponentWizard::prev () { RK_TRACE (PLUGIN); if (enslaved) { if (stack->havePage (false)) { stack->movePage (false); updateState (); } else { cancel (); } } else { if (stack->havePage (false)) { stack->movePage (false); updateState (); } else if (is_switchable) { switchInterface (); } else { RK_ASSERT (false); } } } void RKStandardComponentWizard::updateState () { RK_TRACE (PLUGIN); if (enslaved) { if (stack->havePage (true)) { // not on last page next_button->setText (i18n ("Next >")); next_button->setEnabled (stack->currentPageSatisfied ()); } else { // on last page // do code update when on last page next_button->setText (i18n ("Done")); next_button->setEnabled (stack->currentPageSatisfied ()); } prev_button->setEnabled (true); if (stack->havePage (false)) { // not on first page prev_button->setText (i18n ("< Back")); } else { prev_button->setText (i18n ("Close")); } return; } if (stack->havePage (true)) { // not on last page next_button->setText (i18n ("Next >")); next_button->setEnabled (stack->currentPageSatisfied ()); } else { // on last page // do code update when on last page if (!stack->havePage (true)) code_update_timer->start (0); next_button->setText (i18n ("Submit")); next_button->setEnabled (submit_enabled); } if (stack->havePage (false) || (!is_switchable)) { // not on first page prev_button->setText (i18n ("< Back")); prev_button->setEnabled (stack->havePage (false)); } else { prev_button->setText (i18n ("Use Dialog")); prev_button->setEnabled (true); } } void RKStandardComponentWizard::enableSubmit (bool enable) { RK_TRACE (PLUGIN); submit_enabled = enable; } //////////////////////////////// RKStandardComponentStack //////////////////////////////////// RKStandardComponentStack::RKStandardComponentStack (QWidget *parent) : QStackedWidget (parent) { RK_TRACE (PLUGIN); } RKStandardComponentStack::~RKStandardComponentStack () { RK_TRACE (PLUGIN); for (int i = 0; i < pages.count (); ++i) { delete (pages[i]); } } bool RKStandardComponentStack::havePage (bool next) { RK_TRACE (PLUGIN); if (next) { return (nextVisiblePage () <= (count () - 1)); } else { return (previousVisiblePage () >= 0); } } void RKStandardComponentStack::movePage (bool next) { RK_TRACE (PLUGIN); int id; if (next) { id = nextVisiblePage (); } else { id = previousVisiblePage (); } if (id < 0) { RK_ASSERT (false); return; } setCurrentIndex (id); } bool RKStandardComponentStack::currentPageSatisfied () { RK_TRACE (PLUGIN); PageDef* current_page = pages.value (currentIndex ()); if (!current_page) { RK_ASSERT (false); return false; } for (int i = 0; i < current_page->page_components.size (); ++i) { if (!((current_page->page_components[i])->isSatisfied ())) { return false; } } return true; } void RKStandardComponentStack::goToFirstPage () { RK_TRACE (PLUGIN); setCurrentIndex (0); } RKComponent *RKStandardComponentStack::addPage (RKComponent *parent) { RK_TRACE (PLUGIN); PageDef *def = new PageDef; KVBox *wrap = new KVBox (this); def->page = new RKComponent (parent, wrap); setCurrentIndex (addWidget (wrap)); pages.append (def); return def->page; } void RKStandardComponentStack::addComponentToCurrentPage (RKComponent *component) { RK_TRACE (PLUGIN); PageDef* current_page = pages.value (currentIndex ()); if (!current_page) { RK_ASSERT (false); return; } current_page->page_components.append (component); } int RKStandardComponentStack::previousVisiblePage () { RK_TRACE (PLUGIN); int prev_page = currentIndex () - 1; while (prev_page >= 0) { if (pages[prev_page]->page->visibilityProperty ()->boolValue ()) return prev_page; --prev_page; } return prev_page; } int RKStandardComponentStack::nextVisiblePage () { RK_TRACE (PLUGIN); int next_page = currentIndex () + 1; while (next_page <= (count ()-1)) { if (pages[next_page]->page->visibilityProperty ()->boolValue ()) return next_page; ++next_page; } return next_page; } #include "rkstandardcomponentgui.moc" rkward-0.6.1/rkward/plugin/rktabpage.cpp0000644000175000017500000000552612124345411017621 0ustar thomasthomas/*************************************************************************** rktabpage.cpp - description ------------------- begin : Wed Apr 5 2006 copyright : (C) 2006, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rktabpage.h" #include #include #include #include #include "../rkglobals.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKTabPage::RKTabPage (const QDomElement &element, RKComponent *parent_component, QTabWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); label = xml->getStringAttribute (element, "label", QString::null, DL_WARNING); QVBoxLayout *layout = new QVBoxLayout (this); page = new KVBox (this); layout->addWidget (page); tabbook = parent_widget; tabbook->addTab (this, label); index = tabbook->indexOf (this); // for whatever reason, this needs to be set *after* the page was added to the tabbook page->setSizePolicy (QSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding)); inserted = true; connect (visibility_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (visibleEnabledChanged (RKComponentPropertyBase *))); connect (enabledness_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (visibleEnabledChanged (RKComponentPropertyBase *))); } RKTabPage::~RKTabPage () { RK_TRACE (PLUGIN); } void RKTabPage::visibleEnabledChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); if (property == visibility_property) { if (visibility_property->boolValue ()) { if (!inserted) { #warning this may not be reliable, if an earlier page is invisible as well tabbook->insertTab (index, this, label); inserted = true; } } else { if (inserted) { tabbook->removeTab (tabbook->indexOf (this)); inserted = false; } } } else if (property == enabledness_property) { tabbook->setTabEnabled (tabbook->indexOf (this), enabledness_property->boolValue ()); } } #include "rktabpage.moc" rkward-0.6.1/rkward/plugin/rkabstractoptionselector.cpp0000644000175000017500000001454312124345411023012 0ustar thomasthomas/*************************************************************************** rkabstractoptionselector - description ------------------- begin : Tue Mar 20 2007 copyright : (C) 2007, 2009, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkabstractoptionselector.h" #include #include "../misc/xmlhelper.h" #include "../debug.h" RKAbstractOptionSelector::RKAbstractOptionSelector (RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // create and register properties addChild ("string", string = new RKComponentPropertyBase (this, false)); connect (string, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyChanged (RKComponentPropertyBase *))); addChild ("number", number = new RKComponentPropertyInt (this, true, -1)); connect (number, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyChanged (RKComponentPropertyBase *))); number->setInternal (true); } RKAbstractOptionSelector::~RKAbstractOptionSelector(){ RK_TRACE (PLUGIN); for (OptionsMap::const_iterator it = options.begin(); it != options.end(); ++it) { delete (it.value ()); } } void RKAbstractOptionSelector::addOptionsAndInit (const QDomElement &element) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create all the options XMLChildList option_elements = xml->getChildElements (element, "option", DL_ERROR); int selected = 0; int i = 0; for (XMLChildList::const_iterator it = option_elements.begin (); it != option_elements.end (); ++it) { QString label = xml->getStringAttribute (*it, "label", QString::null, DL_ERROR); QString value = xml->getStringAttribute (*it, "value", QString::null, DL_WARNING); QString name = xml->getStringAttribute (*it, "id", QString::null, DL_INFO); Option *opt = new Option; opt->value = value; opt->enabledness_prop = 0; options.insert (i, opt); if (!name.isNull ()) named_options.insert (name, opt); addOptionToGUI (label, i); if (xml->getBoolAttribute (*it, "checked", false, DL_INFO)) { selected = i; } ++i; } updating = false; number->setMin (0); number->setMax (i-1); number->setIntValue (selected); // will also take care of activating the correct item } RKComponentBase* RKAbstractOptionSelector::lookupComponent (const QString &identifier, QString *remainder) { RK_TRACE (PLUGIN); if (identifier.isEmpty ()) return this; QString name = identifier.section (".", 0, 0); if (named_options.contains (name)) { Option *opt = named_options[name]; QString mod = identifier.section (".", 1); if (mod != "enabled") { RK_DEBUG (PLUGIN, DL_DEBUG, "options do not have property '%s'", mod.toLatin1().data ()); return this; } if (!(opt->enabledness_prop)) { // requested for the first time opt->enabledness_prop = new RKComponentPropertyBool (this, false); connect (opt->enabledness_prop, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (ItemPropertyChanged(RKComponentPropertyBase*))); } return (opt->enabledness_prop); } return RKComponent::lookupComponent (identifier, remainder); } void RKAbstractOptionSelector::propertyChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); if (updating) return; int new_id = -1; if (property == string) { new_id = findOption (fetchStringValue (string)); } else if (property == number) { new_id = number->intValue (); } else { RK_ASSERT (false); } if (new_id < 0) { RK_DEBUG (PLUGIN, DL_ERROR, "option selector '%s' has no such option:", qPrintable (getIdInParent ())); if (property == string) { RK_DEBUG (PLUGIN, DL_ERROR, "'%s'", qPrintable (fetchStringValue (string))); } else { RK_DEBUG (PLUGIN, DL_ERROR, "index %d", number->intValue ()); } return; } updating = true; setItemInGUI (new_id); itemSelected (new_id); // slot not called automatically on programmed changes! updating = false; changed (); } void RKAbstractOptionSelector::ItemPropertyChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); Option *opt = 0; int id = -1; for (OptionsMap::const_iterator it = options.begin(); it != options.end(); ++it) { RK_ASSERT (it.value ()); if (it.value ()->enabledness_prop == property) { opt = it.value (); id = it.key (); break; } } if ((!opt) || (id < 0)) { RK_ASSERT (false); return; } RK_ASSERT (property->type () == RKComponent::PropertyBool); bool enabled = static_cast (property)->boolValue (); if (!enabled) { if (id == number->intValue ()) { // current item was disabled int settable_opt = -1; for (OptionsMap::const_iterator it = options.begin(); it != options.end(); ++it) { RK_ASSERT (it.value ()); if ((!(it.value ()->enabledness_prop)) || (it.value ()->enabledness_prop->boolValue ())) { settable_opt = it.key(); break; } } if (settable_opt >= 0) itemSelected (settable_opt); else RK_DEBUG (PLUGIN, DL_ERROR, "No option left enabled. Disable the entire component '%s', instead!", qPrintable (getIdInParent ())); } } setItemEnabledInGUI (id, enabled); } void RKAbstractOptionSelector::itemSelected (int id) { RK_TRACE (PLUGIN); Option *opt = options[id]; RK_ASSERT (opt); string->setValue (opt->value); number->setIntValue (id); } int RKAbstractOptionSelector::findOption (const QString &option_string) { RK_TRACE (PLUGIN); for (OptionsMap::const_iterator it = options.begin(); it != options.end(); ++it) { RK_ASSERT (it.value ()); if (it.value ()->value == option_string) return (it.key ()); } return -1; } #include "rkabstractoptionselector.moc" rkward-0.6.1/rkward/plugin/rkvarslot.h0000644000175000017500000000544212124345411017352 0ustar thomasthomas/*************************************************************************** rkvarslot.h - description ------------------- begin : Thu Nov 7 2002 copyright : (C) 2002, 2006, 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKVARSLOT_H #define RKVARSLOT_H #include #include class QLineEdit; class QPushButton; class QTreeWidget; class QTreeWidgetItem; class QDomElement; class RKVariable; class RContainerObject; /** An RKVarSlot typically takes one or more variable(s) from an RKVarSelector. *@author Thomas Friedrichsmeier */ class RKVarSlot : public RKComponent { Q_OBJECT public: RKVarSlot (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKVarSlot (); int type () {return ComponentVarSlot; }; QVariant value (const QString &modifier=QString ()) { return (available->value (modifier)); }; /** reimplemented to call updateLook (), in case enabledness changed */ void changed () { updateLook (); RKComponent::changed (); }; void updateLook (); public slots: /** Called when the select-button is pressed */ void selectPressed (); void listSelectionChanged (); void availablePropertyChanged (RKComponentPropertyBase *); protected: /** Calls updateLook (), when enabledness changes */ void enabledChange (bool old) { updateLook (); QWidget::enabledChange (old); }; private: /** change the select button to left/right / add/remove @param add if true, button shows arrow right, or signifies more values would be added. Else the other way around */ void setSelectButton (bool add); bool add_mode; bool multi; /** the available objects (typically a copy of the property of the varselector) */ RKComponentPropertyRObjects *source; /** the objects in the varslot */ RKComponentPropertyRObjects *available; /** of the objects in the varslot, those that are marked */ RKComponentPropertyRObjects *selected; QTreeWidget *list; QPushButton *select; typedef QMap ItemMap; ItemMap item_map; }; #endif rkward-0.6.1/rkward/plugin/rktext.cpp0000644000175000017500000000566312124345411017204 0ustar thomasthomas/*************************************************************************** rktext.cpp - description ------------------- begin : Sun Nov 10 2002 copyright : (C) 2002, 2006, 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rktext.h" #include #include #include #include #include #include "../rkglobals.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKText::RKText (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create layout and label QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); label = new QLabel (QString (), this); label->setWordWrap (true); vbox->addWidget (label); QString initial_text = xml->getRawContents (element, DL_ERROR); if (!initial_text.isEmpty ()) initial_text = "

    " + initial_text + "

    "; initial_text.replace ("\n\n", "

    \n

    "); int type = xml->getMultiChoiceAttribute (element, "type", "normal;warning;error", 0, DL_INFO); if (type != 0) { QFont font = label->font (); QPalette palette = label->palette (); if (type == 1) { // warning palette.setColor (label->foregroundRole (), QColor (255, 100, 0)); font.setWeight (QFont::DemiBold); } else if (type == 2) { // error palette.setColor (label->foregroundRole (), QColor (255, 0, 0)); font.setWeight (QFont::Bold); } label->setPalette (palette); label->setFont (font); } // strip final newline initial_text.truncate (initial_text.length () -1); // create and add property addChild ("text", text = new RKComponentPropertyBase (this, true)); text->setInternal (true); connect (text, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (textChanged (RKComponentPropertyBase *))); // initialize text->setValue (initial_text); } RKText::~RKText(){ RK_TRACE (PLUGIN); } void RKText::textChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); label->setText (fetchStringValue (text)); changed (); } #include "rktext.moc" rkward-0.6.1/rkward/plugin/rkcomponentproperties.h0000644000175000017500000006541512124345411022005 0ustar thomasthomas/*************************************************************************** rkcomponentproperties - description ------------------- begin : Fri Nov 25 2005 copyright : (C) 2005, 2006, 2007, 2009, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMPONETPROPERTIES_H #define RKCOMPONETPROPERTIES_H #include #include /* we need these forward declarations for now, due to cylcic includes. TODO: fix this */ class RKComponentPropertyBase; class RKComponentPropertyBool; #include "rkcomponent.h" /** Base class for all RKComponentProperties. The base class can handle only a string-property. See derived classes for special types of properties. * * TODO: Internal storage of value (_value) should be a QVariant see \ref RKComponentProperties */ class RKComponentPropertyBase : public QObject, public RKComponentBase { Q_OBJECT public: /** constructor. Pass a valid QObject as parent so the property will be auto-destructed when no longer needed */ RKComponentPropertyBase (QObject *parent, bool required); /** destructor */ virtual ~RKComponentPropertyBase (); /** supplies the current value. Since more than one value may be supplied, modifier can be used to select a value. Default implementation only has a single string, however. Reimplemented from RKComponentBase */ QVariant value (const QString &modifier=QString ()); /** set the value in string form. @returns false if the value is illegal (in the base class, all strings are legal) */ virtual bool setValue (const QString &string); /** do not set the value, only check, whether it is legal */ virtual bool isStringValid (const QString &) { return true; }; /** current setting valid? */ bool isValid () { return is_valid; }; /** for RTTI. see RKComponentBase::RKComponentTypes */ int type () { return PropertyBase; }; /** connect this property to a governor property (given as argument). If reconcile_requirements, the requirements of both properties are reconciled to the least common denominator. The dependent property will be notified on all changes made in the governing property, so it can update its value. Generally with few exceptions, you can only connect to properties that are either of the same class as this property, or of an extended class. Maybe in the future we will add some sophisticated converters allowing to connect vastly different types of properties in a meaningful way. If you specify a modifier, only the sub-value indicated by the modifier will be retrieved from the governing property on governorValueChanged. In this case reconcile_requirements is ignored. */ virtual void connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier=QString::null, bool reconcile_requirements=true); signals: /** property has changed its value. Any connected RKComponentPropertys/RKComponents should update their state @param property A pointer to the changed property for easy reference */ void valueChanged (RKComponentPropertyBase *property); public slots: /** the (Qt-)slot in which (by default) the (RKComponent-)property is notified, when a property it depends on has changed. Generally you should reimplement this function to add special handling for the properties you know about. */ virtual void governorValueChanged (RKComponentPropertyBase *property); protected: void warnModifierNotRecognized (const QString &modifier); bool is_valid; QString _value; /** if we're only interested in a specific sub-information of the governor-property, we need to remember the corresponding modifier */ QString governor_modifier; }; /////////////////////////////////////////////// StringList ///////////////////////////////////////////////////// /** RKComponentProperty, which can handle lists of strings, better */ class RKComponentPropertyStringList : public RKComponentPropertyBase { public: RKComponentPropertyStringList (QObject *parent, bool required); /** destructor */ ~RKComponentPropertyStringList (); /** for RTTI. see RKComponentBase::RKComponentTypes */ int type () { return PropertyStringList; }; /** reimplemented to return all current strings */ QVariant value (const QString &modifier=QString ()); /** return the string at the given index */ const QString valueAt (int index) const { return storage.value (index); }; /** set the values in string form (values will be split by the current separator) @returns false if the value is illegal (in this property, all strings are legal) */ bool setValue (const QString &string); /** change only the string at the given index. List will be expanded, as necessary. */ void setValueAt (int index, const QString &value); /** get all current strings as a QStringList */ const QStringList& values () const { return storage; }; /** set current strings as a QStringList */ void setValues (const QStringList &new_values) { storage = new_values; doChange (); }; /** reimplemented from RKComponentPropertyBase to use special handling for list properties */ void governorValueChanged (RKComponentPropertyBase *property); private: void doChange () { _value.clear (); emit (valueChanged (this)); }; QString sep; // always "\n". TODO: remove QStringList storage; }; ///////////////////////////////////////////////// Bool //////////////////////////////////////////////////////// /** special type of RKComponentProperty, that is based on a bool setting */ class RKComponentPropertyBool : public RKComponentPropertyBase { public: /** @param value_true string value if true/on @param value_false string value if false/off @param default_state value to use, if invalid string value was set */ RKComponentPropertyBool (QObject *parent, bool required, bool default_state=true, const QString &value_true="true", const QString &value_false="false"); /** destructor */ ~RKComponentPropertyBool (); /** Set this property to the inverted, i.e. true if set to false and vice-versa. Used for the "not" sub-property. */ void setInverted (bool invert) { inverted = invert; }; /** sets the bool value. Also takes care of notifying dependent components */ void setBoolValue (bool new_value); /** current value as bool */ bool boolValue (); /** reimplemented from RKComponentPropertyBase. Modifier "true" returns value if true. Modifier "false" returns value if false. Modifier QString () returns current value as bool, modifier "labelled" returns the labelled value. */ QVariant value (const QString &modifier=QString ()); /** reimplemented from RKComponentPropertyBase to convert to bool value according to current settings */ bool setValue (const QString &string); /** reimplemented from RKComponentPropertyBase to test whether conversion to bool value is possible according to current settings */ bool isStringValid (const QString &string); /** reimplemented from RKComponentPropertyBase to use special handling for bool and int properties (bools are copied directly, int handling: 0->false else true) */ void governorValueChanged (RKComponentPropertyBase *property); /** RTTI */ int type () { return PropertyBool; }; /** reimplemented to return a new negated boolean property if the identifier is "not" */ RKComponentBase* lookupComponent (const QString &identifier, QString *remainder); static bool stringToBool (const QString &value, bool *ok); static bool variantToBool (const QVariant &value, bool *ok); private: /** helper function. Sets the value without emitting change signal */ void internalSetValue (bool new_value); /** helper function. Sets the value without emitting change signal */ void internalSetValue (const QString &new_value); bool default_value; bool current_value; bool inverted; QString value_true; QString value_false; }; ///////////////////////////////////////////////// Int //////////////////////////////////////////////////////// #include class RKComponentPropertyInt : public RKComponentPropertyBase { public: /** constructor @param default_value value to use, if invalid string value was set */ RKComponentPropertyInt (QObject *parent, bool required, int default_value); /** destructor */ ~RKComponentPropertyInt (); /** sets the int value. Also takes care of notifying dependent components */ bool setIntValue (int new_value); /** set lower boundary. Default parameter will effectively remove the boundary. You should call this *before* connecting to any other properties, so limits can be reconciled */ void setMin (int lower=INT_MIN); /** set upper boundary. Default parameter will effectively remove the boundary. You should call this *before* connecting to any other properties, so limits can be reconciled */ void setMax (int upper=INT_MAX); /** return current min value */ int minValue (); /** return current max value */ int maxValue (); /** current value as int */ int intValue (); /** reimplemented from RKComponentPropertyBase. Return current value. */ QVariant value (const QString &modifier=QString ()); /** reimplemented from RKComponentPropertyBase to convert to int value according to current settings */ bool setValue (const QString &string); /** reimplemented from RKComponentPropertyBase to test whether conversion to int value is possible according to current settings (is a number, and within limits min and max) */ bool isStringValid (const QString &string); /** reimplemented from RKComponentPropertyBase to actually reconcile requirements with other numeric slots */ void connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier=QString::null, bool reconcile_requirements=true); /** reimplemented from RKComponentPropertyBase to use special handling for int and double properties (ints are copied directly, doubles are rounded) */ void governorValueChanged (RKComponentPropertyBase *property); /** RTTI */ int type () { return PropertyInt; }; /** returns a validator for use in lineedits or similar widgets. */ QIntValidator *getValidator (); private: /** helper function. Sets the value without emitting change signal */ void internalSetValue (int new_value); /** helper function. Sets the value without emitting change signal */ void internalSetValue (const QString &new_value); int default_value; int current_value; /** we could do without the validator, and create the logic on our own. Using Qt's validator, however, a) saves some typing b) allows to provide a validator object in use in lineedits, etc. (see getValidator ()) */ QIntValidator *validator; }; ///////////////////////////////////////////////// Double //////////////////////////////////////////////////////// #include class RKComponentPropertyDouble :public RKComponentPropertyBase { public: /** constructor @param default_value value to use, if invalid string value was set */ RKComponentPropertyDouble (QObject *parent, bool required, double default_value); /** destructor */ ~RKComponentPropertyDouble (); /** sets the int value. Also takes care of notifying dependent components */ bool setDoubleValue (double new_value); /** reimplemented from RKComponentPropertyBase to convert to int value according to current settings */ bool setValue (const QString &string); /** set lower boundary. Default parameter will effectively remove the boundary. You should call this *before* connecting to any other properties, so limits can be reconciled */ void setMin (double lower=FLT_MIN); /** set upper boundary. Default parameter will effectively remove the boundary. You should call this *before* connecting to any other properties, so limits can be reconciled */ void setMax (double upper=FLT_MAX); /** set text precision (default = 2) */ void setPrecision (int digits) { precision = digits; }; /** return current min value */ double minValue (); /** return current max value */ double maxValue (); /** current value as double */ double doubleValue (); /** reimplemented from RKComponentPropertyBase. Return current value as a string. */ QVariant value (const QString &modifier=QString ()); /** reimplemented from RKComponentPropertyBase to test whether conversion to int value is possible according to current settings (is a number, and within limits min and max) */ bool isStringValid (const QString &string); /** reimplemented from RKComponentPropertyBase to actually reconcile requirements with other numeric slots */ void connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier=QString::null, bool reconcile_requirements=true); /** reimplemented from RKComponentPropertyBase to use special handling for int and double properties (ints and doubles are copied directly) */ void governorValueChanged (RKComponentPropertyBase *property); /** RTTI */ int type () { return PropertyDouble; }; /** returns a validator for use in lineedits or similar widgets. */ QDoubleValidator *getValidator (); private: /** helper function. Sets the value without emitting change signal */ void internalSetValue (double new_value); /** helper function. Sets the value without emitting change signal */ void internalSetValue (const QString &new_value); double default_value; double current_value; /** we could do without the validator, and create the logic on our own. Using Qt's validator, however, a) saves some typing b) allows to provide a validator object in use in lineedits, etc. (see getValidator ()) */ QDoubleValidator *validator; int precision; }; ///////////////////////////////////////////////// RObjects //////////////////////////////////////////////////////// class RKObjectListView; #include #include #include "../core/robject.h" #include "../core/rkmodificationtracker.h" /** special type of RKComponentProperty, that prepresents one or more RObject (s) */ class RKComponentPropertyRObjects : public RKComponentPropertyBase, public RObjectListener { Q_OBJECT public: /** constructor */ RKComponentPropertyRObjects (QObject *parent, bool required); /** destructor */ ~RKComponentPropertyRObjects (); /** how many objects can this property hold? Use default values (0) to remove constraints @param min_num_objects Minimum number of objects for this property to be valid @param min_num_objects_if_any Some properties may be valid, if they hold either no objects at all, or at least a certain number of objects @param max_num_objects Maximum number of objects for this property to be valid */ void setListLength (int min_num_objects=0, int min_num_objects_if_any=0, int max_num_objects=0); /** add an object value */ bool addObjectValue (RObject *object); /** Set property to only accept certain classes. If you provide an empty list, all classes will be accepted*/ void setClassFilter (const QStringList &classes); /** Set property to only accept certain object types. If you provide an empty list, all types will be accepted */ void setTypeFilter (const QStringList &types); /** Set property to only accept objects of certain dimensions. If you provide default parameters (0), all objects will be accepted @param dimensionality Number of dimensions the object must have. 0 will accept objects of all dimensions @param min_length Minimum length of first dimension. 0 will accept objects of all lengths @param max_length Maximum length of first dimension. 0 (or INT_MAX) will accept objects of all lengths */ void setDimensionFilter (int dimensionality=0, int min_length=0, int max_length=0); /** Directly set an RObject. Warning: This sets the list to contain only exactly this one item. Generally you do not want to use this, unless your list is in single mode. Use addObjectValue () instead, if the property can hold more than one object @returns false if the object does not qualify as a valid selection according to current settings (class/type/dimensions), true otherwise */ bool setObjectValue (RObject *object); /** set all the objects in the given new list (if valid), and only those. Emit a signal if there was any change */ void setObjectList (const RObject::ObjectList &newlist); /** Return a string describing the problems with the item at position list_index in the objectList(). An empty string, if there is nothing wrong with the object. */ QString objectProblems (int list_index) const; /** Get current object. If the property can hold several objects, only the first is returned. See objectList (). @returns 0 if no valid object is selected */ RObject *objectValue (); /** Get current list of objects. Do not modify this list! It is the very same list, the property uses internally! @returns an empty list if no valid object is selected */ RObject::ObjectList objectList (); /** reimplemented from RKComponentPropertyBase. Modifier "label" returns label(s). Modifier "shortname" returns short name(s). Modifier QString::null returns full name. If no object is set, returns an empty string / variant */ QVariant value (const QString &modifier=QString ()); /** reimplemented from RKComponentPropertyBase to convert to RObject with current constraints @returns false if no such object(s) could be found or the object(s) are invalid */ bool setValue (const QString &value); /** overload of setValue() which accepts a list of names of RObjects @returns false if no such object(s) could be found or the object(s) are invalid */ bool setValue (const QStringList &values); /** reimplemented from RKComponentPropertyBase to test whether conversion to RObject is possible with current constraints */ bool isStringValid (const QString &value); /** RTTI */ int type () { return PropertyRObjects; }; /** reimplemented from RKComponentPropertyBase to actually reconcile requirements with other object properties */ void connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier=QString::null, bool reconcile_requirements=true); /** reimplemented from RKComponentPropertyBase to use special handling for object properties */ void governorValueChanged (RKComponentPropertyBase *property); /** @returns true, if the property holds the maximum number of items (or more) */ bool atMaxLength (); void removeObjectValue (RObject* object) { objectRemoved (object); }; protected: /** remove an object value. reimplemented from RObjectListener::objectRemoved (). This is so we get notified if the object currently selected is removed TODO: is this effectively a duplication of setFromList? */ void objectRemoved (RObject *removed); /** reimplemented from RObjectListener::objectMetaChanged (). This is so we get notified if the object currently selected is changed */ void objectMetaChanged (RObject *changed); private: /** check all objects currently in the list for validity. And set validity state accordingly. */ void validizeAll (bool silent=false); /** simple helper function: Check whether the the list is valid (*after* each object had been validized!), and set the valid state accordingly */ void updateValidity (); /** internal helper to add the object (and check it for problems). * @returns true, if the list was changed, false, if the object was already in the list or is 0. */ bool appendObject (RObject *object); /** Check any object for problems */ QString checkObjectProblems (RObject *object) const; RObject::ObjectList object_list; QMap problems; int dims; int min_length; int max_length; int min_num_objects; int min_num_objects_if_any; int max_num_objects; QStringList classes; /** TODO: use a list of enums instead for internal purposes! */ QStringList types; QString separator; // always "\n". TODO: remove }; ///////////////////////////////////////////////// Code //////////////////////////////////////////////////////// /** special type of RKComponentProperty used to contain R code. All stand-alone RKComponents have this. The great thing about this, is that code can be made available to embedding RKComponents by just fetching the component.code.preprocess (or .calculate, .printout) value */ class RKComponentPropertyCode : public RKComponentPropertyBase { Q_OBJECT public: /** constructor */ RKComponentPropertyCode (QObject *parent, bool required); /** destructor */ ~RKComponentPropertyCode (); /** the preprocess code */ QString preprocess () { return preprocess_code; }; /** the calculate code */ QString calculate () { return calculate_code; }; /** the printout code */ // TODO, maybe we can abstract this away. A component should _either_ do calculation _or_ printout, hence it could all be calculate () only, as well. QString printout () { return printout_code; }; /** the preview code */ QString preview () { return preview_code; }; QVariant value (const QString &modifier=QString ()); /** set the preprocess code. @param code The code to set. If this is QString::null, the property is seen to lack preprocess code and hence is not valid (see isValid ()). In contrast, empty strings are seen as valid */ void setPreprocess (const QString &code) { preprocess_code = code; emit (valueChanged (this)); }; /** see setPreprocess () */ void setCalculate (const QString &code) { calculate_code = code; emit (valueChanged (this)); }; /** see setPreprocess () */ void setPrintout (const QString &code) { printout_code = code; emit (valueChanged (this)); }; /** see setPreview () */ void setPreview (const QString &code) { preview_code = code; emit (valueChanged (this)); }; bool isValid () { return (!(preprocess_code.isNull () || calculate_code.isNull () || printout_code.isNull ())); }; /** RTTI */ int type () { return PropertyCode; }; private: QString preprocess_code; QString calculate_code; QString printout_code; QString preview_code; }; class RKComponent; // what the ... why do I need this? /** A bool component that can do some logical transformations. This property works slightly different than the others, and is not intended to be connected the usual way. Also by default it is not required, since it does not really hold a validity state (unless in require mode). @author Thomas Friedrichsmeier */ class RKComponentPropertyConvert : public RKComponentPropertyBool { Q_OBJECT public: /** constructor. Note that this property *requires* an RKComponent as parent (the one at the top of all the source properties) */ RKComponentPropertyConvert (RKComponent *parent); ~RKComponentPropertyConvert (); int type () { return PropertyConvert; }; /** Mode of operation. see setMode () */ enum ConvertMode { Equals = 0, /** < Check, whether some property has exactly the given string value (see setSources (), setStandard ()) */ NotEquals = 1, /** < Opposite of ConvertMode::Equals */ Range = 2, /** < Check, whether some *numeric* property is in the given range (see setSources (), setRange ()) */ And = 3, /** < Check, whether several *boolean* properties are all true at once (see setSources ()) */ Or = 4 /** < Check, whether one of several *boolean* properties is true (see setSources ()) */ }; /** set the mode. Usually you will only call this once, after construction, and usually followed by setSources () - if applicable - setStandard () or setRange (). */ void setMode (ConvertMode mode); /** set the sources, i.e. the properties to check against. To specify multiple sources, separate their IDs with ";" */ void setSources (const QStringList &sources); /** set the standard for comparison. Only meaningful in Equals mode */ void setStandard (const QString &standard); /** set the range for comparison. Only meaningful in Range mode */ void setRange (double min, double max); /** set this property to required. Also it will only be valid if it is currently true. So it will block it's parent component in false state. */ void setRequireTrue (bool require_true); /** reimplemented for setRequireTrue ()*/ bool isValid (); /** string represenation of the options in ConvertMode. For use in XMLHelper::getMultiChoiceAttribute */ static QString convertModeOptionString () { return ("equals;notequals;range;and;or"); }; /** reimplemented to do raise a warning, and do nothing else. */ void connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier=QString::null, bool reconcile_requirements=true); /** reimplemented to do raise a warning, and do nothing else. */ bool setValue (const QString &value); public slots: /** unfortuntely, as the parent component likely does not know about us, we have to notify it manually of any changes. That's done from this slot */ void selfChanged (RKComponentPropertyBase *); /** a source property changed. Check the state */ void sourcePropertyChanged (RKComponentPropertyBase *); private: ConvertMode _mode; double min, max; QString standard; bool require_true; RKComponent *c_parent; // actually the same as parent (), but without the hassle of conversion struct Source { RKComponentPropertyBase *property; QString modifier; }; QList sources; }; /** This special property corresponds to a switch-statement, switching between two or more separate governing props based on the value of a condition prop. */ class RKComponentPropertySwitch : public RKComponentPropertyBase { Q_OBJECT public: /** constructor. Note that this property *requires* an RKComponent as parent (the one at the top of all the source properties) @param standards the values to match against. Note: Providing an empty list make the switch operate in boolean mode, switching between the first two sources / values, based on the boolean value of the condition_prop. */ RKComponentPropertySwitch (RKComponent *parent, const QStringList& def_values, const QStringList& standards); ~RKComponentPropertySwitch (); /** set the sources, i.e. the properties to operate on */ void setSources (const QString &condition_prop, const QStringList &value_props); /** reimplemented to do raise a warning, and do nothing else. */ void connectToGovernor (RKComponentPropertyBase *governor, const QString &modifier=QString::null, bool reconcile_requirements=true); /** reimplemented to do raise a warning, and do nothing else. */ bool setValue (const QString &value); QVariant value (const QString &modifier=QString ()); int type () { return PropertySwitch; }; public slots: /** unfortuntely, as the parent component likely does not know about us, we have to notify it manually of any changes. That's done from this slot */ void selfChanged (RKComponentPropertyBase *); /** a source property changed. Check the state */ void sourcePropertyChanged (RKComponentPropertyBase *); private: RKComponent *c_parent; // actually the same as parent (), but without the hassle of conversion QStringList def_values; QStringList standards; RKComponentPropertyBase *condition_prop; QString condition_prop_modifier; QList value_props; QStringList value_prop_mods; }; #endif rkward-0.6.1/rkward/plugin/rkdropdown.h0000644000175000017500000000337712124345411017521 0ustar thomasthomas/*************************************************************************** rkdropdown.h - description ------------------- begin : Fri Jan 12 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKDROPDOWN_H #define RKDROPDOWN_H #include "rkabstractoptionselector.h" class QComboBox; class QListWidget; /** This RKPluginWidget provides a drop down list of options for use in plugins @author Thomas Friedrichsmeier */ class RKDropDown : public RKAbstractOptionSelector { Q_OBJECT public: RKDropDown (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKDropDown (); int type () { return ComponentDropDown; }; public slots: // workaround for a qt bug (3.3.7) void comboItemActivated (int id); protected: void setItemInGUI (int id); void addOptionToGUI (const QString &label, int id); void setItemEnabledInGUI (int id, bool enabled); private: QComboBox *box; QListWidget *listwidget; }; #endif rkward-0.6.1/rkward/plugin/rkpluginspinbox.h0000644000175000017500000000352212124345411020556 0ustar thomasthomas/*************************************************************************** rkpluginspinbox - description ------------------- begin : Wed Aug 11 2004 copyright : (C) 2004, 2006, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPLUGINSPINBOX_H #define RKPLUGINSPINBOX_H #include "rkcomponent.h" #include "rkcomponentproperties.h" class RKSpinBox; class QDomElement; /** RKComponent for numeric input represented as a spinbox TODO: rename file and class to RKComponentSpinBox @author Thomas Friedrichsmeier */ class RKPluginSpinBox : public RKComponent { Q_OBJECT public: RKPluginSpinBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKPluginSpinBox (); QVariant value (const QString &modifier=QString ()); int type () { return ComponentSpinBox; }; RKComponentPropertyInt *intvalue; RKComponentPropertyDouble *realvalue; public slots: void valueChanged (int); void valueChanged (RKComponentPropertyBase *property); private: RKSpinBox *spinbox; bool intmode; bool updating; }; #endif rkward-0.6.1/rkward/plugin/rkpluginframe.cpp0000644000175000017500000000675612124345411020535 0ustar thomasthomas/*************************************************************************** rkpluginframe.cpp - description ------------------- begin : Sat Jun 4 2011 copyright : (C) 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkpluginframe.h" #include #include #include #include "../rkglobals.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKPluginFrame::RKPluginFrame (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); frame = new QGroupBox (xml->getStringAttribute (element, "label", QString(), DL_INFO), this); layout->addWidget (frame); layout = new QVBoxLayout (frame); page = new KVBox (frame); page->setSpacing (RKGlobals::spacingHint ()); layout->addWidget (page); checked = 0; if (xml->getBoolAttribute (element, "checkable", false, DL_INFO)) { frame->setCheckable (true); frame->setChecked (xml->getBoolAttribute (element, "checked", true, DL_INFO)); initCheckedProperty (); connect (frame, SIGNAL (toggled(bool)), this, SLOT (checkedChanged(bool))); } } RKPluginFrame::~RKPluginFrame () { RK_TRACE (PLUGIN); } void RKPluginFrame::initCheckedProperty () { RK_TRACE (PLUGIN); RK_ASSERT (!checked); if (!frame->isCheckable ()) { RK_DEBUG (PLUGIN, DL_DEBUG, "This frame does not have a property 'checked', as it is not checkable"); return; } addChild ("checked", checked = new RKComponentPropertyBool (this, false, frame->isChecked (), "1", "0")); connect (checked, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyChanged (RKComponentPropertyBase *))); } RKComponentBase* RKPluginFrame::lookupComponent (const QString& identifier, QString* remainder) { if ((!checked) && (identifier == "checked")) initCheckedProperty (); return RKComponentBase::lookupComponent(identifier, remainder); } QVariant RKPluginFrame::value (const QString &modifier) { if (!frame->isCheckable ()) return RKComponent::value (modifier); if (!checked) initCheckedProperty(); return checked->value (modifier); } void RKPluginFrame::propertyChanged (RKComponentPropertyBase* property) { RK_TRACE (PLUGIN); RK_ASSERT (checked && (property == checked)); if (frame->isChecked () == checked->boolValue ()) return; frame->setChecked (checked->boolValue ()); changed (); } void RKPluginFrame::checkedChanged (bool new_state) { RK_TRACE (PLUGIN); RK_ASSERT (checked); if (new_state == checked->boolValue ()) return; checked->setBoolValue (new_state); changed (); } #include "rkpluginframe.moc" rkward-0.6.1/rkward/plugin/rkoptionset.cpp0000644000175000017500000007621112124345411020241 0ustar thomasthomas/*************************************************************************** rkoptionset - description ------------------- begin : Mon Oct 31 2011 copyright : (C) 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkoptionset.h" #include #include #include #include #include #include #include #include #include "rkstandardcomponent.h" #include "../misc/rkcommonfunctions.h" #include "../misc/rkstandardicons.h" #include "../misc/xmlhelper.h" #include "../debug.h" #define KEYCOLUMN_UNINITIALIZED_VALUE QString ("___#!RK!___Keycol_unintialized") RKOptionSet::RKOptionSet (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); XMLHelper *xml = XMLHelper::getStaticHelper (); updating = false; last_known_status = Processing; n_invalid_rows = n_unfinished_rows = 0; min_rows = xml->getIntAttribute (element, "min_rows", 0, DL_INFO); min_rows_if_any = xml->getIntAttribute (element, "min_rows_if_any", 1, DL_INFO); max_rows = xml->getIntAttribute (element, "max_rows", INT_MAX, DL_INFO); // build UI framework QVBoxLayout *layout = new QVBoxLayout (this); switcher = new QStackedWidget (this); layout->addWidget (switcher); user_area = new KVBox (this); switcher->addWidget (user_area); updating_notice = new QLabel (i18n ("Updating status, please wait"), this); switcher->addWidget (updating_notice); update_timer.setInterval (0); update_timer.setSingleShot (true); connect (&update_timer, SIGNAL (timeout()), this, SLOT (slotUpdateUnfinishedRows())); // create some meta properties serialization_of_set = new RKComponentPropertyBase (this, false); addChild ("serialized", serialization_of_set); connect (serialization_of_set, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (serializationPropertyChanged(RKComponentPropertyBase*))); row_count = new RKComponentPropertyInt (this, false, 0); row_count->setInternal (true); addChild ("row_count", row_count); // NOTE: read-only return_to_row = active_row = -1; current_row = new RKComponentPropertyInt (this, false, active_row); current_row->setInternal (true); addChild ("current_row", current_row); // NOTE: read-write connect (current_row, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (currentRowPropertyChanged(RKComponentPropertyBase*))); // first build the contents, as we will need to refer to the elements inside, later model = 0; display = 0; // will be created from the builder, on demand -> createDisplay () contents_container = new RKComponent (this, user_area); QDomElement content_element = xml->getChildElement (element, "content", DL_ERROR); RKComponentBuilder *builder = new RKComponentBuilder (contents_container, content_element); builder->buildElement (content_element, user_area, false); // NOTE that parent widget != parent component, here, by intention. The point is that the display should not be disabled along with the contents builder->parseLogic (xml->getChildElement (element, "logic", DL_INFO), false); builder->makeConnections (); addChild ("contents", contents_container); connect (standardComponent (), SIGNAL (standardInitializationComplete()), this, SLOT (fetchDefaults())); // create columns XMLChildList options = xml->getChildElements (element, "optioncolumn", DL_WARNING); QStringList visible_column_labels ("#"); // Optionally hidden first row for index for (int i = 0; i < options.size (); ++i) { const QDomElement &e = options.at (i); QString id = xml->getStringAttribute (e, "id", QString (), DL_ERROR); QString label = xml->getStringAttribute (e, "label", QString (), DL_DEBUG); QString governor = xml->getStringAttribute (e, "connect", QString (), DL_INFO); bool external = xml->getBoolAttribute (e, "external", false, DL_INFO); while (child_map.contains (id)) { RK_DEBUG (PLUGIN, DL_ERROR, "optionset already contains a property named %s. Renaming to _%s", qPrintable (id), qPrintable (id)); id = "_" + id; } ColumnInfo col_inf; col_inf.column_name = id; col_inf.external = external; col_inf.governor = governor; if (external && e.hasAttribute ("default")) col_inf.default_value = xml->getStringAttribute (e, "default", QString (), DL_ERROR); RKComponentPropertyStringList *column_property = new RKComponentPropertyStringList (this, false); column_property->setInternal (external); // Yes, looks strange, indeed. External properties should simply not be serialized / restored... addChild (id, column_property); connect (column_property, SIGNAL (valueChanged(RKComponentPropertyBase *)), this, SLOT (columnPropertyChanged(RKComponentPropertyBase *))); if (!label.isEmpty ()) { col_inf.display_index = visible_column_labels.size (); col_inf.column_label = label; visible_column_labels.append (label); visible_columns.append (column_property); } else { col_inf.display_index = -1; } column_map.insert (column_property, col_inf); } keycolumn = 0; QString keycol = xml->getStringAttribute (element, "keycolumn", QString (), DL_DEBUG); if (!keycol.isEmpty ()) { keycolumn = static_cast (child_map.value (keycol)); if (!column_map.contains (keycolumn)) { RK_DEBUG (PLUGIN, DL_ERROR, "optionset does not contain an optioncolumn named %s. Falling back to manual insertion mode", qPrintable (keycol)); keycolumn = 0; } else if (!column_map[keycolumn].external) { RK_DEBUG (PLUGIN, DL_ERROR, "keycolumn (%s) is not marked as external. Falling back to manual insertion mode", qPrintable (keycol)); keycolumn = 0; } else { updating = true; keycolumn->setValue (KEYCOLUMN_UNINITIALIZED_VALUE); updating = false; } } QMap::iterator it = column_map.begin (); for (; it != column_map.end (); ++it) { ColumnInfo &ci = it.value (); if (!ci.governor.isEmpty ()) { // there *can* be columns without governor for driven or connected option sets // Establish connections between columns and their respective governors. Since the format differs, the connection is done indirectly, through this component. // So, here, we set up a map of properties to columns, and connect to the change signals. RKComponentBase *governor = contents_container->lookupComponent (ci.governor, &ci.governor_modifier); if (governor && governor->isProperty ()) { RKComponentPropertyBase *gov_prop = static_cast (governor); if (ci.external) { if (!ci.governor_modifier.isEmpty ()) { RK_DEBUG (PLUGIN, DL_ERROR, "Cannot connect external column '%s' in optionset to property with modifier (%s).", qPrintable (ci.column_name), qPrintable (ci.governor)); continue; } } columns_to_update.insertMulti (gov_prop, it.key ()); connect (gov_prop, SIGNAL (valueChanged(RKComponentPropertyBase *)), this, SLOT (governingPropertyChanged(RKComponentPropertyBase *))); } else { RK_DEBUG (PLUGIN, DL_ERROR, "did not find governing property %s for column %s of optionset", qPrintable (ci.governor), qPrintable (ci.column_name)); } } } if (display) { // may or may not have been created model->column_labels = visible_column_labels; display->setItemsExpandable (false); display->setRootIsDecorated (false); if (display_show_index) display->resizeColumnToContents (0); else display->setColumnHidden (0, true); display->setModel (model); display->setSelectionBehavior (QAbstractItemView::SelectRows); display->setSelectionMode (QAbstractItemView::SingleSelection); connect (display->selectionModel (), SIGNAL (selectionChanged(QItemSelection,QItemSelection)), this, SLOT (currentRowChanged())); if (keycolumn) display_buttons->setVisible (false); else { connect (add_button, SIGNAL (clicked()), this, SLOT (addRow())); connect (remove_button, SIGNAL (clicked()), this, SLOT (removeRow())); } } } RKOptionSet::~RKOptionSet () { RK_TRACE (PLUGIN); } void RKOptionSet::fetchDefaults () { RK_TRACE (PLUGIN); RK_ASSERT (default_row_state.isEmpty ()); contents_container->fetchPropertyValuesRecursive (&default_row_state, false, QString (), true); contents_container->enablednessProperty ()->setBoolValue (rowCount () > 0); // no current row; Do this *after* fetching default values, however. Otherwise most values will *not* be read, as the element is disabled } RKComponent *RKOptionSet::createDisplay (bool show_index, QWidget *parent) { RK_TRACE (PLUGIN); RKComponent* dummy = new RKComponent (this, parent); QVBoxLayout *layout = new QVBoxLayout (dummy); layout->setContentsMargins (0, 0, 0, 0); KHBox *box = new KHBox (dummy); layout->addWidget (box); if (display) { RK_DEBUG (PLUGIN, DL_ERROR, "cannot create more than one optiondisplay per optionset"); } else { display = new QTreeView (box); display_show_index = show_index; model = new RKOptionSetDisplayModel (this); } display_buttons = new KHBox (dummy); layout->addWidget (display_buttons); add_button = new QPushButton (RKStandardIcons::getIcon (RKStandardIcons::ActionInsertRow), QString (), display_buttons); RKCommonFunctions::setTips (i18n ("Add a row / element"), add_button); remove_button = new QPushButton (RKStandardIcons::getIcon (RKStandardIcons::ActionDeleteRow), QString (), display_buttons); RKCommonFunctions::setTips (i18n ("Remove a row / element"), remove_button); return (dummy); } QString serializeList (const QStringList &list) { QString ret; for (int i = 0; i < list.size (); ++i) { if (i > 0) ret.append ('\t'); ret.append (RKCommonFunctions::escape (list[i])); } return ret; } QStringList unserializeList (const QString &serial) { QStringList ret = serial.split ('\t', QString::KeepEmptyParts); for (int i = 0; i < ret.size (); ++i) { ret[i] = RKCommonFunctions::unescape (ret[i]); } return ret; } QString serializeMap (const RKComponent::PropertyValueMap &map) { QString ret; RKComponent::PropertyValueMap::const_iterator it; for (it = map.constBegin (); it != map.constEnd (); ++it) { if (!ret.isEmpty ()) ret.append ('\t'); ret.append (RKCommonFunctions::escape (it.key () + '=' + it.value ())); } return ret; } RKComponent::PropertyValueMap unserializeMap (const QString &serial) { RKComponent::PropertyValueMap ret; QStringList l = serial.split ('\t', QString::KeepEmptyParts); for (int i = 0; i < l.size (); ++i) { QString &line = l[i]; int sep = line.indexOf ('='); ret.insert (RKCommonFunctions::unescape (line.left (sep)), RKCommonFunctions::unescape (line.mid (sep+1))); } return ret; } void RKOptionSet::fetchPropertyValuesRecursive (PropertyValueMap *list, bool include_top_level, const QString &prefix, bool include_inactive_elements) const { RK_TRACE (PLUGIN); RK_ASSERT (include_top_level); RK_ASSERT (!include_inactive_elements); QString serialization; if (keycolumn) { serialization.append ("keys=" + serializeList (old_keys)); } for (int r = 0; r < rows.size (); ++r) { if (!serialization.isEmpty ()) serialization.append ("\n"); if (r == active_row) { PropertyValueMap map; // current row may have changes which have not yet been stored to the state map contents_container->fetchPropertyValuesRecursive (&map); serialization.append ("_row=" + serializeMap (map)); } else { serialization.append ("_row=" + serializeMap (rows[r].full_row_map)); } } list->insert (prefix + "serialized", serialization); } void RKOptionSet::serializationPropertyChanged (RKComponentPropertyBase* property) { if (updating) return; updating = true; if (model) model->layoutAboutToBeChanged (); RK_TRACE (PLUGIN); RK_ASSERT (property == serialization_of_set); /* What happens when deserializing a plugin, with a driven optionset, and * the property connected to the keycolumn is restored *before* the optionset itself has been de-serialized? * * We have to special-case this: If we go into setPropertyValues, and * the key column has already been touched, we have to * - apply property values from the serialization * - trigger handleKeycolumnUpdate(), delayed * */ bool update_key_col = false; if (keycolumn && (keycolumn->value () != KEYCOLUMN_UNINITIALIZED_VALUE)) { update_key_col = true; } else { RK_ASSERT (rows.isEmpty ()); } QList new_rows; int row = 0; QStringList items = fetchStringValue (property).split ("\n"); bool keys_missing = (keycolumn != 0); for (int i = 0; i < items.size (); ++i) { const QString &item = items[i]; int sep = item.indexOf ('='); if (sep < 0) { RK_DEBUG (PLUGIN, DL_WARNING, "Bad format while trying to de-serialize optionset, line %d", i); continue; } QString tag = item.left (sep); QString value = item.mid (sep + 1); if (tag == QLatin1String ("keys")) { if (!keys_missing) { RK_DEBUG (PLUGIN, DL_WARNING, "Unexpected specification of keys while trying to de-serialize optionset, line %d", i); continue; } old_keys = unserializeList (value); keys_missing = false; } else if (tag == QLatin1String ("_row")) { new_rows.append (RowInfo (unserializeMap (value))); ++row; } else { RK_DEBUG (PLUGIN, DL_WARNING, "Unexpected tag %s while trying to de-serialize optionset, line %d", qPrintable (tag), i); continue; } } if (keycolumn) { RK_ASSERT (new_rows.size () == old_keys.size ()); RK_ASSERT (!keys_missing); } // reset all non-external columns to default values QMap::const_iterator it; for (it = column_map.constBegin (); it != column_map.constEnd (); ++it) { const ColumnInfo &col = it.value (); if (col.external) continue; QStringList def; for (int i = 0; i < row; ++i) { def.append (getDefaultValue (col, i)); } it.key ()->setValues (def); } rows = new_rows; n_unfinished_rows = n_invalid_rows = row; row_count->setIntValue (row); serialization_of_set->setValue (QString ()); // free some mem, and don't make users think, this can actually be queried in real-time updating = false; if (update_key_col) handleKeycolumnUpdate (); active_row = -1; current_row->setIntValue (qMin (0, row - 1)); if (model) model->layoutChanged (); changed (); } void RKOptionSet::slotUpdateUnfinishedRows () { updateUnfinishedRows (); } void RKOptionSet::updateUnfinishedRows () { if (updating) return; if ((active_row >= 0) && (active_row < rows.size ())) { if (!rows[active_row].finished) { return; // if the current row is unfinished: let's wait for this one, first. } } RK_TRACE (PLUGIN); if (!n_unfinished_rows) { // done if (switcher->currentWidget () != updating_notice) return; current_row->setIntValue (return_to_row); switcher->setCurrentWidget (user_area); return; } if (switcher->currentWidget () != updating_notice) { switcher->setCurrentWidget (updating_notice); return_to_row = active_row; } for (int i = 0; i < rows.size (); ++i) { if (!rows[i].finished) { current_row->setIntValue (i); return; } } RK_ASSERT (false); // This would mean, we did not find any unfinished row, even though we tested for n_unfinished_rows, above. } void RKOptionSet::addRow () { RK_TRACE (PLUGIN); storeRowSerialization (active_row); int row = active_row + 1; // append feels more natural than insert, here int nrows = rowCount (); if (row <= 0) row = nrows; RK_ASSERT (!keycolumn); if (display) model->beginInsertRows (QModelIndex (), row, row); // adjust values updating = true; QMap::iterator it = column_map.begin (); for (; it != column_map.end (); ++it) { RKComponentPropertyStringList* col = it.key (); ColumnInfo &column = it.value (); QStringList values = col->values (); values.insert (row, getDefaultValue (column, row)); col->setValues (values); } updating = false; // adjust status info RowInfo ri (default_row_state); ri.valid = false; ri.finished = false; rows.insert (row, ri); ++n_unfinished_rows; ++n_invalid_rows; row_count->setIntValue (nrows + 1); current_row->setIntValue (active_row = row); setContentsForRow (active_row); if (display) model->endInsertRows (); changed (); } void RKOptionSet::removeRow () { RK_TRACE (PLUGIN); int row = active_row; int nrows = rowCount (); if (row < 0) { RK_ASSERT (false); return; } RK_ASSERT (!keycolumn); if (display) model->beginRemoveRows (QModelIndex (), row, row); updating = true; // adjust values QMap::iterator it = column_map.begin (); for (; it != column_map.end (); ++it) { RKComponentPropertyStringList* col = it.key (); QStringList values = col->values (); values.removeAt (row); col->setValues (values); } updating = false; // adjust status info if (!rows[row].valid) --n_invalid_rows; if (!rows[row].finished) --n_unfinished_rows; rows.removeAt (row); --row; if ((row < 0) && (nrows > 1)) row = 0; row_count->setIntValue (nrows - 1); current_row->setIntValue (active_row = row); setContentsForRow (row); if (display) model->endRemoveRows (); changed (); } QString getDefaultValue (const RKOptionSet::ColumnInfo& ci, int row) { // let's not trace this simple helper fun Q_UNUSED (row); // TODO: should also allow scripted defaults? return ci.default_value; } void RKOptionSet::setRowState (int row, bool finished, bool valid) { bool changed = false; RK_ASSERT (row < rows.size ()); if (rows[row].finished != finished) { rows[row].finished = finished; finished ? --n_unfinished_rows : ++n_unfinished_rows; changed = true; } if (rows[row].valid != valid) { rows[row].valid = valid; valid ? --n_invalid_rows : ++n_invalid_rows; changed = true; } if (changed && model) model->dataChanged (model->index (row, 0), model->index (row, model->columnCount () - 1)); } void RKOptionSet::changed () { int row = active_row; if (row >= 0) { ComponentStatus cs = contents_container->recursiveStatus (); setRowState (row, cs != Processing, cs == Satisfied); } update_timer.start (); ComponentStatus s = recursiveStatus (); if (s != last_known_status) { last_known_status = s; if (model) model->headerDataChanged (Qt::Horizontal, 0, model->columnCount () - 1); } RKComponent::changed (); } // This function is called when a property of the current row of the optionset changes void RKOptionSet::governingPropertyChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); int row = active_row; if (row < 0) return; if (updating) return; updating = true; QList cols = columns_to_update.values (property); for (int i = 0; i < cols.size (); ++i) { RKComponentPropertyStringList *target = cols.at (i); ColumnInfo &inf = column_map[target]; QString value = fetchStringValue (property, inf.governor_modifier); target->setValueAt (row, value); if (model && (inf.display_index >= 0)) { model->dataChanged (model->index (inf.display_index, row), model->index (inf.display_index, row)); } } updating = false; } // This function is called, when a column of the set is changed, typically from external logic void RKOptionSet::columnPropertyChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); if (updating) return; RKComponentPropertyStringList *target = static_cast (property); RK_ASSERT (column_map.contains (target)); ColumnInfo& ci = column_map[target]; if (!ci.external) { RK_DEBUG (PLUGIN, DL_ERROR, "Column %s was touched externally, although it is not marked as external", qPrintable (ci.column_name)); return; } if (target == keycolumn) handleKeycolumnUpdate (); else { if (model) model->dataChanged (model->index (ci.display_index, 0), model->index (ci.display_index, model->rowCount ())); applyContentsFromExternalColumn (target, active_row); } } void RKOptionSet::handleKeycolumnUpdate () { RK_TRACE (PLUGIN); int activate_row = active_row; QStringList new_keys = keycolumn->values (); QMap position_changes; QSet found_rows; for (int pos = 0; pos < new_keys.size (); ++pos) { QString key = new_keys[pos]; if (old_keys.value (pos) != key) { // NOTE: old_keys could be shorter than new_keys! int old_pos = old_keys.indexOf (key); // NOTE: -1 for new keys if (old_pos == active_row) activate_row = pos; position_changes.insert (pos, old_pos); if (old_pos >= 0) found_rows.insert (old_pos); } else found_rows.insert (pos); } if (position_changes.isEmpty () && (old_keys.size () == new_keys.size ())) { return; // no change } // get state of current row (which may subsequently be moved or even deleted storeRowSerialization (active_row); updating = true; // as a first step, take a backup of any rows that have been removed. for (int i = old_keys.size () - 1; i >= 0; --i) { if (!found_rows.contains (i)) { former_row_states.insert (old_keys[i], rows[i].full_row_map); } } // update all columns QMap::iterator it = column_map.begin (); for (; it != column_map.end (); ++it) { RKComponentPropertyStringList* col = it.key (); ColumnInfo &column = it.value (); if (column.external) continue; // Ok, we'll have to adjust this column. We start by copying the old values, and padding to the // new length (if that is greater than the old). QStringList old_values = col->values (); QStringList new_values = old_values; for (int i = (new_keys.size () - new_values.size ()); i > 0; --i) new_values.append (QString ()); // adjust all positions that have changed for (int pos = 0; pos < new_keys.size (); ++pos) { QMap::const_iterator pit = position_changes.find (pos); if (pit != position_changes.constEnd ()) { // some change int old_pos = pit.value (); if (old_pos < 0) { // a new key new_values[pos] = getDefaultValue (column, pos); activate_row = pos; } else { // old key changed position new_values[pos] = old_values[old_pos]; } // NOTE: not visible: old key is gone without replacement } } // strip excess length (if any), and apply new_values = new_values.mid (0, new_keys.size ()); col->setValues (new_values); } // update status info QList new_row_info = rows; for (int i = (new_keys.size () - new_row_info.size ()); i > 0; --i) new_row_info.append (RowInfo (default_row_state)); for (int pos = 0; pos < new_keys.size (); ++pos) { QMap::const_iterator pit = position_changes.find (pos); if (pit != position_changes.constEnd ()) { // some change int old_pos = pit.value (); if (old_pos < 0) { // a new key (but it might have been known, formerly) new_row_info[pos] = RowInfo (former_row_states.value (new_keys[pos], default_row_state)); } else { // old key changed position new_row_info[pos] = rows[old_pos]; } // NOTE: not visible: old key is gone without replacement } } rows = new_row_info.mid (0, new_keys.size ()); n_invalid_rows = n_unfinished_rows = 0; for (int i = 0; i < rows.size (); ++i) { if (!rows[i].finished) ++n_unfinished_rows; if (!rows[i].valid) ++n_invalid_rows; } old_keys = new_keys; int nrows = new_keys.size (); row_count->setIntValue (nrows); if (model) model->triggerReset (); updating = false; activate_row = qMin (nrows - 1, activate_row); setContentsForRow (active_row = activate_row); current_row->setIntValue (active_row); changed (); } void RKOptionSet::applyContentsFromExternalColumn (RKComponentPropertyStringList* column, int row) { RK_TRACE (PLUGIN); const ColumnInfo &ci = column_map[column]; if (!ci.external) return; if (ci.governor.isEmpty ()) return; updating = true; QString dummy; RKComponentBase *governor = contents_container->lookupComponent (ci.governor, &dummy); if (governor && governor->isProperty ()) { RK_ASSERT (dummy.isEmpty ()); QString value; if (row >= 0) value = column->valueAt (row); else value = getDefaultValue (ci, row); static_cast (governor)->setValue (value); } else { RK_DEBUG (PLUGIN, DL_WARNING, "Lookup error while trying to restore row %d of optionset: %s. Remainder: %s", row, qPrintable (ci.governor), qPrintable (dummy)); RK_ASSERT (false); } updating = false; } void RKOptionSet::setContentsForRow (int row) { RK_TRACE (PLUGIN); RK_ASSERT (rows.size () > row); if (row >= 0) { const PropertyValueMap *map = &(rows[row].full_row_map); // If some elements are disabled, these will *not* be contained in the serialization of a row (unless that is still at the default). // They *are* contained in the default_row_state, however, and thus we will apply any properties for which we do not have a value // from the default_row_state, instead. for (PropertyValueMap::const_iterator it = default_row_state.constBegin (); it != default_row_state.constEnd (); ++it) { if (!map->contains (it.key ())) { RKComponentPropertyBase *prop = contents_container->lookupProperty (it.key (), 0, true); if (prop) { // found a property RK_ASSERT (!prop->isInternal ()); prop->setValue (it.value ()); } } } contents_container->setPropertyValues (map, false); } else { contents_container->setPropertyValues (&default_row_state, false); } QMap::const_iterator it = column_map.constBegin (); for (; it != column_map.constEnd (); ++it) { RKComponentPropertyStringList* col = it.key (); applyContentsFromExternalColumn (col, row); } contents_container->enablednessProperty ()->setBoolValue (row >= 0); } void RKOptionSet::storeRowSerialization (int row) { RK_TRACE (PLUGIN); if (row < 0) return; // No row was active RK_ASSERT (rows.size () > row); rows[row].full_row_map.clear (); contents_container->fetchPropertyValuesRecursive (&(rows[row].full_row_map)); } int getCurrentRowFromDisplay (QTreeView* display) { if (!(display && display->selectionModel () && display->model ())) return - 1; // can happen during initialization QModelIndexList l = display->selectionModel ()->selectedRows (); if (l.isEmpty ()) return -1; return (l[0].row ()); } void RKOptionSet::updateCurrentRowInDisplay () { if (!(display && display->selectionModel () && display->model ())) return; // can happen during initialization if (active_row < 0) display->selectionModel ()->clearSelection (); else { display->selectionModel ()->select (display->model ()->index (active_row, 0), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } } void RKOptionSet::currentRowChanged () { RK_TRACE (PLUGIN); RK_ASSERT (display); int r = getCurrentRowFromDisplay (display); if (active_row != r) current_row->setIntValue (r); // --> currentRowPropertyChanged () } void RKOptionSet::currentRowPropertyChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); RK_ASSERT (property == current_row); int row = qMin (row_count->intValue () - 1, current_row->intValue ()); if (row != active_row) { // May or may not be the case. True, e.g. if a row was removed storeRowSerialization (active_row); active_row = row; setContentsForRow (active_row); } updateCurrentRowInDisplay (); // Doing this, even if the current row _seeems_ unchanged, helps fixing up selection problems } /** reimplemented from RKComponent */ RKComponent::ComponentStatus RKOptionSet::recursiveStatus () { RK_TRACE (PLUGIN); ComponentStatus s = RKComponent::recursiveStatus (); if (s == Dead) return s; if (n_unfinished_rows > 0) return Processing; return s; } bool RKOptionSet::isValid () { if (n_invalid_rows > n_unfinished_rows) return false; int count = row_count->intValue (); if (count < min_rows) return false; if ((count > 0) && (count < min_rows_if_any)) return false; if (count > max_rows) return false; return true; } RKOptionSetDisplayModel::RKOptionSetDisplayModel (RKOptionSet* parent) : QAbstractTableModel (parent) { RK_TRACE (PLUGIN); set = parent; connect (&reset_timer, SIGNAL (timeout()), this, SLOT (doResetNow())); reset_timer.setInterval (0); reset_timer.setSingleShot (true); } RKOptionSetDisplayModel::~RKOptionSetDisplayModel () { RK_TRACE (PLUGIN); } int RKOptionSetDisplayModel::columnCount (const QModelIndex& parent) const { if (parent.isValid ()) return 0; return column_labels.size (); } int RKOptionSetDisplayModel::rowCount (const QModelIndex& parent) const { if (parent.isValid ()) return 0; return set->rowCount (); } QVariant RKOptionSetDisplayModel::data (const QModelIndex& index, int role) const { if (!index.isValid ()) return QVariant (); int row = index.row (); int column = index.column (); if (role == Qt::DisplayRole) { if (column == 0) return QVariant (QString::number (row + 1)); RKComponentPropertyStringList *p = set->visible_columns.value (column - 1); if (p) { return QVariant (p->valueAt (row)); } else { RK_ASSERT (false); } } else if (role == Qt::BackgroundRole) { const RKOptionSet::RowInfo &ri = set->rows[row]; if (!ri.finished) return Qt::yellow; if (!ri.valid) return Qt::red; } else if ((role == Qt::ToolTipRole) || role == (Qt::StatusTipRole)) { const RKOptionSet::RowInfo &ri = set->rows[row]; if (!ri.finished) return i18n ("This row has not yet been processed."); if (!ri.valid) return i18n ("This row contains invalid settings."); } return QVariant (); } void RKOptionSetDisplayModel::doResetNow () { RK_TRACE (PLUGIN); emit (layoutChanged ()); set->updateCurrentRowInDisplay (); } QVariant RKOptionSetDisplayModel::headerData (int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal) { if (role == Qt::DisplayRole) return (column_labels.value (section)); if (role == Qt::BackgroundRole) { if (set->n_unfinished_rows > 0) return Qt::yellow; if (!set->isValid ()) return Qt::red; } if ((role == Qt::ToolTipRole) || role == (Qt::StatusTipRole)) { if (set->n_unfinished_rows > 0) return i18n ("Please wait while settings are being processed"); if (!set->isValid ()) { QStringList probs; if (set->n_invalid_rows > set->n_unfinished_rows) probs.append (i18n ("One or more rows contain invalid settings.")); if ((set->rowCount () > 0) && (set->rowCount () < set->min_rows_if_any)) probs.append (i18n ("At least %1 rows have to be defined (if any)").arg (set->min_rows_if_any)); if (set->rowCount () < set->min_rows) probs.append (i18n ("At least %1 rows have to be defined").arg (set->min_rows)); if (set->rowCount () > set->max_rows) probs.append (i18n ("At most %1 rows may be defined").arg (set->max_rows)); return (QString ("

    %1

    • %2
    ").arg (i18n ("This element is not valid for the following reason(s):")).arg (probs.join ("
  • \n
  • "))); } } } return QVariant (); } void RKOptionSetDisplayModel::triggerReset() { RK_TRACE (PLUGIN); if (!reset_timer.isActive ()) { emit (layoutAboutToBeChanged ()); reset_timer.start (); } } #include "rkoptionset.moc" rkward-0.6.1/rkward/plugin/rktext.h0000644000175000017500000000315112124345411016637 0ustar thomasthomas/*************************************************************************** rktext.h - description ------------------- begin : Sun Nov 10 2002 copyright : (C) 2002, 2006, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKTEXT_H #define RKTEXT_H #include "rkcomponent.h" #include "rkcomponentproperties.h" class QLabel; class QDomElement; /** *@author Thomas Friedrichsmeier */ class RKText : public RKComponent { Q_OBJECT public: RKText (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKText (); RKComponentPropertyBase *text; QVariant value (const QString &modifier=QString ()) { return (text->value (modifier)); }; int type () { return ComponentText; }; public slots: void textChanged (RKComponentPropertyBase *); private: QLabel *label; }; #endif rkward-0.6.1/rkward/plugin/rkabstractoptionselector.h0000644000175000017500000000552312124345411022455 0ustar thomasthomas/*************************************************************************** rkabstractoptionselector - description ------------------- begin : Tue Mar 20 2007 copyright : (C) 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKABSTRACTOPTIONSELECTOR #define RKABSTRACTOPTIONSELECTOR #include "rkcomponent.h" #include "rkcomponentproperties.h" #include class QComboBox; class QDomElement; /** Base class for option selection plugin widgets, like RKRadio and RKDropDown. This can not be used directly, due to pure virtual functions. @author Thomas Friedrichsmeier */ class RKAbstractOptionSelector : public RKComponent { Q_OBJECT public: RKAbstractOptionSelector (RKComponent *parent_component, QWidget *parent_widget); ~RKAbstractOptionSelector (); /** Find the option number with the corresponding string. If not found, returns -1 @param option_string the option string to search for @returns the id (0, 1, 2...) of the corresponding option, or -1 if not found */ int findOption (const QString &option_string); QVariant value (const QString &modifier=QString ()) { return (string->value (modifier)); }; /** reimplemented from RKComponent to add enabledness properties for the options, dynamically, if requested */ RKComponentBase* lookupComponent (const QString &identifier, QString *remainder); public slots: void itemSelected (int id); void propertyChanged (RKComponentPropertyBase *property); void ItemPropertyChanged (RKComponentPropertyBase *property); protected: virtual void setItemInGUI (int id) = 0; virtual void addOptionToGUI (const QString &label, int id) = 0; virtual void setItemEnabledInGUI (int id, bool enabled)= 0; void addOptionsAndInit (const QDomElement &element); private: RKComponentPropertyBase *string; RKComponentPropertyInt *number; struct Option { QString value; RKComponentPropertyBool *enabledness_prop; }; bool updating; // prevent recursion typedef QMap OptionsMap; typedef QMap OptionsLookup; OptionsMap options; OptionsLookup named_options; }; #endif rkward-0.6.1/rkward/plugin/rkoptionset.h0000644000175000017500000001431412124345411017702 0ustar thomasthomas/*************************************************************************** rkoptionset - description ------------------- begin : Mon Oct 31 2011 copyright : (C) 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKOPTIONSET_H #define RKOPTIONSET_H #include #include #include #include #include class QTreeView; class QPushButton; class RKOptionSetDisplayModel; class QStackedWidget; /** An RKOptionSet provides a group of options for an arbitrary number of "rows". E.g. different line colors for each of a group of variables. * * @author Thomas Friedrichsmeier */ class RKOptionSet : public RKComponent { Q_OBJECT public: RKOptionSet (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKOptionSet (); int type () { return ComponentOptionSet; }; RKComponent *createDisplay (bool show_index, QWidget *parent); bool isValid (); /** reimplemented from RKComponent */ ComponentStatus recursiveStatus (); /** reimplemented from RKComponent */ void changed (); private slots: void governingPropertyChanged (RKComponentPropertyBase *property); void columnPropertyChanged (RKComponentPropertyBase *property); void currentRowPropertyChanged (RKComponentPropertyBase *property); void serializationPropertyChanged (RKComponentPropertyBase *property); void addRow (); void removeRow (); void currentRowChanged (); void fetchDefaults (); void slotUpdateUnfinishedRows (); /** When keys in the key column change, all other columns have to be updated, accordingly. */ void handleKeycolumnUpdate (); protected: void fetchPropertyValuesRecursive (PropertyValueMap *list, bool include_top_level=false, const QString &prefix=QString (), bool include_inactive_elements=false) const; friend class RKOptionSetDisplayModel; int rowCount () const { return row_count->intValue (); }; void setRowState (int row, bool finished, bool valid); void storeRowSerialization (int row); void applyContentsFromExternalColumn (RKComponentPropertyStringList* column, int row); RKComponentPropertyInt *current_row; RKComponentPropertyInt *row_count; /** Un-serializing an optionset's state is terribly complicated, if it isn't guaranteed to happen in a single batch. Therefore, we * keep a dedicated property (serialization_of_set), which holds a _full_ serialization of the set's state. * However, this representation is not kept up to date, for performance reasons. Rather it is generated only in fetchPropertyValuesRecursive(). */ RKComponentPropertyBase *serialization_of_set; /** for option sets which are "driven" (i.e. the user cannot simply add / remove rows, directly), this holds the key column, controlling addition / removal of rows in the set. * if this length (or order) is changed in this row, it will also be changed in the other rows. */ RKComponentPropertyStringList *keycolumn; QStringList old_keys; /** Map of properties (in the contents region) to columns which need to be updated, when the property changes. */ QMultiMap columns_to_update; struct ColumnInfo { QString column_name; QString column_label; QString governor; QString governor_modifier; QString default_value; int display_index; bool external; }; /** Map of all columns to their meta info */ QMap column_map; QList visible_columns; struct RowInfo { RowInfo (PropertyValueMap initial_values) : valid (false), finished (false), full_row_map (initial_values) {}; bool valid; /**< has finished processing and is known to be valid */ bool finished; /**< has finished processing */ PropertyValueMap full_row_map; /**< complete status representation of this row, (see RKComponent::fetchPropertyValuesRecursive()) */ }; QList rows; PropertyValueMap default_row_state; int n_unfinished_rows, n_invalid_rows; int active_row; /** backup of row state info for rows corresponding to keys which have been removed (in a driven set). These might get re-inserted, later. */ QHash former_row_states; RKComponent *contents_container; QWidget *display_buttons; QPushButton *remove_button; QPushButton *add_button; bool display_show_index; ComponentStatus last_known_status; RKOptionSetDisplayModel* model; QTreeView *display; QStackedWidget *switcher; QWidget *updating_notice; QWidget *user_area; void updateUnfinishedRows (); int return_to_row; QTimer update_timer; int min_rows; int min_rows_if_any; int max_rows; bool updating; /** Sets the contents from the values in given row */ void setContentsForRow (int row); void updateCurrentRowInDisplay (); /** get the default value for the given column, row. */ friend QString getDefaultValue (const ColumnInfo& ci, int row); }; class RKOptionSetDisplayModel : QAbstractTableModel { Q_OBJECT private: friend class RKOptionSet; RKOptionSetDisplayModel (RKOptionSet* parent); virtual ~RKOptionSetDisplayModel (); int rowCount (const QModelIndex & parent = QModelIndex()) const; int columnCount (const QModelIndex & parent = QModelIndex()) const; QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; void triggerReset (); QTimer reset_timer; QStringList column_labels; RKOptionSet *set; private slots: void doResetNow (); }; #endif rkward-0.6.1/rkward/plugin/rkformula.h0000644000175000017500000000561112124345411017323 0ustar thomasthomas/*************************************************************************** rkformula - description ------------------- begin : Thu Aug 12 2004 copyright : (C) 2004, 2006, 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKFORMULA_H #define RKFORMULA_H #include "rkcomponent.h" #include #include #include "../core/robject.h" class QPushButton; class QButtonGroup; class QWidget; class QSpinBox; class QDomElement; class QTreeWidget; class QTreeWidgetItem; /** @author Thomas Friedrichsmeier */ class RKFormula : public RKComponent { Q_OBJECT public: RKFormula (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKFormula (); QVariant value (const QString &modifier=QString ()) { return model->value (modifier); }; bool isValid (); /** RTTI */ int type () { return ComponentFormula; }; public slots: void typeChange (int id); void addButtonClicked (); void removeButtonClicked (); void factorsChanged (RKComponentPropertyBase *); private: RKComponentPropertyRObjects *fixed_factors; RKComponentPropertyRObjects *dependent; RKComponentPropertyBase *model; RKComponentPropertyBase *table; RKComponentPropertyBase *labels; bool multitable; bool model_ok; typedef QMap MangledNames; MangledNames mangled_names; enum ModelType { FullModel=0, MainEffects=1, Custom=2 }; ModelType model_type; QButtonGroup *type_selector; QWidget *custom_model_widget; QTreeWidget *model_view; QTreeWidget *predictors_view; QPushButton *add_button; QPushButton *remove_button; QSpinBox *level_box; void checkCustomModel (); void makeModelString (); QString mangleName (RObject *var); typedef QMap ItemMap; ItemMap predictors_map; struct Interaction { int level; RObject::ObjectList vars; }; typedef QMap InteractionMap; InteractionMap interaction_map; /** recursively cross the given source variables on level level. Returns the resulting terms in an QList */ QList makeInteractions (int level, RObject::ObjectList); }; #endif rkward-0.6.1/rkward/plugin/rkcheckbox.cpp0000644000175000017500000000523012124345411017774 0ustar thomasthomas/*************************************************************************** rkcheckbox - description ------------------- begin : Fri Jul 30 2004 copyright : (C) 2004, 2006 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcheckbox.h" #include #include #include "../rkglobals.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKCheckBox::RKCheckBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create and add property addChild ("state", state = new RKComponentPropertyBool (this, true, xml->getBoolAttribute (element, "checked", false, DL_INFO), xml->getStringAttribute (element, "value", "1", DL_INFO), xml->getStringAttribute (element, "value_unchecked", QString::null, DL_INFO))); connect (state, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (changedState (RKComponentPropertyBase *))); // create checkbox QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); checkbox = new QCheckBox (xml->getStringAttribute (element, "label", QString::null, DL_WARNING), this); vbox->addWidget (checkbox); checkbox->setChecked (xml->getBoolAttribute (element, "checked", false, DL_INFO)); connect (checkbox, SIGNAL (stateChanged (int)), this, SLOT (changedState (int))); // initialize updating = false; changedState (0); } RKCheckBox::~RKCheckBox () { RK_TRACE (PLUGIN); } void RKCheckBox::changedState (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); if (updating) return; updating = true; checkbox->setChecked (state->boolValue ()); updating = false; changed (); } void RKCheckBox::changedState (int) { RK_TRACE (PLUGIN); state->setBoolValue (checkbox->isChecked ()); } #include "rkcheckbox.moc" rkward-0.6.1/rkward/plugin/rkradio.cpp0000644000175000017500000000510112124345411017301 0ustar thomasthomas/*************************************************************************** rkradio.cpp - description ------------------- begin : Thu Nov 7 2002 copyright : (C) 2002, 2006, 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkradio.h" #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKRadio::RKRadio (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKAbstractOptionSelector (parent_component, parent_widget) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create layout QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); // create ButtonGroup group = new QButtonGroup (this); group_box = new QGroupBox (xml->getStringAttribute (element, "label", i18n ("Select one:"), DL_INFO), this); new QVBoxLayout (group_box); addOptionsAndInit (element); vbox->addWidget (group_box); connect (group, SIGNAL (buttonClicked (int)), this, SLOT (itemSelected (int))); } RKRadio::~RKRadio(){ RK_TRACE (PLUGIN); } void RKRadio::setItemInGUI (int id) { RK_TRACE (PLUGIN); QAbstractButton *button = group->button (id); if (button) button->setChecked (true); } void RKRadio::addOptionToGUI (const QString &label, int id) { RK_TRACE (PLUGIN); QRadioButton *button = new QRadioButton (label, group_box); group->addButton (button, id); group_box->layout ()->addWidget (button); } void RKRadio::setItemEnabledInGUI (int id, bool enabled) { RK_TRACE (PLUGIN); QAbstractButton *button = group->button (id); RK_ASSERT (button); button->setEnabled (enabled); } #include "rkradio.moc" rkward-0.6.1/rkward/plugin/rkvarselector.cpp0000644000175000017500000000553412124345411020546 0ustar thomasthomas/*************************************************************************** rkvarselector.cpp - description ------------------- begin : Thu Nov 7 2002 copyright : (C) 2002, 2006, 2009, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkvarselector.h" #include #include #include "../misc/xmlhelper.h" #include "../rkglobals.h" #include "../misc/rkobjectlistview.h" #include "../core/robjectlist.h" #include "../debug.h" RKVarSelector::RKVarSelector (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); // TODO: read filter settings addChild ("selected", selected = new RKComponentPropertyRObjects (this, false)); selected->setInternal (true); addChild ("root", root = new RKComponentPropertyRObjects (this, false)); connect (root, SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (rootChanged())); root->setInternal (true); QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (element.attribute ("label", "Select Variable(s)"), this); vbox->addWidget (label); list_view = new RKObjectListView (this); list_view->setSelectionMode (QAbstractItemView::ExtendedSelection); connect (list_view, SIGNAL (selectionChanged ()), this, SLOT (objectSelectionChanged ())); vbox->addWidget (list_view); list_view->getSettings ()->setSetting (RKObjectListViewSettings::ShowObjectsAllEnvironments, false); list_view->initialize (); rootChanged (); } RKVarSelector::~RKVarSelector () { RK_TRACE (PLUGIN); } void RKVarSelector::rootChanged () { RK_TRACE (PLUGIN); RObject* object = root->objectValue (); if (!object) object = RObjectList::getObjectList (); list_view->setRootObject (object); } void RKVarSelector::objectSelectionChanged () { RK_TRACE (PLUGIN); selected->setObjectList (list_view->selectedObjects ()); RK_DEBUG (PLUGIN, DL_DEBUG, "selected in varselector: %s", qPrintable (fetchStringValue (selected))); } #include "rkvarselector.moc" rkward-0.6.1/rkward/plugin/rkstandardcomponentgui.h0000644000175000017500000001215312124345411022105 0ustar thomasthomas/*************************************************************************** rkstandardcomponentgui - description ------------------- begin : Sun Mar 19 2006 copyright : (C) 2006, 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSTANDARDCOMPONENTGUI_H #define RKSTANDARDCOMPONENTGUI_H #include #include #include "rkstandardcomponent.h" /** For use in RKStandardComponents that are in wizard mode. Keeps a list of all pages, which page we're currently on, which children need to be satisfied in order to be able to move to the next page, etc. @author Thomas Friedrichsmeier */ class RKStandardComponentStack: public QStackedWidget { public: /** constructor. */ explicit RKStandardComponentStack (QWidget *parent); ~RKStandardComponentStack (); /** see RKStandardComponent::havePage () */ bool havePage (bool next); /** see RKStandardComponent::movePage () */ void movePage (bool next); /** see RKStandardComponent::currentPageSatisfied () */ bool currentPageSatisfied (); /** go to the first page (call after creation) */ void goToFirstPage (); /** for use during construction. Adds a new page. Subsequent calls to addComponentToCurrentPage work on the new page. Even the first page has to be added explicitly! @param parent The RKComponent acting as parent for the newly created page */ RKComponent *addPage (RKComponent *parent); void addComponentToCurrentPage (RKComponent *component); private: /** pages are NOT the parent of their components (that would be theoretically possible, but a terrible mess, requiring a fully transparent type of RKComponent), hence we keep a manual list for each page */ typedef QList PageComponents; struct PageDef { PageComponents page_components; RKComponent *page; }; QList pages; int previousVisiblePage (); int nextVisiblePage (); }; #include class RKCommandEditorWindow; class QPushButton; class QTimer; class QSplitter; class QCloseEvent; class QCheckBox; /** contains the standard GUI elements for a top-level RKStandardComponent. The base class creates a dialog interface. For a wizard interface use RKStandardComponentWizard. You *must* call createDialog () after construction, since I can't virualize this for reasons I don't understand! @author Thomas Friedrichsmeier */ class RKStandardComponentGUI : public QWidget { Q_OBJECT public: RKStandardComponentGUI (RKStandardComponent *component, RKComponentPropertyCode *code_property, bool enslaved); ~RKStandardComponentGUI (); QWidget *mainWidget () { return main_widget; }; void createDialog (bool switchable); virtual void enableSubmit (bool enable); virtual void updateCode (); /** reimplemented from QWidget to take care of showing the code display if needed */ void showEvent (QShowEvent *e); public slots: void ok (); void cancel (); void toggleCode (); void help (); void codeChanged (RKComponentPropertyBase *); void updateCodeNow (); void switchInterface () { component->switchInterface (); }; void copyCode (); private: RKComponentPropertyCode *code_property; // widgets for dialog only QPushButton *toggle_code_button; QPushButton *ok_button; protected: void closeEvent (QCloseEvent *e); RKStandardComponent *component; QTimer *code_update_timer; // common widgets QWidget *main_widget; QPushButton *cancel_button; QPushButton *help_button; QPushButton *switch_button; QCheckBox *auto_close_box; RKCommandEditorWindow *code_display; bool enslaved; }; /** A wizardish RKStandardComponentGUI. You *must* call createDialog () after construction, and addLastPage () filling the wizard! @author Thomas Friedrichsmeier */ class RKStandardComponentWizard : public RKStandardComponentGUI { Q_OBJECT public: RKStandardComponentWizard (RKStandardComponent *component, RKComponentPropertyCode *code_property, bool enslaved); ~RKStandardComponentWizard (); void enableSubmit (bool enable); void updateCode (); void createWizard (bool switchable); /** Add a standard last page in the wizard. To confuse everybody, this also initializes the view to the first page */ void addLastPage (); void updateState (); RKStandardComponentStack *getStack () { return stack; }; public slots: void next (); void prev (); private: QPushButton *next_button; QPushButton *prev_button; bool submit_enabled; bool is_switchable; RKStandardComponentStack *stack; }; #endif rkward-0.6.1/rkward/plugin/rkcomponentmap.cpp0000644000175000017500000005416612124345411020722 0ustar thomasthomas/*************************************************************************** rkcomponentmap.cpp - description ------------------- begin : Thu May 12 2005 copyright : (C) 2005-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcomponentmap.h" #include #include #include #include #include #include #include #include #include "rkcomponentcontext.h" #include "rkstandardcomponent.h" #include "../misc/xmlhelper.h" #include "../misc/rkcommonfunctions.h" #include "../debug.h" #include "../rkglobals.h" #include "../rkward.h" #include "../settings/rksettingsmoduleplugins.h" QString RKPluginMapFile::makeFileName (const QString &filename) { return QDir::cleanPath (QDir (basedir).filePath (filename)); } QString RKPluginMapFile::parseId (const QDomElement& e) { RK_TRACE (PLUGIN); XMLHelper *xml = XMLHelper::getStaticHelper (); return (xml->getStringAttribute (e, "namespace", "rkward", DL_WARNING) + "::" + xml->getStringAttribute (e, "id", QString (), DL_INFO)); } RKComponentGUIXML::RKComponentGUIXML () { RK_TRACE (PLUGIN); clearGUIDescription (); } RKComponentGUIXML::~RKComponentGUIXML () { RK_TRACE (PLUGIN); } void RKComponentGUIXML::clearGUIDescription () { RK_TRACE (PLUGIN); gui_xml.setContent (QString ("\n\n\n\n\n")); } int RKComponentGUIXML::createMenus (QDomElement& parent, const QDomElement& hierarchy_description, const QString& cnamespace) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); XMLChildList list = xml->getChildElements (hierarchy_description, "menu", DL_INFO); int counter = 0; for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { counter += addSubMenu (parent, (*it), cnamespace); } return counter; } QDomElement RKComponentGUIXML::findOrCreateElement (QDomElement& parent, const QString& tagname, const QString& name, const QString& label, int index) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); XMLChildList list = xml->getChildElements (parent, QString::null, DL_INFO); // we need to look at all children, so we get the order right QDomElement insert_after_element; for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { if ((tagname == (*it).tagName ()) && (name == xml->getStringAttribute ((*it), "name", "", DL_ERROR))) { return (*it); } else { if (index >= 0) { if (index > xml->getIntAttribute ((*it), "index", -1, DL_INFO)) { insert_after_element = *it; } } } } // element not found. Create a new one instead QDomElement ret = gui_xml.createElement (tagname); ret.setAttribute ("name", name); ret.setAttribute ("index", index); if (!label.isEmpty ()) { QDomElement text = gui_xml.createElement ("text"); text.appendChild (gui_xml.createTextNode (label)); ret.appendChild (text); } parent.insertAfter (ret, insert_after_element); // if index_after_element.isNull, this add the new element as the last child of parent! return ret; } int RKComponentGUIXML::addSubMenu (QDomElement& parent, const QDomElement& description, const QString& cnamespace) { RK_TRACE (PLUGIN); int counter = 0; XMLHelper* xml = XMLHelper::getStaticHelper (); // 1: check whether menu already exists, and create new menu otherwise QDomElement menu_element = findOrCreateElement (parent, "Menu", xml->getStringAttribute (description, "id", "none", DL_ERROR), xml->getStringAttribute (description, "label", i18n ("(no label)"), DL_WARNING), xml->getIntAttribute (description, "index", -1, DL_INFO)); // 2: recurse into submenus (of element to add!) XMLChildList list = xml->getChildElements (description, "menu", DL_INFO); for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { counter += addSubMenu (menu_element, (*it), cnamespace); } // 3: add entries list = xml->getChildElements (description, "entry", DL_INFO); for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { QString id = cnamespace + xml->getStringAttribute ((*it), "component", "#invalid#", DL_ERROR); RKComponentHandle* handle = RKComponentMap::getComponentHandle (id); if ((!handle) || (!handle->isPlugin ())) { RK_DEBUG (PLUGIN, DL_ERROR, "No such component found while creating menu-entries or component is not a standalone plugin: \"%s\". No entry created.", id.toLatin1 ().data ()); } else { findOrCreateElement (menu_element, "Action", id, QString::null, xml->getIntAttribute ((*it), "index", -1, DL_INFO)); addedEntry (id, handle); counter++; } } return counter; } /////////////////////////// END RKComponentXMLGUIClient ///////////////////////////////// ////////////////////////////// Bhttp://apps.sourceforge.net/mediawiki/rkward/nfs/project/r/rk/rkward/6/6d/RKWardApplicationDetached.pngEGIN RKComponentMap ///////////////////////////////////// // static members RKComponentMap *RKComponentMap::component_map = 0; void RKComponentMap::initialize () { RK_TRACE (PLUGIN); RK_ASSERT (component_map == 0); component_map = new RKComponentMap (); } RKComponentMap::RKComponentMap () : RKComponentGUIXML (), KXMLGUIClient () { RK_TRACE (PLUGIN); setComponentData (KGlobal::mainComponent ()); actionCollection ()->setConfigGroup ("Plugin Shortcuts"); } RKComponentMap::~RKComponentMap () { RK_TRACE (PLUGIN); clearLocal (); } void RKComponentMap::clearLocal () { RK_TRACE (PLUGIN); actionCollection ()->clear (); for (ComponentMap::iterator it = components.begin (); it != components.end (); ++it) { delete (it.value ()); /* TODO: this is not technically correct, as there may be several actions for this id, and we're only deleting one. But practically this should not really be relevant. */ delete (actionCollection ()->action (it.key ())); } components.clear (); for (PluginMapFileMap::const_iterator it = pluginmapfiles.constBegin (); it != pluginmapfiles.constEnd (); ++it) { delete (it.value ()); } pluginmapfiles.clear (); component_attributes.clear (); component_dependencies.clear (); clearGUIDescription (); setXMLGUIBuildDocument (gui_xml); } void RKComponentMap::clearAll () { RK_TRACE (PLUGIN); getMap ()->clearLocal (); } RKContextMap *RKComponentMap::getContext (const QString &id) { RK_TRACE (PLUGIN); RKContextMap *context = getMap ()->getContextLocal (id); if (context) return context; RK_DEBUG (PLUGIN, DL_WARNING, "no such context %s", id.toLatin1 ().data ()); return (0); } RKContextMap *RKComponentMap::getContextLocal (const QString &id) { RK_TRACE (PLUGIN); if (contexts.contains (id)) return (contexts[id]); return 0; } RKComponentHandle* RKComponentMap::getComponentHandle (const QString &id) { RK_TRACE (PLUGIN); RKComponentHandle *handle = getMap ()->getComponentHandleLocal (id); if (handle) return handle; RK_DEBUG (PLUGIN, DL_WARNING, "no such component %s", id.toLatin1 ().data ()); return (0); } RKComponentHandle* RKComponentMap::getComponentHandleLocal (const QString &id) { RK_TRACE (PLUGIN); if (components.contains (id)) return (components[id]); return 0; } //static QString RKComponentMap::getComponentId (RKComponentHandle* by_component) { RK_TRACE (PLUGIN); return (getMap ()->getComponentIdLocal (by_component)); } QString RKComponentMap::getComponentIdLocal (RKComponentHandle* component) { RK_TRACE (PLUGIN); for (ComponentMap::iterator it = components.begin (); it != components.end (); ++it) { if (it.value () == component) { return it.key (); } } RK_ASSERT (false); return (QString ()); } //static bool RKComponentMap::invokeComponent (const QString &component_id, const QStringList &serialized_settings, ComponentInvocationMode submit_mode, QString *message, RCommandChain *in_chain) { RK_TRACE (PLUGIN); QString _message; RKComponentHandle *handle = getComponentHandle (component_id); if (!handle) { _message = i18n ("You tried to invoke a plugin called '%1', but that plugin is currently unknown. Probably you need to load the corresponding PluginMap (Settings->Configure RKWard->Plugins), or perhaps the plugin was renamed.").arg (component_id); if (message) *message = _message; else KMessageBox::sorry (RKWardMainWindow::getMain (), _message, i18n ("No such plugin")); return false; } RKStandardComponent *component = handle->invoke (0, 0); RK_ASSERT (component); RKComponent::PropertyValueMap state; bool format_ok = RKComponent::stringListToValueMap (serialized_settings, &state); if (!format_ok) { _message = i18n ("Bad serialization format while trying to invoke plugin '%1'. Please contact the RKWard team (Help->About RKWard->Authors).").arg (component_id); if (message) *message = _message; else KMessageBox::error (component, _message, i18n ("Bad serialization format")); return false; } component->applyState (state); // now wait for the component to settle // the call to processEvents(), below, is quite dangerous, as the component self-destructs on errors. This helps us prevent crashes. QObjectCleanupHandler chandler; chandler.add (component); // if the plugin takes longer than 5 seconds to settle, than that really is sort of buggy... const int max_wait = 5000; QTime t; t.start (); RKComponentBase::ComponentStatus status; while ((!chandler.isEmpty ()) && ((status = component->recursiveStatus ()) == RKComponentBase::Processing) && (t.elapsed () < max_wait)) { QCoreApplication::processEvents (QEventLoop::ExcludeUserInputEvents, (max_wait / 2)); } if (chandler.isEmpty ()) status = RKComponentBase::Dead; chandler.remove (component); // otherwise it would auto-delete the component, later! if (status == RKComponentBase::Dead) { if (message) { _message.append (i18n ("\nThe plugin has crashed.")); *message = _message; } return false; } QStringList problems = component->matchAgainstState (state); if (!problems.isEmpty ()) { _message = i18n ("Not all specified settings could be applied. Most likely this is because some R objects are no longer present in your current workspace."); RK_DEBUG (PLUGIN, DL_WARNING, "%s", qPrintable (problems.join ("\n"))); // TODO: make failures available to backend if (message) *message = _message; else KMessageBox::informationList (component, _message, problems, i18n ("Not all settings applied")); // TODO: Don't show again-box? // not considered an error } if (submit_mode == ManualSubmit) return true; if (status == RKComponentBase::Satisfied) { bool ok = component->submit (in_chain); RK_ASSERT (ok); } else { if (submit_mode == AutoSubmitOrFail) component->kill (); _message.append (i18n ("\nThe plugin could not be auto-submitted with these settings.")); if (message) *message = _message; else KMessageBox::sorry (RKWardMainWindow::getMain (), _message, i18n ("Could not submit")); return (submit_mode != AutoSubmitOrFail); } return true; } void RKPluginMapParseResult::addAndPrintError (int level, const QString message) { detailed_problems.append (message); RK_DEBUG (PLUGIN, level, qPrintable (message)); } RKPluginMapParseResult RKComponentMap::addPluginMap (const QString& plugin_map_file) { RK_TRACE (PLUGIN); return getMap()->addPluginMapLocal (plugin_map_file); } RKPluginMapParseResult RKComponentMap::addPluginMapLocal (const QString& plugin_map_file) { RK_TRACE (PLUGIN); RKPluginMapParseResult ret; QString plugin_map_file_abs = QFileInfo (plugin_map_file).absoluteFilePath (); if (pluginmapfiles.contains (plugin_map_file_abs)) { RK_DEBUG (PLUGIN, DL_INFO, "Plugin map file '%s' already loaded", plugin_map_file.toLatin1().data ()); return ret; } XMLHelper* xml = XMLHelper::getStaticHelper (); QDomElement element; XMLChildList list; QDomElement document_element = xml->openXMLFile (plugin_map_file_abs, DL_ERROR); if (xml->highestError () >= DL_ERROR) { ret.addAndPrintError (DL_ERROR, i18n ("Could not open plugin map file %1. (Is not readble, or failed to parse)", plugin_map_file_abs)); return ret; } QString prefix = QFileInfo (plugin_map_file_abs).absolutePath() + '/' + xml->getStringAttribute (document_element, "base_prefix", QString::null, DL_INFO); QString cnamespace = xml->getStringAttribute (document_element, "namespace", "rkward", DL_INFO) + "::"; RKPluginMapFile *pluginmap_file_desc = new RKPluginMapFile (prefix); pluginmap_file_desc->id = RKPluginMapFile::parseId (document_element); pluginmapfiles.insert (QFileInfo (plugin_map_file).absoluteFilePath (), pluginmap_file_desc); // step 0: check dependencies, parse about, and initialize QDomElement dependencies = xml->getChildElement (document_element, "dependencies", DL_INFO); if (!dependencies.isNull ()) { if (!RKComponentDependency::isRKWardVersionCompatible (dependencies)) { ret.addAndPrintError (DL_WARNING, i18n ("Skipping plugin map file '%1': Not compatible with this version of RKWard", plugin_map_file_abs)); return ret; } pluginmap_file_desc->dependencies = RKComponentDependency::parseDependencies (dependencies); } // step 1: include required files QStringList includelist; list = xml->getChildElements (document_element, "require", DL_INFO); for (XMLChildList::const_iterator it=list.constBegin (); it != list.constEnd (); ++it) { if ((*it).hasAttribute ("file")) { QString file = pluginmap_file_desc->makeFileName (xml->getStringAttribute (*it, "file", QString (), DL_ERROR)); if (QFileInfo (file).isReadable ()) { includelist.append (file); } else { ret.addAndPrintError (DL_ERROR, i18n ("Specified required file '%1' does not exist or is not readable. Ignoring.", file)); } } else { QString map_id = xml->getStringAttribute (*it, "map", QString (), DL_ERROR); // Try to locate the map among the already loaded files, first QString file; for (PluginMapFileMap::const_iterator pmit = pluginmapfiles.constBegin (); pmit != pluginmapfiles.constEnd (); ++pmit) { if (pmit.value ()->id == map_id) { file = pmit.key (); break; } } // If the map is not among the loaded files, try to look it up among all known pluginmaps if (file.isEmpty ()) file = RKSettingsModulePlugins::findPluginMapById (map_id); if (!file.isEmpty ()) { RK_DEBUG (PLUGIN, DL_INFO, "Resolving plugin map specification %s to filename %s", qPrintable (map_id), qPrintable (file)); includelist.append (file); } else { ret.addAndPrintError (DL_ERROR, i18n ("Could not resolve specified required pluginmap '%1'. You may have to install additional packages.", map_id)); } } } for (QStringList::const_iterator it = includelist.constBegin (); it != includelist.constEnd (); ++it) { ret.add (addPluginMapLocal (*it)); } // step 2: create (list of) components element = xml->getChildElement (document_element, "components", DL_INFO); list = xml->getChildElements (element, "component", DL_INFO); // Plugins that depend on a specific version of RKWard can be specified in several alternative version. // It is not an error, unless *none* of the specified alternatives can be loaded. QSet local_components; QSet depfailed_local_components; for (XMLChildList::const_iterator it=list.begin (); it != list.end (); ++it) { QString id = cnamespace + xml->getStringAttribute((*it), "id", QString::null, DL_WARNING); // check dependencies, first QDomElement cdependencies = xml->getChildElement (*it, "dependencies", DL_INFO); if (!cdependencies.isNull ()) { if (!RKComponentDependency::isRKWardVersionCompatible (cdependencies)) { RK_DEBUG (PLUGIN, DL_INFO, "Skipping component '%1': Not compatible with this version of RKWard", qPrintable (id)); depfailed_local_components.insert (id); continue; } } QString filename = xml->getStringAttribute((*it), "file", QString::null, DL_WARNING); int type = xml->getMultiChoiceAttribute ((*it), "type", "standard", 0, DL_WARNING); QString label = xml->getStringAttribute ((*it), "label", i18n ("(no label)"), DL_WARNING); if (components.contains (id)) { ret.addAndPrintError (DL_WARNING, i18n ("RKComponentMap already contains a component with id \"%1\". Ignoring second entry.", id)); } else if (!QFileInfo (pluginmap_file_desc->makeFileName (filename)).isReadable ()) { ret.addAndPrintError (DL_ERROR, i18n ("Specified file '%1' for component id \"%2\" does not exist or is not readable. Ignoring.", filename, id)); } else { // create and initialize component handle RKComponentHandle *handle = new RKComponentHandle (pluginmap_file_desc, filename, label, (RKComponentType) type); XMLChildList attributes_list = xml->getChildElements (*it, "attribute", DL_DEBUG); for (XMLChildList::const_iterator ait=attributes_list.begin (); ait != attributes_list.end (); ++ait) { handle->addAttribute (xml->getStringAttribute (*ait, "id", "noid", DL_WARNING), xml->getStringAttribute (*ait, "value", QString::null, DL_ERROR), xml->getStringAttribute (*ait, "label", QString::null, DL_ERROR)); } if (!cdependencies.isNull ()) handle->addDependencies (RKComponentDependency::parseDependencies (cdependencies)); components.insert (id, handle); local_components.insert (id); } } foreach (const QString &id, depfailed_local_components) { if (local_components.contains (id)) continue; ret.addAndPrintError (DL_ERROR, i18n ("Component '%1' is not available in a version compatible with this version of RKWard", id)); } // step 3: create / insert into menus QDomElement xmlgui_menubar_element = xml->getChildElement (gui_xml.documentElement (), "MenuBar", DL_ERROR); ret.valid_plugins += createMenus (xmlgui_menubar_element, xml->getChildElement (document_element, "hierarchy", DL_INFO), cnamespace); // step 4: create and register contexts list = xml->getChildElements (document_element, "context", DL_INFO); for (XMLChildList::const_iterator it=list.constBegin (); it != list.constEnd (); ++it) { QString id = xml->getStringAttribute (*it, "id", QString::null, DL_ERROR); RKContextMap *context = getContextLocal (id); if (!context) { context = new RKContextMap (id); contexts.insert (id, context); } ret.valid_plugins += context->create (*it, cnamespace); } setXMLGUIBuildDocument (gui_xml); // TODO: Should be called only once, not for each pluginmap! actionCollection ()->readSettings (); return ret; } void RKComponentMap::addedEntry (const QString &id, RKComponentHandle *handle) { RK_TRACE (PLUGIN); if (handle->isPlugin ()) { handle->setAccessible (true); KAction *action = actionCollection ()->addAction (id, handle, SLOT (activated())); action->setText (handle->getLabel ()); action->setShortcutConfigurable (true); } } ///########################### END RKComponentMap ############################### ///########################### BEGIN RKComponentHandle ############################ #include "rkstandardcomponent.h" RKComponentHandle::RKComponentHandle (RKPluginMapFile *pluginmap, const QString &rel_filename, const QString &label, RKComponentType type) : QObject (RKWardMainWindow::getMain ()) { RK_TRACE (PLUGIN); RKComponentHandle::type = type; RKComponentHandle::filename = rel_filename; RKComponentHandle::label = label; RKComponentHandle::plugin_map = pluginmap; is_accessible = false; } RKComponentHandle::~RKComponentHandle () { RK_TRACE (PLUGIN); } bool RKComponentHandle::isPlugin () { if (type != Standard) { return false; } return true; } RKStandardComponent *RKComponentHandle::invoke (RKComponent *parent_component, QWidget *parent_widget) { RK_TRACE (PLUGIN); RK_ASSERT (isPlugin ()); return (new RKStandardComponent (parent_component, parent_widget, getFilename (), this)); } void RKComponentHandle::activated () { RK_TRACE (PLUGIN); invoke (0, 0); } QString RKComponentHandle::getAttributeValue (const QString &attribute_id) { RK_TRACE (PLUGIN); QMap::const_iterator it = RKComponentMap::getMap ()->component_attributes.find (attribute_id); if (it == RKComponentMap::getMap ()->component_attributes.constEnd ()) return QString (); return (*it).valuemap.value (this); } QString RKComponentHandle::getAttributeLabel (const QString &attribute_id) { RK_TRACE (PLUGIN); QMap::const_iterator it = RKComponentMap::getMap ()->component_attributes.find (attribute_id); if (it == RKComponentMap::getMap ()->component_attributes.constEnd ()) return QString (); return (*it).labelmap.value (this); } void RKComponentHandle::addAttribute (const QString &id, const QString &value, const QString &label) { RK_TRACE (PLUGIN); RKComponentMap::AttributeValueMap & map = RKComponentMap::getMap ()->component_attributes[id]; // NOTE: auto-created, if needed map.valuemap.insert (this, value); map.labelmap.insert (this, label); } void RKComponentHandle::addDependencies (const QList& deps) { if (deps.isEmpty ()) return; RK_TRACE (PLUGIN); RKComponentMap::getMap ()->component_dependencies[this].append (deps); } QList RKComponentHandle::getDependencies () { RK_TRACE (PLUGIN); QList ret = plugin_map->getDependencies (); QHash >::const_iterator it = RKComponentMap::getMap ()->component_dependencies.find (this); if (it == RKComponentMap::getMap ()->component_dependencies.constEnd ()) return ret; return (ret + (*it)); } QString RKComponentHandle::getPluginmapFilename () { RK_TRACE (PLUGIN); return RKComponentMap::getMap ()->pluginmapfiles.key (plugin_map); } ///########################### END RKComponentHandle ############################### #include "rkcomponentmap.moc" rkward-0.6.1/rkward/plugin/rkstandardcomponent.h0000644000175000017500000001711712124345411021405 0ustar thomasthomas/*************************************************************************** rkstandardcomponent - description ------------------- begin : Sun Feb 19 2006 copyright : (C) 2006, 2007, 2009, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSTANDARDCOMPONENT_H #define RKSTANDARDCOMPONENT_H #include "rkcomponent.h" #include #include class RKComponentScriptingProxy; class RKStandardComponentGUI; class RCommandChain; class RKComponentHandle; class RKStandardComponentStack; class ScriptBackend; class QTimer; /** The standard type of component (i.e. stand-alone), previously known as "plugin". This is the type of component described by an XML-file @author Thomas Friedrichsmeier */ class RKStandardComponent : public RKComponent { Q_OBJECT public: /** constructor. @param parent_component Parent component (or 0, if this is going to be a top-level component) @param parent_widget Parent widget (typically 0, if this is going to be a top-level component) @param filename Filename of the XML-file to construct this component from */ RKStandardComponent (RKComponent *parent_component, QWidget *parent_widget, const QString &filename, RKComponentHandle *handle); /** destructor */ ~RKStandardComponent (); /** reimplemented to update code on changes*/ void changed (); /** reimplemented to return true, if the RKStandardComponent is in Wizard mode */ bool isWizardish (); /** reimplemented to actually answer the question (if in Wizard mode) */ bool havePage (bool next); /** reimplemented to actually move the page (if in Wizard mode) */ void movePage (bool next); /** reimplemented to actually answer the question (if in Wizard mode) */ bool currentPageSatisfied (); /** for use by RKComponentBuilder to add a page to a wizardish component */ RKComponent *addPage (); /** reimplemented to acutally register the component with the wizard */ void addComponentToCurrentPage (RKComponent *component); /** switch from dialog to wizard or vice versa */ void switchInterface (); /** RTTI */ int type () { return ComponentStandard; }; /** set the GUI caption (if this is a top-level gui) */ void setCaption (const QString &caption); /** return the filename of the xml file */ QString getFilename () { return filename; }; RKComponentHandle *getHandle () { return handle; }; bool haveHelp () { return have_help; }; /** Submits the current code (by simulating a click on the ok button). @param in_chain The command chain to insert the command in (0 for regular command stack). @return false, if the plugin-code could not be submitted (e.g. plugin was not satisfied) */ bool submit (RCommandChain *in_chain = 0); /** convenience access function: closes the corresponding GUI */ void close (); /** reimplemented to actually return Dead or Processing when appropriate */ ComponentStatus recursiveStatus (); RCommandChain *commandChain () const { return command_chain; }; /** Return the GUI-scripting handler (creating it, if needed) */ RKComponentScriptingProxy* scriptingProxy (); signals: void standardInitializationComplete (); public slots: /** this gets called by the script-backend, when it's done. Might enable the submit button or destruct the plugin. */ void backendIdle (); /** return result of given call (string vector) to the R-backend */ // void getRVector (const QString &call); /** return result of given call to the R-backend */ // void doRCall (const QString &call); /** get a value for the backend. Note: hint should be one of ValueTypeHint */ void getValue (const QString &id, const int hint); /** reimplemented from QWidget to hide the gui if applicable */ void hide (); /** for enslaved components */ void showGUI (); void handleChange (); void kill (); private: /** The property holding the generated code. Note that this member is tightly controlled by the ScriptBackend */ RKComponentPropertyCode *code; bool killed; QString filename; bool have_help; // TODO: replace by filename, once we use the help more ScriptBackend *backend; RKComponentScriptingProxy* scripting; RKStandardComponentGUI *gui; RKComponentHandle *handle; RKStandardComponentStack *wizard; bool update_pending; RCommandChain *command_chain; /** Avoid updating code-display, etc. until the component is fully created */ bool created; bool createTopLevel (const QDomElement &doc_element, int force_mode=0, bool enslaved=false); void buildAndInitialize (const QDomElement &doc_element, const QDomElement &gui_element, QWidget *parent_widget, bool build_wizard, bool enslaved=false); /** used during switchInterfaces () to discard child components, and delete gui if applicable */ void discard (); protected: friend class RKComponentBuilder; /** reimplemented for technical reasons. Additionally registers component children with the component stack if in wizard mode */ void addChild (const QString &id, RKComponentBase *child); }; #include /** A helper class used to build and initialize an RKComponent. Most importantly this will keep track of the properties yet to be connected. Used at least by RKStandardComponent. Notes: How does building work? - Builder builds the components. Simple components are built by the same builder. For embedded components, a sub-builder is invoked. - Simple components register their (property) connection wishes to the the builder during construction - Builder takes care of connecting properties Calls parent_component->addChild () for built child-components. As an exception, this may be omitted for passive components (e.g. layouting components) that do not specify an id Reminder to the twisted brain: Typically inside a standard-component, *all* child components, even if nested in layouting components, etc. have the same standard-component as parent! Only embedded full-fledged components are a truly separate unit! @author Thomas Friedrichsmeier */ class RKComponentBuilder { public: RKComponentBuilder (RKComponent *parent_component, const QDomElement &document_element); ~RKComponentBuilder (); void buildElement (const QDomElement &element, QWidget *parent_widget, bool allow_pages); void parseLogic (const QDomElement &element, bool allow_script_tag=true); void makeConnections (); RKComponent *component () const { return parent; }; private: /** internal convenience function to schedule a property connection */ void addConnection (const QString &client_id, const QString &client_property, const QString &governor_id, const QString &governor_property, bool reconcile, const QDomElement &origin); QDomElement doElementCopy (const QString id, const QDomElement ©); QDomElement doc_elem; RKComponent *parent; struct RKComponentPropertyConnection { QString governor_property; QString client_property; bool reconcile; QDomElement origin; }; typedef QList ConnectionList; ConnectionList connection_list; QMap initial_values; }; #endif rkward-0.6.1/rkward/plugin/rkcomponent.cpp0000644000175000017500000003704212124345411020216 0ustar thomasthomas/*************************************************************************** rkcomponent - description ------------------- begin : Tue Dec 13 2005 copyright : (C) 2005, 2006, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcomponent.h" #include "rkstandardcomponent.h" #include "../misc/rkcommonfunctions.h" #include "../debug.h" //############### RKComponentBase ##################### RKComponentBase* RKComponentBase::lookupComponent (const QString &identifier, QString *remainder) { RK_TRACE (PLUGIN); RK_ASSERT (remainder); if (identifier.isEmpty ()) return this; RK_DEBUG (PLUGIN, DL_DEBUG, "looking up '%s'", identifier.toLatin1 ().data ()); RKComponentBase *child = child_map.value (identifier.section (".", 0, 0)); if (!child) { // if we do not have such a child, return this (and set remainder) *remainder = identifier; return this; } else { // else do recursive lookup return child->lookupComponent (identifier.section (".", 1), remainder); } } RKComponentPropertyBase* RKComponentBase::lookupProperty (const QString &identifier, QString *remainder, bool warn) { RK_TRACE (PLUGIN); QString _remainder; QString* p_remainder = remainder; if (!remainder) p_remainder = &_remainder; RKComponentBase* p = lookupComponent (identifier, p_remainder); if (p && p->isProperty ()) { if (!remainder && !p_remainder->isEmpty ()) { if (warn) RK_DEBUG (PLUGIN, DL_ERROR, "Modifier is not allowed, here, while looking up property: %s. (Remainder was %s)", qPrintable (identifier), qPrintable (*p_remainder)); return 0; } return static_cast (p); } if (warn) RK_DEBUG (PLUGIN, DL_ERROR, "No such property: %s. Remainder was %s", qPrintable (identifier), qPrintable (*p_remainder)); return 0; } void RKComponentBase::addChild (const QString &id, RKComponentBase *child) { RK_TRACE (PLUGIN); child_map.insertMulti (id, child); // no overwriting even on duplicate ("#noid#") ids } void RKComponentBase::fetchPropertyValuesRecursive (PropertyValueMap *list, bool include_top_level, const QString &prefix, bool include_inactive_elements) const { RK_TRACE (PLUGIN); for (QHash::const_iterator it = child_map.constBegin (); it != child_map.constEnd (); ++it) { if (it.key () == "#noid#") continue; if (it.value ()->isInternal ()) continue; if (it.value ()->isProperty ()) { if (include_top_level) { list->insert (prefix + it.key (), fetchStringValue (it.value ())); } } else { RK_ASSERT (it.value ()->isComponent ()); if (static_cast (it.value ())->isInactive () && (!include_inactive_elements)) continue; it.value ()->fetchPropertyValuesRecursive (list, true, prefix + it.key () + '.'); } } } void RKComponentBase::setPropertyValues (const PropertyValueMap *list, bool warn) { RK_TRACE (PLUGIN); // TODO: visibility enabledness and requiredness should be excluded, as those are not directly user settable. Perhaps even mark up all properties as user settable or not. for (PropertyValueMap::const_iterator it = list->constBegin (); it != list->constEnd (); ++it) { QString mod; RKComponentBase *prop = lookupComponent (it.key (), &mod); if (mod.isEmpty () && prop->isProperty ()) { // found a property RKComponentPropertyBase* p = static_cast(prop); if (p->isInternal () && warn) { RK_DEBUG (PLUGIN, DL_WARNING, "Setting value for property %s, which is marked internal.", qPrintable (it.key ())); } p->setValue (it.value ()); } else { if (warn) RK_DEBUG (PLUGIN, DL_WARNING, "Property %s not found while setting values. Remainder was %s.", qPrintable (it.key ()), qPrintable (mod)); } } } //static QString RKComponentBase::valueMapToString (const PropertyValueMap &map) { RK_TRACE (PLUGIN); QString out; for (PropertyValueMap::const_iterator it = map.constBegin (); it != map.constEnd (); ++it) { if (!out.isEmpty ()) out.append ("\n"); out.append (RKCommonFunctions::escape (it.key () + "=" + it.value ())); } return out; } //static bool RKComponentBase::stringListToValueMap (const QStringList &strings, PropertyValueMap *map) { RK_TRACE (PLUGIN); for (int i = 0; i < strings.size (); ++i) { QString line = RKCommonFunctions::unescape (strings[i]); int sep = line.indexOf ('='); if (sep < 0) return false; map->insert (line.left (sep), line.mid (sep+1)); } return true; } QStringList RKComponentBase::matchAgainstState (const PropertyValueMap &state) { RK_TRACE (PLUGIN); QStringList probs; PropertyValueMap current; fetchPropertyValuesRecursive (¤t, true); for (PropertyValueMap::const_iterator it = state.constBegin (); it != state.constEnd (); ++it) { QString current_value = current.value (it.key ()); if (current_value != it.value ()) { // this is not necessarily a problem. The value may simply not be in the serialization, or in slightly different format QString dummy; RKComponentBase *prop = lookupComponent (it.key (), &dummy); if (dummy.isEmpty () && prop) { if ((prop->type () == PropertyDouble) && static_cast (prop)->doubleValue () == it.value ().toDouble ()) { // COMPAT: In RKWard 0.5.1, the formatting of real numbers was different. Hence we compare the numeric values, instead continue; } else if ((prop->type () == PropertyBool) && (it.value () == prop->value ("labeled").toString ())) { // COMPAT: In RKWard 0.6.0, bool properties returned the labelled string, by default. Hence we also compare on the labelled value continue; } else if (fetchStringValue (prop) == it.value ()) { continue; } else { if (current_value.isEmpty ()) current_value = fetchStringValue (prop); // TODO: Hm, what did I have in mind, here? probs.append (QString ("Tried to apply 'value %1' to property %2, but got '%3', instead").arg (it.value (), it.key (), current_value)); } } else { probs.append (QString ("No such property %1 (remainder was %2)").arg (it.key (), dummy)); } } } return probs; } QString RKComponentBase::fetchStringValue (RKComponentBase* prop, const QString &modifier) { // not tracing this simple helper // TODO: we need a bit of special casing, here. Probably, instead, we should add new virutal functions serialize() and unserialize(QString()), which properties can re-implement, if needed. if (prop->type () == PropertyDouble) { if (modifier.isEmpty ()) return (prop->value ("formatted").toString ()); } else if (prop->type () == PropertyStringList) { if (modifier.isEmpty ()) return (prop->value ("joined").toString ()); } else if (prop->type () == PropertyRObjects) { return (prop->value (modifier).toStringList ().join ("\n")); } QVariant value = prop->value (modifier); if (value.type () == QVariant::StringList) { return value.toStringList ().join ("\n"); } return (value.toString ()); } QString RKComponentBase::fetchStringValue (const QString &identifier) { RK_TRACE (PLUGIN); QString mod; RKComponentBase *prop = lookupComponent (identifier, &mod); return fetchStringValue (prop, mod); } QVariant RKComponentBase::fetchValue (const QString &id, const int hint) { if (hint == StringValue) { return (fetchStringValue (id)); } else if (hint == TraditionalValue) { QString val = fetchStringValue (id); // return "0" as numeric constant. Many plugins rely on this form PHP times. if (val == "0") return (QVariant (0.0)); else return (QVariant (val)); } else { QString mod; RKComponentBase *prop = lookupComponent (id, &mod); QVariant val = prop->value (mod); if (hint == BooleanValue) { bool ok; return (RKComponentPropertyBool::variantToBool (val, &ok)); if (!ok) RK_DEBUG (PLUGIN, DL_WARNING, "Could not convert value of %s to boolean", qPrintable (id)); } else { if (hint == StringlistValue) { if (val.type () != QVariant::StringList) RK_DEBUG (PLUGIN, DL_WARNING, "Value of %s is not a string list", qPrintable (id)); } else if (hint == NumericValue) { if (!val.canConvert (QVariant::Double)) RK_DEBUG (PLUGIN, DL_WARNING, "Value of %s is not numeric", qPrintable (id)); } else { RK_ASSERT (false); } return (val); } } } QVariant RKComponentBase::value (const QString &modifier) { RK_TRACE (PLUGIN); RK_DEBUG (PLUGIN, DL_WARNING, "Component type %d does not have a value. Remaining modifier is: '%s'", type (), modifier.toLatin1 ().data ()); return QVariant (); } RKComponentBase::ComponentStatus RKComponentBase::recursiveStatus () { RK_TRACE (PLUGIN); bool processing = false; bool children_satisfied = true; // we always need to interate over all children, since we need to make sure to find any which are dead or processing. for (QHash::const_iterator it = child_map.constBegin (); it != child_map.constEnd (); ++it) { ComponentStatus s = it.value ()->recursiveStatus (); if (s == Dead) return Dead; if (s == Processing) processing = true; else if (s != Satisfied) children_satisfied = false; } if (processing) return Processing; bool req = required; if (isComponent () && static_cast(this)->isInactive ()) req = false; if (!req) return Satisfied; if (children_satisfied && isValid ()) return Satisfied; if (isComponent ()) RK_DEBUG (PLUGIN, DL_DEBUG, "component not satisfied: %s", qPrintable (static_cast (this)->getIdInParent ())); return Unsatisfied; } //############### RKComponent ######################## RKComponent::RKComponent (RKComponent *parent_component, QWidget *parent_widget) : QWidget (parent_widget) { RK_TRACE (PLUGIN); createDefaultProperties (); _parent = parent_component; // even if this is component has (parent_widget == 0), the component should be added as a QObject child of the parent. if (_parent && (!parent_widget)) setParent (_parent); } void RKComponent::createDefaultProperties () { RK_TRACE (PLUGIN); addChild ("enabled", enabledness_property = new RKComponentPropertyBool (this, false)); enabledness_property->setBoolValue (true); enabledness_property->setInternal (true); connect (enabledness_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyValueChanged (RKComponentPropertyBase *))); addChild ("visible", visibility_property = new RKComponentPropertyBool (this, false)); visibility_property->setBoolValue (true); visibility_property->setInternal (true); connect (visibility_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyValueChanged (RKComponentPropertyBase *))); addChild ("required", requiredness_property = new RKComponentPropertyBool (this, false)); requiredness_property->setBoolValue (true); requiredness_property->setInternal (true); connect (requiredness_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (propertyValueChanged (RKComponentPropertyBase *))); } RKComponent::~RKComponent () { RK_TRACE (PLUGIN); // properties are QObjects, and hence deleted automatically } void RKComponent::propertyValueChanged (RKComponentPropertyBase *property) { RK_TRACE (PLUGIN); // slightly more elaborat than necessary on first thought, to prevent loops if (property == visibility_property) { if (visibility_property->boolValue ()) { if (isHidden ()) show (); } else { if (!isHidden ()) hide (); } } else if (property == enabledness_property) { updateEnablednessRecursive ((!parentComponent ()) || (parentComponent ()->isEnabled ())); } else if (property == requiredness_property) { required = requiredness_property->boolValue (); changed (); } } void RKComponent::updateEnablednessRecursive (bool parent_enabled) { RK_TRACE (PLUGIN); bool enabled = (enabledness_property->boolValue () && parent_enabled); bool changed = (enabled != isEnabled ()); setEnabled (enabled); /* RKComponent hierarchy does not always correspond to QWidget hierarchy (although in _most_ cases, it does. For this reason, * we need to update enabledness of all child components. */ if (changed) { for (QHash::const_iterator it = child_map.constBegin (); it != child_map.constEnd (); ++it) { if (it.value ()->isComponent()) { static_cast (it.value ())->updateEnablednessRecursive (enabled); } } } } bool RKComponent::isInactive () { if (!isEnabled ()) return true; if (parentWidget () && isHidden ()) return true; // Note: Components embedded as button may be "hidden" without being inaccessible if (!visibility_property->boolValue ()) return true; // Note for those, this is the appropriate check return false; } bool RKComponent::isWizardish () { RK_TRACE (PLUGIN); return false; } bool RKComponent::havePage (bool) { RK_TRACE (PLUGIN); RK_ASSERT (false); // should not be called as isWizardish returns false return false; } void RKComponent::movePage (bool) { RK_TRACE (PLUGIN); RK_ASSERT (false); // should not be called as isWizardish returns false } RKComponent *RKComponent::addPage () { RK_TRACE (PLUGIN); RK_ASSERT (false); // should not be called as isWizardish returns false return (new RKComponent (this, this)); } void RKComponent::addComponentToCurrentPage (RKComponent *) { RK_TRACE (PLUGIN); RK_ASSERT (false); // should not be called as isWizardish returns false } void RKComponent::setRequired (bool required) { RK_TRACE (PLUGIN); requirednessProperty ()->setBoolValue (required); } void RKComponent::changed () { RK_TRACE (PLUGIN); if (parentComponent ()) { parentComponent ()->changed (); } emit (componentChanged (this)); } RKStandardComponent *RKComponent::standardComponent (QString *id_adjust) { RK_TRACE (PLUGIN); RKComponent *p = this; while (p) { if (p->type () == RKComponent::ComponentStandard) return static_cast (p); if (id_adjust) id_adjust->prepend (p->getIdInParent () + '.'); p = p->parentComponent (); } RK_ASSERT (false); return 0; } RKStandardComponent* RKComponent::topmostStandardComponent () { RK_TRACE (PLUGIN); RKComponent *p = this; while (p->parentComponent ()) p = p->parentComponent (); if (p->type () == RKComponent::ComponentStandard) return static_cast (p); // NOTE: currently, *only* standard components can be topmost RK_ASSERT (false); return 0; } void RKComponent::removeFromParent () { RK_TRACE (PLUGIN); if (!parentComponent ()) return; // unfortunately, several items might hvae the same key, and there seems to be no way to selectively remove the current item only. // however, this function should only ever be called in cases of emergency and to prevent crashes. So we make extra sure to remove the child, // even if we remove a little more than necessary along the way. QString key = getIdInParent (); while (parentComponent ()->child_map.remove (key)) {;} _parent = 0; } QString RKComponent::getIdInParent () const { RK_TRACE (PLUGIN); if (!parentComponent ()) return QString (); return (parentComponent ()->child_map.key (const_cast (this))); } #include "rkcomponent.moc" rkward-0.6.1/rkward/plugin/rkvarslot.cpp0000644000175000017500000001711312124345411017703 0ustar thomasthomas/*************************************************************************** rkvarslot.cpp - description ------------------- begin : Thu Nov 7 2002 copyright : (C) 2002, 2007, 2008, 2009, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkvarslot.h" #include #include #include #include #include #include #include #include "rkvarselector.h" #include "../core/robject.h" #include "../rkglobals.h" #include "../debug.h" #include "../misc/xmlhelper.h" #include "../misc/rkstandardicons.h" RKVarSlot::RKVarSlot (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); XMLHelper *xml = XMLHelper::getStaticHelper (); // basic layout QGridLayout *g_layout = new QGridLayout (this); QLabel *label = new QLabel (xml->getStringAttribute (element, "label", i18n ("Variable:"), DL_INFO), this); g_layout->addWidget (label, 0, 2); select = new QPushButton (QString::null, this); setSelectButton (false); connect (select, SIGNAL (clicked ()), this, SLOT (selectPressed ())); g_layout->addWidget (select, 1, 0); g_layout->addItem (new QSpacerItem (5, 0), 0, 1); list = new QTreeWidget (this); list->setSelectionMode (QAbstractItemView::ExtendedSelection); list->setHeaderLabels (QStringList () << " " << i18n ("Name")); list->setSortingEnabled (false); list->setUniformRowHeights (true); list->setRootIsDecorated (false); g_layout->addWidget (list, 1, 2); // initialize properties addChild ("source", source = new RKComponentPropertyRObjects (this, false)); source->setInternal (true); addChild ("available", available = new RKComponentPropertyRObjects (this, true)); addChild ("selected", selected = new RKComponentPropertyRObjects (this, false)); selected->setInternal (true); // find out about options if ((multi = xml->getBoolAttribute (element, "multi", false, DL_INFO))) { available->setListLength (xml->getIntAttribute (element, "min_vars", 1, DL_INFO), xml->getIntAttribute (element, "min_vars_if_any", 1, DL_INFO), xml->getIntAttribute (element, "max_vars", 0, DL_INFO)); connect (list, SIGNAL (itemSelectionChanged ()), this, SLOT (listSelectionChanged ())); } else { available->setListLength (1, 1, 1); // make it look like a line-edit list->header ()->hide (); QTreeWidgetItem dummy (list); dummy.setText (0, "Tg"); int top, left, bottom, right; list->getContentsMargins (&left, &top, &right, &bottom); list->setFixedHeight (list->visualItemRect (&dummy).height () + 2*list->visualItemRect (&dummy).top () + top + bottom); list->header ()->setStretchLastSection (true); list->hideColumn (0); list->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff); list->setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOff); g_layout->setRowStretch (3, 1); // so the label does not get separated from the view } // initialize filters available->setClassFilter (xml->getStringAttribute (element, "classes", QString (), DL_INFO).split (" ", QString::SkipEmptyParts)); setRequired (xml->getBoolAttribute (element, "required", false, DL_INFO)); available->setTypeFilter (xml->getStringAttribute (element, "types", QString::null, DL_INFO).split (" ", QString::SkipEmptyParts)); available->setDimensionFilter (xml->getIntAttribute (element, "num_dimensions", 0, DL_INFO), xml->getIntAttribute (element, "min_length", 0, DL_INFO), xml->getIntAttribute (element, "max_length", INT_MAX, DL_INFO)); connect (available, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (availablePropertyChanged (RKComponentPropertyBase *))); availablePropertyChanged (available); // initialize } RKVarSlot::~RKVarSlot (){ RK_TRACE (PLUGIN); } void RKVarSlot::setSelectButton (bool add) { if (add) { select->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionAddRight)); add_mode = true; } else { select->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionRemoveLeft)); add_mode = false; } } void RKVarSlot::listSelectionChanged () { RK_TRACE (PLUGIN); RObject::ObjectList sellist; QList selitems = list->selectedItems (); for (int i = 0; i < selitems.count (); ++i) sellist.append (item_map.value (selitems[i])); selected->setObjectList (sellist); setSelectButton (((!multi) || (selitems.isEmpty ())) && (!available->atMaxLength ())); } void RKVarSlot::availablePropertyChanged (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); list->clear (); item_map.clear (); RK_DEBUG (PLUGIN, DL_DEBUG, "contained in varslot: %s", qPrintable (fetchStringValue (available))); RObject::ObjectList objlist = available->objectList (); for (int i = 0; i < objlist.count (); ++i) { RObject *object = objlist[i]; QTreeWidgetItem *new_item = new QTreeWidgetItem (list); new_item->setText (0, QString::number (i + 1)); new_item->setText (1, object->getShortName ()); QString probs = available->objectProblems (i); if (!probs.isEmpty ()) { new_item->setToolTip (1, i18n ("

    This object is not allowed, here, for the following reason(s):

    ") + probs); new_item->setIcon (1, RKStandardIcons::getIcon (RKStandardIcons::ActionDeleteVar)); } item_map.insert (new_item, object); } if (multi) list->resizeColumnToContents (0); listSelectionChanged (); // takes care of updating the select button changed (); } void RKVarSlot::updateLook () { RK_TRACE (PLUGIN); QPalette palette = list->palette (); if (!isSatisfied ()) { // implies that it is enabled palette.setColor (QPalette::Window, QColor (255, 0, 0)); } else { if (isEnabled ()) { palette.setColor (QPalette::Window, QColor (255, 255, 255)); } else { palette.setColor (QPalette::Window, QColor (200, 200, 200)); } } if (!multi) palette.setColor (QPalette::Base, palette.color (QPalette::Window)); list->setPalette(palette); } void RKVarSlot::selectPressed () { RK_TRACE (PLUGIN); RK_DEBUG (PLUGIN, DL_DEBUG, "select press in varslot: mode %d, source %s, selected %s", add_mode, qPrintable (fetchStringValue (source)), qPrintable (fetchStringValue (selected))); // first update the properties if (add_mode) { if (multi) { RObject::ObjectList objlist = source->objectList (); RObject::ObjectList::const_iterator it = objlist.constBegin (); while (it != objlist.constEnd ()) { available->addObjectValue (*it); ++it; } } else { if (source->objectValue ()) available->setObjectValue (source->objectValue ()); } } else { // remove-mode RObject::ObjectList objlist; if (multi) { objlist = selected->objectList (); } else { objlist = available->objectList (); } RObject::ObjectList::const_iterator it = objlist.begin (); while (it != objlist.end ()) { available->removeObjectValue (*it); selected->removeObjectValue (*it); ++it; } } } #include "rkvarslot.moc" rkward-0.6.1/rkward/plugin/rkdropdown.cpp0000644000175000017500000000541212124345411020044 0ustar thomasthomas/*************************************************************************** rkdropdown.h - description ------------------- begin : Fri Jan 12 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkdropdown.h" #include #include #include #include #include #include #include "../rkglobals.h" #include "../misc/xmlhelper.h" #include "../debug.h" RKDropDown::RKDropDown (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKAbstractOptionSelector (parent_component, parent_widget) { RK_TRACE (PLUGIN); // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create layout QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (xml->getStringAttribute (element, "label", i18n ("Select one:"), DL_INFO), this); vbox->addWidget (label); // create ComboBox box = new QComboBox (this); box->setEditable (false); listwidget = new QListWidget (box); box->setModel (listwidget->model ()); box->setView (listwidget); addOptionsAndInit (element); vbox->addWidget (box); connect (box, SIGNAL (activated (int)), this, SLOT (comboItemActivated (int))); } RKDropDown::~RKDropDown(){ RK_TRACE (PLUGIN); } void RKDropDown::comboItemActivated (int id) { RK_TRACE (PLUGIN); itemSelected (id); } void RKDropDown::setItemInGUI (int id) { RK_TRACE (PLUGIN); box->setCurrentIndex (id); } void RKDropDown::addOptionToGUI (const QString &label, int id) { RK_TRACE (PLUGIN); box->insertItem (id, label); } void RKDropDown::setItemEnabledInGUI (int id, bool enabled) { RK_TRACE (PLUGIN); QListWidgetItem* item = listwidget->item (id); RK_ASSERT (item); int flags = item->flags (); if (enabled) flags |= Qt::ItemIsEnabled | Qt::ItemIsSelectable; else flags -= flags & (Qt::ItemIsEnabled | Qt::ItemIsSelectable); item->setFlags ((Qt::ItemFlags) flags); } #include "rkdropdown.moc" rkward-0.6.1/rkward/plugin/rkcomponentmap.h0000644000175000017500000002443612124345411020364 0ustar thomasthomas/*************************************************************************** rkcomponentmap.h - description ------------------- begin : Thu May 12 2005 copyright : (C) 2005-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMPONENTMAP_H #define RKCOMPONENTMAP_H #include #include "rkcomponentmeta.h" /** very simple helper class to keep track of .pluginmap files */ class RKPluginMapFile { public: RKPluginMapFile (const QString &basedir) { RKPluginMapFile::basedir = basedir; }; ~RKPluginMapFile () {}; QString getBaseDir () { return basedir; }; QString makeFileName (const QString &filename); QList getDependencies () { return dependencies; }; static QString parseId (const QDomElement &e); private: friend class RKComponentMap; QString basedir; QString id; QList dependencies; }; /** enum of different types of RKComponent */ enum RKComponentType { Standard=0 /// the only type available so far. Classifies a component that can be used standalone, and is not special in any way. Of course, as long as there is only one category of component, this is fairly meaningless. It's meant for future features. }; #include #include #include #include class RKComponent; class RKComponentMap; class RCommandChain; class RKStandardComponent; class QWidget; class KActionCollection; /** This simple class keeps the most basic information about a component in RKWard. Most work is done in RKComponentMap. @author Thomas Friedrichsmeier */ class RKComponentHandle : public QObject { Q_OBJECT public: RKComponentHandle (RKPluginMapFile *pluginmap, const QString &rel_filename, const QString &label, RKComponentType type); virtual ~RKComponentHandle (); QString getFilename () { return plugin_map->makeFileName (filename); }; QString getLabel () { return label; }; RKComponentType getType () { return type; }; bool isPlugin (); QString getPluginmapFilename (); RKStandardComponent *invoke (RKComponent *parent_component, QWidget *parent_widget); /** Gets the dependencies of this plugin. This *includes* the dependencies of the parent pluginmap */ QList getDependencies (); /** Adds dependencies for this plugin. */ void addDependencies (const QList & deps); QString getAttributeValue (const QString &attribute_id); QString getAttributeLabel (const QString &attribute_id); void addAttribute (const QString &id, const QString &value, const QString &label); void setAccessible (bool accessible) { is_accessible = accessible; }; /** Returns whether this component is accessible from the menu, somewhere (else it might be in a context) */ bool isAccessible () const { return is_accessible; }; public slots: /** Slot called, when the menu-item for this component is selected. Responsible for creating the GUI. */ void activated (); protected: /** The plugin map where this component was declared */ RKPluginMapFile *plugin_map; /** The filename relative to the pluginmap file */ QString filename; QString label; RKComponentType type; private: bool is_accessible; }; #include #include #include class QDomElement; /** This class keeps a QDomDocument that is a represenation of the GUI using KDEs XML-GUI format (a ui.rc). Use createMenus () to have it parse the menu descriptions from a .pluginmap file. It will adjust the XML description accordingly. When done, you can use to generated gui_xml to set it as the xmlGUIBuildDocument of a KXMLGUIClient. This class represents the common functionality between RKComponentMap and RKContextMap. @author Thomas Friedrichsmeier */ class RKComponentGUIXML { protected: RKComponentGUIXML (); virtual ~RKComponentGUIXML (); /** reset the xml file */ void clearGUIDescription (); /** build XMLGUI menus @param parent the parent menu (or tag) (in the KXMLGUI) @param hierarchy_description the QDomElement containing the description for the new menu hierarchy @returns number of plugins/menu-entries added successfully */ int createMenus (QDomElement& parent, const QDomElement& hierarchy_description, const QString& cnamespace); /** recurse into a lower menu-level @param parent the parent menu (in the KXMLGUI) @param description the QDomElement containing the description for the new submenu @returns number of plugins/menu-entries added successfully */ int addSubMenu (QDomElement& parent, const QDomElement& description, const QString& cnamespace); /** helper function: Find a specified element, and return it. If the element could not be found, it is created instead. The first three parameters are used as search parameters (all have to match). The additional two parameters only take effect, if a new element is created. @param parent the QDomElement whose children to search through @param tagname the tagname to look for @param name value of the "name"-attribute to look for @param label the label to assign to the new element (if no existing match could be found) @param index the index position where to insert the new element in the list of children (if no existing match could be found). -1 means insert at the end of the list. */ QDomElement findOrCreateElement (QDomElement& parent, const QString& tagname, const QString& name, const QString& label, int index); /** an entry was added to the menu(s) somewhere. Reimplement, if you want to e.g. create a KAction for this */ virtual void addedEntry (const QString & /* id */, RKComponentHandle * /* handle */) {}; /** The generated XML GUI description in KDEs ui.rc format */ QDomDocument gui_xml; }; class RKContextMap; class RKPluginMapParseResult { public: RKPluginMapParseResult () : valid_plugins (0) {}; void add (const RKPluginMapParseResult &other) { detailed_problems.append (other.detailed_problems); valid_plugins += other.valid_plugins; }; void addAndPrintError (int level, const QString message); QStringList detailed_problems; int valid_plugins; }; /** This class (only a single instance should ever be needed) keeps a list of named components, which can be made accessible via the menu-structure or included in other plugins. What this class does is rather simple: It basically maps a two piece name (namespace, component name) to a short description of the component (RKComponentHandle). The most important part of that description is the filename where a more elaborate definition of the component can be retrieved. The RKComponentMap provides convenience functions for adding or removing a .pluginmap-file to/from the list of components, and looking up RKComponentHandle for a given component name. @author Thomas Friedrichsmeier */ class RKComponentMap : public RKComponentGUIXML, public KXMLGUIClient { public: RKComponentMap (); ~RKComponentMap (); /** adds all Plugins / components in a .pluginmap-file. Also takes care of creating the menu-items, etc. @returns status info of number of plugins (i.e. stand-alone components/menu-entries) added successfully / failed */ static RKPluginMapParseResult addPluginMap (const QString& plugin_map_file); /** clears out (and deletes) all components / plugins */ static void clearAll (); /** returns the component identified by id, 0 if not found */ static RKComponentHandle* getComponentHandle (const QString &id); /** look up the id of a component, empty string, if not found */ static QString getComponentId (RKComponentHandle* by_component); static RKComponentMap *getMap () { return component_map; }; static void initialize (); /** returns the context identified by id */ static RKContextMap *getContext (const QString &id); enum ComponentInvocationMode { ManualSubmit, AutoSubmit, AutoSubmitOrFail }; /** invokes the specified component as toplevel @param message If a non-null pointer to QString is given, error messages are written into this string *instead* of being displayed */ static bool invokeComponent (const QString &component_id, const QStringList &serialized_settings, ComponentInvocationMode submit_mode = ManualSubmit, QString *message=0, RCommandChain *in_chain = 0); /** @returns a list of all currently registered component ids */ QStringList allComponentIds () { return components.keys(); }; bool isPluginMapLoaded (const QString& abs_filename) { return pluginmapfiles.contains (abs_filename); }; private: /** typedef for easy reference to iterator */ typedef QMap ComponentMap; /** the actual map of components */ ComponentMap components; RKComponentHandle* getComponentHandleLocal (const QString &id); QString getComponentIdLocal (RKComponentHandle* component); RKContextMap *getContextLocal (const QString &id); RKPluginMapParseResult addPluginMapLocal (const QString& plugin_map_file); void clearLocal (); typedef QMap RKComponentContextMap; RKComponentContextMap contexts; typedef QMap PluginMapFileMap; PluginMapFileMap pluginmapfiles; static RKComponentMap *component_map; friend class RKComponentHandle; // most components have neither attributes specific dependencies (other than dependencies shared by all plugins in a pluginmap). // therefore, it saves a few bytes to store attributes and specific dependencies in a central map, rather than keeping structures // per plugin struct AttributeValueMap { QHash valuemap; QHash labelmap; }; QMap component_attributes; QHash > component_dependencies; protected: void addedEntry (const QString &id, RKComponentHandle *handle); }; #endif rkward-0.6.1/rkward/plugin/rkpreviewbox.cpp0000644000175000017500000001530012124345411020377 0ustar thomasthomas/*************************************************************************** rkpreviewbox - description ------------------- begin : Wed Jan 24 2007 copyright : (C) 2007, 2009, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkpreviewbox.h" #include #include #include #include #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "../misc/xmlhelper.h" #include "../windows/rkwindowcatcher.h" #include "../debug.h" #define START_DEVICE 101 #define DO_PLOT 102 RKPreviewBox::RKPreviewBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); preview_active = false; last_plot_done = true; new_plot_pending = false; dev_num = 0; // get xml-helper XMLHelper *xml = XMLHelper::getStaticHelper (); // create and add property addChild ("state", state = new RKComponentPropertyBool (this, true, preview_active, "active", "inactive")); state->setInternal (true); // restoring this does not make sense. connect (state, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (changedState (RKComponentPropertyBase *))); // create checkbox QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); toggle_preview_box = new QCheckBox (xml->getStringAttribute (element, "label", i18n ("Preview"), DL_INFO), this); vbox->addWidget (toggle_preview_box); toggle_preview_box->setChecked (preview_active); connect (toggle_preview_box, SIGNAL (stateChanged (int)), this, SLOT (changedState (int))); // status lable status_label = new QLabel (QString::null, this); vbox->addWidget (status_label); // find and connect to code property of the parent QString dummy; RKComponentBase *cp = parentComponent ()->lookupComponent ("code", &dummy); if (cp && dummy.isNull () && (cp->type () == PropertyCode)) { code_property = static_cast (cp); connect (code_property, SIGNAL (valueChanged (RKComponentPropertyBase *)), this, SLOT (changedCode (RKComponentPropertyBase *))); } else { RK_DEBUG (PLUGIN, DL_WARNING, "Could not find code property in preview box (remainder: %s)", dummy.toLatin1().data ()); code_property = 0; } // initialize update_timer = new QTimer (this); update_timer->setSingleShot (true); connect (update_timer, SIGNAL (timeout ()), this, SLOT (tryPreviewNow ())); updating = false; changedState (0); } RKPreviewBox::~RKPreviewBox () { RK_TRACE (PLUGIN); killPreview (); } void RKPreviewBox::changedState (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); if (updating) return; updating = true; toggle_preview_box->setChecked (state->boolValue ()); updating = false; tryPreview (); changed (); } void RKPreviewBox::changedCode (RKComponentPropertyBase *) { RK_TRACE (PLUGIN); tryPreview (); } void RKPreviewBox::changedState (int) { RK_TRACE (PLUGIN); state->setBoolValue (toggle_preview_box->isChecked ()); } void RKPreviewBox::tryPreview () { RK_TRACE (PLUGIN); if (isEnabled () && toggle_preview_box->isChecked ()) update_timer->start (10); else killPreview (); updateStatusLabel (); } void RKPreviewBox::previewWindowClosed () { RK_TRACE (PLUGIN); dev_num = 0; } void RKPreviewBox::tryPreviewNow () { RK_TRACE (PLUGIN); if (!code_property) return; ComponentStatus s = parentComponent ()->recursiveStatus (); if (s != Satisfied) { if (s == Processing) tryPreview (); else { RKCaughtX11Window::setStatusMessage (dev_num, i18n ("Preview not (currently) possible")); } return; } if (!last_plot_done) { // if the last plot is not done, yet, wait before starting the next. new_plot_pending = true; updateStatusLabel (); return; } preview_active = true; QString dummy; RKGlobals::rInterface ()->issueCommand (dummy.sprintf (".rk.startPreviewDevice (\"%p\")", this), RCommand::Plugin | RCommand::Sync | RCommand::GetIntVector, QString (), this, START_DEVICE); RKCaughtX11Window::setStatusMessage (dev_num, i18n ("Preview updating")); RKGlobals::rInterface ()->issueCommand ("local({\n" + code_property->preview () + "})\n", RCommand::Plugin | RCommand::Sync, QString (), this, DO_PLOT); last_plot_done = false; new_plot_pending = false; updateStatusLabel (); } void RKPreviewBox::killPreview () { RK_TRACE (PLUGIN); if (!preview_active) return; preview_active = false; QString command; RKGlobals::rInterface ()->issueCommand (command.sprintf (".rk.killPreviewDevice (\"%p\")", this), RCommand::Plugin | RCommand::Sync); last_plot_done = true; new_plot_pending = false; } void RKPreviewBox::rCommandDone (RCommand *command) { RK_TRACE (PLUGIN); last_plot_done = true; if (new_plot_pending) tryPreview (); if (command->getFlags () == START_DEVICE) { int old_devnum = dev_num; dev_num = command->intVector ().value (0, 0); if (dev_num != old_devnum) { disconnect (this, SLOT (previewWindowClosed())); RKCaughtX11Window *window = RKCaughtX11Window::getWindow (dev_num); if (window) connect (window, SIGNAL (destroyed(QObject*)), this, SLOT(previewWindowClosed())); } } else if (command->getFlags () == DO_PLOT) { QString warnings = command->warnings () + command->error (); if (!warnings.isEmpty ()) warnings = QString ("%1\n
    %2
    ").arg (i18n ("Warnings or Errors:")).arg (Qt::escape (warnings)); RKCaughtX11Window::setStatusMessage (dev_num, warnings); } updateStatusLabel (); } void RKPreviewBox::updateStatusLabel () { RK_TRACE (PLUGIN); if (!toggle_preview_box->isChecked ()) { status_label->setText (i18n ("Preview disabled")); } else { if (parentComponent ()->isSatisfied ()) { if (last_plot_done && (!new_plot_pending)) { status_label->setText (i18n ("Preview up to date")); } else { status_label->setText (i18n ("Preview updating")); } } else { status_label->setText (i18n ("Preview not (yet) possible")); } } } #include "rkpreviewbox.moc" rkward-0.6.1/rkward/plugin/rktabpage.h0000644000175000017500000000357612124345411017271 0ustar thomasthomas/*************************************************************************** rktabpage.cpp - description ------------------- begin : Wed Apr 5 2006 copyright : (C) 2006 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKTABPAGE_H #define RKTABPAGE_H #include "rkcomponent.h" #include class QDomElement; class QTabWidget; class KVBox; /** A passive component acting as a page in a tabbook. The only function is, that if the component is hidden, the corresponding tab in the tabbook is also hidden. @author Thomas Friedrichsmeier */ class RKTabPage : public RKComponent { Q_OBJECT public: RKTabPage (const QDomElement &element, RKComponent *parent_component, QTabWidget *parent_widget); ~RKTabPage (); // returns the page child elements should be drawn in KVBox *getPage () { return page; }; int type () { return ComponentTab; }; public slots: /** called when visibile or enabled properties change */ void visibleEnabledChanged (RKComponentPropertyBase *property); private: KVBox *page; QTabWidget *tabbook; int index; QString label; bool inserted; }; #endif rkward-0.6.1/rkward/plugin/rkpreviewbox.h0000644000175000017500000000474312124345411020055 0ustar thomasthomas/*************************************************************************** rkpreviewbox - description ------------------- begin : Wed Jan 24 2007 copyright : (C) 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPREVIEWBOX_H #define RKPREVIEWBOX_H #include "rkcomponent.h" #include "rkcomponentproperties.h" #include "../rbackend/rcommandreceiver.h" class QCheckBox; class QDomElement; class QLabel; class QTimer; /** This RKComponent provides a (togglable) automatic graphical preview. WARNING: This component violates some standards of "good component behavior", esp. by assuming several things about the nature of the parent component. So please do not take this as an example for basing other components on. @author Thomas Friedrichsmeier */ class RKPreviewBox : public RKComponent, public RCommandReceiver { Q_OBJECT public: RKPreviewBox (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKPreviewBox (); int type () { return ComponentPreviewBox; }; RKComponentPropertyBool *state; QVariant value (const QString &modifier=QString ()) { return (state->value (modifier)); }; public slots: void changedState (int); void changedState (RKComponentPropertyBase *); void changedCode (RKComponentPropertyBase *); void tryPreviewNow (); void previewWindowClosed (); protected: void rCommandDone (RCommand *); private: bool updating; // prevent recursion bool preview_active; bool last_plot_done; bool new_plot_pending; void tryPreview (); void killPreview (); void updateStatusLabel (); int dev_num; QTimer *update_timer; QCheckBox *toggle_preview_box; QLabel *status_label; RKComponentPropertyCode *code_property; }; #endif rkward-0.6.1/rkward/plugin/rkradio.h0000644000175000017500000000324112124345411016751 0ustar thomasthomas/*************************************************************************** rkradio.h - description ------------------- begin : Thu Nov 7 2002 copyright : (C) 2002, 2006, 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKRADIO_H #define RKRADIO_H #include "rkabstractoptionselector.h" class QButtonGroup; class QGroupBox; /** This RKPluginWidget provides a group of radio-buttons for use in plugins. @author Thomas Friedrichsmeier */ class RKRadio : public RKAbstractOptionSelector { Q_OBJECT public: RKRadio (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKRadio (); int type () { return ComponentRadio; }; protected: void setItemInGUI (int id); void addOptionToGUI (const QString &label, int id); void setItemEnabledInGUI (int id, bool enabled); private: QButtonGroup* group; QGroupBox* group_box; }; #endif rkward-0.6.1/rkward/plugin/rkcomponentmeta.cpp0000644000175000017500000002114712124345411021064 0ustar thomasthomas/*************************************************************************** rkcomponentmeta - description ------------------- begin : Wed Jan 09 2013 copyright : (C) 2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcomponentmeta.h" #include "../misc/xmlhelper.h" #include "../rbackend/rksessionvars.h" #include #include "../debug.h" QLatin1String rkward_min_version_tag ("rkward_min_version"); QLatin1String rkward_max_version_tag ("rkward_max_version"); QLatin1String R_min_version_tag ("R_min_version"); QLatin1String R_max_version_tag ("R_max_version"); QLatin1String any_min_version_tag ("min_version"); QLatin1String any_max_version_tag ("max_version"); RKComponentAboutData::RKComponentAboutData (const QDomElement& e) { RK_TRACE (PLUGIN); if (e.isNull ()) return; XMLHelper *xml = XMLHelper::getStaticHelper (); name = xml->getStringAttribute (e, "name", QString (), DL_INFO); version = xml->getStringAttribute (e, "version", QString (), DL_INFO); releasedate = xml->getStringAttribute (e, "releasedate", QString (), DL_INFO); shortinfo = xml->getStringAttribute (e, "shortinfo", QString (), DL_INFO); copyright = xml->getStringAttribute (e, "copyright", QString (), DL_INFO); license = xml->getStringAttribute (e, "license", QString (), DL_INFO); url = xml->getStringAttribute (e, "url", QString (), DL_INFO); category = xml->getStringAttribute (e, "category", i18n ("Unspecified"), DL_INFO); XMLChildList aes = xml->getChildElements (e, "author", DL_INFO); for (int i = 0; i < aes.size (); ++i) { QDomElement ae = aes[i]; RKComponentAuthor author; author.name = xml->getStringAttribute (ae, "name", QString (), DL_INFO); if (author.name.isEmpty ()) { author.name = xml->getStringAttribute (ae, "given", QString (), DL_WARNING) + " " + xml->getStringAttribute (ae, "family", QString (), DL_WARNING); } if (author.name.isEmpty ()) xml->displayError (&ae, "No author name specified", DL_WARNING); author.roles = xml->getStringAttribute (ae, "role", QString (), DL_INFO); author.email = xml->getStringAttribute (ae, "email", QString (), DL_WARNING); author.url = xml->getStringAttribute (ae, "url", QString (), DL_INFO); authors.append (author); } } RKComponentAboutData::~RKComponentAboutData () { RK_TRACE (PLUGIN); } QString RKComponentAboutData::toHtml () const { RK_TRACE (PLUGIN); QString ret = "

    " + name + ""; if (!version.isEmpty ()) ret.append (" " + version); if (!releasedate.isEmpty ()) ret.append (" (" + releasedate + ")"); if (!shortinfo.isEmpty ()) ret.append (":

    \n

    " + shortinfo); ret.append ("

    \n"); if (!url.isEmpty ()) ret.append ("URL: " + url + "

    \n

    "); if (!copyright.isEmpty ()) ret.append (i18n ("Copyright (c)") + ": " + copyright + "

    \n

    "); if (!license.isEmpty ()) ret.append (i18n ("License") + ": " + license + "

    \n

    "); if (!authors.isEmpty ()) { ret.append ("" + i18n ("Authors:") + "

    \n

      "); for (int i = 0; i < authors.size (); ++i) { RKComponentAuthor a = authors[i]; ret.append ("
    • " + a.name); if (!a.email.isEmpty ()) ret.append (" (" + a.email + ")"); if (!a.url.isEmpty ()) ret.append (" (" + a.url + ")"); if (!a.roles.isEmpty ()) ret.append ("
      " + i18nc ("Author roles (contributor, etc.)", "Roles") + ": " + a.roles); } ret.append ("
    "); } ret.append ("

    "); return ret; } bool RKComponentDependency::isRKWardVersionCompatible (const QDomElement& e) { RK_TRACE (PLUGIN); if (e.hasAttribute (rkward_min_version_tag)) { if (RKSessionVars::compareRKWardVersion (e.attribute (rkward_min_version_tag)) > 0) return false; } if (e.hasAttribute (rkward_max_version_tag)) { if (RKSessionVars::compareRKWardVersion (e.attribute (rkward_max_version_tag)) < 0) return false; } return true; } bool RKComponentDependency::isRVersionCompatible (const QDomElement& e) { RK_TRACE (PLUGIN); if (e.hasAttribute (R_min_version_tag)) { if (RKSessionVars::compareRVersion (e.attribute (R_min_version_tag)) > 0) return false; } if (e.hasAttribute (R_max_version_tag)) { if (RKSessionVars::compareRVersion (e.attribute (R_max_version_tag)) < 0) return false; } return true; } QList RKComponentDependency::parseDependencies (const QDomElement& e) { RK_TRACE (PLUGIN); QList ret; if (e.isNull ()) return ret; XMLHelper *xml = XMLHelper::getStaticHelper (); RKComponentDependency dep; // Check for R dependency, first. dep.type = RKComponentDependency::RBaseInstallation; if (e.hasAttribute (R_min_version_tag)) dep.min_version = RKSessionVars::parseVersionString (e.attribute (R_min_version_tag), 0); if (e.hasAttribute (R_max_version_tag)) dep.max_version = RKSessionVars::parseVersionString (e.attribute (R_max_version_tag), 0); if ((dep.min_version > 0) || (dep.max_version < 0xFFFFFFFF)) ret.append (dep); XMLChildList deps = xml->getChildElements (e, QString (), DL_INFO); for (int i = 0; i < deps.size (); ++i) { QDomElement dep_e = deps[i]; if (dep_e.tagName () == "package") { dep.type = RKComponentDependency::RPackage; dep.source_info = xml->getStringAttribute (e, "repository", QString (), DL_INFO); } else if (dep_e.tagName () == "pluginmap") { dep.type = RKComponentDependency::RKWardPluginmap; dep.source_info = xml->getStringAttribute (e, "url", QString ("http://rkward.sf.net"), DL_WARNING); } else { RK_DEBUG (PLUGIN, DL_ERROR, "Tag <%s> is not allowed, here.", qPrintable (dep_e.tagName ())); continue; } dep.package = xml->getStringAttribute (dep_e, "name", QString (), DL_ERROR); dep.min_version = 0; dep.max_version = 0xFFFFFFFF; if (e.hasAttribute (any_min_version_tag)) dep.min_version = RKSessionVars::parseVersionString (e.attribute (any_min_version_tag), 0); if (e.hasAttribute (any_max_version_tag)) dep.max_version = RKSessionVars::parseVersionString (e.attribute (any_max_version_tag), 0); ret.append (dep); } // Add RKWard dependency, last dep.type = RKComponentDependency::RKWardVersion; dep.min_version = 0; dep.max_version = 0xFFFFFFFF; dep.source_info.clear (); // Although we ignore it, here, RKWard dependencies may come with a non-numeric suffix QString suffix_dummy; if (e.hasAttribute (rkward_min_version_tag)) dep.min_version = RKSessionVars::parseVersionString (e.attribute (rkward_min_version_tag), &suffix_dummy); if (e.hasAttribute (rkward_max_version_tag)) dep.max_version = RKSessionVars::parseVersionString (e.attribute (rkward_max_version_tag), &suffix_dummy); if ((dep.min_version > 0) || (dep.max_version < 0xFFFFFFFF)) ret.append (dep); return ret; } QString numericVersionToString (quint32 numeric) { QString ret; for (int i = 3; i >= 0; --i) { int ver_part = (numeric >> (i * 8)) & 0x000000FF; ret.append (QString::number (ver_part)); if (i > 0) ret.append ('.'); } if (ret.endsWith (".0")) ret.chop (2); // HACK: Don't print more than three verison parts, unless the fourth is non-zero return ret; } QString RKComponentDependency::depsToHtml (const QList & deps) { RK_TRACE (PLUGIN); QString ret; if (deps.isEmpty ()) return ret; ret.append ("
      "); for (int i = 0; i < deps.size (); ++i) { ret.append ("
    • "); const RKComponentDependency &dep = deps[i]; if (dep.type == RBaseInstallation) { ret.append ("R"); } else if (dep.type == RKWardVersion) { ret.append ("RKWard"); } else { if (dep.type == RKWardPluginmap) ret.append (i18n ("RKWard plugin map")); else ret.append (i18n ("R package")); ret.append (" \"" + dep.package + "\""); if (!dep.source_info.isEmpty ()) ret.append (" (" + dep.source_info + ")"); } if (dep.min_version > 0) ret.append (" >= " + numericVersionToString (dep.min_version)); if (dep.max_version < 0xFFFFFFFF) ret.append (" <= " + numericVersionToString (dep.max_version)); ret.append ("
    • "); } ret.append ("
    "); return ret; } rkward-0.6.1/rkward/plugin/rkvarselector.h0000644000175000017500000000400112124345411020177 0ustar thomasthomas/*************************************************************************** rkvarselector.h - description ------------------- begin : Thu Nov 7 2002 copyright : (C) 2002, 2006, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKVARSELECTOR_H #define RKVARSELECTOR_H #include "rkcomponent.h" #include "rkcomponentproperties.h" class RKObjectListView; class QDomElement; /** This is an especially important RK-plugin-widget. It provides a list of variables, that can be selected for statistical analysis. It's major counterpart is the RKVarSlot-class, which "takes" variables selected from this list. Most of the time, you'll only have a single RKVarSelector in a GUI, but you can have more than one, e.g. for serving conceptionally different RKVarSlots. @author Thomas Friedrichsmeier */ class RKVarSelector : public RKComponent { Q_OBJECT public: RKVarSelector (const QDomElement &element, RKComponent *parent_component, QWidget *parent_widget); ~RKVarSelector (); int type () { return ComponentVarSelector; }; private slots: void objectSelectionChanged (); void rootChanged (); private: RKObjectListView *list_view; RKComponentPropertyRObjects *selected; RKComponentPropertyRObjects *root; }; #endif rkward-0.6.1/rkward/plugin/rkcomponentmeta.h0000644000175000017500000000421512124345411020526 0ustar thomasthomas/*************************************************************************** rkcomponentmeta - description ------------------- begin : Wed Jan 09 2013 copyright : (C) 2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMPONENTMETA_H #define RKCOMPONENTMETA_H #include #include struct RKComponentDependency { RKComponentDependency () : type (RBaseInstallation), min_version (0), max_version (0xFFFFFFFF) {}; QString toHtml () const; static QString depsToHtml (const QList &deps); enum DependencyType { RBaseInstallation, RPackage, RKWardPluginmap, RKWardVersion }; DependencyType type; QString package; QString source_info; quint32 min_version; quint32 max_version; static QList parseDependencies (const QDomElement &e); static bool isRKWardVersionCompatible (const QDomElement &e); static bool isRVersionCompatible (const QDomElement &e); }; struct RKComponentAuthor { QString name; QString email; QString url; QString roles; }; class RKComponentAboutData { public: RKComponentAboutData (const QDomElement &e); ~RKComponentAboutData (); QString toHtml () const; QString name; QString version; QString releasedate; QString shortinfo; QString copyright; QString license; QString url; QString category; QList authors; }; #endif rkward-0.6.1/rkward/plugin/rkstandardcomponent.cpp0000644000175000017500000010025312124345411021732 0ustar thomasthomas/*************************************************************************** rkstandardcomponent - description ------------------- begin : Sun Feb 19 2006 copyright : (C) 2006, 2007, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkstandardcomponent.h" #include #include #include #include #include #include #include #include #include #include #include #include "rkstandardcomponentgui.h" #include "../scriptbackends/qtscriptbackend.h" #include "../scriptbackends/simplebackend.h" #include "../scriptbackends/rkcomponentscripting.h" #include "../misc/xmlhelper.h" #include "../settings/rksettingsmoduleplugins.h" #include "../windows/rkmdiwindow.h" #include "../windows/rkworkplace.h" // component widgets #include "rkvarselector.h" #include "rkvarslot.h" #include "rkformula.h" #include "rkradio.h" #include "rkdropdown.h" #include "rkcheckbox.h" #include "rkpluginspinbox.h" #include "rkmatrixinput.h" #include "rkinput.h" #include "rkpluginbrowser.h" #include "rkpluginsaveobject.h" #include "rkpreviewbox.h" #include "rktext.h" #include "rktabpage.h" #include "rkpluginframe.h" #include "rkoptionset.h" #include "../rkglobals.h" #include "../debug.h" RKStandardComponent::RKStandardComponent (RKComponent *parent_component, QWidget *parent_widget, const QString &filename, RKComponentHandle *handle) : RKComponent (parent_component, parent_widget) { RK_TRACE (PLUGIN); RKStandardComponent::filename = filename; RKStandardComponent::handle = handle; command_chain = 0; backend = 0; scripting = 0; gui = 0; wizard = 0; created = false; killed = false; addChild ("code", code = new RKComponentPropertyCode (this, true)); // do not change this name! code->setInternal (true); RKComponentPropertyRObjects *current_object_property = new RKComponentPropertyRObjects (this, false); RKComponentPropertyRObjects *current_dataframe_property = new RKComponentPropertyRObjects (this, false); current_object_property->setInternal (true); current_dataframe_property->setInternal (true); RKMDIWindow *w = RKWorkplace::mainWorkplace ()->activeWindow (RKMDIWindow::AnyWindowState); if (w) current_object_property->setValue (w->globalContextProperty ("current_object")); if (current_object_property->objectValue () && current_object_property->objectValue ()->isDataFrame ()) current_dataframe_property->setObjectValue (current_object_property->objectValue ()); addChild ("current_object", current_object_property); addChild ("current_dataframe", current_dataframe_property); // open the main description file for parsing XMLHelper* xml = XMLHelper::getStaticHelper (); QDomElement doc_element = xml->openXMLFile (filename, DL_ERROR); if (xml->highestError () >= DL_ERROR) { KMessageBox::error (this, i18n ("There has been an error while trying to parse the description of this plugin ('%1'). Please refer to stdout for details.", filename), i18n ("Could not create plugin")); kill (); return; } // initialize the script backend with the code-template QDomElement element = xml->getChildElement (doc_element, "code", DL_WARNING); if (element.hasAttribute ("file")) { QString dummy = QFileInfo (filename).path() + '/' + xml->getStringAttribute (element, "file", "code.js", DL_WARNING); backend = new QtScriptBackend (dummy); } else { SimpleBackend *back = new SimpleBackend (); back->setPreprocessTemplate (xml->getStringAttribute (element, "preprocess", QString::null, DL_INFO)); back->setPrintoutTemplate (xml->getStringAttribute (element, "printout", QString::null, DL_INFO)); back->setCalculateTemplate (xml->getStringAttribute (element, "calculate", QString::null, DL_INFO)); back->setPreviewTemplate (xml->getStringAttribute (element, "preview", QString::null, DL_INFO)); backend = back; } connect (backend, SIGNAL (idle ()), this, SLOT (backendIdle ())); connect (backend, SIGNAL (requestValue (const QString&, const int)), this, SLOT (getValue (const QString&, const int))); connect (backend, SIGNAL (haveError ()), this, SLOT (kill ())); if (!backend->initialize (code, parent_component == 0)) return; // check for existence of help file element = xml->getChildElement (doc_element, "help", DL_WARNING); QString dummy = QFileInfo (filename).path() + '/' + xml->getStringAttribute (element, "file", "::nosuchfile::", DL_INFO); have_help = QFileInfo (dummy).exists (); update_pending = false; // construct the GUI if (!parent_component) { // top-level if (!createTopLevel (doc_element)) { RK_ASSERT (false); kill (); return; // should never happen } } else if (!parent_widget) { // we have a parent component, but should still have a separate GUI int force_mode = 1; if (parentComponent ()->isWizardish ()) force_mode = 2; if (!createTopLevel (doc_element, force_mode, true)) { RK_ASSERT (false); kill (); return; // should never happen } } else { bool build_wizard = false; QDomElement gui_element; if (parent_component->isWizardish ()) { build_wizard = true; gui_element = xml->getChildElement (doc_element, "wizard", DL_WARNING); if (gui_element.isNull ()) { gui_element = xml->getChildElement (doc_element, "dialog", DL_WARNING); build_wizard = false; QWidget *fake_page = parent_component->addPage (); QVBoxLayout *layout = new QVBoxLayout (fake_page); KVBox *box = new KVBox (fake_page); layout->addWidget (box); parent_widget = box; } } else { gui_element = xml->getChildElement (doc_element, "dialog", DL_WARNING); if (gui_element.isNull ()) { xml->displayError (&doc_element, "Cannot embed a wizard into a dialog, and no dialog definition available", DL_ERROR); kill (); return; } } buildAndInitialize (doc_element, gui_element, parent_widget, build_wizard); } } RKStandardComponent::~RKStandardComponent () { RK_TRACE (PLUGIN); if (gui) delete gui; // NOTE: *NOT* using gui->deleteLater (). Destructing the GUI immediately is necessary to get rid of child components, immediately. Otherwise these could try to access their (destroyed) parent, e.g. if they have a timer running that gets triggered before the deletion event arrives. backend->destroy (); // it will self-destruct, when it has closed the process. } void RKStandardComponent::kill () { RK_TRACE (PLUGIN); if (killed) return; killed = true; hide (); removeFromParent (); deleteLater (); } RKComponentScriptingProxy* RKStandardComponent::scriptingProxy () { RK_TRACE (PLUGIN); if (!scripting) { scripting = new RKComponentScriptingProxy (this); connect (scripting, SIGNAL (haveError ()), this, SLOT (kill ())); } return scripting; } void RKStandardComponent::hide () { RK_TRACE (PLUGIN); if (gui) gui->hide (); RKComponent::hide (); } void RKStandardComponent::showGUI () { RK_TRACE (PLUGIN); if (!gui) { RK_ASSERT (false); return; } gui->show (); gui->raise (); } void RKStandardComponent::setCaption (const QString &caption) { RK_TRACE (PLUGIN); if (!gui) return; gui->setWindowTitle (caption); } bool RKStandardComponent::createTopLevel (const QDomElement &doc_element, int force_mode, bool enslaved) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); bool build_wizard = false; QDomElement dialog_element; QDomElement wizard_element; dialog_element = xml->getChildElement (doc_element, "dialog", DL_INFO); wizard_element = xml->getChildElement (doc_element, "wizard", DL_INFO); if (force_mode == 0) { if (wizard_element.isNull ()) build_wizard = false; else if (dialog_element.isNull ()) build_wizard = true; else { // both are given if (RKSettingsModulePlugins::getInterfacePreference () == RKSettingsModulePlugins::PreferDialog) { build_wizard = false; } else if (RKSettingsModulePlugins::getInterfacePreference () == RKSettingsModulePlugins::PreferWizard) { build_wizard = true; } else { build_wizard = xml->getBoolAttribute (wizard_element, "recommended", false, DL_INFO); } } } else if (force_mode == 1) { build_wizard = false; if (dialog_element.isNull ()) { build_wizard = true; xml->displayError (&doc_element, "Dialog mode forced, but no dialog element given", DL_INFO); } } else if (force_mode == 2) { build_wizard = true; if (wizard_element.isNull ()) { build_wizard = false; xml->displayError (&doc_element, "Wizard mode forced, but no wizard element given", DL_INFO); } } if (build_wizard) { gui = new RKStandardComponentWizard (this, code, enslaved); static_cast (gui)->createWizard (!dialog_element.isNull ()); wizard = static_cast (gui)->getStack (); buildAndInitialize (doc_element, wizard_element, gui->mainWidget (), true, enslaved); static_cast (gui)->addLastPage (); } else { gui = new RKStandardComponentGUI (this, code, enslaved); gui->createDialog (!wizard_element.isNull ()); buildAndInitialize (doc_element, dialog_element, gui->mainWidget (), false, enslaved); } return true; } void RKStandardComponent::switchInterface () { RK_TRACE (PLUGIN); RK_ASSERT (gui); // this should only ever happen on top level // open the main description file for parsing (again) XMLHelper* xml = XMLHelper::getStaticHelper (); QDomElement doc_element = xml->openXMLFile (filename, DL_ERROR); int force_mode = 2; if (isWizardish ()) force_mode = 1; QMap value_save; // fetch current GUI settings fetchPropertyValuesRecursive (&value_save); discard (); createTopLevel (doc_element, force_mode); // set old GUI settings. For this purpose, we'll temporarily disable updates in the script backend created = false; setPropertyValues (&value_save); created = true; changed (); // now we can update } void RKStandardComponent::discard () { RK_TRACE (PLUGIN); created = false; gui->hide (); gui->deleteLater (); gui = 0; wizard = 0; // clear all properties. Not the code property, as the script backend relies on it for (QHash::const_iterator it = child_map.constBegin (); it != child_map.constEnd (); ++it) { if (it.value () != code) { if (it.value ()->isProperty ()) { static_cast (it.value ())->deleteLater (); } else { static_cast (it.value ())->deleteLater (); } } } child_map.clear (); addChild ("code", code); createDefaultProperties (); // enabledness, requiredness, visibility } void RKStandardComponent::buildAndInitialize (const QDomElement &doc_element, const QDomElement &gui_element, QWidget *parent_widget, bool build_wizard, bool enslaved) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); // create a builder RKComponentBuilder *builder = new RKComponentBuilder (this, doc_element); // go builder->buildElement (gui_element, parent_widget, build_wizard); builder->parseLogic (xml->getChildElement (doc_element, "logic", DL_INFO)); setCaption (xml->getStringAttribute (gui_element, "label", QString::null, DL_WARNING)); // initialize builder->makeConnections (); // done! delete builder; created = true; if (gui && (!enslaved)) { // somehow, when switching the interface, and we show before the old GUI has been fully deleted (it is deleted via deleteLater (), then there may be strange graphical glitches until the GUI is first redrawn completely. // Likely a difficult bug in Qt. Delaying the show until the next event loop solves the problem. QTimer::singleShot (0, gui, SLOT (show ())); } changed (); standardInitializationComplete (); } RKComponentBase::ComponentStatus RKStandardComponent::recursiveStatus () { RK_TRACE (PLUGIN); if (killed) return Dead; if (backend->isBusy () || update_pending) return Processing; return (RKComponentBase::recursiveStatus ()); } bool RKStandardComponent::submit (RCommandChain *in_chain) { RK_TRACE (PLUGIN); if (!isSatisfied ()) return false; RCommandChain *prev_chain = command_chain; command_chain = in_chain; gui->ok (); command_chain = prev_chain; return true; } void RKStandardComponent::close () { RK_TRACE (PLUGIN); if (gui && (!parentComponent ())) { QTimer::singleShot (0, gui, SLOT (close ())); } else { RK_ASSERT (false); } } void RKStandardComponent::changed () { RK_TRACE (PLUGIN); if (!created) return; if (gui) gui->enableSubmit (false); // don't trigger update twice if (!update_pending) { update_pending = true; QTimer::singleShot (0, this, SLOT (handleChange ())); } } void RKStandardComponent::handleChange () { RK_TRACE (PLUGIN); if (killed) return; update_pending = false; backend->preprocess (0); backend->calculate (0); backend->printout (0); backend->preview (0); if (gui) { gui->updateCode (); // will read "processing, please wait", or similar } RKComponent::changed (); } void RKStandardComponent::backendIdle () { RK_TRACE (PLUGIN); if (gui) { gui->updateCode (); gui->enableSubmit (isSatisfied ()); } RKComponent::changed (); // notify parent, if any } void RKStandardComponent::getValue (const QString &id, const int hint) { RK_TRACE (PLUGIN); RK_ASSERT (backend); backend->writeData (fetchValue (id, hint)); } bool RKStandardComponent::isWizardish () { RK_TRACE (PLUGIN); if (gui) return (wizard != 0); if (parentComponent ()) return (parentComponent ()->isWizardish ()); return false; } bool RKStandardComponent::havePage (bool next) { RK_TRACE (PLUGIN); RK_ASSERT (wizard); return (wizard->havePage (next)); } void RKStandardComponent::movePage (bool next) { RK_TRACE (PLUGIN); RK_ASSERT (wizard); wizard->movePage (next); } bool RKStandardComponent::currentPageSatisfied () { RK_TRACE (PLUGIN); RK_ASSERT (wizard); return (wizard->currentPageSatisfied ()); } RKComponent *RKStandardComponent::addPage () { RK_TRACE (PLUGIN); if (wizard) { RKComponent *page = wizard->addPage (this); return page; } else if (parentComponent ()) { RK_ASSERT (!gui); return parentComponent ()->addPage (); } RK_ASSERT (false); return RKComponent::addPage (); } void RKStandardComponent::addChild (const QString &id, RKComponentBase *child) { RK_TRACE (PLUGIN); if (wizard || (parentComponent () && parentComponent ()->isWizardish ())) { if (!child->isProperty ()) { addComponentToCurrentPage (static_cast(child)); } } RKComponent::addChild (id, child); } void RKStandardComponent::addComponentToCurrentPage (RKComponent *component) { RK_TRACE (PLUGIN); if (wizard) { wizard->addComponentToCurrentPage (component); } else if (parentComponent () && parentComponent ()->isWizardish ()) { parentComponent ()->addComponentToCurrentPage (component); } else { RK_ASSERT (false); } } /////////////////////////////////////// RKComponentBuilder ///////////////////////////////////////// #include "rkcomponentmap.h" #include RKComponentBuilder::RKComponentBuilder (RKComponent *parent_component, const QDomElement &document_element) { RK_TRACE (PLUGIN); parent = parent_component; doc_elem = document_element; while (!doc_elem.parentNode ().isNull ()) { doc_elem = doc_elem.parentNode ().toElement (); } } RKComponentBuilder::~RKComponentBuilder () { RK_TRACE (PLUGIN); } QDomElement RKComponentBuilder::doElementCopy (const QString id, const QDomElement ©) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); QDomElement res; if (id.isEmpty ()) { xml->displayError (©, "no id given for copy element", DL_ERROR, DL_ERROR); return res; // null } // find matching element to copy from XMLChildList candidates = xml->findElementsWithAttribute (doc_elem, "id", id, true, DL_ERROR); XMLChildList::const_iterator it; for (it = candidates.constBegin (); it != candidates.constEnd (); ++it) { if ((*it).tagName () == QLatin1String ("copy")) continue; res = (*it).cloneNode ().toElement (); break; } if (res.isNull ()) { xml->displayError (©, "no matching element found to copy from", DL_ERROR, DL_ERROR); return res; } // copy overridden attributes QDomNamedNodeMap attribs = copy.attributes (); int len = attribs.count (); for (int i=0; i < len; ++i) { QDomAttr attr = attribs.item (i).toAttr (); if (attr.name () == QLatin1String ("copy_element_tag_name")) res.setTagName (attr.value ()); else res.setAttribute (attr.name (), attr.value ()); } return res; } void RKComponentBuilder::buildElement (const QDomElement &element, QWidget *parent_widget, bool allow_pages) { RK_TRACE (PLUGIN); XMLHelper* xml = XMLHelper::getStaticHelper (); XMLChildList children = xml->getChildElements (element, QString::null, DL_ERROR); XMLChildList::const_iterator it; for (it = children.constBegin (); it != children.constEnd (); ++it) { RKComponent *widget = 0; QDomElement e = *it; // shorthand QString id = xml->getStringAttribute (e, "id", QString::null, DL_INFO); if (e.tagName () == QLatin1String ("copy")) { e = doElementCopy (id, e); } // no else, here. e may be changed to some entirely different element, now. if (allow_pages && (e.tagName () == QLatin1String ("page"))) { widget = component ()->addPage (); QVBoxLayout *layout = new QVBoxLayout (widget); KVBox *box = new KVBox (widget); layout->addWidget (box); buildElement (e, box, false); } else if (e.tagName () == QLatin1String ("row")) { widget = new RKComponent (component (), parent_widget); // wrapping this (and column, below) inside an RKComponent has the benefit, that it can have an id, and hence can be set to visibile/hidden, enabled/disabled QVBoxLayout *layout = new QVBoxLayout (widget); layout->setContentsMargins (0, 0, 0, 0); KHBox *box = new KHBox (widget); layout->addWidget (box); buildElement (e, box, false); } else if (e.tagName () == QLatin1String ("stretch")) { QWidget *stretch = new QWidget (parent_widget); stretch->setSizePolicy (QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); KHBox *box = dynamic_cast (parent_widget); // RK_ASSERT (box); <- NO, also meaningful in a if (box) box->setStretchFactor (stretch, 100); } else if (e.tagName () == QLatin1String ("column")) { widget = new RKComponent (component (), parent_widget); QVBoxLayout *layout = new QVBoxLayout (widget); layout->setContentsMargins (0, 0, 0, 0); KVBox *box = new KVBox (widget); layout->addWidget (box); buildElement (e, box, false); } else if (e.tagName () == QLatin1String ("frame")) { RKPluginFrame *frame = new RKPluginFrame (e, component (), parent_widget); widget = frame; buildElement (e, frame->getPage (), false); } else if (e.tagName () == QLatin1String ("tabbook")) { QTabWidget *tabbook = new QTabWidget (parent_widget); QDomNodeList tabs = e.childNodes (); for (int t=0; t < tabs.count (); ++t) { QDomElement tab_e = tabs.item (t).toElement (); if (tab_e.tagName () == QLatin1String ("tab")) { RKTabPage *tabpage = new RKTabPage (tab_e, component (), tabbook); buildElement (tab_e, tabpage->getPage (), false); QString tab_id = xml->getStringAttribute (tab_e, "id", QString::null, DL_INFO); if (!tab_id.isNull ()) { parent->addChild (tab_id, tabpage); } } } } else if (e.tagName () == QLatin1String ("varselector")) { widget = new RKVarSelector (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("varslot")) { widget = new RKVarSlot (e, component (), parent_widget); addConnection (id, "source", xml->getStringAttribute (e, "source", "#noid#", DL_INFO), "selected", false, e); } else if (e.tagName () == QLatin1String ("formula")) { widget = new RKFormula (e, component (), parent_widget); addConnection (id, "dependent", xml->getStringAttribute (e, "dependent", "#noid#", DL_INFO), "available", false, e); addConnection (id, "fixed_factors", xml->getStringAttribute (e, "fixed_factors", "#noid#", DL_INFO), "available", false, e); } else if (e.tagName () == QLatin1String ("radio")) { widget = new RKRadio (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("dropdown")) { widget = new RKDropDown (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("checkbox")) { widget = new RKCheckBox (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("spinbox")) { widget = new RKPluginSpinBox (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("matrix")) { widget = new RKMatrixInput (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("input")) { widget = new RKInput (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("browser")) { widget = new RKPluginBrowser (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("text")) { widget = new RKText (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("preview")) { widget = new RKPreviewBox (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("saveobject")) { widget = new RKPluginSaveObject (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("embed")) { QString component_id = xml->getStringAttribute (e, "component", QString::null, DL_ERROR); RKComponentHandle *handle = RKComponentMap::getComponentHandle (component_id); if (handle) { if (xml->getBoolAttribute (e, "as_button", false, DL_INFO)) { RKStandardComponent* swidget = handle->invoke (component (), 0); widget = swidget; QString dummy = xml->getStringAttribute (e, "label", "Options", DL_WARNING); swidget->setCaption (dummy); // TODO we should use a specialized pushbutton, that changes color if the corresponding component is dissatisfied! QPushButton *button = new QPushButton (dummy, parent_widget); component ()->connect (button, SIGNAL (clicked ()), widget, SLOT (showGUI ())); } else { widget = handle->invoke (component (), parent_widget); } } else { xml->displayError (&e, QString ("Could not embed component '%1'. Not found").arg (component_id), DL_ERROR); } } else if (e.tagName () == QLatin1String ("optionset")) { widget = new RKOptionSet (e, component (), parent_widget); } else if (e.tagName () == QLatin1String ("optiondisplay")) { RKComponent *set = component ()->parentComponent (); if (set->type () == RKComponentBase::ComponentOptionSet) { widget = static_cast (set)->createDisplay (xml->getBoolAttribute (e, "index", true, DL_INFO), parent_widget); } else { xml->displayError (&e, QString ("optiondisplay element is not allowed outside of an optionset"), DL_ERROR); } } else if (e.tagName () == QLatin1String ("scriptable")) { widget = new RKComponent (component (), parent_widget); QVBoxLayout *layout = new QVBoxLayout (widget); layout->setContentsMargins (0, 0, 0, 0); KVBox *box = new KVBox (widget); layout->addWidget (box); QString id_adjust; parent->standardComponent (&id_adjust)->scriptingProxy ()->addScriptableWidget (id_adjust + id, widget); } else { xml->displayError (&e, QString ("Invalid tagname '%1'").arg (e.tagName ()), DL_ERROR); } if (widget && (!(id.isNull ()))) { parent->addChild (id, widget); } } } void RKComponentBuilder::parseLogic (const QDomElement &element, bool allow_script_tag) { RK_TRACE (PLUGIN); if (element.isNull ()) return; // find connect elements XMLHelper* xml = XMLHelper::getStaticHelper (); XMLChildList children = xml->getChildElements (element, "connect", DL_INFO); XMLChildList::const_iterator it; for (it = children.constBegin (); it != children.constEnd (); ++it) { addConnection (xml->getStringAttribute (*it, "client", "#noid#", DL_WARNING), QString::null, xml->getStringAttribute (*it, "governor", "#noid#", DL_WARNING), QString::null, xml->getBoolAttribute (*it, "reconcile", false, DL_INFO), element); } // find initialize elements children = xml->getChildElements (element, "set", DL_INFO); for (it = children.constBegin (); it != children.constEnd (); ++it) { initial_values.insert (xml->getStringAttribute (*it, "id", "#noid#", DL_WARNING), xml->getStringAttribute (*it, "to", "false", DL_WARNING)); } children = xml->getChildElements (element, "dependency_check", DL_INFO); for (it = children.constBegin (); it != children.constEnd (); ++it) { RKComponentPropertyBool *dep = new RKComponentPropertyBool (component (), false); dep->setInternal (true); dep->setBoolValue (RKComponentDependency::isRKWardVersionCompatible (*it) && RKComponentDependency::isRVersionCompatible (*it)); component ()->addChild (xml->getStringAttribute (*it, "id", "#noid#", DL_WARNING), dep); } // find outside elements children = xml->getChildElements (element, "external", DL_INFO); for (it = children.constBegin (); it != children.constEnd (); ++it) { QString id = xml->getStringAttribute (*it, "id", "#noid#", DL_WARNING); RKComponentPropertyBase *prop = new RKComponentPropertyBase (component (), xml->getBoolAttribute (*it, "required", false, DL_INFO)); component ()->addChild (id, prop); prop->setInternal (true); component ()->connect (prop, SIGNAL (valueChanged (RKComponentPropertyBase *)), component (), SLOT (outsideValueChanged (RKComponentPropertyBase *))); QString dummy = xml->getStringAttribute (*it, "default", QString::null, DL_INFO); if (!dummy.isNull ()) { initial_values.insert (id, dummy); } // TODO add more options } // find convert elements QMap switch_convert_sources; children = xml->getChildElements (element, "convert", DL_INFO); for (it = children.constBegin (); it != children.constEnd (); ++it) { RKComponentPropertyConvert *convert = new RKComponentPropertyConvert (component ()); convert->setInternal (true); QString id = xml->getStringAttribute (*it, "id", "#noid#", DL_WARNING); int mode = xml->getMultiChoiceAttribute (*it, "mode", convert->convertModeOptionString (), 0, DL_WARNING); convert->setMode ((RKComponentPropertyConvert::ConvertMode) mode); if ((mode == RKComponentPropertyConvert::Equals) || (mode == RKComponentPropertyConvert::NotEquals)) { convert->setStandard (xml->getStringAttribute (*it, "standard", QString::null, DL_WARNING)); } else if (mode == RKComponentPropertyConvert::Range) { convert->setRange (xml->getDoubleAttribute (*it, "min", -FLT_MAX, DL_INFO), xml->getDoubleAttribute (*it, "max", FLT_MAX, DL_INFO)); } switch_convert_sources.insert (convert, xml->getStringAttribute (*it, "sources", QString::null, DL_WARNING).split (';')); convert->setRequireTrue (xml->getBoolAttribute (*it, "require_true", false, DL_INFO)); component ()->addChild (id, convert); } // find switch elements children = xml->getChildElements (element, "switch", DL_INFO); for (it = children.constBegin (); it != children.constEnd (); ++it) { QDomElement t = xml->getChildElement (*it, "true", DL_INFO); QDomElement f = xml->getChildElement (*it, "false", DL_INFO); if (t.isNull () != f.isNull ()) { xml->displayError (&(*it), "One of / was provided for boolean , but not the other. Skipping switch.", DL_ERROR); continue; } XMLChildList case_elems = xml->getChildElements (*it, "case", DL_INFO); QDomElement default_elem = xml->getChildElement (*it, "default", DL_INFO); if (!default_elem.isNull ()) case_elems.append (default_elem); if (t.isNull ()) { if (case_elems.isEmpty ()) { xml->displayError (&(*it), "Neither / nor / were provided. Skipping switch.", DL_ERROR); continue; } } else { if (!case_elems.isEmpty ()) { xml->displayError (&(*it), "One / *or* / may be provided a . Proceeding with boolean switch.", DL_ERROR); case_elems.clear (); } case_elems.append (f); case_elems.append (t); } QStringList def_strings; QStringList standards; QStringList sources; sources.append (xml->getStringAttribute (*it, "condition", QString (), DL_ERROR)); // store condition prop as first "source" for (XMLChildList::const_iterator cit = case_elems.constBegin (); cit != case_elems.constEnd (); ++cit) { def_strings.append (xml->getStringAttribute (*cit, "fixed_value", QString (), DL_INFO)); sources.append (xml->getStringAttribute (*cit, "dynamic_value", QString (), DL_INFO)); if ((*cit).tagName () == "case") standards.append (xml->getStringAttribute (*cit, "standard", QString (), DL_WARNING)); } QString id = xml->getStringAttribute (*it, "id", "#noid#", DL_WARNING); RKComponentPropertySwitch *switchel = new RKComponentPropertySwitch (component (), def_strings, standards); switchel->setInternal (true); switch_convert_sources.insert (switchel, sources); component ()->addChild (id, switchel); } // resolve source properties for switch and convert elements, *after* all properties have been created for (QMap::const_iterator it = switch_convert_sources.constBegin (); it != switch_convert_sources.constEnd (); ++it) { if (it.key ()->type () == RKComponentBase::PropertyConvert) { static_cast (it.key ())->setSources (it.value ()); } else { RK_ASSERT (it.key ()->type () == RKComponentBase::PropertySwitch); QStringList sources = it.value (); if (sources.isEmpty ()) { RK_ASSERT (!sources.isEmpty ()); continue; } static_cast (it.key ())->setSources (sources.takeFirst (), sources); } } QDomElement e = xml->getChildElement (element, "script", DL_INFO); if (!e.isNull () && allow_script_tag) { QString file = xml->getStringAttribute (e, "file", QString (), DL_INFO); QString inline_command = e.text (); parent->standardComponent ()->scriptingProxy ()->initialize (file, inline_command); } else if (!e.isNull ()) { xml->displayError (&e, "\n", sep="")) # positioning of the TOC is done by CSS, default state is hidden # see $SRC/rkward/pages/rkward_output.css if (!is.null (additional.header.contents)) .rk.cat.output (as.character (additional.header.contents)) .rk.cat.output ("\n\n") # This initial output mostly to indicate the output is really there, just empty for now .rk.cat.output (paste ("\n
    RKWard output initialized on", .rk.date (), "
    \n")) # an empty
    where the TOC menu gets added to dynamically, and a second one to toggle show/hide .rk.cat.output (paste ( "
    \n", "\tHide TOC\n", "\tGo to top\n
    ", "\t\t\n\t\t\t1 •\n", "\t\t\t2 •\n", "\t\t\t3 •\n", "\t\t\t4\n\t\t\n", "\t\n
    \n", "
    \n", "\tShow TOC\n", "\tGo to top\n", "
    \n", sep="")) } # needs to come after initialization, so initialization alone does not trigger an update during startup .rk.do.plain.call ("set.output.file", x, synchronous=FALSE) invisible (NULL) } # Internal helper function to extract file names of images used in html files. # Almost definitely, this could be simplified, but I'll leave that as an exercise to the reader ;-) # Note that this uses heuristics, rather than real parsing ".rk.get.images.in.html.file" <- function (file) { lines <- readLines (file) lines <- grep ("<(img|object)", lines, ignore.case=TRUE, value=TRUE) files <- character (0) for (line in lines) { slines <- strsplit (line, "<")[[1]] for (sline in slines) { sline <- toupper (sline) if (substring (sline, 0, 3) == "IMG") { parts <- strsplit (sline, "SRC")[[1]] if (length (parts) < 2) next parts <- strsplit (parts[2], "\"")[[1]] if (length (parts) < 2) next files <- c (files, parts[2]) } else if (substring (sline, 0, 6) == "OBJECT") { parts <- strsplit (sline, "DATA")[[1]] if (length (parts) < 2) next parts <- strsplit (parts[2], "\"")[[1]] if (length (parts) < 2) next files <- c (files, parts[2]) } } } files } #' @export #' @rdname rk.get.tempfile.name "rk.flush.output" <- function (x=rk.get.output.html.file (), flush.images=TRUE, ask=TRUE) { images <- character (0) if (flush.images) images <- .rk.get.images.in.html.file (x) desc <- x if (length (images)) { desc <- paste (x, ", along with ", length (images), " image files", sep="") } if (isTRUE (ask)) { if (!rk.show.question (paste ("Do you really want to flush the output file (", desc, ")?\nIt will not be possible to restore it.", sep=""))) stop ("Aborted by user") } unlink (x) try ( for (image in images) { unlink (image) } ) rk.set.output.html.file (x) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rkward-package.R0000644000175000017500000000162612124345416024073 0ustar thomasthomas#' Provides functions related to the RKWard GUI. #' #' \tabular{ll}{ #' Package: \tab rkward\cr #' Type: \tab Package\cr #' Version: \tab 0.6.0\cr #' Date: \tab 2012-09-29\cr #' Depends: \tab R (>= 2.9.0),methods\cr #' Encoding: \tab UTF-8\cr #' License: \tab GPL (>= 2)\cr #' LazyLoad: \tab yes\cr #' URL: \tab http://rkward.sourceforge.net\cr #' } #' #' This package contains functions which are useful in combination with the RKWard GUI. Many of these #' functions only needed for the internal communication between RKWard and R, but some are also useful in user scripts. #' #' @aliases rkward-package rkward #' @name rkward-package #' @docType package #' @title Provides functions related to the RKWard GUI. #' @author Thomas Friedrichsmeier \email{thomas.friedrichsmeier@@ruhr-uni-bochum.de}, with contributions from RKWard-devel mailing list \email{rkward-devel@@lists.sourceforge.net} #' @keywords package NULL rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.demo.R0000644000175000017500000000220212124345416022536 0ustar thomasthomas#' Opens an R demo script for editing #' #' \code{rk.demo} behaves similar to \code{\link{demo}}, but opens the demo #' script for editing, instead of sourcing it. Contrary to \code{\link{demo}}, #' the specification of a topic is mandatory. #' #' @param topic topic of the example #' @param package package(s) to search for the demo. If NULL (the default), all #' currently loaded packages are searched. #' @param lib.loc Library locations. #' @return Return \code{NULL}, unconditionally. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{rk.edit.files}}, \code{\link{rk.show.files}}, #' \code{\link{demo}} #' @keywords utilities IO #' @rdname rk.demo #' @export #' @examples #' #' ## Not run #' rk.demo("graphics") "rk.demo" <- function (topic, package=NULL, lib.loc=NULL) { if (is.null (package)) { package <- .packages (lib.loc=lib.loc) } loc <- "" for (p in package) { loc <- system.file ("demo", paste (topic, ".R", sep=""), package=p, lib.loc=lib.loc) if (loc != "") break } if (loc == "") stop ("No demo found for topic'", topic, "'") rk.edit.files (loc, prompt=FALSE) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.plugin-functions.R0000644000175000017500000001402212124345416025121 0ustar thomasthomas#' Call or list built-in RKWard plugin(s) #' #' \code{rk.call.plugin} provides a high level wrapper to call any plugin #' available in RKWard. The exact string to be used as \code{plugin}, and the #' list of arguments available for a particular plugin, are generally not #' transparent to the user.\code{rk.list.plugins} can be used to obtain a list #' of current plugins. For plugin arguments, it is recommended to run the #' plugin, and inspect the "Run again" link that is generated on the output. #' #' \bold{Warning}: Using \code{rk.call.plugin}, especially with submit.modes #' \code{"auto"} or \code{"submit"} to program a sequence of analyses has #' important drawbacks. First, the semantics of plugins are not guaranteed to #' remain unchanged across different versions of RKWard, thus your code may #' stop working after an upgrade. Second, your code will not be usable outside #' of an RKWard session. Consider copying the generated code for each plugin, #' instead. The primary use-cases for \code{rk.call.plugin} are automated #' tests, cross-references, and scripted tutorials. #' #' \bold{Note}: Even when using \code{"submit.mode=submit"}, the plugin code is #' run in the global context. Any local variables of the calling context are #' not available to the plugin. #' #' \code{rk.list.plugins} returns the list of the names of all currently #' registered plugins. #' #' @aliases rk.call.plugin rk.list.plugins #' @param plugin character string, giving the name of the plugin to call. See #' Details. #' @param \dots arguments passed to the \code{plugin} #' @param submit.mode character string, specifying the submission mode: #' \code{"manual"} will open the plugin GUI and leave it to the user to #' submit it manually, \code{"auto"} will try to submit the plugin, if it can #' be submitted with the current settings (i.e. if the "Submit"-button is #' enabled after applying all specified parameters). If the plugin cannot be #' submitted, with the current settings, it will behave like \code{"manual"}. #' \code{"submit"} is like \code{"auot"}, but will close the plugin, and #' generate an error, if it cannot be submitted. \code{"manual"} will always #' return immediately, \code{"auto"} may or may not return immediately, and #' \code{"submit"} will always wait until the plugin has been run, or produce #' an error. #' @return \code{rk.call.plugin} returns \code{TRUE} invisibly. #' #' \code{rk.list.plugins} returns a character vector of plugin names. If none #' found, \code{NULL} is returned. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{rk.results}}, \url{rkward://page/rkward_output} #' @keywords utilities #' @rdname rk.call.plugin #' @examples #' #' ## list all current plugins #' rk.list.plugins () #' #' ## "t_test_two_vars" plugin: #' ## see the output: Windows->Show Output #' local({ #' x1 <- rnorm (100) #' x2 <- rnorm (100, 2) #' #' rk.call.plugin ("rkward::t_test_two_vars", #' confint.state="1", conflevel.real="0.95", hypothesis.string="greater", paired.state="0", varequal.state="0", #' x.available="x1", y.available="x2", #' submit.mode="submit") #' }) #' # list all available plugins in RKWard; this is a companion function for rk.call.plugin: # the output provides possible strings for "plugin" argument in rk.call.plugin #' @export rk.list.plugins <- function () { .rk.do.plain.call ("listPlugins") } #' @export #' @rdname rk.call.plugin "rk.call.plugin" <- function (plugin, ..., submit.mode = c ("manual", "auto", "submit")) { # prepare arguments settings <- list (...) callstrings <- list () callstrings[1] <- plugin callstrings[2] <- match.arg (submit.mode) if (length (settings) > 0) { for (i in 1:length(settings)) { # properly passing on escaped characters is a pain. This seems to work. deparsed <- deparse (settings[[i]]) deparsed_unquoted <- substr (deparsed, 2, nchar (deparsed) - 1) callstrings[i + 2] <- paste(names(settings)[i], deparsed_unquoted, sep = "=") } } # do call res <- .rk.do.call ("doPlugin", callstrings) # handle result if (!is.null (res)) { if (res$type == "warning") { warning (res$message) } else { stop (res$message) } } invisible (TRUE) } #' (Re-)load the given pluginmap files into the RKWard GUI #' #' @param pluginmap.files a character vector of file names to add. This may be left empty, #' if the only desired effect is to reload all active pluginmaps. #' @param force.add logical. Whether the pluginmap files should also be added, if they had #' been previously de-selected in the settings menu, and regardless of their #' priority setting. In scripted usage, this should generally be set to FALSE. #' @param force.reload logical. By default the active pluginmaps are reloaded, only if any new ones #' were added. If set to TRUE, pluginmaps are reloaded in any case. In #' scripted usage, this should generally be set to FALSE. NOTE: Since #' a reload always means reloading _all_ active pluginmaps, This may be #' slow, and should be used with care. #' #' \bold{Note}: It is not necessary to reload the pluginmap, in order to refresh an individual #' plugin (e.g. after modifying the dialog), as plugins are not kept in memory after closing. #' Any currently opened plugins are not affected by this function. #' #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{rk.call.plugin}}, @seealso \code{\link{rkwarddev::rk.plugin.skeleton}} #' @keywords utilities #' #' @examples #' #' ## NOT RUN #' #' ## reload all active pluginmaps #' rk.load.pluginmaps() #' #' ## END NOT RUN #' @export #' @rdname rk.load.pluginmaps "rk.load.pluginmaps" <- function (pluginmap.files=NULL, force.add = TRUE, force.reload = TRUE) { .rk.do.plain.call ("loadPluginMaps", c (ifelse (isTRUE (force.add), "force", "noforce"), ifelse (isTRUE (force.reload), "reload", "noreload"), as.character (pluginmap.files)), synchronous=FALSE) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.workspace-functions.R0000644000175000017500000000562712124345416025634 0ustar thomasthomas#' Save or restore RKWard workplace #' #' \code{rk.save.workplace} can be used to save a representation of the RKWard #' workplace (i.e. which scripts, data edtiors and other windows are shown) to #' a file. \code{rk.restore.workplace} restores an RKWard workplace as saved by #' \code{rk.save.workplace}. #' #' If the \code{file} parameter is omitted (or \code{NULL}), a suitable #' filename is selected automatically. If a workspace has been loaded, this is #' the URL of the workspace with an appended \code{.rkworkplace}. Otherwise a #' filename in the RKWard directory, as generated by #' \link{rk.get.tempfile.name}. #' #' NOTE: Not all types of windows can be saved and restored. Esp. graphics #' device windows will not be restored (but WILL be closed by #' \code{rk.restore.workplace()}, if \code{close.windows} is TRUE). #' #' @aliases rk.save.workplace rk.restore.workplace #' @param file a character string giving the url of the file to save to, or #' NULL for automatic selection of a suitable file (see Details). #' @param description For internal use, only. A character string describing the #' workplace status to save. Generally, you should leave this as the default #' value (\code{NULL}). #' @param close.windows a logical; whether current windows should be closed #' before restoring. #' @return Both functions return \code{NULL}. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \url{rkward://page/rkward_for_r_users}, \link{rk.get.workspace.url} #' @keywords utilities #' @rdname rk.workplace #' @examples #' #' ## Not run #' rk.save.workplace () #' rk.restore.workplace () #' ## End not run #' #' @export "rk.save.workplace" <- function (file=NULL, description=NULL) { if (is.null (file)) { file <- URLdecode (rk.get.workspace.url ()) if (is.null (file)) file <- rk.get.tempfile.name (prefix="unsaved", extension=".RData") file <- paste (file, "rkworkplace", sep=".") } if (is.null (description)) lines <- .rk.do.plain.call ("workplace.layout", "get") else lines <- description writeLines (lines, file) } #' @rdname rk.workplace #' @export "rk.restore.workplace" <- function (file=NULL, close.windows=TRUE) { if (is.null (file)) { if (exists (".rk.workplace.save", envir=globalenv (), inherits=FALSE)) { # For backwards compatibility with workspaces saved by RKWard 0.5.4 and earlier. # TODO: remove in time. lines <- as.character (.GlobalEnv$.rk.workplace.save) rm (list = c (".rk.workplace.save"), envir=globalenv ()) } else { file <- URLdecode (rk.get.workspace.url ()) if (is.null (file)) file <- rk.get.tempfile.name (prefix="unsaved", extension=".RData") file <- paste (file, "rkworkplace", sep=".") } } close <- "close" if (!isTRUE (close.windows)) close <- "noclose" if (!exists ("lines", inherits=FALSE)) lines <- readLines (file) .rk.do.plain.call ("workplace.layout", c ("set", close, lines), synchronous=FALSE) invisible (NULL) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/internal.R0000644000175000017500000003766012124345416023033 0ustar thomasthomas# check the context in which this package is loaded #' @export .onAttach <- function(...) { .rk.inside.rkward.session(warn = TRUE) } # this function shall test if the rkward package was loaded in a running RKWard session #' @export .rk.inside.rkward.session <- function(warn = FALSE){ inside.rkward <- is.loaded("rk.do.generic.request") if(isTRUE(warn) & !isTRUE(inside.rkward)){ warning("You've loaded the package 'rkward', but RKWard doesn't appear to be running. If this causes trouble, try detach(\"package:rkward\").", call. = FALSE) } return(inside.rkward) } #' @export ".rk.get.meta" <- function (x) { y <- attr (x, ".rk.meta"); c (names (y), as.character (y)) } #' @export ".rk.set.meta" <- function (x, m) { eval (substitute (attr (x, ".rk.meta") <<- m)) } ".rk.set.invalid.field" <- function (x, row, value) { l <- attr (x, ".rk.invalid.fields"); if (is.null (l)) l <- list (); l[[as.character(row)]] <- value; if (length (l) == 0) l <- NULL eval (substitute (attr (x, ".rk.invalid.fields") <<- l)) } #' Work around some peculiarities in R's handling of levels #' @export ".rk.set.levels" <- function (var, levels) { if (is.factor (var)) { if (is.null (levels)) levels <- NA # must never set NULL levels on a factor old_l <- levels (var) # using attr (..., "levels) instead of levels (...) in order to bypass checking eval (substitute (attr (var, "levels") <<- levels)) if ((length (var) > 0) && (is.null (old_l) || ((length (old_l) == 1L) && is.na (old_l[1L])))) { # if levels were empty, this means var is all NAs. R will set all to first level, instead, in some cases len <- length (var) eval(substitute(var[1:len] <<- NA)) } } else { eval (substitute (attr (var, "levels") <<- levels)) } } #' @export ".rk.set.invalid.fields" <- function (x, set, values, clear) { l <- attr (x, ".rk.invalid.fields"); if (is.null (l)) l <- list (); if (!missing (set)) { set <- as.character (set) l[set] <- as.character (values) } if (!missing (clear)) { l[as.character (clear)] <- NULL } if (length (l) == 0) l <- NULL eval (substitute (attr (x, ".rk.invalid.fields") <<- l)) } #' @export ".rk.data.frame.insert.row" <- function (x, index=0) { if ((index == 0) || (index > dim (x)[1])) { # insert row at end eval (substitute (x[dim(x)[1]+1,] <<- c (NA))) } else { for (i in dim (x)[1]:index) { eval (substitute (x[i+1,] <<- x[i,])) } eval (substitute (row.names (x) <<- c (1:dim(x)[1]))) eval (substitute (x[index,] <<- c (NA))) } } # TODO: is there a nice way to get rid of a row without removing the meta-data? #' @export ".rk.data.frame.delete.row" <- function (x, index) { attriblist <- list () for (i in 1:dim (x)[2]) { attriblist[[names (x)[i]]] <- attributes (x[[i]]) } newx <- x[-index, , drop=FALSE] row.names (newx) <- c (1:dim(newx)[1]) for (i in 1:dim (newx)[2]) { attributes (newx[[i]]) <- attriblist[[names (newx)[i]]] } eval (substitute (x <<- newx)) } # function below is only needed to ensure a nice ordering of the columns. Simply adding a new column would be much easier than this. #' @export ".rk.data.frame.insert.column" <- function (x, label, index=0) { column <- rep (as.numeric (NA), times=dim (x)[1]) if ((index == 0) || (index > dim (x)[2])) { # insert column at end eval (substitute (x[[label]] <<- column)) } else { for (i in dim (x)[2]:index) { eval (substitute (x[i+1] <<- x[[i]])) eval (substitute (names (x)[i+1] <<- names (x)[i])) } eval (substitute (x[index] <<- column)) eval (substitute (names (x)[index] <<- label)) } } #' @export ".rk.do.error" <- function () { # comment in R sources says, it may not be good to query options during error handling. But what can we do, if R_ShowErrorMessages is not longer exported? if (getOption ("show.error.messages")) { .Call ("rk.do.error", c (geterrmessage ()), PACKAGE="(embedding)"); } } #' @export ".rk.set.reply" <- function (x) .rk.variables$.rk.rkreply <- x #' @export ".rk.do.call" <- function (x, args=NULL) { .rk.set.reply (NULL) .Call ("rk.do.command", c (x, args), PACKAGE="(embedding)"); return (.rk.variables$.rk.rkreply) } #' @export ".rk.do.plain.call" <- function (x, args=NULL, synchronous=TRUE) { .Call ("rk.do.generic.request", c (x, args), isTRUE (synchronous), PACKAGE="(embedding)") } #' @export ".rk.find.package.pluginmaps" <- function (package, all.maps=FALSE) { if(isTRUE(all.maps)){ # look for all pluginmaps in the rkward folder pluginmaps <- sapply(package, function(this.package){ dir(system.file("rkward", package=this.package), pattern="*.pluginmap", full.names=TRUE) }) } else { # check if a main .pluginmap file is provided pluginmaps <- sapply(package, function(this.package){ system.file(file.path("rkward", paste(this.package, ".pluginmap", sep="")), package=this.package) }) } return(pluginmaps) } # Gather status information on installed and available packages. # Return value is used in class RKRPackageInstallationStatus of the frontend #' @export ".rk.get.package.intallation.state" <- function () { # fetch all status information available <- .rk.cached.available.packages () inst <- installed.packages (fields="Title") old <- as.data.frame (rk.old.packages (available=available), stringsAsFactors=FALSE) new <- new.packages (instPkgs=inst, available=available) # convert info to a more suitable format available <- as.data.frame (available, stringsAsFactors=FALSE) inst <- as.data.frame (inst, stringsAsFactors=FALSE) oldinst <- match (paste (old$Package, old$LibPath), paste (inst$Package, inst$LibPath)) # convert package names to position with in the installed packages info oldavail <- match (old$Package, available$Package) # convert package names to position with in the available packages info new <- match (new, available$Package) # same for new packages # as a side effect, we update the list of known installed packages in the frontend .rk.do.plain.call ("updateInstalledPackagesList", sort (unique (as.character (inst$Package))), synchronous=FALSE) list ("available" = list (available$Package, available$Title, available$Version, available$Repository, grepl ("rkward", available$Enhances)), "installed" = list (inst$Package, inst$Title, inst$Version, inst$LibPath, grepl ("rkward", inst$Enhances)), "new" = as.integer (new - 1), "old" = list (as.integer (oldinst - 1), as.integer (oldavail - 1)), "repos" = as.character (options("repos")$repos)) } # package information formats may - according to the help - be subject to change. Hence this function to cope with "missing" values # also it concatenates everything to a single vector, so we can easily get the whole structure with a single call #' @export ".rk.get.installed.packages" <- function () { x <- as.data.frame(installed.packages(fields="Title")) # does a package enhance RKWard, i.e. provide plugins? enhance.rk <- ifelse(is.na(x$Enhances), FALSE, grepl("rkward", x$Enhances)) # as a side effect, we update the list of known installed packages in the frontend .rk.do.plain.call ("updateInstalledPackagesList", sort (unique (as.character (x$Package))), synchronous=FALSE) # check for pluginmaps only in packages which enhance RKWard rk.load.pluginmaps (.rk.find.package.pluginmaps(x$Package[enhance.rk]), force.add=FALSE, force.reload=FALSE) return(list(Package=as.character(x$Package), Title=as.character(x$Title), Version=as.character(x$Version), LibPath=as.character(x$LibPath), EnhanceRK=as.logical(enhance.rk))) } # This function works like available.packages (with no arguments), but does simple caching of the result, and of course uses a cache if available. Cache is only used, if it is less than 1 hour old, and options("repos") is unchanged. #' @export ".rk.cached.available.packages" <- function () { x <- NULL if (exists ("available.packages.cache", envir=.rk.variables) && (!is.null (.rk.variables$available.packages.cache))) { if (.rk.variables$available.packages.cache$timestamp > (Sys.time () - 3600)) { if (all (.rk.variables$available.packages.cache$repos$repos == options ("repos")$repos)) { x <- .rk.variables$available.packages.cache$cache } } } if (is.null(x)) { x <- available.packages(fields="Title") .rk.variables$available.packages.cache <- list (cache = x, timestamp = Sys.time (), repos = options ("repos")) } return (x) } #".rk.init.handlers" <- function () { # options (warning.expression = expression ()) # .Internal (.addCondHands (c ("message", "warning", "error"), list (function (m) { .Call ("rk.do.condition", c ("m", conditionMessage (m))) }, function (w) { .Call ("rk.do.condition", c ("w", conditionMessage (w))) }, function (e) { .Call ("rk.do.condition", c ("e", conditionMessage (e))) }), globalenv (), NULL, TRUE)) #} # these functions can be used to track assignments to R objects. The main interfaces are .rk.watch.symbol (k) and .rk.unwatch.symbol (k). This works by copying the symbol to a backup environment, removing it, and replacing it by an active binding to the backup location #' @export ".rk.watched.symbols" <- new.env () #' @export ".rk.make.watch.f" <- function (k) { # we need to make sure, the functions we use are *not* looked up as symbols in .GlobalEnv. # else, for instance, if the user names a symbol "missing", and we try to resolve it in the # wrapper function below, evaluation would recurse to look up "missing" in the .GlobalEnv # due to the call to "if (!missing(value))". get <- base::get missing <- base::missing assign <- base::assign .rk.do.call <- rkward::.rk.do.call invisible <- base::invisible function (value) { if (!missing (value)) { assign (k, value, envir=.rk.watched.symbols) .Call ("rk.do.command", c ("ws", k), PACKAGE="(embedding)"); # NOTE: the above is essentially the same a # .rk.do.call ("ws", k); # only minimally faster. invisible (value) } else { get (k, envir=.rk.watched.symbols) } } } #' @export ".rk.watch.symbol" <- function (k) { f <- .rk.make.watch.f (k) .Call ("rk.copy.no.eval", k, globalenv(), .rk.watched.symbols, PACKAGE="(embedding)"); #assign (k, get (k, envir=globalenv ()), envir=.rk.watched.symbols) rm (list=k, envir=globalenv ()) .rk.makeActiveBinding.default (k, f, globalenv ()) invisible (TRUE) } # not needed by rkward but provided for completeness #' @export ".rk.unwatch.symbol" <- function (k) { rm (list=k, envir=globalenv ()) assign (k, .rk.watched.symbols$k, envir=globalenv ()) rm (k, envir=.rk.watched.symbols); invisible (TRUE) } #' @export ".rk.watch.globalenv" <- function () { newlist <- ls (globalenv (), all.names=TRUE) oldlist <- ls (.rk.watched.symbols, all.names=TRUE) for (old in oldlist) { # unwatch no longer present items if (!(old %in% newlist)) { rm (list=old, envir=.rk.watched.symbols); } } for (new in newlist) { # watch new items if (!(new %in% oldlist)) { .rk.watch.symbol (new) } } } #' @export ".rk.get.vector.data" <- function (x) { ret <- list (); ret$data <- as.vector (unclass (x)); ret$levels <- levels (x) if (is.null (ret$levels)) ret$levels <- "" i <- attr (x, ".rk.invalid.fields") ret$invalids <- as.character (c (names (i), i)); if (length (ret$invalids) == 0) ret$invalids <- "" ret } # Change storage type of x to mode newmode. # Keeps the .rk.meta attribute, and levels attributes, but the data is erased! #' @export ".rk.set.vector.mode" <- function (x, fun, envir=parent.frame ()) { y <- fun(rep(NA, length.out = length(x))) newattrs <- attributes(y) if (is.null (newattrs)) newattrs <- list () newattrs[[".rk.meta"]] <- attributes(x)[[".rk.meta"]] lvls <- attributes(x)[["levels"]] if (!is.null (lvls)) newattrs[["levels"]] <- lvls attributes(y) <- newattrs eval (substitute (x <- y), envir=envir) } #' @export ".rk.get.structure" <- function (x, name, envlevel=0, namespacename=NULL) { .Call ("rk.get.structure", x, as.character (name), as.integer (envlevel), namespacename, PACKAGE="(embedding)") } #' @export ".rk.try.get.namespace" <- function (name) { tryCatch (asNamespace (name), error = function(e) NULL) } #' @export ".rk.get.structure.global" <- function (name, envlevel=0, namespacename=NULL) { .Call ("rk.get.structure.global", as.character (name), as.integer (envlevel), namespacename, PACKAGE="(embedding)") } #' @export ".rk.get.slots" <- function (x) { slotnames <- methods::slotNames (class (x)) ret <- lapply (slotnames, function (slotname) slot (x, slotname)) names (ret) <- slotnames ret } #' @export ".rk.get.environment.children" <- function (x, envlevel=0, namespacename=NULL) { ret <- list () if (envlevel < 2) { # prevent infinite recursion lst <- ls (x, all.names=TRUE) if (is.null (namespacename)) { for (childname in lst) { ret[[childname]] <- .rk.get.structure (name=childname, envlevel=envlevel, envir=x) } } else { # for R 2.4.0 or greater: operator "::" works if package has no namespace at all, or has a namespace with the symbol in it ns <- tryCatch (asNamespace (namespacename), error = function(e) NULL) for (childname in lst) { misplaced <- FALSE if ((!is.null (ns)) && (!exists (childname, envir=ns, inherits=FALSE))) misplaced <- TRUE ret[[childname]] <- .rk.get.structure (name=childname, envlevel=envlevel, misplaced=misplaced, envir=x) } } } ret } # hidden, as this is not portable to different output formats #' @export ".rk.cat.output" <- function (x) { cat (x, file = rk.get.output.html.file(), append = TRUE) } #' @export ".rk.rerun.plugin.link" <- function (plugin, settings, label) { .rk.cat.output (paste ("", label, "", sep="")) } #' @export ".rk.make.hr" <- function () { .rk.cat.output ("
    \n"); } # General purpose storage environment (which will hopefully never get locked by R) #' @export ".rk.variables" <- new.env () assign(".rk.active.device", 1, envir=.rk.variables) assign(".rk.output.html.file", NULL, envir=.rk.variables) assign(".rk.rkreply", NULL, envir=.rk.variables) assign("available.packages.cache", NULL, envir=.rk.variables) #' @export ".rk.backups" <- new.env () # where masking is not enough, we need to assign in the original environment / namespace. This can only be done after package loading, # so we have a separate function for that. #' @export ".rk.fix.assignments" <- function () { ## History manipulation function (overloads for functions by the same name in package utils) rk.replace.function ("loadhistory", as.environment ("package:utils"), function (file = ".Rhistory") { invisible (.rk.do.plain.call ("commandHistory", c ("set", readLines (file)))) }, copy.formals = FALSE) rk.replace.function ("savehistory", as.environment ("package:utils"), function (file = ".Rhistory") { invisible (writeLines (.rk.do.plain.call ("commandHistory", "get"), file)) }, copy.formals = FALSE) rk.replace.function ("timestamp", as.environment ("package:utils"), function (stamp = date(), prefix = "##------ ", suffix = " ------##", quiet = FALSE) { stamp <- paste(prefix, stamp, suffix, sep = "") .rk.do.plain.call ("commandHistory", c ("append", stamp)) if (!quiet) cat(stamp, sep = "\n") invisible(stamp) }, copy.formals = FALSE) ## Interactive menus rk.replace.function ("select.list", as.environment ("package:utils"), function () { # the "list" parameter was renamed to "choices" in R 2.11.0 if (!exists ("list", inherits=FALSE)) list <- choices # the "graphics" parameter was introduced in R 2.11.0, so we cannot rely on its existance if (!exists ("graphics", inherits=FALSE)) graphics <- TRUE if (graphics) { return (rk.select.list (list, preselect, multiple, title)) } # for text list, use the default implementation eval (body (.rk.backups$select.list)) }) rk.replace.function ("menu", as.environment ("package:utils"), function () { if (graphics) { res <- rk.select.list (choices, multiple=FALSE, title=title) return (match(res, choices, nomatch = 0L)) } # for text menus, use the default implementation eval (body (.rk.backups$menu)) }) # call separate assignments functions: if (exists (".rk.fix.assignments.graphics")) eval (body (.rk.fix.assignments.graphics)) # internal_graphics.R } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/base_overrides.R0000644000175000017500000000421012124345416024174 0ustar thomasthomas # override makeActiveBinding: If active bindings are created in globalenv (), watch them properly .rk.makeActiveBinding.default <- base::makeActiveBinding #' @export "makeActiveBinding" <- function (sym, fun, env, ...) { if (identical (env, globalenv ())) { .rk.makeActiveBinding.default (sym, fun, .rk.watched.symbols, ...) f <- .rk.make.watch.f (sym) .rk.makeActiveBinding.default (sym, f, globalenv (), ...) } else { .rk.makeActiveBinding.default (sym, fun, env, ...) } } #' @export "require" <- function (package, quietly = FALSE, character.only = FALSE, ...) { if (!character.only) { package <- as.character(substitute(package)) } if (!base::require(as.character(package), quietly = quietly, character.only = TRUE, ...)) { .rk.do.call("require", as.character(package)) invisible(base::require(as.character(package), quietly = TRUE, character.only = TRUE, ...)) } else { invisible(TRUE) } } # overriding q, to ask via GUI instead. Arguments are not interpreted. #' @export "q" <- function (save = "default", status = 0, runLast = TRUE, ...) { # test if this is running in RKWard, otherwise pass through to the actual q() if (isTRUE(.rk.inside.rkward.session())){ res <- .rk.do.plain.call ("quit") if (length (res) && (res == "FALSE")) stop ("Quitting was cancelled") } else { base:::q(save = save, status = status, runLast = runLast) } } #' @export "quit" <- function (save = "default", status = 0, runLast = TRUE, ...) { q (save, status, runLast, ...) } #' @export "Sys.setlocale" <- function (category = "LC_ALL", locale = "", ...) { if (category == "LC_ALL" || category == "LC_CTYPE" || category == "LANG") { allow <- .rk.do.plain.call ("preLocaleChange", NULL) if (length (allow) && (allow == "FALSE")) stop ("Changing the locale was cancelled by user") ret <- base::Sys.setlocale (category, locale, ...) .Call ("rk.update.locale", PACKAGE="(embedding)") ret } else { base::Sys.setlocale (category, locale, ...) } } #' @export "setwd" <- function () { ret <- eval (body (base::setwd)) .rk.do.plain.call ("wdChange", base::getwd (), synchronous=FALSE) invisible (ret) } formals (setwd) <- formals (base::setwd) rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/internal_help.R0000644000175000017500000000336412124345416024035 0ustar thomasthomas## Internal functions related to help search / display # retrieve the (expected) "base" url of help files. Most importantly this will be a local port for R 2.10.0 and above, but a local directory for 2.9.x and below. As a side effect, in R 2.10.0 and above, the dynamic help server is started. #' @export ".rk.getHelpBaseUrl" <- function () { port <- NA if (compareVersion (as.character (getRversion()), "2.10.0") >= 0) { try ({ port <- tools::startDynamicHelp () }) if (is.na (port)) { try ({ port <- tools:::httpdPort }) } } if (is.na (port)) { return (paste ("file://", R.home (), sep="")) } return (paste ("http://127.0.0.1", port, sep=":")) } # a simple wrapper around help() that makes it easier to detect in code, whether help was found or not. # used from RKHelpSearchWindow::getFunctionHelp #' @export ".rk.getHelp" <- function (...) { if (compareVersion (as.character (getRversion()), "2.10.0") >= 0) { res <- help (..., help_type="html") } else { res <- help (..., chmhelp=FALSE, htmlhelp=TRUE) } if (!length (as.character (res))) { # this seems undocumented, but it is what utils:::print.help_files_with_topic checks show (res) stop ("No help found") } show (res) invisible (TRUE) } # Simple wrapper around help.search. Concatenates the relevant fields of the results in order for passing to the frontend. #' @export ".rk.get.search.results" <- function (pattern, ...) { H=as.data.frame (help.search(pattern, ...)$matches) # NOTE: The field "Type" was added in R 2.14.0. For earlier versions of R, only help pages were returned as results of help.search() if ((dim (H)[1] > 0) && (is.null (H$Type))) H$Type <- "help" c (as.character (H$topic), as.character (H$title), as.character(H$Package), as.character(H$Type)) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.edit-functions.R0000644000175000017500000000551312124345416024555 0ustar thomasthomas#' Edit / show an object / file #' #' \code{rk.edit} can be used to edit an object in the RKWard data editor. #' Currently only \link{data.frame}s are supported. This is similar to #' \link{edit.data.frame}, but the function returns immediately, and the object #' is edit asynchronously. #' #' \code{rk.edit.files}, \code{rk.show.files}, and \code{rk.show.html} are #' equivalent to \link{file.edit}, \link{file.show}, and \link{browseURL}, #' respectively, but use RKWard as text/html editor/viewer. Generally it is #' recommended to use \link{file.edit}, \link{file.show}, and \link{browseURL}, #' instead. These will call the respective RKWard functions by default, when #' run inside an RKWard session. #' #' @aliases rk.edit rk.edit.files rk.show.files rk.show.html #' @param x an object to edit. #' @param file character vector, filenames to show or edit. #' @param title character vector, of the same length as \code{file}; This can #' be used to give descriptive titles to each file, which will be displayed #' to the user. #' @param wtitle character vector, of length 1. This will be used as the window #' title. #' @param prompt logical of length 1. If TRUE (the default) a prompt is dialog #' is shown along with the files to show / edit. #' @param delete a logical (not NA), when \code{TRUE} the shown file(s) are #' deleted after closing. #' @return All functions described on this page return \code{NULL}, #' unconditionally. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{edit}}, \code{\link{file.edit}}, #' \code{\link{file.show}}, \code{\link{browseURL}} #' @keywords utilities IO #' @rdname rk.edit #' @examples #' #' ## Not run #' x <- data.frame (a=c(1:3), b=c(2:4)) #' rk.edit(x) #' @export "rk.edit" <- function (x) { object <- deparse (substitute (x)) .rk.do.call ("edit", object) } #' @export #' @rdname rk.edit "rk.edit.files" <- function (file = file, title = file, name = NULL, prompt = TRUE) { if (!is.character (file)) { nfile = tempfile() env = environment (file) dput (file, file=nfile, control=c ("useSource", "keepNA", "keepInteger", "showAttributes")) .Call("rk.edit.files", nfile, title, name, prompt, PACKAGE="(embedding)") x <- dget (nfile) environment (x) <- env return (x) } invisible (.Call ("rk.edit.files", as.character (file), as.character (title), as.character (name), isTRUE (prompt), PACKAGE="(embedding)")) } #' @export #' @rdname rk.edit "rk.show.files" <- function (file = file, title = file, wtitle = NULL, delete=FALSE, prompt = TRUE) { invisible (.Call ("rk.show.files", as.character (file), as.character (title), as.character (wtitle), delete, isTRUE (prompt), PACKAGE="(embedding)")) } #' @export #' @rdname rk.edit "rk.show.html" <- function (url) { invisible (.rk.do.plain.call ("showHTML", as.character (url), synchronous=FALSE)); } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.sessionInfo.R0000644000175000017500000000160212124345416024114 0ustar thomasthomas#' Print information on the RKWard session #' #' Gathers and prints information on the setup of the current RKWard session. #' In general, you should always include this information when reporting a bug #' in RKWard. #' #' Typically, when reporting a bug, you should use \code{Help->Report Bug...} #' from the menu. Internally, this will call \code{rk.sessionInfo()}. #' #' @return Returns the object created by \code{sessionInfo()}, invisibly. Note #' that this includes only the information on the R portion of the session. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{sessionInfo}} #' @keywords utilities misc #' @export #' @rdname rk.sessionInfo #' @examples #' #' rk.sessionInfo() "rk.sessionInfo" <- function () { cat (.rk.do.plain.call ("getSessionInfo"), sep="\n") cat ("R runtime session info:\n") print (sessionInfo()) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/internal_debugger.R0000644000175000017500000000327712124345416024674 0ustar thomasthomas# gather debug information. # Note: subsequent browser() calls should be suppressed while inside this function! #' @export .rk.callstack.info <- function () { nframes <- sys.nframe() - 1 # strip this function call calls <- character (0) funs <- character (0) envs <- character (0) locals <- character (0) relsrclines <- integer (0) if (nframes > 0) { for (i in 1:nframes) { calls[i] <- as.character (try (paste (deparse (sys.call (i)), collapse="\n")), silent=TRUE) funs[i] <- as.character (try (paste (deparse (sys.function (i), control="all"), collapse="\n"), silent=TRUE)) envs[i] <- as.character (try (capture.output (print (environment (sys.function (i)))), silent=TRUE)) locals[i] <- as.character (try (paste (ls (sys.frame (i), all.names=TRUE), collapse="\n"), silent=TRUE)) relsrclines[i] <- as.character (try (rk.relative.src.line (sys.call (i+1), sys.function (i)), silent=TRUE)) } } list ("calls"=calls, "functions"=funs, "environments"=envs, "locals"=locals, "relsrclines"=relsrclines) } # get relative source location # NOTE: this requires R >= 2.13.0 #' @export rk.relative.src.line <- function (inner, outer) { if (!inherits (inner, "srcref")) inner <- getSrcref (inner) if (!inherits (outer, "srcref")) outer <- getSrcref (outer) if (is.null (inner) || is.null (outer)) return (NA) if (getSrcFilename (inner) != getSrcFilename (outer)) return (NA) outer_first <- getSrcLocation (outer, "line") outer_last <- getSrcLocation (outer, "line", first=FALSE) inner_first <- getSrcLocation (inner, "line") inner_last <- getSrcLocation (inner, "line", first=FALSE) if ((inner_first < outer_first) || (inner_last > outer_last)) return (NA) return (inner_first - outer_first + 1) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.replace.function.R0000644000175000017500000000675412124345416025071 0ustar thomasthomas#' Replace a function inside its package environment / namespace #' #' \code{rk.replace.function} can be used to replace a function inside a #' different package / namespace. It is mainly intended for internal usage #' inside rkward, e.g. to replace \code{menu} and \code{select.list} with #' appropriate GUI implementations. #' #' The original function is assigned to the environment #' \code{rkward::.rk.backups} with the same name as the original, and can be #' referred to from the replacement. WARNING: This mechanism does not support #' several subsequent replacments of the same function, nor does it support #' replacement of generics. #' #' \bold{WARNING}: This function can be used to alter - and disrupt - internal #' functions in arbitrary ways. You better know what you are doing. #' #' \bold{WARNING}: Does not work well on generics! #' #' @param functionname name of the function to be replaced (character). #' @param environment package environment or namespace, where replacment should #' be done. #' @param replacement the replacement. This should be a function. #' @param copy.formals logical; whether to copy the \code{\link{formals}} from #' the original function. #' @return Returns \code{NULL}, invisibly, unconditionally. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{assignInNamespace}}, \code{\link{debug}} #' @keywords utilities IO #' @export #' @rdname rk.replace.function #' @examples #' #' ## Not run #' rk.replace.function ("history", as.environment ("package:utils"), #' function () { #' cat ("This is what you typed:\n") #' eval (body (.rk.backups$history)) #' }) #' ## End not run #' # Tries to replace a function inside its environemnt/namespace. # Function formals are copied from the original. # A backup of the original is stored as rkward::.rk.backups$FUNCTIONNAME "rk.replace.function" <- function (functionname, environment, replacement, copy.formals=TRUE) { # This is a stripped down copy of utils::assignInNamespace, without the restrictions # added which would prevent us from properly replacing e.g. utils::menu, # but also without some of the fine points for replacing while loading a namespace, # and for handling S3 methods. doAssignInNamespace <- function(x, value, ns, pos = -1, envir = as.environment(pos)) { if (missing(ns)) { nm <- attr(envir, "name", exact = TRUE) if(is.null(nm) || substring(nm, 1L, 8L) != "package:") stop("environment specified is not a package") ns <- asNamespace(substring(nm, 9L)) } else ns <- asNamespace(ns) if (bindingIsLocked(x, ns)) { unlockBinding(x, ns) assign(x, value, envir = ns, inherits = FALSE) w <- options("warn") on.exit(options(w)) options(warn = -1) lockBinding(x, ns) } else { assign(x, value, envir = ns, inherits = FALSE) } } original <- get (functionname, envir=environment, inherits=FALSE) # create a backup assign (functionname, original, envir=.rk.backups) if (copy.formals) formals (replacement) <- formals (original) environment (replacement) <- environment (original) try ( if (bindingIsLocked (functionname, environment)) { unlockBinding (functionname, environment) on.exit (lockBinding (functionname, environment)) } ) try ( if (isNamespace (environment)) { doAssignInNamespace (functionname, replacement, ns=environment) } else { doAssignInNamespace (functionname, replacement, envir=environment) } ) try ( assign (functionname, replacement, envir=environment) ) invisible (NULL) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/ver.R0000644000175000017500000000023412124345570021777 0ustar thomasthomas# DO NOT CHANGE THIS FILE MANUALLY! # version number will be updated by cmake, see # rkward/SetVersionNumber.cmake #' @export ".rk.app.version" <- "0.6.1" rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/internal_graphics.R0000644000175000017500000001255412124345416024706 0ustar thomasthomas## Internal functions manipulating graphics should be stored here. ## These functions are _not_ supposed to be called by the end user. # overriding x11 to get informed, when a new x11 window is opened #' @export "rk.screen.device" <- function (..., is.being.duplicated = FALSE, is.preview.device = FALSE) { .rk.do.call ("startOpenX11", as.character (dev.cur ())); old_dev <- dev.cur () args <- list (...) if (!exists (".rk.default.device")) { if (base::.Platform$OS.type == "unix") { device <- grDevices::x11 } else { device <- grDevices::windows if (is.null (args[["width"]])) args[["width"]] <- options ("rk.screendevice.width")[[1]] if (!is.numeric (args[["width"]])) args[["width"]] <- 7 if (is.null (args[["height"]])) args[["height"]] <- options ("rk.screendevice.height")[[1]] if (!is.numeric (args[["height"]])) args[["height"]] <- 7 } } else { device <- .rk.default.device if (is.character (.rk.default.device)) { device <- get (.rk.default.device) } } x <- do.call (device, args) .rk.do.call ("endOpenX11", as.character (dev.cur ())); if (getOption ("rk.enable.graphics.history")) rk.record.plot$onAddDevice (old_dev, dev.cur (), is.being.duplicated, is.preview.device) invisible (x) } #' @export "x11" <- rk.screen.device #' @export "X11" <- x11 if (base::.Platform$OS.type == "windows") { "windows" = rk.screen.device "win.graph" = rk.screen.device } # set from rkward the application: # options(device="rk.screen.device") #' @include internal.R assign(".rk.preview.devices", list (), envir=.rk.variables) #' @export ".rk.startPreviewDevice" <- function (x) { a <- .rk.variables$.rk.preview.devices[[x]] if (is.null (a)) { devnum <- dev.cur () x11 (is.preview.device = TRUE) if (devnum != dev.cur ()) { .rk.variables$.rk.preview.devices[[x]] <- list (devnum=dev.cur(), par=par (no.readonly=TRUE)) } else { return (0L) # no device could be opened } } else { dev.set (a$devnum) par (a$par) } as.integer (dev.cur ()) } #' @export ".rk.killPreviewDevice" <- function (x) { a <- .rk.variables$.rk.preview.devices[[x]] if (!is.null (a)) { if (a$devnum %in% dev.list ()) { dev.off (a$devnum) } .rk.variables$.rk.preview.devices[[x]] <- NULL } } ".rk.discard.preview.device.num" <- function (devnum) { for (dev in names (.rk.variables$.rk.preview.devices)) { if (.rk.variables$.rk.preview.devices[[dev]]$devnum == devnum) { .rk.variables$.rk.preview.devices[[dev]] <- NULL return (invisible (TRUE)) } } invisible (FALSE) } ".rk.list.preview.device.numbers" <- function () { unlist (sapply (.rk.variables$.rk.preview.devices, function (x) x$devnum)) } .rk.variables$.rk.printer.devices <- list () # see .rk.fix.assignmetns () in internal.R #' @export ".rk.fix.assignments.graphics" <- function () { rk.replace.function ("plot.new", as.environment ("package:graphics"), function () { rk.record.plot$.plot.new.hook () eval (body (.rk.backups$plot.new)) }) rk.replace.function ("dev.off", as.environment ("package:grDevices"), function (which = dev.cur ()) { if (getOption ("rk.enable.graphics.history")) rk.record.plot$onDelDevice (devId = which) # see http://thread.gmane.org/gmane.comp.statistics.rkward.devel/802 .rk.do.call ("killDevice", as.character (which)) ret <- eval (body (.rk.backups$dev.off)) printfile <- .rk.variables$.rk.printer.devices[[as.character (which)]] if (!is.null (printfile)) { .rk.do.plain.call ("printPreview", printfile, FALSE) .rk.variables$.rk.printer.devices[[as.character (which)]] <- NULL } rkward:::.rk.discard.preview.device.num(which) return (ret) }) rk.replace.function ("dev.set", as.environment ("package:grDevices"), function () { ret <- eval (body (.rk.backups$dev.set)) if (getOption ("rk.enable.graphics.history") && rk.record.plot$.is.device.managed (which)) rk.record.plot$.set.trellis.last.object (which) ret }) ## set a hook defining "print.function" for lattice: setHook (packageEvent ("lattice", "onLoad"), function (...) lattice::lattice.options (print.function = function (x, ...) { if (dev.cur() == 1) rk.screen.device () ## TODO: use "trellis" instead of "lattice" to accomodate ggplot2 plots? plot_hist_enabled <- getOption ("rk.enable.graphics.history") if (plot_hist_enabled) { rk.record.plot$record (nextplot.pkg = "lattice") on.exit (options (rk.enable.graphics.history=TRUE)) options (rk.enable.graphics.history=FALSE) # avoid duplicate trigger inside plot(), below } plot (x, ...) if (plot_hist_enabled) { options (rk.enable.graphics.history=TRUE) rk.record.plot$.save.tlo.in.hP () } invisible () }) ) if (compareVersion (as.character (getRversion ()), "2.14.0") < 0) { setHook (packageEvent ("grid", "attach"), function (...) rk.replace.function ("grid.newpage", as.environment ("package:grid"), function () { ## TODO: add specific support for ggplots? rk.record.plot$.plot.new.hook () ret <- eval (body (.rk.backups$grid.newpage)) }) ) } else { setHook ("before.grid.newpage", function (...) { rk.record.plot$.plot.new.hook () }, action = "append" ) } ## persp does not call plot.new (), so set a hook. Fortunately, the hook is placed after drawing the plot. setHook ("persp", function (...) { rk.record.plot$.plot.new.hook () }, action = "append" ) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.sync-functions.R0000644000175000017500000000276212124345416024607 0ustar thomasthomas#' Sync R object(s) #' #' RKWard keeps an internal representation of objects in the R workspace. For #' objects in the \code{.GlobalEnv}, this representation is updated after each #' top-level statement. For the rare cases where this is not enough, #' \code{rk.sync} can be used to update the representation of a single object, #' \code{x}, while \code{rk.sync.global} scans the \code{.GlobalEnv} for new #' and removed objects, and updates as appropriate. #' #' These functions are rarely needed outside automated testing. However, #' rk.sync() can be useful, if an object outside the \code{.GlobalEnv} has #' changed, since this will not be detected automatically. Also, by default #' RKWard does not recurse into environments when updating its representation #' of objects. rk.sync() can be used, here, to inspect the objects inside #' environments (see examples). #' #' @aliases rk.sync rk.sync.global #' @param x any R object to sync #' @return \code{NULL}, invisibly. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \url{rkward://page/rkward_workspace_browser} #' @keywords utilities misc #' @rdname rk.sync #' @examples #' #' rk.sync (rkward::rk.record.plot) #' # should this really be public? #' @export "rk.sync" <- function (x) { object <- deparse (substitute (x)) .rk.do.call ("sync", object) } # should this really be public? #' @export #' @rdname rk.sync "rk.sync.global" <- function () { .rk.do.call("syncglobal", ls (envir=globalenv (), all.names=TRUE)) } rkward-0.6.1/rkward/rbackend/rpackages/rkward/R/rk.print-functions.R0000644000175000017500000002132612124345416024764 0ustar thomasthomas#' Print objects and results to output #' #' Various utilty functions which can be used to print or export R objects to #' the (html) output file. The output file can be accessed from Windows -> Show #' Output. Basically, these functions along with the ones described in #' \code{\link{rk.get.label}}, \code{\link{rk.get.tempfile.name}}, and #' \code{\link{rk.graph.on}} can be used to create a HTML report. #' #' \code{rk.print} prints/exports the given object to the output (html) file #' using the \code{\link{HTML}} function. This requires the \code{R2HTML} #' package. Additional arguments in \code{...} are passed on to #' \code{\link{HTML}}. #' #' \code{rk.print.literal} prints/exports the given object using a #' \code{paste(x, collapse="\n")} construct to the output (html) file. #' #' \code{rk.print.code} applies syntax highlighting to the given code string, #' and writes it to the output (html) file. #' #' \code{rk.header} prints a header / caption, possibly with parameters, to the #' output file. See example. #' #' \code{rk.results} is similar to \code{rk.print} but prints in a more #' tabulated fashion. This has been implemented only for certain types of #' \code{x}: tables, lists (or data.frames), and vectors. See example. #' #' \code{rk.describe.alternatives} describes the alternative (H1) hypothesis of #' a \code{htest}. This is similar to \code{stats:::print.htext} and makes #' sense only when \code{x$alternatives} exists. #' #' @aliases rk.print rk.print.code rk.print.literal rk.header rk.results #' rk.describe.alternative #' @param x any R object to be printed/exported. A suitable list in case of #' \code{rk.describe.alternative}. #' @param code a character vector (single string) of R code #' @param title a string, used as a header for the html output #' @param level an integer, header level. For example, \code{level=2} creates #' the header with \code{

    } tag. #' @param parameters a list, preferably named, giving a list of "parameters" to #' be printed to the output #' @param toc If \code{NULL}, the default, \code{rk.header()} will automatically #' add headers h1 to h4 to the TOC menu of the output document. \code{TRUE} will always #' add the header, and \code{FALSE} will suppress it. #' @param titles a character vector, giving the column headers for a html #' table. #' @param print.rownames controls printing of rownames. TRUE to force printing, #' FALSE to suppress printing, omitted (default) to print rownames, unless #' they are plain row numbers. #' @return \code{rk.describe.alternatives} returns a string while all other #' functions return \code{NULL}, invisibly. #' @author Thomas Friedrichsmeier \email{rkward-devel@@lists.sourceforge.net} #' @seealso \code{\link{HTML}}, \code{\link{rk.get.output.html.file}}, #' \code{\link{rk.get.description}}, \code{\link{rk.call.plugin}}, #' \url{rkward://page/rkward_output} #' @keywords utilities #' @rdname rk.results #' @examples #' #' require (rkward) #' require (R2HTML) #' #' ## see the output: Windows->Show Output #' ## stolen from the two-sample t-test plugin ;) #' local({ #' x1 <- rnorm (100) #' x2 <- rnorm (100, 2) #' nm <- rk.get.description (x1,x2) #' #' result <- t.test (x1, x2, alternative="less") #' rk.print.code ("result <- t.test (x1, x2, alternative=\"less\")") #' #' rk.header (result$method, #' parameters=list ("Comparing", paste (nm[1], "against", nm[2]), #' "H1", rk.describe.alternative (result), #' "Equal variances", "not assumed")) #' #' rk.print.literal ("Raw data (first few rows):") #' rk.print (head (cbind (x1,x2)), align = "left") #' #' rk.print.literal ("Test results:") #' rk.results (list ( #' 'Variable Name'=nm, #' 'estimated mean'=result$estimate, #' 'degrees of freedom'=result$parameter, #' t=result$statistic, #' p=result$p.value, #' 'confidence interval percent'=(100 * attr(result$conf.int, "conf.level")), #' 'confidence interval of difference'=result$conf.int )) #' }) #' #' @export "rk.print" <- function(x,...) { htmlfile <- rk.get.output.html.file() if(require("R2HTML")==TRUE) { HTML(x, file=htmlfile,...) } } #' @export #' @rdname rk.results "rk.print.code" <- function(code) { .rk.cat.output (.rk.do.plain.call ("highlightRCode", as.character (code))) } #' @export #' @rdname rk.results "rk.header" <- function (title, parameters=list (), level=1, toc=NULL) { sink (rk.get.output.html.file(), append=TRUE) on.exit (sink ()) # give header a name to be able to set anchors # it's just a time string down to the fraction of a second: yyyy-mm-dd HH:MM:SS.ssssss if (!isTRUE (options (".rk.suppress.toc")[[1]])) { # disabled during plugin automated testing header.id <- format(Sys.time(), "%Y-%m-%d_%H:%M:%OS6") header.title <- format(Sys.time(), "%Y-%m-%d %H:%M:%S") # add 'id', 'name' and 'title' attributes to the header cat ("", title, "\n", sep="") # if 'toc' is true, also add a javascript function call to add this header to the TOC menu # the function addToTOC() will be defined in the document head # see rk.set.output.html.file() in rk.filename-functions.R if (isTRUE(toc) || (is.null(toc) && level <= 4)){ cat("\n", sep="") } } else { cat ("", title, "\n", sep="") } if (length (parameters)) { # legacy handling: parameter=value used to be passed as parameter, value if (is.null (names (parameters))) { s <- seq.int (1, length (parameters), by=2) pnames <- as.character (parameters[s]) parameters <- parameters[s+1] } else { pnames <- names (parameters) } cat ("Parameters\n
      ", sep="") for (i in 1:length (parameters)) { cat ("
    • ", pnames[i], ": ", parameters[[i]], "
    • \n", sep="") } cat ("
    \n") } if (level==1) cat (.rk.date ()) cat ("
    \n") } # Dummy to allow the rkwardtest package to override rk.header() behavior, easily ".rk.date" <- function () date () #' @export #' @rdname rk.results "rk.results" <- function (x, titles=NULL, print.rownames) { sink (rk.get.output.html.file(), append=TRUE) on.exit (sink ()) # convert 2d tables to data.frames with values labelled if (is.table(x) && (length(dim(x)) == 2)) { rows = dim(x)[1] cols = dim(x)[2] if (is.null(titles)) { titles <- names(dimnames(x)) } rn <- dimnames(x)[[1]] if (!is.na (titles[1])) rn <- paste(titles[1], "=", rn) cn <- dimnames(x)[[2]] if (!is.na (titles[2])) cn <- paste(titles[2], "=", cn) titles <- c ("", cn) x <- data.frame (cbind (x), stringsAsFactors=FALSE) rownames (x) <- as.character (rn) if (missing (print.rownames)) print.rownames <- TRUE } if (is.list (x)) { # or a data.frame if (is.data.frame (x)) { # by default, print rownames, unless they are just plain row numbering if (missing (print.rownames)) print.rownames <- !isTRUE (all.equal (rownames (x), as.character (1:dim(x)[1]))) if (isTRUE (print.rownames)) { x <- cbind (rownames (x), x, stringsAsFactors=FALSE) names (x)[1] <- ''; } } if (is.null (titles)) { titles <- names (x) } cat ("\n") try ({ # if anything fails, make sure the "
    " is still printed for (i in 1:length (x)) { cat ("", titles[i], "", sep="") } cat ("\n") if (is.data.frame (x)) { for (row in 1:dim (x)[1]) { cat ("") for (col in 1:dim (x)[2]) { cat ("", x[row, col], "", sep="") } cat ("\n") } } else { # generic list cat ("") for (col in x) { col <- as.vector (col) cat ("") for (row in 1:length (col)) { if (row != 1) cat ("\n
    ") cat (col[row]) } cat ("") } cat ("\n") } }) cat ("\n") } else if (is.vector (x)) { cat ("

    ", titles[1], ": ", sep="") cat (x) cat ("

    ") } else { stop ("uninmplemented") } } #' @export #' @rdname rk.results "rk.print.literal" <- function (x) { cat ("
    ", paste (x, collapse="\n"), "
    \n", sep="", file=rk.get.output.html.file(), append=TRUE); } # Describe the alternative (H1) of an htest. # This code adapted from stats:::print.htest #' @export #' @rdname rk.results "rk.describe.alternative" <- function (x) { res <- "" if (!is.null(x$alternative)) { if (!is.null(x$null.value)) { if (length(x$null.value) == 1) { alt.char <- switch(x$alternative, two.sided = "not equal to", less = "less than", greater = "greater than") res <- paste ("true", names(x$null.value), "is", alt.char, x$null.value) } else { res <- paste (x$alternative, "\nnull values:\n", x$null.value) } } else { res <- (x$alternative) } } res } rkward-0.6.1/rkward/rbackend/rpackages/rpackage_install.cmake.in0000644000175000017500000000214712124345416024303 0ustar thomasthomasSET(DESTDIR $ENV{DESTDIR}) MESSAGE(STATUS "Installing R support packages") IF(WIN32) SET(R_LIBDIR @R_LIBDIR@) IF(DESTDIR) # strip drive letter STRING(REGEX REPLACE "^.:." "" R_LIBDIR ${R_LIBDIR}) SET(R_LIBDIR "${DESTDIR}/${R_LIBDIR}") FILE(MAKE_DIRECTORY "${R_LIBDIR}") ENDIF(DESTDIR) EXECUTE_PROCESS( COMMAND @R_EXECUTABLE@ CMD INSTALL -c -l ${R_LIBDIR} "@CMAKE_CURRENT_SOURCE_DIR@/rkward" "@CMAKE_CURRENT_SOURCE_DIR@/rkwardtests" WORKING_DIRECTORY @CMAKE_CURRENT_BINARY_DIR@ RESULT_VARIABLE R_LIB_INSTALL_EXIT_CODE ) ELSE(WIN32) EXECUTE_PROCESS( COMMAND mkdir -p @CMAKE_CURRENT_BINARY_DIR@/tmp ${DESTDIR}/@R_LIBDIR@ ) EXECUTE_PROCESS( COMMAND env TMPDIR=@CMAKE_CURRENT_BINARY_DIR@/tmp @R_EXECUTABLE@ CMD INSTALL -c -l ${DESTDIR}/@R_LIBDIR@ "@CMAKE_CURRENT_SOURCE_DIR@/rkward" "@CMAKE_CURRENT_SOURCE_DIR@/rkwardtests" WORKING_DIRECTORY @CMAKE_CURRENT_BINARY_DIR@ RESULT_VARIABLE R_LIB_INSTALL_EXIT_CODE ) ENDIF(WIN32) IF(R_LIB_INSTALL_EXIT_CODE) MESSAGE (SEND_ERROR "Failed to install R support libraries. Please make sure you have the required permissions.") ENDIF(R_LIB_INSTALL_EXIT_CODE) rkward-0.6.1/rkward/rbackend/rcommand.h0000644000175000017500000003233712124345416017406 0ustar thomasthomas/*************************************************************************** rcommand.h - description ------------------- begin : Mon Nov 11 2002 copyright : (C) 2002, 2006, 2007, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RCOMMAND_H #define RCOMMAND_H #include #include #include #include "rdata.h" #define MAX_RECEIVERS_PER_RCOMMAND 3 class RCommandReceiver; class RCommand; class RCommandProxy; class RCommandChain; /** Base class for RCommand and RCommandChain, to make it possible to store both in the same list */ class RCommandBase { public: /** Returns the casted pointer, if this is a command, else 0 */ RCommand* commandPointer (); /** Returns the casted pointer, if this is a chain, else 0 */ RCommandChain* chainPointer (); protected: friend class RCommandStack; friend class RCommandStackModel; RCommandBase (bool is_chain); RCommandChain *parent; private: bool is_command_chain; }; /** this simple struct is used to ensure a sequence of RCommand s does not get interrupted by unrelated RCommands. @see \ref UsingTheInterfaceToR @see RInterface::startChain @see RInterface::closeChain */ class RCommandChain : public RCommandBase { public: bool isClosed () const { return closed; }; protected: friend class RCommandStack; friend class RCommandStackModel; RCommandChain () : RCommandBase (true) {}; QList commands; bool closed; bool isStack () { return (parent == 0); } }; /** this struct is used to store the R output to an RCommand. The RCommand basically keeps a list of ROutputString (s). The difference to a normal QString is, that additionally we store information on whether the output was "normal", "warning", or an "error". */ struct ROutput { enum ROutputType { NoOutput, /**< No output. Rarely used. */ Output, /**< normal output */ Warning, /**< R warning */ Error /**< R error */ }; ROutputType type; QString output; }; typedef QList ROutputList; /** Supplies signals for RCommands. * Obtain an instance of this using RCommand::notifier (); * Currently, only a single signal is available: When the command has finished. Further signals may be added, in the future. * * @Note You can also use this in connection with RCommandReceiver-based classes, if interested in RCommandReceiver::cancelOutstandingCommands(). */ class RCommandNotifier : public QObject { Q_OBJECT signals: void commandFinished (RCommand *command); private: friend class RCommand; RCommandNotifier (); ~RCommandNotifier (); void emitFinished (RCommand *command) { emit commandFinished (command); }; }; /** For introductory information on using RCommand, see \ref UsingTheInterfaceToR This class is used to encapsulate an R-command, so it can be easily identified in a chain of commands. It is needed, since communication with R is asynchronous and it is therefore not possible to get the result of an R-call right away. Instead, create an object of this class, specifying the RCommandReceiver that should be called when the command has finished. You can then retrieve all information on the command (including the reply) from the object that is passed to your handler. There are several ways to identify a command when it's finished (needed, if a single RCommandReceiver needs to handle the results of several different commands): - storing the id () (each command is automatically assigned a unique id, TODO: do we need this functionality? Maybe remove it for redundancy) - passing appropriate flags to know how to handle the command - keeping the pointer (CAUTION: don't use that pointer except to compare it with the pointer of an incoming command. Commands get deleted when they are finished, and maybe (in the future) if they become obsolete etc. Hence the pointers you keep may be invalid!) (- checking the command-string) Note that an RCommand carries a whole lot of information around. However, RCommands generally don't get kept around very long, so they should not be a memory issue. *@author Thomas Friedrichsmeier */ class RCommand : public RData, public RCommandBase { public: /** constructs an RCommand. @param command The command (string) to be run in the backend. This may include newlines and ";". The command should be a complete statement. If it is an incomplete statement, the backend will not wait for the rest of the command to come in, but rather the command will fail with RCommand::errorIncomplete. @param type An integer being the result of a bit-wise OR combination of the values in RCommand::CommandTypes. The type-parameter is used to indicate the type of command, and also how the command should retrieve information (as a usual string, or as a data vector). See \ref RCommand::CommandTypes @param rk_equiv Not yet used: a short descriptive string attached to the RCommand, that allows the user to make some sense of what this command is all about. @param receiver The RCommandReceiver this command should be passed on to, when finished. @Note: consider connecting to the notifier(), instead! @param flags A freely assignable integer, that you can use to identify what the command was all about. Only the RCommandReceiver handling the results will have to know what exactly the flags mean. */ explicit RCommand (const QString &command, int type, const QString &rk_equiv = QString::null, RCommandReceiver *receiver=0, int flags=0); /** destructor. Note: you should not delete RCommands manually. This is done in RInterface. TODO: make protected */ ~RCommand(); /** @returns the type as specified in RCommand::RCommand */ int type () const { return _type; }; /** @returns the raw command status. @see CommandStatus */ int getStatus () const { return status; }; /** @returns the rk_equiv as specified in RCommand::RCommand */ QString rkEquivalent () const { return _rk_equiv; }; /** @returns the command string (i.e. the input) as specified in RCommand::RCommand */ QString command () const { return _command; }; /** @returns like command(), but for user commands, which have been run, partially, returns only the remaining portion of the command. */ QString remainingCommand () const; /** Each RCommand is assigned a unique integer id (incrementing from 0 to integer overflow) upon creation. This returns this id. @returns the unique id of this command */ int id () const { return _id; }; /* TODO: Adjust these two functions to allow re-getting of output and error-messages from logs */ /** @returns the full output of the command, i.e. all "regular" output, warning messages, and errors, in the order they were encountered. @see RCommand::output @see RCommand::error @see RCommand::warnings */ QString fullOutput () const; /** @returns the "regular" (ROutput::Output) output of the command, if any (e.g. "[1] 1" for "print (1)"). @see RCommand::succeeded @see RCommand::hasOutput */ QString output () const; /** @returns the warning message(s) given by R, if any. @see RCommand::output @see RCommand::error */ QString warnings () const; /** @returns the error message given by R, if any. @see RCommand::failed @see RCommand::hasError */ QString error () const; /** Types of commands (potentially more to come), bitwise or-able, although partially exclusive. See \ref UsingTheInterfaceToR for a overview of what these are used for. TODO: find out, why Canceled is in here, and document that fact. */ enum CommandTypes { User=1, /**< Command was created directly by the user (e.g. in the console or in a command editor window) */ Plugin=1 << 1, /**< Command comes from a plugin */ App=1 << 2, /**< Command comes from the application (e.g. loading / saving the workspace */ Sync=1 << 3, /**< Command is used to sync data to or from R-space. Typically used in the editor classes */ EmptyCommand=1 << 4, /**< Command is empty and will not be processed (an empty command may be used as a "marker") */ Console=1 << 5, /**< Command originated in the console. These commands will get some extra treatment in RKwatch */ Internal=1 << 6, /**< Command is meant to be used in the backend, only. Do not use outside rbackend classes! */ Silent=1 << 7, /**< Command can be interrupted, but is otherwise an internal command. In particular it should not be carbon copied to the output. */ GetIntVector=1 << 8, /**< Try to fetch result as an array of integers */ GetStringVector=1 << 9, /**< Try to fetch result as an array of chars */ GetRealVector=1 << 10, /**< Try to fetch result as an array of doubles */ GetStructuredData=1 << 11, /**< Try to fetch result as an RData structure */ CCOutput=1 << 12, /**< Append command output to the HTML-output file */ CCCommand=1 << 13, /**< Append the command itself to the HTML-output file */ ObjectListUpdate=1 << 14, /**< The command may change the list of objects available. Do an update */ QuitCommand=1 << 15 /**< The R backend should be killed */ }; enum CommandStatus { Running=1, /**< command is currently running */ WasTried=2, /**< the command has been passed to the backend. */ Failed=4, /**< the command failed */ HasOutput=8, /**< command has a string output retrievable via RCommand::output () */ HasError=16, /**< command has an error-message retrievable via RCommand::error () */ HasWarnings=32, /**< command has warning-message(s) retrievable via RCommand::warnings () */ ErrorIncomplete=512, /**< backend rejected command as being incomplete */ ErrorSyntax=1024, /**< backend rejected command as having a syntax error */ ErrorOther=2048, /**< another error (not incomplete, not syntax error) has occurred while trying to execute the command */ Canceled=8192 /**< Command was cancelled. */ }; /** the command has been passed to the backend. */ bool wasTried () const { return (status & WasTried); }; /** the command failed */ bool failed () const { return (status & Failed); }; /** the command was cancelled before it was executed */ bool wasCanceled () const { return (wasTried () && failed () && (status & Canceled)); } /** the command succeeded (wasTried () && (!failed ()) */ bool succeeded () const { return ((status & WasTried) && !(status & Failed)); }; /** command has a string output retrievable via RCommand::output () */ bool hasOutput () const { return (status & HasOutput); }; /** command has a string output retrievable via RCommand::warnings () */ bool hasWarnings () const { return (status & HasWarnings); }; /** command has an error-message retrievable via RCommand::error () */ bool hasError () const { return (status & HasError); }; /** backend rejected command as being incomplete */ bool errorIncomplete () const { return (status & ErrorIncomplete); }; /** backend rejected command as having a syntax error */ bool errorSyntax () const { return (status & ErrorSyntax); }; /** return the flags associated with the command. Those are the same that you specified in the constructor, RKWard does not touch them. @see RCommand::RCommand */ int getFlags () const { return (_flags); }; /** Add an additional listener to the command */ void addReceiver (RCommandReceiver *receiver); /** Remove a receiver from the list. This may be needed when a listener wants to self-destruct, to make sure we don't try to send any further info there */ void removeReceiver (RCommandReceiver *receiver); void addTypeFlag (int flag) { _type |= flag; }; ROutputList &getOutput () { return output_list; }; /** modify the command string. DO NOT CALL THIS after the command has been submitted! */ void setCommand (const QString &command) { _command = command; }; /** creates a proxy for this RCommand */ RCommandProxy* makeProxy () const; void mergeAndDeleteProxy (RCommandProxy *proxy); /** returns a notifier for this command (creating it, if needed). You can connect to the notifiers signals. */ RCommandNotifier* notifier (); /** same as RObject::rQuote */ static QString rQuote (const QString "ed); private: friend class RInterface; friend class RCommandStack; friend class RCommandStackModel; /** internal function will be called by the backend, as the command gets passed through. Takes care of sending this command (back) to its receiver(s) */ void finished (); /** new output was generated. Pass on to receiver(s) */ void newOutput (ROutput *output); /** next line of command has been transmitted. Pass on to receiver(s). Only called for RCommand::User type commands */ void commandLineIn (); ROutputList output_list; QString _command; int _type; int _flags; int status; int has_been_run_up_to; QString _rk_equiv; int _id; static int next_id; RCommandReceiver *receivers[MAX_RECEIVERS_PER_RCOMMAND]; RCommandNotifier *_notifier; }; #endif rkward-0.6.1/rkward/rbackend/FindR.cmake0000644000175000017500000001340612124345416017435 0ustar thomasthomas# find the R binary MESSAGE(STATUS "Looking for R executable") IF(R_EXECUTABLE) MESSAGE(STATUS "Specified by user") ENDIF(R_EXECUTABLE) FIND_PROGRAM(R_EXECUTABLE R) IF(R_EXECUTABLE-NOTFOUND) MESSAGE(FATAL_ERROR "Could NOT find R (TODO: name option)") ELSE(R_EXECUTABLE-NOTFOUND) MESSAGE(STATUS "Using R at ${R_EXECUTABLE}") ENDIF(R_EXECUTABLE-NOTFOUND) # find out about R architecture (needed for some paths) EXECUTE_PROCESS( COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.version$arch)" OUTPUT_VARIABLE R_ARCH) MESSAGE (STATUS "R architecture is ${R_ARCH}") # find R_HOME MESSAGE(STATUS "Looking for R_HOME") IF(NOT R_HOME) EXECUTE_PROCESS( COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home())" OUTPUT_VARIABLE R_HOME) ELSE(NOT R_HOME) MESSAGE(STATUS "Specified by user") ENDIF(NOT R_HOME) IF(NOT R_HOME) MESSAGE(FATAL_ERROR "Could NOT determine R_HOME (probably you misspecified the location of R)") ELSE(NOT R_HOME) MESSAGE(STATUS "R_HOME is ${R_HOME}") ENDIF(NOT R_HOME) # find R include dir MESSAGE(STATUS "Looking for R include files") IF(NOT R_INCLUDEDIR) IF(WIN32 OR APPLE) # This version of the test will not work with R < 2.9.0, but the other version (in the else part) will not work on windows or apple (but we do not really need to support ancient versions of R, there). EXECUTE_PROCESS( COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('include'))" OUTPUT_VARIABLE R_INCLUDEDIR) ELSE(WIN32 OR APPLE) EXECUTE_PROCESS( COMMAND ${R_EXECUTABLE} CMD sh -c "echo -n $R_INCLUDE_DIR" OUTPUT_VARIABLE R_INCLUDEDIR) ENDIF(WIN32 OR APPLE) ELSE(NOT R_INCLUDEDIR) MESSAGE(STATUS "Location specified by user") ENDIF(NOT R_INCLUDEDIR) IF(NOT R_INCLUDEDIR) SET(R_INCLUDEDIR ${R_HOME}/include) MESSAGE(STATUS "Not findable via R. Guessing") ENDIF(NOT R_INCLUDEDIR) MESSAGE(STATUS "Include files should be at ${R_INCLUDEDIR}. Checking for R.h") FIND_FILE(R_H R.h PATHS ${R_INCLUDEDIR} NO_DEFAULT_PATH) IF(NOT R_H) MESSAGE(FATAL_ERROR "Not found") ELSE(NOT R_H) MESSAGE(STATUS "Found at ${R_H}") GET_FILENAME_COMPONENT(R_INCLUDEDIR ${R_H} PATH) ENDIF(NOT R_H) SET(R_INCLUDEDIR ${R_INCLUDEDIR} ${R_INCLUDEDIR}/${R_ARCH}) # check for existence of libR.so MESSAGE(STATUS "Checking for existence of R shared library") FIND_LIBRARY(LIBR_SO R PATHS ${R_HOME}/lib ${R_SHAREDLIBDIR} ${R_HOME}/bin ${R_HOME}/bin/${R_ARCH} ${R_HOME}/lib/${R_ARCH} NO_DEFAULT_PATH) IF(NOT LIBR_SO) MESSAGE(FATAL_ERROR "Not found. Make sure the location of R was detected correctly, above, and R was compiled with the --enable-R-shlib option") ELSE(NOT LIBR_SO) MESSAGE(STATUS "Exists at ${LIBR_SO}") GET_FILENAME_COMPONENT(R_SHAREDLIBDIR ${LIBR_SO} PATH) SET(R_USED_LIBS R) ENDIF(NOT LIBR_SO) # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some # R packages will fail due to unresolved symbols, or we can't link against -lR. # However, we can't do this unconditionally, # as this is not available in some configurations of R MESSAGE(STATUS "Checking whether we should link against Rlapack library") FIND_LIBRARY(LIBR_LAPACK Rlapack PATHS ${R_SHAREDLIBDIR} NO_DEFAULT_PATH) IF(NOT LIBR_LAPACK) MESSAGE(STATUS "No, it does not exist in ${R_SHAREDLIBDIR}") ELSE(NOT LIBR_LAPACK) MESSAGE(STATUS "Yes, ${LIBR_LAPACK} exists") SET(R_USED_LIBS ${R_USED_LIBS} Rlapack) IF(WIN32 OR APPLE) ELSE(WIN32 OR APPLE) # needed when linking to Rlapack on linux for some unknown reason. # apparently not needed on windows (let's see, when it comes back to bite us, though) # and compiling on windows is hard enough even without requiring libgfortran, too. SET(R_USED_LIBS ${R_USED_LIBS} gfortran) ENDIF(WIN32 OR APPLE) ENDIF(NOT LIBR_LAPACK) # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some # R packages will fail due to unresolved symbols, or we can't link against -lR. # However, we can't do this unconditionally, # as this is not available in some configurations of R MESSAGE(STATUS "Checking whether we should link against Rblas library") FIND_LIBRARY(LIBR_BLAS Rblas PATHS ${R_SHAREDLIBDIR} NO_DEFAULT_PATH) IF(NOT LIBR_BLAS) MESSAGE(STATUS "No, it does not exist in ${R_SHAREDLIBDIR}") ELSE(NOT LIBR_BLAS) MESSAGE(STATUS "Yes, ${LIBR_BLAS} exists") SET(R_USED_LIBS ${R_USED_LIBS} Rblas) ENDIF(NOT LIBR_BLAS) # find R package library location IF(WIN32) SET(PATH_SEP ";") ELSE(WIN32) SET(PATH_SEP ":") ENDIF(WIN32) MESSAGE(STATUS "Checking for R package library location to use") IF(NOT R_LIBDIR) EXECUTE_PROCESS( COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(paste(unique (c(.Library.site, .Library)), collapse='${PATH_SEP}'))" OUTPUT_VARIABLE R_LIBDIR) ELSE(NOT R_LIBDIR) MESSAGE(STATUS "Location specified by user") ENDIF(NOT R_LIBDIR) # strip whitespace STRING(REGEX REPLACE "[ \n]+" "" R_LIBDIR "${R_LIBDIR}") # strip leading colon(s) STRING(REGEX REPLACE "^${PATH_SEP}+" "" R_LIBDIR "${R_LIBDIR}") # strip trailing colon(s) STRING(REGEX REPLACE "${PATH_SEP}+$" "" R_LIBDIR "${R_LIBDIR}") # find first path STRING(REGEX REPLACE "${PATH_SEP}" " " R_LIBDIR "${R_LIBDIR}") IF(NOT R_LIBDIR) MESSAGE(STATUS "Not reliably determined or specified. Guessing.") SET(R_LIBDIR ${R_HOME}/library) ENDIF(NOT R_LIBDIR) SET(R_LIBDIRS ${R_LIBDIR}) SEPARATE_ARGUMENTS(R_LIBDIRS) SET(R_LIBDIR) FOREACH(CURRENTDIR ${R_LIBDIRS}) IF(NOT USE_R_LIBDIR) IF(EXISTS ${CURRENTDIR}) SET(R_LIBDIR ${CURRENTDIR}) SET(USE_R_LIBDIR 1) ELSE(EXISTS ${CURRENTDIR}) MESSAGE(STATUS "${CURRENTDIR} does not exist. Skipping") ENDIF(EXISTS ${CURRENTDIR}) ENDIF(NOT USE_R_LIBDIR) ENDFOREACH(CURRENTDIR ${R_LIBDIRS}) IF(NOT EXISTS ${R_LIBDIR}) MESSAGE(FATAL_ERROR "No existing library location found") ELSE(NOT EXISTS ${R_LIBDIR}) MESSAGE(STATUS "Will use ${R_LIBDIR}") ENDIF(NOT EXISTS ${R_LIBDIR}) rkward-0.6.1/rkward/rbackend/rkfrontendtransmitter.cpp0000644000175000017500000001477512124345416022620 0ustar thomasthomas/*************************************************************************** rkfrontendtransmitter - description ------------------- begin : Thu Nov 04 2010 copyright : (C) 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkfrontendtransmitter.h" #include "rkrbackendprotocol_frontend.h" #include "../misc/rkcommonfunctions.h" #include "../settings/rksettingsmodulegeneral.h" #include "klocale.h" #include "krandom.h" #include "kstandarddirs.h" #include #include #include #include #include #include "../version.h" #include "../debug.h" RKFrontendTransmitter::RKFrontendTransmitter () : RKAbstractTransmitter () { RK_TRACE (RBACKEND); start (); } RKFrontendTransmitter::~RKFrontendTransmitter () { RK_TRACE (RBACKEND); RK_ASSERT (!server->isListening ()); } void RKFrontendTransmitter::run () { RK_TRACE (RBACKEND); // start server server = new QLocalServer (this); // we add a bit of randomness to the servername, as in general the servername must be unique // there could be conflicts with concurrent or with previous crashed rkward sessions. if (!server->listen ("rkward" + KRandom::randomString (8))) handleTransmissionError ("Failure to start frontend server: " + server->errorString ()); connect (server, SIGNAL (newConnection ()), this, SLOT (connectAndEnterLoop ()), Qt::QueuedConnection); // start backend backend = new QProcess (this); // Try to synchronize language selection in frontend and backend QStringList env = QProcess::systemEnvironment (); int index = env.indexOf (QRegExp("^LANGUAGE=.*", Qt::CaseInsensitive)); if (index >= 0) env.removeAt (index); env.append ("LANGUAGE=" + KGlobal::locale ()->language ()); backend->setEnvironment (env); QStringList args; args.append ("--debug-level=" + QString::number (RK_Debug_Level)); args.append ("--server-name=" + server->fullServerName ()); args.append ("--data-dir=" + RKSettingsModuleGeneral::filesPath ()); args.append ("--locale-dir=" + KGlobal::dirs()->findResourceDir ("locale", KGlobal::locale ()->language () + "/LC_MESSAGES/rkward.mo")); connect (backend, SIGNAL (finished (int, QProcess::ExitStatus)), this, SLOT (backendExit (int))); QString backend_executable = KStandardDirs::findExe (QDir::toNativeSeparators (QCoreApplication::applicationDirPath () + "/rkward.rbackend")); if (backend_executable.isEmpty ()) backend_executable = KStandardDirs::findExe (QDir::toNativeSeparators (QCoreApplication::applicationDirPath () + "/rbackend/rkward.rbackend")); // for running directly from the build-dir #ifdef Q_WS_MAC if (backend_executable.isEmpty ()) backend_executable = KStandardDirs::findExe (QDir::toNativeSeparators (QCoreApplication::applicationDirPath () + "/../../../rbackend/rkward.rbackend")); #endif RK_ASSERT (!backend_executable.isEmpty ()); backend->start (backend_executable, args, QIODevice::ReadOnly); // fetch security token if (!backend->canReadLine ()) backend->waitForReadyRead (); token = QString::fromLocal8Bit (backend->readLine ()).trimmed (); backend->closeReadChannel (QProcess::StandardError); backend->closeReadChannel (QProcess::StandardOutput); exec (); if (!connection) { RK_ASSERT (false); return; } connection->close (); backend->waitForFinished (); } void RKFrontendTransmitter::connectAndEnterLoop () { RK_TRACE (RBACKEND); RK_ASSERT (server->hasPendingConnections ()); QLocalSocket *con = server->nextPendingConnection (); server->close (); // handshake if (!con->canReadLine ()) con->waitForReadyRead (1000); QString token_c = QString::fromLocal8Bit (con->readLine ()); token_c.chop (1); if (token_c != token) handleTransmissionError (i18n ("Error during handshake with backend process. Expected token '%1', received token '%2'").arg (token).arg (token_c)); if (!con->canReadLine ()) con->waitForReadyRead (1000); QString version_c = QString::fromLocal8Bit (con->readLine ()); version_c.chop (1); if (version_c != RKWARD_VERSION) handleTransmissionError (i18n ("Version mismatch during handshake with backend process. Frontend is version '%1' while backend is '%2'.\nPlease fix your installation.").arg (RKWARD_VERSION).arg (version_c)); setConnection (con); } void RKFrontendTransmitter::requestReceived (RBackendRequest* request) { RK_TRACE (RBACKEND); if (request->type == RBackendRequest::Output) { ROutputList* list = request->output; for (int i = 0; i < list->size (); ++i) { ROutput *out = (*list)[i]; if (handleOutput (out->output, out->output.length (), out->type)) { RKRBackendEvent* event = new RKRBackendEvent (new RBackendRequest (false, RBackendRequest::OutputStartedNotification)); qApp->postEvent (RKRBackendProtocolFrontend::instance (), event); } delete (out); } request->output = 0; RK_ASSERT (request->synchronous); writeRequest (request); // to tell the backend, that we are keeping up. Also deletes the request. return; } RKRBackendEvent* event = new RKRBackendEvent (request); qApp->postEvent (RKRBackendProtocolFrontend::instance (), event); } void RKFrontendTransmitter::backendExit (int exitcode) { RK_TRACE (RBACKEND); handleTransmissionError ("Backend process has exited with code " + QString::number (exitcode)); } void RKFrontendTransmitter::writeRequest (RBackendRequest *request) { RK_TRACE (RBACKEND); transmitRequest (request); connection->flush (); delete request; } void RKFrontendTransmitter::handleTransmissionError (const QString &message) { RK_TRACE (RBACKEND); RBackendRequest* req = new RBackendRequest (false, RBackendRequest::BackendExit); req->params["message"] = message; RKRBackendEvent* event = new RKRBackendEvent (req); qApp->postEvent (RKRBackendProtocolFrontend::instance (), event); exit (); } #include "rkfrontendtransmitter.moc" rkward-0.6.1/rkward/rbackend/rkrbackend.h0000644000175000017500000002376312124345416017717 0ustar thomasthomas/*************************************************************************** rkrbackend - description ------------------- begin : Sun Jul 25 2004 copyright : (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef R_EMBED_H #define R_EMBED_H #include #include #include #include #include #include #include "rcommand.h" #include "rcommandstack.h" #include "rkrbackendprotocol_backend.h" #ifdef Q_WS_WIN extern "C" { void RK_scheduleIntr(); } #endif class QStringList; class QTextCodec; class RInterface; struct ROutput; /** This class represents the thread the R backend is running in. So to speak, this is where the "eventloop" of R is running. The main thing happening in this class, is that it enters R's REPL (Read-evaluate-parse-loop). Whenever there are commands to be executed, those get evaluated. When there are not, processing of X11-Events in R is triggered. The rest of the time the thread sleeps. Actually, there is also a custom sub-eventloop, which gets called when the R backend has requested something. See handleRequest(). In this case, we might have to run some further child commands in the backend, before we proceed with the commands in the main queque. Some thing like: - Run some RCommand s - R backend asks for some information / action - potentially some more RCommand s are needed to accomplish this request - (additional levels of substacks) - return the result - R backend request completed - Run some more RCommand s This subordinate/nested eventloop is done in handleRequest (). A closely related class is RInterface: RKRBackend communicates with RInterface by placing QCustomEvent s, when commands are done or when the backend needs information from the frontend. For historical reasons, the definitions of RKRBackend class-members are currently spread over different files. Only one RKRBackend-object can be used in an application. Don't use this class in RKWard directly. Unless you really want to modify the internal workings of the backend, you will want to look at RInterface and use the functions there. @see RInterface @author Thomas Friedrichsmeier */ class RKRBackend : public RKROutputBuffer { public: /** constructor. Only one RKRBackend should ever be created, and that happens in RInterface::RInterface (). */ RKRBackend (); /** destructor */ virtual ~RKRBackend (); /** interrupt processing of the current command. This is much like the user pressing Ctrl+C in a terminal with R. This is probably the only non-portable function in RKRBackend, but I can't see a good way around placing it here, or to make it portable. */ static void interruptProcessing (bool interrupt); /** Enum specifying types of errors that may occur while parsing/evaluating a command in R */ enum RKWardRError { NoError=0, /**< No error */ Incomplete=1, /**< The command is incomplete. Command was syntactically ok up to given point, but incomplete. It may or may not be semantically correct. */ SyntaxError=2, /**< Syntax error */ OtherError=3 /**< Other error, usually a semantic error, e.g. object not found */ }; /** initializes the R-backend. Emits an RCallbackType::Started-request (with any error messages) when done. Note that you should call initialize only once in a application */ void initialize (const char* locale_dir); void enterEventLoop (); protected: /** low-level initialization of R */ bool startR (); /** reimplemented from RKROutputBuffer */ bool doMSleep (int msecs); public: /** convenience low-level function for running a command, directly @param command command to be runCommand @returns true if command was run successfully, false in case of an error */ bool runDirectCommand (const QString &command); /** convenience low-level function for running a command, directly. Use this overload, if you want to handle a return value. @param command command to be runCommand @param datatype the data type that should be (attempted to be) returned @returns a pointer to the RCommandProxy-instance that was created and used, internally. You can query this pointer for status and data. Be sure to delete it, when done. */ RCommandProxy *runDirectCommand (const QString &command, RCommand::CommandTypes datatype); /** call this periodically to make R's x11 windows process their events */ static void processX11Events (); void handleRequest (RBackendRequest *request) { handleRequest (request, true); }; /** A relic of history. In contrast to handlePlainGenericRequest(), these requests support running sub-commands. However, the remaining requests which are currently handled this way should probably be converted to dedicated RKRBackendRequest's in the future. See also handlePlainGenericRequest(). */ void handleHistoricalSubstackRequest (const QStringList &list); /** Sends a request to the frontend and returns the result (an empty QStringList in case of asynchronous requests). Note that this function has considerable overlap with handleHistoricalSubstackRequest(). Exactly which requests get handled by which function is somewhat arbitrary, ATM. However, request that do not need sub-commands to be run, should generally be converted to use handlePlainGenericRequest(). (And probably all historicalSubstackRequests should be replaced!) */ QStringList handlePlainGenericRequest (const QStringList ¶meters, bool synchronous); RCommandProxy* fetchNextCommand (); /** The command currently being executed. */ RCommandProxy *current_command; QList all_current_commands; void runCommand (RCommandProxy *command); /** only one instance of this class may be around. This pointer keeps the reference to it, for interfacing to from C to C++ */ static RKRBackend *this_pointer; static void tryToDoEmergencySave (); bool r_running; /** Check whether the runtime version of R is at least the given version. Valid only *after* startR() has been called! */ bool RRuntimeIsVersion (int major, int minor, int revision) { return (r_version >= (1000 * major + 10 * minor + revision)); } /** backend is killed. Should exit as soon as possible. @see kill */ enum KillType { NotKilled = 0, ExitNow = 1, EmergencySaveThenExit = 2, AlreadyDead = 3 } killed; /** "Kills" the backend. Actually this just tells the thread that is is about to be terminated. Allows the thread to terminate gracefully */ void kill () { killed = ExitNow; }; bool isKilled () { return (killed != NotKilled); }; QTextCodec *current_locale_codec; struct RKReplStatus { QByteArray user_command_buffer; int user_command_transmitted_up_to; bool user_command_completely_transmitted; int user_command_parsed_up_to; int user_command_successful_up_to; enum { NoUserCommand, UserCommandTransmitted, UserCommandSyntaxError, UserCommandRunning, UserCommandFailed, ReplIterationKilled } user_command_status; int eval_depth; // Number (depth) of non-user commands currently running. User commands can only run at depth 0 enum { NotInBrowserContext = 0, InBrowserContext, InBrowserContextPreventRecursion } browser_context; bool interrupted; }; static RKReplStatus repl_status; /** holds a copy of the default R_GlobalContext. Needed to find out, when a browser context has been left. */ static void *default_global_context; void commandFinished (bool check_object_updates_needed=true); /** A list of symbols that have been assigned new values during the current command */ QStringList changed_symbol_names; /** the main loop. See \ref RKRBackend for a more detailed description */ void run (const QString &locale_dir); static void scheduleInterrupt (); void startOutputCapture (); void printAndClearCapturedMessages (bool with_header); void printCommand (const QString &command); void catToOutputFile (const QString &out); QMutex all_current_commands_mutex; QList current_commands_to_cancel; bool too_late_to_interrupt; void interruptCommand (int command_id); /** check stdout and stderr for new output (from sub-processes). Since this function is called from both threads, it is protected by a mutex. * @param forcibly: if false, and the other thread currently has a lock on the mutex, do nothing, and return false. * @returns: true, if output was actually fetched (or no output was available), false, if the function gave up on a locked mutex. */ bool fetchStdoutStderr (bool forcibly); /** public for technical reasons */ QMutex stdout_stderr_mutex; private: void clearPendingInterrupt (); protected: RCommandProxy* handleRequest (RBackendRequest *request, bool mayHandleSubstack); private: int stdout_stderr_fd; /** set up R standard callbacks */ void setupCallbacks (); /** connect R standard callbacks */ void connectCallbacks (); int r_version; QString output_file; /** A copy of the names of the toplevel environments (as returned by "search ()"). */ QStringList toplevel_env_names; /** A copy of the names of the toplevel symbols in the .GlobalEnv. */ QStringList global_env_toplevel_names; /** check wether the object list / global environment / individual symbols have changed, and updates them, if needed */ void checkObjectUpdatesNeeded (bool check_list); /** The previously executed command. Only non-zero until a new command has been requested. */ RCommandProxy *previous_command; }; #endif rkward-0.6.1/rkward/rbackend/rcommand.cpp0000644000175000017500000001436712124345416017744 0ustar thomasthomas/*************************************************************************** rcommand.cpp - description ------------------- begin : Mon Nov 11 2002 copyright : (C) 2002, 2006, 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rcommand.h" #include "rcommandreceiver.h" #include "rinterface.h" #include "../windows/rkcommandlog.h" #include "rkrbackendprotocol_shared.h" #include "../core/robject.h" #include "../debug.h" #include "../rkglobals.h" RCommandBase::RCommandBase (bool is_chain) { is_command_chain = is_chain; RCommandBase::parent = 0; } RCommand* RCommandBase::commandPointer () { if (is_command_chain) return 0; return static_cast (this); } RCommandChain* RCommandBase::chainPointer () { if (!is_command_chain) return 0; return static_cast (this); } RCommandNotifier::RCommandNotifier () : QObject () { RK_TRACE (RBACKEND); } RCommandNotifier::~RCommandNotifier () { RK_TRACE (RBACKEND); } int RCommand::next_id = 0; RCommand::RCommand(const QString &command, int type, const QString &rk_equiv, RCommandReceiver *receiver, int flags) : RData (), RCommandBase (false) { RK_TRACE (RBACKEND); _id = next_id++; // if we ever submit enough commands to get a buffer overflow, use only positive numbers. if (next_id < 0) { next_id = 0; } _type = type; _flags = flags; if (type & Plugin) _command = command.trimmed (); else _command = command; if (_command.isEmpty ()) _type |= EmptyCommand; status = 0; has_been_run_up_to = 0; _rk_equiv = rk_equiv; _notifier = 0; for (int i = 0; i < MAX_RECEIVERS_PER_RCOMMAND; ++i) receivers[i] = 0; if (!(type & Internal)) { addReceiver (receiver); addReceiver (RKCommandLog::getLog ()); } } RCommand::~RCommand(){ RK_TRACE (RBACKEND); for (QList::const_iterator it = output_list.constBegin (); it != output_list.constEnd (); ++it) { delete (*it); } // The output_list itself is cleared automatically if (_notifier) delete _notifier; } RCommandNotifier* RCommand::notifier () { if (!_notifier) { RK_TRACE (RBACKEND); _notifier = new RCommandNotifier (); RK_ASSERT (_notifier); } return _notifier; } void RCommand::addReceiver (RCommandReceiver *receiver) { RK_TRACE (RBACKEND); if (!receiver) return; for (int i = 0; i < MAX_RECEIVERS_PER_RCOMMAND; ++i) { if (receivers[i] == 0) { receivers[i] = receiver; receiver->addCommand (this); return; } } RK_DEBUG (RBACKEND, DL_ERROR, "Too many receivers for command"); } void RCommand::removeReceiver (RCommandReceiver *receiver) { RK_TRACE (RBACKEND); if (!receiver) return; for (int i = 0; i < MAX_RECEIVERS_PER_RCOMMAND; ++i) { if (receivers[i] == receiver) { receivers[i] = 0; return; } } RK_DEBUG (RBACKEND, DL_WARNING, "Was not a receiver in RCommand::removeReceiver: %p", receiver); } void RCommand::finished () { RK_TRACE (RBACKEND); for (int i=0; i < MAX_RECEIVERS_PER_RCOMMAND; ++i) { if (receivers[i] == 0) continue; receivers[i]->delCommand (this); receivers[i]->rCommandDone (this); } if (_notifier) _notifier->emitFinished (this); } void RCommand::newOutput (ROutput *output) { RK_TRACE (RBACKEND); for (int i=0; i < MAX_RECEIVERS_PER_RCOMMAND; ++i) { if (receivers[i] == 0) continue; receivers[i]->newOutput (this, output); } } void RCommand::commandLineIn () { RK_TRACE (RBACKEND); RK_ASSERT (_type & User); for (int i=0; i < MAX_RECEIVERS_PER_RCOMMAND; ++i) { if (receivers[i] == 0) continue; receivers[i]->userCommandLineIn (this); } } QString RCommand::error () const { RK_TRACE (RBACKEND); QString ret; for (ROutputList::const_iterator it = output_list.begin (); it != output_list.end (); ++it) { if ((*it)->type == ROutput::Error) { ret.append ((*it)->output); } } return ret; } QString RCommand::output () const { RK_TRACE (RBACKEND); QString ret; for (ROutputList::const_iterator it = output_list.begin (); it != output_list.end (); ++it) { if ((*it)->type == ROutput::Output) { ret.append ((*it)->output); } } return ret; } QString RCommand::warnings () const { RK_TRACE (RBACKEND); QString ret; for (ROutputList::const_iterator it = output_list.begin (); it != output_list.end (); ++it) { if ((*it)->type == ROutput::Warning) { ret.append ((*it)->output); } } return ret; } QString RCommand::fullOutput () const { RK_TRACE (RBACKEND); QString ret; for (ROutputList::const_iterator it = output_list.begin (); it != output_list.end (); ++it) { ret.append ((*it)->output); } return ret; } QString RCommand::remainingCommand () const { RK_TRACE (RBACKEND); RK_ASSERT (_type & User); // not a grave problem, if it's not, but not useful, either return _command.mid (has_been_run_up_to); } void RCommand::mergeAndDeleteProxy (RCommandProxy *proxy) { RK_TRACE (RBACKEND); RK_ASSERT (proxy); RK_ASSERT (proxy->id == _id); RK_ASSERT (proxy->type == _type); status = proxy->status; has_been_run_up_to = proxy->has_been_run_up_to; swallowData (*proxy); delete proxy; } RCommandProxy* RCommand::makeProxy () const { RK_TRACE (RBACKEND); RK_ASSERT (status == 0); // Initialization from an already touched command is not a real problem, but certainly no expected usage RK_ASSERT (has_been_run_up_to == 0); RK_ASSERT (getDataType () == RData::NoData); RCommandProxy *ret = new RCommandProxy (_command, _type); ret->id = _id, ret->status = status; ret->has_been_run_up_to = has_been_run_up_to; return ret; } QString RCommand::rQuote (const QString "ed) { return RObject::rQuote (quoted); } #include "rcommand.moc" rkward-0.6.1/rkward/rbackend/rkrbackendprotocol_shared.h0000644000175000017500000001423712124345416023023 0ustar thomasthomas/*************************************************************************** rkrbackendprotocol - description ------------------- begin : Thu Nov 04 2010 copyright : (C) 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKRBACKENDPROTOCOL_SHARED_H #define RKRBACKENDPROTOCOL_SHARED_H #ifndef RKWARD_SPLIT_PROCESS # define RKWARD_THREADED #endif #include #include #include "rcommand.h" class RCommandProxy; class RBackendRequest { public: enum RCallbackType { BackendExit, ShowMessage, ShowFiles, ChooseFile, EditFiles, ReadLine, CommandOut, Started, EvalRequest, CallbackRequest, HistoricalSubstackRequest, PlainGenericRequest, SetParamsFromBackend, Debugger, CommandLineIn, /**< The next line of the current user command has been submitted in the backend. */ #ifndef RKWARD_THREADED Output, /**< A piece of output. Note: If the backend runs in a single process, output is handled in a pull fashion, instead of using requests. */ Interrupt, /**< Interrupt evaluation. This request type originates in the frontend, not the backend (the only one so far). */ #endif OutputStartedNotification, /**< Only used in the frontend: Notification that a new bit of output has arrived. Used to trigger flushing after a timeout. */ OtherRequest /**< Any other type of request. Note: which requests are in the enum, and which are not has mostly historical reasons. @see params */ }; RBackendRequest (bool synchronous, RCallbackType type); ~RBackendRequest (); RCommandProxy *takeCommand () { RCommandProxy* ret = command; command = 0; return ret; } ROutputList *takeOutput () { ROutputList* ret = output; output = 0; return ret; } /** Should this request be handled synchronously? False by default. */ bool synchronous; /** For synchronous requests, only: The frontend-thread will set this to true (using completed()), once the request has been "completed". Important: The backend thread MUST NOT touch a request after it has been sent, and before "done" has been set to true. */ bool volatile done; RCallbackType type; /** For synchronous requests, only: If the the frontend wants any commands to be executed, it will place the next one in this slot. The backend thread should keep executing commands (in a sub-eventloop) while this is non-zero. Also, the backend-thread may place here any command that has just finished. */ RCommandProxy *command; /** Any other parameters, esp. for RCallbackType::OtherRequest. Can be used in both directions. */ QVariantMap params; /** NOTE: only used for separate process backend. See RCallbackType::Output */ ROutputList *output; #ifndef RKWARD_THREADED /** NOTE: this does @em not copy merge the "done" flag. Do that manually, @em after merging (and don't touch the request from the transmitter thread, after that). */ void mergeReply (RBackendRequest *reply); #endif protected: friend class RKRBackendProtocolFrontend; friend class RKRBackendProtocolBackend; void completed () { if (!synchronous) delete this; else done = true; } /** duplicates the request. NOTE: The command, and output, if any are @em taken from the original, and transferred to the copy, not really duplicated. */ RBackendRequest *duplicate (); }; #include /** Simple event class to relay information from the RKRBackend to the main thread. This is basically like QCustomEvent in Qt3*/ class RKRBackendEvent : public QEvent { public: enum EventType { RKWardEvent = QEvent::User + 1 }; RKRBackendEvent (RBackendRequest* data=0) : QEvent ((QEvent::Type) RKWardEvent) { _data = data; }; RKRBackendEvent (); RBackendRequest* data () { return _data; }; private: RBackendRequest* _data; }; /** This is a reduced version of an RCommand, intended for use in the R backend. */ class RCommandProxy : public RData { protected: friend class RCommand; friend class RKRBackend; friend class RKRBackendSerializer; friend class RBackendRequest; RCommandProxy (); ~RCommandProxy (); RCommandProxy (const QString &command, int type); public: // all these are public for technical reasons, only. QString command; int type; int id; int status; int has_been_run_up_to; }; class RKROutputBuffer { public: RKROutputBuffer (); virtual ~RKROutputBuffer (); /** This gets called on normal R output (R_WriteConsole). Used to get at output. returns true, if a *new* piece of output started, i.e. the buffer was empty before this. */ bool handleOutput (const QString &output, int len, ROutput::ROutputType type, bool allow_blocking=true); /** Flushes current output buffer. Meant to be called from RInterface::flushOutput, only. @param forcibly: if true, will always flush the output. If false, will flush the output only if the mutex can be locked without waiting. */ ROutputList flushOutput (bool forcibly=false); protected: /** Function to be called while waiting for downstream threads to catch up. Return false to make the buffer continue, immediately (e.g. to prevent lockups after a crash) */ virtual bool doMSleep (int msecs) = 0; private: /** current output */ ROutputList output_buffer; /** Provides thread-safety for the output_buffer */ QMutex output_buffer_mutex; /** current length of output. If the backlog of output which has not yet been processed by the frontend becomes too long, output will be paused, automatically */ int out_buf_len; }; namespace RKRSharedFunctionality { QString quote (const QString &string); }; #endif rkward-0.6.1/rkward/rbackend/rklocalesupport.h0000644000175000017500000000235412124345416021033 0ustar thomasthomas/*************************************************************************** rklocalesupport - description ------------------- begin : Sun Mar 11 2007 copyright : (C) 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKLOCALESUPPORT_H #define RKLOCALESUPPORT_H class QTextCodec; /** Helper function to determine the QTextCodec best suited to recode the current CTYPE to UTF-8 */ QTextCodec *RKGetCurrentLocaleCodec (); #endif rkward-0.6.1/rkward/rbackend/rkrbackend.cpp0000644000175000017500000017505712124345416020256 0ustar thomasthomas/*************************************************************************** rkrbackend - description ------------------- begin : Sun Jul 25 2004 copyright : (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkrbackend.h" #ifdef Q_WS_WIN # include # include # include # undef ERROR // clashes with R # define Win32 // needed for R includes #else # include # include # include #endif // statics RKRBackend *RKRBackend::this_pointer = 0; RKRBackend::RKReplStatus RKRBackend::repl_status = { QByteArray (), 0, true, 0, 0, RKRBackend::RKReplStatus::NoUserCommand, 0, RKRBackend::RKReplStatus::NotInBrowserContext, false }; void* RKRBackend::default_global_context = 0; #include #include #include #include #include #include "../core/robject.h" #include "../version.h" #include "../debug.h" #include "rkrsupport.h" #include "rkstructuregetter.h" #include "rklocalesupport.h" #include "rkpthreadsupport.h" #include "rksignalsupport.h" #include "../misc/rkcommonfunctions.h" #include #include #include extern "C" { #define R_INTERFACE_PTRS 1 // for R_CStackStart/Limit #define CSTACK_DEFNS 1 // keep R from defining tons of aliases #define R_NO_REMAP 1 // What the...? "Conflicting definitions" between stdint.h and Rinterface.h despite the #if in Rinterface.h #define uintptr_t uintptr_t // needed to detect CHARSXP encoding #define IS_UTF8(x) (Rf_getCharCE(x) == CE_UTF8) #define IS_LATIN1(x) (Rf_getCharCE(x) == CE_LATIN1) #include #include #include #include #include #include #include #include #include #ifdef Q_WS_WIN # include # include structRstart RK_R_Params; // why oh why isn't Rinterface.h available on Windows? LibExtern void* R_GlobalContext; LibExtern uintptr_t R_CStackLimit; LibExtern void R_SaveGlobalEnvToFile(char*); #else # include #endif #ifndef Q_WS_WIN # include // needed for pthread_kill # include // seems to be needed at least on FreeBSD # include // for non-blocking pipes # include #endif ///// i18n #if (defined ENABLE_NLS) && (!defined RKWARD_THREADED) // ENABLE_NLS is from Rconfig.h # include # define RK_MSG_DOMAIN "rkward" // define i18n to be compatible with the easiest usage in KDE # define i18n(msgid) QString::fromUtf8(dgettext(RK_MSG_DOMAIN, msgid)) void RK_setupGettext (const char* locale_dir) { bindtextdomain (RK_MSG_DOMAIN, locale_dir); bind_textdomain_codeset (RK_MSG_DOMAIN, "UTF-8"); } #else # define i18n(msgid) QString(msgid) void RK_setupGettext (const char*) {}; #endif ///// interrupting R void RK_scheduleIntr () { RK_DEBUG (RBACKEND, DL_DEBUG, "interrupt scheduled"); RKRBackend::repl_status.interrupted = true; #ifdef Q_WS_WIN UserBreak = 1; #else RKSignalSupport::callOldSigIntHandler (); #endif } void RK_doIntr () { RK_scheduleIntr (); R_CheckUserInterrupt (); } void RKRBackend::scheduleInterrupt () { if (RKRBackendProtocolBackend::inRThread ()) { RK_scheduleIntr (); } else { #ifdef Q_WS_WIN RK_scheduleIntr (); // Thread-safe on windows?! #else pthread_kill ((pthread_t) RKRBackendProtocolBackend::instance ()->r_thread_id, SIGUSR1); // NOTE: SIGUSR1 relays to SIGINT #endif } } void RKRBackend::interruptCommand (int command_id) { RK_TRACE (RBACKEND); QMutexLocker lock (&all_current_commands_mutex); if (all_current_commands.isEmpty ()) return; if ((command_id == -1) || (all_current_commands.last ()->id == command_id)) { if (!too_late_to_interrupt) { RK_DEBUG (RBACKEND, DL_DEBUG, "scheduling interrupt for command id %d", command_id); scheduleInterrupt (); } } else { // if the command to cancel is *not* the topmost command, then do not interrupt, yet. foreach (RCommandProxy *candidate, all_current_commands) { if (candidate->id == command_id) { if (!current_commands_to_cancel.contains (candidate)) { RK_DEBUG (RBACKEND, DL_DEBUG, "scheduling delayed interrupt for command id %d", command_id); current_commands_to_cancel.append (candidate); } } } } } void clearPendingInterrupt_Worker (void *) { R_CheckUserInterrupt (); } void RKRBackend::clearPendingInterrupt () { RK_TRACE (RBACKEND); bool passed = R_ToplevelExec (clearPendingInterrupt_Worker, 0); if (!passed) RK_DEBUG (RBACKEND, DL_DEBUG, "pending interrupt cleared"); } // some functions we need that are not declared #if R_VERSION < R_Version(2,13,0) LibExtern void Rf_PrintWarnings (void); #endif LibExtern void run_Rmainloop (void); #include } #include "rdata.h" extern SEXP RKWard_RData_Tag; // ############## R Standard callback overrides BEGIN #################### Rboolean RKToplevelStatementFinishedCallback (SEXP expr, SEXP value, Rboolean succeeded, Rboolean visible, void *) { RK_TRACE (RBACKEND); Q_UNUSED (expr); Q_UNUSED (value); Q_UNUSED (visible); if ((RKRBackend::repl_status.eval_depth == 0) && (!RKRBackend::repl_status.browser_context)) { // Yes, toplevel-handlers _do_ get called in a browser context! RK_ASSERT (RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandRunning); if (succeeded) { RKRBackend::repl_status.user_command_successful_up_to = RKRBackend::repl_status.user_command_parsed_up_to; if (RKRBackend::repl_status.user_command_completely_transmitted) { RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::NoUserCommand; RKRBackend::this_pointer->commandFinished (); } else RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandTransmitted; } else { // well, this point of code is never reached with R up to 2.12.0. Instead failed user commands are handled in doError(). RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandFailed; } } return (Rboolean) true; } void RKInsertToplevelStatementFinishedCallback (void *) { RK_TRACE (RBACKEND); if (RKRBackend::this_pointer->r_running) { int pos; Rf_addTaskCallback (&RKToplevelStatementFinishedCallback, 0, &RKInsertToplevelStatementFinishedCallback, "_rkward_main_callback", &pos); } } void RKTransmitNextUserCommandChunk (unsigned char* buf, int buflen) { RK_TRACE (RBACKEND); RK_ASSERT (RKRBackend::repl_status.user_command_transmitted_up_to <= RKRBackend::repl_status.user_command_buffer.length ()); // NOTE: QByteArray::length () does not count the trailing '\0' const char* current_buffer = RKRBackend::repl_status.user_command_buffer.data (); current_buffer += RKRBackend::repl_status.user_command_transmitted_up_to; // Skip what we have already transmitted bool reached_eof = false; int pos = 0; const int max_pos = buflen - 2; // one for the termination bool reached_newline = false; while (true) { buf[pos] = *current_buffer; if (*current_buffer == '\n') { reached_newline = true; break; } else if (*current_buffer == ';') break; else if (*current_buffer == '\0') { reached_eof = true; break; } if (pos >= max_pos) break; ++current_buffer; ++pos; } RKRBackend::repl_status.user_command_transmitted_up_to += (pos + 1); if (reached_eof) { buf[pos] = '\n'; RKRBackend::repl_status.user_command_completely_transmitted = true; } buf[++pos] = '\0'; if (reached_newline || reached_eof) { // Making this request synchronous is a bit painful. However, without this, it's extremely difficult to get correct interleaving of output and command lines RBackendRequest req (true, RBackendRequest::CommandLineIn); req.params["commandid"] = RKRBackend::this_pointer->current_command->id; RKRBackend::this_pointer->handleRequest (&req); } } int RReadConsole (const char* prompt, unsigned char* buf, int buflen, int hist) { RK_TRACE (RBACKEND); RK_ASSERT (buf && buflen); RK_ASSERT (RKRBackend::repl_status.eval_depth >= 0); if (RKRBackend::repl_status.browser_context) { // previously we were in a browser context. Check, whether we've left that. if (RKRBackend::default_global_context == R_GlobalContext) { RKRBackend::repl_status.browser_context = RKRBackend::RKReplStatus::NotInBrowserContext; RKRBackend::this_pointer->handlePlainGenericRequest (QStringList ("endBrowserContext"), false); } } if ((!RKRBackend::repl_status.browser_context) && (RKRBackend::repl_status.eval_depth == 0)) { while (1) { if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::NoUserCommand) { RCommandProxy *command = RKRBackend::this_pointer->fetchNextCommand (); if (!command) { #ifdef Q_OS_WINDOWS // Can't easily override R_CleanUp on Windows, so we're calling it manually, here, then force exit if (RKRBackend::this_pointer->killed == RKRBackend::ExitNow) RCleanUp (SA_NOSAVE, 0, 0); else RCleanUp (SA_SUICIDE, 1, 0); exit (0); #endif return 0; // jumps out of the event loop! } if (!(command->type & RCommand::User)) { RKRBackend::this_pointer->runCommand (command); RKRBackend::this_pointer->commandFinished (); } else { // so, we are about to transmit a new user command, which is quite a complex endeavour... /* Some words about running user commands: - User commands can only be run at the top level of execution, not in any sub-stacks. But then, they should never get there, in the first place. - Handling user commands is totally different from all other commands, and relies on R's "REPL" (read-evaluate-print-loop). This is a whole bunch of dedicated code, but there is no other way to achieve handling of commands as if they had been entered on a plain R console (incluing auto-printing, and toplevel handlers). Most importantly, since important symbols are not exported, such as R_Visible. Vice versa, it is not possible to treat all commands like user commands, esp. in substacks. Problems to deal with: - R_ReadConsole serves a lot of different functions, including reading in code, but also handling user input for readline() or browser(). This makes it necessary to carefully track the current status using "repl_status". You will find repl_status to be modified at a couple of different functions. - One difficulty lies in finding out, just when a command has finished (successfully or with an error). RKToplevelStatementFinishCallback(), and doError() handle the respective cases. NOTE; in R 2.12.0 and above, Rf_countContexts() might help to find out when we are back to square 1! */ RKRBackend::repl_status.user_command_transmitted_up_to = 0; RKRBackend::repl_status.user_command_completely_transmitted = false; RKRBackend::repl_status.user_command_parsed_up_to = 0; RKRBackend::repl_status.user_command_successful_up_to = 0; RKRBackend::repl_status.user_command_buffer = RKRBackend::this_pointer->current_locale_codec->fromUnicode (command->command); RKTransmitNextUserCommandChunk (buf, buflen); RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandTransmitted; return 1; } } else if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::UserCommandTransmitted) { if (RKRBackend::repl_status.user_command_completely_transmitted) { // fully transmitted, but R is still asking for more? This looks like an incomplete statement. // HOWEVER: It may also have been an empty statement such as " ", so let's check whether the prompt looks like a "continue" prompt bool incomplete = false; if (RKRBackend::this_pointer->current_locale_codec->toUnicode (prompt) == RKRSupport::SEXPToString (Rf_GetOption (Rf_install ("continue"), R_BaseEnv))) { incomplete = true; } if (incomplete) RKRBackend::this_pointer->current_command->status |= RCommand::Failed | RCommand::ErrorIncomplete; RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::ReplIterationKilled; if (RKRBackend::RKRBackend::repl_status.user_command_parsed_up_to <= 0) RKRBackend::this_pointer->startOutputCapture (); // HACK: No capture active, but commandFinished() will try to end one Rf_error (""); // to discard the buffer } else { RKTransmitNextUserCommandChunk (buf, buflen); return 1; } } else if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::UserCommandSyntaxError) { RKRBackend::this_pointer->current_command->status |= RCommand::Failed | RCommand::ErrorSyntax; RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::NoUserCommand; if (RKRBackend::RKRBackend::repl_status.user_command_parsed_up_to <= 0) RKRBackend::this_pointer->startOutputCapture (); // HACK: No capture active, but commandFinished() will try to end one RKRBackend::this_pointer->commandFinished (); } else if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::UserCommandRunning) { // This can mean three different things: // 1) User called readline () // 2) User called browser () // 3) R jumped us back to toplevel behind our backs. // Let's find out, which one it is. if (hist && (RKRBackend::default_global_context != R_GlobalContext)) { break; // this looks like a call to browser(). Will be handled below. } int n_frames = 0; RCommandProxy *dummy = RKRBackend::this_pointer->runDirectCommand ("sys.nframe()", RCommand::GetIntVector); if ((dummy->getDataType () == RData::IntVector) && (dummy->getDataLength () == 1)) { n_frames = dummy->intVector ().at (0); } // What the ??? Why does this simple version always return 0? //int n_frames = RKRSupport::SEXPToInt (RKRSupport::callSimpleFun0 (Rf_install ("sys.nframe"), R_GlobalEnv)); if (n_frames < 1) { // No active frames? This can't be a call to readline(), then, so probably R jumped us back to toplevel, behind our backs. // For safety, let's reset and start over. RKRBackend::this_pointer->current_command->status |= RCommand::Failed | RCommand::ErrorOther; RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::ReplIterationKilled; Rf_error(""); // to discard the buffer } else { // A call to readline(). Will be handled below break; } } else if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::UserCommandFailed) { RKRBackend::this_pointer->current_command->status |= RCommand::Failed | RCommand::ErrorOther; RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::NoUserCommand; RKRBackend::this_pointer->commandFinished (); } else { RK_ASSERT (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::ReplIterationKilled); RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::NoUserCommand; RKRBackend::this_pointer->commandFinished (); } } } // here, we handle readline() calls and such, i.e. not the regular prompt for code // browser() also takes us here. QVariantMap params; RBackendRequest::RCallbackType request_type = RBackendRequest::ReadLine; params["prompt"] = QVariant (prompt); params["cancelled"] = QVariant (false); // add info for browser requests if (hist && (RKRBackend::default_global_context != R_GlobalContext)) { if (RKRBackend::repl_status.browser_context == RKRBackend::RKReplStatus::InBrowserContextPreventRecursion) { qstrncpy ((char *) buf, "n\n", buflen); // skip this, by feeding the browser() a continue return 1; } else { RKRBackend::repl_status.browser_context = RKRBackend::RKReplStatus::InBrowserContextPreventRecursion; RCommandProxy *dummy = RKRBackend::this_pointer->runDirectCommand (".rk.callstack.info()", RCommand::GetStructuredData); request_type = RBackendRequest::Debugger; if ((dummy->getDataType () == RData::StructureVector) && (dummy->getDataLength () >= 4)) { RData::RDataStorage dummy_data = dummy->structureVector (); params["calls"] = QVariant (dummy_data.at (0)->stringVector ()); params["funs"] = QVariant (dummy_data.at (1)->stringVector ()); params["envs"] = QVariant (dummy_data.at (2)->stringVector ()); params["locals"] = QVariant (dummy_data.at (3)->stringVector ()); params["relsrclines"] = QVariant (dummy_data.at (4)->stringVector ()); // hacky: passing a QList is not supported by QVariant } else { RK_ASSERT (false); } RKRBackend::repl_status.browser_context = RKRBackend::RKReplStatus::InBrowserContext; } RK_ASSERT (RKRBackend::repl_status.browser_context == RKRBackend::RKReplStatus::InBrowserContext); } RBackendRequest request (true, request_type); request.params = params; RKRBackend::this_pointer->handleRequest (&request); if (request.params["cancelled"].toBool ()) { if (RKRBackend::this_pointer->current_command) RKRBackend::this_pointer->current_command->status |= RCommand::Canceled; Rf_error ("cancelled"); RK_ASSERT (false); // should not reach this point. } QByteArray localres = RKRBackend::this_pointer->current_locale_codec->fromUnicode (request.params["result"].toString ()); // need to append a newline, here. TODO: theoretically, RReadConsole comes back for more, if \0 was encountered before \n. qstrncpy ((char *) buf, localres.left (buflen - 2).append ('\n').data (), buflen); return 1; } #ifdef Q_WS_WIN int RReadConsoleWin (const char* prompt, char* buf, int buflen, int hist) { return RReadConsole (prompt, (unsigned char*) buf, buflen, hist); } #endif bool RKRBackend::fetchStdoutStderr (bool forcibly) { #ifndef Q_OS_WIN if (!forcibly) { if (!stdout_stderr_mutex.tryLock ()) return false; } else { stdout_stderr_mutex.lock (); } // it seems, setting this only once is not always enough. fcntl (stdout_stderr_fd, F_SETFL, fcntl (stdout_stderr_fd, F_GETFL, 0) | O_NONBLOCK); char buffer[1024]; while (true) { int bytes = read (stdout_stderr_fd, buffer, 1023); if (bytes <= 0) break; buffer[bytes] = '\0'; // NOTE: we must not risk blocking inside handleOutput, while the stdout_stderr_mutex is locked! handleOutput (current_locale_codec->toUnicode (buffer, bytes), bytes, ROutput::Warning, false); } stdout_stderr_mutex.unlock (); #endif return true; } void RWriteConsoleEx (const char *buf, int buflen, int type) { RK_TRACE (RBACKEND); // output while nothing else is running (including handlers?) -> This may be a syntax error. if ((RKRBackend::repl_status.eval_depth == 0) && (!RKRBackend::repl_status.browser_context) && (!RKRBackend::this_pointer->isKilled ())) { if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::UserCommandTransmitted) { // status UserCommandTransmitted might have been set from RKToplevelStatementFinishedHandler, too, in which case all is fine // (we're probably inside another task handler at this point, then) if (RKRBackend::repl_status.user_command_parsed_up_to < RKRBackend::repl_status.user_command_transmitted_up_to) { RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandSyntaxError; } } else if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::ReplIterationKilled) { // purge superflous newlines and empty output return; } else { RK_ASSERT (RKRBackend::repl_status.user_command_status != RKRBackend::RKReplStatus::NoUserCommand); } } if (RKRBackend::this_pointer->killed == RKRBackend::AlreadyDead) return; // this check is mostly for fork()ed clients if (RKRBackend::repl_status.browser_context == RKRBackend::RKReplStatus::InBrowserContextPreventRecursion) return; RKRBackend::this_pointer->fetchStdoutStderr (true); RKRBackend::this_pointer->handleOutput (RKRBackend::this_pointer->current_locale_codec->toUnicode (buf, buflen), buflen, type == 0 ? ROutput::Output : ROutput::Warning); } /** For R callbacks that we want to disable, entirely */ void RDoNothing () { //RK_TRACE (RBACKEND); } void RCleanUp (SA_TYPE saveact, int status, int RunLast) { RK_TRACE (RBACKEND); Q_UNUSED (RunLast); // R_dot_Last is called while "running" the QuitCommand if (RKRBackend::this_pointer->killed == RKRBackend::AlreadyDead) return; // Nothing to clean up if (!RKRBackend::this_pointer->r_running) return; // prevent recursion (if an error occurs, here, we get jumped to the console repl, again!) R_CheckUserInterrupt (); // if there are any user interrupts pendinging, we want them handled *NOW* RKRBackend::this_pointer->r_running = false; // we could be in a signal handler, and the stack base may have changed. uintptr_t old_lim = R_CStackLimit; R_CStackLimit = (uintptr_t)-1; if ((status != 0) && (RKRBackend::this_pointer->killed != RKRBackend::ExitNow)) RKRBackend::this_pointer->killed = RKRBackend::EmergencySaveThenExit; if (RKRBackend::this_pointer->killed == RKRBackend::EmergencySaveThenExit) { if (R_DirtyImage) { QString filename; QDir dir (RKRBackendProtocolBackend::dataDir ()); int i=0; while (true) { filename = "rkward_recover" + QString::number (i) + ".RData"; if (!dir.exists (filename)) break; i++; } filename = dir.absoluteFilePath (filename); R_SaveGlobalEnvToFile (filename.toLocal8Bit ().data ()); qDebug ("Created emergency save file in %s", qPrintable (filename)); } else { qDebug ("Image not dirty while crashing. No emergency save created."); } } if (saveact != SA_SUICIDE) { if (!RKRBackend::this_pointer->isKilled ()) { RBackendRequest request (true, RBackendRequest::BackendExit); request.params["message"] = QVariant (i18n ("The R engine has shut down with status: %1").arg (status)); RKRBackend::this_pointer->handleRequest (&request); } R_RunExitFinalizers (); Rf_KillAllDevices (); R_CleanTempDir (); } RKRBackend::this_pointer->killed = RKRBackend::AlreadyDead; // just in case R_CStackLimit = old_lim; // well, it should not matter any longer, but... } void RSuicide (const char* message) { RK_TRACE (RBACKEND); if (!RKRBackend::this_pointer->isKilled ()) { RBackendRequest request (true, RBackendRequest::BackendExit); request.params["message"] = QVariant (i18n ("The R engine has encountered a fatal error:\n%1").arg (message)); RKRBackend::this_pointer->handleRequest (&request); RKRBackend::this_pointer->killed = RKRBackend::EmergencySaveThenExit; RCleanUp (SA_SUICIDE, 1, 0); } else { RK_ASSERT (false); } } void RKRBackend::tryToDoEmergencySave () { RK_TRACE (RBACKEND); if (RKRBackendProtocolBackend::inRThread ()) { // If we are in the correct thread, things are easy: RKRBackend::this_pointer->killed = RKRBackend::EmergencySaveThenExit; RCleanUp (SA_SUICIDE, 1, 0); RK_doIntr (); // to jump out of the loop, if needed } else { // If we are in the wrong thread, things are a lot more tricky. We need to cause the R thread to exit, and wait for it to finish saving. // Fortunately, if we are in the wrong thread, that probably means, the R thread did *not* crash, and will thus still be functional this_pointer->killed = EmergencySaveThenExit; RK_scheduleIntr (); for (int i = 0; i < 100; ++i) { // give it up to ten seconds to intterrupt and exit the loop if (!this_pointer->r_running) break; RKRBackendProtocolBackend::msleep (100); } if (!this_pointer->r_running) { for (int i = 0; i < 600; ++i) { // give it up to sixty seconds to finish saving if (this_pointer->killed == AlreadyDead) return; // finished RKRBackendProtocolBackend::msleep (100); } } RK_ASSERT (false); // Too bad, but we seem to be stuck. No chance but to return (and crash) } } QStringList charPArrayToQStringList (const char** chars, int count) { QStringList ret; for (int i = 0; i < count; ++i) { // do we need to do locale conversion, here? ret.append (chars[i]); } return ret; } int RChooseFile (int isnew, char *buf, int len) { RK_TRACE (RBACKEND); RBackendRequest request (true, RBackendRequest::ChooseFile); request.params["new"] = QVariant ((bool) isnew); RKRBackend::this_pointer->handleRequest (&request); QByteArray localres = RKRBackend::this_pointer->current_locale_codec->fromUnicode (request.params["result"].toString ()); qstrncpy ((char *) buf, localres.data (), len); // return length of filename (strlen (buf)) return (qMin (len - 1, localres.size ())); } /* There are about one million possible entry points to editing / showing files. We try to cover them all, using the following bunch of functions (REditFilesHelper() and doShowEditFiles() are helpers, only) */ void REditFilesHelper (QStringList files, QStringList titles, QString wtitle, RBackendRequest::RCallbackType edit, bool delete_files, bool prompt) { RK_TRACE (RBACKEND); RK_ASSERT ((edit == RBackendRequest::ShowFiles) || (edit == RBackendRequest::EditFiles)); RBackendRequest request (edit != RBackendRequest::ShowFiles, edit); // editing is synchronous, showing is asynchronous if (edit == RBackendRequest::ShowFiles) { request.params["delete"] = QVariant (delete_files); } // see ?file.show() for what appears to be the intended meaning of these first three parameters // (which seem to be inconsistently named even in R itself...) request.params["files"] = QVariant (files); request.params["titles"] = QVariant (titles); request.params["wtitle"] = QVariant (wtitle); request.params["prompt"] = QVariant (prompt); RKRBackend::this_pointer->handleRequest (&request); } int REditFiles (int nfile, const char **file, const char **title, const char *wtitle) { RK_TRACE (RBACKEND); REditFilesHelper (charPArrayToQStringList (file, nfile), charPArrayToQStringList (title, nfile), wtitle, RBackendRequest::EditFiles, false, true); // default implementation seems to return 1 if nfile <= 0, else 1. No idea, what for. see unix/std-sys.c return (nfile <= 0); } SEXP doShowEditFiles (SEXP files, SEXP titles, SEXP wtitle, SEXP del, SEXP prompt, RBackendRequest::RCallbackType edit) { RK_TRACE (RBACKEND); QStringList file_strings = RKRSupport::SEXPToStringList (files); QStringList title_strings = RKRSupport::SEXPToStringList (titles); QString wtitle_string = RKRSupport::SEXPToString (wtitle); bool del_files = RKRSupport::SEXPToInt (del, 0) != 0; bool do_prompt = RKRSupport::SEXPToInt (prompt, 0) != 0; RK_ASSERT (file_strings.size () == title_strings.size ()); RK_ASSERT (file_strings.size () >= 1); REditFilesHelper (file_strings, title_strings, wtitle_string, edit, del_files, do_prompt); return (R_NilValue); } SEXP doEditFiles (SEXP files, SEXP titles, SEXP wtitle, SEXP prompt) { return (doShowEditFiles (files, titles, wtitle, R_NilValue, prompt, RBackendRequest::EditFiles)); } int REditFile (const char *buf) { RK_TRACE (RBACKEND); const char *editor = "none"; const char *title = ""; // does not exist in standard R 2.1.0, so no idea what to return. return REditFiles (1, const_cast (&buf), &title, editor); } SEXP doShowFiles (SEXP files, SEXP titles, SEXP wtitle, SEXP delete_files, SEXP prompt) { return (doShowEditFiles (files, titles, wtitle, delete_files, prompt, RBackendRequest::ShowFiles)); } int RShowFiles (int nfile, const char **file, const char **headers, const char *wtitle, Rboolean del, const char */* pager */) { RK_TRACE (RBACKEND); REditFilesHelper (charPArrayToQStringList (file, nfile), charPArrayToQStringList (headers, nfile), QString (wtitle), RBackendRequest::ShowFiles, (bool) del, true); // default implementation seems to returns 1 on success, 0 on failure. see unix/std-sys.c return 1; } /* FROM R_ext/RStartup.h: "Return value here is expected to be 1 for Yes, -1 for No and 0 for Cancel: symbolic constants in graphapp.h" */ int doDialogHelper (QString caption, QString message, QString button_yes, QString button_no, QString button_cancel, bool wait) { RK_TRACE (RBACKEND); RBackendRequest request (wait, RBackendRequest::ShowMessage); request.params["caption"] = QVariant (caption); request.params["message"] = QVariant (message); request.params["button_yes"] = QVariant (button_yes); request.params["button_no"] = QVariant (button_no); request.params["button_cancel"] = QVariant (button_cancel); RKRBackend::this_pointer->handleRequest (&request); if (wait) { QString ret = request.params["result"].toString (); if (ret == "yes") return 1; if (ret == "no") return -1; } return 0; } SEXP doDialog (SEXP caption, SEXP message, SEXP button_yes, SEXP button_no, SEXP button_cancel, SEXP wait) { RK_TRACE (RBACKEND); int result = doDialogHelper (RKRSupport::SEXPToString (caption), RKRSupport::SEXPToString (message), RKRSupport::SEXPToString (button_yes), RKRSupport::SEXPToString (button_no), RKRSupport::SEXPToString (button_cancel), RKRSupport::SEXPToInt (wait)); SEXP ret = Rf_allocVector(INTSXP, 1); INTEGER (ret)[0] = result; return ret; } void RShowMessage (const char* message) { RK_TRACE (RBACKEND); doDialogHelper (i18n ("Message from the R backend"), message, "ok", QString (), QString (), true); } // TODO: currently used on windows, only! int RAskYesNoCancel (const char* message) { RK_TRACE (RBACKEND); if (RKRBackend::this_pointer->killed) return -1; // HACK: At this point R asks whether to save the workspace. We have already handled that. So return -1 for "no" return doDialogHelper (i18n ("Question from the R backend"), message, "yes", "no", "cancel", true); } void RBusy (int busy) { RK_TRACE (RBACKEND); // R_ReplIteration calls R_Busy (1) after reading in code (if needed), successfully parsing it, and right before evaluating it. if (busy) { if (RKRBackend::repl_status.user_command_status == RKRBackend::RKReplStatus::UserCommandTransmitted) { if (RKRBackend::this_pointer->current_command->type & RCommand::CCCommand) { QByteArray chunk = RKRBackend::repl_status.user_command_buffer.mid (RKRBackend::repl_status.user_command_parsed_up_to, RKRBackend::repl_status.user_command_transmitted_up_to - RKRBackend::repl_status.user_command_parsed_up_to); RKRBackend::this_pointer->printCommand (RKRBackend::this_pointer->current_locale_codec->toUnicode (chunk)); } if (RKRBackend::this_pointer->current_command->type & RCommand::CCOutput) { // flush any previous output caputre and start a new one if (RKRBackend::repl_status.user_command_successful_up_to > 0) RKRBackend::this_pointer->printAndClearCapturedMessages (false); RKRBackend::this_pointer->startOutputCapture (); } RKRBackend::repl_status.user_command_parsed_up_to = RKRBackend::repl_status.user_command_transmitted_up_to; RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandRunning; } } } // ############## R Standard callback overrides END #################### // NOTE: stdout_stderr_mutex is recursive to support fork()s, better RKRBackend::RKRBackend () : stdout_stderr_mutex (QMutex::Recursive) { RK_TRACE (RBACKEND); current_locale_codec = QTextCodec::codecForLocale (); r_running = false; current_command = 0; RK_ASSERT (this_pointer == 0); this_pointer = this; } #ifdef Q_WS_WIN void RKRBackend::setupCallbacks () { RK_TRACE (RBACKEND); R_setStartTime(); R_DefParams(&RK_R_Params); // IMPORTANT: see also the #ifndef QS_WS_WIN-portion! RK_R_Params.rhome = get_R_HOME (); RK_R_Params.home = getRUser (); RK_R_Params.CharacterMode = RGui; RK_R_Params.ShowMessage = RShowMessage; RK_R_Params.ReadConsole = RReadConsoleWin; RK_R_Params.WriteConsoleEx = RWriteConsoleEx; RK_R_Params.WriteConsole = 0; RK_R_Params.CallBack = RDoNothing; RK_R_Params.YesNoCancel = RAskYesNoCancel; RK_R_Params.Busy = RBusy; // TODO: callback mechanism(s) for ChosseFile, ShowFiles, EditFiles // TODO: also for RSuicide (Less important, obviously, since this should not be triggered, in normal operation). // NOTE: For RCleanUp see RReadConsole RCleanup? RK_R_Params.R_Quiet = (Rboolean) 0; RK_R_Params.R_Interactive = (Rboolean) 1; } void RKRBackend::connectCallbacks () { RK_TRACE (RBACKEND); R_SetParams(&RK_R_Params); } #else void RKRBackend::setupCallbacks () { RK_TRACE (RBACKEND); } /* SEXP dummyselectlist (SEXP, SEXP, SEXP, SEXP) { qDebug ("got it"); return R_NilValue; }*/ void RKRBackend::connectCallbacks () { RK_TRACE (RBACKEND); // IMPORTANT: see also the #ifdef QS_WS_WIN-portion! // connect R standard callback to our own functions. Important: Don't do so, before our own versions are ready to be used! R_Outputfile = NULL; R_Consolefile = NULL; ptr_R_Suicide = RSuicide; ptr_R_ShowMessage = RShowMessage; // rarely used in R on unix ptr_R_ReadConsole = RReadConsole; ptr_R_WriteConsoleEx = RWriteConsoleEx; ptr_R_WriteConsole = 0; ptr_R_ResetConsole = RDoNothing; ptr_R_FlushConsole = RDoNothing; ptr_R_ClearerrConsole = RDoNothing; ptr_R_Busy = RBusy; ptr_R_CleanUp = RCleanUp; // unfortunately, it seems, we can't safely cancel quitting anymore, here! ptr_R_ShowFiles = RShowFiles; ptr_R_ChooseFile = RChooseFile; // TODO: R devels disabled this for some reason. We set it anyway... ptr_R_EditFile = REditFile; // ptr_R_EditFiles = REditFiles; // undefined reference /* ptr_do_selectlist = dummyselectlist; ptr_do_dataviewer = dummyselectlist;*/ // these two, we won't override // ptr_R_loadhistory = ... // we keep our own history // ptr_R_savehistory = ... // we keep our own history } #endif RKRBackend::~RKRBackend () { RK_TRACE (RBACKEND); } #if 0 static int timeout_counter = 0; #endif void processX11EventsWorker (void *) { // this basically copied from R's unix/sys-std.c (Rstd_ReadConsole) #ifndef Q_WS_WIN for (;;) { fd_set *what; what = R_checkActivityEx(R_wait_usec > 0 ? R_wait_usec : 50, 1, RK_doIntr); R_runHandlers(R_InputHandlers, what); if (what == NULL) break; } /* This seems to be needed to make Rcmdr react to events. Has this always been the case? It was commented out for a long time, without anybody noticing. */ R_PolledEvents (); #else #warning TODO: correct? R_ProcessEvents(); #endif #if 0 // TODO: The remainder of this function had been commented out since R 2.3.x and is not in Rstd_ReadConsole. Do we still need this? /* I don't really understand what I'm doing here, but apparently this is necessary for Tcl-Tk windows to function properly. */ R_PolledEvents (); /* Maybe we also need to also call R_timeout_handler once in a while? Obviously this is extremely crude code! TODO: verify we really need this. */ if (++timeout_counter > 100) { // extern void (* R_timeout_handler) (); // already defined in Rinferface.h if (R_timeout_handler) R_timeout_handler (); timeout_counter = 0; } #endif } void RKRBackend::processX11Events () { // do not trace if (!this_pointer->r_running) return; if (this_pointer->isKilled ()) return; RKRBackend::repl_status.eval_depth++; // In case an error (or user interrupt) is caught inside processX11EventsWorker, we don't want to long-jump out. R_ToplevelExec (processX11EventsWorker, 0); RKRBackend::repl_status.eval_depth--; } LibExtern int R_interrupts_pending; SEXP doError (SEXP call) { RK_TRACE (RBACKEND); if ((RKRBackend::repl_status.eval_depth == 0) && (!RKRBackend::repl_status.browser_context) && (!RKRBackend::this_pointer->isKilled ()) && (RKRBackend::repl_status.user_command_status != RKRBackend::RKReplStatus::ReplIterationKilled)) { RKRBackend::repl_status.user_command_status = RKRBackend::RKReplStatus::UserCommandFailed; } if (RKRBackend::repl_status.interrupted) { // it is unlikely, but possible, that an interrupt signal was received, but the current command failed for some other reason, before processing was acutally interrupted. In this case, R_interrupts_pending if not yet cleared. // NOTE: if R_interrupts_pending stops being exported one day, we might be able to use R_CheckUserInterrupt() inside an R_ToplevelExec() to find out, whether an interrupt was still pending. if (!R_interrupts_pending) { RKRBackend::repl_status.interrupted = false; if (RKRBackend::repl_status.user_command_status != RKRBackend::RKReplStatus::ReplIterationKilled) { // was interrupted only to step out of the repl iteration QMutexLocker lock (&(RKRBackend::this_pointer->all_current_commands_mutex)); foreach (RCommandProxy *command, RKRBackend::this_pointer->all_current_commands) command->status |= RCommand::Canceled; RK_DEBUG (RBACKEND, DL_DEBUG, "interrupted"); } } } else if (RKRBackend::repl_status.user_command_status != RKRBackend::RKReplStatus::ReplIterationKilled) { QString string = RKRSupport::SEXPToString (call); RKRBackend::this_pointer->handleOutput (string, string.length (), ROutput::Error); RK_DEBUG (RBACKEND, DL_DEBUG, "error '%s'", qPrintable (string)); } return R_NilValue; } SEXP doSubstackCall (SEXP call) { RK_TRACE (RBACKEND); R_CheckUserInterrupt (); QStringList list = RKRSupport::SEXPToStringList (call); // handle symbol updates inline if (list.count () == 2) { // schedule symbol update for later if (list[0] == "ws") { // always keep in mind: No current command can happen for tcl/tk events. if ((!RKRBackend::this_pointer->current_command) || (RKRBackend::this_pointer->current_command->type & RCommand::ObjectListUpdate) || (!(RKRBackend::this_pointer->current_command->type & RCommand::Sync))) { // ignore Sync commands that are not flagged as ObjectListUpdate if (!RKRBackend::this_pointer->changed_symbol_names.contains (list[1])) RKRBackend::this_pointer->changed_symbol_names.append (list[1]); } return R_NilValue; } } /* // this is a useful place to sneak in test code for profiling if (list.value (0) == "testit") { for (int i = 10000; i >= 1; --i) { setWarnOption (i); } return R_NilValue; } */ RKRBackend::this_pointer->handleHistoricalSubstackRequest (list); return R_NilValue; } SEXP doPlainGenericRequest (SEXP call, SEXP synchronous) { RK_TRACE (RBACKEND); R_CheckUserInterrupt (); QStringList ret = RKRBackend::this_pointer->handlePlainGenericRequest (RKRSupport::SEXPToStringList (call), RKRSupport::SEXPToInt (synchronous)); return RKRSupport::StringListToSEXP (ret); } void R_CheckStackWrapper (void *) { R_CheckStack (); } SEXP doUpdateLocale () { RK_TRACE (RBACKEND); RK_DEBUG (RBACKEND, DL_WARNING, "Changing locale"); RKRBackend::this_pointer->current_locale_codec = RKGetCurrentLocaleCodec (); RK_DEBUG (RBACKEND, DL_WARNING, "New locale codec is %s", RKRBackend::this_pointer->current_locale_codec->name ().data ()); return R_NilValue; } // returns the MIME-name of the current locale encoding (from Qt) SEXP doLocaleName () { RK_TRACE (RBACKEND); RK_ASSERT (RKRBackend::this_pointer->current_locale_codec); SEXP res = Rf_allocVector(STRSXP, 1); PROTECT (res); SET_STRING_ELT (res, 0, Rf_mkChar (RKRBackend::this_pointer->current_locale_codec->name ().data ())); UNPROTECT (1); return res; } SEXP doGetStructure (SEXP toplevel, SEXP name, SEXP envlevel, SEXP namespacename) { RK_TRACE (RBACKEND); RKStructureGetter getter (false); RData *ret = getter.getStructure (toplevel, name, envlevel, namespacename); return R_MakeExternalPtr (ret, RKWard_RData_Tag, R_NilValue); } SEXP doGetGlobalEnvStructure (SEXP name, SEXP envlevel, SEXP namespacename) { RK_TRACE (RBACKEND); return doGetStructure (Rf_findVar (Rf_install (CHAR (STRING_ELT (name, 0))), R_GlobalEnv), name, envlevel, namespacename); } /** copy a symbol without touching it (esp. not forcing any promises) */ SEXP doCopyNoEval (SEXP name, SEXP fromenv, SEXP toenv) { RK_TRACE (RBACKEND); if(!Rf_isString (name) || Rf_length (name) != 1) Rf_error ("name is not a single string"); if(!Rf_isEnvironment (fromenv)) Rf_error ("fromenv is not an environment"); if(!Rf_isEnvironment (toenv)) Rf_error ("toenv is not an environment"); Rf_defineVar (Rf_install (CHAR (STRING_ELT (name, 0))), Rf_findVar (Rf_install (CHAR (STRING_ELT (name, 0))), fromenv), toenv); return (R_NilValue); } bool RKRBackend::startR () { RK_TRACE (RBACKEND); setupCallbacks (); RKSignalSupport::saveDefaultSignalHandlers (); too_late_to_interrupt = false; r_running = true; int argc = 3; char* argv[3] = { qstrdup ("--slave"), qstrdup ("--no-save"), qstrdup ("--no-restore") }; Rf_initialize_R (argc, argv); // in R on windows the stack limits detection seems to work out of the box for threads #ifndef Q_WS_WIN { char dummy; size_t stacksize; void *stackstart; RKGetCurrentThreadStackLimits (&stacksize, &stackstart, &dummy); R_CStackStart = (uintptr_t) stackstart; R_CStackLimit = stacksize; } #endif #ifdef Q_WS_WIN R_set_command_line_arguments(argc, argv); FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); #endif #ifndef Q_OS_WIN // re-direct stdout / stderr to a pipe, so we can read output from system() calls int pfd[2]; pipe (pfd); dup2 (pfd[1], STDOUT_FILENO); dup2 (pfd[1], STDERR_FILENO); // forward both to a single channel to avoid interleaving hell, for now. close (pfd[1]); stdout_stderr_fd = pfd[0]; #endif setup_Rmainloop (); #ifndef Q_WS_WIN // safety check: If we are beyond the stack boundaries already, we better disable stack checking // this has to come *after* the first setup_Rmainloop ()! Rboolean stack_ok = R_ToplevelExec (R_CheckStackWrapper, (void *) 0); if (!stack_ok) { RK_DEBUG (RBACKEND, DL_WARNING, "R_CheckStack() failed during initialization. Will disable stack checking and try to re-initialize."); RK_DEBUG (RBACKEND, DL_WARNING, "Whether or not things work after this, *please* submit a bug report."); R_CStackStart = (uintptr_t) -1; R_CStackLimit = (uintptr_t) -1; setup_Rmainloop (); } #endif #ifndef Q_WS_WIN // on windows, set in connectCallbacks() for technical reasons R_Interactive = (Rboolean) TRUE; #else setlocale (LC_NUMERIC, "C"); // something appears to mess with the locale on Windows. R will not work correctly without LC_NUMERIC=C #endif RBackendRequest req (false, RBackendRequest::SetParamsFromBackend); req.params["na_real"] = NA_REAL; // may not be initialized before setup_Rmainloop! req.params["na_int"] = NA_INTEGER; handleRequest (&req); RKWard_RData_Tag = Rf_install ("RKWard_RData_Tag"); RKSignalSupport::installSignalProxies (); // for the crash signals RKSignalSupport::installSigIntAndUsrHandlers (RK_scheduleIntr); // register our functions R_CallMethodDef callMethods [] = { { "rk.do.error", (DL_FUNC) &doError, 1 }, { "rk.do.command", (DL_FUNC) &doSubstackCall, 1 }, { "rk.do.generic.request", (DL_FUNC) &doPlainGenericRequest, 2 }, { "rk.get.structure", (DL_FUNC) &doGetStructure, 4 }, { "rk.get.structure.global", (DL_FUNC) &doGetGlobalEnvStructure, 3 }, { "rk.copy.no.eval", (DL_FUNC) &doCopyNoEval, 3 }, { "rk.edit.files", (DL_FUNC) &doEditFiles, 4 }, { "rk.show.files", (DL_FUNC) &doShowFiles, 5 }, { "rk.dialog", (DL_FUNC) &doDialog, 6 }, { "rk.update.locale", (DL_FUNC) &doUpdateLocale, 0 }, { "rk.locale.name", (DL_FUNC) &doLocaleName, 0 }, { 0, 0, 0 } }; R_registerRoutines (R_getEmbeddingDllInfo(), NULL, callMethods, NULL, NULL); connectCallbacks(); RKInsertToplevelStatementFinishedCallback (0); default_global_context = R_GlobalContext; // get info on R runtime version RCommandProxy *dummy = runDirectCommand ("as.numeric (R.version$major) * 1000 + as.numeric (R.version$minor) * 10", RCommand::GetIntVector); if ((dummy->getDataType () == RData::IntVector) && (dummy->getDataLength () == 1)) { r_version = dummy->intVector ().at (0); } else { RK_ASSERT (false); r_version = 0; } return true; } #ifndef Q_OS_WIN static bool backend_was_forked = false; void prepareFork () { RK_TRACE (RBACKEND); if (!RKRBackendProtocolBackend::inRThread ()) return; // we need to make sure that the transmitter thread does not hold a lock on the mutex! RKRBackend::this_pointer->stdout_stderr_mutex.lock (); } void completeForkMaster () { RK_TRACE (RBACKEND); if (!RKRBackendProtocolBackend::inRThread ()) return; RKRBackend::this_pointer->stdout_stderr_mutex.unlock (); if (backend_was_forked) return; backend_was_forked = true; // Block SIGCHLD in the main thread from now on. I don't fully understand, why, but otherwise, these signals // interrupt the select() call in the fork()ing code of library(parallel) sigset_t new_set; sigemptyset (&new_set); sigaddset (&new_set, SIGCHLD); pthread_sigmask (SIG_BLOCK, &new_set, NULL); // This was used to show a warning message. Unfortunately, however, forks also occur on every popen (i.e. in system(..., intern=TRUE). // RKRBackend::this_pointer->handlePlainGenericRequest (QStringList ("forkNotification"), false); RK_DEBUG (RBACKEND, DL_WARNING, "Backend process forked (for the first time, this session)"); // NOTE: perhaps we can heuristically differentiate from popen by checking sys.calls() for something with "fork" in it. // esp., in case we discover adverse side-effects of blocking SIGCHLD, we should attempt this } void completeForkChild () { RKRBackendProtocolBackend::instance ()->r_thread_id = QThread::currentThreadId(); RKRBackend::this_pointer->killed = RKRBackend::AlreadyDead; // Not quite accurate, but disables all communication with the frontend } #endif void RKRBackend::enterEventLoop () { RK_TRACE (RBACKEND); #ifndef Q_OS_WIN pthread_atfork (prepareFork, completeForkMaster, completeForkChild); #endif run_Rmainloop (); // NOTE: Do NOT run Rf_endEmbeddedR(). It does more that we want. We rely on RCleanup, instead. } SEXP parseCommand (const QString &command_qstring, RKRBackend::RKWardRError *error) { RK_TRACE (RBACKEND); ParseStatus status = PARSE_NULL; SEXP cv, pr; QByteArray localc = RKRBackend::this_pointer->current_locale_codec->fromUnicode (command_qstring); // needed so the string below does not go out of scope const char *command = localc.data (); PROTECT(cv=Rf_allocVector(STRSXP, 1)); SET_STRING_ELT(cv, 0, Rf_mkChar(command)); // TODO: Maybe we can use R_ParseGeneral instead. Then we could find the exact character, where parsing fails. Nope: not exported API pr=R_ParseVector(cv, -1, &status, R_NilValue); UNPROTECT(1); if ((!pr) || (TYPEOF (pr) == NILSXP)) { // got a null SEXP. This means parse was *not* ok, even if R_ParseVector told us otherwise if (status == PARSE_OK) { status = PARSE_ERROR; printf ("weird parse error\n"); } } if (status != PARSE_OK) { if ((status == PARSE_INCOMPLETE) || (status == PARSE_EOF)) { *error = RKRBackend::Incomplete; } else if (status == PARSE_ERROR) { //extern SEXP parseError (SEXP call, int linenum); //parseError (R_NilValue, 0); *error = RKRBackend::SyntaxError; } else { // PARSE_NULL *error = RKRBackend::OtherError; } pr = R_NilValue; } return pr; } SEXP runCommandInternalBase (SEXP pr, RKRBackend::RKWardRError *error) { RK_TRACE (RBACKEND); SEXP exp; int r_error = 0; exp=R_NilValue; if (TYPEOF(pr)==EXPRSXP && LENGTH(pr)>0) { int bi=0; while (bi= RCommand::GetIntVector) && (datatype <= RCommand::GetStructuredData)); RCommandProxy *c = new RCommandProxy (command, RCommand::App | RCommand::Sync | RCommand::Internal | datatype); runCommand (c); return c; } void setWarnOption (int level) { SEXP s, t; PROTECT (t = s = Rf_allocList (2)); SET_TYPEOF (s, LANGSXP); SETCAR (t, Rf_install ("options")); t = CDR (t); SETCAR (t, Rf_ScalarInteger (level)); SET_TAG (t, Rf_install ("warn")); // The above is rougly equivalent to parseCommand ("options(warn=" + QString::number (level) + ")", &error), but ~100 times faster RKRBackend::RKWardRError error; runCommandInternalBase (s, &error); UNPROTECT (1); } void RKRBackend::runCommand (RCommandProxy *command) { RK_TRACE (RBACKEND); RK_ASSERT (command); RKWardRError error = NoError; int ctype = command->type; // easier typing // running user commands is quite different from all other commands and should have been handled by RReadConsole RK_ASSERT (!(ctype & RCommand::User)); if (ctype & RCommand::CCCommand) printCommand (command->command); if (ctype & RCommand::CCOutput) startOutputCapture (); if (ctype & RCommand::QuitCommand) { R_dot_Last (); // should run while communication with frontend is still possible RBackendRequest req (true, RBackendRequest::BackendExit); req.params["regular"] = QVariant (true); handleRequest (&req); killed = ExitNow; } else if (!(ctype & RCommand::EmptyCommand)) { repl_status.eval_depth++; SEXP parsed = parseCommand (command->command, &error); if (error == NoError) { PROTECT (parsed); SEXP exp; #if R_VERSION >= R_Version(2,13,0) int warn_level = RKRSupport::SEXPToInt (Rf_GetOption1 (Rf_install ("warn")), 0); if (warn_level != 1) setWarnOption (1); #endif PROTECT (exp = runCommandInternalBase (parsed, &error)); #if R_VERSION >= R_Version(2,13,0) if (warn_level != 1) setWarnOption (warn_level); #endif if (error == NoError) { if (ctype & RCommand::GetStringVector) { command->setData (RKRSupport::SEXPToStringList (exp)); } else if (ctype & RCommand::GetRealVector) { command->setData (RKRSupport::SEXPToRealArray (exp)); } else if (ctype & RCommand::GetIntVector) { command->setData (RKRSupport::SEXPToIntArray (exp)); } else if (ctype & RCommand::GetStructuredData) { RData *dummy = RKRSupport::SEXPToRData (exp); command->swallowData (*dummy); delete dummy; } } UNPROTECT (2); // exp, parsed } repl_status.eval_depth--; } // common error/status handling if (error != NoError) { command->status |= RCommand::WasTried | RCommand::Failed; if (error == Incomplete) { command->status |= RCommand::ErrorIncomplete; } else if (error == SyntaxError) { command->status |= RCommand::ErrorSyntax; } else if (!(command->status & RCommand::Canceled)) { command->status |= RCommand::ErrorOther; } } else { command->status |= RCommand::WasTried; } } // On Windows, using runDirectCommand (".rk.cat.output ...") is not safe during some places where we call this, e.g. in RBusy. // Not a problem on Linux with R 2.13.0, though void RKRBackend::catToOutputFile (const QString &out) { RK_TRACE (RBACKEND); if (output_file.isEmpty ()) { RK_ASSERT (false); return; } QFile f (output_file); if (!f.open (QIODevice::WriteOnly | QIODevice::Append)) { RK_ASSERT (false); return; } f.write (current_locale_codec->fromUnicode (out)); f.close (); } void RKRBackend::printCommand (const QString &command) { RK_TRACE (RBACKEND); QStringList params ("highlightRCode"); params.append (command); QString highlighted = handlePlainGenericRequest (params, true).value (0); catToOutputFile (highlighted); } void RKRBackend::startOutputCapture () { RK_TRACE (RBACKEND); // TODO: One of those days, we need to revisit output handling. This request could be perfectly async, but unfortunately, in that case, output chunks can sneak in front of it. handlePlainGenericRequest (QStringList ("recordOutput"), true); } void RKRBackend::printAndClearCapturedMessages (bool with_header) { RK_TRACE (RBACKEND); QStringList params ("recordOutput"); params.append ("end"); QString out = handlePlainGenericRequest (params, true).value (0); if (out.isEmpty ()) return; if (with_header) out.prepend ("

    Messages, warnings, or errors:

    \n"); catToOutputFile (out); } void RKRBackend::run (const QString &locale_dir) { RK_TRACE (RBACKEND); killed = NotKilled; previous_command = 0; initialize (QFile::encodeName (locale_dir)); enterEventLoop (); } void RKRBackend::commandFinished (bool check_object_updates_needed) { RK_TRACE (RBACKEND); RK_DEBUG (RBACKEND, DL_DEBUG, "done running command"); { QMutexLocker lock (&all_current_commands_mutex); too_late_to_interrupt = true; } clearPendingInterrupt (); // Mutex must be unlocked for this! if (current_command->type & RCommand::CCOutput) printAndClearCapturedMessages (current_command->type & RCommand::Plugin); current_command->status -= (current_command->status & RCommand::Running); current_command->status |= RCommand::WasTried; if (current_command->type & RCommand::User) { RK_ASSERT (repl_status.eval_depth == 0); // This method may look a bit over-complex, but remember that repl_status.user_command_successful_up_to works on an *encoded* buffer QByteArray remainder_encoded = repl_status.user_command_buffer.mid (repl_status.user_command_successful_up_to); QString remainder = current_locale_codec->toUnicode (remainder_encoded); current_command->has_been_run_up_to = current_command->command.length () - remainder.length (); } if (check_object_updates_needed || (current_command->type & RCommand::ObjectListUpdate)) { checkObjectUpdatesNeeded (current_command->type & (RCommand::User | RCommand::ObjectListUpdate)); } previous_command = current_command; { QMutexLocker lock (&all_current_commands_mutex); all_current_commands.pop_back(); if (!all_current_commands.isEmpty ()) current_command = all_current_commands.last (); too_late_to_interrupt = false; } } RCommandProxy* RKRBackend::handleRequest (RBackendRequest *request, bool mayHandleSubstack) { RK_TRACE (RBACKEND); RK_ASSERT (request); RKRBackendProtocolBackend::instance ()->sendRequest (request); if ((!request->synchronous) && (!isKilled ())) { RK_ASSERT (mayHandleSubstack); // i.e. not called from fetchNextCommand return 0; } int i = 0; while (!request->done) { if (killed) return 0; // NOTE: processX11Events() may, conceivably, lead to new requests, which may also wait for sub-commands! processX11Events (); // NOTE: sleeping and waking up again can be surprisingly CPU-intensive (yes: more than the event processing, above. I have profiled it). // However, we really don't want to introduce too much delay, either. // Thus, the logic is this: If there was no reply within 2 seconds, then probably we're waiting for a user event, and can afford some more // latency (not too much, though, as we still need to process events). if (!request->done) RKRBackendProtocolBackend::msleep (++i < 200 ? 10 : 50); } RCommandProxy* command = request->takeCommand (); if (!command) return 0; { QMutexLocker lock (&all_current_commands_mutex); all_current_commands.append (command); current_command = command; } if (!mayHandleSubstack) return command; while (command) { runCommand (command); commandFinished (false); command = fetchNextCommand (); }; { QMutexLocker lock (&all_current_commands_mutex); if (current_commands_to_cancel.contains (current_command)) { RK_DEBUG (RBACKEND, DL_DEBUG, "will now interrupt parent command"); current_commands_to_cancel.removeAll (current_command); scheduleInterrupt (); } } return 0; } RCommandProxy* RKRBackend::fetchNextCommand () { RK_TRACE (RBACKEND); RBackendRequest req (!isKilled (), RBackendRequest::CommandOut); // when killed, we do *not* actually wait for the reply, before the request is deleted. req.command = previous_command; previous_command = 0; return (handleRequest (&req, false)); } void RKRBackend::handleHistoricalSubstackRequest (const QStringList &list) { RK_TRACE (RBACKEND); RBackendRequest request (true, RBackendRequest::HistoricalSubstackRequest); request.params["call"] = list; handleRequest (&request); } QStringList RKRBackend::handlePlainGenericRequest (const QStringList ¶meters, bool synchronous) { RK_TRACE (RBACKEND); RBackendRequest request (synchronous, RBackendRequest::PlainGenericRequest); if (parameters.value (0) == "getSessionInfo") { QStringList dummy = parameters; dummy.append (RKRBackendProtocolBackend::backendDebugFile ()); // NOTE: R_SVN_REVISON used to be a string, but has changed to numeric constant in R 3.0.0. QString::arg() handles both. dummy.append (QString (R_MAJOR "." R_MINOR " " R_STATUS " (" R_YEAR "-" R_MONTH "-" R_DAY " r%1)").arg (R_SVN_REVISION)); request.params["call"] = dummy; } else if (parameters.value (0) == "set.output.file") { output_file = parameters.value (1); if (parameters.length () > 2) { RK_ASSERT (parameters.value (2) == "SILENT"); return QStringList (); // For automated testing. The frontend should not be notified, here } request.params["call"] = parameters; } else { request.params["call"] = parameters; } handleRequest (&request); return request.params.value ("return").toStringList (); } void RKRBackend::initialize (const char *locale_dir) { RK_TRACE (RBACKEND); // in RInterface::RInterface() we have created a fake RCommand to capture all the output/errors during startup. Fetch it repl_status.eval_depth++; fetchNextCommand (); startR (); bool lib_load_fail = false; bool sink_fail = false; if (!runDirectCommand ("library (\"rkward\")\n")) lib_load_fail = true; RK_setupGettext (locale_dir); // must happen *after* package loading, since R will re-set it if (!runDirectCommand (QString ("stopifnot(.rk.app.version==\"%1\")\n").arg (RKWARD_VERSION))) lib_load_fail = true; if (!runDirectCommand (".rk.fix.assignments ()\n")) sink_fail = true; // error/output sink and help browser if (!runDirectCommand ("options (error=quote (.rk.do.error ()))\n")) sink_fail = true; QString error_messages; if (lib_load_fail) { error_messages.append (i18n ("

    \t- The 'rkward' R-library either could not be loaded at all, or not in the correct version. This may lead to all sorts of errors, from single missing features to complete failure to function. The most likely cause is that the last installation did not place all files in the correct place. However, in some cases, left-overs from a previous installation that was not cleanly removed may be the cause.

    \

    You should quit RKWard, now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

    \n")); } if (sink_fail) { error_messages.append (i18n ("

    \t-There was a problem setting up the communication with R. Most likely this indicates a broken installation.

    \

    You should quit RKWard, now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

    \n")); } RBackendRequest req (true, RBackendRequest::Started); req.params["message"] = QVariant (error_messages); // blocks until RKWard is set to go (esp, it has displayed startup error messages, etc.) // in fact, a number of sub-commands are run while handling this request! handleRequest (&req); commandFinished (); // the fake startup command repl_status.eval_depth--; } void RKRBackend::checkObjectUpdatesNeeded (bool check_list) { RK_TRACE (RBACKEND); if (killed) return; /* NOTE: We're keeping separate lists of the items on the search path, and the toplevel symbols in .GlobalEnv here. This info is also present in RObjectList (and it's children). However: a) in a less convenient form, b) in the other thread. To avoid locking, and other complexity, keeping separate lists seems an ok solution. Keep in mind that only the names of only the toplevel objects are kept, here, so the memory overhead should be minimal */ bool search_update_needed = false; bool globalenv_update_needed = false; if (check_list) { // TODO: avoid parsing this over and over again RK_DEBUG (RBACKEND, DL_TRACE, "checkObjectUpdatesNeeded: getting search list"); RCommandProxy *dummy = runDirectCommand ("search ()\n", RCommand::GetStringVector); if (dummy->stringVector () != toplevel_env_names) search_update_needed = true; if (search_update_needed) toplevel_env_names = dummy->stringVector (); delete dummy; // TODO: avoid parsing this over and over again RK_DEBUG (RBACKEND, DL_TRACE, "checkObjectUpdatesNeeded: getting globalenv symbols"); dummy = runDirectCommand ("ls (globalenv (), all.names=TRUE)\n", RCommand::GetStringVector); QStringList new_globalenv_toplevel_names = dummy->stringVector (); if (new_globalenv_toplevel_names.count () != global_env_toplevel_names.count ()) { globalenv_update_needed = true; } else { for (int i = 0; i < new_globalenv_toplevel_names.count (); ++i) { // order is not important in the symbol list if (!global_env_toplevel_names.contains (new_globalenv_toplevel_names[i])) { globalenv_update_needed = true; break; } } } if (globalenv_update_needed) global_env_toplevel_names = new_globalenv_toplevel_names; delete dummy; if (search_update_needed) { // this includes an update of the globalenv, even if not needed QStringList call ("syncenvs"); call.append (QString::number (toplevel_env_names.size ())); call.append (toplevel_env_names); dummy = runDirectCommand ("loadedNamespaces ()\n", RCommand::GetStringVector); call.append (dummy->stringVector ()); delete dummy; handleHistoricalSubstackRequest (call); } if (globalenv_update_needed) { QStringList call = global_env_toplevel_names; call.prepend ("syncglobal"); // should be faster than the reverse handleHistoricalSubstackRequest (call); } } if (search_update_needed || globalenv_update_needed) { RK_DEBUG (RBACKEND, DL_TRACE, "checkObjectUpdatesNeeded: updating watches"); runDirectCommand (".rk.watch.globalenv ()\n"); } if (!changed_symbol_names.isEmpty ()) { QStringList call = changed_symbol_names; call.prepend (QString ("sync")); // should be faster than reverse handleHistoricalSubstackRequest (call); changed_symbol_names.clear (); } } bool RKRBackend::doMSleep (int msecs) { // do not trace! if (isKilled ()) return false; RKRBackendProtocolBackend::msleep (msecs); return true; } rkward-0.6.1/rkward/rbackend/rinterface.h0000644000175000017500000005355612124345416017736 0ustar thomasthomas/*************************************************************************** rinterface.h - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RINTERFACE_H #define RINTERFACE_H #include #include #include "rcommand.h" #include "rcommandreceiver.h" class RCommand; class RKWardMainWindow; class RKRBackend; struct RBackendRequest; /** This class provides the main interface to the R-processor. Note that since communication with R is asynchronous, there is no way to get R-output within the same function, the request is submitted. You have to provide an RCommandReceiver object, if you're interested in the output. For a detailed explanation see \ref UsingTheInterfaceToR . @see RCommand *@author Thomas Friedrichsmeier */ class RInterface : public QObject, public RCommandReceiver { Q_OBJECT public: /** constructor */ RInterface(); /** destructor */ ~RInterface(); /** issues the given command in the given chain */ void issueCommand (RCommand *command, RCommandChain *chain=0); /** convenience function to create a new command and issue it. See documentation on RCommand::RCommand () and RInterface::issueCommand () */ void issueCommand (const QString &command, int type = 0, const QString &rk_equiv = QString::null, RCommandReceiver *receiver=0, int flags=0, RCommandChain *chain=0); /** opens a new command chain. Returns a pointer to the new chain. If you specify a parent, the new chain will be a sub-chain of that chain. */ RCommandChain *startChain (RCommandChain *parent=0); /** closes the command chain. The chain (and even its parent, if it is already closed) may be deleted right afterwards! */ void closeChain (RCommandChain *chain); /** Ensures that the given command will not be executed, or, if it is already running, interrupts it. Note that commands marked RCommand::Sync can not be interrupted. */ void cancelCommand (RCommand *command); /** Cancels all running or outstanding commands. @See cancelCommand() */ void cancelAll (); /** Pauses process. The current command will continue to run, but no new command will be */ void pauseProcessing (bool pause); /** returns the command currently running in the thread. Be careful when using the returned pointer! */ RCommand *runningCommand () const { return (all_current_commands.isEmpty () ? 0 : all_current_commands.last ()); }; bool backendIsDead () { return backend_dead; }; bool backendIsIdle (); static bool isNaReal (double value) { return na_real == value; }; static bool isNaInt (int value) { return na_int == value; }; private: void timerEvent (QTimerEvent *); int flush_timer_id; /** Calls RThread::flushOutput(), and takes care of adding the output to all applicable commands */ void flushOutput (bool forced); /** pointer to the RThread */ RKRBackend *r_thread; /** Used by the testing framework. see R function rk.record.commands(). */ QFile command_logfile; enum { NotRecordingCommands, RecordingCommands, RecordingCommandsUnfiltered } command_logfile_mode; void processHistoricalSubstackRequest (const QStringList &calllist); QStringList processPlainGenericRequest (const QStringList &calllist); void processRBackendRequest (RBackendRequest *request); /** A list of all commands that have entered, and not yet left, the backend thread */ QList all_current_commands; /** NOTE: processsing R events while waiting for the next command may, conceivably, lead to new requests, which may also wait for sub-commands! Thus we keep a simple stack of requests. */ QList command_requests; RBackendRequest* currentCommandRequest () const { return (command_requests.isEmpty () ? 0 : command_requests.last ()); }; void tryNextCommand (); void doNextCommand (RCommand *command); RCommand *popPreviousCommand (); void handleCommandOut (RCommand *command); bool previously_idle; /** @see locked */ enum LockType { User=1 /**< locked on user request */ }; /** Used for locking the backend, meaning not further commands will be given to the backend. This is used, when the currently running command is to be cancelled. It is used to make sure that the backend thread does not proceed with further commands, before the main thread takes notice. Also it is called, if the RThread is paused on User request. Further, the thread is initially locked so the main thread can check for some conditions before the backend thread may produce more errors/crashes. @see RInterface::cancelCommand @see RInterface::pauseProcessing May be an OR'ed combination of several LockType s */ int locked; QString startup_errors; bool startup_phase2_error; int num_active_output_record_requests; ROutput::ROutputType previous_output_type; QString recorded_output; friend class RKRBackendProtocolFrontend; bool backend_dead; static double na_real; static int na_int; friend class RKWardMainWindow; friend class RCommand; protected: void handleRequest (RBackendRequest *request); void rCommandDone (RCommand *command); }; /** \page UsingTheInterfaceToR Using the Interface to R \brief An Introduction to using the R-backend: Running commands in R and handling the results This page tries to give you an introduction into using the RInterface and related classes. You'll learn how to submit a command for evaluation by R and how you can get and handle the results. Note that this is fairly low-level. You do not need to read this documentation in order to develop plugins. You'll only need to know this in order to do C++-hacking in rkward. The page is divided into several sections on special problems, but if you're new to rkward, you will probably want to read it as a whole instead of jumping right to those sections. \section UsingTheInterfaceToRTheSimpleCase The simple case: Fire and forget In the most simple case, all you want to do is to send a command to be evaluated executed in the R backend, and you are not interested in what happens (whether the command runs successfully, or what the output is). For this, all you need is the following code: \code #include "rkglobals.h" #include "rbackend/rinterface.h" RKGlobals::rInterface ()->issueCommand ("print (\"hello world!\")", RCommand::User); \endcode You will note, that actually there are two RInterface::issueCommand functions, this one is obviously the one taking a QString and several further parameters as argument. It is actually quite similar to the other RInterface::issueCommand function which takes an RCommand as a parameter. This convenience class basically just creates an RCommand with the same parameters as the constructor of RCommand (RCommand::RCommand), and then submits this RCommand. We'll discuss what an RCommand really is further down below. For now a good enough explanations is, that it's simply a container for a command. The first parameter here is fairly obvious, the command-string the R backend should evaluate. The second parameter (RCommand::User) is an integer, which can be a bit-wise or-able combination of the values in the RCommand::CommandTypes enum. We'll deal with the more specific values in that enum later. Here, we're just using RCommand::User, which signifies, that the command came directly from the user. This information is fairly important, as it affects the handling of the command at several places: Which color it will be given in the R-command log (currently class RKwatch), whether the command can be cancelled (RCommand::User commands can be cancelled, but some other types of commands can not be cancelled), etc. See the documentation on RCommand::CommandTypes (not yet complete) for more information. \section UsingTheInterfaceToRHandlingReturns A slightly more realistic example: Handling the result of an RCommand Most of the time you don't just want to run a command, but you also want to know the result. Now, this is a tad bit more difficult than one might expect at first glance. The reason for this is that the R backend runs in a separate thread. Hence, whenever you submit a command, it generally does not get executed right away - or at least you just don't know, when exactly it gets executed, and when the result is available. This is necessary, so (expensive) commands running in the backend do not block operations in the GUI/frontend. Ok, so how do you get informed, when your command was completed? Using RCommandReceiver. What you will want to do is inherit the class you want to handle the results of RCommands from RCommandReceiver. When finished, the RCommand will be submitted to the (pure virtual) RCommandReceiver::rCommandDone function, which of course you'll have to implement in a meaningful way in your derived class. The corresponding code would look something like this: \code #include "rkglobals.h" #include "rbackend/rinterface.h" #include "rbackend/rcommandreceiver.h" class MyReceiver : public RCommandReceiver { //... protected: /// receives finished RCommands and processes them void rCommandDone (RCommand *command); //... private: /// does something by submitting an RCommand void someFunction (); //... }; void MyReceiver::someFunction () { RKGlobals::rInterface ()->issueCommand ("print (1+1)", RCommand::App, QString::null, this); } void MyReceiver::rCommandDone (RCommand *command) { if (command->successful ()) { qDebug ("Result was %s", command->output ()->utf8 ()); } } \endcode First thing to note is, that this time we're passing two additional parameters to RInterface::issueCommand. The first (or rather third) is really not used as of the time of this writing. What it's meant to become is a short descriptive string attached to the RCommand, that allows the user to make some sense of what this command is all about. The other (fourth) is a pointer to an RCommandReceiver that should be informed of the result. In this case, we'll handle the result in the same object that we issued the command from, so we use "this". So next the RCommand created with RInterface::issueCommand goes on its way to/through the backend (we'll discuss what happens there further down below). Then later, when it has completed its journey, rCommandDone will be called with a pointer to the command as parameter. Now we can use this pointer to retrieve the information we need to know. RCommand::successful and some further simple functions give information about whether the command had any errors and what kind of errors (see RCommand for details). RCommand::output contains the output of the command as a QString (provided the command was successful and had any output). In this case that should be "[1] 2". \section UsingTheInterfaceToRMultipleCommands Dealing with several RCommands in the same object In many cases you don't just want to deal with a single RCommand in an RCommandReceiver, but rather you might submit a bunch of different commands (for instance to find out about several different properties of an object in R-space), and then use some special handling for each of those commands. So the problem is, how to find out, which of your commands you're currently dealing with in rCommandDone. There are several ways to deal with this: - storing the RCommand::id () (each command is automatically assigned a unique id, TODO: do we need this functionality? Maybe remove it for redundancy) - passing appropriate flags to know how to handle the command - keeping the pointer (CAUTION: don't use that pointer except to compare it with the pointer of an incoming command. Commands get deleted when they are finished, and maybe (in the future) if they become obsolete etc. Hence the pointers you keep may be invalid!) To illustrate the option of using "FLAGS", here is a reduced example of how RKVariable updates information about the dimensions and class of the corresponding object in R-space using two different RCommand s: \code #define UPDATE_DIM_COMMAND 1 #define UPDATE_CLASS_COMMAND 2 void RKVariable::updateFromR () { //... RCommand *command = new RCommand ("length (" + getFullName () + ")", RCommand::App | RCommand::Sync | RCommand::GetIntVector, QString::null, this, UPDATE_DIM_COMMAND); RKGlobals::rInterface ()->issueCommand (command, RKGlobals::rObjectList()->getUpdateCommandChain ()); } void RKVariable::rCommandDone (RCommand *command) { //... if (command->getFlags () == UPDATE_DIM_COMMAND) { // ... RCommand *ncommand = new RCommand ("class (" + getFullName () + ")", RCommand::App | RCommand::Sync | RCommand::GetStringVector, QString::null, this, UPDATE_CLASS_COMMAND); RKGlobals::rInterface ()->issueCommand (ncommand, RKGlobals::rObjectList()->getUpdateCommandChain ()); } else if (command->getFlags () == UPDATE_CLASS_COMMAND) { //... } } \endcode Note that you can freely assign whatever flags you like. Only your own class will need to know how to interpret the flags. Now what about that RKGlobals::rObjectList()->getUpdateCommandChain ()? We'll talk about RCommandChain and what you need it for further down below. But first we'll have a look at how an RCommand is handled internally. \section UsingTheInterfaceToRInternalHandling What happens with an RCommand internally? So far we've discussed RInterface:issueCommand () and RCommandReceiver::rCommandDone (). But what happens in between? First the RCommand is placed in a first-in-first-out stack. This stack is needed, since - as discussed - the commands get executed in a separate thread, so several command may get stacked up, before the first one gets run. Then, in the backend thread (RThread) there is a loop running, which fetches those commands from the stack and executes them one by one. Whenver a command has been executed in this thread, it gets updated with information on any errors that occurred and of course also with the result of running the command. Next, a QCustomEvent is being posted. What this does is - rougly speaking -, transfer the pointer to the command back to the main thread in a safe way. Whenever the main thread becomes active again, it will find that QCustomEvent and handle it in RInterface::customEvent. The most important thing happening there, is a call to RCommand::finished (RCommand::finished basically just calls the responsible RCommandReceiver::rCommandDone), and right after that the RCommand gets deleted. \section UsingTheInterfaceToRThreadingIssues Threading issues The above description sounds simple enough, but there may be some threading issues to keep in mind. Consider what needs to happen when RKVariable is trying to update the information on the corresponding object in R-space (see code example above): - RKVariable will first run a command to determine the dimensionality of the object. Now this is more significant than you may think, as RKVariable is a special kind of RObject, which only handles one-dimensional data. Hence, if you create an object in R with \code myobject <- c (1, 2, 3) \endcode In RKWard an RKVariable will be responsible for "myobject". However, if next, you assign something different to myobject: \code myobject <- data.frame (x=c (1, 2, 3), y=c (2, 3, 4)) \endcode the object "myobject" can no longer be handled by RKVariable, but instead by RContainerObject. What this means practically is that if RKVariable finds out its corresponding object in R-space has more than a single dimension, the RKVariable will have to be deleted and an RContainerObject needs to be created instead. So what's the problem? Consider this hypothetical example: - RKVariable for object "myobject" runs a command to determine the dimensionality of "myobject" - Before that command has finished, the user assigns a data.frame to "myobject" (or deletes the object, or whatever) - The command to determine the dimensionality gets run and returns "1 dimension". RKVariable will assume it knows how to handle the object, and tries to do something with "myobject" which is only applicable for one-dimensional objects (e.g. trying to get the data as a one-dimensional array) - The user command assigning a data.frame gets run - RKVariables command to get the data fails Now, you may argue this does not sound all that likely, and probably it isn't, but the point to see is that there are cases in which the threaded nature of R access can pose some problems. More generally, that is the case, if you want a sequence of commands to run in exactly that order without being disturbed by intervening commands. To cope with this, it is sometimes desirable to keep closer control over the order in which commands get run in the backend. \section UsingTheInterfaceToRCommandChains How to ensure commands get executed in the correct order: RCommandChain The way to do this is to use RCommandChain. Basically, when you want commands to be executed in a sequence being sure that no other commands intervene, you do this: \code RCommandChain *chain = RKGlobals::rInterface ()->startChain (); // create first command RKGlobals::rInterface ()->issueCommand (first_command, chain); // wait for command to return, potentially allows further calls to RInterface::issueCommand () from other places in the code // create second command RKGlobals::rInterface ()->issueCommand (second_command, chain); RKGlobals::rInterface ()->closeChain (chain); \endcode Now the point is that you place both of your commands in a dedicated "chain", telling RKWard that those two commands will have to be run in direct succession. If between the first and the second command, another section of the code issues a different command, this command will never be run until all commands in the chain have been run and the chain has been marked as closed. To illustrate, consider this series of events: \code 1) RCommandChain *chain = RKGlobals::rInterface ()->startChain (); 2) RKGlobals::rInterface ()->issueCommand (first_command, chain); 3) RKGlobals::rInterface ()->issueCommand (some_command); 4) RKGlobals::rInterface ()->issueCommand (second_command, chain); 5) RKGlobals::rInterface ()->issueCommand (some_command2); 6) RKGlobals::rInterface ()->closeChain (chain); \endcode Now let's assume for a second, the R backend has been busy doing other stuff and has not executed any of the commands so far, then the execution stack will now look like this: - top level - chain - first_command - second_command - chain is marked as closed: after executing second_command, we may proceed with the top level - some_command - some_command2 So the order of execution will be guaranteed to be first_command, second_command, some_command, some_command2, although they were issued ina different order. You can also open sub chains, using \code RCommandChain *sub_chain = RKGlobals::rInterface ()->startChain (parent_chain); \endcode Remember to close chains when you placed all the commands you needed to. If you don't close the chain, RKWard will continue to wait for new commands in that chain, and never proceed with commands outside of the chain. \section UsingTheInterfaceToROutputOptions Sending results to the output and retrieving low-level data from the backend There are a few special type-modifiers you can specify when creating an RCommand (as part of the second parameter to RCommand::RCommand or RInterface::issueCommand), that determine what will be done with the result: - RCommand::EmptyCommand This one tells the backend, that the command does not really need to be executed, and does not contain anything. You'll rarely need this flag, but sometimes it is useful to submit an empty command simply to find out when it is finished. - RCommand::DirectToOutput This is typically used in plugins: When you specify this modifier, the plain text result of this command (i.e. whatever R prints out when evaluating the command) will be added to the HTML output file. Remember to call RKWardMainWindow::newOutput in order to refresh the output-window once the command has finished. - RCommand::GetIntVector, RCommand::GetStringVector, RCommand::GetRealVector These are special modifiers helpful when transferring data from R to RKWard (used primarily in the editor classes and in conjunction with RCommand::Sync): They tell the backend to try to fetch the result as an array of int, char*, or double, respectively. For instance, if you know object "myobject" is an integer vector, you may get the data using \code RKGlobals::rInterface ()->issueCommand ("myobject", RCommand::Sync | RCommand::GetIntVector, QString::null, this); \endcode Assuming the data can in fact be converted to a vector of integers, you can then access the data using these members in RCommand: - RCommand::intVectorLength (): size of int array - RCommand::getIntVector (): a pointer to the int array. Warning: The array is owned by the RCommand and will be deleted together with the RCommand, so don't just store the pointer - RCommand::detachIntVector (): If you do want to keep the array, use this call to transfer ownership to your class. You are now responsible for freeing up the data yourself. Obviously, whenever trying to transfer data from the backend, this approach is highly superior to parsing the QString RCommand::output (). \section UsingTheInterfaceToRFurtherReading Where to find more detailed information on these topics The following classes contain (or should contain) further important documentation: - \ref RInterface - \ref RCommand - \ref RCommandReceiver - \ref RCommandStack Even lower level API: - \ref RRBackendProtcolFrontend - \ref RBackend - \ref RRBackendProtcolBackend */ #endif rkward-0.6.1/rkward/rbackend/rkrbackendprotocol_frontend.h0000644000175000017500000000361312124345416023370 0ustar thomasthomas/*************************************************************************** rkrbackendprotocol - description ------------------- begin : Thu Nov 04 2010 copyright : (C) 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKRBACKENDPROTOCOL_FRONTEND_H #define RKRBACKENDPROTOCOL_FRONTEND_H #include "rkrbackendprotocol_shared.h" #include class RInterface; class QThread; class RKRBackendProtocolFrontend : public QObject { public: RKRBackendProtocolFrontend (RInterface* parent); ~RKRBackendProtocolFrontend (); static void setRequestCompleted (RBackendRequest *request); ROutputList flushOutput (bool force); void interruptCommand (int command_id); void terminateBackend (); void setupBackend (); static RKRBackendProtocolFrontend* instance () { return _instance; }; protected: /** needed to handle the QEvents, the R thread is sending (notifications on what's happening in the backend thread) */ void customEvent (QEvent *e); #ifndef RKWARD_THREADED QThread* main_thread; #endif private: static RKRBackendProtocolFrontend* _instance; RInterface *frontend; }; #endif rkward-0.6.1/rkward/rbackend/rklocalesupport.cpp0000644000175000017500000002524212124345416021367 0ustar thomasthomas/*************************************************************************** rklocalesupport - description ------------------- begin : Sun Mar 11 2007 copyright : (C) 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rklocalesupport.h" #include #include #ifndef Q_WS_WIN // see https://sourceforge.net/tracker/?func=detail&atid=459009&aid=1698809&group_id=50231 // seems to be needed for GCC 4.3 as well. # include #endif #include #include #include /* NOTE: The code in this file is an almost literal copy taken from setupLocaleMapper in qtextcodec.cpp in Qt 3.3.8 !*/ QTextCodec *checkForCodec(const char *name) { QTextCodec *c = QTextCodec::codecForName(name); if (!c) { const char *at = strchr(name, '@'); if (at) { QByteArray n(name, at - name); c = QTextCodec::codecForName(n.data()); } } return c; } /* locale names mostly copied from XFree86 */ static const char * const iso8859_2locales[] = { "croatian", "cs", "cs_CS", "cs_CZ","cz", "cz_CZ", "czech", "hr", "hr_HR", "hu", "hu_HU", "hungarian", "pl", "pl_PL", "polish", "ro", "ro_RO", "rumanian", "serbocroatian", "sh", "sh_SP", "sh_YU", "sk", "sk_SK", "sl", "sl_CS", "sl_SI", "slovak", "slovene", "sr_SP", 0 }; static const char * const iso8859_3locales[] = { "eo", 0 }; static const char * const iso8859_4locales[] = { "ee", "ee_EE", 0 }; static const char * const iso8859_5locales[] = { "mk", "mk_MK", "sp", "sp_YU", 0 }; static const char * const cp_1251locales[] = { "be", "be_BY", "bg", "bg_BG", "bulgarian", 0 }; static const char * const pt_154locales[] = { "ba_RU", "ky", "ky_KG", "kk", "kk_KZ", 0 }; static const char * const iso8859_6locales[] = { "ar_AA", "ar_SA", "arabic", 0 }; static const char * const iso8859_7locales[] = { "el", "el_GR", "greek", 0 }; static const char * const iso8859_8locales[] = { "hebrew", "he", "he_IL", "iw", "iw_IL", 0 }; static const char * const iso8859_9locales[] = { "tr", "tr_TR", "turkish", 0 }; static const char * const iso8859_13locales[] = { "lt", "lt_LT", "lv", "lv_LV", 0 }; static const char * const iso8859_15locales[] = { "et", "et_EE", // Euro countries "br_FR", "ca_ES", "de", "de_AT", "de_BE", "de_DE", "de_LU", "en_IE", "es", "es_ES", "eu_ES", "fi", "fi_FI", "finnish", "fr", "fr_FR", "fr_BE", "fr_LU", "french", "ga_IE", "gl_ES", "it", "it_IT", "oc_FR", "nl", "nl_BE", "nl_NL", "pt", "pt_PT", "sv_FI", "wa_BE", 0 }; static const char * const koi8_ulocales[] = { "uk", "uk_UA", "ru_UA", "ukrainian", 0 }; static const char * const tis_620locales[] = { "th", "th_TH", "thai", 0 }; static const char * const tcvnlocales[] = { "vi", "vi_VN", 0 }; static bool try_locale_list( const char * const locale[], const char * lang ) { int i; for( i=0; locale[i] && *locale[i] && strcmp(locale[i], lang); i++ ) ; return locale[i] != 0; } // For the probably_koi8_locales we have to look. the standard says // these are 8859-5, but almost all Russian users use KOI8-R and // incorrectly set $LANG to ru_RU. We'll check tolower() to see what // tolower() thinks ru_RU means. // If you read the history, it seems that many Russians blame ISO and // Perestroika for the confusion. // // The real bug is that some programs break if the user specifies // ru_RU.KOI8-R. static const char * const probably_koi8_rlocales[] = { "ru", "ru_SU", "ru_RU", "russian", 0 }; static QTextCodec * ru_RU_hack( const char * i ) { QTextCodec * ru_RU_codec = 0; QByteArray origlocale(setlocale(LC_CTYPE, i)); // unicode koi8r latin5 name // 0x044E 0xC0 0xEE CYRILLIC SMALL LETTER YU // 0x042E 0xE0 0xCE CYRILLIC CAPITAL LETTER YU int latin5 = tolower( 0xCE ); int koi8r = tolower( 0xE0 ); if ( koi8r == 0xC0 && latin5 != 0xEE ) { ru_RU_codec = QTextCodec::codecForName( "KOI8-R" ); } else if ( koi8r != 0xC0 && latin5 == 0xEE ) { ru_RU_codec = QTextCodec::codecForName( "ISO 8859-5" ); } else { // something else again... let's assume... *throws dice* ru_RU_codec = QTextCodec::codecForName( "KOI8-R" ); qWarning( "QTextCodec: using KOI8-R, probe failed (%02x %02x %s)", koi8r, latin5, i ); } setlocale( LC_CTYPE, origlocale.data() ); return ru_RU_codec; } QTextCodec *RKGetCurrentLocaleCodec () { QTextCodec *localeMapper = 0; #ifdef Q_OS_WIN32 localeMapper = QTextCodec::codecForName( "System" ); #else #if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX6) && !defined(Q_OS_OSF) && !defined(Q_OS_MAC) char *charset = nl_langinfo (CODESET); if ( charset ) localeMapper = QTextCodec::codecForName( charset ); #endif if ( !localeMapper ) { // Very poorly defined and followed standards causes lots of code // to try to get all the cases... // Try to determine locale codeset from locale name assigned to // LC_CTYPE category. // First part is getting that locale name. First try setlocale() which // definitely knows it, but since we cannot fully trust it, get ready // to fall back to environment variables. char * ctype = qstrdup( setlocale( LC_CTYPE, 0 ) ); // Get the first nonempty value from $LC_ALL, $LC_CTYPE, and $LANG // environment variables. char * lang = qstrdup( getenv("LC_ALL") ); if ( !lang || lang[0] == 0 || strcmp( lang, "C" ) == 0 ) { if ( lang ) delete [] lang; lang = qstrdup( getenv("LC_CTYPE") ); } if ( !lang || lang[0] == 0 || strcmp( lang, "C" ) == 0 ) { if ( lang ) delete [] lang; lang = qstrdup( getenv("LANG") ); } // Now try these in order: // 1. CODESET from ctype if it contains a .CODESET part (e.g. en_US.ISO8859-15) // 2. CODESET from lang if it contains a .CODESET part // 3. ctype (maybe the locale is named "ISO-8859-1" or something) // 4. locale (ditto) // 5. check for "@euro" // 6. guess locale from ctype unless ctype is "C" // 7. guess locale from lang // 1. CODESET from ctype if it contains a .CODESET part (e.g. en_US.ISO8859-15) char * codeset = ctype ? strchr( ctype, '.' ) : 0; if ( codeset && *codeset == '.' ) localeMapper = checkForCodec( codeset + 1 ); // 2. CODESET from lang if it contains a .CODESET part codeset = lang ? strchr( lang, '.' ) : 0; if ( !localeMapper && codeset && *codeset == '.' ) localeMapper = checkForCodec( codeset + 1 ); // 3. ctype (maybe the locale is named "ISO-8859-1" or something) if ( !localeMapper && ctype && *ctype != 0 && strcmp (ctype, "C") != 0 ) localeMapper = checkForCodec( ctype ); // 4. locale (ditto) if ( !localeMapper && lang && *lang != 0 ) localeMapper = checkForCodec( lang ); // 5. "@euro" if ( !localeMapper && ctype && strstr( ctype, "@euro" ) || lang && strstr( lang, "@euro" ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-15" ); // 6. guess locale from ctype unless ctype is "C" // 7. guess locale from lang char * try_by_name = ctype; if ( ctype && *ctype != 0 && strcmp (ctype, "C") != 0 ) try_by_name = lang; // Now do the guessing. if ( lang && *lang && !localeMapper && try_by_name && *try_by_name ) { if ( try_locale_list( iso8859_15locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-15" ); else if ( try_locale_list( iso8859_2locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-2" ); else if ( try_locale_list( iso8859_3locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-3" ); else if ( try_locale_list( iso8859_4locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-4" ); else if ( try_locale_list( iso8859_5locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-5" ); else if ( try_locale_list( iso8859_6locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-6" ); else if ( try_locale_list( iso8859_7locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-7" ); else if ( try_locale_list( iso8859_8locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-8-I" ); else if ( try_locale_list( iso8859_9locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-9" ); else if ( try_locale_list( iso8859_13locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-13" ); else if ( try_locale_list( tis_620locales, lang ) ) localeMapper = QTextCodec::codecForName( "ISO 8859-11" ); else if ( try_locale_list( koi8_ulocales, lang ) ) localeMapper = QTextCodec::codecForName( "KOI8-U" ); else if ( try_locale_list( cp_1251locales, lang ) ) localeMapper = QTextCodec::codecForName( "CP 1251" ); else if ( try_locale_list( pt_154locales, lang ) ) localeMapper = QTextCodec::codecForName( "PT 154" ); else if ( try_locale_list( probably_koi8_rlocales, lang ) ) localeMapper = ru_RU_hack( lang ); } delete [] ctype; delete [] lang; } if ( localeMapper && localeMapper->mibEnum() == 11 ) localeMapper = QTextCodec::codecForName( "ISO 8859-8-I" ); // If everything failed, we default to 8859-1 // We could perhaps default to 8859-15. if ( !localeMapper ) localeMapper = QTextCodec::codecForName( "ISO 8859-1" ); #endif return localeMapper; } rkward-0.6.1/rkward/rbackend/rkpthreadsupport.cpp0000644000175000017500000000674712124345416021570 0ustar thomasthomas/*************************************************************************** rkpthreadsupport - description ------------------- begin : Fri Feb 23 2007 copyright : (C) 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkpthreadsupport.h" #include #include "../debug.h" #ifdef Q_WS_WIN # include # include // for uintptr_t #else # include # include "pthread_config.h" #endif #ifdef HAVE_PTHREAD_NP_H # include #endif /* Much of this code is borrowed from WINE (http://www.winehq.org) */ void RKGetCurrentThreadStackLimits (size_t *size, void **base, char *reference) { int direction; #ifdef HAVE_PTHREAD_GETATTR_NP pthread_attr_t attr; pthread_getattr_np (pthread_self (), &attr); pthread_attr_getstack (&attr, base, size); pthread_attr_destroy (&attr); #elif defined(HAVE_PTHREAD_ATTR_GET_NP) pthread_attr_t attr; pthread_attr_init (&attr); pthread_attr_get_np (pthread_self (), &attr); pthread_attr_getstack (&attr, base, size); pthread_attr_destroy (&attr); #elif defined(HAVE_PTHREAD_GET_STACKSIZE_NP) && defined(HAVE_PTHREAD_GET_STACKADDR_NP) *size = pthread_get_stacksize_np (pthread_self ()); *base = pthread_get_stackaddr_np (pthread_self ()); #elif defined Q_WS_WIN // This section (up to #endif) copied almost verbatim from R src/gnuwin32/system.c: /* Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka * Copyright (C) 1997--2007 Robert Gentleman, Ross Ihaka and the * R Development Core Team */ { MEMORY_BASIC_INFORMATION buf; uintptr_t bottom, top; VirtualQuery(reference, &buf, sizeof(buf)); bottom = (uintptr_t) buf.AllocationBase; top = (uintptr_t) buf.BaseAddress + buf.RegionSize; *base = (void*) top; *size = (size_t) (top - bottom); } #else # warning Cannot determine the stack limits of a pthread on this system # warning R C stack checking will be disabled *base = reference; *size = (unsigned long) -1; return; #endif // in which direction does the stack grow? { char dummy2; direction = reference > (&dummy2) ? 1 : -1; } // in which direction does the stack base lie? int base_direction = (*base) > reference ? 1 : -1; // switch base / top, if necessary if (base_direction != direction) { *base = ((char *) *base) + (direction * ((unsigned long) *size)); } // sanity check, as on some systems the stack direction is mis-detected somehow. long usage = direction * ((unsigned long) (*base) - (unsigned long) (reference)); if ((usage < 0) || (unsigned long) usage > (unsigned long) (*size)) { RK_DEBUG (RBACKEND, DL_WARNING, "Stack boundaries detection produced bad results. Disabling stack checking."); *size = (unsigned long) -1; } } rkward-0.6.1/rkward/rbackend/rinterface.cpp0000644000175000017500000010230112124345416020250 0ustar thomasthomas/*************************************************************************** rinterface.cpp - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rinterface.h" #include "rcommandstack.h" #include "rkrbackendprotocol_frontend.h" #include "../rkward.h" #include "../rkconsole.h" #include "../settings/rksettingsmoduler.h" #include "../settings/rksettingsmodulegeneral.h" #include "../settings/rksettingsmoduleoutput.h" #include "../settings/rksettingsmodulegraphics.h" #include "../settings/rksettingsmoduleplugins.h" #include "../settings/rksettingsmoduledebug.h" #include "../core/robjectlist.h" #include "../core/renvironmentobject.h" #include "../core/rkmodificationtracker.h" #include "../dialogs/rkloadlibsdialog.h" #include "../dialogs/rkselectlistdialog.h" #include "../dialogs/rkreadlinedialog.h" #include "../agents/showedittextfileagent.h" #include "../agents/rkeditobjectagent.h" #include "../agents/rkprintagent.h" #include "../agents/rkdebughandler.h" #include "../windows/rcontrolwindow.h" #include "../windows/rkworkplace.h" #include "../windows/rkcommandlog.h" #include "../windows/rkhtmlwindow.h" #include "../plugin/rkcomponentmap.h" #include "../misc/rkcommonfunctions.h" #include "rksessionvars.h" #include "../windows/rkwindowcatcher.h" #ifndef DISABLE_RKWINDOWCATCHER // putting this here instead of the class-header so I'm able to mess with it often without long recompiles. Fix when it works! RKWindowCatcher *window_catcher; #endif // DISABLE_RKWINDOWCATCHER #include "../rkglobals.h" #include "../version.h" #include "../debug.h" #include #include #include #include #include #include #include #include // flush new pieces of output after this period of time: #define FLUSH_INTERVAL 100 #define GET_LIB_PATHS 1 #define GET_HELP_BASE 2 #define SET_RUNTIME_OPTS 3 #define STARTUP_PHASE2_COMPLETE 4 #define GET_R_VERSION 5 // statics double RInterface::na_real; int RInterface::na_int; RInterface::RInterface () { RK_TRACE (RBACKEND); #ifndef DISABLE_RKWINDOWCATCHER window_catcher = new RKWindowCatcher (); #endif // DISABLE_RKWINDOWCATCHER // If R_HOME is not set, most certainly the user called the binary without the wrapper script if (!getenv ("R_HOME")) { RK_DEBUG (RBACKEND, DL_ERROR, "No R_HOME environment variable set. RKWard will quit in a moment. Always start rkward in the default way unless you know what you're doing."); } new RCommandStackModel (this); RCommandStack::regular_stack = new RCommandStack (0); startup_phase2_error = false; command_logfile_mode = NotRecordingCommands; previously_idle = false; locked = 0; backend_dead = false; num_active_output_record_requests = 0; previous_output_type = ROutput::NoOutput; flush_timer_id = 0; // create a fake init command RCommand *fake = new RCommand (i18n ("R Startup"), RCommand::App | RCommand::Sync | RCommand::ObjectListUpdate, i18n ("R Startup"), this, STARTUP_PHASE2_COMPLETE); issueCommand (fake); new RKSessionVars (this); new RKDebugHandler (this); new RKRBackendProtocolFrontend (this); RKRBackendProtocolFrontend::instance ()->setupBackend (); /////// Further initialization commands, which do not necessarily have to run before everything else can be queued, here. /////// // NOTE: will receive the list as a call plain generic request from the backend ("updateInstalledPackagesList") issueCommand (".rk.get.installed.packages()", RCommand::App | RCommand::Sync); } void RInterface::issueCommand (const QString &command, int type, const QString &rk_equiv, RCommandReceiver *receiver, int flags, RCommandChain *chain) { RK_TRACE (RBACKEND); issueCommand (new RCommand (command, type, rk_equiv, receiver, flags), chain); } RInterface::~RInterface(){ RK_TRACE (RBACKEND); if (num_active_output_record_requests) RK_DEBUG (RBACKEND, DL_WARNING, "%d requests for recording output still active on interface shutdown", num_active_output_record_requests); delete window_catcher; } bool RInterface::backendIsIdle () { RK_TRACE (RBACKEND); return (RCommandStack::regular_stack->isEmpty() && (!runningCommand())); } RCommand *RInterface::popPreviousCommand () { RK_TRACE (RBACKEND); RK_ASSERT (!all_current_commands.isEmpty ()); RCommandStack::currentStack ()->pop (); return all_current_commands.takeLast (); } void RInterface::tryNextCommand () { RK_TRACE (RBACKEND); if (!currentCommandRequest ()) return; RCommandStack *stack = RCommandStack::currentStack (); bool main_stack = (stack == RCommandStack::regular_stack); if ((!(main_stack && locked)) && stack->isActive ()) { // do not respect locks in substacks RCommand *command = stack->currentCommand (); if (command) { all_current_commands.append (command); if (command->status & RCommand::Canceled) { // avoid passing cancelled commands to R command->status |= RCommand::Failed; // notify ourselves... RCommand* dummy = popPreviousCommand (); RK_ASSERT (dummy == command); handleCommandOut (command); return; } if (previously_idle) RKWardMainWindow::getMain ()->setRStatus (RKWardMainWindow::Busy); previously_idle = false; doNextCommand (command); return; } } if ((!stack->isActive ()) && stack->isEmpty () && !main_stack) { // a substack was depleted delete stack; doNextCommand (0); } else if (main_stack) { if (!previously_idle) RKWardMainWindow::getMain ()->setRStatus (RKWardMainWindow::Idle); previously_idle = true; } } void RInterface::handleCommandOut (RCommand *command) { RK_TRACE (RBACKEND); RK_ASSERT (command); #ifdef RKWARD_DEBUG int dl = DL_WARNING; // failed application commands are an issue worth reporting, failed user commands are not if (command->type () & RCommand::User) dl = DL_DEBUG; if (command->failed ()) { command->status |= RCommand::WasTried | RCommand::Failed; if (command->status & RCommand::ErrorIncomplete) { RK_DEBUG (RBACKEND, dl, "Command failed (incomplete)"); } else if (command->status & RCommand::ErrorSyntax) { RK_DEBUG (RBACKEND, dl, "Command failed (syntax)"); } else if (command->status & RCommand::Canceled) { RK_DEBUG (RBACKEND, dl, "Command failed (interrupted)"); } else { RK_DEBUG (RBACKEND, dl, "Command failed (other)"); } RK_DEBUG (RBACKEND, dl, "failed command was: '%s'", qPrintable (command->command ())); RK_DEBUG (RBACKEND, dl, "- error message was: '%s'", qPrintable (command->error ())); } #endif if (command->status & RCommand::Canceled) { command->status |= RCommand::HasError; ROutput *out = new ROutput; out->type = ROutput::Error; out->output = ("--- interrupted ---"); command->output_list.append (out); command->newOutput (out); } command->finished (); delete command; } void RInterface::doNextCommand (RCommand *command) { RK_TRACE (RBACKEND); RBackendRequest* command_request = currentCommandRequest (); RK_ASSERT (command_request); flushOutput (true); RCommandProxy *proxy = 0; if (command) { proxy = command->makeProxy (); RK_DEBUG (RBACKEND, DL_DEBUG, "running command: %s", command->command ().toLatin1().data ()); command->status |= RCommand::Running; RCommandStackModel::getModel ()->itemChange (command); RKCommandLog::getLog ()->addInput (command); if (command_logfile_mode != NotRecordingCommands) { bool record = true; if (command_logfile_mode != RecordingCommandsUnfiltered) { if (command->type () & (RCommand::Silent | RCommand::Sync)) record = false; } if (record) { command_logfile.write (command->command ().toUtf8 ()); command_logfile.write ("\n"); } } } command_request->command = proxy; RKRBackendProtocolFrontend::setRequestCompleted (command_request); command_requests.pop_back (); } void RInterface::rCommandDone (RCommand *command) { RK_TRACE (RBACKEND); if (command->failed ()) { startup_phase2_error = true; return; } if (command->getFlags () == GET_LIB_PATHS) { RK_ASSERT (command->getDataType () == RData::StringVector); RKSettingsModuleRPackages::defaultliblocs += command->stringVector (); RCommandStack *stack = RCommandStack::currentStack (); RCommandChain *chain = stack->currentChain (); RK_ASSERT (chain); RK_ASSERT (!chain->isClosed ()); // apply user configurable run time options QStringList commands = RKSettingsModuleR::makeRRunTimeOptionCommands () + RKSettingsModuleRPackages::makeRRunTimeOptionCommands () + RKSettingsModuleOutput::makeRRunTimeOptionCommands () + RKSettingsModuleGraphics::makeRRunTimeOptionCommands (); for (QStringList::const_iterator it = commands.begin (); it != commands.end (); ++it) { issueCommand (*it, RCommand::App | RCommand::Sync, QString (), this, SET_RUNTIME_OPTS, chain); } // initialize output file issueCommand ("rk.set.output.html.file (\"" + RKSettingsModuleGeneral::filesPath () + "/rk_out.html\")\n", RCommand::App | RCommand::Sync, QString (), this, SET_RUNTIME_OPTS, chain); closeChain (chain); } else if (command->getFlags () == GET_R_VERSION) { RK_ASSERT (command->getDataType () == RData::StringVector); RK_ASSERT (command->getDataLength () == 1); RKSessionVars::setRVersion (command->stringVector ().value (0)); } else if (command->getFlags () == GET_HELP_BASE) { RK_ASSERT (command->getDataType () == RData::StringVector); RK_ASSERT (command->getDataLength () == 1); RKSettingsModuleR::help_base_url = command->stringVector ().value (0); } else if (command->getFlags () == SET_RUNTIME_OPTS) { // no special handling. In case of failures, staturt_fail was set to true, above. } else if (command->getFlags () == STARTUP_PHASE2_COMPLETE) { QString message = startup_errors; if (startup_phase2_error) message.append (i18n ("

    \t-An unspecified error occurred that is not yet handled by RKWard. Likely RKWard will not function properly. Please check your setup.

    \n")); if (!message.isEmpty ()) { message.prepend (i18n ("

    There was a problem starting the R backend. The following error(s) occurred:

    \n")); QString details = command->fullOutput().replace('<', "<").replace('\n', "
    "); if (!details.isEmpty ()) { // WORKAROUND for stupid KMessageBox behavior. (kdelibs 4.2.3) // If length of details <= 512, it tries to show the details as a QLabel. details = details.leftJustified (513); } KMessageBox::detailedError (0, message, details, i18n ("Error starting R"), KMessageBox::Notify | KMessageBox::AllowLink); } startup_errors.clear (); } } void RInterface::handleRequest (RBackendRequest* request) { RK_TRACE (RBACKEND); if (request->type == RBackendRequest::OutputStartedNotification) { RK_ASSERT (flush_timer_id == 0); flush_timer_id = startTimer (FLUSH_INTERVAL); // calls flushOutput (false); see timerEvent () RKRBackendProtocolFrontend::setRequestCompleted (request); return; } flushOutput (true); if (request->type == RBackendRequest::CommandOut) { RCommandProxy *cproxy = request->takeCommand (); RCommand *command = 0; // NOTE: the order of processing is: first try to submit the next command, then handle the old command. // The reason for doing it this way, instead of the reverse, is that this allows the backend thread / process to continue working, concurrently // NOTE: cproxy should only ever be 0 in the very first cycle if (cproxy) command = popPreviousCommand (); command_requests.append (request); tryNextCommand (); if (cproxy) { RK_ASSERT (command); command->mergeAndDeleteProxy (cproxy); handleCommandOut (command); } tryNextCommand (); } else if (request->type == RBackendRequest::HistoricalSubstackRequest) { command_requests.append (request); processHistoricalSubstackRequest (request->params["call"].toStringList ()); } else if (request->type == RBackendRequest::PlainGenericRequest) { request->params["return"] = QVariant (processPlainGenericRequest (request->params["call"].toStringList ())); RKRBackendProtocolFrontend::setRequestCompleted (request); } else if ((request->type == RBackendRequest::Started)) { // The backend thread has finished basic initialization, but we still have more to do... startup_errors = request->params["message"].toString (); command_requests.append (request); RCommandStack *stack = new RCommandStack (runningCommand ()); RCommandChain *chain = stack->startChain (stack); issueCommand ("paste (R.version[c (\"major\", \"minor\")], collapse=\".\")\n", RCommand::GetStringVector | RCommand::App | RCommand::Sync, QString (), this, GET_R_VERSION, chain); // find out about standard library locations issueCommand (".libPaths ()\n", RCommand::GetStringVector | RCommand::App | RCommand::Sync, QString (), this, GET_LIB_PATHS, chain); // start help server / determined help base url issueCommand (".rk.getHelpBaseUrl ()\n", RCommand::GetStringVector | RCommand::App | RCommand::Sync, QString (), this, GET_HELP_BASE, chain); // NOTE: more initialization commands get run *after* we have determined the standard library locations (see rCommandDone()) } else { processRBackendRequest (request); } } void RInterface::timerEvent (QTimerEvent *) { // do not trace. called periodically flushOutput (false); } void RInterface::flushOutput (bool forced) { // do not trace. called periodically // RK_TRACE (RBACKEND); ROutputList list = RKRBackendProtocolFrontend::instance ()->flushOutput (forced); // this must come _after_ the output has been flushed. if (forced || !list.isEmpty ()) { if (flush_timer_id != 0) { killTimer (flush_timer_id); flush_timer_id = 0; } } foreach (ROutput *output, list) { if (all_current_commands.isEmpty ()) { RK_DEBUG (RBACKEND, DL_WARNING, "output without receiver'%s'", qPrintable (output->output)); delete output; continue; // to delete the other output pointers, too } else { RK_DEBUG (RBACKEND, DL_DEBUG, "output '%s'", qPrintable (output->output)); } if (num_active_output_record_requests) { if (output->type != ROutput::Error) { // NOTE: skip error output. It has already been written as a warning. if (output->type != previous_output_type) { if (!recorded_output.isEmpty ()) recorded_output.append ("\n"); if (output->type == ROutput::Output) recorded_output.append ("
    ");
    					else if (output->type == ROutput::Warning) recorded_output.append ("
    ");
    					else {
    						RK_ASSERT (false);
    						recorded_output.append ("
    ");
    					}
    
    					previous_output_type = output->type;
    				}
    				recorded_output.append (Qt::escape (output->output));
    			}
    		}
    
    		bool first = true;
    		foreach (RCommand* command, all_current_commands) {
    			ROutput *coutput = output;
    			if (!first) {		// this output belongs to several commands at once. So we need to copy it.
    				coutput = new ROutput;
    				coutput->type = output->type;
    				coutput->output = output->output;
    			}
    			first = false;
    
    			if (coutput->type == ROutput::Output) {
    				command->status |= RCommand::HasOutput;
    				command->output_list.append (coutput);
    			} else if (coutput->type == ROutput::Warning) {
    				command->status |= RCommand::HasWarnings;
    				command->output_list.append (coutput);
    			} else if (coutput->type == ROutput::Error) {
    				command->status |= RCommand::HasError;
    				// An error output is typically just the copy of the previous output, so merge if possible
    				if (command->output_list.isEmpty ()) {
    					command->output_list.append (coutput);
    				}
    				if (command->output_list.last ()->output == coutput->output) {
    					command->output_list.last ()->type = ROutput::Error;
    					continue;	// don't call command->newOutput(), again!
    				}
    			}
    			command->newOutput (coutput);
    		}
    	}
    }
    
    void RInterface::issueCommand (RCommand *command, RCommandChain *chain) { 
    	RK_TRACE (RBACKEND);
    
    	if (command->command ().isEmpty ()) command->_type |= RCommand::EmptyCommand;
    	if (RKCarbonCopySettings::shouldCarbonCopyCommand (command)) {
    		command->_type |= RCommand::CCCommand;
    		if (RKCarbonCopySettings::includeOutputInCarbonCopy ()) command->_type |= RCommand::CCOutput;
    	}
    	RCommandStack::issueCommand (command, chain);
    	tryNextCommand ();
    }
    
    RCommandChain *RInterface::startChain (RCommandChain *parent) {
    	RK_TRACE (RBACKEND);
    
    	RCommandChain *ret;
    	ret = RCommandStack::startChain (parent);
    	return ret;
    };
    
    void RInterface::closeChain (RCommandChain *chain) {
    	RK_TRACE (RBACKEND);
    
    	RCommandStack::closeChain (chain);
    	tryNextCommand ();
    };
    
    void RInterface::cancelAll () {
    	RK_TRACE (RBACKEND);
    
    	QList all_commands = RCommandStack::regular_stack->allCommands ();
    	foreach (RCommand* command, all_commands) cancelCommand (command);
    }
    
    void RInterface::cancelCommand (RCommand *command) {
    	RK_TRACE (RBACKEND);
    
    	if (!(command->type () & RCommand::Sync)) {
    		command->status |= RCommand::Canceled;
    		if (command->type () && RCommand::Running) {
    			if ((RKDebugHandler::instance ()->state () == RKDebugHandler::InDebugPrompt) && (command == RKDebugHandler::instance ()->command ())) {
    				RKDebugHandler::instance ()->sendCancel ();
    			} else {
    				RKRBackendProtocolFrontend::instance ()->interruptCommand (command->id ());
    			}
    		}
    		RCommandStackModel::getModel ()->itemChange (command);
    	} else {
    		RK_ASSERT (false);
    	}
    }
    
    void RInterface::pauseProcessing (bool pause) {
    	RK_TRACE (RBACKEND);
    
    	if (pause) locked |= User;
    	else locked -= locked & User;
    }
    
    QStringList RInterface::processPlainGenericRequest (const QStringList &calllist) {
    	RK_TRACE (RBACKEND);
    
    	QString call = calllist.value (0);
    	if (call == "get.tempfile.name") {
    		RK_ASSERT (calllist.count () == 3);
    		return (QStringList (RKCommonFunctions::getUseableRKWardSavefileName (calllist.value (1), calllist.value (2))));
    	} else if (call == "set.output.file") {
    		RK_ASSERT (calllist.count () == 2);
    		RKOutputWindowManager::self ()->setCurrentOutputPath (calllist.value (1));
    	} else if (call == "getCSSlink") {
    		return (QStringList (QString ("\n")));
    	} else if (call == "wdChange") {
    		// in case of separate processes, apply new working directory in frontend, too.
    		QDir::setCurrent (calllist.value (1));
    		RKWardMainWindow::getMain ()->updateCWD ();
    	} else if (call == "highlightRCode") {
    		return (QStringList (RKCommandHighlighter::commandToHTML (calllist.value (1))));
    	} else if (call == "quit") {
    		RKWardMainWindow::getMain ()->close ();
    		// if we're still alive, quitting was cancelled
    		return (QStringList ("FALSE"));
    	} else if (call == "preLocaleChange") {
    		int res = KMessageBox::warningContinueCancel (0, i18n ("A command in the R backend is trying to change the character encoding. While RKWard offers support for this, and will try to adjust to the new locale, this operation may cause subtle bugs, if data windows are currently open. Also the feature is not well tested, yet, and it may be advisable to save your workspace before proceeding.\nIf you have any data editor opened, or in any doubt, it is recommended to close those first (this will probably be auto-detected in later versions of RKWard). In this case, please choose 'Cancel' now, then close the data windows, save, and retry."), i18n ("Locale change"));
    		if (res != KMessageBox::Continue) return (QStringList ("FALSE"));
    	} else if (call == "listPlugins") {
    		RK_ASSERT (calllist.count () == 1);
    		return RKComponentMap::getMap ()->allComponentIds ();
    	} else if (call == "loadPluginMaps") {
    		bool force = (calllist.value (1) == "force");
    		bool reload = (calllist.value (2) == "reload");
    		RKSettingsModulePlugins::registerPluginMaps (calllist.mid (3), force, reload);
    	} else if (call == "updateInstalledPackagesList") {
    		RKSessionVars::instance ()->setInstalledPackages (calllist.mid (1));
    	} else if (call == "showHTML") {
    		RK_ASSERT (calllist.count () == 2);
    		RKWorkplace::mainWorkplace ()->openHelpWindow (calllist.value (1));
    	} else if (call == "select.list") {
    		QString title = calllist.value (1);
    		bool multiple = (calllist.value (2) == "multi");
    		int num_preselects = calllist.value (3).toInt ();
    		QStringList preselects = calllist.mid (4, num_preselects);
    		QStringList choices = calllist.mid (4 + num_preselects);
    
    		QStringList results = RKSelectListDialog::doSelect (0, title, choices, preselects, multiple);
    		if (results.isEmpty ()) results.append ("");	// R wants to have it that way
    		return (results);
    	} else if (call == "commandHistory") {
    		if (calllist.value (1) == "get") {
    			return (RKConsole::mainConsole ()->commandHistory ());
    		} else {
    			RKConsole::mainConsole ()->setCommandHistory (calllist.mid (2), calllist.value (1) == "append");
    		}
    	} else if (call == "getWorkspaceUrl") {
    		KUrl url = RKWorkplace::mainWorkplace ()->workspaceURL ();
    		if (!url.isEmpty ()) return (QStringList (url.url ()));
    	} else if (call == "workplace.layout") {
    		if (calllist.value (1) == "set") {
    			if (calllist.value (2) == "close") RKWorkplace::mainWorkplace ()->closeAll ();
    			QStringList list = calllist.mid (3);
    			RKWorkplace::mainWorkplace ()->restoreWorkplace (list);
    		} else {
    			RK_ASSERT (calllist.value (1) == "get");
    			return (RKWorkplace::mainWorkplace ()->makeWorkplaceDescription ());
    		}
    	} else if (call == "getSessionInfo") {
    		// Non-translatable on purpose. This is meant for posting to the bug tracker, mostly.
    		QStringList lines;
    		lines.append ("RKWard version: " RKWARD_VERSION);
    		lines.append ("KDE version (runtime): " + QString (KDE::versionString ()));
    		lines.append ("KDE version (compile time): " KDE_VERSION_STRING);
    		lines.append ("Local KDE directory: " + KGlobal::dirs ()->localkdedir ());
    		lines.append ("RKWard storage directory: " + RKSettingsModuleGeneral::filesPath ());
    		lines.append (QString());
    		lines.append ("Debug message file(s) in use (these may contain relevant diagnostic output in case of trouble):");
    		lines.append (RKSettingsModuleDebug::debug_file->fileName ());
    		lines.append (calllist.value (1));
    		lines.append (QString ());
    		lines.append ("R version (compile time): " + calllist.value (2));
    		return (lines);
    	} else if (call == "recordCommands") {
    		RK_ASSERT (calllist.count () == 3);
    		QString filename = calllist.value (1);
    		bool unfiltered = (calllist.value (2) == "include.all");
    
    		if (filename.isEmpty ()) {
    			command_logfile_mode = NotRecordingCommands;
    			command_logfile.close ();
    		} else {
    			if (command_logfile_mode != NotRecordingCommands) {
    				return (QStringList ("Attempt to start recording, while already recording commands. Ignoring.)"));
    			} else {
    				command_logfile.setFileName (filename);
    				bool ok = command_logfile.open (QIODevice::WriteOnly | QIODevice::Truncate);
    				if (ok) {
    					if (unfiltered) command_logfile_mode = RecordingCommandsUnfiltered;
    					else command_logfile_mode = RecordingCommands;
    				} else {
    					return (QStringList ("Could not open file for writing. Not recording commands"));
    				}
    			}
    		}
    	} else if (call == "recordOutput") {
    		// NOTE: requests to record output can overlap (i.e. several can be active at the same time). However, we always clear the buffer, each time a request ends, i.e. then
    		// recorded output does NOT overlap.
    		if (calllist.value (1) == "end") {
    			RK_ASSERT (num_active_output_record_requests > 0);
    			--num_active_output_record_requests;
    			QString dummy = recorded_output;
    			recorded_output.clear ();
    			if (!dummy.isEmpty ()) dummy.append ("
    \n"); previous_output_type = ROutput::NoOutput; return QStringList (dummy); } else { ++num_active_output_record_requests; } } else if (call == "printPreview") { RKPrintAgent::printPostscript (calllist.value (1), true); } else if (call == "endBrowserContext") { RKDebugHandler::instance ()->endDebug (); } else { return (QStringList ("Error: unrecognized request '" + call + "'.")); } // for those calls which were recognized, but do not return anything return QStringList (); } void RInterface::processHistoricalSubstackRequest (const QStringList &calllist) { RK_TRACE (RBACKEND); RCommand *current_command = runningCommand (); RCommandChain *in_chain; if (!current_command) { // This can happen for Tcl events. Create a dummy command on the stack to keep things looping. current_command = new RCommand (QString (), RCommand::App | RCommand::EmptyCommand | RCommand::Sync); issueCommand (current_command); } in_chain = startChain (new RCommandStack (current_command)); QString call = calllist.value (0); if (call == "sync") { RK_ASSERT (calllist.count () >= 2); for (int i = 1; i < calllist.count (); ++i) { QString object_name = calllist[i]; RObject *obj = RObjectList::getObjectList ()->findObject (object_name); if (obj) { RK_DEBUG (RBACKEND, DL_DEBUG, "triggering update for symbol %s", object_name.toLatin1 ().data()); obj->markDataDirty (); obj->updateFromR (in_chain); } else { RK_DEBUG (RBACKEND, DL_WARNING, "lookup failed for changed symbol %s", object_name.toLatin1 ().data()); } } } else if (call == "syncenvs") { RK_DEBUG (RBACKEND, DL_DEBUG, "triggering update of object list"); int search_len = calllist.value (1).toInt (); RObjectList::getObjectList ()->updateFromR (in_chain, calllist.mid (2, search_len), calllist.mid (2 + search_len)); } else if (call == "syncglobal") { RK_DEBUG (RBACKEND, DL_DEBUG, "triggering update of globalenv"); RObjectList::getGlobalEnv ()->updateFromR (in_chain, calllist.mid (1)); #ifndef DISABLE_RKWINDOWCATCHER // NOTE: WARNING: When converting these to PlainGenericRequests, the occasional "error, figure margins too large" starts coming up, again. Not sure, why. } else if (call == "startOpenX11") { RK_ASSERT (calllist.count () == 2); window_catcher->start (calllist.value (1).toInt ()); } else if (call == "endOpenX11") { RK_ASSERT (calllist.count () == 2); window_catcher->stop (calllist.value (1).toInt ()); } else if (call == "updateDeviceHistory") { if (calllist.count () >= 2) { window_catcher->updateHistory (calllist.mid (1)); } } else if (call == "killDevice") { RK_ASSERT (calllist.count () == 2); window_catcher->killDevice (calllist.value (1).toInt ()); #endif // DISABLE_RKWINDOWCATCHER } else if (call == "edit") { RK_ASSERT (calllist.count () >= 2); QStringList object_list = calllist.mid (1); new RKEditObjectAgent (object_list, in_chain); } else if (call == "require") { if (calllist.count () >= 2) { QString lib_name = calllist[1]; KMessageBox::information (0, i18n ("The R-backend has indicated that in order to carry out the current task it needs the package '%1', which is not currently installed. We will open the package-management tool, and there you can try to locate and install the needed package.", lib_name), i18n ("Require package '%1'", lib_name)); RKLoadLibsDialog::showInstallPackagesModal (0, in_chain, lib_name); issueCommand (".rk.set.reply (\"\")", RCommand::App | RCommand::Sync, QString::null, 0, 0, in_chain); } else { issueCommand (".rk.set.reply (\"Too few arguments in call to require.\")", RCommand::App | RCommand::Sync, QString::null, 0, 0, in_chain); } } else if (call == "doPlugin") { if (calllist.count () >= 3) { QString message; bool ok; RKComponentMap::ComponentInvocationMode mode = RKComponentMap::ManualSubmit; if (calllist[2] == "auto") mode = RKComponentMap::AutoSubmit; else if (calllist[2] == "submit") mode = RKComponentMap::AutoSubmitOrFail; ok = RKComponentMap::invokeComponent (calllist[1], calllist.mid (3), mode, &message, in_chain); if (!message.isEmpty ()) { QString type = "warning"; if (!ok) type = "error"; issueCommand (".rk.set.reply (list (type=\"" + type + "\", message=\"" + RKCommonFunctions::escape (message) + "\"))", RCommand::App | RCommand::Sync, QString::null, 0, 0, in_chain); } } else { RK_ASSERT (false); } } else { issueCommand ("stop (\"Unrecognized call '" + call + "'. Ignoring\")", RCommand::App | RCommand::Sync, QString::null, 0, 0, in_chain); } closeChain (in_chain); } void RInterface::processRBackendRequest (RBackendRequest *request) { RK_TRACE (RBACKEND); // first, copy out the type. Allows for easier typing below RBackendRequest::RCallbackType type = request->type; if (type == RBackendRequest::CommandLineIn) { int id = request->params["commandid"].toInt (); RCommand *command = all_current_commands.value (0, 0); // User command will always be the first. if ((command == 0) || (command->id () != id)) { RK_ASSERT (false); } else { command->commandLineIn (); } } else if (type == RBackendRequest::ShowMessage) { QString caption = request->params["caption"].toString (); QString message = request->params["message"].toString (); QString button_yes = request->params["button_yes"].toString ();; QString button_no = request->params["button_no"].toString ();; QString button_cancel = request->params["button_cancel"].toString ();; KGuiItem button_yes_item = KStandardGuiItem::yes (); if (button_yes != "yes") button_yes_item.setText (button_yes); KGuiItem button_no_item = KStandardGuiItem::no (); if (button_no != "no") button_no_item.setText (button_no); KGuiItem button_cancel_item = KStandardGuiItem::cancel (); if (button_cancel != "cancel") button_cancel_item.setText (button_cancel); KMessageBox::DialogType dialog_type = KMessageBox::QuestionYesNoCancel; if (button_cancel.isEmpty ()) dialog_type = KMessageBox::QuestionYesNo; if (button_no.isEmpty () && button_cancel.isEmpty ()) { dialog_type = KMessageBox::Information; if (!request->synchronous) { // non-modal dialogs are not supported out of the box by KMessageBox; KDialog* dialog = new KDialog (); KMessageBox::createKMessageBox (dialog, QMessageBox::Information, message, QStringList (), QString (), 0, KMessageBox::Notify | KMessageBox::NoExec); dialog->setWindowTitle (caption); dialog->setAttribute (Qt::WA_DeleteOnClose); dialog->setButtons (KDialog::Ok); dialog->show(); RKRBackendProtocolFrontend::setRequestCompleted (request); return; } } int result = KMessageBox::messageBox (0, dialog_type, message, caption, button_yes_item, button_no_item, button_cancel_item); QString result_string; if ((result == KMessageBox::Yes) || (result == KMessageBox::Ok)) result_string = "yes"; else if (result == KMessageBox::No) result_string = "no"; else if (result == KMessageBox::Cancel) result_string = "cancel"; else RK_ASSERT (false); request->params["result"] = result_string; } else if (type == RBackendRequest::ReadLine) { QString result; // yes, readline *can* be called outside of a current command (e.g. from tcl/tk) bool dummy_command = false; RCommand *command = runningCommand (); if (!command) { command = new RCommand ("", RCommand::EmptyCommand); dummy_command = true; } bool ok = RKReadLineDialog::readLine (0, i18n ("R backend requests information"), request->params["prompt"].toString (), command, &result); request->params["result"] = QVariant (result); if (dummy_command) delete command; if (!ok) request->params["cancelled"] = QVariant (true); } else if (type == RBackendRequest::Debugger) { RKDebugHandler::instance ()->debugCall (request, runningCommand ()); return; // request will be closed by the debug handler } else if ((type == RBackendRequest::ShowFiles) || (type == RBackendRequest::EditFiles)) { ShowEditTextFileAgent::showEditFiles (request); return; // we are not done, yet! } else if (type == RBackendRequest::ChooseFile) { QString filename; if (request->params["new"].toBool ()) { filename = KFileDialog::getSaveFileName (); } else { filename = KFileDialog::getOpenFileName (); } request->params["result"] = QVariant (filename); } else if (type == RBackendRequest::SetParamsFromBackend) { na_real = request->params["na_real"].toDouble (); na_int = request->params["na_int"].toInt (); } else if (type == RBackendRequest::BackendExit) { if (request->params.value ("regular", QVariant (false)).toBool ()) backend_dead = true; // regular exit via QuitCommand if (!backend_dead) { backend_dead = true; QString message = request->params["message"].toString (); message += i18n ("\nThe R backend will be shut down immediately. This means, you can not use any more functions that rely on it. I.e. you can do hardly anything at all, not even save the workspace (but if you're lucky, R already did that). What you can do, however, is save any open command-files, the output, or copy data out of open data editors. Quit RKWard after that.\nSince this should never happen, please write a mail to rkward-devel@lists.sourceforge.net, and tell us, what you were trying to do, when this happened. Sorry!"); KMessageBox::error (0, message, i18n ("R engine has died")); } } else { RK_ASSERT (false); } RKRBackendProtocolFrontend::setRequestCompleted (request); } #include "rinterface.moc" rkward-0.6.1/rkward/rbackend/rkbackendtransmitter.cpp0000644000175000017500000001120712124345416022353 0ustar thomasthomas/*************************************************************************** rkbackendtransmitter - description ------------------- begin : Thu Nov 18 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkbackendtransmitter.h" #include "rkrbackend.h" #include #include "../version.h" #include "../debug.h" RKRBackendTransmitter::RKRBackendTransmitter (const QString &servername, const QString &token) { RK_TRACE (RBACKEND); RKRBackendTransmitter::servername = servername; RKRBackendTransmitter::token = token; } RKRBackendTransmitter::~RKRBackendTransmitter () { RK_TRACE (RBACKEND); if (!current_sync_requests.isEmpty ()) { RK_DEBUG (RBACKEND, DL_WARNING, "%d pending requests while exiting RKRBackendTransmitter", current_sync_requests.size ()); } if (!connection) return; // To prevent closing the process before the frontend has had a chance to see the QuitCommand if (connection->bytesToWrite ()) connection->waitForBytesWritten (1000); msleep (1000); } void RKRBackendTransmitter::timerEvent (QTimerEvent *) { // do not trace flushOutput (false); } void RKRBackendTransmitter::run () { RK_TRACE (RBACKEND); QLocalSocket* con = new QLocalSocket (this); con->connectToServer (servername); setConnection (con); if (!connection->waitForConnected ()) handleTransmissionError ("Could not connect: " + connection->errorString ()); // handshake connection->write (token.toLocal8Bit ().data ()); connection->write ("\n"); connection->write (RKWARD_VERSION); connection->write ("\n"); connection->waitForBytesWritten (); startTimer (200); // calls flushOutput(false), periodically. See timerEvent() exec (); } void RKRBackendTransmitter::writeRequest (RBackendRequest *request) { RK_TRACE (RBACKEND); if (request->type != RBackendRequest::Output) flushOutput (true); transmitRequest (request); connection->flush (); if (request->synchronous) { current_sync_requests.append (request); RK_DEBUG (RBACKEND, DL_DEBUG, "Expecting replies for %d requests (added %p)", current_sync_requests.size (), request); } else { delete request; } } void RKRBackendTransmitter::requestReceived (RBackendRequest* request) { RK_TRACE (RBACKEND); // first check for requests which originated in the frontend if (request->type == RBackendRequest::Interrupt) { RKRBackend::this_pointer->interruptCommand (request->params.value ("commandid", -1).toInt ()); // requests which originated in the backend below this line } else { if (current_sync_requests.isEmpty ()) { RK_ASSERT (false); return; } RBackendRequest* current_sync_request = current_sync_requests.takeFirst (); if (current_sync_request->type == RBackendRequest::Output) { delete current_sync_request; // this was just our internal request } else { current_sync_request->mergeReply (request); current_sync_request->done = true; } RK_DEBUG (RBACKEND, DL_DEBUG, "Expecting replies for %d requests (popped %p)", current_sync_requests.size (), current_sync_request); } delete request; } void RKRBackendTransmitter::flushOutput (bool force) { if (!current_sync_requests.isEmpty ()) return; RKRBackend::this_pointer->fetchStdoutStderr (force); ROutputList out = RKRBackend::this_pointer->flushOutput (force); if (out.isEmpty ()) return; RK_TRACE (RBACKEND); // output request would not strictly need to be synchronous. However, making them synchronous ensures that the frontend is keeping up with the output sent by the backend. RBackendRequest* request = new RBackendRequest (true, RBackendRequest::Output); request->output = new ROutputList (out); writeRequest (request); } void RKRBackendTransmitter::handleTransmissionError (const QString &message) { RK_TRACE (RBACKEND); RK_DEBUG (RBACKEND, DL_ERROR, "%s", qPrintable ("Transmission error " + message)); RKRBackend::tryToDoEmergencySave (); } #include "rkbackendtransmitter.moc" rkward-0.6.1/rkward/rbackend/rkfrontendtransmitter.h0000644000175000017500000000333512124345416022253 0ustar thomasthomas/*************************************************************************** rkfrontendtransmitter - description ------------------- begin : Thu Nov 04 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKFRONTENDTRANSMITTER_H #define RKFRONTENDTRANSMITTER_H #include "rktransmitter.h" class QProcess; class QLocalServer; class RKFrontendTransmitter : public RKAbstractTransmitter, public RKROutputBuffer { Q_OBJECT public: RKFrontendTransmitter (); ~RKFrontendTransmitter (); void run (); bool doMSleep (int delay) { msleep (delay); return true; }; void writeRequest (RBackendRequest *request); void requestReceived (RBackendRequest *request); private slots: void connectAndEnterLoop (); void backendExit (int exitcode); private: void handleTransmissionError (const QString &message); int current_request_length; QProcess* backend; QLocalServer* server; QString token; }; #endif rkward-0.6.1/rkward/rbackend/rktransmitter.cpp0000644000175000017500000002117312124345416021046 0ustar thomasthomas/*************************************************************************** rktransmitter - description ------------------- begin : Thu Nov 18 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rktransmitter.h" #include "../debug.h" QByteArray RKRBackendSerializer::serialize (const RBackendRequest &request) { RK_TRACE (RBACKEND); QByteArray ret; QDataStream stream (&ret, QIODevice::WriteOnly); stream << (qint8) request.type; stream << request.synchronous; stream << request.done; // well, not really needed, but... if (request.command) { stream << true; serializeProxy (*(request.command), stream); } else { stream << false; } if (request.output) { RK_ASSERT (request.type == RBackendRequest::Output); stream << true; serializeOutput (*(request.output), stream); } else { stream << false; } stream << request.params; return ret; } RBackendRequest *RKRBackendSerializer::unserialize (const QByteArray &buffer) { RK_TRACE (RBACKEND); QDataStream stream (buffer); RBackendRequest *request = new RBackendRequest (false, RBackendRequest::OtherRequest); // will be overwritten bool dummyb; qint8 dummy8; stream >> dummy8; request->type = (RBackendRequest::RCallbackType) dummy8; stream >> request->synchronous; stream >> dummyb; request->done = dummyb; stream >> dummyb; if (dummyb) request->command = unserializeProxy (stream); stream >> dummyb; if (dummyb) request->output = unserializeOutput (stream); stream >> request->params; return request; } void RKRBackendSerializer::serializeOutput (const ROutputList &list, QDataStream &stream) { RK_TRACE (RBACKEND); stream << (qint32) list.size (); for (qint32 i = 0; i < list.size (); ++i) { stream << (qint8) list[i]->type; stream << list[i]->output; } } ROutputList* RKRBackendSerializer::unserializeOutput (QDataStream &stream) { RK_TRACE (RBACKEND); ROutputList *ret = new ROutputList (); qint32 len; stream >> len; #if QT_VERSION >= 0x040700 ret->reserve (len); #endif for (qint32 i = 0; i < len; ++i) { ROutput* out = new ROutput; qint8 dummy8; stream >> dummy8; out->type = (ROutput::ROutputType) dummy8; stream >> out->output; ret->append (out); } return ret; } void RKRBackendSerializer::serializeData (const RData &data, QDataStream &stream) { RK_TRACE (RBACKEND); RData::RDataType type = data.getDataType (); stream << (qint8) type; if (type == RData::IntVector) stream << data.intVector (); else if (type == RData::StringVector) stream << data.stringVector (); else if (type == RData::RealVector) stream << data.realVector (); else if (type == RData::StructureVector) { RData::RDataStorage list = data.structureVector (); qint32 len = list.size (); stream << len; for (qint32 i = 0; i < list.size (); ++i) { serializeData (*(list[i]), stream); } } else { RK_ASSERT (type == RData::NoData); } } RData* RKRBackendSerializer::unserializeData (QDataStream &stream) { RK_TRACE (RBACKEND); RData* ret = new RData; RData::RDataType type; qint8 dummy8; stream >> dummy8; type = (RData::RDataType) dummy8; if (type == RData::IntVector) { RData::IntStorage data; stream >> data; ret->setData (data); } else if (type == RData::StringVector) { RData::StringStorage data; stream >> data; ret->setData (data); } else if (type == RData::RealVector) { RData::RealStorage data; stream >> data;; ret->setData (data); } else if (type == RData::StructureVector) { RData::RDataStorage data; qint32 len; stream >> len; #if QT_VERSION >= 0x040700 data.reserve (len); #endif for (qint32 i = 0; i < len; ++i) { data.append (unserializeData (stream)); } ret->setData (data); } else { RK_ASSERT (type == RData::NoData); } return ret; } void RKRBackendSerializer::serializeProxy (const RCommandProxy &proxy, QDataStream &stream) { RK_TRACE (RBACKEND); stream << proxy.command; stream << (qint32) proxy.type; stream << (qint32) proxy.id; stream << (qint32) proxy.status; stream << (qint32) proxy.has_been_run_up_to; serializeData (proxy, stream); } RCommandProxy* RKRBackendSerializer::unserializeProxy (QDataStream &stream) { RK_TRACE (RBACKEND); QString command; stream >> command; qint32 type; stream >> type; RCommandProxy* ret = new RCommandProxy (command, type); qint32 dummy32; stream >> dummy32; ret->id = dummy32; stream >> dummy32; ret->status = dummy32; stream >> dummy32; ret->has_been_run_up_to = dummy32; RData *data = unserializeData (stream); ret->swallowData (*data); delete (data); return ret; } #include #include RKAbstractTransmitter* RKAbstractTransmitter::_instance = 0; RKAbstractTransmitter::RKAbstractTransmitter () : QThread () { RK_TRACE (RBACKEND); RK_ASSERT (_instance == 0); // NOTE: Although there are two instances of an abstract transmitter in an RKWard session, these live in different processes. _instance = this; connection = 0; fetching_transmission = false; moveToThread (this); } RKAbstractTransmitter::~RKAbstractTransmitter () { RK_TRACE (RBACKEND); } void RKAbstractTransmitter::transmitRequest (RBackendRequest *request) { RK_TRACE (RBACKEND); RK_ASSERT (connection); if (!connection->isOpen ()) { handleTransmissionError ("Connection not open while trying to write request. Last error was: " + connection->errorString ()); return; } QByteArray buffer = RKRBackendSerializer::serialize (*request); RK_DEBUG (RBACKEND, DL_DEBUG, "Transmitting request of length %s", QString::number (buffer.length ()).toLocal8Bit ().data ()); connection->write (QString::number (buffer.length ()).toLocal8Bit () + "\n"); connection->write (buffer); } void RKAbstractTransmitter::customEvent (QEvent *e) { RK_TRACE (RBACKEND); if (((int) e->type ()) == ((int) RKRBackendEvent::RKWardEvent)) { RKRBackendEvent *ev = static_cast (e); writeRequest (ev->data ()); } else { RK_ASSERT (false); return; } } void RKAbstractTransmitter::fetchTransmission () { RK_TRACE (RBACKEND); if (!connection->isOpen ()) { handleTransmissionError ("Connection not open while trying to read request. Last error was: " + connection->errorString ()); return; } if (fetching_transmission) return; // apparently, on Windows, readyRead() *does* get emitted from waitForReadyRead. Avoid recursion. if (!connection->canReadLine ()) return; fetching_transmission = true; QString line = QString::fromLocal8Bit (connection->readLine ()); bool ok; int expected_length = line.toInt (&ok); if (!ok) handleTransmissionError ("Protocol header error. Last connection error was: " + connection->errorString ()+ "; header was: " + line); QByteArray receive_buffer; while (receive_buffer.length () < expected_length) { if (connection->bytesAvailable ()) { receive_buffer.append (connection->read (expected_length - receive_buffer.length ())); } else { connection->waitForReadyRead (1000); if (!connection->isOpen ()) { handleTransmissionError ("Connection closed unexepctedly. Last error: " + connection->errorString ()); return; } } } fetching_transmission = false; requestReceived (RKRBackendSerializer::unserialize (receive_buffer)); if (connection->bytesAvailable ()) QTimer::singleShot (0, this, SLOT (fetchTransmission ())); } void RKAbstractTransmitter::setConnection (QLocalSocket *_connection) { RK_TRACE (RBACKEND); RK_ASSERT (!connection); connection = _connection; RK_ASSERT (connection->isOpen ()); connect (connection, SIGNAL (readyRead()), this, SLOT (fetchTransmission())); connect (connection, SIGNAL (disconnected()), this, SLOT (disconnected())); // In case something is pending already. if (connection->bytesAvailable ()) QTimer::singleShot (0, this, SLOT (fetchTransmission ())); } void RKAbstractTransmitter::disconnected () { RK_TRACE (RBACKEND); handleTransmissionError ("Connection closed unexpectedly. Last error was: " + connection->errorString ()); } #include "rktransmitter.moc" rkward-0.6.1/rkward/rbackend/rkrbackendprotocol_backend.cpp0000644000175000017500000001624612124345416023501 0ustar thomasthomas/*************************************************************************** rkrbackendprotocol - description ------------------- begin : Thu Nov 04 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkrbackendprotocol_backend.h" #include "rkrbackend.h" #include "../debug.h" #include #include #ifdef RKWARD_THREADED # include "rkrbackendprotocol_frontend.h" #else # include # include # include "rktransmitter.h" # include #endif #ifdef RKWARD_THREADED class RKRBackendThread : public QThread { public: RKRBackendThread () { # ifdef Q_WS_WIN // we hope that on other platforms the default is reasonable setStackSize (0xa00000); // 10MB as recommended by r_exts-manual # endif instance = this; }; ~RKRBackendThread () {}; // called form the *other* thread, only void exitThread () { RK_TRACE (RBACKEND); if (isRunning ()) { RK_DEBUG (RBACKEND, DL_INFO, "Waiting for R thread to finish up..."); RKRBackendProtocolBackend::interruptProcessing (); RKRBackend::this_pointer->kill (); wait (1000); if (isRunning ()) { RK_DEBUG (RBACKEND, DL_WARNING, "Backend thread is still running. It will be killed, now."); terminate (); yieldCurrentThread (); RK_ASSERT (false); } } }; void publicmsleep (int delay) { msleep (delay); }; void run () { RK_TRACE (RBACKEND); # ifndef Q_WS_WIN RKRBackendProtocolBackend::instance ()->r_thread_id = currentThreadId (); # endif RKRBackend::this_pointer->run (); } /** On pthread systems this is the pthread_id of the backend thread. It is needed to send SIGINT to the R backend */ Qt::HANDLE thread_id; static RKRBackendThread* instance; }; RKRBackendThread* RKRBackendThread::instance = 0; #else # include "rkbackendtransmitter.h" # include // mis-used as a random-string generator # include # include extern "C" void RK_setupGettext (const char*); int RK_Debug_Level = 2; int RK_Debug_Flags = ALL; QMutex RK_Debug_Mutex; QTemporaryFile* RK_Debug_File; void RKDebugMessageOutput (QtMsgType type, const char *msg) { RK_Debug_Mutex.lock (); if (type == QtFatalMsg) { fprintf (stderr, "%s\n", msg); } RK_Debug_File->write (msg); RK_Debug_File->write ("\n"); RK_Debug_File->flush (); RK_Debug_Mutex.unlock (); } // NOTE: This function serves no benefit over qDebug() in the backend. But provided for consistency with the frontend. // See the frontend version in main.cpp void RKDebug (int flags, int level, const char *fmt, ...) { Q_UNUSED (flags); Q_UNUSED (level); const int bufsize = 1024*8; char buffer[bufsize]; va_list ap; va_start (ap, fmt); vsnprintf (buffer, bufsize-1, fmt, ap); va_end (ap); RKDebugMessageOutput (QtDebugMsg, buffer); } int main(int argc, char *argv[]) { QCoreApplication app (argc, argv); setvbuf (stdout, NULL, _IONBF, 0); setvbuf (stderr, NULL, _IONBF, 0); RK_Debug_File = new QTemporaryFile (QDir::tempPath () + "/rkward.rbackend"); RK_Debug_File->setAutoRemove (false); if (RK_Debug_File->open ()) qInstallMsgHandler (RKDebugMessageOutput); QString servername; QString data_dir, locale_dir; QStringList args = app.arguments (); for (int i = 1; i < args.count (); ++i) { if (args[i].startsWith ("--debug-level")) { RK_Debug_Level = args[i].section ('=', 1).toInt (); } else if (args[i].startsWith ("--server-name")) { servername = args[i].section ('=', 1); } else if (args[i].startsWith ("--data-dir")) { #warning What about paths with spaces?! data_dir = args[i].section ('=', 1); } else if (args[i].startsWith ("--locale-dir")) { locale_dir = args[i].section ('=', 1); } else { printf ("unkown argument %s", qPrintable (args[i])); } } if (servername.isEmpty ()) { printf ("no server to connect to\n"); return 1; } // a simple security token to send to the frontend to make sure that it is really talking to the backend process that it started in the local socket connection. // this token is sent both via stdout and the local socket connection. The frontend simply compares both values. QString token = QUuid::createUuid ().toString (); printf ("%s\n", token.toLocal8Bit ().data ()); fflush (stdout); RKRBackendTransmitter transmitter (servername, token); RKRBackendProtocolBackend backend (data_dir); transmitter.start (); RKRBackend::this_pointer->run (locale_dir); transmitter.quit (); transmitter.wait (5000); if (!RKRBackend::this_pointer->isKilled ()) RKRBackend::tryToDoEmergencySave (); } #endif RKRBackendProtocolBackend* RKRBackendProtocolBackend::_instance = 0; RKRBackendProtocolBackend::RKRBackendProtocolBackend (const QString &storage_dir) { RK_TRACE (RBACKEND); _instance = this; new RKRBackend (); #ifdef RKWARD_THREADED r_thread = new RKRBackendThread (); // NOTE: r_thread_id is obtained from within the thread RKRBackendThread::instance->start (); #else r_thread = QThread::currentThread (); // R thread == main thread # ifndef Q_WS_WIN r_thread_id = QThread::currentThreadId (); # endif #endif data_dir = storage_dir; } RKRBackendProtocolBackend::~RKRBackendProtocolBackend () { RK_TRACE (RBACKEND); #ifdef RKWARD_THREADED RKRBackendThread::instance->exitThread (); delete RKRBackendThread::instance; #endif } void RKRBackendProtocolBackend::sendRequest (RBackendRequest *_request) { RK_TRACE (RBACKEND); RBackendRequest* request = _request; if (!request->synchronous) { request = _request->duplicate (); // the instance we send to the frontend will remain in there, and be deleted, there _request->done = true; // for aesthetics } RKRBackendEvent* event = new RKRBackendEvent (request); #ifdef RKWARD_THREADED qApp->postEvent (RKRBackendProtocolFrontend::instance (), event); #else RK_ASSERT (request->type != RBackendRequest::Output); qApp->postEvent (RKRBackendTransmitter::instance (), event); #endif } bool RKRBackendProtocolBackend::inRThread () { return (QThread::currentThread () == instance ()->r_thread); } void RKRBackendProtocolBackend::msleep (int delay) { #ifdef RKWARD_THREADED RKRBackendThread::instance->publicmsleep (delay); #else static_cast (RKRBackendTransmitter::instance ())->publicmsleep (delay); #endif } QString RKRBackendProtocolBackend::backendDebugFile () { #ifdef RKWARD_THREADED return (QString ()); #else return RK_Debug_File->fileName (); #endif } rkward-0.6.1/rkward/rbackend/rksignalsupport.cpp0000644000175000017500000001420612124345416021403 0ustar thomasthomas/*************************************************************************** rksignalsupport - description ------------------- begin : Thu Nov 22 2007 copyright : (C) 2007, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksignalsupport.h" #include #include "rkrbackend.h" #include "../debug.h" // On some platforms sighandler_t is defined, on others it is not, but it's required to be the same everywhere, anyway. // To avoid re-definition errors, we just use our own "type". typedef void (*rk_sighandler_t) (int); namespace RKSignalSupportPrivate { #ifdef Q_WS_WIN rk_sighandler_t r_sigsegv_handler = 0; rk_sighandler_t default_sigsegv_handler = 0; rk_sighandler_t r_sigill_handler = 0; rk_sighandler_t default_sigill_handler = 0; rk_sighandler_t r_sigabrt_handler = 0; rk_sighandler_t default_sigabrt_handler = 0; #else struct sigaction r_sigsegv_handler; struct sigaction default_sigsegv_handler; struct sigaction r_sigill_handler; struct sigaction default_sigill_handler; struct sigaction r_sigabrt_handler; struct sigaction default_sigabrt_handler; #endif rk_sighandler_t r_sigint_handler = 0; void (*new_sigint_handler) (void) = 0; void internal_sigint_handler (int num) { new_sigint_handler (); signal (num, internal_sigint_handler); } #ifdef Q_WS_WIN void signal_proxy (int signum) { rk_sighandler_t r_handler = r_sigsegv_handler; rk_sighandler_t default_handler = default_sigsegv_handler; #else void signal_proxy (int signum, siginfo_t *info, void *context) { struct sigaction r_handler = r_sigsegv_handler; struct sigaction default_handler = default_sigsegv_handler; #endif if (signum == SIGILL) { r_handler = r_sigill_handler; default_handler = default_sigill_handler; } else if (signum == SIGABRT) { r_handler = r_sigabrt_handler; default_handler = default_sigabrt_handler; } else { RK_ASSERT (signum == SIGSEGV); } RKRBackend::tryToDoEmergencySave (); // if we are not in the R thread, handling the signal in R does more harm than good. if (RKRBackendProtocolBackend::inRThread ()) { #ifdef Q_WS_WIN if (r_handler) { r_handler (signum); return; } #else if (r_handler.sa_sigaction) { r_handler.sa_sigaction (signum, info, context); return; } else if (r_handler.sa_handler) { r_handler.sa_handler (signum); return; } #endif } #ifdef Q_WS_WIN if (default_handler) { default_handler (signum); return; } #else // this might be a Qt/KDE override or default handling if (default_handler.sa_sigaction) { default_handler.sa_sigaction (signum, info, context); return; } else if (default_handler.sa_handler) { default_handler.sa_handler (signum); return; } #endif RK_ASSERT (false); // had not handler? Could conceivably happen, but should not. signal (signum, SIG_DFL); raise (signum); } } void RKSignalSupport::saveDefaultSignalHandlers () { RK_TRACE (RBACKEND); #ifdef Q_WS_WIN RKSignalSupportPrivate::default_sigsegv_handler = signal (SIGSEGV, SIG_DFL); RKSignalSupportPrivate::default_sigill_handler = signal (SIGILL, SIG_DFL); RKSignalSupportPrivate::default_sigabrt_handler = signal (SIGABRT, SIG_DFL); #else sigaction (SIGSEGV, 0, &RKSignalSupportPrivate::default_sigsegv_handler); sigaction (SIGILL, 0, &RKSignalSupportPrivate::default_sigill_handler); sigaction (SIGABRT, 0, &RKSignalSupportPrivate::default_sigabrt_handler); #endif } void RKSignalSupport::installSignalProxies () { RK_TRACE (RBACKEND); #ifdef Q_WS_WIN RKSignalSupportPrivate::r_sigsegv_handler = signal (SIGSEGV, &RKSignalSupportPrivate::signal_proxy); RKSignalSupportPrivate::r_sigill_handler = signal (SIGILL, &RKSignalSupportPrivate::signal_proxy); RKSignalSupportPrivate::r_sigabrt_handler = signal (SIGABRT, &RKSignalSupportPrivate::signal_proxy); #else // retrieve R signal handler sigaction (SIGSEGV, 0, &RKSignalSupportPrivate::r_sigsegv_handler); sigaction (SIGILL, 0, &RKSignalSupportPrivate::r_sigill_handler); sigaction (SIGABRT, 0, &RKSignalSupportPrivate::r_sigabrt_handler); // set new proxy handlers struct sigaction proxy_action; proxy_action = RKSignalSupportPrivate::r_sigsegv_handler; proxy_action.sa_flags |= SA_SIGINFO; proxy_action.sa_sigaction = &RKSignalSupportPrivate::signal_proxy; sigaction (SIGSEGV, &proxy_action, 0); proxy_action = RKSignalSupportPrivate::r_sigill_handler; proxy_action.sa_flags |= SA_SIGINFO; proxy_action.sa_sigaction = &RKSignalSupportPrivate::signal_proxy; sigaction (SIGILL, &proxy_action, 0); proxy_action = RKSignalSupportPrivate::default_sigabrt_handler; proxy_action.sa_flags |= SA_SIGINFO; proxy_action.sa_sigaction = &RKSignalSupportPrivate::signal_proxy; sigaction (SIGABRT, &proxy_action, 0); #endif } void RKSignalSupport::installSigIntAndUsrHandlers (void (*handler) (void)) { RK_TRACE (RBACKEND); RK_ASSERT (!RKSignalSupportPrivate::r_sigint_handler); RKSignalSupportPrivate::new_sigint_handler = handler; RKSignalSupportPrivate::r_sigint_handler = signal (SIGINT, &RKSignalSupportPrivate::internal_sigint_handler); #ifndef Q_WS_WIN // default action in R: save and quit. We use these as a proxy for SIGINT, instead. signal (SIGUSR1, &RKSignalSupportPrivate::internal_sigint_handler); signal (SIGUSR2, &RKSignalSupportPrivate::internal_sigint_handler); #endif } void RKSignalSupport::callOldSigIntHandler () { RK_TRACE (RBACKEND); RKSignalSupportPrivate::r_sigint_handler (SIGINT); } rkward-0.6.1/rkward/rbackend/rkrsupport.cpp0000644000175000017500000001556712124345416020402 0ustar thomasthomas/*************************************************************************** rkrsupport - description ------------------- begin : Mon Oct 25 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkrsupport.h" #include // needed to detect CHARSXP encoding #define IS_UTF8(x) (Rf_getCharCE(x) == CE_UTF8) #define IS_LATIN1(x) (Rf_getCharCE(x) == CE_LATIN1) #include #include "rkrbackend.h" #include "../debug.h" // This is sort of idiotic, but placing RKWard_RData_Tag into the RKRSupport-namespace somehow confuses the hell out of G++ (4.4.5) SEXP RKWard_RData_Tag; SEXP RKRSupport::callSimpleFun0 (SEXP fun, SEXP env) { SEXP call = Rf_allocVector (LANGSXP, 1); PROTECT (call); SETCAR (call, fun); SEXP ret = Rf_eval (call, env); UNPROTECT (1); /* call */ return ret; } SEXP RKRSupport::callSimpleFun (SEXP fun, SEXP arg, SEXP env) { SEXP call = Rf_allocVector (LANGSXP, 2); PROTECT (call); SETCAR (call, fun); SETCAR (CDR (call), arg); SEXP ret = Rf_eval (call, env); UNPROTECT (1); /* call */ return ret; } SEXP RKRSupport::callSimpleFun2 (SEXP fun, SEXP arg1, SEXP arg2, SEXP env) { SEXP call = Rf_allocVector (LANGSXP, 3); PROTECT (call); SETCAR (call, fun); SETCAR (CDR (call), arg1); SETCAR (CDDR (call), arg2); SEXP ret = Rf_eval (call, env); UNPROTECT (1); /* call */ return ret; } bool RKRSupport::callSimpleBool (SEXP fun, SEXP arg, SEXP env) { SEXP res = callSimpleFun (fun, arg, env); RK_ASSERT (TYPEOF (res) == LGLSXP); return ((bool) LOGICAL (res)[0]); } /** converts SEXP to strings, and returns the first string (or QString(), if SEXP contains no strings) */ QString RKRSupport::SEXPToString (SEXP from_exp) { RK_TRACE (RBACKEND); QStringList list = SEXPToStringList (from_exp); if (!list.isEmpty ()) return list[0]; return QString (); } QStringList RKRSupport::SEXPToStringList (SEXP from_exp) { RK_TRACE (RBACKEND); // bad format? coerce the vector first if (TYPEOF (from_exp) != STRSXP) { SEXP strexp; PROTECT (strexp = Rf_coerceVector (from_exp, STRSXP)); QStringList list = SEXPToStringList (strexp); UNPROTECT (1); return list; } // format already good? Avoid coercion (and associated copying) int count = Rf_length (from_exp); QStringList list; #if QT_VERSION >= 0x040700 list.reserve (count); #endif for (int i = 0; i < count; ++i) { SEXP dummy = STRING_ELT (from_exp, i); if (TYPEOF (dummy) != CHARSXP) { list.append (QString ("not defined")); // can this ever happen? } else { if (dummy == NA_STRING) { list.append (QString ()); } else { if (IS_UTF8 (dummy)) { list.append (QString::fromUtf8 ((char *) STRING_PTR (dummy))); } else if (IS_LATIN1 (dummy)) { list.append (QString::fromLatin1 ((char *) STRING_PTR (dummy))); } else { list.append (RKRBackend::this_pointer->current_locale_codec->toUnicode ((char *) STRING_PTR (dummy))); } } } } return list; } SEXP RKRSupport::StringListToSEXP (const QStringList& list) { RK_TRACE (RBACKEND); SEXP ret = Rf_allocVector (STRSXP, list.size ()); for (int i = 0; i < list.size (); ++i) { // TODO: in R 2.13.0 there is Rf_mkCharCE(). This could be used to set unicode strings, directly. But of course, we'd have to check, when exactly this was introduced. SET_STRING_ELT (ret, i, Rf_mkChar (RKRBackend::this_pointer->current_locale_codec->fromUnicode (list[i]).data ())); } return ret; } RData::IntStorage RKRSupport::SEXPToIntArray (SEXP from_exp) { RK_TRACE (RBACKEND); RData::IntStorage integers; // bad format? coerce the vector first if (TYPEOF (from_exp) != INTSXP) { SEXP intexp; PROTECT (intexp = Rf_coerceVector (from_exp, INTSXP)); integers = SEXPToIntArray (intexp); UNPROTECT (1); return integers; } // format already good? Avoid coercion (and associated copying) unsigned int count = Rf_length (from_exp); integers.reserve (count); for (unsigned int i = 0; i < count; ++i) { integers.append (INTEGER (from_exp)[i]); } return integers; } /** converts SEXP to integers, and returns the first int (def_value, if SEXP contains no ints) */ int RKRSupport::SEXPToInt (SEXP from_exp, int def_value) { RK_TRACE (RBACKEND); RData::IntStorage integers = SEXPToIntArray (from_exp); if (!integers.isEmpty ()) return integers[0]; return def_value; } RData::RealStorage RKRSupport::SEXPToRealArray (SEXP from_exp) { RK_TRACE (RBACKEND); RData::RealStorage reals; // bad format? coerce the vector first if (TYPEOF (from_exp) != REALSXP) { SEXP realexp; PROTECT (realexp = Rf_coerceVector (from_exp, REALSXP)); reals = SEXPToRealArray (realexp); UNPROTECT (1); return reals; } // format already good? Avoid coercion (and associated copying) unsigned int count = Rf_length (from_exp); reals.reserve (count); for (unsigned int i = 0; i < count; ++i) { reals.append (REAL (from_exp)[i]); if (R_IsNaN (reals[i]) || R_IsNA (reals[i])) reals[i] = NA_REAL; // for our purposes, treat all non-numbers as missing } return reals; } RData *RKRSupport::SEXPToRData (SEXP from_exp) { RK_TRACE (RBACKEND); RData *data = new RData; int type = TYPEOF (from_exp); switch (type) { case LGLSXP: case INTSXP: data->setData (SEXPToIntArray (from_exp)); break; case REALSXP: data->setData (SEXPToRealArray (from_exp)); break; case VECSXP: { unsigned int count = Rf_length (from_exp); RData::RDataStorage structure_array; structure_array.reserve (count); for (unsigned int i=0; i < count; ++i) { SEXP subexp = VECTOR_ELT (from_exp, i); //PROTECT (subexp); // should already be protected as part of the parent from_exp structure_array.append (SEXPToRData (subexp)); //UNPROTECT (1); } data->setData (structure_array); } break; /* case NILSXP: data->data = 0; data->datatype = RData::NoData; count = 0; break; */ case EXTPTRSXP: if (R_ExternalPtrTag (from_exp) == RKWard_RData_Tag) { // our very own data delete data; data = (RData*) R_ExternalPtrAddr (from_exp); R_ClearExternalPtr (from_exp); break; } case STRSXP: default: data->setData (SEXPToStringList (from_exp)); } return data; } rkward-0.6.1/rkward/rbackend/rksignalsupport.h0000644000175000017500000000242112124345416021044 0ustar thomasthomas/*************************************************************************** rksignalsupport - description ------------------- begin : Thu Nov 22 2007 copyright : (C) 2007, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSIGNALSUPPORT_H #define RKSIGNALSUPPORT_H namespace RKSignalSupport { void saveDefaultSignalHandlers (); void installSignalProxies (); void installSigIntAndUsrHandlers (void (*handler) (void)); void callOldSigIntHandler (); }; #endif rkward-0.6.1/rkward/rbackend/rkstructuregetter.h0000644000175000017500000000505412124345416021412 0ustar thomasthomas/*************************************************************************** rkstructuregetter - description ------------------- begin : Wed Apr 11 2007 copyright : (C) 2007, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSTRUCTUREGETTER_H #define RKSTRUCTUREGETTER_H #include #include class RData; /** Low level helper class for getting the structure of R objects (.rk.get.structure). */ class RKStructureGetter { public: RKStructureGetter (bool keep_evalled_promises); ~RKStructureGetter (); RData *getStructure (SEXP toplevel, SEXP name, SEXP envlevel, SEXP namespacename); private: struct GetStructureWorkerArgs { SEXP toplevel; QString name; int add_type_flags; RData *storage; int nesting_depth; RKStructureGetter *getter; }; void getStructureWorker (SEXP value, const QString &name, int add_type_flags, RData *storage, int nesting_depth); /** needed to wrap things inside an R_ToplevelExec */ static void getStructureWrapper (GetStructureWorkerArgs *data); void getStructureSafe (SEXP value, const QString &name, int add_type_flags, RData *storage, int nesting_depth); SEXP resolvePromise (SEXP from); SEXP prefetch_fun (const char *name, bool from_base=true); bool with_namespace; SEXP namespace_envir; SEXP toplevel_value; SEXP class_fun; SEXP dims_fun; SEXP meta_attrib; SEXP get_meta_fun; SEXP is_matrix_fun; SEXP is_array_fun; SEXP is_list_fun; SEXP is_function_fun; SEXP is_environment_fun; SEXP as_environment_fun; SEXP is_factor_fun; SEXP is_numeric_fun; SEXP is_character_fun; SEXP is_logical_fun; SEXP names_fun; SEXP args_fun; SEXP double_brackets_fun; SEXP length_fun; SEXP rk_get_slots_fun; int num_prefetched_funs; bool keep_evalled_promises; }; #endif rkward-0.6.1/rkward/core/0000755000175000017500000000000012124345410014576 5ustar thomasthomasrkward-0.6.1/rkward/core/CMakeLists.txt0000644000175000017500000000162712124345410017344 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(core_STAT_SRCS rkvariable.cpp robjectlist.cpp robject.cpp rcontainerobject.cpp rkmodificationtracker.cpp rfunctionobject.cpp renvironmentobject.cpp rkrownames.cpp rkpseudoobjects.cpp ) QT4_AUTOMOC(${core_STAT_SRCS}) ADD_LIBRARY(core STATIC ${core_STAT_SRCS}) ########### install files ############### #original Makefile.am contents follow: #INCLUDES = $(all_includes) #METASOURCES = AUTO #noinst_LIBRARIES = libcore.a #libcore_a_SOURCES = rkvariable.cpp robjectlist.cpp robject.cpp rcontainerobject.cpp rkmodificationtracker.cpp \ # rfunctionobject.cpp renvironmentobject.cpp #noinst_HEADERS = rkvariable.h robjectlist.h robject.h rcontainerobject.h rkmodificationtracker.h \ # rfunctionobject.h renvironmentobject.h rkward-0.6.1/rkward/core/rkmodificationtracker.cpp0000644000175000017500000003615112124345410021666 0ustar thomasthomas/*************************************************************************** rkmodificationtracker - description ------------------- begin : Tue Aug 31 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkmodificationtracker.h" #include #include #include "../rkglobals.h" #include "../dataeditor/rkeditor.h" #include "../dataeditor/rkvareditmodel.h" #include "rcontainerobject.h" #include "robjectlist.h" #include "../windows/rkworkplace.h" #include "../misc/rkstandardicons.h" #include "../debug.h" RKModificationTracker::RKModificationTracker (QObject *parent) : RKObjectListModel (parent) { RK_TRACE (OBJECTS); updates_locked = 0; } RKModificationTracker::~RKModificationTracker () { RK_TRACE (OBJECTS); RK_ASSERT (updates_locked == 0); RK_ASSERT (listeners.isEmpty ()); } void RKModificationTracker::lockUpdates (bool lock) { RK_TRACE (OBJECTS); if (lock) ++updates_locked; else { --updates_locked; RK_ASSERT (updates_locked >= 0); } } bool RKModificationTracker::removeObject (RObject *object, RKEditor *editor, bool removed_in_workspace) { RK_TRACE (OBJECTS); // TODO: allow more than one editor per object // WARNING: This does not work, if a sub-object is being edited! RKEditor *ed = objectEditor (object); RK_ASSERT (object); RK_ASSERT (!((editor) && (!ed))); RK_ASSERT (!(removed_in_workspace && editor)); if (!object->isPseudoObject ()) { if (removed_in_workspace) { if (ed && (ed->getObject () == object)) { // NOTE: do not allow restoring of columns in a data.frame this way. See http://www.mail-archive.com/rkward-devel@lists.sourceforge.net/msg01731.html and replies. if (KMessageBox::questionYesNo (0, i18n ("The object '%1' was removed from workspace or changed to a different type of object, but is currently opened for editing. Do you want to restore it?", object->getFullName ()), i18n ("Restore object?")) == KMessageBox::Yes) { ed->restoreObject (object); /* TODO: It would make a lot of sense to allow restoring to a different name, and possibly different location. This may need some thinking. Probably something like: * object->parentObject ()->removeChildNoDelete (parent); * object->setParentObject (RObjectList::getGlobalEnv ()); * // make sure new_name is unique in new parent! * RObjectList::getGlobalEnv ()->insertChild (object, -1); * object->setName (new_name); * along with proper begin/endAdd/RemoveRows(). * Oh, and listener notifications. That might be tricky. * */ return false; } } } else { if (editor || ed) { if (KMessageBox::questionYesNo (0, i18n ("Do you really want to remove the object '%1'? The object is currently opened for editing, it will be removed in the editor, too. There's no way to get it back.", object->getFullName ()), i18n ("Remove object?")) != KMessageBox::Yes) { return false; } } else { // TODO: check for other editors editing this object if (KMessageBox::questionYesNo (0, i18n ("Do you really want to remove the object '%1'? There's no way to get it back.", object->getFullName ()), i18n ("Remove object?")) != KMessageBox::Yes) { return false; } } } } RK_ASSERT (object); RK_ASSERT (object->parentObject ()); bool view_update = !updates_locked && !object->isType (RObject::NonVisibleObject); if (view_update) { QModelIndex object_index = indexFor (object->parentObject ()); int object_row = object->parentObject ()->getObjectModelIndexOf (object); RK_ASSERT (object_row >= 0); beginRemoveRows (object_index, object_row, object_row); } if (!(updates_locked || object->isPseudoObject ())) sendListenerNotification (RObjectListener::ObjectRemoved, object, 0, 0, 0); object->remove (removed_in_workspace); if (view_update) endRemoveRows (); return true; } void RKModificationTracker::moveObject (RContainerObject *parent, RObject* child, int old_index, int new_index) { RK_TRACE (OBJECTS); RK_ASSERT (!child->isPseudoObject ()); QModelIndex parent_index; if (!updates_locked) { parent_index = indexFor (parent); beginRemoveRows (parent_index, old_index, old_index); } RK_ASSERT (parent->findChildByIndex (old_index) == child); parent->removeChildNoDelete (child); if (!updates_locked) { endRemoveRows (); beginInsertRows (parent_index, new_index, new_index); } parent->insertChild (child, new_index); RK_ASSERT (parent->findChildByIndex (new_index) == child); if (!updates_locked) { endInsertRows (); sendListenerNotification (RObjectListener::ChildMoved, parent, old_index, new_index, 0); } } void RKModificationTracker::renameObject (RObject *object, const QString &new_name) { RK_TRACE (OBJECTS); object->rename (new_name); if (!updates_locked) { sendListenerNotification (RObjectListener::MetaChanged, object, 0, 0, 0); QModelIndex object_index = indexFor (object); emit (dataChanged (object_index, object_index)); } } void RKModificationTracker::beginAddObject (RObject *object, RObject* parent, int position) { RK_TRACE (OBJECTS); Q_UNUSED (object); // Kept for consistency of function signature if (!updates_locked) { QModelIndex parent_index = indexFor (parent); beginInsertRows (parent_index, position, position); } } void RKModificationTracker::endAddObject (RObject *object, RObject* parent, int position) { RK_TRACE (OBJECTS); if (!updates_locked) { if (!object->isPseudoObject ()) sendListenerNotification (RObjectListener::ChildAdded, parent, position, 0, 0); endInsertRows (); } } void RKModificationTracker::objectMetaChanged (RObject *object) { RK_TRACE (OBJECTS); if (!updates_locked) { sendListenerNotification (RObjectListener::MetaChanged, object, 0, 0, 0); QModelIndex object_index = indexFor (object); emit (dataChanged (object_index, object_index)); } } void RKModificationTracker::objectDataChanged (RObject *object, RObject::ChangeSet *changes) { RK_TRACE (OBJECTS); if (!updates_locked) { sendListenerNotification (RObjectListener::DataChanged, object, 0, 0, changes); delete changes; QModelIndex object_index = indexFor (object); emit (dataChanged (object_index, object_index)); // might have changed dimensions, for instance } } void RKModificationTracker::addObjectListener (RObject* object, RObjectListener* listener) { RK_TRACE (OBJECTS); listeners.insert (object, listener); if (listener->listenerType () == RObjectListener::DataModel) object->beginEdit (); } void RKModificationTracker::removeObjectListener (RObject* object, RObjectListener* listener) { RK_TRACE (OBJECTS); listeners.remove (object, listener); if (listener->listenerType () == RObjectListener::DataModel) object->endEdit (); } void RKModificationTracker::sendListenerNotification (RObjectListener::NotificationType type, RObject* o, int index, int new_index, RObject::ChangeSet* changes) { RK_TRACE (OBJECTS); QList obj_listeners = listeners.values (o); for (int i = obj_listeners.size () - 1; i >= 0; --i) { RObjectListener* listener = obj_listeners[i]; if (!listener->wantsNotificationType (type)) continue; if (type == RObjectListener::ObjectRemoved) { listener->objectRemoved (o); } else if (type == RObjectListener::ChildAdded) { listener->childAdded (index, o); } else if (type == RObjectListener::ChildMoved) { listener->childMoved (index, new_index, o); } else if (type == RObjectListener::MetaChanged) { listener->objectMetaChanged (o); } else if (type == RObjectListener::DataChanged) { listener->objectDataChanged (o, changes); } else { RK_ASSERT (false); } } // when a container is removed, we need to send child notifications recursively, so listeners listening // for child objects will know the object is gone. if (type == RObjectListener::ObjectRemoved) { if (o->isContainer ()) { RContainerObject *c = static_cast (o); for (int i = c->numChildren () - 1; i >= 0; --i) { sendListenerNotification (RObjectListener::ObjectRemoved, c->findChildByIndex (i), 0, 0, 0); } } } } RKEditor* RKModificationTracker::objectEditor (const RObject* object) { RK_TRACE (OBJECTS); QList obj_listeners = listeners.values (const_cast (object)); for (int i = obj_listeners.size () - 1; i >= 0; --i) { RObjectListener* listener = obj_listeners[i]; if (!(listener->listenerType () == RObjectListener::DataModel)) continue; RKEditor* ed = static_cast (listener)->getEditor (); if (ed) return ed; } return 0; } ///////////////// RKObjectListModel /////////////////////////// RKObjectListModel::RKObjectListModel (QObject *parent) : QAbstractItemModel (parent) { RK_TRACE (OBJECTS); } RKObjectListModel::~RKObjectListModel () { RK_TRACE (OBJECTS); } QModelIndex RKObjectListModel::index (int row, int column, const QModelIndex& parent) const { RK_TRACE (OBJECTS); if (!parent.isValid ()) { RK_ASSERT (row == 0); // must cast to RObject, here. Else casting to void* and back will confuse the hell out of GCC 4.2 return (createIndex (row, column, static_cast (RObjectList::getObjectList ()))); } RObject* parent_object = static_cast (parent.internalPointer ()); RK_ASSERT (row < parent_object->numChildrenForObjectModel ()); return (createIndex (row, column, parent_object->findChildByObjectModelIndex (row))); } QModelIndex RKObjectListModel::parent (const QModelIndex& index) const { RK_TRACE (OBJECTS); if (!index.isValid ()) return QModelIndex (); RObject* child = static_cast (index.internalPointer ()); RK_ASSERT (child); return (indexFor (child->parentObject ())); } int RKObjectListModel::rowCount (const QModelIndex& parent) const { RK_TRACE (OBJECTS); RObject* parent_object = 0; if (parent.isValid ()) parent_object = static_cast (parent.internalPointer ()); else return 1; // the root item if (!parent_object) return 0; return (parent_object->numChildrenForObjectModel ()); } int RKObjectListModel::columnCount (const QModelIndex&) const { //RK_TRACE (OBJECTS); // no need to trace this return ColumnCount; } QVariant RKObjectListModel::data (const QModelIndex& index, int role) const { RK_TRACE (OBJECTS); int col = index.column (); RObject *object = static_cast (index.internalPointer ()); if ((!object) || (col >= ColumnCount)) { RK_ASSERT (false); return QVariant (); } if (role == Qt::DisplayRole) { if (col == NameColumn) return object->getShortName (); if (col == LabelColumn) return object->getLabel (); if (col == TypeColumn) { if (object->isVariable ()) return RObject::typeToText (object->getDataType ()); return QVariant (); } if ((col == ClassColumn) && (!object->isPseudoObject ())) return object->makeClassString ("; "); } else if (role == Qt::FontRole) { if (col == NameColumn && object->isPseudoObject ()) { QFont font; font.setItalic (true); return (font); } } else if (role == Qt::DecorationRole) { if (col == NameColumn) return RKStandardIcons::iconForObject (object); } else if (role == Qt::ToolTipRole) { return object->getObjectDescription (); } return QVariant (); } QVariant RKObjectListModel::headerData (int section, Qt::Orientation orientation, int role) const { RK_TRACE (OBJECTS); if (orientation != Qt::Horizontal) return QVariant (); if (role != Qt::DisplayRole) return QVariant (); if (section == NameColumn) return i18n ("Name"); if (section == LabelColumn) return i18n ("Label"); if (section == TypeColumn) return i18n ("Type"); if (section == ClassColumn) return i18n ("Class"); RK_ASSERT (false); return QVariant (); } bool RKObjectListModel::hasChildren(const QModelIndex& parent) const { RK_TRACE (OBJECTS); RObject* parent_object = 0; if (parent.isValid ()) parent_object = static_cast (parent.internalPointer ()); else return true; // the root item if (!parent_object) return false; return (parent_object->isType (RObject::Incomplete) || parent_object->numChildrenForObjectModel ()); } bool RKObjectListModel::canFetchMore (const QModelIndex &parent) const { RK_TRACE (OBJECTS); RObject *object = static_cast (parent.internalPointer ()); return (object && object->isType (RObject::Incomplete)); } void RKObjectListModel::fetchMore (const QModelIndex &parent) { RK_TRACE (OBJECTS); RObject *object = static_cast (parent.internalPointer ()); RK_ASSERT (object && object->isType (RObject::Incomplete)); object->fetchMoreIfNeeded (); } QModelIndex RKObjectListModel::indexFor (RObject *object) const { RK_TRACE (OBJECTS); if (!object) return QModelIndex (); if (object->isType (RObject::NonVisibleObject)) return QModelIndex (); RObject *parent = object->parentObject (); // must cast to RObject, here. Else casting to void* and back will confuse the hell out of GCC 4.2 if (!parent) return createIndex (0, 0, static_cast (RObjectList::getObjectList ())); int row = parent->getObjectModelIndexOf (object); if (row < 0) { RK_ASSERT (false); return QModelIndex (); } return (createIndex (row, 0, object)); } ///////////////////// RObjectListener //////////////////////// RObjectListener::RObjectListener (ListenerType type) { RK_TRACE (OBJECTS); RObjectListener::type = type; notifications = 0; num_watched_objects = 0; } RObjectListener::~RObjectListener () { RK_TRACE (OBJECTS); RK_ASSERT (num_watched_objects == 0); } void RObjectListener::objectRemoved (RObject*) { RK_ASSERT (false); // listeners that receive this notification should have reimplemented this function } void RObjectListener::childAdded (int, RObject*) { RK_ASSERT (false); // listeners that receive this notification should have reimplemented this function } void RObjectListener::childMoved (int, int, RObject*) { RK_ASSERT (false); // listeners that receive this notification should have reimplemented this function } void RObjectListener::objectMetaChanged (RObject*) { RK_ASSERT (false); // listeners that receive this notification should have reimplemented this function } void RObjectListener::objectDataChanged (RObject*, const RObject::ChangeSet *) { RK_ASSERT (false); // listeners that receive this notification should have reimplemented this function } void RObjectListener::listenForObject (RObject* object) { RK_TRACE (OBJECTS); RKGlobals::tracker ()->addObjectListener (object, this); ++num_watched_objects; } void RObjectListener::stopListenForObject (RObject* object) { RK_TRACE (OBJECTS); RKGlobals::tracker ()->removeObjectListener (object, this); --num_watched_objects; } rkward-0.6.1/rkward/core/robjectlist.cpp0000644000175000017500000002547212124345410017640 0ustar thomasthomas/*************************************************************************** robjectlist - description ------------------- begin : Wed Aug 18 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "robjectlist.h" #define UPDATE_DELAY_INTERVAL 500 #define ROBJECTLIST_UPDATE_ENVIRONMENTS_COMMAND 1 #define ROBJECTLIST_UPDATE_COMPLETE_COMMAND 2 #include #include #include #include "renvironmentobject.h" #include "../rbackend/rinterface.h" #include "rkmodificationtracker.h" #include "../misc/rkprogresscontrol.h" #include "../settings/rksettingsmoduler.h" #include "rkpseudoobjects.h" #include "../rkglobals.h" #include "../debug.h" // static RObjectList *RObjectList::object_list = 0; RObjectList::RObjectList () : RContainerObject (0, QString::null) { RK_TRACE (OBJECTS); object_list = this; update_timer = new QTimer (this); update_timer->setSingleShot (true); connect (update_timer, SIGNAL (timeout ()), this, SLOT (timeout ())); //update_timer->start (AUTO_UPDATE_INTERVAL, true); type = RObject::Workspace; update_chain = 0; RObject *globalenv = createTopLevelEnvironment (".GlobalEnv"); RKGlobals::tracker ()->beginAddObject (globalenv, this, 0); // 1 == first child after GlobalEnv childmap.insert (0, globalenv); RKGlobals::tracker ()->endAddObject (globalenv, this, 0); RKOrphanNamespacesObject *obj = new RKOrphanNamespacesObject (this); RKGlobals::tracker ()->beginAddObject (obj, this, 1); // 1 == first child after GlobalEnv orphan_namespaces = obj; RKGlobals::tracker ()->endAddObject (obj, this, 1); } RObjectList::~RObjectList () { RK_TRACE (OBJECTS); delete orphan_namespaces; } QStringList RObjectList::detachPackages (const QStringList &packages, RCommandChain *chain, RKProgressControl* control) { RK_TRACE (OBJECTS); QStringList remove; QStringList reject; for (int i = 0; i < packages.size(); ++i) { QString shortname = packages[i]; shortname.remove ("package:"); if (RKSettingsModuleRPackages::essentialPackages ().contains (shortname)) { reject.append (i18n ("Did not unload package %1. It is required in RKWard. If you really want to do this, do so on the R Console.", shortname)); } else if (!findChildByName (packages[i])) { RK_ASSERT (false); reject.append (i18n ("Package %1 appears not to have been loaded", shortname)); } else { remove.append (packages[i]); } } for (int i = 0; i < remove.size (); ++i) { RCommand *command = new RCommand ("detach (" + rQuote (remove[i]) + ")", RCommand::App | RCommand::ObjectListUpdate); if (control) control->addRCommand (command); RKGlobals::rInterface()->issueCommand (command, chain); } return reject; } void RObjectList::updateFromR (RCommandChain *chain) { RK_TRACE (OBJECTS); if (update_chain) { // gee, looks like another update is still on the way. lets schedule one for later: update_timer->start (UPDATE_DELAY_INTERVAL); RK_DEBUG (OBJECTS, DL_DEBUG, "another object-list update is already running. Rescheduling a further update for later"); return; } emit (updateStarted ()); update_chain = RKGlobals::rInterface ()->startChain (chain); RCommand *command = new RCommand ("list (search (), loadedNamespaces ())", RCommand::App | RCommand::Sync | RCommand::GetStructuredData, QString (), this, ROBJECTLIST_UPDATE_ENVIRONMENTS_COMMAND); RKGlobals::rInterface ()->issueCommand (command, update_chain); } void RObjectList::updateFromR (RCommandChain *chain, const QStringList ¤t_searchpath, const QStringList ¤t_namespaces) { RK_TRACE (OBJECTS); // TODO: can this happen? when? if (update_chain) { // gee, looks like another update is still on the way. lets schedule one for later: update_timer->start (UPDATE_DELAY_INTERVAL); RK_DEBUG (OBJECTS, DL_DEBUG, "another object-list update is already running. Rescheduling a further update for later"); return; } emit (updateStarted ()); update_chain = RKGlobals::rInterface ()->startChain (chain); updateEnvironments (current_searchpath, false); updateNamespaces (current_namespaces); RKGlobals::rInterface ()->issueCommand (QString (), RCommand::App | RCommand::Sync | RCommand::EmptyCommand, QString (), this, ROBJECTLIST_UPDATE_COMPLETE_COMMAND, update_chain); } void RObjectList::rCommandDone (RCommand *command) { RK_TRACE (OBJECTS); if (command->getFlags () == ROBJECTLIST_UPDATE_ENVIRONMENTS_COMMAND) { RK_ASSERT (command->getDataType () == RData::StructureVector); const RData::RDataStorage & data = command->structureVector (); RK_ASSERT (data.size () == 2); QStringList new_environments = data[0]->stringVector (); RK_ASSERT (new_environments.size () >= 2); updateEnvironments (new_environments, true); updateNamespaces (data[1]->stringVector ()); RKGlobals::rInterface ()->issueCommand (QString (), RCommand::App | RCommand::Sync | RCommand::EmptyCommand, QString (), this, ROBJECTLIST_UPDATE_COMPLETE_COMMAND, update_chain); } else if (command->getFlags () == ROBJECTLIST_UPDATE_COMPLETE_COMMAND) { RK_ASSERT (update_chain); RKGlobals::rInterface ()->closeChain (update_chain); update_chain = 0; RK_DEBUG (OBJECTS, DL_DEBUG, "object list update complete"); emit (updateComplete ()); } else { RK_ASSERT (false); } } void RObjectList::updateEnvironments (const QStringList &env_names, bool force_globalenv_update) { RK_TRACE (OBJECTS); RObjectMap newchildmap; // find which items are new, and copy the old ones for (int i = 0; i < env_names.count (); ++i) { QString name = env_names[i]; RObject* obj = findChildByName (name); if (obj && (i > 0) && (env_names.lastIndexOf (name, i-1) > -1)) { // duplicate environment names can happen (e.g. if a data.frame is attached multiple times) obj = 0; // only copy the old item once } if (obj) { // for now, we only update the .GlobalEnv. All others we assume to be static if (obj->isType (GlobalEnv) && force_globalenv_update) { obj->updateFromR (update_chain); } } else { obj = createTopLevelEnvironment (name); RKGlobals::tracker ()->beginAddObject (obj, this, i); childmap.insert (i, obj); RKGlobals::tracker ()->endAddObject (obj, this, i); } newchildmap.insert (i, obj); } // check which envs have been removed or changed position for (int i = 0; i < childmap.size (); ++i) { // do *not* cache the childmap.size ()! We may change it in the loop. RObject *obj = childmap[i]; int new_pos = newchildmap.indexOf (obj); if (new_pos < 0) { // environment is gone RK_DEBUG (OBJECTS, DL_INFO, "removing toplevel environment %s from list", obj->getShortName ().toLatin1 ().data ()); if (RKGlobals::tracker ()->removeObject (obj, 0, true)) --i; else (newchildmap.insert (i, obj)); } else if (new_pos != i) { // this call is rather expensive, all in all, but fortunately called very rarely moveChild (obj, i, new_pos); } } RK_DO (RK_ASSERT (childmap == newchildmap), OBJECTS, DL_DEBUG); // this is an expensive assert, hence wrapping it inside RK_DO } void RObjectList::updateNamespaces (const QStringList namespace_names) { RK_TRACE (OBJECTS); QStringList orphan_namespace_names; for (int i = 0; i < namespace_names.size (); ++i) { if (!findPackage (namespace_names[i])) orphan_namespace_names.append (namespace_names[i]); } orphan_namespaces->updateFromR (update_chain, orphan_namespace_names); } REnvironmentObject *RObjectList::createTopLevelEnvironment (const QString &name) { RK_TRACE (OBJECTS); REnvironmentObject *envobj = new REnvironmentObject (this, name); envobj->updateFromR (update_chain); return envobj; } RObject *RObjectList::findObjects (const QStringList &path, RObjectSearchMap *matches, const QString &op) { RK_TRACE (OBJECTS); RK_ASSERT (op == "$"); if (path.value (1) == "::") { RObject *environment = findPackage (path[0]); if (!environment) return 0; return environment->findObjects (path.mid (2), matches, "$"); } else if (path.value (1) == ":::") { RObject *environment = findPackage (path[0]); if (environment) environment = static_cast (environment)->namespaceEnvironment (); if (!environment) environment = orphan_namespaces->findOrphanNamespace (path[0]); if (!environment) return 0; return environment->findObjects (path.mid (2), matches, "$"); } else if (path.value (0) == ".GlobalEnv") { if (path.length () > 1) return getGlobalEnv ()->findObjects (path.mid (2), matches, "$"); else if (matches) matches->insert (path.value (0), getGlobalEnv ()); // no return, here: At least one more match will be found in base else return getGlobalEnv (); } // no namespace given. Search all environments for matches for (int i = 0; i < childmap.size (); ++i) { RObject *found = childmap[i]->findObjects (path, matches, "$"); if (found && !matches) return found; } return 0; } REnvironmentObject* RObjectList::findPackage (const QString &namespacename) const { RK_TRACE (OBJECTS); for (int i = childmap.size () - 1; i >= 1; --i) { // NOTE: childmap[0] is the .GlobalEnv RObject* child = childmap[i]; if (!child->isType (PackageEnv)) continue; // Skip Autoloads REnvironmentObject* env = static_cast (child); if (env->packageName () == namespacename) { return env; } } return 0; } bool RObjectList::updateStructure (RData *) { RK_TRACE (OBJECTS); RK_ASSERT (false); return true; } void RObjectList::timeout () { RK_TRACE (OBJECTS); updateFromR (0); } QString RObjectList::renameChildCommand (RObject *object, const QString &new_name) const { RK_TRACE (OBJECTS); return (makeChildName (new_name, false) + " <- " + object->getFullName () + '\n' + removeChildCommand (object)); } QString RObjectList::removeChildCommand (RObject *object) const { RK_TRACE (OBJECTS); return ("remove (" + object->getFullName () + ')'); } //static REnvironmentObject *RObjectList::getGlobalEnv () { RK_TRACE (OBJECTS); RObjectList *list = getObjectList (); RK_ASSERT (list); RK_ASSERT (!list->isEmpty ()); REnvironmentObject *envobj = static_cast (list->childmap[0]); RK_ASSERT (envobj); RK_ASSERT (envobj->isType (RObject::GlobalEnv)); return envobj; } #include "robjectlist.moc" rkward-0.6.1/rkward/core/rcontainerobject.h0000644000175000017500000001072712124345410020311 0ustar thomasthomas/*************************************************************************** rcontainerobject - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RCONTAINEROBJECT_H #define RCONTAINEROBJECT_H #include "robject.h" class RCommand; class RKEditor; class RKRowNames; /** Internal representation of objects in the R-workspace that contain other objects @author Thomas Friedrichsmeier */ class RContainerObject : public RObject { public: RContainerObject (RObject *parent, const QString &name); ~RContainerObject (); /** update the given child with the given data. Since the child may be mismatching, and may need to be recreated, returns a pointer to the child (old or new) */ RObject *updateChildStructure (RObject *child, RData *new_data, bool just_created=false); RObject *createChildFromStructure (RData *child_data, const QString &child_name, int position); /** reimplemented from RObject to also update children */ bool updateStructure (RData *new_data); int numChildren () const; /** returns true, if there are no children in this container. Note: of course the object list may not be up to date! */ bool isEmpty () const { return childmap.isEmpty (); }; /** like findObject (), but does not recurse, i.e. only direct children */ RObject *findChildByName (const QString &name) const; /** fetches the child at the given position. This is very fast. */ RObject *findChildByIndex (int position) const; /** creates a new child. Right now only RKVariables (false, false), or data.frames (true, true), or unspecified containers (true, false) can be created. API will likely change. The child is NOT created in the workspace. That's your resonsibility. All this function returns is a new RObject* of the given type and with the name (if necessary) changed to a legal value. TODO: checking for and changing illegal names is not yet implemented */ RObject *createPendingChild (const QString &name, int position=-1, bool container=false, bool data_frame=false); /** given child_name, constructs a name which is as close as possible to the orginial but valid (i.e. not already in use, not contaning illegal characters */ QString validizeName (const QString &child_name, bool unique=true) const; void moveChild (RObject* child, int from_index, int to_index); /** reimplemented from RObject to do nothing at all, including not raising an assert. This is because container objects do not have any edit data, themselves, but may be opened for editing, e.g. as a data.frame */ void beginEdit () {}; /** see beginEdit() */ void endEdit () {}; /** return an RKVariable representing the row-names object for this container */ RKRowNames* rowNames (); private: /** usually, we do not update the structure of the row.names() from R, as it is always the same. However, we may need to adjust the length, and this hack does that. */ void updateRowNamesObject (); protected: /** reimplemented from RObject to actually search for matching objects among the children */ RObject *findObjects (const QStringList &path, RObjectSearchMap *matches, const QString &op); void updateChildren (RData *new_children); RObjectMap childmap; // why do I need this to make it compile?! friend class RObjectList; friend class RObject; void renameChild (RObject *object, const QString &new_name); void removeChild (RObject *object, bool removed_in_workspace); virtual QString removeChildCommand (RObject *object) const; virtual QString renameChildCommand (RObject *object, const QString &new_name) const; friend class RKModificationTracker; void insertChild (RObject* child, int position); void removeChildNoDelete (RObject* child); }; #endif rkward-0.6.1/rkward/core/renvironmentobject.h0000644000175000017500000000516112124345410020667 0ustar thomasthomas/*************************************************************************** renvironmentobject - description ------------------- begin : Wed Sep 27 2006 copyright : (C) 2006, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RENVIRONMENTOBJECT_H #define RENVIRONMENTOBJECT_H #include "rcontainerobject.h" class RCommand; class RCommandChain; /** This class roughly corresponds to an environment in R. It keeps a list of all objects in that environment. @author Thomas Friedrichsmeier */ class REnvironmentObject : public RContainerObject { public: REnvironmentObject (RContainerObject *parent, const QString &name); ~REnvironmentObject (); void updateFromR (RCommandChain *chain); /** like updateFromR, but only update new / removed symbols from R. Theoretically this could be defined in RContainerObject, but the only use case is for environments. */ virtual void updateFromR (RCommandChain *chain, const QStringList ¤t_symbols); QString getFullName () const; QString makeChildName (const QString &short_child_name, bool misplaced=false) const; QString makeChildBaseName (const QString &short_child_name) const; /** reimplemented from RContainerObject: If this is an environment var, call RContainerObject::writeMetaData (). Else, do nothing. An environment has no meta data. */ void writeMetaData (RCommandChain *chain); QString packageName () const; protected: bool updateStructure (RData *new_data); /// reimplemented from RContainerObject to call "remove (objectname)" instead of "objectname <- NULL" QString removeChildCommand (RObject *object) const; /// reimplemented from RContainerObject to call "remove (objectname)" instead of "objectname <- NULL" QString renameChildCommand (RObject *object, const QString &new_name) const; friend class RObject; void updateNamespace (RData *new_data); }; #endif rkward-0.6.1/rkward/core/rkrownames.cpp0000644000175000017500000001514512124345410017500 0ustar thomasthomas/*************************************************************************** rkrownames - description ------------------- begin : Tue Mar 21 2010 copyright : (C) 2010, 2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkrownames.h" #include #include #include "rcontainerobject.h" #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "rkmodificationtracker.h" #include "../debug.h" RKRowNames::RKRowNames (RContainerObject *parent) : RKVariable (parent, QString ()) { RK_TRACE (OBJECTS); type = Variable | NonVisibleObject | PseudoObject; pseudo_object_types.insert (this, RowNamesObject); setDataType (RObject::DataCharacter); check_duplicates = true; is_sequential_up_to_row = -1; name = i18n ("row names"); } RKRowNames::~RKRowNames () { RK_TRACE (OBJECTS); pseudo_object_types.remove (this); } void RKRowNames::beginEdit () { RK_TRACE (OBJECTS); bool just_initialized = (data == 0); RKVariable::beginEdit (); if (just_initialized) { RK_ASSERT (data); for (int i = 0; i < getLength (); ++i) { data->cell_strings[i] = QString::number (i+1); data->cell_states[i] = RKVarEditData::Valid; } is_sequential_up_to_row = getLength () - 1; } } QString RKRowNames::getFullName () const { // RK_TRACE (OBJECTS); return ("row.names (" + parent->getFullName () + ")"); } void RKRowNames::writeData (int from_row, int to_row, RCommandChain *chain) { RK_TRACE (OBJECTS); if (isSequential ()) { RKGlobals::rInterface ()->issueCommand (getFullName () + " <- NULL", RCommand::App | RCommand::Sync, QString::null, 0,0, chain); } else { // unfortunately, we always need to write the whole data, as row.names<- does not support indexing. QString data_string = "c ("; for (int row = 0; row < getLength (); ++row) { // TODO: use getCharacter and direct setting of vectors. data_string.append (getRText (row)); if (row != (getLength () - 1)) { data_string.append (", "); } } data_string.append (")"); RKGlobals::rInterface ()->issueCommand (getFullName () + " <- " + data_string, RCommand::App | RCommand::Sync, QString::null, 0, 0, chain); } ChangeSet *set = new ChangeSet; set->from_index = from_row; set->to_index = to_row; RKGlobals::tracker ()->objectDataChanged (this, set); } void RKRowNames::setText (int row, const QString &text) { RK_TRACE (OBJECTS); lockSyncing (true); data->cell_strings[row] = QString (); // don't get in the way of duplicate checking! QString real_text = text; if (real_text.isEmpty ()) { if (isSequential ()) { real_text = QString::number (row + 1); } else { real_text = i18n ("new.row"); // empty row names are forbidden } } bool was_sequential_row = false; if (is_sequential_up_to_row >= (row - 1)) { if (real_text == QString::number (row + 1)) { if (makeUnique (&real_text, true)) { is_sequential_up_to_row = qMax (row, is_sequential_up_to_row); was_sequential_row = true; if (is_sequential_up_to_row == row) { // even more sequential numbers after this? for (int i = row + 1; i < getLength (); ++i) { if (data->cell_strings[i] != QString::number (i + 1)) break; is_sequential_up_to_row = i; } } } } } if (!was_sequential_row) { makeUnique (&real_text, false); is_sequential_up_to_row = qMin (row - 1, is_sequential_up_to_row); } RKVariable::setText (row, real_text); lockSyncing (false); } bool RKRowNames::makeUnique (QString *text, bool non_sequentials_only) { RK_TRACE (OBJECTS); if (!check_duplicates) return true; bool from_index = 0; if (non_sequentials_only) from_index = is_sequential_up_to_row + 1; QString dummy = *text; for (long i = 0; i < INT_MAX; ++i) { // check whether the text is unique on this iteration bool is_unique = true; for (int row = from_index; row <= getLength (); ++row) { if (dummy == data->cell_strings[row]) { is_unique = false; break; } } if (is_unique) { if (i == 0) { return true; // was unique on first attempt } else { *text = dummy; return false; } } // try adjusted text on next iteration dummy = *text + '.' + QString::number (i); } RK_ASSERT (false); return false; } void RKRowNames::insertRows (int row, int count) { RK_TRACE (OBJECTS); lockSyncing (true); bool was_sequential = isSequential (); RKVariable::insertRows (row, count); if (was_sequential) { // length just increased is_sequential_up_to_row += count; for (int i = row; i < getLength (); ++i) { data->cell_strings[i] = QString::number (i + 1); data->cell_states[i] = RKVarEditData::Valid; // was set to NA by RKVariable::insertRows } } else { is_sequential_up_to_row = qMin (is_sequential_up_to_row, row - 1); for (int i = row; i < row + count; ++i) { setText (i, QString ()); } } // always need to update. If sequential, rows have just changed. If non-sequential, data needs to be written to backend cellsChanged (row, getLength () - 1); lockSyncing (false); } void RKRowNames::removeRows (int from_row, int to_row) { RK_TRACE (OBJECTS); lockSyncing (true); bool was_sequential = isSequential (); RKVariable::removeRows (from_row, to_row); if (was_sequential) { // length just decreased is_sequential_up_to_row -= (to_row - from_row + 1); for (int i = from_row; i < getLength (); ++i) { data->cell_strings[i] = QString::number (i + 1); } } else { is_sequential_up_to_row = qMin (is_sequential_up_to_row, from_row - 1); } // always need to update. If sequential, rows have just changed. If non-sequential, data needs to be written to backend cellsChanged (from_row, getLength () - 1); lockSyncing (false); } void RKRowNames::setCharacterFromR (int from_row, int to_row, const QStringList &data) { RK_TRACE (OBJECTS); is_sequential_up_to_row = -1; check_duplicates = false; RKVariable::setCharacterFromR (from_row, to_row, data); check_duplicates = true; } rkward-0.6.1/rkward/core/renvironmentobject.cpp0000644000175000017500000001763112124345410021227 0ustar thomasthomas/*************************************************************************** renvironmentobject - description ------------------- begin : Wed Sep 27 2006 copyright : (C) 2006, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "renvironmentobject.h" #include #include #include "robjectlist.h" #include "rkpseudoobjects.h" #include "../rbackend/rinterface.h" #include "../settings/rksettingsmoduleobjectbrowser.h" #include "rkmodificationtracker.h" #include "../rkglobals.h" #include "../debug.h" REnvironmentObject::REnvironmentObject (RContainerObject *parent, const QString &name) : RContainerObject (parent, name) { RK_TRACE (OBJECTS); type = Environment; if (parent == RObjectList::getObjectList ()) { type |= ToplevelEnv; if (name == ".GlobalEnv") { type |= GlobalEnv; } else if (name.contains (':')) { type |= PackageEnv; } } } REnvironmentObject::~REnvironmentObject () { RK_TRACE (OBJECTS); } QString REnvironmentObject::packageName () const { RK_ASSERT (isType (PackageEnv)); if (!isType (PackageEnv)) RK_DEBUG (OBJECTS, DL_WARNING, "%s", qPrintable (name)); return name.section (':', 1); } QString REnvironmentObject::getFullName () const { RK_TRACE (OBJECTS); if (type & GlobalEnv) return name; // .GlobalEnv if (type & ToplevelEnv) return ("as.environment (" + rQuote (name) + ")"); return parent->makeChildName (name, type & Misplaced); } QString REnvironmentObject::makeChildName (const QString &short_child_name, bool misplaced) const { RK_TRACE (OBJECTS); QString safe_name; bool irregular = false; if (irregularShortName (short_child_name)) { irregular = true; safe_name = rQuote (short_child_name); } else safe_name = short_child_name; if (type & GlobalEnv) { // don't print as ".GlobalEnv$something" unless childname needs fixing if (irregular) return (getShortName () + "$" + safe_name); return (safe_name); } if (type & ToplevelEnv) { /* Some items are placed outside of their native namespace. E.g. in package:boot item "motor". It can be retrieved using as.environment ("package:boot")$motor. This is extremly ugly. We need to give them (and only them) this special treatment. */ // TODO: hopefully one day operator "::" will work even in those cases. So check back later, and remove after a sufficient amount of backwards compatibility time // NOTE: This appears to have been fixed in R 2.14.0, when all packages were forced to have namespaces. if ((type & PackageEnv) && (!misplaced)) return (packageName () + "::" + safe_name); return (getFullName () + '$' + safe_name); } return (getFullName () + '$' + safe_name); } QString REnvironmentObject::makeChildBaseName (const QString &short_child_name) const { RK_TRACE (OBJECTS); if (type & ToplevelEnv) return (short_child_name); return (name + '$' + short_child_name); } void REnvironmentObject::writeMetaData (RCommandChain *chain) { RK_TRACE (OBJECTS); if (type & ToplevelEnv) return; RContainerObject::writeMetaData (chain); } void REnvironmentObject::updateFromR (RCommandChain *chain) { RK_TRACE (OBJECTS); if (type & PackageEnv) { if (RKSettingsModuleObjectBrowser::isPackageBlacklisted (packageName ())) { KMessageBox::information (0, i18n ("The package '%1' (probably you just loaded it) is currently blacklisted for retrieving structure information. Practically this means, the objects in this package will not appear in the object browser, and there will be no object name completion or function argument hinting for objects in this package.\nPackages will typically be blacklisted, if they contain huge amount of data, that would take too long to load. To unlist the package, visit Settings->Configure RKWard->Workspace.", packageName ()), i18n("Package blacklisted"), "packageblacklist" + packageName ()); return; } } QString options; if (type & GlobalEnv) options = ", envlevel=-1"; // in the .GlobalEnv recurse one more level if (type & PackageEnv) options.append (", namespacename=" + rQuote (packageName ())); RCommand *command = new RCommand (".rk.get.structure (" + getFullName () + ", " + rQuote (getShortName ()) + options + ')', RCommand::App | RCommand::Sync | RCommand::GetStructuredData, QString::null, this, ROBJECT_UDPATE_STRUCTURE_COMMAND); RKGlobals::rInterface ()->issueCommand (command, chain); type |= Updating; } void REnvironmentObject::updateFromR (RCommandChain *chain, const QStringList ¤t_symbols) { RK_TRACE (OBJECTS); // only needed for the assert at the end int debug_baseline = 0; // which children are missing? for (int i = childmap.size () - 1; i >= 0; --i) { RObject *object = childmap[i]; if (!current_symbols.contains (object->getShortName ())) { if (object->isPending () || (!(RKGlobals::tracker ()->removeObject (object, 0, true)))) debug_baseline++; } } // which ones are new in the list? for (int i = current_symbols.count () - 1; i >= 0; --i) { RObject *child = findChildByName (current_symbols[i]); if (!child) child = createPendingChild (current_symbols[i], i, false, false); if (child->isPending ()) { child->type -= RObject::Pending; // HACK: Child is not actually pending: We've seen it! child->updateFromR (chain); } } RK_ASSERT ((debug_baseline + current_symbols.count ()) == childmap.size ()); } bool REnvironmentObject::updateStructure (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataType () == RData::StructureVector); RK_ASSERT (new_data->getDataLength () >= StorageSizeBasicInfo); if (!(type & ToplevelEnv)) { if (!RObject::updateStructure (new_data)) return false; } RData::RDataStorage new_data_data = new_data->structureVector (); if (new_data->getDataLength () > StorageSizeBasicInfo) { RData *children_sub = new_data_data.at (StoragePositionChildren); RK_ASSERT (children_sub->getDataType () == RData::StructureVector); updateChildren (children_sub); // a namespace to go with that? if (new_data->getDataLength () > (StorageSizeBasicInfo + 1)) { RK_ASSERT (new_data->getDataLength () == (StorageSizeBasicInfo + 2)); updateNamespace (new_data_data.at (StoragePositionNamespace)); } else updateNamespace (0); } else { RK_ASSERT (false); } return true; } void REnvironmentObject::updateNamespace (RData* new_data) { RK_TRACE (OBJECTS); if (!new_data) { setSpecialChildObject (0, NamespaceObject); return; } RK_ASSERT (new_data->getDataType () == RData::StructureVector); bool added = false; REnvironmentObject *namespace_envir = namespaceEnvironment (); if (!namespace_envir) { namespace_envir = new RKNamespaceObject (this); added = true; RKGlobals::tracker ()->lockUpdates (true); } namespace_envir->updateStructure (new_data->structureVector ().at (0)); if (added) { RKGlobals::tracker ()->lockUpdates (false); setSpecialChildObject (namespace_envir, NamespaceObject); } } QString REnvironmentObject::renameChildCommand (RObject *object, const QString &new_name) const { RK_TRACE (OBJECTS); return (makeChildName (new_name) + " <- " + object->getFullName () + '\n' + removeChildCommand (object)); } QString REnvironmentObject::removeChildCommand (RObject *object) const { RK_TRACE (OBJECTS); return ("remove (" + object->getFullName () + ')'); } rkward-0.6.1/rkward/core/rkvariable.cpp0000644000175000017500000007045212124345410017434 0ustar thomasthomas/*************************************************************************** rkvariable - description ------------------- begin : Thu Aug 12 2004 copyright : (C) 2004, 2007, 2008, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkvariable.h" #include #include "float.h" #include "math.h" #include "rcontainerobject.h" #include "robjectlist.h" #include "../rbackend/rinterface.h" #include "../rkglobals.h" #include "rkmodificationtracker.h" #define GET_DATA_COMMAND 11 #define MAX_PRECISION DBL_DIG #include "../debug.h" RKVariable::RKVariable (RContainerObject *parent, const QString &name) : RObject (parent, name) { RK_TRACE (OBJECTS); type = Variable; data = 0; setDataType (RObject::DataNumeric); } RKVariable::~RKVariable () { RK_TRACE (OBJECTS); RK_ASSERT (!data); // endEdit() should have been called } void RKVariable::setVarType (RObject::RDataType new_type, bool sync) { RK_TRACE (OBJECTS); if (getDataType () == new_type) return; if ((new_type < RObject::MinKnownDataType) || (new_type > RObject::MaxKnownDataType)) { new_type = RObject::DataCharacter; } // if the variable is currently opened for editing, all values need to be rechecked / resynced if (data) { // quick and dirty approach! TODO: make more efficient QStringList list; #if QT_VERSION >= 0x040700 list.reserve (getLength ()); #endif bool labelled = (new_type == DataCharacter); for (int i=0; i < getLength (); ++i) list.append (getText (i, labelled)); // all pending changes are moot discardUnsyncedChanges (); // store what we want to keep of the edit data int num_listeners = data->num_listeners; ValueLabels *value_labels = data->value_labels; data->value_labels = 0; // prevent destruction FormattingOptions formatting_options = data->formatting_options; // destroy and re-allocate edit data data->num_listeners = 0; // to avoid the otherwise useful assert in discardEditData bool pending = isPending (); discardEditData (); if (pending) type |= Pending; // flag is cleared in discardEditData() setDataType (new_type); allocateEditData (); // re-set presistent aspects of the edit data data->value_labels = value_labels; data->formatting_options = formatting_options; data->num_listeners = num_listeners; // re-set all data lockSyncing (true); for (int i = list.size () - 1; i >= 0; --i) setText (i, list[i]); if (sync) { QString command = ".rk.set.vector.mode(" + getFullName () + ", "; if (new_type == RObject::DataCharacter) command += "as.character"; else if (new_type == RObject::DataNumeric) command += "as.numeric"; else if (new_type == RObject::DataLogical) command += "as.logical"; else if (new_type == RObject::DataFactor) command += "as.factor"; command += ")"; RKGlobals::rInterface ()->issueCommand (command, RCommand::App | RCommand::Sync, QString::null); if (new_type == RObject::DataFactor) updateValueLabels (); // as.factor resets the "levels"-attribute! syncDataToR (); } else discardUnsyncedChanges (); lockSyncing (false); } else { setDataType (new_type); } } void RKVariable::writeMetaData (RCommandChain *chain) { RK_TRACE (OBJECTS); writeValueLabels (chain); RObject::writeMetaData (chain); } void RKVariable::rCommandDone (RCommand *command) { RK_TRACE (OBJECTS); if (command->getFlags () == ROBJECT_UDPATE_STRUCTURE_COMMAND) { RObject::rCommandDone (command); } else if (command->getFlags () == GET_DATA_COMMAND) { if (!data) return; // this can happen, if the editor is closed while a data update is still queued. // prevent resyncing of data lockSyncing (true); RK_ASSERT (command->getDataType () == RData::StructureVector); RK_ASSERT (command->getDataLength () == 3); RData::RDataStorage top = command->structureVector (); RData *cdata = top.at (0); RData *levels = top.at (1); RData *invalids = top.at (2); // set factor levels first RK_ASSERT (levels->getDataType () == RData::StringVector); QStringList new_levels = levels->stringVector (); int levels_len = new_levels.size (); RK_ASSERT (levels_len >= 1); delete data->value_labels; data->value_labels = new RObject::ValueLabels; if ((levels_len == 1) && new_levels.at (0).isEmpty ()) { // no levels } else { for (int i=0; i < levels_len; ++i) { data->value_labels->insert (QString::number (i+1), new_levels.at (i)); } } // now set the data RK_ASSERT (cdata->getDataLength () == (unsigned int) getLength ()); // not really a problem due to the line below, I'd still like to know if / when this happens. extendToLength (cdata->getDataLength ()); if (cdata->getDataType () == RData::StringVector) { setCharacterFromR (0, getLength () - 1, cdata->stringVector ()); } else if (cdata->getDataType () == RData::RealVector) { setNumericFromR (0, getLength () - 1, cdata->realVector ()); } else if (cdata->getDataType () == RData::IntVector) { RData::IntStorage int_data = cdata->intVector (); unsigned int len = getLength (); QVector dd; dd.reserve (len); for (unsigned int i = 0; i < len; ++i) { if (RInterface::isNaInt (int_data.at (i))) dd.append (NAN); else dd.append ((double) int_data.at (i)); } setNumericFromR (0, getLength () - 1, dd); } // now set the invalid fields (only if they are still NAs in the R data) data->invalid_fields.clear (); if (invalids->getDataLength () <= 1) { // no invalids } else { RK_ASSERT (invalids->getDataType () == RData::StringVector); QStringList invalids_list = invalids->stringVector (); int invalids_length = invalids_list.size (); RK_ASSERT ((invalids_length % 2) == 0); int invalids_count = invalids_length / 2; for (int i=0; i < invalids_count; ++i) { int row = invalids_list.at (i).toInt () - 1; if (data->cell_states[row] & RKVarEditData::NA) { // NOTE: Do *not* use setText(), here. It tries too hard to set a valid value. data->invalid_fields.insert (row, invalids_list.at (invalids_count + i)); data->cell_states[row] = RKVarEditData::Invalid; } } } data->previously_valid = data->invalid_fields.isEmpty (); data->formatting_options = parseFormattingOptionsString (getMetaProperty ("format")); ChangeSet *set = new ChangeSet (0, getLength (), true); RKGlobals::tracker ()->objectDataChanged (this, set); RKGlobals::tracker ()->objectMetaChanged (this); type -= (type & NeedDataUpdate); discardUnsyncedChanges (); lockSyncing (false); } else { RK_ASSERT (false); } } ////////////////////// BEGIN: data-handling ////////////////////////////// #define ALLOC_STEP 2 #define INITIAL_ALLOC 100 void RKVariable::setLength (int len) { RK_TRACE (OBJECTS); RK_ASSERT (!getLength ()); // should only be called once RK_ASSERT (!dimensions.isEmpty ()); dimensions[0] = len; } bool RKVariable::updateType (RData *new_data) { RK_TRACE (OBJECTS); if (data) { int old_type = type; bool ret = RObject::updateType (new_data); int new_type = type; // Convert old values to the new data type. // TODO: This is quite inefficient, as we will update the data from R in a second, anyway. // Still it is a quick, dirty, and safe way to keep the data representation in a suitable format type = old_type; // needed to read out the old data setVarType (typeToDataType (new_type), false); type = new_type; return ret; } return RObject::updateType (new_data); } // virtual void RKVariable::beginEdit () { RK_TRACE (OBJECTS); if (!data) { allocateEditData (); if (!(isPending () || (parentObject () && parentObject ()->isPending ()))) updateDataFromR (0); } ++(data->num_listeners); } // virtual void RKVariable::endEdit () { RK_TRACE (OBJECTS); RK_ASSERT (data); RK_ASSERT (data->num_listeners > 0); --(data->num_listeners); if (!data->num_listeners) discardEditData (); } void RKVariable::allocateEditData () { RK_TRACE (OBJECTS); // edit data should only be allocated once, even if there are multiple editors RK_ASSERT (!data); data = new RKVarEditData; data->sync_locks = 0; data->value_labels = 0; data->formatting_options.alignment = FormattingOptions::AlignDefault; data->formatting_options.precision_mode = FormattingOptions::PrecisionDefault; data->formatting_options.precision = 0; data->previously_valid = true; data->num_listeners = 0; discardUnsyncedChanges (); // initialize // initialization hack int length = getLength (); dimensions[0] = -1; extendToLength (length); RK_ASSERT (data->cell_states.size () >= getLength ()); for (int i = 0; i < getLength (); ++i) { data->cell_states[i] = RKVarEditData::NA; } } void RKVariable::discardEditData () { RK_TRACE (OBJECTS); RK_ASSERT (data); RK_ASSERT (!(data->num_listeners)); RK_ASSERT (data->changes.from_index == -1); delete data->value_labels; delete data; data = 0; if (isPending ()) (type -= Pending); } void RKVariable::updateDataFromR (RCommandChain *chain) { RK_TRACE (OBJECTS); if (!data) return; RKGlobals::rInterface ()->issueCommand (".rk.get.vector.data (" + getFullName () + ')', RCommand::App | RCommand::Sync | RCommand::GetStructuredData, QString::null, this, GET_DATA_COMMAND, chain); } void RKVariable::lockSyncing (bool lock) { RK_TRACE (OBJECTS); RK_ASSERT (data); if (lock) data->sync_locks++; else data->sync_locks--; RK_ASSERT (data->sync_locks >= 0); if (!(data->sync_locks)) { syncDataToR (); discardUnsyncedChanges (); } } void RKVariable::discardUnsyncedChanges () { RK_TRACE (OBJECTS); RK_ASSERT (data); data->changes.from_index = data->changes.to_index = -1; } void RKVariable::syncDataToR () { RK_TRACE (OBJECTS); if (data->changes.from_index == -1) return; // TODO writeData (data->changes.from_index, data->changes.to_index); discardUnsyncedChanges (); } void RKVariable::restore (RCommandChain *chain) { RK_TRACE (OBJECTS); RK_ASSERT (data); writeData (0, getLength () - 1, chain); discardUnsyncedChanges (); writeMetaData (chain); } void RKVariable::writeInvalidFields (QList rows, RCommandChain *chain) { RK_TRACE (OBJECTS); if (rows.isEmpty ()) return; QString set; QString values; QString clear; for (int i = 0; i < rows.size (); ++i) { int row = rows[i]; if (data->invalid_fields.contains (row)) { if (!set.isEmpty ()) { set.append (", "); values.append (", "); } set.append (QString::number (row+1)); values.append (rQuote (data->invalid_fields[row])); } else { if (!clear.isEmpty ()) clear.append (", "); clear.append (QString::number (row+1)); } data->cell_states[row] -= (data->cell_states[row] & RKVarEditData::UnsyncedInvalidState); } if (!set.isEmpty ()) { set = "set=c(" + set + "), "; values = "values=c(" + values + ")"; } if (!clear.isEmpty ()) { clear = "clear=c(" + clear + ")"; if (!values.isEmpty ()) values.append (","); } RKGlobals::rInterface ()->issueCommand (".rk.set.invalid.fields (" + getFullName () + ", " + set + values + clear + ")", RCommand::App | RCommand::Sync, QString (), 0,0, chain); if (data->previously_valid != data->invalid_fields.isEmpty ()) { data->previously_valid = data->invalid_fields.isEmpty (); RKGlobals::tracker ()->objectMetaChanged (this); } } void RKVariable::writeData (int from_row, int to_row, RCommandChain *chain) { RK_TRACE (OBJECTS); if (from_row == -1) return; QList changed_invalids; // TODO: try to sync in correct storage mode if (from_row == to_row) { RKGlobals::rInterface ()->issueCommand (getFullName () + '[' + QString::number (from_row+1) + "] <- " + getRText (from_row), RCommand::App | RCommand::Sync, QString::null, 0,0, chain); if (data->cell_states[from_row] & RKVarEditData::UnsyncedInvalidState) changed_invalids.append (from_row); } else { QString data_string = "c ("; for (int row = from_row; row <= to_row; ++row) { // TODO: use getCharacter and direct setting of vectors. data_string.append (getRText (row)); if (row != to_row) { data_string.append (", "); } if (data->cell_states[row] & RKVarEditData::UnsyncedInvalidState) changed_invalids.append (row); } data_string.append (")"); RKGlobals::rInterface ()->issueCommand (getFullName () + '[' + QString::number (from_row + 1) + ':' + QString::number (to_row + 1) + "] <- " + data_string, RCommand::App | RCommand::Sync, QString::null, 0,0, chain); } if (!changed_invalids.isEmpty ()) writeInvalidFields (changed_invalids, chain); ChangeSet *set = new ChangeSet (from_row, to_row); RKGlobals::tracker ()->objectDataChanged (this, set); } void RKVariable::cellsChanged (int from_row, int to_row) { RK_TRACE (OBJECTS); if (!data->sync_locks) { writeData (from_row, to_row); } else { if ((data->changes.from_index > from_row) || (data->changes.from_index == -1)) data->changes.from_index = from_row; if (data->changes.to_index < to_row) data->changes.to_index = to_row; } } void RKVariable::extendToLength (int length) { if (!data) return; RK_TRACE (OBJECTS); if (length <= 0) length = 0; int old_length = getLength (); if (length <= old_length) return; // pad storage to required list with "unknown" data for (int i=old_length; i < length; ++i) { if (getDataType () == DataCharacter) data->cell_strings.append (QString ()); else data->cell_doubles.append (0.0); data->cell_states.append (RKVarEditData::Unknown); } dimensions[0] = length; } bool RKVariable::hasInvalidFields () const { if (!data) return false; // should not ever happen, though return (!data->invalid_fields.isEmpty ()); } QString RKVariable::getText (int row, bool pretty) const { if (row >= getLength ()) { RK_ASSERT (false); return (QString ()); } if (data->cell_states[row] & RKVarEditData::Invalid) { RK_ASSERT (data->invalid_fields.contains (row)); return (data->invalid_fields.value (row)); } if (data->cell_states[row] & RKVarEditData::NA) return (QString ()); if (pretty) return (getLabeled (row)); if (getDataType () == DataCharacter) { RK_ASSERT (!data->cell_strings.isEmpty ()); return (data->cell_strings[row]); } else { RK_ASSERT (!data->cell_doubles.isEmpty ()); if (pretty && (data->formatting_options.precision_mode != FormattingOptions::PrecisionDefault)) { if (data->formatting_options.precision_mode == FormattingOptions::PrecisionRequired) { return QString::number (data->cell_doubles[row], 'g', MAX_PRECISION); } return QString::number (data->cell_doubles[row], 'f', data->formatting_options.precision); } return QString::number (data->cell_doubles[row], 'g', MAX_PRECISION); } } QString RKVariable::getRText (int row) const { RK_TRACE (OBJECTS); Status cell_state = cellStatus (row); if ((cell_state == ValueUnused) || (cell_state == ValueInvalid)) { return ("NA"); } else if (getDataType () == DataFactor) { return (rQuote (getText (row, true))); } else if (getDataType () == DataCharacter) { return (rQuote (getText (row))); } else if (getDataType () == DataLogical) { RK_ASSERT (!data->cell_doubles.isEmpty ()); if (data->cell_doubles[row] == 0) return ("FALSE"); else return ("TRUE"); } else { RK_ASSERT (!data->cell_doubles.isEmpty ()); return (QString::number (data->cell_doubles[row], 'g', MAX_PRECISION)); } } void RKVariable::setText (int row, const QString &text) { RK_TRACE (OBJECTS); RK_ASSERT (row < getLength ()); // clear previous state if (data->cell_states[row] & RKVarEditData::Invalid) { data->cell_states[row] = RKVarEditData::UnsyncedInvalidState; data->invalid_fields.remove (row); } else { data->cell_states[row] = 0; } bool valid = true; if (text.isNull ()) { data->cell_states[row] |= RKVarEditData::NA; } else if (text.isEmpty () && getDataType () != DataCharacter) { data->cell_states[row] |= RKVarEditData::NA; } else { if (getDataType () == DataCharacter) { data->cell_strings[row] = text; } else if (getDataType () == DataFactor) { if (data->value_labels) { QString realtext = data->value_labels->key (text); // first, attempt to set by level if (!realtext.isEmpty ()) data->cell_doubles[row] = realtext.toInt (); else { // if this failed, try to set by index, instead. if (data->value_labels->contains (text)) data->cell_doubles[row] = text.toInt (); else valid = false; } } else valid = false; } else if (getDataType () == DataLogical) { if (text == "0" || text == "F" || text == "FALSE") data->cell_doubles[row] = 0; else if (text == "1" || text == "T" || text == "TRUE") data->cell_doubles[row] = 1; else valid = false; } else { data->cell_doubles[row] = text.toDouble (&valid); } } if (valid) { if (!(data->cell_states[row] & RKVarEditData::NA)) data->cell_states[row] |= RKVarEditData::Valid; } else { data->invalid_fields.insert (row, text); data->cell_states[row] |= RKVarEditData::Invalid | RKVarEditData::UnsyncedInvalidState; } cellsChanged (row, row); } QString RKVariable::getLabeled (int row) const { QString otext = getText (row); if (getDataType () == DataLogical) { if (otext == "0") return "FALSE"; else if (otext == "1") return "TRUE"; } else if (data->value_labels) { if (data->value_labels->contains (otext)) { return (*(data->value_labels))[otext]; } } return otext; } void RKVariable::setNumericFromR (int from_row, int to_row, const QVector &numdata) { RK_TRACE (OBJECTS); RK_ASSERT (to_row < getLength ()); RK_ASSERT ((to_row - from_row) < numdata.size ()); if (getDataType () == DataCharacter) { RK_ASSERT (false); // asserting false to catch cases of this use for now. it's not really a problem, though int i = 0; for (int row=from_row; row <= to_row; ++row) { setText (row, QString::number (numdata[i++], 'g', MAX_PRECISION)); } } else if (getDataType () == DataFactor) { int i = 0; for (int row=from_row; row <= to_row; ++row) { if (data->cell_states[row] & RKVarEditData::Invalid) data->cell_states[row] = RKVarEditData::UnsyncedInvalidState; else data->cell_states[row] = 0; if (isnan (numdata[i]) || (!data->value_labels) || (!data->value_labels->contains (QString::number (numdata[i])))) { data->cell_states[row] |= RKVarEditData::NA; } else { data->cell_states[row] |= RKVarEditData::Valid; data->cell_doubles[row] = numdata[i]; } ++i; } } else { int i = 0; for (int row=from_row; row <= to_row; ++row) { if (data->cell_states[row] & RKVarEditData::Invalid) data->cell_states[row] = RKVarEditData::UnsyncedInvalidState; else data->cell_states[row] = 0; if (isnan (numdata[i])) { data->cell_states[row] |= RKVarEditData::NA; } else { data->cell_states[row] |= RKVarEditData::Valid; data->cell_doubles[row] = numdata[i]; } ++i; } } cellsChanged (from_row, to_row); } QString *RKVariable::getCharacter (int from_row, int to_row) const { RK_TRACE (OBJECTS); if (to_row >= getLength ()) { RK_ASSERT (false); return 0; } RK_ASSERT (from_row <= to_row); QString *ret = new QString[(to_row - from_row) + 1]; int i = 0; for (int row = from_row; row <= to_row; ++row) { ret[i] = getText (row); i++; } return ret; } void RKVariable::setCharacterFromR (int from_row, int to_row, const QStringList &txtdata) { RK_TRACE (OBJECTS); RK_ASSERT (to_row < getLength ()); RK_ASSERT ((to_row - from_row) < txtdata.size ()); lockSyncing (true); int i=0; for (int row=from_row; row <= to_row; ++row) { setText (row, txtdata[i++]); } lockSyncing (false); } RKVariable::Status RKVariable::cellStatus (int row) const { if (row >= getLength ()) return ValueUnknown; if (data->cell_states[row] == RKVarEditData::Unknown) return ValueUnknown; if (data->cell_states[row] & RKVarEditData::NA) return ValueUnused; if (data->cell_states[row] & RKVarEditData::Invalid) return ValueInvalid; return ValueValid; } void RKVariable::removeRows (int from_row, int to_row) { RK_TRACE (OBJECTS); QList changed_invalids; int offset = (to_row - from_row) + 1; for (int row = from_row; row < getLength (); ++row) { if (data->invalid_fields.contains (row)) { QString inv = data->invalid_fields.take (row); changed_invalids.append (row); if (row > to_row) { changed_invalids.append (row - offset); data->invalid_fields.insert (row - offset, inv); } } } for (int row = to_row; row >= from_row; --row) { data->cell_states.removeAt (row); if (getDataType () == DataCharacter) data->cell_strings.removeAt (row); else data->cell_doubles.removeAt (row); } if (!changed_invalids.isEmpty ()) writeInvalidFields (changed_invalids); dimensions[0] -= offset; } void RKVariable::insertRows (int row, int count) { RK_TRACE (OBJECTS); for (int i=row; i < row+count; ++i) { data->cell_states.insert (i, RKVarEditData::NA); if (getDataType () == DataCharacter) data->cell_strings.insert (i, QString ()); else data->cell_doubles.insert (i, 0.0); } QList changed_invalids; for (int i = getLength () - 1; i >= row; --i) { if (data->invalid_fields.contains (i)) { QString dummy = data->invalid_fields.take (i); changed_invalids.append (i); changed_invalids.append (i + count); data->invalid_fields.insert (i + count, dummy); } } if (!changed_invalids.isEmpty ()) writeInvalidFields (changed_invalids); dimensions[0] += count; } RObject::ValueLabels RKVariable::getValueLabels () const { RK_ASSERT (data); if (!data->value_labels) return RObject::ValueLabels (); return (*(data->value_labels)); } void RKVariable::setValueLabels (const ValueLabels& labels) { RK_TRACE (OBJECTS); RK_ASSERT (data); if (labels.isEmpty ()) { if (!data->value_labels) return; // no change: was empty, is empty delete data->value_labels; data->value_labels = 0; } else { if (!(data->value_labels)) data->value_labels = new RObject::ValueLabels; else { if (*(data->value_labels) == labels) return; // old and new lists are the same } *(data->value_labels) = labels; } updateValueLabels (); } void RKVariable::updateValueLabels () { RK_TRACE (OBJECTS); writeValueLabels (0); RKGlobals::tracker ()->objectMetaChanged (this); ValueLabels *labels = data->value_labels; lockSyncing (true); // find out which values got valid / invalid and change those for (int i=0; i < getLength (); ++i) { if (cellStatus (i) == ValueInvalid) { if (labels && labels->contains (getText (i))) { setText (i, getText (i)); } } else { if (!(labels && labels->contains (getText (i)))) { setText (i, getText (i)); } } } lockSyncing (false); // also update display of all values: ChangeSet *set = new ChangeSet (0, getLength () - 1); RKGlobals::tracker ()->objectDataChanged (this, set); // TODO: find out whether the object is valid after the operation and update accordingly! } void RKVariable::writeValueLabels (RCommandChain *chain) const { RK_TRACE (OBJECTS); RK_ASSERT (data); QString level_string; if (data->value_labels && (!data->value_labels->isEmpty())) { int i = 1; level_string = "c ("; while (data->value_labels->contains (QString::number (i))) { level_string.append (rQuote ((*(data->value_labels))[QString::number (i)])); if (data->value_labels->contains (QString::number (++i))) { level_string.append (", "); } } level_string.append (")"); } else { level_string = "NULL"; } RKGlobals::rInterface ()->issueCommand (".rk.set.levels (" + getFullName () + ", " + level_string + ")", RCommand::App | RCommand::Sync, QString::null, 0, 0, chain); } QString RKVariable::getValueLabelString () const { RK_TRACE (OBJECTS); RK_ASSERT (data); if (data->value_labels) { int i = 1; QString level_string; while (data->value_labels->contains (QString::number (i))) { level_string.append ((*(data->value_labels))[QString::number (i)]); if (data->value_labels->contains (QString::number (++i))) { level_string.append ("#,#"); } } return level_string; } else { return QString (); } } void RKVariable::setValueLabelString (const QString &string) { RK_TRACE (OBJECTS); RK_ASSERT (data); ValueLabels new_labels; QStringList list = string.split ("#,#"); int i = 1; for (QStringList::const_iterator it = list.constBegin (); it != list.constEnd (); ++it) { new_labels.insert (QString::number (i), *it); ++i; } setValueLabels (new_labels); } RKVariable::FormattingOptions RKVariable::getFormattingOptions () const { RK_TRACE (OBJECTS); RK_ASSERT (data); return data->formatting_options; } void RKVariable::setFormattingOptions (const FormattingOptions new_options) { RK_TRACE (OBJECTS); RK_ASSERT (data); if ((new_options.alignment == data->formatting_options.alignment) && (new_options.precision_mode == data->formatting_options.precision_mode) && (new_options.precision == data->formatting_options.precision)) return; data->formatting_options = new_options; setMetaProperty ("format", formattingOptionsToString (new_options)); // also update display of all values: ChangeSet *set = new ChangeSet (0, getLength () -1); RKGlobals::tracker ()->objectDataChanged (this, set); } QString RKVariable::getFormattingOptionsString () const { RK_TRACE (OBJECTS); RK_ASSERT (data); return getMetaProperty ("format"); } void RKVariable::setFormattingOptionsString (const QString &string) { RK_TRACE (OBJECTS); RK_ASSERT (data); setFormattingOptions (parseFormattingOptionsString (string)); } // static QString RKVariable::formattingOptionsToString (const FormattingOptions& options) { RK_TRACE (OBJECTS); QString format_string; if (options.alignment != (int) FormattingOptions::AlignDefault) { format_string.append ("align:" + QString::number (options.alignment)); } if (options.precision_mode != (int) FormattingOptions::PrecisionDefault) { if (!format_string.isEmpty ()) format_string.append ("#"); format_string.append ("prec:"); if (options.precision_mode == (int) FormattingOptions::PrecisionRequired) { format_string.append ("v"); } else { format_string.append (QString::number (options.precision)); } } return format_string; } // static RKVariable::FormattingOptions RKVariable::parseFormattingOptionsString (const QString &string) { RK_TRACE (OBJECTS); FormattingOptions formatting_options; formatting_options.alignment = FormattingOptions::AlignDefault; formatting_options.precision_mode = FormattingOptions::PrecisionDefault; formatting_options.precision = 0; bool empty = true; QStringList list = string.split ("#", QString::SkipEmptyParts); QString option, parameter; for (QStringList::const_iterator it = list.constBegin (); it != list.constEnd (); ++it) { option = (*it).section (':', 0, 0); parameter = (*it).section (':', 1, 1); if (parameter.isEmpty ()) continue; if (option == "align") { int al = parameter.toInt (); if ((al >= (int) FormattingOptions::AlignDefault) && (al <= (int) FormattingOptions::AlignRight)) { empty = false; formatting_options.alignment = (FormattingOptions::Alignment) al; } } else if (option == "prec") { if (parameter == "d") { empty = false; formatting_options.precision_mode = FormattingOptions::PrecisionDefault; } else if (parameter == "v") { empty = false; formatting_options.precision_mode = FormattingOptions::PrecisionRequired; } else { int digits = parameter.toInt (); if ((digits >= 0) && (digits <= 15)) { empty = false; formatting_options.precision_mode = FormattingOptions::PrecisionFixed; formatting_options.precision = digits; } } } else { RK_ASSERT (false); } } return formatting_options; } RKVariable::CellAlign RKVariable::getAlignment () const { RK_ASSERT (data); if (data->formatting_options.alignment != FormattingOptions::AlignDefault) { if (data->formatting_options.alignment == FormattingOptions::AlignLeft) return AlignCellLeft; return AlignCellRight; } else { // TODO: use global (configurable) defaults, if not specified if ((getDataType () == DataCharacter) || (getDataType () == DataFactor)) { return AlignCellLeft; } else { return AlignCellRight; } } } /////////////////// END: data-handling /////////////////////////// rkward-0.6.1/rkward/core/rkpseudoobjects.h0000644000175000017500000000701012124345410020153 0ustar thomasthomas/*************************************************************************** rkpseudoobjects - description ------------------- begin : Fri Mar 11 2011 copyright : (C) 2011-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKPSEUDOOBJECTS_H #define RKPSEUDOOBJECTS_H #include "rcontainerobject.h" #include "renvironmentobject.h" /** TODO: * - fix automatic updating of loadedNamespaces() * - override getObjectDescription() * */ /** This class represents a "pseudo" list of the S4 slots of the corresponding parent object. In R, no such object exists. @author Thomas Friedrichsmeier */ class RSlotsPseudoObject : public RContainerObject { public: RSlotsPseudoObject (RObject *parent); ~RSlotsPseudoObject (); QString getFullName () const; QString makeChildName (const QString &short_child_name, bool misplaced=false) const; }; /** This class represents the namespace environment of a loaded package. While the namespace environment exists in R, it is not actually a logical child of the package environment, which is why we call it a pseudo object in RKWard (actually, perhaps we should rather call it a "special" object, instead). @author Thomas Friedrichsmeier */ class RKNamespaceObject : public REnvironmentObject { public: RKNamespaceObject (REnvironmentObject* package, const QString name = QString ()); ~RKNamespaceObject (); QString getFullName () const; QString makeChildName (const QString &short_child_name, bool misplaced=false) const; QString makeChildBaseName (const QString &short_child_name) const; QString namespaceName () const { return namespace_name; }; private: QString namespace_name; }; class RObjectList; /** This class represents the list of namespace environments which are loaded, but do not belong to a package on the search path. (TODO: Actually, we should relax the assumption that objects can only be at one place in the hierarchy, and turn this into a list of all namespace environemnts!) It exists only once, as a direct child of the RObjectList. @author Thomas Friedrichsmeier */ class RKOrphanNamespacesObject : public REnvironmentObject { public: RKOrphanNamespacesObject (RObjectList *parent); ~RKOrphanNamespacesObject (); QString getFullName () const; QString makeChildName (const QString &short_child_name, bool misplaced=false) const; QString makeChildBaseName (const QString &short_child_name) const; QString getObjectDescription () const; RKNamespaceObject *findOrphanNamespace (const QString &name) const; /** should not be called on this object. Reimplemented to raise an assert, and do nothing else. */ void updateFromR (RCommandChain *chain); /** reimplemented from REnvironmentObject */ void updateFromR (RCommandChain *chain, const QStringList ¤t_symbols); }; #endif rkward-0.6.1/rkward/core/rfunctionobject.h0000644000175000017500000000307212124345410020147 0ustar thomasthomas/*************************************************************************** rfunctionobject - description ------------------- begin : Wed Apr 26 2006 copyright : (C) 2006 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RFUNCTION_H #define RFUNCTION_H #include "robject.h" class RCommand; /** Internal representation of function objects in the R workspace @author Thomas Friedrichsmeier */ class RFunctionObject : public RObject { public: RFunctionObject (RObject *parent, const QString &name); ~RFunctionObject (); /** reimplemented from RObject to handle function arguments */ bool updateStructure (RData *new_data); QString printArgs () const; protected: QStringList argnames; QStringList argvalues; bool updateArguments (RData *new_data); }; #endif rkward-0.6.1/rkward/core/rkpseudoobjects.cpp0000644000175000017500000001316512124345410020516 0ustar thomasthomas/*************************************************************************** rkpseudoobjects - description ------------------- begin : Fri Mar 11 2011 copyright : (C) 2011-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkpseudoobjects.h" #include #include "../debug.h" RSlotsPseudoObject::RSlotsPseudoObject (RObject *parent) : RContainerObject (parent, "SLOTS") { RK_TRACE (OBJECTS); type |= PseudoObject; pseudo_object_types.insert (this, SlotsObject); } RSlotsPseudoObject::~RSlotsPseudoObject () { RK_TRACE (OBJECTS); pseudo_object_types.remove (this); } QString RSlotsPseudoObject::getFullName () const { RK_TRACE (OBJECTS); return (".rk.get.slots (" + parent->getFullName () + ")"); } QString RSlotsPseudoObject::makeChildName (const QString &short_child_name, bool) const { RK_TRACE (OBJECTS); QString safe_name = short_child_name; if (irregularShortName (safe_name)) safe_name = rQuote (short_child_name); return (parent->getFullName () + "@" + safe_name); } RKNamespaceObject::RKNamespaceObject (REnvironmentObject* package, const QString name) : REnvironmentObject (package, name.isNull () ? "NAMESPACE" : name) { RK_TRACE (OBJECTS); type |= PseudoObject; pseudo_object_types.insert (this, NamespaceObject); if (name.isNull ()) namespace_name = package->packageName (); else namespace_name = name; } RKNamespaceObject::~RKNamespaceObject () { RK_TRACE (OBJECTS); pseudo_object_types.remove (this); } QString RKNamespaceObject::getFullName () const { RK_TRACE (OBJECTS); return ("asNamespace (" + rQuote (namespace_name) + ")"); } QString RKNamespaceObject::makeChildName (const QString& short_child_name, bool) const { RK_TRACE (OBJECTS); QString safe_name = short_child_name; if (irregularShortName (safe_name)) safe_name = rQuote (short_child_name); return (namespace_name + ":::" + safe_name); } QString RKNamespaceObject::makeChildBaseName (const QString& short_child_name) const { RK_TRACE (OBJECTS); // since namespaces reside at top level, this is the same as makeChildName() return (makeChildName (short_child_name, false)); } #include "robjectlist.h" #include "rkmodificationtracker.h" #include "../rkglobals.h" RKOrphanNamespacesObject::RKOrphanNamespacesObject (RObjectList* parent) : REnvironmentObject (parent, i18nc ("Note: 'namespace' is a technical term, should not be translated", "Orphan Namespaces")) { RK_TRACE (OBJECTS); type |= PseudoObject; pseudo_object_types.insert (this, OrphanNamespacesObject); } RKOrphanNamespacesObject::~RKOrphanNamespacesObject () { RK_TRACE (OBJECTS); pseudo_object_types.remove (this); } QString RKOrphanNamespacesObject::getFullName () const { RK_TRACE (OBJECTS); return ("loadedNamespaces ()"); } QString RKOrphanNamespacesObject::makeChildName (const QString& short_child_name, bool) const { RK_TRACE (OBJECTS); return ("asNamespace (" + rQuote (short_child_name) + ")"); } QString RKOrphanNamespacesObject::makeChildBaseName (const QString& short_child_name) const { RK_TRACE (OBJECTS); return (makeChildName (short_child_name, false)); } void RKOrphanNamespacesObject::updateFromR (RCommandChain* chain) { RK_TRACE (OBJECTS); Q_UNUSED (chain); RK_ASSERT (false); } void RKOrphanNamespacesObject::updateFromR (RCommandChain* chain, const QStringList& current_symbols) { RK_TRACE (OBJECTS); Q_UNUSED (chain); // becuase the namespace objects themselves are not updated, only added as incomplete objects // which former children are missing? for (int i = childmap.size () - 1; i >= 0; --i) { RObject *object = childmap[i]; if (!current_symbols.contains (object->getShortName ())) { RKGlobals::tracker ()->removeObject (object, 0, true); } } // which ones are new in the list? for (int i = 0; i < current_symbols.size (); ++i) { if (!findOrphanNamespace (current_symbols[i])) { RKNamespaceObject *nso = new RKNamespaceObject (this, current_symbols[i]); nso->type |= Incomplete; RKGlobals::tracker ()->beginAddObject (nso, this, i); childmap.insert (i, nso); RKGlobals::tracker ()->endAddObject (nso, this, i); } } RK_ASSERT (current_symbols.size () == childmap.size ()); } RKNamespaceObject* RKOrphanNamespacesObject::findOrphanNamespace (const QString& name) const { RK_TRACE (OBJECTS); for (int i = childmap.size () - 1; i >= 0; --i) { RObject *obj = childmap[i]; if (obj->getShortName () == name) { RK_ASSERT (obj->isPackageNamespace ()); return static_cast (obj); } } return 0; } QString RKOrphanNamespacesObject::getObjectDescription () const { RK_TRACE (OBJECTS); QString desc = RObject::getObjectDescription (); desc.append (QString ("

    %1

    ").arg (i18n ("This special object does not actually exist anywhere in R. It is used, here, to list namespaces which are loaded, but not attached to a package on the search path. These are typically 'imported' namespaces."))); return desc; } rkward-0.6.1/rkward/core/rfunctionobject.cpp0000644000175000017500000000525612124345410020510 0ustar thomasthomas/*************************************************************************** rfunctionobject - description ------------------- begin : Wed Apr 26 2006 copyright : (C) 2006 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rfunctionobject.h" #include "../rbackend/rdata.h" #include "rkmodificationtracker.h" #include "../rkglobals.h" #include "../debug.h" RFunctionObject::RFunctionObject (RObject *parent, const QString &name) : RObject (parent, name) { RK_TRACE (OBJECTS); type = Function; } RFunctionObject::~RFunctionObject () { RK_TRACE (OBJECTS); } QString RFunctionObject::printArgs () const { RK_TRACE (OBJECTS); QString ret; for (int i = 0; i < argnames.size (); ++i) { if (i) ret.append (", "); ret.append (argnames[i]); if (!argvalues[i].isEmpty ()) { ret.append ("="); ret.append (argvalues[i]); } } return ret; } bool RFunctionObject::updateStructure (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () >= StorageSizeBasicInfo); RK_ASSERT (new_data->getDataType () == RData::StructureVector); if (!RObject::updateStructure (new_data)) return false; if (updateArguments (new_data)) RKGlobals::tracker ()->objectMetaChanged (this); return true; } bool RFunctionObject::updateArguments (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () == (StoragePositionFunValues + 1)); RK_ASSERT (new_data->getDataType () == RData::StructureVector); RData::RDataStorage new_data_data = new_data->structureVector (); QStringList new_argnames = new_data_data.at (StoragePositionFunArgs)->stringVector (); QStringList new_argvalues = new_data_data.at (StoragePositionFunValues)->stringVector (); RK_ASSERT (new_argnames.size () == new_argvalues.size ()); if ((new_argnames != argnames) || (new_argvalues != argvalues)) { argnames = new_argnames; argvalues = new_argvalues; return true; } return false; } rkward-0.6.1/rkward/core/rcontainerobject.cpp0000644000175000017500000003204312124345410020637 0ustar thomasthomas/*************************************************************************** rcontainerobject - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rcontainerobject.h" #include #include "../rbackend/rinterface.h" #include "robjectlist.h" #include "rkpseudoobjects.h" #include "rkvariable.h" #include "rfunctionobject.h" #include "renvironmentobject.h" #include "rkrownames.h" #include "../rkglobals.h" #include "rkmodificationtracker.h" #include "../debug.h" RContainerObject::RContainerObject (RObject *parent, const QString &name) : RObject (parent, name) { RK_TRACE (OBJECTS); type = Container; } RContainerObject::~RContainerObject () { RK_TRACE (OBJECTS); // delete child objects. Note: the map itself is cleared/deleted automatically for (int i = childmap.size () - 1; i >= 0; --i) { delete childmap[i]; } } RObject *RContainerObject::updateChildStructure (RObject *child, RData *new_data, bool just_created) { RK_TRACE (OBJECTS); RK_ASSERT (child); RK_ASSERT (new_data); if (child->updateStructure (new_data)) { return child; } else { if (just_created) { RK_ASSERT (false); RK_DEBUG (OBJECTS, DL_ERROR, "%s cannot be represented", child->getFullName ().toLatin1 ().data ()); delete child; return 0; } else { int child_index = childmap.indexOf (child); RK_ASSERT (child_index >= 0); if (RKGlobals::tracker ()->removeObject (child, 0, true)) { RData *child_name_data = new_data->structureVector ().at (StoragePositionName); RK_ASSERT (child_name_data->getDataType () == RData::StringVector); RK_ASSERT (child_name_data->getDataLength () >= 1); QString child_name = child_name_data->stringVector ().at (0); return (createChildFromStructure (new_data, child_name, child_index)); } else { return child; // it was restored in it's old shape } } } } bool RContainerObject::updateStructure (RData *new_data) { RK_TRACE (OBJECTS); unsigned int data_length = new_data->getDataLength (); RK_ASSERT (data_length >= StorageSizeBasicInfo); RK_ASSERT (new_data->getDataType () == RData::StructureVector); if (!RObject::updateStructure (new_data)) return false; if (data_length > StorageSizeBasicInfo) { RK_ASSERT (data_length == (StorageSizeBasicInfo + 1)); RData *children_sub = new_data->structureVector ().at (StoragePositionChildren); RK_ASSERT (children_sub->getDataType () == RData::StructureVector); updateChildren (children_sub); updateRowNamesObject (); } else { RK_ASSERT (false); } return true; } RObject *RContainerObject::createChildFromStructure (RData *child_data, const QString &child_name, int position) { RK_TRACE (OBJECTS); RK_ASSERT (child_data->getDataType () == RData::StructureVector); RK_ASSERT (child_data->getDataLength () >= (StoragePositionType + 1)); // need to see at least the type at this point RData *type_data = child_data->structureVector ().at (StoragePositionType); RK_ASSERT (type_data->getDataType () == RData::IntVector); RK_ASSERT (type_data->getDataLength () == 1); int child_type = type_data->intVector ().at (0); RObject *child_object; if (child_type & RObject::Environment) { child_object = new REnvironmentObject (this, child_name); } else if (child_type & RObject::Container) { child_object = new RContainerObject (this, child_name); } else if (child_type & RObject::Function) { child_object = new RFunctionObject (this, child_name); } else if (child_type & RObject::Variable) { child_object = new RKVariable (this, child_name); } else { RK_DEBUG (OBJECTS, DL_WARNING, "Can't represent object '%s', type %d", child_name.toLatin1 ().data (), child_type); return 0; } RK_ASSERT (child_object); RKGlobals::tracker ()->lockUpdates (true); // object not yet added. prevent updates child_object = updateChildStructure (child_object, child_data, true); RKGlobals::tracker ()->lockUpdates (false); if (!child_object) { RK_ASSERT (false); return 0; } RKGlobals::tracker ()->beginAddObject (child_object, this, position); childmap.insert (position, child_object); RKGlobals::tracker ()->endAddObject (child_object, this, position); return child_object; } void RContainerObject::updateChildren (RData *new_children) { RK_TRACE (OBJECTS); RK_ASSERT (new_children->getDataType () == RData::StructureVector); unsigned int new_child_count = new_children->getDataLength (); // first find out, which children are now available, copy the old ones, create the new ones RObjectMap new_childmap, old_childmap; old_childmap = childmap; RData::RDataStorage nc_data = new_children->structureVector (); for (unsigned int i = 0; i < new_child_count; ++i) { RData *child_data = nc_data.at (i); RK_ASSERT (child_data->getDataType () == RData::StructureVector); RK_ASSERT (child_data->getDataLength () >= (StoragePositionName + 1)); RData *child_name_data = child_data->structureVector ().at (StoragePositionName); RK_ASSERT (child_name_data->getDataType () == RData::StringVector); RK_ASSERT (child_name_data->getDataLength () >= 1); QString child_name = child_name_data->stringVector ().at (0); RObject *child_object = 0; for (int j = 0; j < old_childmap.size (); ++j) { RObject *obj = old_childmap[j]; if (obj && (obj->getShortName () == child_name)) { child_object = obj; old_childmap[j] = 0; // in case of duplicate names, avoid finding the same child over and over again break; } } if (child_object) { child_object = updateChildStructure (child_object, child_data); } else { child_object = createChildFromStructure (child_data, child_name, i); } new_childmap.insert (i, child_object); } // now find out, which old ones are missing or changed position for (int i = 0; i < childmap.size (); ++i) { // do *not* cache the childmap.size ()! We may change it in the loop. RObject* old_child = childmap[i]; int new_pos = new_childmap.indexOf (old_child); if (new_pos < 0) { if (old_child->isPending ()) { new_childmap.insert (i, old_child); } else { RK_DEBUG (OBJECTS, DL_DEBUG, "child no longer present: %s.", old_child->getFullName ().toLatin1 ().data ()); if (RKGlobals::tracker ()->removeObject (old_child, 0, true)) --i; else (new_childmap.insert (i, old_child)); } } else { if (i != new_pos) { // this call is rather expensive, all in all, but fortunately called very rarely moveChild (old_child, i, new_pos); } } } RK_DO (RK_ASSERT (childmap == new_childmap), OBJECTS, DL_DEBUG); // this is an expensive assert, hence wrapping it inside RK_DO } void RContainerObject::moveChild (RObject* child, int from_index, int to_index) { RK_TRACE (OBJECTS); RK_ASSERT (from_index != to_index); RK_DEBUG (OBJECTS, DL_DEBUG, "Child position changed from %d to %d, %s", from_index, to_index, child->getFullName ().toLatin1 ().data ()); RK_ASSERT (childmap[from_index] == child); RK_ASSERT (from_index < childmap.size ()); RK_ASSERT (to_index < childmap.size ()); RKGlobals::tracker ()->moveObject (this, child, from_index, to_index); } int RContainerObject::numChildren () const { RK_TRACE (OBJECTS); return childmap.size (); } RObject *RContainerObject::findChildByName (const QString &name) const { RK_TRACE (OBJECTS); for (int i = childmap.size () - 1; i >= 0; --i) { RObject* obj = childmap[i]; if (obj->getShortName () == name) return (obj); } return 0; } RObject *RContainerObject::findChildByIndex (int position) const { // don't trace this if ((position >= 0) && (position < childmap.size ())) { return childmap[position]; } RK_ASSERT (false); return 0; } RKRowNames* RContainerObject::rowNames () { RK_TRACE (OBJECTS); if (!hasPseudoObject (RowNamesObject)) { setSpecialChildObject (new RKRowNames (this), RowNamesObject); updateRowNamesObject (); } return rownames_objects.value (this); } void RContainerObject::updateRowNamesObject () { RK_TRACE (OBJECTS); RKRowNames *rownames_object = 0; if (hasPseudoObject (RowNamesObject)) rownames_object = rownames_objects.value (this); if (!rownames_object) return; int childlen = 0; if (!childmap.isEmpty ()) childlen = childmap[0]->getLength (); rownames_object->extendToLength (childlen); // in case it is being edited rownames_object->dimensions[0] = childlen; if (rownames_object->isType (NeedDataUpdate) && (!isPending ())) { rownames_object->updateDataFromR (0); } } RObject *RContainerObject::findObjects (const QStringList &path, RObjectSearchMap *matches, const QString &op) { RK_TRACE (OBJECTS); fetchMoreIfNeeded (); if (op != "$") return RObject::findObjects (path, matches, op); if (path.length () > 1) { RObject* found = findChildByName (path.value (0)); if (found) return found->findObjects (path.mid (2), matches, path.value (1)); } else { if (!matches) return findChildByName (path.value (0)); QString partial = path.value (0); for (int i = 0; i < childmap.size (); ++i) { RObject* child = childmap[i]; if (partial.isEmpty () || child->getShortName ().startsWith (partial)) { QString base_name = child->getBaseName (); if (matches->contains (base_name) || irregularShortName (base_name)) { matches->insert (child->getFullName (), child); } else { matches->insert (base_name, child); } } } } return 0; } RObject *RContainerObject::createPendingChild (const QString &name, int position, bool container, bool data_frame) { RK_TRACE (OBJECTS); RK_ASSERT (isType (GlobalEnv) || isInGlobalEnv ()); #warning TODO validize name RObject *ret; if (container) { ret = new RContainerObject (this, name); if (data_frame) { ret->type |= DataFrame | List | Array | Matrix; } } else { ret = new RKVariable (this, name); } ret->type |= Pending; if ((position < 0) || (position > childmap.size ())) position = childmap.size (); RKGlobals::tracker ()->beginAddObject (ret, this, position); childmap.insert (position, ret); RKGlobals::tracker ()->endAddObject (ret, this, position); return ret; } void RContainerObject::renameChild (RObject *object, const QString &new_name) { RK_TRACE (OBJECTS); RK_ASSERT (findChildByName (object->getShortName ()) == object); if (isType (Environment) && (!isType (GlobalEnv))) { RK_ASSERT (false); return; } RCommand *command = new RCommand (renameChildCommand (object, new_name), RCommand::App | RCommand::Sync); RKGlobals::rInterface ()->issueCommand (command, 0); object->name = new_name; } void RContainerObject::removeChildNoDelete (RObject *object) { RK_TRACE (OBJECTS); if (!childmap.removeOne (object)) RK_ASSERT (false); } void RContainerObject::insertChild (RObject* child, int position) { RK_TRACE (OBJECTS); RK_ASSERT (child->parentObject () == this); if ((position < 0) || (position > childmap.size ())) position = childmap.size (); childmap.insert (position, child); } void RContainerObject::removeChild (RObject *object, bool removed_in_workspace) { RK_TRACE (OBJECTS); if (!removed_in_workspace) { if (isType (Environment) && (!isType (GlobalEnv))) { RK_ASSERT (false); return; } else if (isType (Workspace)) { RK_ASSERT (false); return; } RCommand *command = new RCommand (removeChildCommand (object), RCommand::App | RCommand::Sync | RCommand::ObjectListUpdate); RKGlobals::rInterface ()->issueCommand (command, 0); } removeChildNoDelete (object); delete object; } QString RContainerObject::removeChildCommand (RObject *object) const { RK_TRACE (OBJECTS); return (object->getFullName () + " <- NULL"); } QString RContainerObject::renameChildCommand (RObject *object, const QString &new_name) const { RK_TRACE (OBJECTS); return ("rk.rename.in.container (" + getFullName () + ", \"" + object->getShortName () + "\", \"" + new_name + "\")"); } QString RContainerObject::validizeName (const QString &child_name, bool unique) const { RK_TRACE (OBJECTS); RK_ASSERT (isType (GlobalEnv) || isInGlobalEnv ()); QString ret = child_name; if (ret.isEmpty ()) ret = "var"; else { ret = ret.replace (QRegExp ("[^a-zA-Z0-9]"), "."); ret = ret.replace (QRegExp ("^\\.*[0-9]+"), "."); } if (!unique) return ret; // NOTE: this is potentially a quadratic time algorithm with respect to number of children. // Its only called on user actions, though, and hopefully users will not keep all objects named "varX". int i=0; QString postfix; while (findChildByName (ret + postfix)) { postfix.setNum (++i); } return (ret + postfix); } rkward-0.6.1/rkward/core/rkrownames.h0000644000175000017500000000537512124345410017151 0ustar thomasthomas/*************************************************************************** rkrownames - description ------------------- begin : Tue Mar 21 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKROWNAMES_H #define RKROWNAMES_H #include "rkvariable.h" /** This class represents the row names of a data frame that is open for editing. This object is special in that it exists during editing, only. It is not represented in the RObjectList. */ class RKRowNames : public RKVariable { public: RKRowNames (RContainerObject *parent); ~RKRowNames (); QString getFullName () const; /** Reimplemented to return "row.names" */ QString getBaseName () const { return QString ("row.names"); }; /** Reimplemented to do nothing. There is no metadata on the rownames. */ void writeMetaData (RCommandChain *) {}; /** Reimplemented to always try to write data as numbers, if possible */ void writeData (int from_row, int to_row, RCommandChain *chain=0); /** Reimplemented to check, whether the values are all 1:n, custom, or invalid. */ void setText (int row, const QString &text); /** Reimplemented to also adjust the subsequent row names, if, and only if rownames are 1:n */ void removeRows (int from_row, int to_row); /** Reimplemented to give the new row and appropriate default name, and to adjust the subsequent row names, if, and only if rownames are 1:n */ void insertRows (int row, int count); protected: /** Reimplemented to disable duplicate checks during the setText() calls within */ void setCharacterFromR (int from_row, int to_row, const QStringList &data); /** Reimplemented to assume sequential row number on initialization */ void beginEdit (); private: /** @returns: true if the text was already unique, false, if it had to be adjusted */ bool makeUnique (QString *text, bool non_sequentials_only); int is_sequential_up_to_row; bool check_duplicates; bool isSequential () { return (is_sequential_up_to_row == (getLength () - 1)); }; }; #endif rkward-0.6.1/rkward/core/robject.cpp0000644000175000017500000005756612124345410016755 0ustar thomasthomas/*************************************************************************** robject - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "robject.h" #include #include #include "../rbackend/rinterface.h" #include "../rbackend/rkrbackendprotocol_shared.h" #include "../rkglobals.h" #include "robjectlist.h" #include "rcontainerobject.h" #include "rkpseudoobjects.h" #include "rkvariable.h" #include "renvironmentobject.h" #include "rfunctionobject.h" #include "rkmodificationtracker.h" #include "rkrownames.h" #include "../debug.h" namespace RObjectPrivate { QVector dim_null (1, 0); } // static QHash RObject::pseudo_object_types; QHash RObject::slots_objects; QHash RObject::namespace_objects; QHash RObject::rownames_objects; RObject::RObject (RObject *parent, const QString &name) { RK_TRACE (OBJECTS); RObject::parent = parent; RObject::name = name; type = 0; meta_map = 0; contained_objects = 0; dimensions = RObjectPrivate::dim_null; // safe initialization } RObject::~RObject () { RK_TRACE (OBJECTS); cancelOutstandingCommands (); if (hasPseudoObject (SlotsObject)) delete slots_objects.take (this); if (hasPseudoObject (NamespaceObject)) delete namespace_objects.take (this); if (hasPseudoObject (RowNamesObject)) delete rownames_objects.take (this); } bool RObject::irregularShortName (const QString &name) { // no trace static const QRegExp invalidChars ("[^a-zA-z0-9\\._]"); return (name.contains (invalidChars)); } QString RObject::getFullName () const { RK_TRACE (OBJECTS); return parent->makeChildName (RObject::name, type & Misplaced); } QString RObject::getBaseName () const { RK_TRACE (OBJECTS); return parent->makeChildBaseName (RObject::name); } QString RObject::getLabel () const { RK_TRACE (OBJECTS); return getMetaProperty ("label"); } RObject* RObject::findObjects (const QStringList &path, RObjectSearchMap *matches, const QString &op) { RK_TRACE (OBJECTS); // not a container if (op == "@") { if (slotsPseudoObject ()) return (slotsPseudoObject ()->findObjects (path, matches, "$")); } return 0; } QString RObject::getMetaProperty (const QString &id) const { RK_TRACE (OBJECTS); if (meta_map) return (meta_map->value (id)); return QString (); } QString RObject::getDescription () const { RK_TRACE (OBJECTS); if (meta_map) { QString label = meta_map->value ("label"); if (!label.isEmpty ()) return (getShortName () + " (" + label + ')'); } return getShortName ();; } QString RObject::getObjectDescription () const { RK_TRACE (OBJECTS); #define ESCS replace ('<', "<") QString ret; ret.append ("" + getShortName ().ESCS + ""); ret.append ("
    " + i18n ("Full location:") + " " + getFullName ().ESCS); QString lab = getLabel (); if (!lab.isEmpty ()) ret.append ("
    " + i18n ("Label:") + " " + lab.ESCS); ret.append ("
    " + i18n ("Type:") + " "); if (isType (Function)) { ret.append (i18n ("Function")); ret.append ("
    " + i18n ("Usage: ") + " " + getShortName ().ESCS + '(' + static_cast (this)->printArgs ().ESCS + ')'); } else if (isType (DataFrame)) { ret.append (i18n ("Data frame")); } else if (isType (Array)) { ret.append (i18n ("Array")); } else if (isType (Matrix)) { ret.append (i18n ("Matrix")); } else if (isType (List)) { ret.append (i18n ("List")); } else if (isType (Variable)) { ret.append (i18n ("Variable")); ret.append ("
    " + i18n ("Data Type:") + " " + typeToText (getDataType ())); } else if (isType (Environment)) { ret.append (i18n ("Environment")); } if (isType (Container | Variable)) { if (dimensions.size () == 1) { ret.append ("
    " + i18n ("Length: ") + " " + QString::number (dimensions[0])); } else if (dimensions.size () > 1) { ret.append ("
    " + i18n ("Dimensions: ") + " "); for (int i=0; i < dimensions.size (); ++i) { if (i) ret.append (", "); ret.append (QString::number (dimensions[i])); } } } ret.append ("
    " + i18n ("Class(es):") + " " + makeClassString (",").ESCS); return ret; } void RObject::setLabel (const QString &value, bool sync) { RK_TRACE (OBJECTS); setMetaProperty ("label", value, sync); } void RObject::setMetaProperty (const QString &id, const QString &value, bool sync) { RK_TRACE (OBJECTS); if (value.isEmpty ()) { if (meta_map && meta_map->contains (id)) meta_map->remove (id); else return; } else { if (!meta_map) meta_map = new MetaMap; else if (meta_map->value (id) == value) return; meta_map->insert (id, value); } if (sync) writeMetaData (0); RKGlobals::tracker ()->objectMetaChanged (this); } QString RObject::makeClassString (const QString &sep) const { RK_TRACE (OBJECTS); return (classnames.join (sep)); } bool RObject::inherits (const QString &class_name) const { RK_TRACE (OBJECTS); return (classnames.contains (class_name)); } QString RObject::makeChildName (const QString &short_child_name, bool) const { RK_TRACE (OBJECTS); return (getFullName () + "[[" + rQuote (short_child_name) + "]]"); } QString RObject::makeChildBaseName (const QString &short_child_name) const { RK_TRACE (OBJECTS); return (getBaseName () + "[[" + rQuote (short_child_name) + "]]"); } void RObject::writeMetaData (RCommandChain *chain) { RK_TRACE (OBJECTS); if (!meta_map) return; QString map_string; if (meta_map->isEmpty ()) { map_string.append ("NULL"); delete meta_map; // now that is is synced, delete it meta_map = 0; } else { for (MetaMap::const_iterator it = meta_map->constBegin (); it != meta_map->constEnd (); ++it) { if (!map_string.isEmpty ()) map_string.append (", "); map_string.append (rQuote (it.key ()) + '=' + rQuote (it.value ())); } map_string = "c (" + map_string + ')'; } RCommand *command = new RCommand (".rk.set.meta (" + getFullName () + ", " + map_string + ')', RCommand::App | RCommand::Sync); RKGlobals::rInterface ()->issueCommand (command, chain); } void RObject::updateFromR (RCommandChain *chain) { RK_TRACE (OBJECTS); RCommand *command; if (parentObject () == RObjectList::getGlobalEnv ()) { #warning TODO: find a generic solution // We handle objects directly in .GlobalEnv differently. That's to avoid forcing promises, when addressing the object directly. In the long run, .rk.get.structure should be reworked to simply not need the value-argument in any case. command = new RCommand (".rk.get.structure.global (" + rQuote (getShortName ()) + ')', RCommand::App | RCommand::Sync | RCommand::GetStructuredData, QString::null, this, ROBJECT_UDPATE_STRUCTURE_COMMAND); } else { RK_ASSERT (false); // non-catastrophic, but do we get here? command = new RCommand (".rk.get.structure (" + getFullName () + ", " + rQuote (getShortName ()) + ')', RCommand::App | RCommand::Sync | RCommand::GetStructuredData, QString::null, this, ROBJECT_UDPATE_STRUCTURE_COMMAND); } RKGlobals::rInterface ()->issueCommand (command, chain); type |= Updating; // will be cleared, implicitly, when the new structure gets set } void RObject::fetchMoreIfNeeded (int levels) { RK_TRACE (OBJECTS); if (isType (Updating)) return; if (isType (Incomplete)) { updateFromR (0); return; } RSlotsPseudoObject *spo = slotsPseudoObject (); if (spo) spo->fetchMoreIfNeeded (levels); // Note: We do NOT do the same for any namespaceEnvironment, deliberately if (levels <= 0) return; if (!isContainer ()) return; const RObjectMap children = static_cast (this)->childmap; foreach (RObject* child, children) { child->fetchMoreIfNeeded (levels - 1); } } void RObject::rCommandDone (RCommand *command) { RK_TRACE (OBJECTS); if (command->getFlags () == ROBJECT_UDPATE_STRUCTURE_COMMAND) { if (command->failed ()) { RK_DEBUG (OBJECTS, DL_INFO, "command failed while trying to update object '%s'. No longer present?", getShortName ().toLatin1 ().data ()); // this may happen, if the object has been removed in the workspace in between RKGlobals::tracker ()->removeObject (this, 0, true); return; } if (parent && parent->isContainer ()) static_cast (parent)->updateChildStructure (this, command); // this may result in a delete, so nothing after this! else updateStructure (command); // no (container) parent can happen for RObjectList and pseudo objects return; } else { RK_ASSERT (false); } } bool RObject::updateStructure (RData *new_data) { RK_TRACE (OBJECTS); if (new_data->getDataLength () == 0) { // can happen, if the object no longer exists return false; } RK_ASSERT (new_data->getDataLength () >= StorageSizeBasicInfo); RK_ASSERT (new_data->getDataType () == RData::StructureVector); if (!canAccommodateStructure (new_data)) return false; if (isPending ()) { type -= Pending; return true; // Do not update any info for pending objects } bool properties_change = false; RData::RDataStorage new_data_data = new_data->structureVector (); properties_change = updateName (new_data_data.at (StoragePositionName)); properties_change = updateType (new_data_data.at (StoragePositionType)); properties_change = updateClasses (new_data_data.at (StoragePositionClass)); properties_change = updateMeta (new_data_data.at (StoragePositionMeta)); properties_change = updateDimensions (new_data_data.at (StoragePositionDims)); properties_change = updateSlots (new_data_data.at (StoragePositionSlots)); if (properties_change) RKGlobals::tracker ()->objectMetaChanged (this); if (type & NeedDataUpdate) updateDataFromR (0); if (type & Incomplete) { // If the (new!) type is "Incomplete", it means, the structure getter simply stopped at this point. // In case we already have child info, we should update it (TODO: perhaps only, if anything is listening for child objects?) if (numChildrenForObjectModel () && (!isType (Updating))) updateFromR (0); return true; } return true; } //virtual void RObject::updateDataFromR (RCommandChain *) { RK_TRACE (OBJECTS); type -= (type & NeedDataUpdate); } void RObject::markDataDirty () { RK_TRACE (OBJECTS); type |= NeedDataUpdate; if (isContainer ()) { RContainerObject* this_container = static_cast (this); RObjectMap children = this_container->childmap; for (int i = children.size () - 1; i >= 0; --i) { children[i]->markDataDirty (); } if (this_container->hasPseudoObject (RowNamesObject)) this_container->rowNames ()->markDataDirty (); } } bool RObject::canAccommodateStructure (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () >= StorageSizeBasicInfo); RK_ASSERT (new_data->getDataType () == RData::StructureVector); RData::RDataStorage new_data_data = new_data->structureVector (); if (!isValidName (new_data_data.at (StoragePositionName))) return false; if (!isValidType (new_data_data.at (StoragePositionType))) return false; return true; } bool RObject::isValidName (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () == 1); RK_ASSERT (new_data->getDataType () == RData::StringVector); QString new_name = new_data->stringVector ().at (0); if (name != new_name) { RK_ASSERT (false); name = new_name; return false; } return true; } bool RObject::updateName (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () == 1); RK_ASSERT (new_data->getDataType () == RData::StringVector); bool changed = false; QString new_name = new_data->stringVector ().at (0); if (name != new_name) { changed = true; RK_ASSERT (false); name = new_name; } return changed; } bool RObject::isValidType (RData *new_data) const { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () == 1); RK_ASSERT (new_data->getDataType () == RData::IntVector); int new_type = new_data->intVector ().at (0); if (!isMatchingType (type, new_type)) return false; return true; } bool RObject::updateType (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () == 1); RK_ASSERT (new_data->getDataType () == RData::IntVector); bool changed = false; int new_type = new_data->intVector ().at (0); if (type & PseudoObject) new_type |= PseudoObject; if (type & Misplaced) new_type |= Misplaced; if (type & Pending) new_type |= Pending; // NOTE: why don't we just clear the pending flag, here? Well, we don't want to generate a change notification for this. TODO: rethink the logic, and maybe use an appropriate mask if (type & NeedDataUpdate) new_type |= NeedDataUpdate; if (type != new_type) { changed = true; type = new_type; } return changed; } bool RObject::updateClasses (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () >= 1); // or can there be classless objects in R? RK_ASSERT (new_data->getDataType () == RData::StringVector); bool change = false; QStringList new_classes = new_data->stringVector (); if (new_classes != classnames) { change = true; classnames = new_classes; } return change; } bool RObject::updateMeta (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataType () == RData::StringVector); QStringList data= new_data->stringVector (); int len = data.size (); bool change = false; if (len) { if (!meta_map) meta_map = new MetaMap; else meta_map->clear (); RK_ASSERT (!(len % 2)); int cut = len/2; for (int i=0; i < cut; ++i) { meta_map->insert (data.at (i), data.at (i+cut)); } // TODO: only signal change, if there really was a change! change = true; } else { // no meta data received if (meta_map) { delete meta_map; meta_map = 0; change = true; } } return change; } bool RObject::updateDimensions (RData *new_data) { RK_TRACE (OBJECTS); RK_ASSERT (new_data->getDataLength () >= 1); RK_ASSERT (new_data->getDataType () == RData::IntVector); QVector new_dimensions = new_data->intVector (); if (new_dimensions != dimensions) { if (new_dimensions.isEmpty ()) { if (dimensions != RObjectPrivate::dim_null) { dimensions = RObjectPrivate::dim_null; return (true); } } else { #warning TODO: ugly hack. Should be moved to RKVariable, somehow. if (type & Variable) static_cast (this)->extendToLength (new_dimensions[0]); dimensions = new_dimensions; return (true); } } return (false); } bool RObject::updateSlots (RData *new_data) { RK_TRACE (OBJECTS); if (new_data->getDataLength ()) { RK_ASSERT (new_data->getDataType () == RData::StructureVector); bool added = false; RSlotsPseudoObject *spo = slotsPseudoObject (); if (!spo) { spo = new RSlotsPseudoObject (this); added = true; RKGlobals::tracker ()->lockUpdates (true); } bool ret = spo->updateStructure (new_data->structureVector ().at (0)); if (added) { RKGlobals::tracker ()->lockUpdates (false); setSpecialChildObject (spo, SlotsObject); } return ret; } else if (slotsPseudoObject ()) { setSpecialChildObject (0, SlotsObject); } return false; } int RObject::getObjectModelIndexOf (RObject *child) const { RK_TRACE (OBJECTS); int offset = 0; if (isContainer ()) { int pos = static_cast (this)->childmap.indexOf (child); if (pos >= 0) return pos + offset; offset += static_cast (this)->childmap.size (); } if (hasPseudoObject (SlotsObject)) { if (child == slotsPseudoObject ()) return offset; offset += 1; } if (hasPseudoObject (NamespaceObject)) { if (child == namespaceEnvironment ()) return offset; offset += 1; } if (isType (Workspace)) { if (child == static_cast (this)->orphanNamespacesObject ()) return offset; offset += 1; } return -1; } int RObject::numChildrenForObjectModel () const { RK_TRACE (OBJECTS); int ret = isContainer () ? static_cast(this)->numChildren () : 0; if (hasPseudoObject (SlotsObject)) ret += 1; if (hasPseudoObject (NamespaceObject)) ret += 1; if (isType (Workspace)) ret += 1; // for the RKOrphanNamespacesObject return ret; } RObject *RObject::findChildByObjectModelIndex (int index) const { if (isContainer ()) { const RContainerObject *container = static_cast(this); if (index < container->numChildren ()) return container->findChildByIndex (index); index -= container->numChildren (); } if (hasPseudoObject (SlotsObject)) { if (index == 0) return slotsPseudoObject (); --index; } if (hasPseudoObject (NamespaceObject)) { if (index == 0) return namespaceEnvironment (); --index; } if (isType (Workspace)) { if (index == 0) return static_cast (this)->orphanNamespacesObject (); --index; } return 0; } RKEditor *RObject::editor () const { return (RKGlobals::tracker ()->objectEditor (this)); } void RObject::rename (const QString &new_short_name) { RK_TRACE (OBJECTS); RK_ASSERT (canRename ()); static_cast (parent)->renameChild (this, new_short_name); } void RObject::setSpecialChildObject (RObject* special, PseudoObjectType special_type) { RK_TRACE (OBJECTS); RObject *old_special = 0; if (special_type == SlotsObject) old_special = slotsPseudoObject (); else if (special_type == NamespaceObject) old_special = namespaceEnvironment (); else if (special_type == RowNamesObject) old_special = rownames_objects.value (this); else RK_ASSERT (false); if (special == old_special) return; if (old_special) { RKGlobals::tracker ()->removeObject (old_special, 0, true); RK_ASSERT (!hasPseudoObject (special_type)); // should have been removed in the above statement via RObject::remove() } if (special) { if (special_type == SlotsObject) slots_objects.insert (this, static_cast (special)); else if (special_type == NamespaceObject) namespace_objects.insert (this, static_cast (special)); else if (special_type == RowNamesObject) rownames_objects.insert (this, static_cast (special)); contained_objects |= special_type; if (special->isType (NonVisibleObject)) return; int index = getObjectModelIndexOf (special); // HACK: Newly added object must not be included in the index before beginAddObject (but must be included above for getObjectModelIncexOf() to work) contained_objects -= special_type; RKGlobals::tracker ()->beginAddObject (special, this, index); contained_objects |= special_type; RKGlobals::tracker ()->endAddObject (special, this, index); } } void RObject::remove (bool removed_in_workspace) { RK_TRACE (OBJECTS); RK_ASSERT (canRemove () || removed_in_workspace); if (isPseudoObject ()) { RK_ASSERT (removed_in_workspace); PseudoObjectType type = getPseudoObjectType (); if (parent->hasPseudoObject (type)) { // not always true for NamespaceObjects, which the RKOrphanNamespacesObject keeps as regular children! if (type == SlotsObject) slots_objects.remove (parent); else if (type == NamespaceObject) namespace_objects.remove (parent); else if (type == RowNamesObject) rownames_objects.remove (parent); parent->contained_objects -= type; delete this; return; } } static_cast (parent)->removeChild (this, removed_in_workspace); } //static QString RObject::typeToText (RDataType var_type) { if (var_type == DataUnknown) { return "Unknown"; } else if (var_type == DataNumeric) { return "Number"; } else if (var_type == DataCharacter) { return "String"; } else if (var_type == DataFactor) { return "Factor"; } else if (var_type == DataLogical) { return "Logical"; } else { RK_ASSERT (false); return "Invalid"; } } //static RObject::RDataType RObject::textToType (const QString &text) { if (text == "Unknown") { return DataUnknown; } else if (text == "Number") { return DataNumeric; } else if (text == "String") { return DataCharacter; } else if (text == "Factor") { return DataFactor; } else if (text == "Logical") { return DataLogical; } else { RK_ASSERT (false); return DataUnknown; } } //static QString RObject::rQuote (const QString &string) { return (RKRSharedFunctionality::quote (string)); } //static QStringList RObject::parseObjectPath (const QString &path) { RK_TRACE (OBJECTS); QStringList ret; QString fragment; int end = path.length (); QChar quote_char; bool escaped = false; bool seek_bracket_end = false; for (int i = 0; i < end; ++i) { QChar c = path.at (i); if (quote_char.isNull ()) { if (c == '\'' || c == '\"' || c == '`') { quote_char = c; } else { if (!seek_bracket_end) { if (c == '$') { ret.append (fragment); ret.append ("$"); fragment.clear (); } else if (c == '[') { ret.append (fragment); ret.append ("$"); fragment.clear (); if ((i+1 < end) && (path.at (i+1) == '[')) ++i; seek_bracket_end = true; } else if (c == ':') { ret.append (fragment); if ((i+1 < end) && (path.at (i+1) == ':')) ++i; if ((i+1 < end) && (path.at (i+1) == ':')) { ++i; ret.append (":::"); } else ret.append ("::"); fragment.clear (); } else if (c == '@') { ret.append (fragment); ret.append ("@"); fragment.clear (); } else { fragment.append (c); } } else { if (c == ']') { if ((i+1 < end) && (path.at (i+1) == ']')) ++i; seek_bracket_end = false; continue; } else { fragment.append (c); } } } } else { // inside a quote if (c == '\\') escaped = !escaped; else { if (escaped) { if (c == 't') fragment.append ('\t'); else if (c == 'n') fragment.append ('\n'); else fragment.append ('\\' + c); } else { if (c == quote_char) { quote_char = QChar (); } else { fragment.append (c); } } } } } if (!fragment.isEmpty ()) ret.append (fragment); RK_DEBUG (OBJECTS, DL_DEBUG, "parsed object path %s into %s", qPrintable (path), qPrintable (ret.join ("-"))); return ret; } //virtual void RObject::beginEdit () { RK_ASSERT (false); } //virtual void RObject::endEdit () { RK_ASSERT (false); } bool RObject::canEdit () const { RK_TRACE (OBJECTS); // TODO: find out, if binding is locked: // if (isLocked ()) return false; return (isInGlobalEnv ()); } bool RObject::canRead () const { RK_TRACE (OBJECTS); return (this != RObjectList::getObjectList ()); } bool RObject::canRename () const { RK_TRACE (OBJECTS); if (isPseudoObject ()) return false; if (parent && parent->isSlotsPseudoObject ()) return false; // TODO: find out, if binding is locked: // if (isLocked ()) return false; return (isInGlobalEnv ()); } bool RObject::canRemove () const { RK_TRACE (OBJECTS); if (isPseudoObject ()) return false; if (parent && parent->isSlotsPseudoObject ()) return false; // TODO: find out, if binding is locked: // if (isLocked ()) return false; return (isInGlobalEnv ()); } bool RObject::isInGlobalEnv () const { RK_TRACE (OBJECTS); // could be made recursive instead, but likely it's faster like this RObject *o = const_cast (this); // it's ok, all we need to do is find the toplevel parent while (o && (!o->isType (ToplevelEnv))) { o = o->parent; } if (!o) { RK_ASSERT (this == RObjectList::getObjectList ()); return false; } if (o->isType (GlobalEnv)) { if (o != this) return true; // the GlobalEnv is not inside the GlobalEnv! } return false; } rkward-0.6.1/rkward/core/rkvariable.h0000644000175000017500000002501612124345410017075 0ustar thomasthomas/*************************************************************************** rkvariable - description ------------------- begin : Thu Aug 12 2004 copyright : (C) 2004, 2007, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKVARIABLE_H #define RKVARIABLE_H #include #include #include "robject.h" class RContainerObject; /** Abstract representation of a variable. A variable in this diction is an RObject, which is a vector of data. It may internally be a factor or a vector. RKVariables are so far the only type of object that is really editable (data.frames are just a bundle of RKVariables). Therefore, for most practical purposes, the RKVariable represents a column in a table. TODO: actually, for now, the data is always given to the backend as strings. Change that! TODO: there should be "chunks" of column-data. This should be done at the level of rows, i.e. across columns. After all, if a row gets added/removed in one column, all other columns of the same table will also be affected. TODO: which functions should do syncing by themselves, which should not? Or should all set... ()-functions have an extra parameter for this? @author Thomas Friedrichsmeier */ class RKVariable : public RObject { public: /** constructs a new RKVariable as a child of the given parent and with the given name. Do not call directly, but let RContainerObject / RObjectList handle creation of new variables. */ RKVariable (RContainerObject *parent, const QString &name); ~RKVariable (); /** set the VarType. If sync, the change will be communicated to the backend immediately. See RObject::RDataType */ void setVarType (RObject::RDataType, bool sync=true); /** reimplemented from RObject to also store value labels/factor levels (and in the future probably futher info) */ void writeMetaData (RCommandChain *chain); friend class RContainerObject; void rCommandDone (RCommand *command); public: ////////////// BEGIN: data handling //////////////////////// /** the Status enum is used for both keeping track of the entire row and inidvidual cells. For single cells the meaning should be obvious. The entire row is set to Unused, if _no_ cell in the row is used, Valid if _all_ cells in the row are valid and Invalid if _one or more_ cells in the row are invalid, Unknown if _all_ cells in the row are unknown/updating. */ enum Status { ValueUnused=0, ValueValid=1, ValueInvalid=2, ValueUnknown=4 }; /** sets whether changed data should be synced immediately or not. Set this to off for large paste operations. Rember to call setSyncing (true) and syncDataToR () after the paste is complete */ void lockSyncing (bool lock); /** syncs pending data changes to the backend */ void syncDataToR (); /** reimplemented from RObject */ void updateDataFromR (RCommandChain *chain); bool hasInvalidFields () const; /** get the value at the given row in text-form - regardless of the storage mode. @param pretty: get the text in pretty form, e.g. rounding numbers to a certain number of digits, replacing numeric values with value labels if available, etc. Formatting is done according to the meta-information stored in the RObject and global user preferences */ QString getText (int row, bool pretty=false) const; /** get the value at the given row in text-form suitable for submission to R. I.e. strings are quoted, numbers are not, empty values are returned as NA */ QString getRText (int row) const; /** set the value at the given row in text-form. Will try to convert the given string to the internal storage format if possible. */ virtual void setText (int row, const QString &text); /** get a copy of the text values of rows from from_index to to_index. TODO: This could be made, but currently is not, more efficient than calling getText in a loop. */ QString *getCharacter (int from_row, int to_row) const; /** returns the current status of the given cell */ Status cellStatus (int row) const; /** entirely remove the given rows (i.e. the cells). Will also take care of updating the state (are there any invalid cells left?). Does not sync with the backend for technical reasons! You have to remove the row in the backend explicitly. */ virtual void removeRows (int from_row, int to_row); /** inserts count rows (with empty values) just above the given index. Does not sync with the backend for technical reasons! You have to insert the row in the backend explicitly. */ virtual void insertRows (int row, int count); /** Tells the object it has (data) length len. Usually this will only be called directly after creating a new object */ void setLength (int len); /** returns (a copy of) the map of value labels for this variable or and empty map, if no labels/levels are assigned. */ ValueLabels getValueLabels () const; /** assigns a new map of labels. Also takes care of syncing with the backend. */ void setValueLabels (const ValueLabels& labels); /** re-check a factor variable after editing its value labels, and sync labels to R */ void updateValueLabels (); /** get value labels as string (for display) */ QString getValueLabelString () const; /** set value labels from string (for paste operations) */ void setValueLabelString (const QString &string); /** Restores the variable including data and meta-data */ void restore (RCommandChain *chain=0); /** Stores formatting options set for this variable */ struct FormattingOptions { enum Alignment { AlignDefault=0, AlignLeft=1, AlignRight=2 }; enum Precision { PrecisionDefault=0, PrecisionRequired=1, PrecisionFixed=2 }; Alignment alignment; Precision precision_mode; int precision; }; /** assigns new formatting options. Ownership of the FormattingOptions -struct is transferred to the variable. Use setFormatting (0) to remove all options */ void setFormattingOptions (const FormattingOptions new_options); /** get the formatting options for this variable */ FormattingOptions getFormattingOptions () const; /** get formatting options as a string (for display) TODO: redundant -> remove */ QString getFormattingOptionsString () const; /** parse formatting options from the given string TODO: redundant -> remove */ void setFormattingOptionsString (const QString &string); /** This enum describes the alignment of text inside a table cell */ enum CellAlign { AlignCellLeft=0, AlignCellRight=1 }; /** returns alignment to use for this variable */ CellAlign getAlignment () const; /** creates/parses formatting options from the stored meta-property string. See also: getFormattingOptions () */ static FormattingOptions parseFormattingOptionsString (const QString &string); /** inverse of parseFormattingOptionsString () */ static QString formattingOptionsToString (const FormattingOptions& options); /** changes the allocated storage to contain a least length elements. More data may be allocated than acutally needed. This function only ever does upsizing. */ void extendToLength (int length); protected: /** Discards pending unsynced changes. */ void discardUnsyncedChanges (); /** like setNumeric, but sets chars. If internalStorage () is numeric, attempts to convert the given strings to numbers. I.e. the function behaves essentially like setText (), but operates on a range of cells. Code may assume that all data comes directly from R, is entirely valid in R. */ virtual void setCharacterFromR (int from_row, int to_row, const QStringList &data); /** set numeric values in the given range. Assumes you provide enough values for the range. If internalStorage is String, all values will be converted to strings, so you should use this function only, if you know you are dealing with a numeric object. Code may assume that all data comes directly from R, is entirely valid in R. */ void setNumericFromR (int from_row, int to_row, const QVector &data); /** reimplemented from RObject to change the internal data storage mode, if the var is being edited */ bool updateType (RData *new_data); /** Extended from RObject::EditData to actually contain data. */ struct RKVarEditData { QStringList cell_strings; QList cell_doubles; enum CellState { Unknown=0, Invalid=1, NA=2, Valid=4, UnsyncedInvalidState=8 }; QList cell_states; /// see setSyncing int sync_locks; /// stores changes if syncing is not immediate ChangeSet changes; /// stores whether there were preivously invalid cells. If so, and there are no longer, now, we may change the mode in the backend. bool previously_valid; /** the value-labels or factor levels assigned to this variable. 0 if no values/levels given. TODO: Should this be made a regular (non-pointer) member, or is the saved mem really worth the trouble? */ ValueLabels *value_labels; /// the formatting options set for this var (see FormattingOptions) */ FormattingOptions formatting_options; /// storage for invalid fields QHash invalid_fields; /// how many models need our data? int num_listeners; }; RKVarEditData* data; /** reimplemented from RObject */ void beginEdit (); /** reimplemented from RObject */ void endEdit (); /** takes care of syncing the given range of cells */ void cellsChanged (int from_row, int to_row); /** writes the given range of cells to the backend (regardless of whether syncing should be immediate) */ virtual void writeData (int from_row, int to_row, RCommandChain *chain=0); void writeInvalidFields (QList rows, RCommandChain *chain=0); /** writes the values labels to the backend */ void writeValueLabels (RCommandChain *chain) const; /** tries to match a value-label to the value in the given cell. Returns the label, or - if there is no label - the original value in textual representation */ QString getLabeled (int row) const; /** allocate edit data (cells initialized to NAs) */ void allocateEditData (); /** discard edit data */ void discardEditData (); /////////////////// END: data-handling ////////////////////// }; #endif rkward-0.6.1/rkward/core/rkmodificationtracker.h0000644000175000017500000002210012124345410021320 0ustar thomasthomas/*************************************************************************** rkmodificationtracker - description ------------------- begin : Tue Aug 31 2004 copyright : (C) 2004, 2007, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKMODIFICATIONTRACKER_H #define RKMODIFICATIONTRACKER_H #include #include #include #include #include "robject.h" class RKEditor; class RObject; class RKModificationTracker; /** Base class for classes that need to know when certain objects have been changed in some way. */ class RObjectListener { public: enum NotificationType { ObjectRemoved=1, ChildAdded=2, ChildMoved=4, /** < a child has changed its position (index) *within* the parent */ MetaChanged=8, DataChanged=16 }; enum ListenerType { DataModel, /** < listener is an RKVarEditModel */ ObjectView, Other }; ListenerType listenerType () const { return type; }; bool wantsNotificationType (NotificationType type) const { return (notifications & type); }; protected: RObjectListener (ListenerType type); virtual ~RObjectListener (); friend class RKModificationTracker; /** reimplement this, if you are listening for an object with notification type ObjectRemoved. The default implementation does nothing and raises an assert. This gets sent *before* the child is actually removed, so you can safely query it for information in this call, but directly after the pointer will become invalid. Make sure to call stopListenForObject(), when you receive this notification. */ virtual void objectRemoved (RObject* removed); /** reimplement this, if you are listening for an object with notification type ChildAdded. The default implementation does nothing and raises an assert. This notification is sent *after* the child was added. */ virtual void childAdded (int index, RObject* parent); /** reimplement this, if you are listening for an object with notification type ChildMoved. The default implementation does nothing and raises an assert. This notification is sent *after* the child was moved, so it is now at the new_index. */ virtual void childMoved (int old_index, int new_index, RObject* parent); /** reimplement this, if you are listening for an object with notification type MetaChanged. The default implementation does nothing and raises an assert. This notification is sent *after* the object has changed. */ virtual void objectMetaChanged (RObject* changed); /** reimplement this, if you are listening for an object with notification type DataChanged. The default implementation does nothing and raises an assert. This notification is sent *after* the object has changed. */ virtual void objectDataChanged (RObject* object, const RObject::ChangeSet *changes); void listenForObject (RObject* object); void stopListenForObject (RObject* object); void addNotificationType (NotificationType type) { notifications |= type; }; private: ListenerType type; int notifications; int num_watched_objects; }; /** An item model for the RObjectList . Technically this is the base class for RKModificationTracker. The two could be merged, fully, but this way, it's a little easier to see what belongs where, logically. */ class RKObjectListModel : public QAbstractItemModel { public: enum Column { NameColumn=0, LabelColumn, TypeColumn, ClassColumn, ColumnCount = ClassColumn + 1 }; protected: RKObjectListModel (QObject *parent); virtual ~RKObjectListModel (); public: /** implements QAbstractItemModel::index() */ QModelIndex index (int row, int column, const QModelIndex& parent = QModelIndex ()) const; /** implements QAbstractItemModel::parent() */ QModelIndex parent (const QModelIndex& index) const; /** implements QAbstractItemModel::rowCount() */ int rowCount (const QModelIndex& parent = QModelIndex ()) const; /** implements QAbstractItemModel::columnCount(). This is identical for all items */ int columnCount (const QModelIndex& parent = QModelIndex ()) const; /** implements QAbstractItemModel::data() */ QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) const; /** reimplemented from QAbstractItemModel::headerData() to provide column names */ QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; /** reimplemented from QAbstractItemModel::canFetchMore() */ bool canFetchMore (const QModelIndex &parent) const; /** reimplemented from QAbstractItemModel::fetchMore() */ void fetchMore (const QModelIndex &parent); /** reimplemented from QAbstractItemModel::hasChildren() */ bool hasChildren (const QModelIndex &parent = QModelIndex ()) const; /** convenience function to create an index for a particular object */ QModelIndex indexFor (RObject *object) const; }; /** This class takes care of propagating object-modifications to all editors/variable-browsers etc. that need to know about them. For instance, if an object was removed in the R-workspace, the RObjectList will notify the RKModificationTracker. The modification tracker will then find out, whether there are editor(s) currently editing the removed object. If so, it will prompt the user what to do. Or, if an object is renamed in an editor, the RKModificationTracker will find out, whether the object is opened in further editors (not possible, yet) and tell those to update accordingly. It will further emit signals so the RObjectBrowser and RKVarselector(s) can update their object-lists. @author Thomas Friedrichsmeier */ class RKModificationTracker : public RKObjectListModel { public: RKModificationTracker (QObject *parent); ~RKModificationTracker (); /** the given object should be removed (either it was removed in the R-workspace, or the user requests removal of the object in an editor or the RObjectList). First, if the object is being edited somewhere, the user will get a chance to object to the removal. If the user does not object, the RKModificationTracker will remove the object and notify all interested listeners that the object really was removed. When calling from the RObjectList, you will likely set removed_in_workspace to true, to signal that the object-data is already gone in the workspace. */ bool removeObject (RObject *object, RKEditor *editor=0, bool removed_in_workspace=false); /** essentially like the above function, but requests a renaming of the object. Will also take care of finding out, whether the name is valid and promting for a different name otherwise. */ void renameObject (RObject *object, const QString &new_name); /** the object's meta data was modified. Tells all editors and lists containing the object to update accordingly. */ void objectMetaChanged (RObject *object); /** the object's data was modified. Tells all editors and lists containing the object to update accordingly. The ChangeSet given tells which parts of the data have to be updated. The ChangeSet will get deleted by the RKModificationTracker, when done. */ void objectDataChanged (RObject *object, RObject::ChangeSet *changes); /** recursive! */ void lockUpdates (bool lock); /** returns (the first) editor that is currently active for this object, or 0, if there is no editor */ RKEditor* objectEditor (const RObject* object); private: int updates_locked; /** relay change notifications to connected listeners. This is not pretty, since the arguments change their meanings depending on the type of notification, but for now this is ok */ void sendListenerNotification (RObjectListener::NotificationType type, RObject* o, int index, int new_index, RObject::ChangeSet* changes); friend class RObjectListener; void addObjectListener (RObject* object, RObjectListener* listener); void removeObjectListener (RObject* object, RObjectListener* listener); QMultiHash listeners; friend class RContainerObject; friend class REnvironmentObject; friend class RKOrphanNamespacesObject; friend class RObject; friend class RObjectList; /** essentially like the above function(s). All objects listening for child additions on the parent will be notified */ void beginAddObject (RObject *object, RObject* parent, int position); void endAddObject (RObject *object, RObject* parent, int position); /** essentially like the above function(s). All objects listening for child position changed on the parent will be notified */ void moveObject (RContainerObject *parent, RObject* child, int old_index, int new_index); }; #endif rkward-0.6.1/rkward/core/robjectlist.h0000644000175000017500000001301212124345410017270 0ustar thomasthomas/*************************************************************************** robjectlist - description ------------------- begin : Wed Aug 18 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef ROBJECTLIST_H #define ROBJECTLIST_H #include #include #include #include #include "rcontainerobject.h" class QTimer; class RCommand; class RCommandChain; class RKEditor; class REnvironmentObject; class RKProgressControl; class RKOrphanNamespacesObject; /** This class is responsible for keeping and updating a list of objects in the R-workspace. Acutally it kind of represents the R-workspace, including methods to save and load the workspace. It acts as the "document". @author Thomas Friedrichsmeier */ class RObjectList : public QObject, public RContainerObject { Q_OBJECT public: RObjectList (); ~RObjectList (); void updateFromR (RCommandChain *chain); /** like updateFromR, but only adjusts to new / missing environments, but does not update the .GlobalEnv. Designed to be used from the backend, when packages were loaded/unloaded . */ void updateFromR (RCommandChain *chain, const QStringList ¤t_searchpath, const QStringList ¤t_namespaces); QString getFullName () const { return QString (); }; QString getBaseName () const { return QString (); }; QString makeChildName (const QString &short_child_name, bool) const { return short_child_name; }; /** reimplemented from RContainerObject: do nothing. The object-list has no meta data. */ void writeMetaData (RCommandChain *) {}; REnvironmentObject* findPackage (const QString &namespacename) const; static RObjectList *getObjectList () { return object_list; }; static REnvironmentObject *getGlobalEnv (); /** detach the given list of packages (if the packages are loaded, and safe to remove) @returns a list of error messages (usually empty) */ QStringList detachPackages (const QStringList &packages, RCommandChain *chain = 0, RKProgressControl *control = 0); /** A pseudo object containing as children all loaded namespaces which do not belong to a package on the search path */ RKOrphanNamespacesObject* orphanNamespacesObject () const { return orphan_namespaces; }; public slots: void timeout (); signals: /// emitted when the list of objects is about to be updated // TODO: remove me void updateStarted (); /// emitted when the list of objects has been updated // TODO: remove me void updateComplete (); protected: /** reimplemented from RContainerObject to search the environments in search order */ RObject *findObjects (const QStringList &path, RObjectSearchMap *matches, const QString &op); /// reimplemented from RContainerObject to call "remove (objectname)" instead of "objectname <- NULL" QString removeChildCommand (RObject *object) const; /// reimplemented from RContainerObject to call "remove (objectname)" instead of "objectname <- NULL" QString renameChildCommand (RObject *object, const QString &new_name) const; /// reimplemented from RContainerObject to emit a change signal void objectsChanged (); bool updateStructure (RData *new_data); void rCommandDone (RCommand *command); void updateEnvironments (const QStringList &env_names, bool force_globalenv_update); void updateNamespaces (const QStringList namespace_names); private: friend class RKLoadAgent; friend class RKSaveAgent; QTimer *update_timer; RCommandChain *update_chain; RKOrphanNamespacesObject *orphan_namespaces; REnvironmentObject *createTopLevelEnvironment (const QString &name); static RObjectList *object_list; }; /** \page RepresentationOfRObjectsInRKWard Representation of R objects in RKWard \brief How objects in R space are represented in RKWard Due to primarily two reasons, RKWard needs to keep it's own list of objects in the R workspace. The first, and most important reason is threading: R objects might be modified or even removed in the R backend, while the GUI thread is trying to access them. Since we have no control over what's going on inside R, this cannot be solved with a simple mutex. So rather, we copy a representation into memory accessed by the GUI thread only (in the future, maybe the backend thread will get access to this representation for more efficient updating, but still a representation separate from that kept in R itself is needed). The second reason is that R and Qt includes clash, and we cannot easily use R SEXPs directly in Qt code. RKWard then uses an own specialized description of R objects. This is slightly more abstracted than objects in R, but stores the most important information about each object, and of course the hierarchical organization of objects. TODO: write me! @see RObject @see RKVariable @see RContainerObject @see RObjectList @see RKModificationTracker */ #endif rkward-0.6.1/rkward/core/robject.h0000644000175000017500000004222212124345410016401 0ustar thomasthomas/*************************************************************************** robject - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef ROBJECT_H #define ROBJECT_H #include #include #include #include #include "../rbackend/rcommandreceiver.h" class RSlotsPseudoObject; class REnvironmentObject; class RContainerObject; class RKRowNames; class RCommandChain; class RKEditor; class RData; #define ROBJECT_UDPATE_STRUCTURE_COMMAND 1 /** Base class for representations of objects in the R-workspace. RObject is never used directly (contains pure virtual functions). @author Thomas Friedrichsmeier */ class RObject : public RCommandReceiver { public: RObject (RObject *parent, const QString &name); virtual ~RObject (); /** types of objects, RKWard knows about */ enum RObjectType { DataFrame=1, Matrix=1 << 1, Array=1 << 2, List=1 << 3, Container=1 << 4, Variable=1 << 5, Workspace=1 << 6, Function=1 << 7, Environment=1 << 8, GlobalEnv=1 << 9, ToplevelEnv=1 << 10, PackageEnv=1 << 11, Misplaced=1 << 12, /** < the object is not in the namespace where it would be expected */ S4Object=1 << 13, Numeric=1 << 14, Factor=2 << 14, Character=3 << 14, Logical=4 << 14, DataTypeMask=Numeric | Factor | Character | Logical, PseudoObject = 1 << 26, /** < The object is an internal representation, only, and does not exist in R. Currently, this is the case only for the slots-pseudo object */ Updating=1 << 27, /** < The object is about to be updated from R */ Incomplete=1 << 28, /** < The information on this object is not complete (typically, it's children have not been scanned, yet). */ NonVisibleObject=1 << 29, /** < the object is not listed in the object list. Currently, this is only the case for row.names()-objects */ NeedDataUpdate=1 << 30, /** < the object's data should be (re-) fetched from R. The main purpose of this flag is to make sure the data is synced *after* the structure has been synced */ Pending=1 << 31 /** < the object is pending, i.e. it has been created in the object list, but we have not seen it in R, yet. This is used by data editors to create the illusion that a new object was added immediately, while in fact it takes some time to create it in the backend. */ }; enum RDataType { DataUnknown=0, DataNumeric=1, DataFactor=2, DataCharacter=3, DataLogical=4, MinKnownDataType = DataNumeric, MaxKnownDataType = DataLogical }; /** For passing data between RKStructureGetter and RObject. Be very careful about changing the values in this enum. It is for better readability / searchability of the code, only. */ enum { StoragePositionName = 0, StoragePositionType = 1, StoragePositionClass = 2, StoragePositionMeta = 3, StoragePositionDims = 4, StoragePositionSlots = 5, StoragePositionChildren = 6, StoragePositionNamespace = 7, StoragePositionFunArgs = 6, StoragePositionFunValues = 7, StorageSizeBasicInfo = 6, }; enum PseudoObjectType { InvalidPseudoObject = 0, SlotsObject = 1, NamespaceObject = 1 << 1, OrphanNamespacesObject = 1 << 2, RowNamesObject = 1 << 3 }; #define ROBJECT_TYPE_INTERNAL_MASK (RObject::Container | RObject::Variable | RObject::Workspace | RObject::Environment | RObject::Function) /** @returns false if an object of the given old type cannot represent an object of the given new type (e.g. (new_type & RObjectType::Variable), but (old_type & RObjectType::Container)). */ static bool isMatchingType (int old_type, int new_type) { return ((old_type & ROBJECT_TYPE_INTERNAL_MASK) == (new_type & ROBJECT_TYPE_INTERNAL_MASK)); }; QString getShortName () const { return name; }; virtual QString getFullName () const; virtual QString getBaseName () const; QString getLabel () const; QString getMetaProperty (const QString &id) const; QString getDescription () const; void setLabel (const QString &value, bool sync=true); void setMetaProperty (const QString &id, const QString &value, bool sync=true); bool isContainer () const { return (type & (Container | Environment | Workspace)); }; bool isDataFrame () const { return (type & DataFrame); }; bool isVariable () const { return (type & Variable); }; /** see RObjectType */ bool isType (int type) const { return (RObject::type & type); }; bool isPseudoObject () const { return isType (PseudoObject); }; PseudoObjectType getPseudoObjectType () const { return pseudo_object_types.value (this, InvalidPseudoObject); }; bool isSlotsPseudoObject () const { return (this && isPseudoObject () && (getPseudoObjectType () == SlotsObject)); }; bool isPackageNamespace () const { return (this && isPseudoObject () && (getPseudoObjectType () == NamespaceObject)); }; bool hasPseudoObject (const PseudoObjectType type) const { return (contained_objects & type); }; bool hasMetaObject () const { return (meta_map); }; /** see RObjectType::Pending */ bool isPending () const { return type & Pending; }; /** trigger an update of this and all descendent objects */ virtual void updateFromR (RCommandChain *chain); /** fetch updated data from the backend, if there are any listeners. Default implementation does nothing except clearing the dirty flag */ virtual void updateDataFromR (RCommandChain *chain); /** mark the data of this object and all of its children as dirty (recursively). Dirty data will be updated *after* the new structure update (if the object is opened for editing) */ void markDataDirty (); /** Returns the editor of this object, if any, or 0 */ RKEditor* editor () const; bool canEdit () const; bool canRead () const; bool canRename () const; bool canRemove () const; bool isInGlobalEnv () const; void rename (const QString &new_short_name); void remove (bool removed_in_workspace); const QStringList &classNames () const { return classnames; }; QString makeClassString (const QString &sep) const; /** @param class_name the name of the class to check for @returns true, if the object has (among others) the given class, false otherwise */ bool inherits (const QString &class_name) const; /** get vector of dimensions. For simplicity, In RKWard each object is considered to have at least one dimension (but that dimension may be 0 in length) */ const QVector &getDimensions () const { return dimensions; }; /** short hand for getDimension (0). Meaningful for one-dimensional objects */ int getLength () const { return dimensions[0]; }; /** return the index of the given child, or -1 if there is no such child */ int getObjectModelIndexOf (RObject *child) const; int numChildrenForObjectModel () const; RObject *findChildByObjectModelIndex (int) const; /** A QList of RObjects. Internally the same as RObjectMap, but can be considered "public" */ typedef QList ObjectList; typedef QMap RObjectSearchMap; /** A map of values to labels. This is used both in regular objects, in which it just represents a map of named values, if any. The more important use is in factors, where it represents the factor levels. Here, the key is always a string representation of a positive integer. */ typedef QMap ValueLabels; /** write the MetaData to the backend. Commands will be issued in the given chain */ virtual void writeMetaData (RCommandChain *chain); /** Returns the parent of this object. All objects have a parent except for the RObjectList (which returns 0) */ RObject *parentObject () const { return (parent); }; RDataType getDataType () const { return (typeToDataType (type)); }; int getType () const { return type; }; static RDataType typeToDataType (int ftype) { return ((RDataType) ((ftype & DataTypeMask) >> 14)); }; void setDataType (RDataType new_type) { int n_type = type - (type & DataTypeMask); type = n_type + (new_type << 14); }; /** returns a textual representation of the given RDataType */ static QString typeToText (RDataType); /** converts the given text to a VarType. Returns Invalid on failure */ static RDataType textToType (const QString &text); /** Returns the given string in quotes, taking care of escaping quotation marks inside the string. */ static QString rQuote (const QString &string); /** Returns a pretty description of the object, and its most important properties. TODO should this be virtual or not? I suppose, it's a close call. For now, we do all work here with casts */ virtual QString getObjectDescription () const; /** Parses an object path (such as package::name[["a"]]$b@slot) into its components, returning them as a list (in this case 'package', '::' 'name', '$', 'a', '$', 'b', '@', 'slot'). */ static QStringList parseObjectPath (const QString &path); /** Tests whether the given name is "irregular", i.e. contains spaces, quotes, operators, or the like. @see RContainerObject::validizeName () */ static bool irregularShortName (const QString &name); /** try to find the object as a child object of this object. @param name of the object (relative to this object) @returns a pointer to the object (if found) or 0 if not found */ RObject *findObject (const QString &name) { return findObjects (parseObjectPath (name), 0, "$"); }; /** Function for code completion: given the partial name, find all objects matching this partial name @param partial_name The partial name to look up @param current_list A pointer to a valid (but probably initially empty) RObjectMap. Matches will be added to this list */ void findObjectsMatching (const QString &partial_name, RObjectSearchMap *current_list) { findObjects (parseObjectPath (partial_name), current_list, "$"); }; /** Fetch more levels of object representation (if needed). Note: Data is fetched asynchronously. @param levels levels to recurse (0 = only direct children). */ void fetchMoreIfNeeded (int levels=1); /** Representation of changes to an edited object (currently for vector data, only) */ struct ChangeSet { ChangeSet (int from = -1, int to = -1, bool reset = false) : from_index(from), to_index(to), full_reset(reset) {}; int from_index; /**< first changed index */ int to_index; /**< last changed index */ bool full_reset; /**< Model should do a full reset (e.g. dimensions may have changed) */ }; /** generates a (full) name for a child of this object with the given name. */ virtual QString makeChildName (const QString &short_child_name, bool misplaced=false) const; protected: // why do I need those to compile? I thought they were derived classes! friend class RContainerObject; friend class RObjectList; friend class REnvironmentObject; /** A map of objects accessible by index. Used in RContainerObject. Defined here for technical reasons. */ typedef QList RObjectMap; RObject *parent; QString name; /** or-ed combination of RObjectType flags for this object */ int type; QVector dimensions; QStringList classnames; /** or-ed combination of PseudoObjectType flags of pseudo objects available in this object */ qint8 contained_objects; RSlotsPseudoObject *slotsPseudoObject () const { return (hasPseudoObject (SlotsObject) ? slots_objects.value (this) : 0); }; /** returns the namespace environment for this object. Always returns 0 for objects which are not a package environment! */ REnvironmentObject* namespaceEnvironment () const { return (hasPseudoObject (NamespaceObject) ? namespace_objects.value (this) : 0); }; void setSpecialChildObject (RObject *special, PseudoObjectType special_type); /** Worker function for findObject() and findObjectsMatching(). If matches != 0, look for partial matches, and store them in the map (findObjectsMatching()). Else look for exact matches and return the first match (findObject()). */ virtual RObject *findObjects (const QStringList &path, RObjectSearchMap *matches, const QString &op); virtual QString makeChildBaseName (const QString &short_child_name) const; /** Update object to reflect the structure passed in the new_data argument. If the data is mismatching (i.e. can not be accommodated by this type of object) false is returned (calls canAccommodateStructure () internally). In this case you should delete the object, and create a new one. @returns true if the changes could be done, false if this */ virtual bool updateStructure (RData *new_data); typedef QMap MetaMap; MetaMap *meta_map; virtual bool canAccommodateStructure (RData *new_data); bool isValidName (RData *new_data); bool isValidType (RData *new_data) const; /** handles updating the object name from the given data (common functionality between RContainerObject and RKVariable. This should really never return true, as the name should never change. Hence also raises an assert. Is still useful for it's side effect of detaching and deleting the data from the RData structure after checking it. @param new_data The data. Make sure it really is the classes field of an .rk.get.structure-command to update classes *before* calling this function! WARNING: the new_data object may get changed during this call. Call canAccommodateStructure () before calling this function! @returns whether this caused any changes */ bool updateName (RData *new_data); /** update type information from the given data. @param new_data The command. Make sure it really is the classification field of an .rk.get.structure-command to update classes *before* calling this function! WARNING: the new_data object may get changed during this call. Call canAccommodateStructure () before calling this function! @returns whether this caused any changes */ virtual bool updateType (RData *new_data); /** handles updating class names from the given data (common functionality between RContainerObject and RKVariable @param new_data The data. Make sure it really is the classes field of an .rk.get.structure-command to update classes *before* calling this function! WARNING: the new_data object may get changed during this call. Call canAccommodateStructure () before calling this function! @returns whether this caused any changes */ bool updateClasses (RData *new_data); /** handles updating the meta data from the given data (common functionality between RContainerObject and RKVariable. WARNING: the new_data object may get changed during this call. Call canAccommodateStructure () before calling this function! @param new_data The data. Make sure it really is the meta field of an .rk.get.structure-command to update classes *before* calling this function! @returns whether this caused any changes */ bool updateMeta (RData *new_data); /** update dimension information from the given data. @param new_data The command. Make sure it really is the dims field of an .rk.get.structure-command to update classes *before* calling this function! WARNING: the new_data object may get changed during this call. Call canAccommodateStructure () before calling this function! @returns whether this caused any changes */ bool updateDimensions (RData *new_data); /** update information on slots of this object (if it is an S4 object) @param new_data The command. Make sure it really is the slots field of an .rk.get.structure-command to update classes *before* calling this function! WARNING: the new_data object may get changed during this call. Call canAccommodateStructure () before calling this function! @returns whether this caused any changes */ bool updateSlots (RData *new_data); friend class RKModificationTracker; /** Notify the object that some model needs its data. The object should take care of fetching the data from the backend, unless it already has the data. The default implementation does nothing (raises an assert). */ virtual void beginEdit (); /** Notify the object that a model no longer needs its data. If there have been as many endEdit() as beginEdit() calls, the object should discard its data storage. The default implementation does nothing (raises an assert). */ virtual void endEdit (); void rCommandDone (RCommand *command); /* Storage hashes for special objects which are held by some but not all objects, and thus should not have a pointer * in the class declaration. Some apply only to specific RObject types, but moving storage to the relevant classes, would make it more * difficult to maintain the generic bits. */ static QHash slots_objects; static QHash namespace_objects; static QHash rownames_objects; friend class RSlotsPseudoObject; friend class RKPackageNamespaceObject; friend class RKOrphanNamespacesObject; friend class RKRowNames; static QHash pseudo_object_types; }; #endif rkward-0.6.1/rkward/rkward.sh.in0000755000175000017500000000314212124345412016106 0ustar thomasthomas#!/bin/sh # Shell wrapper for rkward executable. error () { echo "ERROR: $*" >&2 exit 1 } export R_binary="@R_EXECUTABLE@" ## Location of R may have moved, so check if test -x "${R_binary}"; then : else error "R binary ('${R_binary}') not found. Most likely your installation of R has moved to a new location. Please rebuild rkward." fi ## Apparently on some systems an embedded R gets outsmarted somehow, and LC_NUMERIC is set to some dangerous value for the whole app (via SCIM) ## To prevent this, set it here, explicitely. R does not work with wrong settings of LC_NUMERIC. ## First, however, need to unset LC_ALL, if set. Instead we set LANG, so the default will be the same, where not overridden if [ -z "$LC_ALL" ]; then : else export LANG="$LC_ALL" unset LC_ALL echo "Warning: unsetting LC_ALL" fi # handle --debugger argument (if any) # the loop partially copied from the R wrapper script debugger= if [ "${1}" = "--debugger" ]; then shift if [ -z "${1}" ]; then error "option '--debugger' requires an argument" else debugger=${1} shift fi fi ## set LC_NUMERIC to "C" export LC_NUMERIC="C" @KDE_START_DBUS@ ## Start rkward. Running through R CMD to set all the relevant R enviroment variables if test -x "`dirname $0`/rkward.frontend" ; then # for running directly from a build directory. Don't use this, unless you are a developer! rkward_binary="`dirname $0`/rkward.frontend" else # for regular installations export RKWARD_ENSURE_PREFIX="`dirname $0`/.." rkward_binary="@RKWARD_FRONTEND_LOCATION@/rkward.frontend" fi exec $R_binary CMD $debugger ${rkward_binary} "$@" rkward-0.6.1/rkward/resource.ver0000644000175000017500000000000612124345570016216 0ustar thomasthomas0.6.1 rkward-0.6.1/rkward/icons/0000755000175000017500000000000012124345417014770 5ustar thomasthomasrkward-0.6.1/rkward/icons/CMakeLists.txt0000644000175000017500000000053012124345417017526 0ustar thomasthomasADD_SUBDIRECTORY(app-icon) INSTALL(FILES rkward_logo.png function.png list.png matrix.png data-numeric.png data-factor.png data-logical.png window_back.png window_forward.png run_line.png run_selection.png run_all.png s4_slots.png paste_inside_selection.png paste_inside_table.png DESTINATION ${DATA_INSTALL_DIR}/rkward/icons) rkward-0.6.1/rkward/icons/app-icon/0000755000175000017500000000000012124345417016476 5ustar thomasthomasrkward-0.6.1/rkward/icons/app-icon/hisc-app-rkward.svgz0000644000175000017500000001425712124345417022416 0ustar thomasthomas0qBcrsc-app-rkward.svg\[s\~_*;d)ZIJI%n#JȤ#)~ΙCjƦ97>l~q9lo._8?ٛ틣뛣ݟO|ǫ_~:;=96?np苣o{nz禛W'?'=b<}3]_VǛbO;?{|5,{% /|l+g= uԞz .,RNS~z1#3%(W^/ѫG9<^#۳7mC9K9j(s}q&ruTW۟7{wۿ=;ǻ)y_٠}xzF͛g_^Ϸ Wۣݛ˻G>u{.m's =]J=,-3,򔊇av`aPÃ-7gurs0m.-L?%' KInB0&yͦ'=\p6Lp49rv>mMq>ѰRy>wV\_af|rie賓lޏ 3|{>,L(SuYh0-Cc`m+\04|:ؔR6neâpP1=h~T\L &knM @+@;jPPV=yz/OQb>O$_>( 勣/y#q};G EA(fI&QfʦP\a 槕)%)dòt#]RلkJ'"4M=(MO>RHIKs89 Ʌ W^9~yP({oW-Ӛ㿢۰C}{Q")%MLQ&S>T>FSdrBPMAN:M6N%MOإ=x48eRNW`AɖF|s'RNrP<\lH!wd0 rӐԽB~4aVO%~̞>Y{ˠeOCWJФ{Egه-.x{v}wysӋoeB2h9>ò L9;3_Ҷ~>'ޞݿl`yJ|aN9`9\%f1,،w|s؍U׊Jð dms}M6V0;D<=6܉g.CB.gzVb 6*g@he, K72Gٮ?7G,Y0Wo7oKtF01^XlXC<ƒW`Rjq3L7QVK@ΩFUp--pmlǖsVS38kz 1gOYn(E|Q=]XZcOI f0M;:ppA 84\9]ʃGm7_};zneL:K}cR竀jq.CLcqW͜f4x4\ 7 )pU(Vͯ\A(Acֈo6@.]o9l'9$5I\/PT:^ө~cJՌ K Gi=mQMp;/T,jZQRnWp~ GB$ޒ2櫎(nVt(v[t*{,;`6K_Xc=E0>H Qz.&:/Rg[SBs:(z( &/uj(RR/*B!:ANԔx@gMkFuƬ2!3)j{7T^{O5yW-dݖ>nwsz Bt'(HJ4 IiSz]7?]{x)|0q|FJŝYџ2?s5` -Oj"w:!]F3L?%V0 ]0&B&eXKfT1W=ݕUbG< /T6537Lu(bJ=Act4,^$j0XyZr1ջ[TXj.v:h6% +rSm59Tgd.9+R^0|S [ dh  =@RHNԂ:)p-76I-xxĠAFFL %])TR Ctu8.>[Ub Z.$XG)~Q9vKgvk#NjfY{#|WANjk $2jA$Ӯ6fV,kVV.nkzL5}QT5l̄bVu@z&klhCYAk  J>u'QMuH@"79 : HJCilA.&fQMȣzC]8k /h<_BhQEBA@M t=E -ANUМd˅VW8=GH%̋,7wiUiwp8A)(WQ)n:PM7/Z6C}( fFRVM2. J⛡/cBWyv-Iy(뾩Xz?v_7qyDڠu$U.^0t`_c0ZM;P 6^D/q YF.E*"Ġ 4UTa -IV;|a"{JXO\7mZFo -6NҨ 48L2S(z$J׵qzԗY(V-Nd^ `+ ՓԿ&)mWTLMbЈx(x `W$d J[5|AZRazXS;+z)4ƷX Am Xj$- M@n9zXb޵1+@RHҀH+U虽/ OJZTxUT$zf'Y4mF˿Y޶v6lKpXozWmqc5:6mJ<&R)lpY1?R;ޕ$XZ<,k=D =&<ƢPaed3-#\+5VK@1JjtOfА u2TץڼR$;*L}Z l'`"M(6kpmj B}&)Z-! iA7NAأQ[fA7dq-UY*ZOLsSES/ZQ-32כB^#>io}XNW&+ȓI lul%]$]fɄ_u0WE߸F# Y((^vMӖd9=69Q }^ B@BRJF܋-WJ#mvڢw0U5JGK2[9[hf]cz"} u1Ti 0ݣ¡ї%[E:|07 kJ{Ĭ"NN-'7,ʜ(<Q m5^b'HA%=U%!TZ~RhCs5|j1e' >XDމ}@DvJ0DC}$ɐTjc K !P^HsqwrMw2b>.<al; ^U_iZY)tp3U _n0ܷK&c jVzop&66YZ)>ƐL}N5jY,NY Tk(S]3Ozܔ5jwh#ښ: vv]_Ͼ{^]^rkward-0.6.1/rkward/icons/app-icon/CMakeLists.txt0000644000175000017500000000004712124345417021237 0ustar thomasthomasKDE4_INSTALL_ICONS(${ICON_INSTALL_DIR})rkward-0.6.1/rkward/icons/app-icon/hi32-app-rkward.png0000755000175000017500000000347512124345417022033 0ustar thomasthomasPNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<IDATXkh[IG:eK8YC.5ewH))c-c ,֑ƾl#dl_FCu0MX-PfvMN\חXud],I8i&#_ދR My?{Y { pJJ鬊3EJY{nq]ezzZ^xQs' ]:YEU)e )v`p``@ˑ9<<,ppUchzUy s x9~H̐Nd2ώ;fT*v-N}hEkp.}^U$k=Y_E:^H$RV!D'pDRf;w:3g6mv$[t}ODɋ& hڭQ\xE?mXqQunn 6fDSӵ}m4hYJ87gm%E&li黟Cb 8XE" HD&s9y% @?XJw{U.O(O0BuJz%_VQ(L}3"Ԝqt]Pχi+p333/I)]Oٗ}SI8fll22rm˷gm7} ۶1 ]\.#!# 1+-ɖJW\|ݒ60, 0dn91ՙkDQ0`4I$.eՋJj89d*9#imorkGSUkPkYiiPH O6&|ZC8؎KÕhl֖k ˛mhuvvcw5>6ks~0M _[)OwmԍwGS W|7XӓE`XKJI՝䴝OMvzv{_;}xMD֭[T*j5<^-%&Z,1{;7Tw e$r}{vG:lؠzŬΠl5[7ƙ^\rg<l\XXT*Q.1Mylwh•߰NO~{oQ?< ]LJ`Kuh GU1MWqf,;% {ZmHX<4h4J(q:fND/?u hO-JobmC,4–ǀܒC` 18_"Wq(Trr]xe Yqb CVaR/V_ vDoŜ5CjT zUFЫ3 UBաXq(Tܼ^hLcVKjHɾw7A<2V6zZc&/0bʮӕdyzcJ~ q}`3)wee"PmFqIENDB`rkward-0.6.1/rkward/icons/app-icon/hi64-app-rkward.png0000755000175000017500000001141712124345417022033 0ustar thomasthomasPNG  IHDR@@iqsBIT|dtEXtSoftwarewww.inkscape.org<IDATx{ty{WҮd!occBZ qRr Mz Ӝ ӓ; !B+`lG-[jyڵd$ 9W;s~wˢ͵s-kZ>0 ̵|`k`ՃEd p/}sJO2RQJIP|]Su-E@x͙0}/[oqq9x <R wDDnG9S"}QKYlg\.S.T*r)$W\%z0,'pnGɣQ*Vtww׫}P(PneY'p `;ygQ/B}`58 %cVQ)5("gQs?<,X`V]eVxrYג$v|'UJY"rpRK*UOuSMD@w>Ƕml۞QcS9_ r6:oyAѨGuHX0`0ظ6%7(FP]'pR3kMgCh ގiJ$J{=h,PL#at#:Nkŏ>bqd$Lms6*g㰷pSN]1t:͛맲JwUH!7 ծNOr(m1As 2еkĎEԐ5!PX,6 h("I"@@蠻;wb6Xv-[@l۔HweyfVe1^!8CuG8CԮ,`Q3g&l 3y/e\. $qE9F \A6<(_~9Pof'o@J'xG8y]s8caŪdm<'K񅕝\8E:nPl,,\뮻d2`(a$u=u4||>VZe]FSS*ivZVZy|_gǎ*.qKEJkM q)V`3 w=#&ŞI"ܴd>D٬F>Ch]id4U ;3KJB:&inn&Hhmmmf2 ۶mcŊ,_^z͛7Womӟ1 @J ?~zѳR\*K# W(lWQvp+:ЧMyd?BF0}:&4FeYݻH$B8nM;Ninn&L y)J dV^ͳ>#;;;I&ر|>}jGeS2TXT=7]j"l(a¢j U` =Sn9 4"#J`@ N9s|:tJ)"Z-[\,Վk3^Mi(ttM蟰b>=DeĤnV_ MO0p8 ###:tq=Jr$ p-۶g 0PJtRv}Vٚ]IO?+W$ .j1 >NRappxk411A,vVJc,ŹխhEh"lqi8.>k^$[ѴZ,yaY|n++o4V!vur:~p/3И G wI?o Z\^y{~RM Řm-uG.X ۶i14ށ-od?9MA9$6'a+c$&R=ç >Ch9)D0=Oa{JAQu!,8=Igຐ)9ͷUQ5O٘S^qn.8mT˲[dfR3% rrBahyz]@8&²,_ZևmL+^6`74LC4*aQ"@{O*b3m@0җHe*SC(,r<*sCT^OR!uuQDNu}kwww#=^m2ݣR*%dD~C0q7iHG|Dzc/05lEQz-P΢P3qftxrWc8 7ԗlh|)r/pƱR2 ܤzLq.=lHb]ۈ0^R?krؠi6òՌ:#0 *OGԵG=qԥE6 ׈&ͧ&h[$a9hsקk)]͍Uz}&,wQ_xeP&y ᣺APF%@(0QZ ̩  Wae#3Xf`E2=yr}vȽCڃmLlj]r 8֯> 3d!MC`\nءW߻Y\3Y Ʀ.^-RxS)&yj Wh[U+̵s-kZ>0 ̵V4$hIENDB`rkward-0.6.1/rkward/icons/app-icon/rkward.ico0000755000175000017500000007272612124345417020505 0ustar thomasthomas hf h  6  00 %*00 %.P(  @9$?9HA>8 #; EH'ԍN嶂Ϋ̩䵁ӎLH&ݡ JB M@ew{s~湒㰋鴎xg3 "TTTaaa18tЄ-֔IoI\.'(d, ۄMX=5lllTTT Lt{!Є/b+yAAA000yiatttNNN`<ؗOٚT֔Ip 2y---WQQylcsrq___,,, q-{㵂؅=ޏT֑PiB) EEEccckkkwww =҉Nxܟ_ޗ\vU:===ddd999bbbddd^)LW'bbb ___uuuy"""ᔔy999զ>>>%O111333C(  @33333333̙3̙̙̙f̙3f3f3f̙ff̙̙̙ff33fffff3̙3ff3̙3ff333f3fff33ffff3ff3ff3̙3f33333333fffff3ff3̙3̙f̙3f33333ffffffffffff333f3ff3̙f̙ff33333333fffffffff3̙f̙f̙f̙fff3333fff3333ffffff3ffffffffffff333333333333333;( @  -DPQF/N ޲62RDfTq]r]fRRD72 V$vT4ӍQݧgu丂Ǜƙ澌rݥdԎPV3 *ڿY'ԍ>זKۡ^涇ɩɩ緇ܠ]֔Iӌ:]&4  3'tЄ.ߞdʹȥɣͨЭѰаҺ¬hЂ,ukG)))QQQ[[[iii Q jԄ7ܚYՒEוJڞYݧgt㷀ఀחqπ^uSzOӈXߠnֆ;l 666[[[NNN???mmmH/8 7z#xρ)҉7֒EٚRܢ_wR#֞J ;ˇ"wAڂ>4JJJmmm]]]JJJeee/VXLhlu}#х0Ԏ>ԏI "ݟ@:::FFF###U 7ބL?nll{{{gggRRR\\\ Xk3in qyπ(Ѓ-ч6Ҝ !!!pppBBBP>5 U/kkkUUUQQQ Xc &ц2х1҈6Ԏ?ф/p#r \\\@@@P =:7{{{gggTTT???E^֓I֓I֓I֓IؗOІ1p>FQQQ999, 0)$wtryyymmm]]]OOO/ >֓Hܡaۡ`ۡ`۠_ؘPo'w%Z#BAAAgggtttnnnggg^^^NNN555bhߪoxxwvч4|NوAҋ( @ 33fff3fffffff3333f3̙f̙fff̙̙̙f̙ff̙3f3f3f3̙3̙f̙̙̙̙̙f̙f̙3f333f3̙3̙f̙̙̙̙̙̙̙̙ff3f33333ffff3fff3f̙3̙̙f̙3̙3̙f̙ff̙̙ffffff3̙ff̙̙̙3f333f3ffff333fff3f3̙3f3̙3f3̙3f̙fff3333f3̙f333ffffffff333fff3f3̙3ffff̙3̙3̙333333333f333f3̙f3ffffffffffffffff3fff̙3f3f3̙333fff3ff3f33ffff33fff3ff3f3̙3f33̙3f333fff333333fffffffff333f̙3̙f3̙f̙3̙3ff3333f333333333ffffffffffff3333333̙f̙f̙f̙f̙f̙ff3f33333fffffffffffffff333333f̙ff̙ff̙f̙3ff̙3̙3f33333333333ffffffffffffffffff333f3̙f̙̙̙̙3f̙f̙f̙f3333333333333fffffffffffffff333f3̙f̙̙̙̙f3̙f̙̙33333333333fff33333ffffff3f3̙f̙f̙̙f̙ff33333f333ff3fffffffffffffffffffff333fffffffffffffffffffffffffffffffffffffff333333333ffffff333?>>>W(0` %:nמٞtA  _92[FwYԏkۢy߫ᰆ߫ۡyՐjyY]F=3!j$"Y8ԍRݥd߫nw㶀弈Řǚĕ濎亅|sީjܤbՐS^9+#%x5"y9וIٛS۠\ݦe߬nw㷀潋ƛΧү̥Ę廇}tުkܤbڞYؙP֓G~9=# WXXXXXXX1o)҉7ԏ@֔IٚRަg麏̱ͳ黒ަhؘO֓Fԍ<҇3t(&՝" Գ6|#Ѓ,҈5דH谅˻곋ؓKч2ρ)| B"999OOO___ooosssssssss4v|!ӈ7뭉츔qݣcܣaݧgpz七澋’翎廇}y켘Չ҇4ԍ=֔GؚQڟZݥc߫lu|ؘptZQC950.6/I6b?}EؓUvgtn #SSSaaaXXXNNNDDD888Kn nݏQvzπ'ц1Ӌ:ՑCחMڝVۢ^ݧgӋ]1/{g o )N |'l0ݔWo X#ffflllcccWWWLLL???~~~"""f^}m lrx~#Є-҉6ԏ?֔HؙPՏT$P0 B o%qthxxxlll___RRRDDDsss!!! u(_hhjp v{ ρ)ц1Ӌ:ՑBr?P0!!!AAAXXXPPPEEERTLt9rrreeeWWWIIIfff Rhhjmrx|!ρ'Ѓ-҈4y9ߜ0777SSS#XY7BBBvvvgggYYYRRRRRRImlz&&π(х0҈6Ӎ>ς+Є.20+++zzzRRR4 A#rrrtttgggXXXUUU@@@hЁ+҈6҈6҇5҇5Ҋ:ԎA֒G|"{@0 )))sssNNNN |||pppcccUUUPPP000 hՑEՑEՑEՑEՑEՒFהKؘP{r%f (0 %%%jjjIIIt ; gggzzzrrrhhh\\\QQQGGGcfהKٚUٚUٚUٚTٚTٚUڝZЃ.q&oih0 ```FFF+++000777IIIrrryyyqqqmmmggg^^^TTTLLL444TCц3ݤeݤeܣdܣdܣcܣcܣeٚTquPx{%8 z%0 QQQyyyzzzhhhhhhddd___UUUIII888?a۟]ttttss߬sч5q$fҁ.҉5Є:R-o+++KKK\\\kkkpppbbbcccffffffddd^^^BBB&&&D c ݤe䶄㶃㶃㶃㵂㵂'w/ߒWՑCؚQۡ]ٚZ҇Q^<'''111:::CCCNNNYYYbbbgggccc^^^vvv<<< j˹F ֑F滍羒羒羒羒澑漎Ӌ;q{|ޤeީjwj,,,,,,,,,,,,555444555PPPgggxxx}}}*** [ٚU翓Ȣǡǡǡǡuzz(úȼưâ!!!999999::::::^^^ ###UUUqqqiii111= {2ܣd潐ЯааЯ䷅֓Ix}(ޘ[e---FFFFFFFFFFFF!hj 888VVVRRR i$Em)чAחUۡbަjߩnܡbӋ<]999TTTTTTTTTTTTppp^^^TTTUUU]]]l Dyǝ|FFFbbbaaaaaaaaa[QQQhhhbbbbbbqqq0PPPrrrmmmmmmnnnOGGGpppooooooppp0ZZZ{{{{{{{{{wMMM||||||||||||0ccc8sss0kkkNJJJwww0uuuR565III]0}}} 0V_0===0777vvvSSSWL z4$$$$$$$ |< ?(0` %333333f3ff̙f̙f̙f̙̙f̙ffff3333333f3f̙ff̙ff̙̙̙̙̙̙̙̙f̙̙f̙f̙3f3333333f3̙f̙3̙f̙ff̙f̙̙̙̙̙̙̙f̙fff̙f̙ff̙3f33333f3̙3̙3̙3̙f̙f̙̙̙̙̙f̙3̙ff3̙3f3333333333333̙f3̙3̙3̙̙̙̙3̙3f3̙333333ff3fffffffffffffff33ff3̙3̙ff̙f̙fff̙̙̙̙̙f̙̙ff̙̙3ff333333f3f3f3f3f333fff3333ff3̙f̙̙f̙3̙33̙f̙3̙fff̙fff̙fff3333333333f3ff̙f̙f̙fff3ffffff3f33333333333ff̙̙fff3f3̙3f3̙3̙3f̙f̙fff333f3ff33f3̙f̙ff3fffffffffffffff333f33ff̙fff̙3f̙3f3̙3̙3̙f̙f̙33333f3fffffffffffff3333f3fff33f̙fffffff3̙f33̙3f333333333fff3f3f33ffff333fffffffffff333fff3333̙ffffff̙f3̙3f3̙3f3333333f3f3ff3333ffffffffff333ffffff3f3̙3f3̙3f3̙3f3̙3333fffff333fffffffffffffffff3333ff̙3f3̙3f3̙3̙3̙f̙3f3333333fff3fff333fffffffffffff333333f̙f3̙3̙f̙3̙3f̙3ff3f3333ffff3333fffffffffffffff333fff3f̙3̙f̙f̙3f̙3̙f̙f̙3f3ff333333fff333333333333f33ffffffffffffffffffff3333333̙3̙ff̙f̙f̙ff̙f̙ffffff3333333ffffffffffffffffffff333333f̙f̙f̙f̙f̙ff̙f̙3f3ff3̙3f3f3f3333333ffffffffffffffffffffffffffff3333333f̙ff̙ffff3f3f̙f̙3̙f̙f̙f̙ff3333333333333f3fff3fffffffffffffff3333̙3̙̙̙̙̙̙3f3ff̙f̙f̙f̙f3333333333333333333333fffffffff3333f̙f̙̙̙̙̙̙fff3̙̙̙333333333333333fff3fffffffff33333f3̙f̙̙̙̙3f3̙33̙f333333333f3f3f3333333fff333333f3f3̙f̙f̙f̙f̙ffff333f3ffff3f3f3fffffff333fff333f333ffffffffffff333ffffffffffffffffffffffffffffff333fffffffff333fffffffff333ffffffffffffffffffffffffffffff333fff333333fff333fff333333fffffffff> >|@rkward-0.6.1/rkward/icons/app-icon/author0000755000175000017500000000007412124345417017727 0ustar thomasthomasIcon by Marco Martin licensed under lgpl rkward-0.6.1/rkward/icons/app-icon/hi16-app-rkward.png0000755000175000017500000000135612124345417022031 0ustar thomasthomasPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8œOHqǿ޹9_gS,uC,a\Y"Y9СKy.yAujuH'apmZd֦}DNy.w= TFY*$I HxFE,*ࡘ=x8ui3}CpYmK|3it8=d{vrͱg)xuL\oV0=%JL#mP>-eյ@٬i{^K6P$ >fp%24<ϷǕV^"Bժp / 8θP(HO(^lXVvb9/͑ťճm -&(P hnù7o O.U9V)=XiFDQccp>ow8ݭ"Fze|X[>3 f{{{ؑZjviRV_Jh 5?m!mIENDB`rkward-0.6.1/rkward/icons/app-icon/hi48-app-rkward.png0000755000175000017500000000630512124345417022035 0ustar thomasthomasPNG  IHDR00WsBIT|dtEXtSoftwarewww.inkscape.org< WIDATh}pyCw8ebv۸$Ԙh: )%t&?v_S2ȄxLC6|L@'jh66v -,I瓬;ݝvov!!!23y}wWH)8Q;AZ>E !@ &yUB$@e <+o=πo.Uk֬a͍Rvu]GJ\/vIO?** rX,ӧOˁ900 [ZZ$P]9"G۷otZ͵ꓸZ2>>N&!Q,)\a7}[nzݻ{`0(7ԍ:m۔Jt!ߪ;9~8ll6Koo/[lQ0c! WyEJҼv2Yl֯_ϡCċ/CBF8/xYڵg ˗/Ç0J|>t4MI)B|OK.2R>9iT .8#/h4 3 F,p9 Tj#oL(ˍ "}dNHZLcqfzo7Rh4H&ضMZ 8Nh;+tw)p 2'$:ɘNԘdI?14LOOS(/TUeѢEQVQW9vE63BYX6ԙJ JO8ѷ1h\4m6]5Z0Z7nHww7CCCK__P={H"3ir7l.pC@ )%?:2+Ce~wI޷戂x )q4MUTCA-iܴivG!b `۶m+H)-d3OFU.~ϤhHϽ>s,NjE~Ŭ18JyoN-ZtYmۤi::: Nىy=zggϞjAaY8f]s7t޸yPsrU2Fi *D jȝy躎x9e||</K:0׮S݉ Eۛq92GNUBl)/q"ȼ5P>]8*<<&&&D"ŋD"DQT*TUm˲ؽ{78ր)5W47T VzFhρ)V)]:D /7?ixUUUUYd H)I&tuul2ٿeǣxT ȉP"K+54MB_J+߹;mG+b1"MMMI(BQ(wUZMMp.W%_x,ruqǧ) *K.q]HEAQTU% iKD } . u\_64z~K&y+kq4,-.ڜ9=aж!xU@t:MwwDRNlCA @Ӵ<@ss3x<./C z/aa>NMK"@U&УzrU|P(D2Ds=GXRJ]|>UWO}~m S}1X,i} a{ޙ*ʱj]EO,4EB@U55ħ)4Dq]FR<]}2ccc8q^{>p~oJto4i7BjLR.Vy8C4% * .T>c4s=3QuFuUUm5dɽ쾱 ܣmb Kk:,%5SN :E׵zi\Ŏ7FxZDƚt]DzmۘY?74$߇_cW{W/xi4ȴ53 !>}cʓULH=iDtEY۞T3)*)WmX8躎y! qvis/Is֑7u5&4xs<%k&jP@!~]u)ܚĭI|_ ˛kՠ`yɱ{0hFU phlhPXYO˲p]x3Toܽ` ]!RY+% H*qS%R4b|#_1Yvɔ\gJc>ǣN'UOH Ru|x[Jyew@kB6Wcͫ[H56Hʜs iB*VͧhDxwO0}dґ8oSB`O32_Δ@'jcK` ]% |IY{Zd_; c\+8zEy_S>%#uij k3H )X2HZ.Xq҄M1Sa:c]#xWG}`@$y7j.ii -]"&AJ9*r[GࣖO>juIENDB`rkward-0.6.1/rkward/icons/app-icon/rkward.icns0000644000175000017500000012625512124345417020661 0ustar thomasthomasicnsis32 25 9?1|xx4WT9-RnSuQ*C?U&$8_pb VdV j^Nb%Pϻ-՟_0! 1Y]cs 5CRм_N@(  )F`n|ykO/ *7H[^N<- j^Nbaڽl1Y]csLȸX   =zûE )>UmqZB,j^Nb-Ǧ]1Y]csԿ  з l8mk4ppppg MOPLPwP-P P.0OjP-PxcCuPY 1^(VPX-PkNH^ !G: 'n{09-HK0ih32J8{X ΐ܁ ԓρξvy;@q_hg| _^ Vz{{ Q~||} Lom dvoozw %5GZh\I@` hacMP[:-8G3S N_ZNG['Fb gzo#*Ofebnc897/Jc||x( OJsW>JWWUC&,4=EO\eid`k:eOd4/81  >R`_[^bcb]= 6uuttse = ?onĞ]ZRH1ReedceB) R?&+8Wujhd]TN0QVUUTZ(#\@exwqh^WI 3FEEDDJO fE .}rfYW1 '4559?E)&%#nI{yl^XBT  '-5&>K9F}n`XSg"*3;?,(?@=X2&|n_Wb M$ &/8AIP&(  9o vi\Qp'@h!*3=FOW`_>H &4h\ qwmbVIz+3ƏP47AJS\enuzodS@/9CINjʽJ `jbYNB(,.ժpcbeks|ǎ="Q]WNIR!,&/9fۮtB6-#CS\iutr+#1:CLZҿdSJA7*! 0CNW`ir|xof]TK7#,G`is|yofP2,8GWi{n\KR`_[^bcb]=:nnt{F?onĞ]ZRH1dqlk R?&+8Wujhd]TN0hoh\@exwqh^WIhzx; fE.}rfYW1 ml.%#nI{yl^XB hhioqux|~&>K^WF}n`XSqjhhlqw} '(?@=`m&|n_Wb awhntz%) |h vi\Qp'Ijsv|PA=wnZqwmbVIz+jrǯlM1HbvĎup!`jbYNB(,)py¨ͱ}w:Q]WNIR! lƩw$CS\iutr+ ^ʽm! .bým8 >xýI.BXot]G28{X ΐ܁ ԓρξvy;@q_hg| _^ Vz{{ Q~||}wLom dvoozwԢ@` hacMճ3S N_Z 'Fb gzo# ߷897/Jc||x(؄֪&,4=EO\eid`k:݀ Ŭv >R`_[^bcb]=҄͹?onĞ]ZRH1݂Ʀ R?&+8Wujhd]TN0؃Ƞ\@fxwqh^WIց̴ fE{.}rfYW1ρί#nI)|yl^XB Ο&>K˜F}n`XSϣ,(?@=&|n_Wb ֭t Tvi\Qp'׽r 4a!qwmbVIz+ǻɫ`jbYNB( ˴Q]WNIR! ˬCS\iutrǥ!ȳкh8mk  k+0S=0M0Q)0 0F>0'n0=0}0R=a{a0dx}hy kuzC˼<=D0!0:0x`a0h@0> &0*H[0^ui0<̱ gUXXXXXXXv߅$,:6Zu˰y^>it32G2yϾ, ւ59[}·3V {Lj2 Oq x1 طUu䉾0GփÌrމ.Նn׉-?ՈkЉ,Պ?iɉ+8͈f*sVb帉( _ᰄ)y\ݨ+ >Z٠-]Vԗ/cgSώ1%oOʆ4 xMĈ~6 kIy7bz{Ft:\ulCo<Vrpqq\ @j?gqklJ,eLMN0WVUTRPF $XYQ~)]GHQ uVUTRQ J~7 "oյ%SBBCjT  }_UTSS %iv !hʾ"K=>{; #%3zVUX~Ù75=ɸwuyhC9&:* "#%&())*6jX^ȓ v\ :h`einsw|k;4'68; "$'*8GYk}eʸl  W'(sVSX\afkpuy~m4/&147:=;6CP^kwto̮b$! 3M`DJOTX^chmqv{p*&+/259<>BFS`mwq\ZͤX-+(% EzmR;@EJOTY^chmrw|j !%&*-047;=ACHMSW[_cfhd_[\ [l7520# Qp~`26;@EJOTY^d^RF8(   $'+/36;=ADGILOQSVWYZ[\]\ؒ><:&  Y|uz:,16;@EJOQF5   !*-149<@DFJLORTVXZ[\]^]]\jC@ X|{z{1hc#&+16;@D<'  (19?CFIMORUWZ\^_`ab a`^THFC;!*wvuvwN Z~_!&+058. 'Jakw}sd`bdeg fec`TKHEB>hqqpopqe ,x[ %*.' 'hu֬q`def edb`^XMIFC?' Ckjihijl5 ^b$% Goz}ry{_`a`_][YWTQNJGC?2edcdefe+q   Xt|F7;@DHLOSVYhefedca^\YURNKGC>1$_^]^`ac@PC - "\yc6:?CGLPTW[^adfkllkkihec`]ZVRNNKB=+ 5YXWXZ\^_Y    %a~K8<"/ >mtvvwvutrolieb^ZUQPSC>3KMLMOQRSVK(&  $)iQ=@ W{|{ywtqmiea]XTOWIA<:GFHJMOQR?+    %+lT?B w~{xuqmie`[WRQWC>0&A@ADFHJMO6   "',pVAD1}yuplgc^YTO[J@:+<<;:;=@BEGIL4"% #(.sXCFd|xtoje`[VQWQA< M'665446:<>@BEG:"%'  $)/vZDG "{vqlgb]XRRYB=-O$0/.0258:=>AC@!$'*+  %*/y\EH}xsnid^YSN_J>9:0'**)*,.1469;?@C&'*-/   %+0|]FI Izuoje_ZTO]X?9!"#&(+,0258:87)),/20   &+1_FJ#{upke`ZUOWi?:(j "%(+.147%   &+A`FJ"v{vpke`ZUPSqL:4W/ !$'*.147:=   5_aFJ" d{upke`ZUOMw`:4  #&)-0369ADG3LVXO@//5:@EH  (}xsnic^YSNIs|93 < #&*-047:=ADGJM( $)/49<-+ {vqlgb]XRMHl=2$ *X !$(+/269AEHKNQTXW'  * Zwb|yuplgc^YTOJEYW0+*;b   $'+.259<@CGJMPTWZ]_V&- %%Cz G~{xuqmie`[VRMHCRg.) , @H !%),037:>AEHKORVY\_beg_+ *,-9~  .yvtqmiea]XTOJEAOz-',  C@"&*-158 !trolieb^YUQLHC>J*%2 2l- #'+.269=ADHKORVY\`cfjmpsux{tW)-#6BB@^¶Z  omjhea^ZVRNIE@;F(#4 eͥP+,/37:>BEIMPTW[^behlorux{~{lT63,>JQROKSƕ/  igec`]ZVRNJFB=9@&!<  9̍Z?7;?CFJNQUX\`cgjmqtwz~~xql4jgc_\Xaʾb! db`^[YURNKGC>:6;#u!%(kƍbKGKORVZ]adhlosvy}}zvsolgmʕ8%" _][YWTQNJGC?;725 X"%),2kǚnb]^bfimqtx{~~|ȋD-*&#YXVTROMIFC?;ETez"#&*-047`ڼ,~@41.*'$ TSQOMKRbuT #'*.148;?Xճs@<852.+($!ONNZk| N!$'+.259<963/,($  Q$(+/269=@CGJNQTfɡvWQNKGDA=:630,)%DCB@><:741.+'$  I!,/36:=@DGKNRUX\_fϸn`\YUROKHDA>:730-& E-36:=ADHKORVY\`cgjnqt}ųuqnjgd`]YVSOLHEA>:740"B"3:>AEHKORVY]`dgknqux||xurnkgd`]ZVSOLHEB>;6)>!3AEHLOSVY]`dgknruy||yurnkhda]ZVSOLIEB:(:3FLOSVY]`dgknqux||yurnkgda]ZVSOLI;&5*=NVY]`dgjnqux{|xuqnkgd`]ZVSD2  /%:O`cgjmqtw{~~{xtqmjgc`XB-'4FVhpswz}}zwspk\K;& .>Qcw |kXF4$!'.571+$ $yϾ, ւ59[}·3V {Lj2 Oq x1 طUu䉾0GփÌrމ.Նn׉-?ՈkЉ,Պ?iɉ+8͈f*uVb帉($_ᰄ)y\ݨ+ >Z٠-]Vԗ/cgSώ1%oOʆ4 xMĈ~6 kIy7bz{Ft:\ulCo<Vrpqq\@j?gqklJ{; #%3zVUX~Ù ^hʎhľC9&:* "#%&())*6jX^ȓ NhxƅĞmh~;4'68; "$'*8GYk}eʸl 9fnăhhiv4/&147:=;6CP^kwto̮b$! _hyhij*&+/259<>BFS`mwq\ZͤX-+(%  ehtijn !%&*-047;=ACHMSW[_cfhd_[\ [l7520#*giqjkowY3   $'+/36;=ADGILOQSVWYZ[\]\ؒ><:& 5hkvkln_#  !*-149<@DFJLORTVXZ[\]^]]\jC@0hhlmnz|A  (19?CFIMORUWZ\^_`ab a`^THFC;!ehlnot}~y|g 'Jakw}sd`bdeg fec`TKHEB>Nhmpnpovyvy|\ 'hu֬q`def edb`^XMIFC?'(hhopootqux{~n Goz}ry{_`a`_][YWTQNJGC?2bhq rqrmooqtwy5  Xt|F7;@DHLOSVYhefedca^\YURNKGC>1hh}qrtjlnqtr- "\yc6:?CGLPTW[^adfkllkkihec`]ZVRNNKB=+0hh zstvijmpf   %a~K8<"/ >mtvvwvutrolieb^ZUQPSC>3]hh uvxqhhi  $)iQ=@ W{|{ywtqmiea]XTOWIA<chh vxyohg"   %+lT?B w~{xuqmie`[WRQWC>0dhh xy{zhU  "',pVAD1}yuplgc^YTO[J@:ohhty{}~k #(.sXCFd|xtoje`[VQWQA<xhhi {}~c  $)/vZDG "{vqlgb]XRRYB=-xhi}|~n  %*/y\EH=}xsnid^YSN_J>9sthiu   %+0|]FI*dIzuoje_ZTO]X?9ljhiqx|}~p   &+1_FJah4{upke`ZUOWi?:(dghjmopsuvwy{}7   &+A`FJFhsv{vpke`ZUPSqL:4bvhiknprtvxz|~   5_aFJ0jid{upke`ZUOMw`:4bkohjloqsuwy{}  "J*%/[lnprtŞ{~s%)h»usqomkomjhea^ZVRNIE@;F(#4 moqsuwyͺl: 8bƯwusqomLigec`]ZVRNJFB=9@&!.Noqsvwz|ϱ%Ě|zxvtrpkdb`^[YURNKGC>:6;#W crtvxz|~ϵ˳}{ywtrp. _][YWTQNJGC?;725 .ctwy{}ҽ#̯}{ywus.YXVTROMIFC?;ETez/ dwy{}ƽĀ ʪ~|zwt,TSQOMKRbuQ dy|~ŧ~|zw*ONNZk| O \|~Į|r&IHGECA><963/,($  L1vS DCB@><:741.+'$  I Wĸs& F)wĹMC>zX?.mH:]w75 =i|O!/(Wi;BfÁqR& /Mk xY; *3>HSWMC8.#yϾ, ւ59[}·3V {Lj2 Oq x1 طUu䉾0GփÌrމ.Նn׉-?ՈkЉ,Պ?iɉ+8͈f*sVb帉( _ᰄ)y\ݨ+ >Z٠-]Vԗ/cgSώ1%oOʆ4 xMĈ~6 kIy7bz{Ft:\ulCo<Vrpqq\\@j?gqklJ{; #%3zVUX~Ùҁ⾁C9&:* "#%&())*6jX^ȓ Ȁ ⿁;4'68; "$'*8GYk}eʸl ِπ 4/&147:=;6CP^kwto̮b$! ̀*&+/259<>BFS`mwq\ZͤX-+(% Ո㾁 !%&*-047;=ACHMSW[_cfhd_[\ [l7520#ؑ˿   $'+/36;=ADGILOQSVWYZ[\]\ؒ><:& ڑ«  !*-149<@DFJLORTVXZ[\]^]]\jC@ڃη  (19?CFIMORUWZ\^_`ab a`^THFC;!Ũ 'Jakw}sd`bdeg fec`TKHEB>ݑ 'hu֬q`def edb`^XMIFC?'ՇކǦ Goz}ry{_`a`_][YWTQNJGC?2ʄ݉܀̱  Xt|F7;@DHLOSVYhefedca^\YURNKGC>1Α ɧ- "\yc6:?CGLPTW[^adfkllkkihec`]ZVRNNKB=+Ҍš  %a~K8<"/ >mtvvwvutrolieb^ZUQPSC>3Ǝ׀ ƣ  $)iQ=@  W{|{ywtqmiea]XTOWIA<Ӎū   %+lT?B7 w~{xuqmie`[WRQWC>0΅Ճր ƾ  "',pVAD1}yuplgc^YTO[J@:ʊƥ #(.sXCFSd|xtoje`[VQWQA<ϊԀÞ  $)/vZDG"{vqlgb]XRRYB=-΅ӀȀ  %*/y\EH|}xsnid^YSN_J>9ف˅Ц   %+0|]FI Izuoje_ZTO]X?9Ȃ̂π Ȁ   &+1_FJ[{upke`ZUOWi?:(ńˀ̀Ҳ   &+A`FJ{vpke`ZUPSqL:4؇Ө   5_aFJd{upke`ZUOMw`:4΅Ӥ  "6/(1BRdv!B!trolieb^YUQLHC>J*% !ɫ!ǩIomjhea^ZVRNIE@;F(# Ǵ "ȺCigec`]ZVRNJFB=9@&! ܀$ƣ$db`^[YURNKGC>:6;#&ɯ _][YWTQNJGC?;725  ɯYXVTROMIFC?;ETez ʮTSQOMKRbu˭ONNZk| ɬIHGECA><963/,($  νDCB@><:741.+'$  ɬ  !лCѿ>и:˲̻ŴȽ   t8mk@~`[!-hp5(@ ~(@y(@ p(@w(@ (@t (@ (@r9(@ (@pl(@(@mA(@(@$(@!,(@lg(@R~(@(@(@L(@(@(@(@y ,=KYgu{m_Q`@7a@q-v@;S@ x@5@gcS@*r rŸKjb# ' +s/ uΚoC(8](&E(([(m)( (k(2u(@%?K(@XX(@X(@/X(@ XW(@X!(@eX (@9hX.(@lXg(@V(@4BC((R(Al(kn(צuE(> W6k a3V#3R(0Z--b2*H(_Htf H 1@d#Esa6;YY迖l3*S}շd;#1?MSF7) rkward-0.6.1/rkward/icons/app-icon/hi128-app-rkward.png0000755000175000017500000002627012124345417022117 0ustar thomasthomasPNG  IHDR>asBIT|dtEXtSoftwarewww.inkscape.org< IDATxy$U?7+k굪WAEQdQԧ3:;:goQa#*o*`#WuU׾qYKSN8y#3FBJ/׻Kx}DE%,r,`cKXX""9ȱDE%,r,`cKXX""9ȡx= xVOJ)*bL B*9)噯$BkI1q)Wzފ,6!'*^4)'g!_9ԇMg{FJiu`q`| 51a?|GJ{2[rQ&|VfK]!D|/Dsa[Pp|>O>'155EWW==?OٺuC$^B|B1g({(r9rLl6K.0 TU&BVF[pgvZ~f-/6!ćlX"`&e9vlF|0B(>?!k֬AJI?O=wy'wTbBI) 3]wBR嘘`tD> 4{ ֬Y^. /Ǐss355wQ!Ļj]"P(j~X!"˿򕯸8p###ABq 7p%~~u;oծDJM@0Ƭiނmlܸ)%/vpP(L&E">}v>!ĿK)R/iJ}!Dկ~Sm6 +.|S]aXE.7@,lݺ}qر9#%kcT`0Bw̾}8xyꩧrߖR؈%`^,o`߾}s>bY^{-O>$\FA}cqM7K/Uuf#e6x<^~v!D;#,&w|X.__陵Wa~~?e؎S9fS+"cTy$/.[2d+Xp0zW@J3!3c]]]\ ǍN:kbuj"!VY]`u}ֆ-qEwqbx$3ɛBPʧSX5S D!4:jp8iH)=)%|R:::G4RW\{Sމ=Y2hTrkb6)$[V9cu3WGY 0 dpt8Ǟi^i 6;A`0Z͛7iͲ,mii~3KJ Hp=1欶VEXFWaJ]AFR}Tx[]3WpjKZb{bEc0MӍ57>>N8 = IO a;+8p8L<w",&''+/ϦUU4Ǐ_үwJ)兯  `HHn} шƥj59sfk)gױ$VuadS3oZQ˪xX@EQ( kTB￟.%@`4I׊bաk?N*4MK `ǎ[ѣGԧ>#Lw&@Bt_Ր>!ȆDN-jj̛v5?{<TMümmsWVFש@2H 2l$سg_sBlw|8}\uU]T*E>ghhLޚqFmFmm-*3 LMgO)e}Zؑ9rkbL2dDc{{wnk! /oLKώτbWW:oE#W_I{m@:*v/ c$ggP`PM UGw^?+)t|:^R#qYgcTU%Nȑ#B!l–-[D"nWU]vq7#tG]El$/0L2V75ѱv`rCyR#&2s%׬-!p.fKҕNLtU]@SRٲOf4l}}=d)WKUUn----s#ѣs9lڴDk({/w}]ʂEO<:Bs&@BtZ-]!}V#ST}Z=oPkXZ3 ڱLGxyV{BrZbF YLr<DB"@E)nr1I!B ͝]D8555b1(H; TP(x׻E4ui{ܹ4se2ǁKs̉ ѹ [+ -!&.] k5{l&bJI5 :# LTۏ3G/kYťͫBBLJɧʋ= M >=pjjj%QpAv^Jndn({UHR}}} aY]tuuuϽ޽{,˭aNjn3 @hɭ1yJPw-@o<~)a,mpoMh i6Ԣ0PHkr#]^JmhY㌎:x z߲,We$RbMMM*۫Eq u8tvvk.LJ\Rol"&tU3Xv[L+aZbJwU iIu3ITe'3-p vY)D&!ɠ(JWU˲\M|:)1r߾}v5M _$D|hH@ vLg4)Ta;#ܿgB&j  <;*ZLecGf(sJ3,WЕw;`6 hNklܸVN8A__w6jj8όh[yy`_Z_X` }}iTE x`a GTiH ):8}N/灧{V -֯{b/_NKK HX,F$!  E6%N311QbfY b1W)B{{;W=OOUX)nkSo] +ц+?5y-|E&hUj9l+*pF$KqF: ă`<8 ?4g~YUU(\p555D"- ۷{үN^#iTDs_X,ơC0Ms9p-Rs > D):笫A,7)q/P<ߓƒv)9 ZI/BӦ[P2㣘%ΦDޣ|sk~%O1(8k֬! :355E?`bkjj"Hl2oιկ~EOOO~ffIϲeˈFݻ\.Bqrp{/!@VCT!;.)T5_M~PU+ 4*~^؋T-"ZhcyKԄg#bgkJg_ -I2gWB7 %OL3sx_CwlAOMȱL&}Ǎ7H$)7S!39QKF\7KSk%YUt8U oH߭`[޴*eaÂ%)XvޟiI2R$i DGshGls%|a PAyA^cqn/PI&<ׯ(n'xg+9"Y^Z5ކh[:2(X@7-e0wnCJL ,+|U]SU>F1, )]~=W k~$V6F[.=Fu彈_b`ЭcC晹`k.M M`gV0%iaHa5e`Z4 _-&i$&ꐽD|}DŤ_^ e+FA|;LM%'G=CZ YWԡP( 46L!Ǘ #FSF ôB/jnξ!!)%:ul]lk ẆQRp8r䈛?00 KX,0%P!ö,eK‘,'&d ڷUo[IJUz@!ZBV6ڄjNOU_mL9q@fslrꩧ?x<֧5s'@_.W'k6f31)mϐӲd 8ޒ.驾 &|:_ ⎿8K* Zu?^;~3ϻBBx pb@dVmY&2&y gqbEzgB|36}QWWGKK;03-nXvȠhw z{{$h?8f  QScqX̛ g<1>uulXF[[d $[ LLa%eI"잀38ˮl'jD!ti3V5Bmm-gu_~:$DGA<27`AOne"NT04=1ɓZ]:N2a},=n͢(h!J[7jw7}[Ib>,:o AΎ;x;-[ds=twwދq[mBSi/]C~S¹-Bt{N@mXx#dF 'x2kd* \ߒL5|y|y[L ]x.\2Z ~tn2HsI^.b(˗|r"022‘#Gxe ngi?:6i,'5f4?~ܝ oP(+K)\~.,İԉFH~v,[ƪX/n;o8o+|(k^0=6NP{{j@aߟ0򜻮{UoX& _m'&&8x`=0 FFFνS >z ȋ#NkFUⶭԪAL>и^Χ _JMMMhF.I&x gd_b>§;6 6o`U,̏L`8}%-o?z&Jç0/>~R_,=L&$l8fg툺Z؊iCu_cccaBgb1ɤ7$EO).䡍L]45mGr !r*5^f4k|&Krx̂ξ"H̎-pf+ ZkiLNq{fd[tg3I Nz,eժU%/3!ˡ:uuunY pP'lFs`X(t1}ݲ](ڸwoX-X﨏6S]#JvPԶŸ$;2MPߊu|Ys ysJfvЀʲ Φf:@#) #B1]CX4V/<=<7rdl˦dg>t]⊙Lmllt͂XwD!DϏsuh+r4m@&÷^8ƾ]"%FQ$(3U(y_墛0:Fr:cXH8ğNBt=\ >IDAT64قE΀% zP4 u*,R`{.' B-\ w۾CH}>L u5ܶFu#RmPB{ .! V`+9H }iL'vK=Pk4las"گ2-Bq&TEl\$`&mlnz$.g1`l x_bրJ }Wֿ9p,ٕXg=c\-1_LlᙁIzrd x%FXa*G-(W!!Hۖz=W0,9\֢7V5Y2STjBD$v'8uizy{Ӓ%i I Lnp('r+?-`0XUV)ow><OPhn@ݚ3y!.lm[+%C@Qxۺf.]ߌX6';4@*!h/I4BQ=C&ˎrX∛P E|Ӓӂ$#hSkPs|:\OӒ{z<&Pznk78"LofP˵3-]u7\wr谼w-/K)]0lǴfMOq:.nkv:\34FɆWlJ  r8D*h@`R,yJP(:M@bɢ v @ PiUjl"B 3M=>džHV_6HW!BXh@`Ho(VD"R__Oss9`/5zv1Y@j-1f 9ZiyzpibKc̹xI&Ȋڠ-b Tޠ{2KTAδ=XiT!9Q:+bJcXgY4@"hs:H&CFy|dtս=PEqW+(I qcrr- innd)g&7B&?p2wAy;9\rx8:fy,m'P]7!1N_+!G9Q# GM{U|ӒH(O؉0V3tDύfI`=___.`rr$1;k6<û2/mW6xH?J1a;H&/ 3dPd޴}5}&ƽ;9!y˄Q= Tt F̍ ] = #ma3^ѧoTx^oSYzSY~=BCX1JGSaw5љPHP;^&lX2K)Ȑ7iAO.-3<(ٞ;{5Jϲ'E qǥ q me+:-jafT*@2pCKG?2e' >ヘ%˥Q^yjV7^G%/B$޺Ƴ ( d43  g~0ٝb>ƟA =({=WmG%)yYVQz#[RO(ιW]wgTl'ɔ` \~4v Lb;c#u"Ip!y# `_e,;BI_>iBԮӼm ԯףp§$%h{,$٩~u(1ڢ4ňJ;k ر~Rrs mA&ciFvN2~<ԉ 2Xv=O/DFׄ%w oXo&TUzD%DTQ`X%D4Q EA.eOSϘylP" =#9"noPwV x/a}a~V x !n7h 6+ )>^@9HO no>ec}{I`%$P#.Q V scrk[KX̾[cKXX""9ȱDE%,r,`cKXX""9ȱDE%,r,`?´̻bIENDB`rkward-0.6.1/rkward/icons/app-icon/hi22-app-rkward.png0000755000175000017500000000216412124345417022024 0ustar thomasthomasPNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<IDAT8͕]hUg>w6dgwːY4MVJHɣć(B* APD|R%* 6`Ȓ""6P mBMlfHv3ٹ*}{{b~/F$IZS%)r.슝%?Z>fa ?ӓwqT*llluՙ7rl$2nr,L&{X@#5TUT*;{c<aeeN$]pU_=x8>q V$oA  D8եڶrD"QpIvc珎?s{-;ʣnۃ#u0lF:? KO9mmm5a0 snnn1I1u~>C]M59DZ"5t.|>~H`@ed2slllZc9Nуͧ66>)-v'Vnqsɨ8r "XVՂe P(u]owww3K6ߴvJˉ߸‰4*ы`yh٫SP;?4!ry18j:br+E9 h,Bu$IKKLQzLD{{{zIo#"G!lKu3@r*)lnxFkyyq]8 p_VߏjbDل"qtjrI,oTS֦Zqt@Z!rTճX,BE4#E5|Ghh8 JȖ\H[J73n2(W2ϬƿynCUU.JIDNaH@OTUAG` qkkk{OdRH Dt)Z_GkjC8[H[e4OO X)IENDB`rkward-0.6.1/rkward/icons/app-icon/lgpl0000755000175000017500000006130312124345417017365 0ustar thomasthomas GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! rkward-0.6.1/rkward/icons/paste_inside_table.png0000644000175000017500000000030312124345417021310 0ustar thomasthomasPNG  IHDR sRGB}IDATHSA ~>{mwe&DAKp 3K$`_9MIPNXtd{=tg 7`/EUީ0j3*ުwpvylW%IENDB`rkward-0.6.1/rkward/icons/window_back.png0000644000175000017500000000143112124345417017764 0ustar thomasthomasPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATXŗn@5P#@x*J+P-JttiE$3C^%c>g̸̎Hs;o7Rd*APAŰHA"|ֽ{v}ͭ9VU nǼ5zoX1UNJ|y8]6}tol=xEv Xei/;KުЂ@-) Z֪՘Z6Axeζ6p%r'!>xCBJ=B2$$,x|~8E.B&/ԧ&?,r ]aVjs6z)p\%ӵ3#0 peZ7`׏>O rAuAȨ 2w3X#2@ xtU`=*F( )ulJ Ք L-'iRmtj?$R й$t&2 91C0ͪ#ũ,U!PD!pyG{M2d"3I%># R|u%b J|5%R.(0G;xJO;+Gj*˾k3^40]5%`W_ ANӽ1EsqYplQ[6h/e8vS<,Pt|5>IENDB`rkward-0.6.1/rkward/icons/data-factor.png0000644000175000017500000000024612124345417017665 0ustar thomasthomasPNG  IHDRh6sRGB`IDAT(ϕR *AV3_;ɡ}obG'@uRD ciкT>z̤f[K-yS{3=YIENDB`rkward-0.6.1/rkward/icons/function.png0000644000175000017500000000143112124345417017322 0ustar thomasthomasPNG  IHDRqbKGD pHYstIME  #ԭIDAT8˕RKZa~=' [5҈(ɢeEV#MD0ftu3Aتe~)RD F=7<= TjnnZ$egg.2?<_=yC6\.W2v¢p$i6楥d2 GYYT*+3q8.$) b篿W}w;gffO惱,;<7l EvSk 4?^G,xUSoD_E.`|ܟIE1)'V$+ R͠IENDB`rkward-0.6.1/rkward/icons/rkward_logo.png0000644000175000017500000013642512124345417020023 0ustar thomasthomasPNG  IHDR\S pHYs;tIME.:&W IDATxڼimUUU{87AWlْAcKL`h 4 1 @I:`d : SBHtH4 X€n˚=H5 gCU?j;d9s>jջY QC)T-RTh=7^u%ATe4YEJ0*2hLy tZ6<pxmk.%g Yh&)yOkHg5 wNtVkQ.(JD`"k a͠3'jJLdyc0vT48Va&&U A64MTUN>Ux":K|e!kH>P5[R4:ŷ3%s"D 'Y%z%Ñd20FmH1 9@+QdZ#DrFf enbI>!*r# g>A$&EXSO~QeN)\5N̴ &&e"fDtA2bUvLFH 1Ò '>RAD 4-dɋ=lTqR3fPtGdR kOJDCFm(ddean@U,V&jE>*s/ՁPMAWcC{jADĬmCN>_k^BZ JC+m]d4'i&!`U 62ǽrˬEUU(sFq L4-YQ} /DPEiPN_۠L*ie:C O{5_QT%\ÄTZ-JSxKu柺u ,H 1=Z9d'kңagƳ8ku֨*Krfa5d!6-ٖ|V@ Y U1;㏦peH^21I Q@2H&^ꖋliU 90IwOp@ID\d"xFvP Rp45>ؽA/"6i->7pob0g1SZ׾mC""`"dHX%Mؒ1d yA/mk%OJ jbVXL|(H2kL NI[f#*2I*BUE;!cZ2FBYT{AΚx462_[ҴYkȺ_>h07*:89KWM": k IxE;_O+K"u.V%UcTAUqKL@f7q?;3;Q3 keªEއpu#F룮l/1SʀGP[ݵꖑ<X,PhdAWi PSx";CEF LfxXE}"390 kXC@T(sXT)wX2eʳ5ֵn)`Bӆ5?3d 9 z%PU5 &\׭3IW% Ak٭Xa02!J.4\:)[,:8wم=D\dKjj4&cEZidYUaXڠ"d uۭ*2cr}AJገ48ϗYrA|ih,LE)Y6R}'? Qʝk퓇lvd9풪㙊LvalAޭgm6<)eس 4s^ D,X6z)v AD}j D"!2L['k6,Zf Dxw@B]1"x& zZ"ɚ FպU(D;=9^5  sU f.,DY k#I}q%J , JkA:B1a" 7ӴhZFMK@OaKK!U@eJnGl^ sføF `ATjB0 "DQh 1a.3G }(xdzP_JT %l1KRnyhBWoLƀIIÉU>6MͰLNM*>nmCU1j$"6IVpo cKWnTT$۶>ܜզ{(;@DeNuT%Dhʴ֛SbhbmDQ zJLlm̜;ӪƧY::/YT|fg5BD)QJ.shȸYT*׺Af9wG̠ޜVj PQm9'L"Z&䴈[ ͷCMexJga ֽ+`~AquҬ#K8wٹ^|(m a@5AiKi @GqL?Y(R{AE^iTZb g] L8@@ĹI{2kv$qdVˤ~A3ya2;=~ALd:TA*()Hh ]D!YjT_!u4>PQyP(w:F99˻9PPj괦"j+(LEƢڴG4DxZ̅uKd BSO)w2- Q!Y DhtMA~Y<T~lVL+3Ĩ| L+eabJ9;y W4`$uug\Heb(EA id E,(!fb;(TU3>7> Q3jR'4UP0 [/̅s 8єJS5{9g6+01d9VQrR1 CV"Gmv`1)/ˌdLx8KbtQqucL`CȌƫP AD15HѺLErGB&3;X&&,SjC,Z̍H"}(9Ua܈id )B|I~H kv@lh2)!]`aeF5ln\:PN֐!"   \&F P$,~OcPQxf#CDѬDYd6I /F6N[g4?D\dIea0ˬn;FxDY;0ɴ13KL꣆ڽT&ߙn}JACKTO;n'G !ɢAh뇣Y1Y(5}*g&|rg֖LaEyV7y QBXDXKuCy<ø k;*sOigQ:h2C` +@+Y?wu҇OQ؄[ki%'gk,㝾L#CreD "3 !3+Kd-A֭*2 _[UM٭ LW@)֭?%&"F6z PBYCVb %Ss9J0 \Z. М@ݘW/SYfA[mlu\|svY&u*ӥ qR!H rxۘ~GU5&s;ɳc[H!zL*(iQ5(r$6` j[ JX7봦~X!e,W%,ۚkt}XMzIȳ-&ķ@"cma5Krn.!eC\˸a$DeP-3;mO!J2{2aWb+YNUj( cQCLbx5vEeH({~QPlC5aV̹snu>ji|,;{ZFSza~~ asPIIKZOΝHKdaF̦_ jWdLBhP%DкE&MN+ U;:GgҍFr8 9GeNb̙ainWaFui'u2GW 1-q2aan<|>[7^֞Bh`-חt2G1Mg^n6SGxNo]iRBrj C=ۏ=S/a/NkL*XU2nu;\Sg%E)k$oN!s'lBϻ jdV9 Бd窂,i1A!03au6spQ]d:>FsJkd&@ԴHx`iUCUM;b^Ww*4tkD ?ΗϾp[G}~??w~ᣧ]Oe_xƇ=Q4W>}G_C-~HM@HCQuJg!څ!7sHaI0DTQt U;Xx(hjGg@]2)phS ?gwS4r)Q<"dY]3i5դ4%wfu@D`\L , gIgyw@C1&CkTʵ=}ӭ;ou篿~|]?߽hyήcO֯󺓻9xb F'vj&-{_vCyv.om=c5zҖhaRךna6 Q}ުP`3 cUHmNpsOCMUP :CH4١+7agNUJ)\fG;=v3gzfa n>=T1sʶ' J. & qaif'!q%!)Uqˀ&M4ΚE%ecmqk- J8O8}լi( eR:vboUo,v`y"NJ@>p1f52w\\?n&9?#|^CՄ'/xjb:mܛΝaE澝I05r3Wn'.6Gڣ!jRͥ+bV_$&\"bC|*$dBB5%Ԗd?LQUI̟)5C[ڼǞ <.N;  '˽4o8{r/6_>lY?;^{*'OG yq|om0zϫ)B~R96Qw]sۅ48.s 5av&̂h!VqZzEtp8vXQi f>`g8jL Pf)w&HѰ$<%/s;[0T:*N4p46Pf̠{EwzoJ܄.DD1jƶ!JWӷ1o@"*ږ: S>6Dt>rוGrsM}DFQ%B}kO3G"(#d~h RxKΐk/ txoƾl'i+\~ݮ;?tEƹ(c{jZ?XLMx|֩$RU\KG{q=fɋCGσ8 CRşE,Dx TWKɰ?t g@dpFV.K溴7g+(wK֌NoǗޏ=[/ann8yFg_2|M/Sl~}rv_wa_|?7wp<7~]yɍg g{si.EUHYܭLE2!l L?7MUL qܦ4ucrʦK i|W7VT{YJ8w2k㬡07I<~#!&jZra2dV+el?svJe4e6 լHI I5%|i#+&>{?r|kMƫB^!+Ϳ;W'}ʌ6PP9}Gw >2Z}m6Ibk'fa/EWn:[o/w⣵+Ϲ{ӹMנ0߼_{p_~K'B-{۫~?=[l .4&#*]Q¨D䌱JqK,!Ɛ5R{ ϢpvǕ?MLienå1.Y0%{s hQ*压,AWQE(m08ɴ*C!iĪw 1mt΅ ,F!HFܟ$<_E6e%#gnQ/B )zBکIL|{r)sdM*DW24wj+/㳷CO69&Kd-Z@~h(2֮9oPwQo閡ar4 z"sh[/@긌af6K_ڭ\fw}ɍEfNaίߗ "bԨ ;IGHri"T0֫ד!ʬVmlNW0d8L*HP;l8(Dw%F۽46Kl]\$4iUr+`:"JU ט cjJW6V-g8&&Q6>e5q[ڼV*T@YMFUTu(s|<ht\i_3't>2d<c g+^xn1۾/ʭ tVxgh;R=;t/a?q0>QŠFf$9xt_p?<~6W}^",fXܖfJ2~i=)g^G0q-UFe6 pض3vs?UgPhn^BĔG0RjL0`/)3#YyUqM( z2mj׬jevnU1#2lL*"2i_ӕx͔gb#M}tiHFOE-/44"Q%s4DTgʿ/8y'(3cjmEc}}zY$)a*s.2GQԬ#3;+_4|65p.GS?UrXI W(Mۉsc?ώ>p'}UR:q?[_Ƴ|se3~6jiacgӴ[o?.஗{)sZW]99#u{'=G=ҪQhPF_~'衣.dݧ7/v{?tM=_zF7_+vk=[/~"coɏcUd/ o=e\3!s瘴ƫlB\\d* eVCVh96-)JA bF2HDX r48&eR(mj!\%f*D3vgvk8JkxyB$2#16Y`QRt/:j0"E,泣~{| ʭ,Y+VϩȠҕWVe+ "k̰Xwa҆8@B@As/_4(6.2fXqT2Z6DMghD6qW맾jv{]jY8jrfo{.kIU$A}cPdVT Dr>hRbwG蕤JvEN' 1Jko<O? ѪLfUx, W-A=;te2 k]ꉳ)Lr4n̼kx0ϯuKcxQh{pXVM]NŇNeW>{>[H_~G7m?'9XZDdܥ0\89 3(nii/G3vxq$C;SjJPF}O.^qp\I:O?8{j_qUJ ОqqYY9>:jVG;vMg^]>MeΙK׆i}+μ7ܲ nCCfλ)`T -$o|puAH[.f~iAk/x͡rzL[8C0[C"ΝKU/Dr JMG`zg.#iY39>_q̖ndh/21)q$yfL^B6Kg YJEnq0JRYyWzùΡ(.vs@T]QдO^{Й!0A㻎W񾆭Ǿazmeνrw[wn҃ΐ9M]Ԡm3w;o]*a, {~w:5vA[wsIMMԇ8q6p*U\ <Ȭ)홁;3{}*쪶̰HbJ"2˽9I(Y6;%1h"d3/Vr3bS˖j\I!PĵQʈ:iZX́FA.ۚr"0(1(Q$.:K7]O=c45.G) Bׄm{==Vvicu\REFStGxuKy=wqVE޲bxJP&TdKCr7l)򇏌dN iu2Zӗ׿Uwl[1X(X>"ȴ Og]{ۉբ10L[KT|O(\ɮ! a۵w {vOƞAt/dͅsgR`Q9]Lxcq}lT; M>h|b= LMAJl!&6qjw1'T+fK:^R'1nq((|?ӽo{{_,9턘/f$jJ(uf|۔ݜδf*UE*ʔ"dVБݰ_BḚ{8mǞ 2[TڇLkڈxԓiZ XcVk2~I{CLM ?PRF`V2T`{]{ 5y/3_=O羣k :~2o5E̒Р "X37 [h4|gݸ{xFgGӰR ?֭1YRI d ?۶ ~w}'uEjcOO'ݗKkޏOg byPU#k읟~ocS*2I&gj/>CO&&mIa]L!unA[[g')r0aZij08j䖃(ZPz_MXӫV&m|ZҪY$$^~nz[Ft\o,5Gǜ;svǜ~Az{׿9ۂI𠄨N+  z0Za "T/m]p g/͗IP bj]P^x|K,-gP6H aJڸ%N8ⴖMs1f{mD^soy J5W9IYH[W~+sbf%V@JKQtegjRg gA @IbQT;KB.3׷;eK:#N*ip'qRkK?[gՓ|JaN-L*n7D6nC+4ڰ'Bgv (wPJFAi1h FSq)CHcLT Ze:n1 QTq?ol =љ+gIYVU9.|]f.k"mYpLWO>V^m5 ȧG#oKr4idvK.` q5Ƙ IR?S_[DV7rNĜB_HiwFEf"]8mY{q.MZ3RXq+쿼Wro H lOdSF?W!&k1Lںi]>D"U`Ébq19#xf;`wAoiŰOgv(Ge" 3O1Q 9$iE΢,\Z_j(WPuXaϏu[ˮ~?_M<όoO,N-k{?2W^Ƒ_R#mdU oq_8{Ե5PmvAJUbYHb㥑5 7oGKG}Oܗo8sj*4i=rKS~p4!Μ)]'52 B9wB{x>NϹ-2Mjm`,8k8bbq]`A]kR&zk֕b]zAfd($C*y Rf)d,13@DUiӚEE4m⽯`1lG÷ywREwm[kxk؅yy5jSae~htpMn2[_5YE3_atHDC׳$`-mԞ9KdV- KҞ'X-F/M8*PQ]c@ΒamZd#}Wu"C둳~ZqjT!Mjvyz!8wIemϾ|W2GRqJnd4[xTOc/ڜ.y7No[- 9e/sqLW>>L7A>{ vُӘ̸x`oTe0"*@Ep@mAPWA*j{HEi[-8fH) +U}L{R A>OΓ:kw/~/fGO||NqHj(Ag e.+[qOM㬑G=;Q2l7zZUpBi~iORS6A6;HrR6R m@\BӁhn0&p A:H9j$FaèeɌ!{ ylyy$D94D9²xD\Zg6Urrp?|?K7rن66^O3/H/`?ׯk.J4:+H( 3~Wg :>׽᠆&k<ؓ5Td^׷ۿpo?xG~Oڋ .s?O  =5ӺKd s/UQ mZ2Jm(KRC\8=/>m'' [N4_:vJ]ԈJ⬉e#¨boK~d:yI&D3nVD(LTq cp$bB0asH66Aq*>yĤuB̙sOtOw],'ዷo _C4`z5уNJ =ęm~~Zc}{Pƃwrw]ujzP_\uԲ2-į IDATq'LQnc)]<՟/l^k'ڪQ̰==$8e~bs9n{h6n{H *GLEf7z2knFjaR/lUU(e^; n F3\! ͔ ԌqG79\e*uNq{ˉ$&K]1AQmиgupFFDiַQ2_PϰK/|gY*ɞݙ6- <TEF'͘DKm'`9zY%;thj5I n`râtiI+VX%ywyޟ;sH1*̴~u7v(-b>C{`C:ɍJPBjt6$O{%,knqX5ܩʝZ c7G&T4L8?o3*L+ٷ^yKTE w">I6qRgV %N*=r(ⴶ nu7X6Č#%h>;IOs⸊u˙h,[0#+k2kR!C<̠E1)Q""F>ϟ8,y AsT vZ'f"Tu28sdKOuW撬6> UYf2[V)"hcZ{jAF$lȩxhbʙ3__<Ѽ^xtf2"28D$0 ۩D&kshDa9.N*DTA$]8P‰ԐYѧJ Ut)QcH89: pb"Md_Bsv;ysρYUaM89.8j5D3@F_*iýsvBڴ4AbH{b#)(kgu ,%׾ܛS |B5@jsp%41"Եq,rZVTTːu<HfQ5!b vmZ@#UGLq/,JcMY" I H|T96&=1bm]> S0]0iX2ra1^QUc[aT TT !gܡa-wiܶ u@*PB @[p!*PAUD96QTT6C 9sRF Qj"d̚3K2s?SRR@`Nt<.l-6pީ`d(LX0iHDNCDb7 M"ڣgZVL |O 7XMs<:jb;}{91ɴҺ u˖窨6->֫N;r@z-/@hٙɸ-b6^[OECZɔt0^^=rmmD{#*:hkKuN13&ӆȷ kL3-ֳg䌔dY" lY R{ &ĤA$cpw6xT~'<ȝ5qچS2l`9Z [Zs5u fUAd8\d흥rҞ.G)΄Y Ϗnf4jvByn3 9 dN+\LAK"įd (|TwVƬuz =YV-TT5qKa8YTޒK2BuuKncaʜmm:Bcq3DaVPb0.lҁ+kߐ$vZ-XT$ A ]Dek$5r s)QY!hTv uF Q9β(6^Hq/?1r6e(vEONé 0=HH)d Ͱੋ;rbJۣH3U[TB2)7ƶ/ٙh dP&f~i=Ӫ뒻ED At≷9S;Z@R6hMų_TwZn%F"1Nk)[3=3A#NSf`H@nF ݙʴɏm~&!'k_84hb GHcV"ڠ~AXNRZ֝S:1iBqh o$jNqx1fגWES1Dؙ`U3 SHGuֶUE0h b|+@_(ဧj ` 2zGƠ' $+EfUl(A-XemhpVӈΞNgP悅y/hV-Xh\ז_DtV[2ECɜ R'Lf2y |u+UCLՠ-k4-D\]> Z*Q&H6 @hy%`tZ.Rw#]kr_/ͤn tXhb 3"-JZqqn F?q /QsACegcʐ$d }d'w1dM9[PL5EC.(!h43N9]E|!>]8huz99d@f2tV#F8<d:ͿvBfMKܚP ѪkQ&N-x {1Va!䎜M9 uͰbX}Y wHEh|ܙGM`jYlG4t)d gNf-$&rG#5e5 Y2`e$4&踔(h$FȬq"'3e2-F#+O(kN%];W u)4=[e\89YD&1fdz9VB7pK,"3Ozg16-DM 1.ScrVQ뤤ErTȺUdzjJr9Ԝ{S 1&Q$cBlٳP g>h+@A/QXF%z7x8 khIS Zy )۝k[e-uK̝!3aNJT(4.R|Q(sL+IEF떜EzI* dm=u3{oAQ5DZ3Q?9twj;wAMOYlHӪJ269Ët>$*,eiȕ˟6gٿڜAE)1ΫMif0Dc3pVWݺ궓T% bĬVH)'KD U"ϨtVNImSSsZ@r<Vkѝ@y2i y=A,F=XcHxJtr = %sE9oJWOoc/zgM<a-c~Q_Wr`\p(rOnIqzTڴ(Ϊ %mZ?EO{#?A^A\}@ۊdiPLďns_>G>$nq9l1ag̡0 o> 5^EJHGPk˱CV{!LNfdC:QdZ$ZάSgqӍ%W^֛J^?7m Tʛ2 AEnǵB87f kq!S w^{Re/W]H dGa 1@Q{_mQJ%xzy:JZC;CYY*繆O%5i옻m z=dS0 ui=9֓cni4#NNJ7"Abn~P~5fO'&\x[}}E_ё;5 uW eѧ}O:gX#s>}7߸16197OyO_\oO~'>xkoiz[o|__}k)tW>yݾӾn+>9eϺ)hY~%^kοn sr꯺qj?z ]~F?[O~~cu;2 adG^~aGk'>ŲU>d:}w|\qFCv<+ lN _k%Q{X-dNx/MD؞6f"`!Z5)~J4hkiLS T#LD:XkYO9~Aܨsa;mw?K\@zΦ᣾=?~0}Eq_OM.='?7s;Y,n>9 9n~ƫ?I"WI;$ =}~ _r7닾)hz<;kkz~o\W /2/KOheDM{vޫo&p_{?a}x{#a6ksOlS֟pSonl|yEߖ;&5bsnUVb}\2xKf=G/}?}c>zbmxewC>pt 7?sگ}nq;n: beH:G"OͿI4D*;sVq:Zu4KdIXLҶnQe,}#Ig%,,5&m&zWF}3;D`ұ:`B8A(rZ-EEӲAZ2ہ&<[*)>v?p~~'w˟{._u_*ͷ\y+B͵'#?|gsw|EoŹ3*ϾƿXU#ǿыܮFynGNY-w|y+;'wO+}ñb~|1=xC?wrG;]"c?7|O>x"h\S 2KtLs/ξ;/u}^z*W~Ǿ.Ԍ˟ o>>7>%}~_~O~/aT$r!7l̰$9:p~mW& \ 6(UU ̘E@̦ںjܞFUiIk-9O* boҨ5A07IqbWt4%M[ChN`R˜|,еEXs̔;iU=KzkT:BTAg<ЅP޵g<Ѕ՛?}K6|>3 '8{S}:'N2HɚV=TΞ6\_8DU!o7{Sij.:>d;W|Fɝ>šF:D''W<,ݕqZ%8$"{X43KhP/^O=Q7O~frӝ?; i",jl {wHTά1TX_~$^҃lVKdΥ"mO1jUu$T6iϟF vovMؠW R0L T䢞Y,l#[zreЙ[^|!e{$1dl2GUh8 3Bݱ|<]9_}M/7Φuu-+7OuLE{p{ƒFo~[~‘ e aŲIש2"Q?}pzW:&[= c?򃟛SS_#/7F}/w_+~RU|Pu/䊗?D!W^7tû?x+TQ}1Dd2mܑ7o+ux%o#8Onߋ&W]^0\qV5dsVH'gj8 4VkiT*wiԅ!!egxXp/[_sMK.@,<-YUcTcČMo_1dl{d9;VC mgtxKE[͚#0,NJf ܮ[Ag^*&Md͙٪ͷN>K|+ȭU~jw~D+WzqtO<ؚ:[Ɵ|Շ=kxA:>'j/ƀ,˘臨>}r÷; ڈ B~g֎U}S f9?kCSvGl%U-=Ï05sC[.,Y{hhvk3wp3ɝa-WM0t6g֌ wGa\Q6AU5J"?9 Ul\O&MU QjJ:0. g'wnl9p:|se|~G|u7R)xg }9-8+\3~7 ua_\wK'}й=gۿHJ{?чmfW{|]H|Z>g }c9ة{o>/M(Q ^?wрF{yQ_wp|ݭ2]PԲfc ;eegqw|ᙏ~Vۥm;~ ?싆tov87Ác!:fQ 9dMH;_R#"!"fi!~w|VWg <} Q;Qs6,?w+?ozVx| ST5؝bwi;bݫoww+W_RCGtZ0bwQuLM޸{x( eRV!Pq0((s +DkJ<hD5AkHab)k_rǎً~3o{2'Ǽ~ⵏp˩o[_qY{ӏx{n޺>?cZwt^~t\ſԞ>zlEO>v7^ŏ__>G?qف`s+w]}궝?m?6A~/oL2(ov}_0[C!8z4kK w]:ixoqOy?eGϿG?} rY1R:Clag3$dEUj%w\D|JqZ!a_I $,+T VUJf[pbg ;ˆb!w;`9uAh{~PAĽ{zShx IRn;"'kWPgXpwq*Nxki^ې䘜5!Yi(LJ$(7G4#$ Cd,Y5";~؅\F}OV@2Kz\skfi:ENr.AZОt֯{'vV膻HE?{[=79Ͱ{G7Ň(ۛYV-sC %"b( 1%G۫&PiBs|&Xl}QˮMJ,\=L6 E,rJéNN40[Y.^HGm85`x50ޕgls椮ΔM4g_8nw8 zr`^;-;A'%B[ ghu攋ܐHZN6?#;K;l GDgU֭NḦ>di>/f9bJ`<ƣDX"3ˎ*2ު!agDٙȤq ^NMB1¥x]i=aMKJWW0%2yFrwn\uXC~>;̩]OveJ0e^Ada,]S/)Z5ȆQkni8]߱Im'yyzfRv)'e3$(~0t=^59fq\rnϧaTԞ k匲́esIϓD=[fܛlٔ!pj>C&=ffܹeUCy$C +QtZ% a|-N ߭,88>8zPfNie Dd&gi'NJWQZB:;+ @58! !9k ^! uY1TE2#NCꃎK2ãm يFјl_=u(u}JeA|V/3}ݵg4il]kߡ16_GUIecyAY.C#!I[2kdZ(WQ ‘3AsF 5e3,I\ q/#g$k⬑IP28ªރIijQi* 5tQ/{@fa-B@4xbA %vf8E0-BZhT9{d>P;_~UGcry c)w Q0厌Qݝjh5tGTr]XrÐB6/D- g %|tDMdV1@ˢZNMUI{ՉX`]}9m):]fw~t)LlxAp^":N%k9p&h5!ɰASkИE0ubCh4qڨ(B6hn q?eKMda;'1qr/34`*lkF,gJ}LqbEED A[*$9߈*)y4T詉gdLrpP֝aZnisXdxkJ ]Mub r IQ?YDF0SjϓH\g77ߖGRV`ZkȺB77ʬƠ1ڡca9Mm5Ah.7BKTfm*AʊbœBhnt[usm{9Hyl:$kx0༘ nl._uZuҕ3}=1AY`ҡ.ѰF}TkhQD G/lYAģxI9+жxnlB9)|۲!&8C卾L+!%2F2SΔ;DԳю氞PrZQoQ/YCw̑MrL%V$PM`XPx)ىuRSz Ymk#Vf֞_5Z7)`̺u|"U(Q3gM,̛9=gLt}o= DKUzPzN3KXݒ 7#Qؒe&PF0MǕ"v9DMΑ1"RnB7GAu&a*rNĠ YEdBZ6 H0b z([ݙvZ)gx{sUM_1"&~{K,bĤTm+NJL+!c {epZ.nXt`;eB,_kKkFB'+D)FϱB >p/aeV5Z) zne{s|Fd:ah݂zj򞀴PQ1TQ6qV SgD Jt B41Wݤ}9)hbkW;_iUEjGrfmaMn4*ŤOtNh-f!N=vxVmH{gP0BDZ'jh8 1s%Rk(:{;-Yo/Ӻib}$`wigŔ8 c0VόdHq|"u2cL'FԹ׈][Ԧؤ F3yzON˓"z9QM:[~CƣRAͭi LαuPRnC9f*1LU򌷆&;UR8`E!$ʝIu5TdkpW *D:$1*6E 6J+-\MCaQ;d_%:0Il.h_*YoibCw_gΨܥ{x=<% {6B.mRQU(XSIaOONtRRi0!F t5-5؝bVw9s(`X N[  `YiEN^ʉ! v,ڀ"rD]K9W%tŊ3S6s);c7v:ikU<ꃉ@DA2*eVK=F4^F{eLI!L&:d XLFhbVF ņye>EsNU4 ua13l;7WNi{y%PfƠē!n蝤wbR_Sؗ']لs`k~(Ѻu+K3$m@|zB<0jM97k/csQ)m X!}0yaк.2Y 7WIp:7G"QS.y#E9-L#{U\NVw*LŅ] N{y)/ww7L6T*ppULE K]״ZN=*p˴,uYj>/:.$"4 {K}7|%w{{ܐ|m<۫jop=ߞO:-rh &&͎bFe}6+Vo\XrGWpRTFeW#}hQY=?5*<YSJEVUŷĤJ>uLaPH H Vm|t1q73y Uڹ%\iױwVE--R uX JAewTRY$Dv0Ku p)tSlq"@EʛmN<Ƭr_9u\%UCaX@9#n.߱ZU+_Wwj3I,(BBsq%q$igۨ=O2LۣD5mfb)L],ƽcItC$xwUhNܤ.:DG7Suh!&Y)ּ`H3v)ǩ +rߨNHy%˜nAd8D4,EK[;]}t](ǹgb! KO'=u7<(WU#DPDmHe3&Π;@Qӂ*bH+@6g)26ѵ1ŝ:83Yҟ?l(Tv}5WYK[Ӡ"rQQ: &|~Jj=Or)|,*rRᘈ+O+ZQo+ OStՇ1;憽W,8R)D1_M HCp]q1Z|>y/#D`1-SkpR9{}=NV;#fysŜ4emR]'T5298bhu -iAaU۳@_M)4>~w*7e"]9iv}+ We\rB Ȑ:-8 G1X.iuL?mk]d /o8*; b 2:dhz]BkO'8j8r} YUgжR$@a,7{%)-<Ҿk9c-ZMiQ^lz#bu3]t`cE@^U"/d͕}VS wr!J·}dRtt伀HmQ*!z+j@񶂨fzS-\2yq1Tj7ncvN!fYaʦPiT<#/7!V"al?չA@ۯ"mo:s글!2,2{bPizC)dZ0/6,hӉU@^ϣOyrv il"MHIђQv#:bՌ1Fm8w&+k3A1t!RD/ʗwAx\Pn[}"5n0i§#D񴻭%o` Brn} ̗qUU( ywі൹bVEZ Fh߀:GPȹ $3Vrp0e x=VrhtΕDBu}%5BF:/rAkqAY^F5CswތV2jqҹ׈U]uq RUw|LQl(~:uxAn!waR6@# @ȥs y~ZGp8)Zh=/'.XժM\AWGSC:V cS1hrP ;b/' Bx=fZ:N0YP'ib,3:ռTDZTq< Mm"ddL |/8M8M9aarDJpNȸmmUDd^ZW*]1@*3p@]["C%뜴8 =;,Y^Fշ}9 B zù-Qsd b\vdA;fYO3 SsA=1A3fϻխьZ?qagNp 3wibޣ4 (Ma,D$T,"ktqtGVMAL"kd^K|qd2뜚_C K I]D_`rܟԺVVqxzѷUJsfz& u8g=w6N Mrxx} zPϻ[)8/8/Mc0ܷi e8B<=|&p R5u_2kjK.Qrb:b˨}#YZ$p6)7E=M_\ ]]w<5AK+y\iX!xGfl}r9pSTWf)Mq>w 戨 +u!Lt9˯YVu):z%@w&2ZGy1m#vgtD(RhA3h%5؛N|~tyx!Z)GЇ}Kl>pP*b@.&qk_d#CFia1-|>R1eBcW]I47GxveF}9ϒ%)X8w9C̶gP_-Ud)"B7˜ ʻC&tɦwfg(b *L %I[`*HEK!65cP'=y*ǘ0d3VuY礩HcAR1 Z%JL; Mw.$ L[bXIQY߯_o6n,n;I551̌Z5:|^LcVţ~'5LsnSǃs*[ SB1:69#UrNsݥ5~* t=Rؑ)G/Ic\1 [̹S)cp.~"ePX˵Y*D}hFݘG&&ޣߒx'8(v(EwP˩BLZ@fGmvЩjiƀӜzu.ȗ|>̿>YKR?=ej )u=.1bN{)u['IiZ"V; 'b? Yl֦+Puø`D<#|9?{#d"dZ.ot^t6^Ae;[WBRW>=4]2M4U0k*CkYoDC|Ww.qqcm\Bۇy 2WSRߪ&UWH&}C}G!DQpZ%UjpMVKED]lߢUM^pSܓܩ]Vj.NPDdRᓼ ܗ+]⍨\H8voDb[;=ֶp}7*'62JfqAf;M0qdQYHLPu6Eӄjbd 7cL5q Pn#ӝqɔtM(xSH*R+Df'f^4xUnv<T@B8u};rN|3_L_v\\EE>$Q NTEnuFR,g/*zZ+ukFpD ʒ>TLeNrTRIp?݇\t˜SAGoPMmgΗy]p[3y#B祤,66fۧkAy[N'O]r/OVeTNnG20#:|9ˈ:sa?1Xz ^ uT1L NB^F e4S)#Hf*j־œfVB@~GϦHk[JRuN2'(ua۪D:.o B-|xUs#ZQRXY"CS)5֫^\42k P5"];}mG]ӄ" PGshV1y~;#TR"?GftRsQ,0}@̴0x!t Ԕy՞U)\jUP?nxwS~GN害Q6\Ln[m_V!>Y3RPƥ2x|طH4o8K\tNx[L8N0.V]2v30c\ki Ҡrv gchXK[}P`xIr{i cesd"%`נ "_FԲK?)8CÀ*:.22ԅv~>鸀Iγx~{~#"S#,waCk! mtk~PT^4x)!.nG>ZVqt\ }^o2*=ZbēwtN:f}R (!":y9I%rxV)uq8KPfUժY;ԗg AJ$TTTSClHK,ȝ>21HAǒI3UETDquk;|ii!FIoxIDATdPZpa8ˈ\v=>pI. +L@eUG+H[gd-o}@h^38A/y#8G];QmB0!;ڝ|}6_h^ lnV~*xpB&u?9-LPyDXL 5.g-BLErk"!1i},E^: a!U!OJ-:. |u4EOAIǑmVwK%jىhЅF UFU%Y9Zf4 ӈ']Rm5/'RVsQ[G.`kl+~IcBo,pSݔj ;C}!z7D)8(V""7k-j"t?8"L^ N~I2;9.}8teZ Um@}WTƄHHQ{ߩD"KqbVRJ՜$ԒRM4Ffsq1 qRdX2fVsc)>8QW;vQ|Vi3<؄w= )ФU'$k~G=&InyHEM(ywMzUTxmXQw4_翘,)x%&%Jc`ʧz=];s<@% T:U/}iZأ5,DT9*JC%ʹV=Jyђ[P+ |G$joKMt9 Ұ 0`kF`eKV r+YXTxAMݳvhY} g-?a|˃Mi1!Z4WvbZo|z?(l{?5M<"Ԍ`ln69Ƚ\-sѱ㕼c<i. {ovR$F2eCl@ LsYOd)s.g NDq!wZ`!zLpM*l$!xD+m֍Z*G*{{"tN82=VvcUQ#F DOJnQO<}8z[xoZ- z4,d!U"krUTrR(=n;8X|DwGM;᫁sdŴʿAd8ReI%R=H-8zckBm׋NChwwGD3&טU5zZF&Ţ*Cm s㋋ʆp%~uc[;#2is"#U&UUA),5eiU=(Z>fgP hõ40p~yVӭZj{ͥl]]*~9Ӯc Lvb9DNw7qp:͟CaN31tmO]dL;iI=yPq힚Gdo-fbYw ThN{NjΩ$TMRbI==v`bE#*bTdMun|c-UKi-45B b-1Y,zA 91 ?I2.P(ܐɯ\6ۜT X(&,]赹ZVnѡqHqZP`:=Dӂ;ctS"^C_*Pd{rhf 5HxtNvИᝒƫ5z:O]Dԭ=wgc: K XkC)k7|<`Zeov=l/WO,D:%,jWo`yy;ÔTM9z5<|UsYב]s]og2qdZИ&'ϬB BL>T*y<f#DU*EB}A4w< %ϣ \RDYJyt9;|4L% %+)Rr"*`\| l`";ءwCWk:Cc@ & kE`;ӨlbJZkLuJMJ}Dl{JsGp2H??Hjmm Ϋw!]Kaӓft11\B=Q@m]"TwVAѫ#@dr;``ӄS4 cBFV+xri>ReUPU"X ͕:op_:}`%51ks(s젪wE')/c4rm{ʔdj*֫\ωfԤ츊T)- J,L ܣTcg&ѓM" [EFZ֊܊5(觓3bS&wCG!*P3t0-8Mfr”ksuMΌLJ[d,dzh{TF RY_w's1h (NT.chCZeLz,5;>X6A*ˆ愪f fD㢵"Z*#DDޙӮ,E^μ_;L`f$[* {d4W"gQR-/:-~aUP?.H*zt|A Ț>MH)9>vP%ϩfQUrd.@ojՎ??F"&<cgQZRCOs;onŃ}\PEScEоG=;KA&(0Ai rmţَXЦr}I!|gCǯx:S﯄Ͼvs_=_? szڧ"&4DY}]?s`Oaױ",3Z0YGE(F蜵OvYVH3qv]yeJ䘃#ѤCh ]K e!}'4Nu.SM9,cTUG0Ջ]Sij_[w -҃19i.1{(#'D[?x4) O\*f* :>bZc2)_lwȅb{k Q^֫NWEǑ3Lj m9,:=Nf IQu9nTtb DoݱJ].悢Wu &7D͵՝rF BRS~7%kE-3'SNrXhqT18/yD* _S9-@*#7$u^r, D.EEރ3 :IEmԇ:N 엜߳ lf[\B]?6Oi3ĻƤ *8^+ Vp!cIt\`YNL9_uQ?a6 q܅?ڰ.*MroSM2IK%I\1L:'W5`ևYPU"V3-j*Pd)diYR ):}Wu R@H8HS)#Vfxm)f8.W^D0j"ER~Us7glIENDB`rkward-0.6.1/rkward/icons/run_line.png0000644000175000017500000000076312124345417017317 0ustar thomasthomasPNG  IHDR szzIDATXVJQ=RzWGm %A=Bj6H j] -LH Kst ߝϙs1;)IgHoWI2E(. Xq?N}vDipO〾8 RkIe? UCrYYh.yGٖ΁Gn7@+` \R񛲃g_] dLJ!&$Awk^Nl (KU@nMxÖlwt@;sԠj{MFKT±$ tbs785`5%Ox _/ ^5ISڄ$YIENDB`rkward-0.6.1/rkward/icons/window_forward.png0000644000175000017500000000147012124345417020533 0ustar thomasthomasPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATXŗn1M6@Jz$(«PQ"^hQJ7KCE4(6]C1xfw6ʊu9~׉q<}㑩l"UTya^QA"Yu%O?|; WY]Q7)+RFì]Gp\oU؂>S` 3ރqhUAgjUo JS,Z@ ٛx*xIB2BR'Ԓ @ nŤ2DQb|A^ (ýe~b?IffuYhB >nRdBIն$N@[Z6a'Mu;u/A演z{Q2%t8r"+"UnIv^5(Cn,pŜpVj} Zˌ[IإEoլ瀪aJ6I%hW(1i7 +1j{V1gV.0ZL73RˑLl?F<#,vLRbxLO{@F P |:ɲX1ViV5yR„n>"`7 zANx oLQ,dfX}5;~%e8Oh^+:6 OIENDB`rkward-0.6.1/rkward/icons/run_selection.png0000644000175000017500000000102412124345417020344 0ustar thomasthomasPNG  IHDR szzIDATXVMKQ=Rm\/\Ԧ>0P6mD\ EIXj&nq wλw `y`2`/:E !3D<7ОLSv&DT:P 2:10N}@D'$*ex&5Q@ X- i"aOgoX :&`oK[ bo[5yU'cH^=ܨ@1\:d{#Z1 ~֥@ȧx2d" s!'PE@8mdSmXMm-d]h7|Rx.$>_֊p]p %@..JZ U/ٷ$ziwT5"1gnv5ۃw;W0gO +dIENDB`rkward-0.6.1/rkward/icons/matrix.png0000644000175000017500000000014312124345417017000 0ustar thomasthomasPNG  IHDRasRGBIDAT8c`hEXQ`PջIENDB`rkward-0.6.1/rkward/rkward.h0000644000175000017500000001654412124345410015323 0ustar thomasthomas/*************************************************************************** rkward.h - description ------------------- begin : Tue Oct 29 20:06:08 CET 2002 copyright : (C) 2002-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKWARD_H #define RKWARD_H #include #include #include #include class QLabel; class QCloseEvent; class KActionMenu; class RKTopLevelWindowGUI; class KRecentFilesAction; class KSqueezedTextLabel; class QAction; struct RKWardStartupOptions { KUrl initial_url; /**< The workspace file to load on startup. If empty, show a dialog asking what to do. **/ QString evaluate; /**< R code to run after startup */ }; /** The main class of rkward. This is where all strings are tied togther, controlls the initialization, and there are some of the most important slots for user actions. All real work is done elsewhere. */ class RKWardMainWindow : public KParts::MainWindow { Q_OBJECT public: /** construtor @param options Options from command line. RKWardMainWindow will take ownership of this pointer, and delete it, once not longer needed. */ RKWardMainWindow (RKWardStartupOptions *options = 0); /** destructor */ ~RKWardMainWindow (); /** initialize the backend */ void startR (); /** open a workspace. Do not ask whether to save the old one. The old workspace is deleted! */ void fileOpenNoSave (const KUrl &url); /** open a workspace. If the current workspace is not empty, ask wether to save first. */ void fileOpenAskSave (const KUrl &url); /** opens the given url, assuming it is an HTML-help page. */ void openHTML (const KUrl &url); KParts::PartManager *partManager () { return part_manager; }; static RKWardMainWindow *getMain () { return rkward_mainwin; }; /** (try to) close all windows, and ask whether it is ok to quit */ bool doQueryQuit (); void lockGUIRebuild (bool lock); protected: void openWorkspace (const KUrl &url); /** save Options/Settings. Includes general Options like all bar positions and status as well as the geometry and the recent file list */ void saveOptions(); /** read general Options again and initialize all variables like the recent file list */ void readOptions(); /** initializes the KActions of the application */ void initActions(); /** sets up the statusbar for the main window by initialzing a statuslabel. */ void initStatusBar(); /** sets up the various tool windows, and starts the R engine */ void initToolViewsAndR (); /** reimplemented from KMainWindow to call our doQueryClose (), and then (if quitting was not cancelled), invoke an RKQuitAgent to wait for the R-backend to finish up before actually quitting. */ virtual void closeEvent (QCloseEvent *e); signals: void aboutToQuitRKWard (); public slots: /** creates a new (empty) data.frame */ void slotNewDataFrame (); /** open a file and load it into the document*/ void slotFileOpenWorkspace(); /** opens a file from the recent files menu */ void slotFileOpenRecentWorkspace(const KUrl& url); /** save a document */ void slotFileSaveWorkspace(); /** save a document by a new filename*/ void slotFileSaveWorkspaceAs(); /** shows the dialog to install/load/unload packages */ void slotFileLoadLibs (); /** shows the dialog to import data */ void importData (); /** close all editor windows */ void slotCloseAllEditors (); /** Reimplemented from KParts::MainWindow to be more pretty * @param text the text that is displayed in the statusbar */ void slotCancelAllCommands (); void configureCarbonCopy (); void slotSetStatusBarText (const QString &text); /** Basically a shortcut to slotSetStatusBarText (QString::null). Needed as a slot without parameters. */ void slotSetStatusReady () { slotSetStatusBarText (QString::null); }; /** configures RKward-settings */ void slotConfigure (); /** Add the given url to the list of recent scripts */ void addScriptUrl (const KUrl& url); /** Add the given url to the list of recent workspaces */ void addWorkspaceUrl (const KUrl& url); /** Init-procedures to be done after the exec-loop was started */ void doPostInit (); /** open a new command editor (blank file) */ void slotNewCommandEditor(); /** open a new command editor (ask for file to open) */ void slotOpenCommandEditor (); /** open a new command editor (load given url) */ void slotOpenCommandEditor (const KUrl &url, const QString& encoding = QString ()); /** close current window (Windows->Close). */ void slotCloseWindow (); /** close all windows (Windows->Close All) */ void slotCloseAllWindows (); /** detach current window (Windows->Detach) */ void slotDetachWindow (); /** reimplemented from KMainWindow, to additionally include the workspace url. Parameters are ignored. Rather we create a caption according to the active view */ void setCaption (const QString &); /** HACK this is only to make the compiler happy with -Woverloaded-virtual */ void setCaption (const QString &dummy, bool) { setCaption (dummy); }; private slots: void partChanged (KParts::Part *new_part); private: QLabel* statusbar_r_status; KSqueezedTextLabel* statusbar_cwd; QLabel* statusbar_ready; KParts::PartManager *part_manager; // KAction pointers to enable/disable actions KAction* fileOpen; KRecentFilesAction* fileOpenRecent; KAction* fileOpenWorkspace; KRecentFilesAction* fileOpenRecentWorkspace; KAction* fileSaveWorkspace; KAction* fileSaveWorkspaceAs; KAction* fileQuit; KAction* interrupt_all_commands; KAction* close_all_editors; KAction* new_data_frame; KAction* new_command_editor; KAction* window_close_all; KAction* window_detach; KAction* configure; /** used so that if the menu is empty, there is a note in it, explaining that fact */ KAction* edit_menu_dummy; /** used so that if the menu is empty, there is a note in it, explaining that fact */ KAction* view_menu_dummy; KAction* proxy_export, *proxy_import; KActionMenu* save_any_action; QAction* save_actions_plug_point; QList > plugged_save_actions; friend class RKSettingsModule; friend class RKSettingsModulePlugins; friend class RKSettings; /** Finds plugins and inserts them into the menu-structure */ void initPlugins (const QStringList &automatically_added = QStringList ()); RKWardStartupOptions *startup_options; static RKWardMainWindow *rkward_mainwin; friend class RInterface; enum RStatus { Busy, Idle, Starting }; /** set the R status message ("R engine idle/busy") to idle or busy */ void setRStatus (RStatus status); /** update the display for the current working directory */ void updateCWD (); RKTopLevelWindowGUI *toplevel_actions; bool gui_rebuild_locked; }; #endif // RKWARD_H rkward-0.6.1/rkward/debug.h0000644000175000017500000000461012124345412015110 0ustar thomasthomas/*************************************************************************** debug - description ------------------- begin : Sun Aug 8 2004 copyright : (C) 2004, 2006 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #define RKWARD_DEBUG extern int RK_Debug_Level; extern int RK_Debug_Flags; extern int RK_Debug_CommandStep; extern void RKDebug (int flags, int level, const char *fmt, ...); // Debug-levels #define DL_TRACE 0 #define DL_DEBUG 1 #define DL_INFO 2 #define DL_WARNING 3 #define DL_ERROR 4 #define DL_FATAL 5 // Debug components #define APP 1 #define PLUGIN 2 #define OBJECTS 4 #define EDITOR 8 #define SETTINGS 16 #define PHP 64 #define RBACKEND 128 #define COMMANDEDITOR 256 #define MISC 512 #define DIALOGS 1024 #define OUTPUT 2048 #define XML 4096 #define ALL (APP | PLUGIN | PHP | OBJECTS | EDITOR | RBACKEND | COMMANDEDITOR | MISC | DIALOGS | OUTPUT | XML) #ifdef RKWARD_DEBUG // Debug functions # define RK_DO(expr,flags,level) if ((flags & RK_Debug_Flags) && (level >= RK_Debug_Level)) { expr; } # define RK_DEBUG(flags,level,...) { if ((flags & RK_Debug_Flags) && (level >= RK_Debug_Level)) RKDebug (flags,level,__VA_ARGS__); } # define RK_ASSERT(x) if (!(x)) RK_DEBUG (ALL, DL_FATAL, "Assert '%s' failed at %s - function %s line %d", #x, __FILE__, __FUNCTION__, __LINE__); # ifndef RKWARD_NO_TRACE # define RK_TRACE(flags) RK_DEBUG (flags, DL_TRACE, "Trace: %s - function %s line %d", __FILE__, __FUNCTION__, __LINE__); # else # define RK_TRACE(flags) # endif #else # define RK_DO(expr,flags,level) # define RK_DEBUG(flags,level,fmt,...) # define RK_ASSERT(x) # define RK_TRACE(flags) #endif rkward-0.6.1/rkward/version.h0000644000175000017500000000007712124345570015517 0ustar thomasthomas/* Version number of package */ #define RKWARD_VERSION "0.6.1" rkward-0.6.1/rkward/rkglobals.h0000644000175000017500000000454612124345416016016 0ustar thomasthomas/*************************************************************************** rkglobals - description ------------------- begin : Wed Aug 18 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKGLOBALS_H #define RKGLOBALS_H class RKWardMainWindow; class RInterface; class RObjectList; class RKModificationTracker; class KHelpDlg; class RControlWindow; class QString; /** This class basically keeps some static pointers which are needed all over the place, so they won't have to be passed around. TODO: move the static members to the respective classes instead. There's no point in having them here, and having to include rkglobals.h all over the place. @author Thomas Friedrichsmeier */ class RKGlobals{ public: /** constructor. Do not use. No instance needed of this class. Only static stuff inside */ RKGlobals (); /** destructor. Do not use. No instance needed of this class. Only static stuff inside */ ~RKGlobals (); /// static pointer to the RInterface static RInterface *rInterface () { return rinter; }; /// static pointer to the RKModificationTracker static RKModificationTracker *tracker () { return mtracker; }; /// returns KDialog::marginHint (), without the need to include kdialog.h in all the sources static int marginHint (); /// returns KDialog::spacingHint (), without the need to include kdialog.h in all the sources static int spacingHint (); static void deleteStrings (QString **strings, int count); private: friend class RKWardMainWindow; static RInterface *rinter; static RKModificationTracker *mtracker; }; #endif rkward-0.6.1/rkward/rkconsole.h0000644000175000017500000002121712124345410016021 0ustar thomasthomas/*************************************************************************** rkconsole - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004, 2006, 2007, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCONSOLE_H #define RKCONSOLE_H #include #include #include #include "rbackend/rcommandreceiver.h" #include "windows/rkcommandeditorwindow.h" #include "windows/rkmdiwindow.h" #include "misc/rkcommandhistory.h" class QEvent; class QKeyEvent; class QStringList; class KAction; class RCommand; class KActionCollection; class RKConsolePart; /** \brief Provides an R-like console. This class provides a console, which is very similar to the classic R console. It is based on a heavily modified KatePart. Do not construct directly. Construct an RKConsolePart instead. \sa RKCommandLog @author Pierre Ecochard **/ class RKConsole : public RKMDIWindow, public RCommandReceiver, public RKScriptContextProvider { Q_OBJECT public: /** Constructor. */ RKConsole (QWidget *parent, bool tool_window, const char *name=0); /** Destructor */ ~RKConsole (); /** Returns the command currently being edited (not executed yet) */ QString currentEditingLine () const; /** Returns the current cursor position, within the current command (without taking into account the prefix). Returns -1 if the cursor is not on the line containing the command. */ int currentCursorPositionInCommand (); void doTabCompletion (); QString provideContext (int line_rev); static RKConsole *mainConsole () { return main_console; }; static void setMainConsole (RKConsole *console) { main_console = console; }; bool isBusy () const; /** Run a command through the console (unless user has configured such commands to be run outside the console: then it will run in separately). */ static void pipeUserCommand (const QString &command); /** reimplemnented from RKMDIWindow to clear selection when gaining focus */ void activate (bool with_focus=true); void setCommandHistory (const QStringList &new_history, bool append); QStringList commandHistory () const { return commands_history.getHistory (); }; void addCommandToHistory (const QString& text) { commands_history.append (text); }; protected: /** Handle keystrokes before they reach the kate-part. Return TRUE if we want the kate-part to ignore it \param e the QKeyEvent */ bool handleKeyPress (QKeyEvent * e); void rCommandDone (RCommand *command); /** reimplemented from RCommandReceiver::newOutput () to handle output of console commands */ void newOutput (RCommand *command, ROutput *output); /** reimplemented from QWidget to show the context menu */ void contextMenuEvent (QContextMenuEvent * event); private: friend class RKConsolePart; bool eventFilter (QObject *o, QEvent *e); bool doTabCompletionHelper (int line_num, const QString &line, int word_start, int word_end, const QStringList &entries); /** a helper function to doTabCompletionHelper */ void insertCompletion (int line_num, int word_start, int word_end, const QString &completion); QString incomplete_command; /** A list to store previous commands */ RKCommandHistory commands_history; /** Sets the cursor position to the end of the last line. */ void cursorAtTheEnd (); /** Submits the current command */ void submitCommand (); /** Set the current command to the previous command in the command list @param context_sensitive if set to true, history lines that do not start with command_history_context are ignored (leading to context sensitive navigation of the command history) */ void commandsListUp (bool context_sensitive=false); /** Set the current command to the next command in the command list @param context_sensitive if set to true, history lines that do not start with command_history_context are ignored (leading to context sensitive navigation of the command history) */ void commandsListDown (bool context_sensitive=false); /** Sets the cursor position to the beginning of the last line. */ void cursorAtTheBeginning (); /** Sets the current command. This is used from commandsListUp (), and commandsListDown (); \param command the new command */ void setCurrentEditingLine (const QString &line); /** Try to submit the next chunk of the input buffer. */ void tryNextInBuffer (); void showPrompt (); QString prefix; /** This string stores the regular prefix printed at the beginning of each line. */ QString nprefix; /** This string stores the continuation prefix. */ QString iprefix; /** Create a proxy for the katepart action of the same name. The action is added to the actioncollection, automatically. Also any icon and label (but not shorcut) is copied. @param actionName Identifier of the action in katepartui.rc and rkconsolepart.rc @param label Label for the proxy action. If empty (default) copy the label from the katepartui @returns a pointer to the proxy action */ QAction* addProxyAction (const QString& actionName, const QString& label=QString ()); QString cleanSelection (const QString &origin); RCommand *current_command; KTextEditor::Document *doc; KTextEditor::View *view; RKFunctionArgHinter *hinter; static RKConsole *main_console; bool tab_key_pressed_before; KAction* copy_lines_to_output_action; KAction* context_help_action; KAction* run_selection_action; KAction* interrupt_command_action; KAction* copy_commands_action; KAction* copy_literal_action; KAction* paste_action; KActionCollection *kate_edit_actions; void triggerEditAction (QString name); void setCursorClear (int line, int col); void initializeActions (KActionCollection *ac); void pipeCommandThroughConsoleLocal (const QString &command); RKConsolePart *console_part; public slots: /** We intercept paste commands and get them executed through submitBatch. @sa submitBatch */ void paste (); void copyCommands (); void literalCopy (); /** Clear the view, and add a prompt at the top. */ void clear (); /** show context help on the current word */ void showContextHelp (); /** Cancels the current command, if any, and clears the command buffer(s) */ void resetConsole (); void runSelection (); void copyLinesToOutput (); /** Adds a chunk of commands to the input buffer \param batch a QString containing the batch of commands to be executed */ void submitBatch (const QString &batch); void userLoadHistory (const KUrl &url=KUrl ()); void userSaveHistory (const KUrl &url=KUrl ()); private: /** Commands can be queued in the console in four different places: 1) The not-yet-executed remainder of a previous incomplete command. 2) A command which has already been issued. Note that this command, too, be incomplete, in which case it's remainder will be stored to 1. 3) One or more lines of commands which have been pasted or piped to the Console, but have not yet been submitted. 4) One line of a command without a trailing newline. This may be part of a previously pasted command, but most typically it is the line the user is currently editing. 1 and 2 are mutually exclusive, and stored in incomplete_command, or current_command->command (). 3 is stored in input_buffer. If there is no current command, the input buffer will be emptied as soon as tryNextInBatch() is called. 4 and 2 are mutually exclusive. 4 can be retrieved as currentEditingLine () */ QString input_buffer; int current_command_displayed_up_to; int skip_command_display_lines; bool previous_chunk_was_piped; /** Reimplemented from RCommandReceiver to display the next line of the command */ void userCommandLineIn (RCommand* command); }; /** A part interface to RKConsole. Provides the context-help functionality @author Thomas Friedrichsmeier */ class RKConsolePart : public KParts::Part { friend class RKConsole; protected: /** constructor. Protected. Meant to the created by the RKConsole itself @param console The console for this part */ RKConsolePart (RKConsole *console); /** destructor */ ~RKConsolePart (); void showPopupMenu (const QPoint &pos); }; #endif rkward-0.6.1/rkward/plugins/0000755000175000017500000000000012124346353015336 5ustar thomasthomasrkward-0.6.1/rkward/plugins/testing/0000755000175000017500000000000012124345414017010 5ustar thomasthomasrkward-0.6.1/rkward/plugins/testing/run_code.js0000644000175000017500000000010412124345414021137 0ustar thomasthomasfunction calculate () { echo (getValue ('codetorun.text')+'\n'); } rkward-0.6.1/rkward/plugins/testing/scatterplot2.xml0000644000175000017500000000264512124345414022167 0ustar thomasthomas rkward-0.6.1/rkward/plugins/testing/run_code.xml0000644000175000017500000000027412124345414021333 0ustar thomasthomas rkward-0.6.1/rkward/plugins/testing/test2.xml0000644000175000017500000000103712124345414020574 0ustar thomasthomas This plugin is bogus! Do not use! rkward-0.6.1/rkward/plugins/testing/optionset.xml0000644000175000017500000000635612124345414021570 0ustar thomasthomas This plugin is bogus! Do not use! This option set is connected to the set on the first tab. First, select some objects, here (it doesn't matter, what you pick).

     

    Next, see how the controls allow you to specify "Comments" for each object.

    rkward-0.6.1/rkward/plugins/testing/optionset.js0000644000175000017500000000154212124345414021374 0ustar thomasthomasfunction calculate () { echo ("## Manual set: ##\n") echo ("row_count <- " + getValue ("mset.row_count") + "\n"); echo ("current_row <- " + getValue ("mset.current_row") + "\n"); echo ("mset.contents.enabled <- " + getValue ("mset.contents.enabled") + "\n"); echo ("## Driven set: ##\n") echo ("row_count <- " + getValue ("set.row_count") + "\n"); echo ("current_row <- " + getValue ("set.current_row") + "\n"); echo ("set.contents.enabled <- " + getValue ("set.contents.enabled") + "\n"); var codeprops = getList ("set.plotoption_printout"); for (i = 0; i < codeprops.length; ++i) { echo ("Plotoption string printout " + i + " in driven set: " + codeprops[i] + "\n"); } codeprops = getList ("set.plotoption_pre"); for (i = 0; i < codeprops.length; ++i) { echo ("Plotoption string preprocess " + i + " in driven set: " + codeprops[i] + "\n"); } } rkward-0.6.1/rkward/plugins/testing/test2.js0000644000175000017500000000027612124345414020414 0ustar thomasthomasfunction preprocess () { echo ("This is\n\tan embedded\ntest"); } function calculate () { echo ('embbeded: x: ' + getValue ("x") + 'y: ' + getValue ("y") + 'box: ' + getValue ("box")); } rkward-0.6.1/rkward/plugins/testing/matrix1.xml0000644000175000017500000000221112124345414021113 0ustar thomasthomas This plugin is bogus! Do not use! rkward-0.6.1/rkward/plugins/testing/test1.js0000644000175000017500000000104112124345414020402 0ustar thomasthomasfunction preprocess () { printIndented ("\t\t", "This is\n\t\a\ntest"); } function calculate () { echo ('model = glm (' + getValue ("model") + ', data=' + getValue ("model.table") + ')\n'); echo ('labels = ' + getValue ("model.labels") + '\n'); echo ('result = anova (model)\n'); } function printout () { makeHeaderCode ("SimpleAnova", new Array ("Model", getValue ("model"), "Data", getValue ("model.table"), "Test", noquote ("print ('hi')"))) // makeHeaderCode ("SimpleAnova", new Array ("Model", "Data")) echo ('rk.echo (result)'); } rkward-0.6.1/rkward/plugins/testing/test1.xml0000644000175000017500000000270512124345414020576 0ustar thomasthomas This plugin is bogus! Do not use! rkward-0.6.1/rkward/plugins/testing/matrix1.js0000644000175000017500000000042312124345414020732 0ustar thomasthomasfunction calculate () { echo ("Matrix A:\n"); echo (getValue ("matrixa.cbind")); echo ("\nMatrix B:\n"); echo (getValue ("matrixb.cbind")); echo ("\nMatrix C:\n"); echo (getValue ("matrixc.cbind")); echo ("\nMatrix C, column 2:\n"); echo (getValue ("matrixc.2")); } rkward-0.6.1/rkward/plugins/rkwarddev_scripts/0000755000175000017500000000000012124345412021071 5ustar thomasthomasrkward-0.6.1/rkward/plugins/rkwarddev_scripts/subset_dataframe.R0000644000175000017500000003234512124345412024534 0ustar thomasthomas# the plugin code was generated by this script # you should not change the plugin code directly, but this script # note: this script only creates objects in your workspace, # *EXCEPT* for the last call, see below. ## Plugin mandatory TODO # # - testing! ## Plugin wishlist # # - use an to provide an arbitrary number of filters by variable # - allow removing of specified columns in addition to selection of specified columns # - re-think quotation issues? Use a for specifying %in% and !%in% values? # - allow saving of resulting row-filter expression for later reuse # - print status summary ("filtered a of b rows, x of y columns, saved as z") # - split into two plugins (one for rows, one for columns)? require(rkwarddev) local({ # set the output directory to overwrite the actual plugin output.dir <- tempdir() overwrite <- TRUE # if you set guess.getters to TRUE, the resulting code willdat need RKWard >= 0.6.0 guess.getter <- TRUE about.info <- rk.XML.about( name="rk.subset", author=c( person(given="RKWard", family="Team", email="rkward-devel@lists.sf.net", role=c("cre")), person(given="Meik", family="Michalke", email="meik.michalke@hhu.de", role=c("aut")), person(given="Thomas", family="Friedrichsmeier", email="tfry@users.sf.net", role=c("aut"))), about=list(desc="RKWard GUI to define subsets of data objects", version="0.02-1", url="http://rkward.sf.net") ) ############ ## re-usable objects ############ # for data var.select <- rk.XML.varselector(label="Select data") var.data <- rk.XML.varslot(label="Data (data.frame)", source=var.select, classes=c("data.frame"), required=TRUE, id.name="var_data") selected.vars <- rk.XML.varslot(label="Selected variables", source=var.select, multi=TRUE) frame.selected.vars <- rk.XML.frame(selected.vars, label="Only use a subset of variables", checkable=TRUE, chk=FALSE) filter.var <- rk.XML.varslot(label="Filter by variable", source=var.select) sset.filter.drop <- rk.XML.dropdown(label="Keep cases matching rule", options=list( "is one of (%in%)"=c(val="%in%"), "is not one of (!%in%)"=c(val="!%in%"), "is equal (==)"=c(val="==", chk=TRUE), "is not equal (!=)"=c(val="!="), "is in between"=c(val="range"), "is not between"=c(val="!range") ), id.name="drp_fltr_all") sset.filter.drop.factor <- rk.XML.dropdown(label="Keep cases matching rule", options=list( "is one of (%in%)"=c(val="%in%"), "is not one of (!%in%)"=c(val="!%in%"), "is equal (==)"=c(val="==", chk=TRUE, "is not equal (!=)"=c(val="!=")) ), id.name="drp_fltr_fct") sset.filter.drop.logical <- rk.XML.dropdown(label="Keep cases matching rule", options=list( "is TRUE"=c(val="TRUE", chk=TRUE), "is FALSE"=c(val="FALSE") ), id.name="drp_fltr_lgc") sset.filter.drop.numeric <- rk.XML.dropdown(label="Keep cases matching rule", options=list( "is equal (==)"=c(val="==", chk=TRUE), "is not equal (!=)"=c(val="!="), "is in between"=c(val="range"), "is not between"=c(val="!range") ), id.name="drp_fltr_num") lgc.drop.switch <- rk.XML.switch ("case_filter_data_mode", list ( case=list (standard="any", dynamic_value=id (sset.filter.drop, ".string", js=FALSE)), case=list (standard="char_factor", dynamic_value=id (sset.filter.drop.factor, ".string", js=FALSE)), case=list (standard="logical", dynamic_value=id (sset.filter.drop.logical, ".string", js=FALSE)), case=list (standard="numeric", dynamic_value=id (sset.filter.drop.numeric, ".string", js=FALSE)))) lgc.is.range <- rk.XML.switch (lgc.drop.switch, list ( case=list (standard="!range", fixed_value="1"), case=list (standard="range", fixed_value="1"), default=list (fixed_value="0"))) sset.input.filter <- rk.XML.input(label="Value (pasted as-is, use proper quoting!)", required=TRUE) sset.filter.min <- rk.XML.input(label="Minimum (or empty)") sset.filter.min.inc <- rk.XML.checkbox (label="Included (>=)", id.name="mininc") sset.filter.max <- rk.XML.input(label="Maximum (or empty)") sset.filter.max.inc <- rk.XML.checkbox (label="Included (<=)", id.name="maxinc") #NOTE: Auto-id bug! sset.range.options <- rk.XML.row ( rk.XML.col (sset.filter.min, sset.filter.min.inc), rk.XML.col (sset.filter.max, sset.filter.max.inc) ) frame.filter.var <- rk.XML.frame( filter.var, sset.filter.drop, sset.filter.drop.factor, sset.filter.drop.logical, sset.filter.drop.numeric, sset.input.filter, sset.range.options, label="Filter rows by variable") frame.filter.expression <- rk.XML.frame( sset.filter.expression <- rk.XML.input ("Expression (or empty)"), label="Filter rows by expression", id.name="frame_filter_exp") # NOTE: Auto-assigned id is duplicate! # for logic section lgc.filter.script <- rk.comment(id(" gui.addChangeCommand(\"", filter.var, ".available\", \"dataChanged()\"); // this function is called whenever the data was changed dataChanged = function(){ var enableVarInput = \"true\"; var dataMode = \"any\"; var thisObject = makeRObject(gui.getValue(\"", filter.var, ".available\")); if(thisObject.classes()){ if(thisObject.isDataFactor() || thisObject.isDataCharacter()){ dataMode = \"char_factor\"; } else if(thisObject.isDataLogical()){ dataMode = \"logical\"; // NOTE: not hiding VarInput to avoid nasty flicker enableVarInput = \"false\"; } else if(thisObject.isDataNumeric()){ dataMode=\"numeric\"; } } else {} gui.setValue(\"", sset.filter.drop.factor, ".visible\", dataMode == 'char_factor' ? 'true' : 'false'); gui.setValue(\"", sset.filter.drop.logical, ".visible\", dataMode == 'logical' ? 'true' : 'false'); gui.setValue(\"", sset.filter.drop.numeric, ".visible\", dataMode == 'numeric' ? 'true' : 'false'); gui.setValue(\"", sset.filter.drop, ".visible\", dataMode == 'any' ? 'true' : 'false'); gui.setValue(\"", sset.input.filter, ".enabled\", enableVarInput); gui.setValue(\"case_filter_data_mode\", dataMode); } dataChanged (); // initialize", js=FALSE)) save.results.sset <- rk.XML.saveobj("Save results to workspace", initial="sset.result", chk=TRUE) sset.dialog.contents <- rk.XML.row ( var.select, rk.XML.col( var.data, rk.XML.tabbook (tabs = list ( "Filter cases"=rk.XML.col( frame.filter.var, frame.filter.expression, rk.XML.stretch() ), "Filter columns"=rk.XML.col( frame.selected.vars, rk.XML.stretch() )) ), save.results.sset ) ) sset.full.dialog <- rk.XML.dialog( sset.dialog.contents, label="Subset of data") ## logic section lgc.sect.sset <- rk.XML.logic( lgc.filter.script, rk.XML.connect(governor="current_object", client=var.data, set="available"), rk.XML.connect(governor=var.data, client=var.select, get="available", set="root"), sset.gov.data <- rk.XML.convert(sources=list(available=var.data), mode=c(notequals="")), sset.have.filter.var <- rk.XML.convert(sources=list(available=filter.var), mode=c(notequals="")), rk.XML.connect(governor=sset.gov.data, client=frame.selected.vars, set="enabled"), rk.XML.connect(governor=sset.gov.data, client=frame.filter.var, set="enabled"), rk.XML.connect(governor=sset.gov.data, client=frame.filter.expression, set="enabled"), rk.XML.external(id="case_filter_data_mode", "any"), lgc.drop.switch, lgc.is.range, rk.XML.connect(governor=lgc.is.range, client=sset.range.options, set="visible"), rk.XML.connect(governor=sset.range.options, get="visible.not", client=sset.input.filter, set="visible"), rk.XML.connect(governor=sset.have.filter.var, client=sset.input.filter, set="required"), lgc.have.min <- rk.XML.convert(sources=list(text=sset.filter.min), mode=c(notequals="")), lgc.have.max <- rk.XML.convert(sources=list(text=sset.filter.max), mode=c(notequals="")), lgc.need.min <- rk.XML.convert(sources=list(not=lgc.have.max,lgc.is.range), mode=c(and="")), lgc.need.max <- rk.XML.convert(sources=list(not=lgc.have.min,lgc.is.range), mode=c(and="")), rk.XML.connect(governor=lgc.need.max, get="", client=sset.filter.max, set="required"), rk.XML.connect(governor=lgc.need.min, get="", client=sset.filter.min, set="required") ) ## JavaScript sset.js.calc <- id(" var data = getString ('", var.data, "'); var filter_var = getString ('", filter.var, ".shortname'); var filter_expr = getString ('", sset.filter.expression, "'); echo ('\\tsset.result <- subset('); if (data != '') { echo ('\\n\\t\\t' + data); // row filter var row_filter_exp = ''; if (filter_var != '') { var filter_operand = getString ('", lgc.drop.switch, "'); if (getBoolean ('", lgc.is.range, "')) { var range_limit = ''; var max_range = ''; var fmin = getString ('", sset.filter.min, "'); var fmax = getString ('", sset.filter.max, "'); var fmininc = getBoolean ('", sset.filter.min.inc, "'); var fmaxinc = getBoolean ('", sset.filter.max.inc, "'); if (fmin != '') range_limit = filter_var + ' >' + (fmininc ? '= ' : ' ') + fmin; if (fmax != '') max_range = filter_var + ' <' + (fmaxinc ? '= ' : ' ') + fmax; if (!(max_range == '' || range_limit == '')) range_limit = '(' + range_limit + ') & (' + max_range + ')'; else range_limit += max_range; if (filter_operand == 'range') row_filter_exp += range_limit; else row_filter_exp += '!(' + range_limit + ')'; } else if (getString ('case_filter_data_mode') == 'logical') { if (filter_operand == 'TRUE') row_filter_exp += filter_var; else row_filter_exp += '!' + filter_var; } else { var input_filter = getString ('", sset.input.filter, "'); if (filter_operand == '!%in%') row_filter_exp += '!(' + filter_var + ' %in% ' + input_filter + ')'; else row_filter_exp += filter_var + ' ' + filter_operand + ' ' + input_filter; } } if (filter_expr != '') { if (row_filter_exp != '') row_filter_exp = '(' + row_filter_exp + ') & (' + filter_expr + ')'; else row_filter_exp = filter_expr; } if (row_filter_exp != '') echo (',\\n\\t\\t' + row_filter_exp); // column filter if (getBoolean ('", frame.selected.vars, ".checked')) { var selected_vars = getList ('", selected.vars, ".shortname').join (', '); if (selected_vars != '') echo (',\\n\\t\\tselect=c (' + selected_vars + ')'); } } echo ('\\n\\t)\\n\\n'); ", js=FALSE) ############# ## if you run the following function call, files will be written to tempdir! ############# # this is where it get's serious, that is, here all of the above is put together into one plugin sset.plugin.dir <<- rk.plugin.skeleton( about.info, path=output.dir, guess.getter=guess.getter, xml=list( dialog=sset.full.dialog, logic=lgc.sect.sset ), js=list(results.header=FALSE, calculate=sset.js.calc), rkh=list( summary = rk.rkh.summary ("Select a subset of rows and / or columns of a data.frame"), usage = rk.rkh.usage ("Select the data.frame to subset. Then specify rules to filter by rows / cases, and / or columns. A data.frame containing only the specified subset is saved to your workspace."), settings = rk.rkh.settings (list ( rk.rkh.setting (var.data, "Select the data.frame to subset."), rk.rkh.caption (frame.filter.var), rk.rkh.setting (filter.var, "Select a column of the data.frame specifying the condition to filter cases on. Leave empty, if you do not want to filter on a column."), rk.rkh.setting (sset.filter.drop, "Select the type of condition. Note that depending on the type of the filter variable, different options are available"), rk.rkh.setting (sset.input.filter, "The value to compare against (for condition types equal / not equal, and one of / not one of). Note that this will be pasted as R code, verbatim. This means, you can specify any valid R expression, including the name of another column of the data.frame. However, if you want to compare to fixed strings, you will have to make sure to quote these. E.g. 'c (\"City A\", \"City B\")'."), rk.rkh.setting (sset.filter.min, "For comparing against ranges (condition types in between / not in between), minimum and / or maximum values can be specified. If either is omitted, only the other is checked (i.e. greater / smaller than). Note that this will be pasted as R code, verbatim. This means, you can specify any valid R expression, including the name of another column of the data.frame."), rk.rkh.setting (sset.filter.min.inc, "Whether the minimum value is contained in the range to check against (i.e. compare 'larger or equal (>=)')."), rk.rkh.setting (sset.filter.max, "See above. Maximum value."), rk.rkh.setting (sset.filter.max.inc, "Whether the maximum value is contained in the range to check against (i.e. compare 'smaller or equal (<=)')."), rk.rkh.caption (frame.filter.expression), rk.rkh.setting (sset.filter.expression, "You can also filter rows / cases by a custom R expression. If using this in combination with filtering by a column (see above), both conditions are combined by logical 'and' (&). Leave empty, if you do not want to filter on a custom expression."), rk.rkh.caption (frame.selected.vars), rk.rkh.setting (frame.selected.vars, "Check this, if you want to remove some columns from the resulting data.frame. Otherwise, all columns will be included."), rk.rkh.setting (selected.vars, "Variables to include in the resulting data.frame") )), related = rk.rkh.related (rk.rkh.link ("subset")) ), pluginmap=list(name="subset_dataframe", hierarchy=list("data")), dependencies=rk.XML.dependencies (), create=c("pmap", "xml", "js", "rkh"), scan=c("saveobj", "settings"), overwrite=overwrite, tests=FALSE, edit=TRUE, load=TRUE, # show=TRUE, hints=FALSE) }) rkward-0.6.1/rkward/plugins/embedded.pluginmap0000644000175000017500000000263112124345412021002 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis.pluginmap0000644000175000017500000001324712124345414021103 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/0000755000175000017500000000000012124345412017267 5ustar thomasthomasrkward-0.6.1/rkward/plugins/00saveload/save/0000755000175000017500000000000012124345412020225 5ustar thomasthomasrkward-0.6.1/rkward/plugins/00saveload/save/skeleton/0000755000175000017500000000000012124345412022051 5ustar thomasthomasrkward-0.6.1/rkward/plugins/00saveload/save/skeleton/code.js0000644000175000017500000000060212124345412023317 0ustar thomasthomasfunction calculate () { var vars = trim (getValue ("data")).replace (/\n/g, "','"); echo ('package.skeleton(name="' + getValue("name") + '", list=c(\'' + vars + '\'), path="' + getValue("path") + '", force= ' + getValue("force") + ')\n'); } function printout () { makeHeaderCode ("Create package skeleton", new Array("Name", getValue ("name"), "Directory", getValue ("path"))); } rkward-0.6.1/rkward/plugins/00saveload/save/skeleton/description.xml0000644000175000017500000000131312124345412025114 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/save/save.xml0000644000175000017500000000411412124345412021705 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/save/save.rkh0000644000175000017500000000221112124345412021665 0ustar thomasthomas Save one or more selected R objects to a file. Note: Use Workspace->Save Workspace for saving the complete workspace. Select the objects to save, and a filename to save to. Created data files can be loaded using . One or more objects to save. Location to save to. Write an ascii, rather than binary representation of the object(s). The file can be compressed to achieve a smaller file size. This control allows to select the method of compression. Some methods are not available for versions of R before 2.10.0. Compression level. Higher values indicate better compression. For xz compression, only: Enable xz "extreme" compresison.
    rkward-0.6.1/rkward/plugins/00saveload/save/write_table.xml0000644000175000017500000000537612124345412023263 0ustar thomasthomas Be careful : your data will be converted into a data frame. If you don't want that, use the plugin 'write' for mere variables. rkward-0.6.1/rkward/plugins/00saveload/save/write.js0000644000175000017500000000071612124345412021721 0ustar thomasthomasfunction calculate () { var sep = getValue ("sep"); if (sep == "other") sep = getValue ("custom_sep"); if (sep == " ") sep = ""; else sep = ", sep=" + quote (sep); echo ('write (x=' + getValue("data") + ', file="' + getValue("file") + '", ncolumns=' + getValue("ncolumns") + ', append=' + getValue("append") + sep + ')\n'); } function printout () { makeHeaderCode ("Write Variables", new Array("File", getValue ("file"), "Data", getValue ("data"))); } rkward-0.6.1/rkward/plugins/00saveload/save/write_table.js0000644000175000017500000000135212124345412023065 0ustar thomasthomasfunction calculate () { echo ('write.table ( x = ' + getValue("data") + ' , file = "' + getValue("file") + '" , append = ' + getValue("append") + ' ,quote = ' + getValue("quote") + ' , sep = ' + getValue("sep") + ' , eol = "' + getValue("eol") + '" , na = "' + getValue("na") + '" , dec = ' + getValue("dec") + ' , row.names = '); if (getValue("rows") == "custoRow") echo (getValue("rownames")) ; else echo (getValue("rows") + ' , col.names = '); if (getValue("columns") == "custoCol") echo (getValue("colnames")) ; else echo (getValue("columns") + ' , qmethod= ' + getValue("qmethod") + ' ) \n'); } function printout () { makeHeaderCode ("Write as table", new Array("File", getValue ("file"), "Data", getValue ("data"))); } rkward-0.6.1/rkward/plugins/00saveload/save/save.js0000644000175000017500000000155012124345412021522 0ustar thomasthomas// globals var data; var file; function calculate(){ file = getValue("file"); // read in variables from dialog var ascii = getValue("ascii"); var compress = getValue("compress"); var complevel = getValue("complevel"); var xzextreme = getValue("xzextreme"); // the R code to be evaluated data = getValue("data").split("\n").join(", "); echo("save(" + data); if(file) { echo(",\n\tfile=\"" + file + "\""); } if(ascii) { echo(",\n\tascii=TRUE"); } if(compress) { if(compress != "xz" | xzextreme != "true") { echo(",\n\tcompress=\"" + compress + "\",\n\tcompression_level=" + complevel); } else if(xzextreme) { echo(",\n\tcompress=\"" + compress + "\",\n\tcompression_level=-" + complevel); } } echo(")\n\n"); } function printout(){ // printout the results makeHeaderCode ("Save R objects", new Array("File", file, "Variables", data)); } rkward-0.6.1/rkward/plugins/00saveload/save/write.xml0000644000175000017500000000330012124345412022075 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/setworkdir.js0000644000175000017500000000011212124345412022014 0ustar thomasthomasfunction calculate () { echo ('setwd("' + getValue ("dir") + '")\n'); } rkward-0.6.1/rkward/plugins/00saveload/setworkdir.rkh0000644000175000017500000000057412124345412022200 0ustar thomasthomas Set or change the current working directory. Choose a diretory to set/change the working directory for R. The R function setwd is used to do the job.
    rkward-0.6.1/rkward/plugins/00saveload/import/0000755000175000017500000000000012124345412020601 5ustar thomasthomasrkward-0.6.1/rkward/plugins/00saveload/import/import_stata.xml0000644000175000017500000000235112124345412024032 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/import/load_data.js0000644000175000017500000000075412124345412023055 0ustar thomasthomas// globals var envir; function calculate () { var other_env = false; if (getValue ("envir.active")) { other_env = true; envir = ".GlobalEnv$" + getValue ("envir"); } else { envir = "globalenv()"; } if (other_env) { echo (envir + ' <- new.env (parent=globalenv())\n'); } echo ('load (file="' + getValue("file") + '", envir=' + envir + ')\n'); } function printout () { makeHeaderCode ("Load data", new Array("File", getValue ("file"), "Import to environment", envir)); } rkward-0.6.1/rkward/plugins/00saveload/import/import_spss.rkh0000644000175000017500000000551612124345412023700 0ustar thomasthomas Import SPSS data files. Choose the SPSS data file to import. Usually those files have the ending '*.sav'. An R object containing the SPSS data will be created. This can either be a data.frame, or a list. Several options deal with handling labels and character encoding. See . Other SPSS files than data files (i. e.:*.por, *.jnl, *.cht, *.spo, *.sps) are not supported. For issues related to handling of time/dates please refere to R News 4/1 p30-31. The filename of the file to import The name of an R object to store the imported data in. If you chose an existing symbol name, you will be prompted, whether to overwrite this object. Whether the object should be opened for editing after it was imported. Currently, this is only possible, if the object is saved as a data.frame (see next option). Whether to save the data as a data.frame. The alternative is saving as a list (useful, if the columns in your SPSS data have different lengths) RKWard can display SPSS like variable labels. Check this option, if you would like to convert the SPSS variable labels to RKWard format. If you leave the option unchecked, the SPSS variable labels will still be available as an attribute "variable.labels" (see ) Should SPSS variables with value labels be converted to R factors with those levels? Maximum number of factor levels to use (see ) Trim trailing white space from labels? If special character (e.g. umlauts) do not show up correctly, the SPSS file probably uses a different locale than your R session. In this case, check this option, and specify the correct character encoding below. Select character encoding to convert from. The option above needs to be checked, for this to be enabled. If none of the encodings above matches, you can specify an encoding here. Note that the available encodings may differ from platform to platform. See for a list of available encodings.
    rkward-0.6.1/rkward/plugins/00saveload/import/source.js0000644000175000017500000000137112124345412022441 0ustar thomasthomasfunction calculate () { var prompt = ""; // most options should only be shown, if they differ from the default. var options = ""; if (getValue ("echo")) { options += ", echo=TRUE"; var prompt = getValue ("promptecho"); if (prompt.length > 0) { options += ", prompt.echo=\"" + prompt + "\""; } options += ", max.deparse.length=" + getValue ("maxdeparselength"); options += ", verbose=" + getValue ("verbose"); } else { options += ", verbose=FALSE"; } options += ", print.eval=" + getValue ("printeval"); echo ('source (file="' + getValue("file") + '", local=' + getValue("local") + options + ', chdir=' + getValue("chdir") + ')\n'); } function printout () { makeHeaderCode ("Source R file", new Array("File", getValue ("file"))); } rkward-0.6.1/rkward/plugins/00saveload/import/import_spss.js0000644000175000017500000000447012124345412023526 0ustar thomasthomasfunction preprocess () { echo ('require (foreign)\n'); if (getValue ("do_locale_conversion")) { echo ('\n'); echo ('# helper function to convert all strings to the current encoding\n'); echo ('iconv.recursive <- function (x, from) {\n'); echo (' attribs <- attributes (x);\n'); echo (' if (is.character (x)) {\n'); echo (' x <- iconv (x, from=from, to="", sub="")\n'); echo (' } else if (is.list (x)) {\n'); echo (' x <- lapply (x, function (sub) iconv.recursive (sub, from))\n'); echo (' }\n'); echo (' # convert factor levels and all other attributes\n'); echo (' attributes (x) <- lapply (attribs, function (sub) iconv.recursive (sub, from))\n'); echo (' x\n'); echo ('}\n'); } } function calculate () { var data_frame = ""; var data_frame_opt = ""; if (getValue ("data_frame")) { data_frame = true; data_frame_opt = ", to.data.frame=TRUE"; } var labels_opt = ""; if (getValue ("use_labels")) { labels_opt += ", max.value.labels=" + getValue ("labels_limit"); if (getValue ("trim_labels")) labels_opt += ", trim.factor.names=TRUE"; } else { labels_opt = ", use.value.labels=FALSE"; } var object = getValue ("saveto"); echo ('data <- read.spss ("' + getValue ("file") + '"' + data_frame_opt + labels_opt + ')\n'); if (getValue ("do_locale_conversion")) { var from_locale = getValue ("encoding"); if (from_locale == "other") { from_locale = getValue ("user_encoding"); } echo ('\n'); echo ('# convert all strings to the current encoding\n'); echo ('data <- iconv.recursive (data, from="' + from_locale + '")\n'); } if (getValue ("convert_var_labels")) { echo ('\n'); echo ('# set variable labels for use in RKWard\n'); echo ('labels <- attr (data, "variable.labels");\n'); echo ('if (!is.null (labels)) {\n'); echo (' for (i in 1:length (labels)) {\n'); echo (' col <- make.names (names (labels[i]))\n'); echo (' if (!is.null (col)) {\n'); echo (' rk.set.label (data[[col]], labels[i])\n'); echo (' }\n'); echo (' }\n'); echo ('}\n'); } echo ('\n'); echo ('.GlobalEnv$' + object + ' <- data # assign to globalenv()\n'); if (getValue ("doedit") && data_frame) { echo ('rk.edit (.GlobalEnv$' + object + ')\n'); } } function printout () { makeHeaderCode ("Import SPSS data", new Array("File", getValue ("file"), "Import as", getValue ("saveto"))); } rkward-0.6.1/rkward/plugins/00saveload/import/source.xml0000644000175000017500000000306012124345412022622 0ustar thomasthomas WARNING: This may overwrite existing objects without prompting! rkward-0.6.1/rkward/plugins/00saveload/import/load_data.xml0000644000175000017500000000140512124345412023233 0ustar thomasthomas WARNING: This may overwrite existing objects in .GlobalEnv. Be sure to save your workspace, first. WARNING: If the environment already exists, all objects inside it will be lost. rkward-0.6.1/rkward/plugins/00saveload/import/load_data.rkh0000644000175000017500000000276212124345412023226 0ustar thomasthomas Load an R data file. Chose the R file to import. This would be a file created e.g. by saving the workspace from RKWard, using the R save() command, or the plugin. The main difference to loading a workspace via Workspace->Open Workspace, is that the workspace is not cleaned, first, but rather merged with your existing workspace. If in doubt, use Workspace->Open Workspace, instead of this plugin. Be sure to save your workspace before using this plugin, as your variables will be overwritten, if the loaded workspace contains objects of the same names. The filename of the file to load Should the data be loaded into another (specified environment) instead of the global environment? Only applicable, if the above option is checked. Name of the environment to load the data to. If this does not yet exist, it will be created. If it already exists, it will be overwritten completely, i.e. deleting all objects inside it!
    rkward-0.6.1/rkward/plugins/00saveload/import/import_csv.js0000644000175000017500000000425112124345412023326 0ustar thomasthomasfunction calculate () { var tableOptions = ""; var quick = getValue ("quick"); if (quick == "table") { var dec = getValue ("dec"); if (dec == "other") dec = quote (getValue ("custom_dec")); var sep = getValue ("sep"); if (sep == "other") sep = quote (getValue ("custom_sep")); var quote_char = getValue ("quote"); if (quote_char == "other") quote_char = quote (getValue ("custom_quote")); var header = getValue ("header"); var fill = getValue ("fill"); var comchar = quote (getValue ("commentchar")); tableOptions = ", header=" + header + ", sep=" + sep + ", quote=" + quote_char + ", dec=" + dec + ", fill=" + fill + ", comment.char=" + comchar; } else { tableOptions = ""; } // Other method is to use read.table and show all the options - more transparent echo ('imported <- read.' + quick + ' (file="' + getValue("file") + '"' + tableOptions + ', '); // doing row names (what a pity...) var rowNameMode = getValue ("rowname"); if (rowNameMode == "number") echo ("row.names=NULL, "); else if (rowNameMode == "rowcol") echo ("row.names=" + getValue("nomrow") + ", "); else if (rowNameMode == "custoRow") echo ("row.names=" + getValue("rownames") + ", "); // doing col names (what a pity...) if (getValue("colname") == "custoCol") echo ( "col.names = " + getValue ("colnames") + ","); // doing col class (what a pity...) if (getValue("colclass") == "custoClass") echo( "colClasses = " + getValue ("custoClasses") + ","); //doing what is left echo (' na.strings = "' + getValue("na") + '", nrows = ' + getValue("nrows") + ', skip = ' + getValue("skip") + ', check.names = ' + getValue("checkname") + ', strip.white = ' + getValue("stripwhite") + ', blank.lines.skip = ' + getValue("blanklinesskip") + getValue("allow_escapes") + getValue("flush") + getValue("strings_as_factors") + ')\n'); echo ('\n'); echo ('# copy from the local environment to globalenv()\n'); echo ('.GlobalEnv$' + getValue("name") + ' <- imported\n'); if (getValue ("doedit")) { echo ('\n'); echo ('rk.edit (.GlobalEnv$' + getValue ("name") + ')\n'); } } function printout () { makeHeaderCode ("Import text / csv data", new Array("File" , getValue ("file"), "Import as", getValue ("name"))); } rkward-0.6.1/rkward/plugins/00saveload/import/import_stata.rkh0000644000175000017500000000332212124345412024015 0ustar thomasthomas Import STATA data files. Choose the STATA data file to import. Usually those files have the ending '*.dta. An R object containing the STATA data will be created. STATA files other than data files (i. e.:*.log, *.smcl, *.do, *.ado) are not supported. The filename of the file to import. This may also be a URL (http://, http:// and ftp:// are supported). The name of an R object to store the imported data in. If you chose an existing symbol name, you will be prompted, whether to overwrite this object. Whether the object should be opened for editing after it was imported. Convert Stata dates to R 'Date' class (see , ). R uses value labels only for factors. Should Stata variable with value labels be converted to factors? Stata version 8 and above differentiates various different type of missing values. If this option is set, this information is stored in an attribute of the imported data. See for details. The underscore ('_') is usually not used in R variable names, and may cause problems in some (rare) situations. Should underscore characters be converted to dots ('.')?
    rkward-0.6.1/rkward/plugins/00saveload/import/import_csv.rkh0000644000175000017500000001040612124345412023475 0ustar thomasthomas Import Comma Separated Value files (other delimiters besides comma are supported). Choose the CSV file to import. An R object containing the data will be created. See . The filename of the file to import The name of an R object to store the imported data in. If you chose an existing symbol name, you will be prompted, whether to overwrite this object. Whether the object should be opened for editing after it was imported Whether the first row of the file contains should be interpreted as column names Decimal character used in the imported file If you selected "other" above, specify the character, here. The separator character used in the imported file If you selected "other" above, specify the character, here. How to determine row names? Either the rows can be numbered 1...n. Or you can specify a single column containing the row names (typically the first). Or you can provide a character vector of names. See above. The column containing the row names, given either as a number, or as a column name (in the latter case, make sure to quote the name) See above. A vector of column names (e.g. c ("row1", "row2", ..., "rown"), but you can also specify the name of an R object containing the names to use) Use default column names (possibly read from first row of file), or use specific names? See above. Specify a character vector of column names (e.g. c ("col1", "col2", ..., "coln"), but you can also specify the name of an R object containing the names to use) Should additional columns (not specified above, and not within the first five rows of input) be skipped? See parameter flush in . Should be class of each column be determined automatically, or specified? See above. Specify a character vector with the names of the classes to use for each column. Should a backslash ('\') followed by a character be treated as an escaped character? Otherwise the sequence is read literally. Should columns containing character data be converted to factors in R, or should they be read as character vectors? String delimiter character(s) used in the file If you selected "other" above, you can specify which quoting character to use, here. Simply enter all character to use (without spaces or comma, e.g. "'@ to use ", ', and @ as string delimiters). This many rows will be skipped at the start of the file. Use, for instance, if the file contains a text header. Maximum number of rows to read (-1 to read all lines) How are missing values (NAs) written in the file to be imported? If you enter a single character, here, everything after that character in a line will be ignored. Leave blank to disable detection of comments. If checked, and the rows have differing length, they will be padded with empty values in the imported data. Should column names be checked for validity? Should leading and trailing white space be removed from character fields? Should blank lines be ignored?
    rkward-0.6.1/rkward/plugins/00saveload/import/import_xls.xml0000644000175000017500000000411612124345412023525 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/import/import_xls.rkh0000644000175000017500000000271112124345412023510 0ustar thomasthomas Import a sheet of a Microsoft Excel file into a data frame. Choose the Microsoft Excel file (XLS (Excel 97-2004), XLSX (Excel 2007+)) to import a sheet from. An R object containing the data will be created. See . Note: The this plugin requires a properly working Perl setup. See for details. The filename of the file to import The name of an R object to store the imported data in. If you chose an existing symbol name, you will be prompted, whether to overwrite this object. Specifies the sheet which is imported from a Microsoft EXCEL file Print details as the file is processed Defines a number of rows to skip Defines a number of rows to skip Whether the object should be opened for editing after it was imported Whether the first row of the file contains should be interpreted as column names
    rkward-0.6.1/rkward/plugins/00saveload/import/import_csv.xml0000644000175000017500000002040712124345412023513 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/import/import_spss.xml0000644000175000017500000000645312124345412023715 0ustar thomasthomas rkward-0.6.1/rkward/plugins/00saveload/import/import_xls.js0000644000175000017500000000256012124345412023342 0ustar thomasthomasfunction preprocess () { echo ('require (gdata)\n'); } function calculate () { var options = ""; var header = getValue ("header"); var verbose = getValue ("verbose"); var sheet = getValue ("sheetname"); var quote_char = getValue ("quote"); if (quote_char == "other") quote_char = quote (getValue ("custom_quote")); options = ", header=" + header + ", verbose=" + verbose; var object = getValue ("saveto"); echo ('data <- read.xls ("' + getValue ("file") + '", sheet="' + sheet + '"' + options + ', '); echo (' nrows=' + getValue ("nrows") + ', skip=' + getValue ("skip") + ', na.string="'+ getValue ("na") +'"' + getValue("strings_as_factors") + ', check.names = ' + getValue("checkname") + ', strip.white = ' + getValue("stripwhite") + ')\n'); echo ('.GlobalEnv$' + object + ' <- data # assign to globalenv()\n'); if (getValue ("doedit") ) { echo ('rk.edit (.GlobalEnv$' + object + ')\n'); } } function printout () { makeHeaderCode ("Import Microsoft EXCEL sheet", new Array("File", getValue ("file"), "Imported to", getValue ("saveto"), "Imported Sheet", getValue ("sheetname"), "First row as header", getValue ("header"), "Max number of rows to skip (-1 for no limit)", getValue ("skip"), "Number of lines to read (-1 for no limit)", getValue ("nrows"), "Character for missing values", getValue ("na"))); } rkward-0.6.1/rkward/plugins/00saveload/import/source.rkh0000644000175000017500000000321112124345412022604 0ustar thomasthomas Run an R source file. Select a file to load. This file will be loaded and interpreted as a script of R statements, which are then evaluated (see ). The filename of the source file to run If checked, the working directory will be changed of the directory of the source file. This may be needed, if the source file refers to further files using relative paths. If checked, the source file is interpreted in a local environment, instead of the global environment. This is much safer, as no existing objects will be overwritten. On the other hand, if the purpose of the source file is to create new objects (in contrast to just producing printed output), it will have to be run in the global environment. Should each source statement be echoed after parsing, and before evaluation? What should be printed at the start of each echoed source line (to differentiate it from the output)? Leave empty for the default. Maximum length of an echoed source line. Print additional diagnostics. Print the result of each single evaluation (instead of just the final result).
    rkward-0.6.1/rkward/plugins/00saveload/import/import_stata.js0000644000175000017500000000276112124345412023653 0ustar thomasthomasfunction preprocess () { echo ('require (foreign)\n'); } function calculate () { var options = ""; if (getValue ("convert_dates")) { options += ", convert.dates=TRUE" ; } else { options += ", convert.dates=FALSE" ; } if (getValue ("convert_factors")) { options += ", convert.factors=TRUE" ; } else { options += ", convert.factors=FALSE" ; } if (getValue ("missing_type")) { options += ", missing.type=TRUE" ; } else { options += ", missing.type=FALSE" ; } if (getValue ("convert_underscore")) { options += ", convert.underscore=TRUE" ; } else { options += ", convert.underscore=FALSE" ; } var object = getValue ("saveto"); echo ('data <- read.dta ("' + getValue ("file") + '"' + options + ')\n'); echo ('\n'); echo ('# set variable labels for use in RKWard\n'); echo ('labels <- attr (data, "var.labels")\n'); echo ('if (!is.null (labels)) {\n'); echo (' for (i in 1:length (labels)) {\n'); echo (' col <- make.names (attr (data, "names")[i] )\n'); echo (' if (!is.null (col)) {\n'); echo (' rk.set.label (data[[col]], labels[i])\n'); echo (' }\n'); echo (' }\n'); echo ('}\n'); echo ('\n'); echo ('.GlobalEnv$' + object + ' <- data # assign to globalenv()\n'); if (getValue ("doedit") ) { echo ('rk.edit (.GlobalEnv$' + object + ')\n'); } } function printout () { makeHeaderCode ("Import Stata File", new Array("File", getValue ("file"), "Imported to", getValue ("saveto"))); } rkward-0.6.1/rkward/plugins/00saveload/setworkdir.xml0000644000175000017500000000037212124345412022210 0ustar thomasthomas rkward-0.6.1/rkward/plugins/irt.pluginmap0000644000175000017500000001215012124345412020044 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/0000755000175000017500000000000012124345413016473 5ustar thomasthomasrkward-0.6.1/rkward/plugins/plots/plot_options.xml0000644000175000017500000002064312124345413021753 0ustar thomasthomas Interpret these labels as literal (quoted) strings? Note that if Aspect is a finite positive value then the window is set up so that one data unit in the x direction is equal in length to asp * one data unit in the y direction. The special case Aspect == 1 produces plots where distances between points are represented accurately on screen. Values with Aspect > 1 can be used to produce more accurate maps when using latitude and longitude. rkward-0.6.1/rkward/plugins/plots/barplot.xml0000644000175000017500000000545412124345413020670 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/color_chooser.xml0000644000175000017500000001041612124345413022057 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/sieve_plot.rkh0000644000175000017500000000076412124345413021361 0ustar thomasthomas Draw Extended Mosaic Plot DUMMY: Matrix, vector or a factor. Data needs to be numeric unless the tabulate option is checked, below.
    rkward-0.6.1/rkward/plugins/plots/plot_options.js0000644000175000017500000000700112124345413021560 0ustar thomasthomasfunction prepareLabel (labelname) { var quoted = (getValue (labelname + "isquote") == "1"); var label = getValue (labelname); if (label == "") { label = getValue ("default_" + labelname); quoted = false; } if ((label != "") && (quoted)) label = quote (label); if (label != "") label = ", " + labelname + "=" + label; return label; } function preprocess () { if (getValue ("custom_margins.checked")) { echo ("par (mar=c (" + getValue ("margin_bottom") + ", " + getValue ("margin_left") + ", " + getValue ("margin_top") + ", " + getValue ("margin_right") + "))\n"); } } function calculate () { if (getValue ("grid_enable.numeric")) { echo (getValue ("grid_options.code.printout")); } } function printout () { var log = ""; var xaxt = ""; var yaxt = ""; var xlim = ""; var ylim = ""; var xlab = ""; var ylab = ""; var main = ""; var sub = ""; var xvars = ""; var xvar = ""; var yvars = ""; var yvar = ""; var xminvalue = ""; var xmaxvalue = ""; var yminvalue = ""; var ymaxvalue = ""; var type = ""; var col = ""; var asp = ""; var las = ""; var cexaxis = ""; var options = ""; xvars = getValue ("xvar").split ("\n"); if (xvars.length > 1) { xvar = "c (" + xvars.join (", ") + ")"; } else { xvar = xvars[0]; } yvars = getValue ("yvar").split ("\n"); if (yvars.length > 1) { yvar = "c (" + xvars.join (", ") + ")"; } else { yvar = yvars[0]; } if (yvar == "") { yvar = "1:length (" + xvar +")"; } else if (xvar == "") { // don't replace both at the same time, even if both are empty xvar = "1:length (" + yvar +")"; } // X axis xaxt = getValue ("xaxt"); if (xaxt != "") { xaxt = ", xaxt=\"" + xaxt + "\""; } log += getValue ("xlog"); xlab = prepareLabel ("xlab"); xminvalue = getString ("xminvalue"); xmaxvalue = getString ("xmaxvalue"); if ((xminvalue != "") || (xmaxvalue != "")) { xlim = ", xlim=c ("; if ((xminvalue == "") && (xvar != "")) xlim += "min (" + xvar + ")"; else xlim += xminvalue; xlim += ", "; if ((xmaxvalue == "") && (xvar != "")) xlim += "max (" + xvar + ")"; else xlim += xmaxvalue; xlim += ")"; } // same for Y axis yaxt = getValue ("yaxt"); if (yaxt != "") { yaxt = ", yaxt=\"" + yaxt + "\""; } log += getValue ("ylog"); ylab = prepareLabel ("ylab"); yminvalue = getString ("yminvalue"); ymaxvalue = getString ("ymaxvalue"); if ((yminvalue != "") || (ymaxvalue != "")) { ylim = ", ylim=c ("; if ((yminvalue == "") && (yvar != "")) ylim += "min (" + yvar + ")"; else ylim += yminvalue; ylim += ", "; if ((ymaxvalue == "") && (yvar != "")) ylim += "max (" + yvar + ")"; else ylim += ymaxvalue; ylim += ")"; } // las : axis tick label orientation las = getValue ("ticklblrot") if (las == "") las = getValue ("default_ticklblrot"); if (las != "") las = ", las=" + las; // cex.axis : axis tick label scale cexaxis = getValue ("cexaxis") if (cexaxis != "") cexaxis = ", cex.axis=" + cexaxis; // final touches if (log != "") log = ", log=\"" + log + "\""; type = getValue ("pointtype"); if (type == "") type = getValue ("default_pointtype"); if (type != "") type = ", type=\"" + type + "\""; //color of points / lines col = getValue ("pointcolor.code.printout"); // main and subtitle to the plot main = prepareLabel ("main"); sub = prepareLabel ("sub"); //define the aspect y/x of the plot asp = getValue ("asp"); if (asp != 0) asp = ", asp=" + asp; else asp = ""; // make option string options = type + col + xaxt + yaxt + log + xlim + ylim + xlab + ylab + main + sub + asp + las + cexaxis; echo (options); } rkward-0.6.1/rkward/plugins/plots/box_plot.rkh0000644000175000017500000000712012124345413021027 0ustar thomasthomas Creates a box plot of one or more variables. Chose numerical data to be plotted. Data can be organized in separate vectors, or in a single outcome variable and one or more grouping variables. Select the format of your data. This can either be separate numerical vectors, or a single outcome variable split by one or more grouping variables. For separate variables mode: Select one or more numerical vectors. For single(grouped) variable mode: Select one numerical vectors as the outcome variable. For single(grouped) variable mode: Select one or more vectors by which to group the outcome variable. Group variables should have the same length as the outcome variable. For single(grouped) variable mode: Doding boxes within one or more groups can be a nice option when the outcome is split by several group variables. This allows you to select, across how many group variables, boxes should be doged ("0" for no dodging, "1" to dodge only the first group variable). Method for assigning labels to the plot. "default" means, the labels are chosen automatically. If no labels are available, this will generally print the values. The other options allow you to specify the labels as literal string, or as an R statement (e.g. if the names are stored in a different variable in the workspace). Allows to change the width of the boxes, relative to the entire plot. Orientation of the plot: horizontal or vertical. Whether to draw notches Whether to draw outliers (if any). Outliers are draw as dots, if this option is checked. Whether to draw a mark indicating the mean. Trim applies only to the arithmetic mean. By default trim is set to zero. It defines the fraction of observations to be trimmed from each end of a variable before the arithmetic mean is computed. If the mean is to be indicated: Symbol to use as mark. Use this option to select a specific type of mean. The arithmetic mean is the default. Others include the geometric mean, the harmonic mean and interquartile mean (IQM). Whether to draw a mark indicating the standard deviation. If the standard deviation is to be indicated: Symbol to use as mark for the upper sd. If the standard deviation is to be indicated: Symbol to use as mark for the lower sd. Size of mean / sd idicators. This option is only availble, if at least one of mean or sd are to be drawn. Color of mean / sd idicators. This option is only availble, if at least one of mean or sd are to be drawn. Since these settings are reused in further plugins, they are documented on a page of their own: See .
    rkward-0.6.1/rkward/plugins/plots/plot_stepfun_options.js0000644000175000017500000000204312124345413023325 0ustar thomasthomasfunction printout () { var options = ""; var addtoplot = getValue ("addtoplot"); if (addtoplot) options += ', add=TRUE'; var lty = getValue ("linetype"); if (lty != "") options += ", lty=\"" + lty + "\""; var verticals = getValue ("verticals"); if (verticals) { options += ', verticals=TRUE' + getValue ("col_vert.code.printout"); } else options += ', verticals=FALSE'; var do_points = getValue ("do_points"); if (do_points) { options += getValue ("col_points.code.printout"); } else options += ', do.points=FALSE'; var col_hor = getValue ("col_hor.code.printout"); if (col_hor != "") options += getValue ("col_hor.code.printout"); if (getValue ("allow_col01line")) { var col_y0 = getValue ("col_y0.code.printout"); var col_y1 = getValue ("col_y1.code.printout"); if ((col_y0 != "") && (col_y1 != "")) { options += ", col.01line=c(" + col_y0 + "," + col_y1 + ")"; } else if ((col_y0 != "") || (col_y1 != "")) { options += ", col.01line=" + col_y0 + col_y1; } // col.01line option to plot.ecdf() } echo (options); } rkward-0.6.1/rkward/plugins/plots/stripchart_plot.xml0000644000175000017500000000361712124345413022445 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/histogram_options.js0000644000175000017500000000520612124345413022604 0ustar thomasthomas// globals var histcalcoptions; var histplotoptions; var headeroptions; function makeCodes () { histcalcoptions = ", breaks="; histplotoptions = ""; headeroptions = ""; var varname = getValue ("varname"); var histbreaks = getValue ("histbreaksFunction"); headeroptions += ', "Break points", "'; if (histbreaks == "cells") { histcalcoptions += getValue ("histbreaks_ncells"); headeroptions += 'Approximately ' + getValue ("histbreaks_ncells") + ' cells"'; } else if (histbreaks == "int") { histcalcoptions += "seq (floor (min (" + varname + ", na.rm=TRUE))-0.5, ceiling (max (" + varname + ", na.rm=TRUE))+0.5)"; headeroptions += 'Integers"'; } else if (histbreaks == "vec") { histcalcoptions += "(function(x) {y = extendrange(x,f=0.1); seq(from=y[1], to=y[2], length=" + getValue ("histbreaks_veclength") + ")})(" + varname + ")"; headeroptions += 'Equally spaced vector of length ' + getValue ("histbreaks_veclength") + '"'; } else { histcalcoptions += "\"" + histbreaks + "\""; headeroptions += histbreaks + '"'; } var right = getValue ("rightclosed"); if (!right) { headeroptions += ', "Right closed", "FALSE"'; histcalcoptions += ", right=FALSE"; } else { headeroptions += ', "Right closed", "TRUE"'; } var inclowest = getValue ("include_lowest"); if (!inclowest) { headeroptions += ', "Include in lowest cell", "FALSE"'; histcalcoptions += ", include.lowest=FALSE"; } else { headeroptions += ', "Include in lowest cell", "TRUE"'; } var freq = getValue ("freq"); if (!freq) { histplotoptions += ", freq=FALSE"; headeroptions += ', "Scale", "Density"'; } else { headeroptions += ', "Scale", "Frequency"'; } var addbars = getValue ("addtoplot"); if (addbars) histplotoptions += ", add=TRUE"; var labels = getValue ("barlabels"); if (labels) histplotoptions += ", labels=TRUE"; var histlty = getValue ("histlinetype"); histplotoptions += ", lty=" + "\"" + histlty + "\""; var histbordercol = ""; if (histlty != "blank") { var density = getValue ("density"); histplotoptions += ", density=" + density; if (density > 0) histplotoptions += ", angle=" + getValue ("angle"); if (getValue ("doborder")) { histbordercol = getValue ("histbordercol.code.printout"); } else { histbordercol = ", border=FALSE"; } } var histfillcol = ""; if (getValue ("usefillcol")) histfillcol = getValue ("histfillcol.code.printout"); histplotoptions += histbordercol + histfillcol; } function preprocess () { makeCodes(); echo (headeroptions); } function calculate () { // makeCodes() has already run echo (histcalcoptions); } function printout () { // makeCodes() has already run echo (histplotoptions); } rkward-0.6.1/rkward/plugins/plots/scatterplot_matrix.xml0000644000175000017500000000217312124345413023150 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/stem.js0000644000175000017500000000100212124345413017772 0ustar thomasthomasfunction printout () { var x = getValue ("x"); var scale = getValue ("scale"); var width = getValue ("width"); var atom = getValue ("atom"); echo ('rk.header ("Stem-and-Leaf Plot",\n'); echo (' parameters=list ("Variable", paste (rk.get.description (' + x + ')), "Plot Length", "' + scale + '","Plot Width", "' + width + '", "Tolerance", "' + atom + '"))\n'); echo ('\n'); echo ('rk.print.literal(capture.output(stem(' + x + ', scale = ' + scale + ', width = ' + width + ', atom = ' + atom + ')))\n'); } rkward-0.6.1/rkward/plugins/plots/dotchart.xml0000644000175000017500000000546712124345413021041 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/barplot_embed.xml0000644000175000017500000000271412124345413022020 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/plot.xml0000644000175000017500000000137612124345413020202 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/plot_stepfun_options.xml0000644000175000017500000000473512124345413023523 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/ecdf_plot.xml0000644000175000017500000000515412124345413021161 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/sieve_plot.js0000644000175000017500000000233312124345413021203 0ustar thomasthomas/* ------- This file generated by php2js from PHP code. -------- Please check this file by hand, and remove this notice, afterwards. Messages: Note: Control statement without braces. This is bad style. Note: Control statement without braces. This is bad style. ---------------------------- */ // globals var undefined; function preprocess () { echo ('require(vcd)\n'); } function printout () { doPrintout (true); } function preview () { preprocess (); doPrintout (false); } function doPrintout (full) { var vars = getValue ("x"); var shade = getValue ("shade"); var sievetype = getValue ("sievetype"); { echo ('x <- ' + vars); } echo ('\n'); if (full) { echo ('rk.header ("Extended Sieve Plot", parameters=list ("Variable", rk.get.description (' + vars + '), "shade", ' + shade + '))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' sieve(x, shade = ' + shade + ', sievetype = "' + sievetype + '" ' + getValue ("plotoptions.code.printout") + ')\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/scatterplot.xml0000644000175000017500000001050512124345413021562 0ustar thomasthomas Enter value - for diff.col. enter a vector -
    eg: c(1,2) or c('red','green')
    A numerical value giving the amount by which plotting text and symbols should be scaled relative to the default. Either an integer specifying a symbol or a single character to be used as the default in plotting points.
    rkward-0.6.1/rkward/plugins/plots/plot_options.rkh0000644000175000017500000001577412124345413021750 0ustar thomasthomas Generic plot options plugin. More often than not, this plugin is embeded into other plugins. As a result, not all the features explained here are available in a specific embeded situation. When a particular feature is available, it is explained as below. Set or change the various graphical paramters to the plot function. This is the main argument to plot.default. See R reference on plot.default. To achieve a line-break (in a quoted string), enter '\n'. If this box is checked, the main title will be used literally (quoted). Otherwise is will be interpreted as an R statement This is the sub argument to plot.default. See R reference on plot.default. To achieve a line-break (in a quoted string), enter '\n'. If this box is checked, the sub title will be used literally (quoted). Otherwise is will be interpreted as an R statement Enable this option, if you want to customize the margins. Size of top margin. Size is specified in (approximate) line heights. Size of bottom margin. Size is specified in (approximate) line heights. Size of left margin. Size is specified in (approximate) line heights. Size of right margin. Size is specified in (approximate) line heights. Uncheck this box to avoid drawing the X axis. This is the xaxt argument to par. See R reference on par. Uncheck this box to avoid drawing the Y axis. This is the yaxt argument to par. See R reference on par. This specifies the log argument to plot.default. Check this box to set log="x". See R reference on plot.default. This specifies the log argument to plot.default. Check this box to set log="y". Check both the boxes to set log="xy". See R reference on plot.default. The X and Y axis labels. These are the xlab and ylab arguments to plot.default, respectively. The checkboxes enable or disable the labels being evaluated as literal (quoted) strings. To achieve a line-break (in a quoted string), enter '\n'. The X and Y axis limits. These are the xlim and ylim arguments to plot.default respectively. For automatic evaluation of the limits, leave these blank. Choose one of the listed point/line types for the plot. To let the calling function use its default plotting type, choose the 'default' option. This is the type argument to plot.default. Choose one of the listed point/line colors for the plot. To let the calling function use its default plotting color, choose the 'default' option. This is the col argument to plot.default. This is the asp argument to plot.default. Check this box to add a grid to the current plot. For various grid options see . Note that these options are not for plot.default but rather for the function grid. For this to be functional the embedding plugin should implement it internally.
    General users may skip this section of help, this is primarily for developers. The following external tags are provided for use in the embedding plugin.
    • xvar: The variable to be used for the x-coordinates.
    • yvar: The variable to be used for the y-coordinates.
    • default_pointtype: A string that provides the default point type when the user chooses 'Default' for 'Type of points/lines'. The possibilities are p,l,b,o,h,s and S; the options for the type argument.
    • default_pointcolor: A string that provides the default point color when the user chooses 'Default' for 'Color'. For various possibilities see the code color_chooser.xml; the options for the col argument.
    • default_main: A string specifying the main argument to plot.default. By default this is "" which means that the main title generated by the plotting function is used. Note: The default is always used unquoted. If you want to specify a literal string add quotes, explicitly, as "&quote;".
    • default_sub: Similar to main above but for the subtitle argument sub.
    • default_xlab: Similar to main above but for the X-label argument xlab.
    • default_ylab: Similar to main above but for the Y-label argument ylab.
    • allow_log: Setting this to "true" ("false") enables (disables) the display of 'X axis logarithmic' and 'Y axis logarithmic' checkboxes.
    • allow_xlim: Setting this to "true" ("false") enables (disables) the display of 'Min X value' and 'Max X value' input boxes.
    • allow_ylim: Setting this to "true" ("false") enables (disables) the display of 'Min Y value' and 'Max Y value' input boxes.
    • allow_type: Setting this to "true" ("false") enables (disables) the display of the 'Points / Lines' tab.
    • allow_aspect: Setting this to "true" ("false") enables (disables) the display of the 'Aspect ratio' tab.
    • allow_grid: Setting this to "true" ("false") enables (disables) the display of the 'Grid' tab. If "true", the actual code for grid options can be extracted from code.calculate (see below) which in turn extracts it from grid_options.code.printout. Specifically, if the plot options plugin is embeded using an id="plot_options" then the following call:
      printIndented ("\t", getRK_val ("plot_options.code.calculate"));

      after the plotting function should do the job.
    In order to allow flexible use, the generated options are separated into different sections:
    • code.preprocess: Nothing yet, but will hopefully include some par options.
    • code.calculate: Currently this contains only the grid-options.
    • code.printout: This contains all the other options determining the look of the plot.
    rkward-0.6.1/rkward/plugins/plots/barplot.js0000644000175000017500000000306712124345413020502 0ustar thomasthomasfunction printout () { doPrintout (true); } function preview () { doPrintout (false); } function doPrintout (full) { var varname = getValue ("x"); var names_mode = getValue ("names_mode"); var tabulate = getValue ("tabulate.checked"); var main_header = '"Variable"=rk.get.description (' + varname + ')'; if (tabulate) main_header = getValue ('tabulate_options.parameters'); var limit = getValue ("limit.checked"); var limit_header = ""; if (limit) limit_header = ", " + getValue ('limit_options.parameters'); var barplot_header = getValue ("barplot_embed.code.preprocess"); var barplot_main = getValue ("barplot_embed.code.printout"); if (tabulate) { echo (getValue ('tabulate_options.code.calculate')); } else { echo ('x <- ' + varname + "\n"); echo ('# barplot is a bit picky about attributes, so we need to convert to vector explicitely\n'); echo ('if(!is.matrix(x)) x <- as.vector(x)\n'); echo ('if(!is.matrix(x) && is.data.frame(x)) x <- data.matrix(x)\n'); } if (limit) { echo (getValue ('limit_options.code.calculate')); } if (names_mode == "rexp") { echo ("names(x) <- " + getValue ("names_exp") + "\n"); } else if (names_mode == "custom") { echo ("names(x) <- c (\"" + str_replace (";", "\", \"", trim (getValue ("names_custom"))) + "\")\n"); } if (full) { echo ('rk.header ("Barplot", parameters=list (' + main_header + limit_header + barplot_header + '))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndented ("\t", barplot_main); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/density_plot.xml0000644000175000017500000001024512124345413021734 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/histogram.js0000644000175000017500000000274712124345413021040 0ustar thomasthomasfunction printout () { doPrintout (true); } function preview () { doPrintout (false); } // internal helper functions function doPrintout (full) { var densityscaled = getValue ("densityscaled"); var bw = getValue ("bw"); var adjust = getValue ("adjust"); var narm = getValue ("narm"); var n = getValue ("n"); //called "resolution" var x = getValue ("x"); if (full) { echo ('rk.header ("Histogram", list ("Variable", rk.get.description (' + x + ') '); if ((densityscaled) && getValue ("density")) { echo (', "Density bandwidth", "'); echo (bw); echo ('", "Density adjust", '); echo (adjust); echo (', "Density resolution", '); echo (n); echo (', "Density Remove missing values", '); echo (narm); echo (' '); } echo (' ' + getValue ("histogram_opt.code.preprocess") + '))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' hist (' + x + getValue ("histogram_opt.code.calculate") + getValue ("histogram_opt.code.printout") + getValue ("plotoptions.code.printout") + ')\n'); if ((densityscaled) && getValue ("density")) { echo (' lines(density(' + x + ', bw="' + bw + '", adjust = ' + adjust + ', ' + narm + ', n = ' + getValue ("n") + ')' + getValue ("col_density.code.printout") + ')\n'); } printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/plot.rkh0000644000175000017500000000313112124345413020155 0ustar thomasthomas This is an implementation of the standard (traditional S) graphics function plot. Choose the X and Y variables and customize the options to draw the plot. Note: plot is a generic function. The type of plot you will actually get depends on the type of the input variables. For instance, for numeric vectors a scatterplot is produced (see below), while for data.frames as scatterplot matrix is plotted, etc. This is often useful to provide a meaningful visualization of the data, but does not allow for fine grained control. This is the x argument. And it is required to draw any plot. In the simplest case of plotting variables of class type integer/numeric, when "Y Variable" is not provided, this is actually the y-coordinate and the indices of the plotting variable is taken as the x-coordinate. See R reference on 'plot' for more details. This is the y argument. Note that this is not always needed, and does not have an effect for some types of x variables. Further generic plot options. Refer to for details. Note that some of these settings may not have an effect, depending on the type of plot actually produced.
    rkward-0.6.1/rkward/plugins/plots/piechart.js0000644000175000017500000000523212124345413020632 0ustar thomasthomasfunction printout () { doPrintout (true); } function preview () { doPrintout (false); } function doPrintout (full) { var vars = getValue ("x"); var tabulate = getValue ("tabulate.checked"); var main_header = '"Variable"=rk.get.description (' + vars + ')'; if (tabulate) main_header = getValue ('tabulate_options.parameters'); var limit = getValue ("limit.checked"); var limit_header = ""; if (limit) limit_header = ", " + getValue ('limit_options.parameters'); var radius = getValue ("radius"); var angle = getValue ("angle"); var angle_inc = getValue ("angle_inc"); var density = getValue ("density"); var density_inc = getValue ("density_inc"); var col = getValue ("colors"); var clockwise = getValue ("clockwise"); var clockwise_header = ""; if (clockwise) { clockwise_header = ', "Orientation"="Clockwise"'; } else { clockwise_header = ', "Orientation"="Counter clockwise"'; } var names_mode = getValue ("names_mode"); var options = ", clockwise =" + clockwise; if ((density >= 0) || (density_inc != 0)) options += ", density =" + density; if (density_inc != 0) options += " + " + density_inc + " * 0:length (x)"; if ((density > 0) || density_inc != 0) { options += ", angle =" + angle; if (angle_inc != 0) options += " + " + angle_inc + " * 0:length (x)"; } if (radius != 0.8) options += ", radius=" + radius; if (col == "rainbow") options += ", col=rainbow (if(is.matrix(x)) dim(x) else length(x))"; else if (col == "grayscale") options += ", col=gray.colors (if(is.matrix(x)) dim(x) else length(x))"; options += getValue ("plotoptions.code.printout"); if (tabulate) { echo (getValue ('tabulate_options.code.calculate')); } else { echo ('x <- ' + getValue ("x") + '\n'); echo ('if (!is.numeric (x)) {\n'); echo (' warning ("Data is not numeric, but proceeding as requested.\\nDid you forget to check the tabulate option?")\n'); echo ('}\n'); } if (getValue ("limit.checked")) { echo (getValue ('limit_options.code.calculate')); } echo ('\n'); if (full) { echo ('rk.header ("Pie chart", parameters=list (' + main_header + limit_header + clockwise_header + '))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); if (names_mode == "rexp") { echo ("\tnames(x) <- " + getValue ("names_exp") + "\n"); } else if (names_mode == "custom") { echo ("\tnames(x) <- c (\"" + str_replace (";", "\", \"", trim (getValue ("names_custom"))) + "\")\n"); } echo (' pie(x' + options + ')\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/scatterplot.js0000644000175000017500000000435612124345413021405 0ustar thomasthomasvar x; var y; function calculate () { x = str_replace ("\n", ",", trim (getValue ("x"))) ; y = str_replace ("\n", ",", trim (getValue ("y"))) ; var type = ""; if (getValue ("manual_type.numeric")) { type = getValue ("custom_type"); } else { type = "c ('" + getValue ("pointtype") + "')"; } var col = getValue ("col"); var pch = getValue ("pch"); var cex = getValue ("cex"); // input echo ('Xvars <- list(' + x + ')\n'); echo ('Yvars <- list(' + y + ')\n'); echo ('\n'); // verification (is this needed?) ?> echo ('if (length(Xvars) != length(Yvars)) {\n'); echo (' stop("Unequal number of X and Y variables given")\n'); echo ('}\n'); echo ('# find range of X/Y values needed\n'); echo ('Xrange <- range (c (Xvars), na.rm=TRUE)\n'); echo ('Yrange <- range (c (Yvars), na.rm=TRUE)\n'); echo ('\n'); echo ('type <- rep (' + type + ', length.out=length (Xvars));\n'); echo ('col <- rep (' + col + ', length.out=length (Xvars));\n'); echo ('cex <- rep (' + cex + ', length.out=length (Xvars));\n'); echo ('pch <- rep (' + pch + ', length.out=length (Xvars));\n'); } function printout () { doPrintout (true); } function preview () { calculate (); doPrintout (false); } function doPrintout (full) { if (full) { echo ('rk.header ("Scatterplot", parameters = list (\n'); echo (' "X variables"=paste (rk.get.description (' + x + '), collapse=", "),\n'); echo (' "Y variables"=paste (rk.get.description (' + y + '), collapse=", ")))\n'); echo ('\n'); echo ('rk.graph.on()\n'); echo ('\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' # make frame and axes\n'); echo (' plot(Xrange, Yrange, type="n"' + getValue ("plotoptions.code.printout") + ')\n'); echo (' \n'); echo (' # plot variables one X/Y pair at a time\n'); echo (' for (i in 1:length(Xvars)) {\n'); echo (' points (\n'); echo (' Xvars[[i]],\n'); echo (' Yvars[[i]],\n'); echo (' type = type[[i]],\n'); echo (' col = col[[i]],\n'); echo (' cex = cex[[i]],\n'); echo (' pch = pch[[i]]\n'); echo (' )\n'); echo (' }\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('\n'); echo ('rk.graph.off()\n'); } } rkward-0.6.1/rkward/plugins/plots/stem.rkh0000644000175000017500000000167612124345413020163 0ustar thomasthomas This produces a stem-and-leaf plot. Chose the data to produce the stem-and-leaf plot. See . For a more sophisticated stem-and-leaf plot refer to the Rcmdr package. Select the data to be computed. The vectors need to be numeric. This controls the length of the plot. A scale of 2 will make the plot roughly twice as long as the default. This controls the width of the plot. This defines the tolerance.
    rkward-0.6.1/rkward/plugins/plots/scatterplot_matrix.js0000644000175000017500000000157212124345413022766 0ustar thomasthomasfunction preprocess () { echo ('require(car)\n'); } function printout () { doPrintout (true); } function preview () { preprocess (); doPrintout (false); } function doPrintout (full) { var vars = trim (getValue ("x")).replace (/\n/g, ","); echo ('data <- data.frame (' + vars + ')\n'); echo ('\n'); if (full) { echo ('rk.header ("Scatterplot Matrix", parameters=list ("Diagonal Panels", "' + getValue("diag") + '", "Plot points", "' + getValue ("plot_points") + '", "Smooth", "' + getValue ("smooth") + '", "Ellipses", "' + getValue ("ellipse") + ' at 0.5 and 0.9 levels."))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try (scatterplotMatrix(data, diagonal="' + getValue("diag") + '", plot.points=' + getValue ("plot_points") + ', smooth=' + getValue ("smooth") + ', ellipse=' + getValue ("ellipse") + '))\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/barplot.rkh0000644000175000017500000000350112124345413020643 0ustar thomasthomas Creates a bar plot with vertical bars. Choose a matrix, vector or a factor to be plotted. Further options are available on the second tab. If your data needs to be tabulated / aggregated before plotting, check this option. Refer to for details on the dependent options. If your data is already suitable for plotting, directly, specify it here. Otherwise, leave this empty, and check the "Tabulate" option, above. If there are very many categories in your data, it may make sense to limit the amount of categories that will be displayed. Check this, if you want to set a limit. See Refer to for details on the dependent options. Method for assigning labels to the plot. "default" means, the labels are chosen automatically. If no labels are available, this will generally print the values. The other options allow you to specify the labels as literal string, or as an R statement (e.g. if the names are stored in a different variable in the workspace). Since these settings are reused in further plugins, they are documented on a page of their own: See .
    rkward-0.6.1/rkward/plugins/plots/dotchart.js0000644000175000017500000000336312124345413020646 0ustar thomasthomasfunction printout () { doPrintout (true); } function preview () { doPrintout (false); } function doPrintout (full) { var vars = getValue ("x"); var names_mode = getValue ("names_mode"); var tabulate = getValue ("tabulate.checked"); var main_header = '"Variable"=rk.get.description (' + vars + ')'; if (tabulate) main_header = getValue ('tabulate_options.parameters'); var limit = getValue ("limit.checked"); var limit_header = ""; if (limit) limit_header = ", " + getValue ('limit_options.parameters'); var options = getValue ("plotoptions.code.printout"); if (tabulate) { echo (getValue ('tabulate_options.code.calculate')); echo ('n <- names (x); x <- as.numeric (x); names (x) <- n # dotchart() is somewhat picky about data type\n'); } else { echo ('x <- ' + getValue ("x") + '\n'); echo ('if (!is.numeric (x)) {\n'); echo (' warning ("Data is not numeric, but proceeding as requested.\\nDid you forget to check the tabulate option?")\n'); echo ('}\n'); } if (getValue ("limit.checked")) { echo (getValue ('limit_options.code.calculate')); } echo ('\n'); if (full) { echo ('rk.header ("Dot chart", parameters=list (' + main_header + limit_header + '))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); if (names_mode == "rexp") { echo ("names(x) <- " + getValue ("names_exp") + "\n"); } else if (names_mode == "custom") { echo ("names(x) <- c (\"" + str_replace (";", "\", \"", trim (getValue ("names_custom"))) + "\")\n"); } printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' dotchart(x' + options + ')\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/ecdf_plot.rkh0000644000175000017500000000333012124345413021137 0ustar thomasthomas Plot an empirical cumulative distribution function. Select a variable to plot an ECDF for. The theoretcial normal distribution and a rug can be added to the plot. The variable to plot the ECDF Options to change the look of the ECDF plot itself. Refer to for details. Should a theoretical normal distribution curve be added to the plot? Should the normal distribution curve be adjusted to match the mean and standard deviation of the plotted data? If this is not set a normal curve with mean 0 and sd 1 is drawn. Color of the theoretical normal distribution curve. Should a rug be added to the plot? Should the rug be added above or below the plot? Height of the rug ticks Line width of the rug ticks Color of the rug Further generic plot options. Refer to for details.
    rkward-0.6.1/rkward/plugins/plots/barplot_embed.rkh0000644000175000017500000000377312124345413022012 0ustar thomasthomas Options applicable to bar plots Choose if you want stacked bars, legend, and rainbow colors. Also you can choose if you want to display or not bar values (labels) and in what place. Should a legend be added to the barplot? The row names of the data will be used to construct the legend, so this option has no effect, if the rows are not named. Select between grey and rainbow colors. Select a type between juxtaposed bars and stacked bars. This setting is only meaningful for two-dimensional data. If you chose stacked bars you can not display bar values, below. Select if you want to display bar values (labels). If you have selected to display bar values (labels) you can select where should they be displayed:
  • Above the bars
  • Beside the bars
  • Inside the bars
  • Generic plot options. See .
    This plugin is meant to be embedded in other plugins. It does not by itself provide a means to select input data. When embedding this plugin, you will be interested in the following properties:
    • xvar: The name of the data variable. You can connect this to a varslot, or set it to a fixed string such as "x". This is required.
    • code.preprocess: Provides a summary of parameters to be used in a call to rk.header(), if you have a use for it.
    • code.printout: The actual commands needed to construct the barplot.
    rkward-0.6.1/rkward/plugins/plots/plot.js0000644000175000017500000000120612124345413020006 0ustar thomasthomasfunction printout () { doPrintout (true); } function preview () { doPrintout (false); } function doPrintout (full) { var x = getValue ("xvarslot"); var y = getValue ("yvarslot"); if (!(y == "")) { y = ", " + y; } if (full) { echo ('rk.header ("Generic Plot")\n'); echo ('rk.graph.on ()\n'); } echo ('try({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' plot(' + x + y + getValue ("plotoptions.code.printout") + ');\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/stem.xml0000644000175000017500000000123312124345413020164 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/density_plot.rkh0000644000175000017500000000423012124345413021715 0ustar thomasthomas Plot an estimated density curve. Highest density regions can be marked up. Select a numeric vector to estimate density for. For further options, see below. A numeric vector to estimate density for. Type of plot: Plain density curve, or density curve with highest density regions marked up. For the second option, only the gaussian smoothing kernel is available (see below). Smoothing kernel to use. See for details on the available kernels. Mode of chosing bandwith. This is only applicable for gaussian smoothing kernels. This is the bw option of density(). Factor to adjust the bandwith by. Whether missing values should be removed. Otherwise missing values lead to an error during density estimation. Resolution of the density estimation, i.e. the number of (equally spaced) points at which the density is estimated. Should a rug be added to the plot? Height of the rug ticks, where 1 corresponds to the height of the entire plot. Line width of the rug. Should the rug be shown at the top or at the bottom of the plot? Color to use for drawing the rug. Further options regarding the look of the plot. See for details.
    rkward-0.6.1/rkward/plugins/plots/ecdf_plot.js0000644000175000017500000000270612124345413020775 0ustar thomasthomasfunction preprocess () { var x = getValue ("x"); echo ('yrange <- range (' + x + ', na.rm=TRUE)\n'); if (getValue ("th_pnorm") && getValue ("adjust_th_pnorm")) { echo ('data.mean <- mean (' + x + ', na.rm=TRUE)\n'); echo ('data.sd <- sd (' + x + ', na.rm=TRUE)\n'); } } function printout () { doPrintout (true); } function preview () { preprocess (); doPrintout (false); } function doPrintout (full) { var x = getValue ("x"); if (full) { echo ('rk.header ("Empirical Cumulative Distribution Function", list ("Variable", rk.get.description (' + x + '), "Minimum", yrange[1], "Maximum", yrange[2]))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' plot.ecdf (' + x + ', ' + getValue ("stepfun_options.code.printout") + getValue ("plotoptions.code.printout") + ')\n'); if (getValue ("th_pnorm")) { echo (' curve (pnorm'); if (getValue ("adjust_th_pnorm")) echo (" (x, mean=data.mean, sd=data.sd)"); echo (', from=yrange[1], to=yrange[2], add=TRUE, ' + getValue ("col_thnorm.code.printout") + ')\n'); } if (getValue ("rug")) { echo (' rug (' + x + ', ' + getValue ("ticksize") + ', ' + getValue ("lwd") + ', ' + getValue ("side") + getValue ("col_rug.code.printout") + ')\n'); } printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/stripchart_plot.js0000644000175000017500000000237212124345413022256 0ustar thomasthomasfunction printout () { doPrintout (true); } function preview () { doPrintout (false); } function doPrintout (full) { var opts = ""; var params = ""; var x = getValue ("x"); var g = getValue ("g"); var method = '"' + getValue ("method") + '"'; if (method == "\"jitter\"") { opts += ", jitter = " + getValue ("jitter"); params += ", \"Jitter\" = " + getValue ("jitter"); } else if (method == "\"stack\"") { opts += ", offset = " + getValue ("offset"); params += ", \"Offset\" = " + getValue ("offset"); } var orientation = getValue ("orientation"); if (orientation == "Vertical") opts += ", vertical = TRUE"; if (full) { echo ('rk.header ("Stripchart", list ("Variable"=rk.get.description (' + x + '), "Group"=rk.get.description (' + g + '), "Method"=' + method + params + ', "Orientation"="' + orientation + '"))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo ('\tstripchart (' + x + ' ~ (' + g + '), method = ' + method + opts + getValue ("plotoptions.code.printout") + ')\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/box_plot.xml0000644000175000017500000001134112124345413021043 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/dotchart.rkh0000644000175000017500000000337412124345413021020 0ustar thomasthomas Draw a dot chart Choose a matrix, vector or a factor to be plotted. Further options are available on the second tab. If your data needs to be tabulated / aggregated before plotting, check this option. Refer to for details on the dependent options. If your data is already suitable for plotting, directly, specify it here. Otherwise, leave this empty, and check the "Tabulate" option, above. If there are very many categories in your data, it may make sense to limit the amount of categories that will be displayed. Check this, if you want to set a limit. See Refer to for details on the dependent options. Method for assigning labels to the plot. "default" means, the labels are chosen automatically. If no labels are available, this will generally print the values. The other options allow you to specify the labels as literal string, or as an R statement (e.g. if the names are stored in a different variable in the workspace). Generic plot options. See .
    rkward-0.6.1/rkward/plugins/plots/scatterplot_matrix.rkh0000644000175000017500000000315512124345413023135 0ustar thomasthomas Scatterplot matrix plot produces scatterplot matrices with univariate displays down the diagonal. Choose one or more objects to be plotted. Choose the diagonal plot and how the scatterplots should be plotted from the options tab. Select a data matrix or a numeric data frame or more than one variables from a data matrix Select which plot should be plotted in the diagonal among
  • Density plot. See
  • Boxplot. See
  • Histogram. See
  • QQplot. See
  • No plot. Do not plot anything in the diagonal
  • Select it if you want points to be plotted in scatterplots. Select it if you want a lowess smooth to be plotted in scatterplots. Select it if you want data-concentration ellipses to be plotted in scatterplots. The ellipses are plotted at levels 0.5 and 0.9.
    rkward-0.6.1/rkward/plugins/plots/piechart.rkh0000644000175000017500000000627412124345413021011 0ustar thomasthomas Draw a pie chart Draws a pie chart from numerical data, or from tabulated data. Further options are available on the second tab. If your data needs to be tabulated / aggregated before plotting, check this option. Refer to for details on the dependent options. If your data is already suitable for plotting, directly, specify it here. Otherwise, leave this empty, and check the "Tabulate" option, above. If there are very many categories in your data, it may make sense to limit the amount of categories that will be displayed. Check this, if you want to set a limit. See Refer to for details on the dependent options. Method for assigning labels to the plot. "default" means, the labels are chosen automatically. If no labels are available, this will generally print the values. The other options allow you to specify the labels as literal string, or as an R statement (e.g. if the names are stored in a different variable in the workspace). Type of colors to use. Method for assigning labels to the plot. "default" means, the labels are chosen automatically. If no labels are available, this will generally print the values. The other options allow you to specify the labels as literal string, or as an R statement (e.g. if the names are stored in a different variable in the workspace). Define if slices should be drawn clockwise or counter clockwise. Radius of the pie. For long labels it may be necessary to make the pie smaller than the default. Density of shading lines (lines per inch). The default value of -1 means no shading lines are drawn. The density of shading lines can be varied per pie slice. Set this to values other than 0 to get different densities of shading lines for each slice. Slope of shading lines, given as an angle in degrees (counter-clockwise). This option is only available, if shading lines are drawn, as controlled by the density options above. The slope of shading lines can be varied per pie slice. Set this to values other than 0 to get different slopes of shading lines for each slice. This option is only available, if shading lines are drawn, as controlled by the density options above. Generic plot options. See .
    rkward-0.6.1/rkward/plugins/plots/histogram_options.rkh0000644000175000017500000001131412124345413022751 0ustar thomasthomas This plugin provides various options for hist or plot.histogram. This plugin is mostly used as an embeded plugin. All the GUI elements here set various parameters to either hist or plot.histogram functions. For parameter specific help see the respective R references. Few parameter combinations might not produce any sensible plot, so read the R references to make a judicious choice of parameters. Check this box if the histogram is to be added to the current plot. This is the add parameter. This is the freq parameter. This is the label parameter. This is the right parameter. This is the include.lowest parameter. This is the breaks parameter to hist, unless either 'Integer numbers' or 'Vector of break points' is chosen. The 'Integer numbers' options sets the break points as the integers between the minimum and the maximum of the variable. The 'Vector of break points' options sets equally spaced break points in the range of the variable. The number of break points in this case is provided by 'Vector length' (see below). If 'A single number' is chosen in the above field, then this provides a suggestion to the number of cells. This is the breaks parameter with a single number argument. If 'Vector of break points' is chosen in the above field, then this provides the length of the vector of equally spaced break points in the range of the variable. This is the breaks parameter with a vector argument. The actual sequence is calculated by an inline function call (see the generated code). The range of the variable is extended by 10% before obtaining the sequence, so that both the minimum and maximum points are included. Whether border to the histogram bars are to be drawn. If unchecked then, border=FALSE is added to the code. Otherwise a color is provided as the argument to border. This is the border argument which provides the color of the border. Check the above box to use this option. This is the lty parameter. Choosing 'Blank' will not draw any lines, select a fill color to make a sensible plot. See R reference for further details. This is the density parameter. See the R reference on 'rect' for more details. This is the angle parameter. Check this box to use a fill color for the histogram bars. This is the col parameter. The embeding plugin might set a default color. If it is empty, then col is not used in the code, otherwise the chosen color is used to fill the bars.
    General users may skip this section of help, this is primarily for developers. The following external tags are provided for use in the embedding plugin.
    • varname: For linking to the variable name for which histogram is being plotted. This is used in the 'Integer numbers' option for breaks.
    • allow_freq: Setting this to "true" ("false") enables (disables) the display of the 'Frequency' checkbox.
    • allow_barlabels: Setting this to "true" ("false") enables (disables) the display of the 'Bar labels' checkbox.
    • allow_addtoplot: Setting this to "true" ("false") enables (disables) the display of the 'Add bars to current plot' checkbox.
    In order to allow flexible use, the generated options are separated into three different sections:
    • code.preprocess: Options suitable for use in a call to rk.header(). These are safe to ignore, if you do not need them.
    • code.calculate: This contains only the breaks-option.
    • code.printout: This contains all the other options determining the look of the plot.
    rkward-0.6.1/rkward/plugins/plots/color_chooser.rkh0000644000175000017500000000057712124345413022052 0ustar thomasthomas Simple color picker. Pick a color. This plugin is meant to be used embedded, and you should not really ever see this help page. The color to use.
    rkward-0.6.1/rkward/plugins/plots/cor_graph.xml0000644000175000017500000000212312124345413021157 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/pareto.xml0000644000175000017500000000412712124345413020513 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/cor_graph.rkh0000644000175000017500000000403112124345413021143 0ustar thomasthomas Correlation Matrix Plot. On top the (absolute) value of the correlation is presented plus the result of the cor.test as stars. On bottom, the bivariate scatterplots are plotted with a fitted line. The graph and the code can be found at R Graph Gallery (137) Correlation Matrix, from where was adapted and formatted for RKWard. Choose one or more objects to be plotted. Choose the method to be used, how to treat missing values, what precision you want, and if you want to scale text. Select a data matrix or a numeric data frame or more than one variables from a data matrix Indicates which correlation coefficient (or covariance) is to be computed. One of "pearson", "kendall", or "spearman", can be used Select how to treat missing values. If use is "whole cases" then missing values are handled by casewise deletion. If use has the value "pairwise" then the correlation between each pair of variables is computed using all complete pairs of observations on those variables. This can result in covariance or correlation matrices which are not positive semidefinite. "pairwise" only works with the "pearson" method for cov and var. Select how many digits after decimal point sould be shown Select it if you want to scale text according to the (absolut) correlation value.
    • R Graph Gallery (137) Correlation Matrix
    rkward-0.6.1/rkward/plugins/plots/barplot_embed.js0000644000175000017500000000402412124345413021630 0ustar thomasthomas// globals var options; function preprocess () { var legend_label = ""; // first fetch all relevant options options = new Array(); options['xvar'] = getValue ("xvar"); options['type'] = getValue ("type"); if (options['type'] == "juxtaposed") { options['juxtaposed'] = true; options['labels'] = getValue ("labels"); if (options['labels']) { options['place'] = getValue ("place"); } } else { options['labels'] = false; options['juxtaposed'] = false; } options['legend'] = getValue ("legend"); options['colors'] = getValue ("colors"); // generate and print argument list suitable for display in rk.header if (options['legend']) legend_label = "TRUE"; else legend_label = "FALSE"; echo (', "colors"="' + options['colors'] + '", "Type"="' + options['type'] + '", "Legend"="' + legend_label + '"'); } function printout () { var col_option = ""; if (options['colors'] == 'rainbow') { col_option = ', col=rainbow (if(is.matrix(' + options['xvar'] + ')) dim(' + options['xvar'] + ') else length(' + options['xvar'] + '))'; } // construct the main call to barplot var main_call = 'barplot(' + options['xvar'] + col_option; if (options['juxtaposed']) main_call += ', beside=TRUE'; if (options['legend']) main_call += ', legend.text=TRUE'; if (options['labels']) main_call += ", ylim = yrange"; main_call += getValue ('plotoptions.code.printout'); main_call += ")\n"; var plot_pre = getValue ('plotoptions.code.preprocess'); var plot_adds = getValue ('plotoptions.code.calculate'); // now print everything as needed echo (plot_pre); if (options['labels']) { echo ('# adjust the range so that the labels will fit\n'); echo ('yrange <- range (' + options['xvar'] + ', na.rm=TRUE) * 1.2\n'); echo ('if (yrange[1] > 0) yrange[1] <- 0\n'); echo ('if (yrange[2] < 0) yrange[2] <- 0\n'); echo ("bplot <- "); } echo (main_call); if (options['labels']) { echo ('text (bplot,' + options['xvar'] + ', labels=' + options['xvar'] + ', pos=' + options['place'] + ', offset=.5)'); echo ("\n"); } echo (plot_adds); } rkward-0.6.1/rkward/plugins/plots/pareto.rkh0000644000175000017500000000315312124345413020475 0ustar thomasthomas Creates a pareto chart, and (optionally) prints the values. Choose a vector or a factor to be plotted. The frequency, cumulative frequency, percentage and cumulative percentage will be printed under the plot. If your data needs to be tabulated / aggregated before plotting, check this option. Refer to for details on the dependent options. If your data is already contains defect counts or defect costs, or other data suitable for direct display in a pareto chart, specify it here. Otherwise, leave this empty, and check the "Tabulate" option, above. Whether to print the frequency, cumulative frequency, percentage and cumulative percentage below the plot in the output window. If there are very many categories in your data, it may make sense to limit the amount of categories that will be displayed. Check this, if you want to set a limit. See Refer to for details on the dependent options. Further options for the plot. Refer to for details.
    rkward-0.6.1/rkward/plugins/plots/irt/0000755000175000017500000000000012124345413017271 5ustar thomasthomasrkward-0.6.1/rkward/plugins/plots/irt/polytomous/0000755000175000017500000000000012124345413021523 5ustar thomasthomasrkward-0.6.1/rkward/plugins/plots/irt/polytomous/plot_rsm.xml0000644000175000017500000000402712124345413024107 0ustar thomasthomas Only objects of class Rm are valid! rkward-0.6.1/rkward/plugins/plots/irt/polytomous/plot_pcm.xml0000644000175000017500000000403112124345413024060 0ustar thomasthomas Only objects of class Rm are valid! rkward-0.6.1/rkward/plugins/plots/irt/polytomous/plot_grm.js0000644000175000017500000001074112124345413023707 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If full is set to true, // it generates the full code, including headers. If full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var plot_type = getValue("plot_type"); var plot_type_item = getValue("plot_type_item"); var inp_items = getValue("inp_items"); var spin_from = getValue("spin_from"); var spin_to = getValue("spin_to"); var annotation = getValue("annotation"); var spin_categ = getValue("spin_categ"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options var arr_items = ""; var options = new Array() ; if (plot_type == "items" && plot_type_item == "ICC") options[options.length] = "type=\"ICC\"" ; if (plot_type == "items" && plot_type_item == "IIC") options[options.length] = "type=\"IIC\"" ; if (plot_type == "items" && plot_type_item == "OCCu") options[options.length] = "type=\"OCCu\"" ; if (plot_type == "items" && plot_type_item == "OCCl") options[options.length] = "type=\"OCCl\"" ; // plot all items? if (plot_type == "items" && inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options[options.length] = "items=c("+arr_items+")"; } // plot all categories? if (plot_type == "items" && spin_categ != 0) options[options.length] = "category="+spin_categ ; // for the test information curve, items must be set to "0": if (plot_type == "TIC") options[options.length] = "type=\"IIC\", items=0" ; // there is no option for standard error curves yet, so we need some extra magic // (see the "SEC" section in the plotting function below as well!) if (plot_type == "SEC") options[options.length] = "type=\"IIC\", items=0, plot=FALSE" ; // more advanced options // user defined zrange? we'll round it to two digits if (spin_from != -3.8 || spin_to != 3.8) options[options.length] = "zrange=c("+(Math.round(spin_from*100)/100)+","+(Math.round(spin_to*100)/100)+")" ; // annotate lines and show legend? if (annotation == "legend") options[options.length] = "legend=TRUE" ; if (annotation == "plain") options[options.length] = "annot=FALSE" ; if (full) { echo ('rk.header("Graded response model plot")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for $full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); // first we'll check wheter standard error curves should be plotted, // because it takes two steps to draw them: if (plot_type == "SEC") { echo (' # two steps are needed to plot standard error curves\n'); echo (' # first some values are generated...\n'); echo (' res <- plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); echo ('\n'); echo (' # ... and then they\'re used to plot the curves:\n'); echo (' plot(res[,"z"], 1/sqrt(res[,"test.info"]), lwd=2'); // we give come defaults, but they can be changed via the embedded plot options: if (!plot_ops_type) echo(", type=\"l\""); if (!plot_ops_xlab) echo(", xlab=\"Ability\""); if (!plot_ops_ylab) echo(", ylab=\"Standard Error\""); if (!plot_ops_main) echo(", main=\"Stadard Error of Measurement\""); if (plot_options) echo(plot_options); echo (')\n'); } // and this will be plotted if anything else than stadard error curves are chosen: else { echo (' plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); if (plot_options) echo(plot_options); echo (')\n'); } printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/polytomous/plot_pcm.js0000644000175000017500000000572312124345413023705 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If full is set to true, // it generates the full code, including headers. If full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var inp_items = getValue("inp_items"); var spin_abilfrom = getValue("spin_abilfrom"); var spin_abilto = getValue("spin_abilto"); var spin_probfrom = getValue("spin_probfrom"); var spin_probto = getValue("spin_probto"); var annotation = getValue("annotation"); var chk_ask = getValue("chk_ask"); var chk_mplot = getValue("chk_mplot"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options var arr_items = ""; var options = new Array() ; // plot all items? if (inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options[options.length] = "item.subset=c("+arr_items+")"; } if (chk_mplot == "mplot") options[options.length] = "mplot=TRUE" ; if (chk_ask != "ask") options[options.length] = "ask=FALSE" ; // more advanced options // user defined ranges? we'll round it to two digits if ((spin_abilfrom != -4 || spin_abilto != 4) && spin_abilfrom < spin_abilto) options[options.length] = "xlim=c("+(Math.round(spin_abilfrom*100)/100)+","+(Math.round(spin_abilto*100)/100)+")" ; if ((spin_probfrom != 0 || spin_probto != 1) && spin_probfrom < spin_probto) options[options.length] = "ylim=c("+(Math.round(spin_probfrom*100)/100)+","+(Math.round(spin_probto*100)/100)+")" ; // annotate lines and show legend? if (annotation == "plain") options[options.length] = "legpos=FALSE" ; if (full) { echo ('rk.header("Partial credit model plot")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' plotICC(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); if (plot_options) echo(plot_options); echo (')\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/polytomous/plot_grm.xml0000644000175000017500000000545412124345413024100 0ustar thomasthomas Only objects of class grm are valid! rkward-0.6.1/rkward/plugins/plots/irt/polytomous/plot_rsm.js0000644000175000017500000000572112124345413023725 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If full is set to true, // it generates the full code, including headers. If full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var inp_items = getValue("inp_items"); var spin_abilfrom = getValue("spin_abilfrom"); var spin_abilto = getValue("spin_abilto"); var spin_probfrom = getValue("spin_probfrom"); var spin_probto = getValue("spin_probto"); var annotation = getValue("annotation"); var chk_ask = getValue("chk_ask"); var chk_mplot = getValue("chk_mplot"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options var arr_items = ""; var options = new Array() ; // plot all items? if (inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options[options.length] = "item.subset=c("+arr_items+")"; } if (chk_mplot == "mplot") options[options.length] = "mplot=TRUE" ; if (chk_ask != "ask") options[options.length] = "ask=FALSE" ; // more advanced options // user defined ranges? we'll round it to two digits if ((spin_abilfrom != -4 || spin_abilto != 4) && spin_abilfrom < spin_abilto) options[options.length] = "xlim=c("+(Math.round(spin_abilfrom*100)/100)+","+(Math.round(spin_abilto*100)/100)+")" ; if ((spin_probfrom != 0 || spin_probto != 1) && spin_probfrom < spin_probto) options[options.length] = "ylim=c("+(Math.round(spin_probfrom*100)/100)+","+(Math.round(spin_probto*100)/100)+")" ; // annotate lines and show legend? if (annotation == "plain") options[options.length] = "legpos=FALSE" ; if (full) { echo ('rk.header("Rating scale model plot")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' plotICC(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); if (plot_options) echo(plot_options); echo (')\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/dichotomous/0000755000175000017500000000000012124345413021626 5ustar thomasthomasrkward-0.6.1/rkward/plugins/plots/irt/dichotomous/plot_ltm.js0000644000175000017500000001034112124345413024015 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If $full is set to true, // it generates the full code, including headers. If $full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var plot_type = getValue("plot_type"); var plot_type_item = getValue("plot_type_item"); var inp_items = getValue("inp_items"); var spin_from = getValue("spin_from"); var spin_to = getValue("spin_to"); var annotation = getValue("annotation"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options var arr_items = ""; var options = new Array() ; if (plot_type == "items" && plot_type_item == "ICC") options[options.length] = "type=\"ICC\"" ; if (plot_type == "items" && plot_type_item == "IIC") options[options.length] = "type=\"IIC\"" ; // plot all items? if (plot_type == "items" && inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options[options.length] = "items=c("+arr_items+")"; } // for the test information curve, items must be set to "0": if (plot_type == "TIC") options[options.length] = "type=\"IIC\", items=0" ; // there is no option for standard error curves yet, so we need some extra magic // (see the "SEC" section in the plotting function below as well!) if (plot_type == "SEC") options[options.length] = "type=\"IIC\", items=0, plot=FALSE" ; // the scatterplot is ltm specific: if (plot_type == "loadings") options[options.length] = "type=\"loadings\"" ; // more advanced options // user defined zrange? we'll round it to two digits if (spin_from != -3.8 || spin_to != 3.8) options[options.length] = "zrange=c("+(Math.round(spin_from*100)/100)+","+(Math.round(spin_to*100)/100)+")" ; // annotate lines and show legend? if (annotation == "legend") options[options.length] = "legend=TRUE" ; if (annotation == "plain") options[options.length] = "annot=FALSE" ; if (full) { echo ('rk.header("Two parameter logistic model plot")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); // first we'll check wheter standard error curves should be plotted, // because it takes two steps to draw them: if (plot_type == "SEC") { echo ('# two steps are needed to plot standard error curves\n'); echo (' # first some values are generated...\n'); echo (' res <- plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); echo ('\n'); echo (' # ... and then they\'re used to plot the curves:\n'); echo (' plot(res[,"z"], 1/sqrt(res[,"info"]), lwd=2'); // we give some defaults, but they can be changed via the embedded plot options: if (!plot_ops_type) echo(", type=\"l\""); if (!plot_ops_xlab) echo(", xlab=\"Ability\""); if (!plot_ops_ylab) echo(", ylab=\"Standard Error\""); if (!plot_ops_main) echo(", main=\"Stadard Error of Measurement\""); if (plot_options) echo(plot_options); echo (')\n'); } // and this will be plotted if anything else than stadard error curves are chosen: else { echo (' plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); if (plot_options) echo(plot_options); echo (')\n'); } printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/dichotomous/plot_tpm.xml0000644000175000017500000000476612124345413024223 0ustar thomasthomas Only objects of class tpm are valid! rkward-0.6.1/rkward/plugins/plots/irt/dichotomous/plot_ltm.xml0000644000175000017500000000521612124345413024206 0ustar thomasthomas Only objects of class ltm are valid! rkward-0.6.1/rkward/plugins/plots/irt/dichotomous/plot_rasch.js0000644000175000017500000001013512124345413024322 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If $full is set to true, // it generates the full code, including headers. If $full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var plot_type = getValue("plot_type"); var plot_type_item = getValue("plot_type_item"); var inp_items = getValue("inp_items"); var spin_from = getValue("spin_from"); var spin_to = getValue("spin_to"); var annotation = getValue("annotation"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options var arr_items = ""; var options = new Array() ; if (plot_type == "items" && plot_type_item == "ICC") options[options.length] = "type=\"ICC\"" ; if (plot_type == "items" && plot_type_item == "IIC") options[options.length] = "type=\"IIC\"" ; // plot all items? if (plot_type == "items" && inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options[options.length] = "items=c("+arr_items+")"; } // for the test information curve, items must be set to "0": if (plot_type == "TIC") options[options.length] = "type=\"IIC\", items=0" ; // there is no option for standard error curves yet, so we need some extra magic // (see the "SEC" section in the plotting function below as well!) if (plot_type == "SEC") options[options.length] = "type=\"IIC\", items=0, plot=FALSE" ; // more advanced options // user defined zrange? we'll round it to two digits if (spin_from != -3.8 || spin_to != 3.8) options[options.length] = "zrange=c("+(Math.round(spin_from*100)/100)+","+(Math.round(spin_to*100)/100)+")" ; // annotate lines and show legend? if (annotation == "legend") options[options.length] = "legend=TRUE" ; if (annotation == "plain") options[options.length] = "annot=FALSE" ; if (full) { echo ('rk.header("Rasch model plot")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); // first we'll check wheter standard error curves should be plotted, // because it takes two steps to draw them: if (plot_type == "SEC") { echo (' # two steps are needed to plot standard error curves\n'); echo (' # first some values are generated...\n'); echo (' res <- plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); echo ('\n'); echo (' # ... and then they\'re used to plot the curves:\n'); echo (' plot(res[,"z"], 1/sqrt(res[,"info"]), lwd=2'); // we give come defaults, but they can be changed via the embedded plot options: if (!plot_ops_type) echo(", type=\"l\""); if (!plot_ops_xlab) echo(", xlab=\"Ability\""); if (!plot_ops_ylab) echo(", ylab=\"Standard Error\""); if (!plot_ops_main) echo(", main=\"Stadard Error of Measurement\""); if (plot_options) echo(plot_options); echo (')\n'); } // and this will be plotted if anything else than stadard error curves are chosen: else { echo (' plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); if (plot_options) echo(plot_options); echo (')\n'); } printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/dichotomous/plot_tpm.js0000644000175000017500000001015612124345413024025 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If full is set to true, // it generates the full code, including headers. If full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var plot_type = getValue("plot_type"); var plot_type_item = getValue("plot_type_item"); var inp_items = getValue("inp_items"); var spin_from = getValue("spin_from"); var spin_to = getValue("spin_to"); var annotation = getValue("annotation"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options var arr_items = ""; var options = new Array() ; if (plot_type == "items" && plot_type_item == "ICC") options[options.length] = "type=\"ICC\"" ; if (plot_type == "items" && plot_type_item == "IIC") options[options.length] = "type=\"IIC\"" ; // plot all items? if (plot_type == "items" && inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options[options.length] = "items=c("+arr_items+")"; } // for the test information curve, items must be set to "0": if (plot_type == "TIC") options[options.length] = "type=\"IIC\", items=0" ; // there is no option for standard error curves yet, so we need some extra magic // (see the "SEC" section in the plotting function below as well!) if (plot_type == "SEC") options[options.length] = "type=\"IIC\", items=0, plot=FALSE" ; // more advanced options // user defined zrange? we'll round it to two digits if (spin_from != -3.8 || spin_to != 3.8) options[options.length] = "zrange=c("+(Math.round(spin_from*100)/100)+","+(Math.round(spin_to*100)/100)+")" ; // annotate lines and show legend? if (annotation == "legend") options[options.length] = "legend=TRUE" ; if (annotation == "plain") options[options.length] = "annot=FALSE" ; if (full) { echo ('rk.header("Birnbaum three parameter model plot")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); // first we'll check wheter standard error curves should be plotted, // because it takes two steps to draw them: if (plot_type == "SEC") { echo (' # two steps are needed to plot standard error curves\n'); echo (' # first some values are generated...\n'); echo (' res <- plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); echo ('\n'); echo (' # ... and then they\'re used to plot the curves:\n'); echo (' plot(res[,"z"], 1/sqrt(res[,"info"]), lwd=2'); // we give some defaults, but they can be changed via the embedded plot options: if (!plot_ops_type) echo(", type=\"l\""); if (!plot_ops_xlab) echo(", xlab=\"Ability\""); if (!plot_ops_ylab) echo(", ylab=\"Standard Error\""); if (!plot_ops_main) echo(", main=\"Stadard Error of Measurement\""); if (plot_options) echo(plot_options); echo (')\n'); } // and this will be plotted if anything else than stadard error curves are chosen: else { echo (' plot(' + getValue("x")); if (options.length > 0) echo(", "+options.join(", ")); if (plot_options) echo(plot_options); echo (')\n'); } printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/dichotomous/plot_rasch.xml0000644000175000017500000000500012124345413024501 0ustar thomasthomas Only objects of class rasch are valid! rkward-0.6.1/rkward/plugins/plots/irt/tests/0000755000175000017500000000000012124345413020433 5ustar thomasthomasrkward-0.6.1/rkward/plugins/plots/irt/tests/eRm_plotLR.js0000644000175000017500000001000312124345413023002 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { // this function takes care of generating the code for the printout() section. If full is set to true, // it generates the full code, including headers. If full is set to false, only the essentials will // be generated. // let's read all values into php variables for the sake of readable code var rad_splitcr = getValue("rad_splitcr"); var splitvector = getValue("splitvector"); var inp_items = getValue("inp_items"); var chk_se = getValue("chk_se"); var chk_confint = getValue("chk_confint"); var spin_confint = getValue("spin_confint"); var chk_ctrline = getValue("chk_ctrline"); var spin_ctrline = getValue("spin_ctrline"); var spin_abilfrom = getValue("spin_abilfrom"); var spin_abilto = getValue("spin_abilto"); var annotation = getValue("annotation"); // in case there are generic plot options defined: var plot_options = getValue("plotoptions.code.printout"); var plot_ops_main = getValue("plotoptions.main"); var plot_ops_type = getValue("plotoptions.pointtype"); var plot_ops_xlab = getValue("plotoptions.xlab"); var plot_ops_ylab = getValue("plotoptions.ylab"); /////////////////////////////////// // check for selected options // these two arrays will contain the options for the two functions that will be called: var arr_items = ""; var options_lrtest = new Array() ; var options_plotgof = new Array() ; // plot all items? if (inp_items) { // for user convenience, we replace "-", ";" and space, split all input into an array // and join it again, separated by commas: arr_items = inp_items.replace(/-/g,":").replace(/\s|;/g,","); options_plotgof[options_plotgof.length] = "beta.subset=c("+arr_items+")"; } if (rad_splitcr == "mean" || rad_splitcr == "all.r") options_lrtest[options_lrtest.length] = "splitcr=\""+rad_splitcr+"\""; if (rad_splitcr == "vector" && splitvector) options_lrtest[options_lrtest.length] = "splitcr="+splitvector; if (chk_se == "se") options_lrtest[options_lrtest.length] = "se=TRUE"; if (chk_confint == "conf") { if (spin_confint != 0.95) options_plotgof[options_plotgof.length] = "conf=list(gamma="+(Math.round(spin_confint*100)/100)+", col=\"red\", lty=\"dashed\", ia=FALSE)"; else options_plotgof[options_plotgof.length] = "conf=list()"; } if (chk_ctrline == "ctrline") { if (spin_ctrline != 0.95) options_plotgof[options_plotgof.length] = "ctrline=list(gamma="+(Math.round(spin_ctrline*100)/100)+", col=\"blue\", lty=\"solid\")"; else options_plotgof[options_plotgof.length] = "ctrline=list()"; } // more advanced options // user defined ranges? we'll round it to two digits if ((spin_abilfrom != -3 || spin_abilto != 3) && spin_abilfrom < spin_abilto) options_plotgof[options_plotgof.length] = "xlim=c("+(Math.round(spin_abilfrom*100)/100)+","+(Math.round(spin_abilto*100)/100)+")" ; // annotate lines and show legend? if (annotation == "number" || annotation == "none" || annotation == "identify") options_plotgof[options_plotgof.length] = "tlab=\""+annotation+"\"" ; if (full) { echo ('rk.header("Andersen\'s LR test")\n'); echo ('\n'); echo ('rk.graph.on()\n'); } // only the following section will be generated for full==false echo ('try({\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' lr.res <- LRtest(' + getValue("x")); if (options_lrtest.length > 0) echo(", "+options_lrtest.join(", ")); echo (')\n'); echo (' plotGOF(lr.res'); if (options_plotgof.length > 0) echo(", "+options_plotgof.join(", ")); if (plot_options.length > 0) echo(plot_options); echo (')\n'); printIndentedUnlessEmpty ('\t', getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) echo ('rk.graph.off()\n'); } rkward-0.6.1/rkward/plugins/plots/irt/tests/eRm_plotLR.xml0000644000175000017500000000674412124345413023207 0ustar thomasthomas Only objects of class Rm are valid! Can be numeric, character or a factor rkward-0.6.1/rkward/plugins/plots/histogram.xml0000644000175000017500000000522712124345413021220 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/cor_graph.js0000644000175000017500000000360212124345413020776 0ustar thomasthomasfunction preprocess () { echo ('cor.graph <- function(x) {\n'); echo (' panel.cor <- function(x, y, digits=' + getValue ("digits") + ', cex.cor, use="' + getValue ("use") + '", method="' + getValue ("method") + '", scale=' + getValue ("scale") + ') {\n'); echo (' usr <- par("usr"); on.exit(par(usr))\n'); echo (' par(usr = c(0, 1, 0, 1))\n'); echo (' r <- abs(cor(x, y, use=use, method=method))\n'); echo (' txt <- format(c(r, 0.123456789), digits=digits)[1]\n'); echo (' if(missing(cex.cor)) cex <- 0.8/strwidth(txt)\n'); echo (' \n'); echo (' test <- cor.test(x,y, use=use, method=method)\n'); echo (' Signif <- symnum(test$p.value, corr = FALSE, na = FALSE,\n'); echo (' cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),\n'); echo (' symbols = c("***", "**", "*", ".", " "))\n'); echo ('\n'); echo (' if(scale) text(0.5, 0.5, txt, cex = cex * r)\n'); echo (' else text(0.5, 0.5, txt, cex = cex)\n'); echo (' text(.8, .8, Signif, cex=cex, col=2)\n'); echo (' }\n'); echo ('\n'); echo (' pairs(x, lower.panel=panel.smooth, upper.panel=panel.cor)\n'); echo ('}\n'); } function printout () { doPrintout (true); } function preview () { preprocess (); doPrintout (false); } function doPrintout (full) { var vars = trim (getValue ("x")).replace (/\n/g, ","); echo ('data <- data.frame (' + vars + ')\n'); echo ('\n'); if (full) { echo ('rk.header ("Correlation Matrix Plot", parameters=list ("Method", "' + getValue ("method") + '", "Exclusion", "' + getValue ("use") + '", "Precision", "' + getValue ("digits") + ' digits", "Scale text", "' + getValue ("scale") + '"))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); echo (' cor.graph (data)\n'); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); echo ('\n'); echo ('rk.print("Legend:\\t\'***\': p < 0.001 -- \'**\': p < 0.01 -- \'*\': p < 0.05 -- \'.\'\': p < 0.1")\n'); } } rkward-0.6.1/rkward/plugins/plots/histogram.rkh0000644000175000017500000000257112124345413021203 0ustar thomasthomas Plot a histogram. Select a variable to plot a histogram. For available options, see below. The variable to plot the histogram for Options concerning the calculation and look of the histogram. Refer to for details. Should a density curve be plotted over the histogram? This option is only available, if the histogram is density scaled. Which color should the density line be drawn in? The smoothing bandwidth used to calculate the density estimate. See for details. Factor to adjust the bandwith by. Remove missing values? If not checked, missing values will cause an error. Number of equally spaced points to estimate the density at.
    rkward-0.6.1/rkward/plugins/plots/box_plot.js0000644000175000017500000001167212124345413020666 0ustar thomasthomasfunction preview () { doPrintout (false); } function printout () { doPrintout (true); } function doPrintout (full) { var grouped_mode = getValue ("data_mode_grouped.numeric"); var dodged = grouped_mode && getValue ("dodges"); var names_mode = getValue ("names_mode"); var do_mean = getValue ("mean.checked"); var pch_mean = getValue ("pch_mean"); var do_sd = getValue ("sd.checked"); var pch_sd_high = getValue ("pch_sd_high"); var pch_sd_low = getValue ("pch_sd_low"); var horizontal = getValue ("orientation") == "TRUE"; var boxwex = getValue ("boxwex"); if (!dodged && (Number (boxwex) != .8)) boxwex = ", boxwex=" + boxwex; else boxwex = ""; var positions = ""; if (grouped_mode) { var groups_a = getValue ("groups").split ("\n"); var n_dodges = getValue ("dodges"); var dodges = groups_a.slice (0, n_dodges); var groups = groups_a.slice (n_dodges); echo ('groups <- rk.list (' + dodges.concat (groups).join (", ") + ')\n'); echo ('data_list <- split (' + getValue ("outcome") + ', groups) #split sample by grouping variables\n'); if (dodged) { echo ('# adjust width and position of boxes to achieve dodging\n'); echo ('dodge_size <- nlevels (interaction (' + dodges.join (", ") + '))\n'); echo ('box_width <- ' + getValue ("boxwex") + ' / dodge_size\n'); boxwex = ', boxwex=box_width'; echo ('box_positions <- (rep (1:(length (data_list) / dodge_size), each=dodge_size) + (1:dodge_size)*(box_width))\n') positions = ', at=box_positions, xlim=c(min(box_positions)-box_width, max(box_positions)+box_width)'; } } else { echo ('data_list <- rk.list (' + getValue ("x").split ("\n").join (", ") + ') #convert single sample variables to list\n'); } if (names_mode == "rexp") { echo ("names(data_list) <- " + getValue ("names_exp") + "\n"); } else if (names_mode == "custom") { echo ("names(data_list) <- c (\"" + str_replace (";", "\", \"", trim (getValue ("names_custom"))) + "\")\n"); } if (full) { if (grouped_mode) { echo ('rk.header ("Boxplot", list ("Outcome variable", rk.get.description (' + getValue ("outcome") + '), "Grouping variable(s)", paste (names (groups), collapse=", ")))\n'); } else { echo ('rk.header ("Boxplot", list ("Variable(s)", paste (names (data_list), collapse=", ")))\n'); } echo ('rk.graph.on()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' boxplot (data_list' + boxwex + positions + ', notch = ' + getValue ("notch") + ', outline = ' + getValue("outline") + ', horizontal = ' + getValue("orientation") + getValue ("plotoptions.code.printout") + ') #actual boxplot function\n'); if (do_mean) { var mean_fun = "mean, na.rm=TRUE"; if (getValue ("type_of_mean") =="geometric_mean") { echo(' geo_mean <- function (x) {prod(na.omit(x))^(1/length(na.omit(x)))} #Calculate geometric mean\n'); mean_fun = "geo_mean"; } else if (getValue ("type_of_mean") =="harmonic_mean") { echo(' har_mean <- function (x) {(1 / mean(1 / na.omit(x)))} #Calculate harmonic mean\n'); mean_fun = "har_mean"; } else if (getValue ("type_of_mean") =="interquartile_mean") { echo(' interq_mean <- function (x) {sum(quantile(x, probs=c(0.25), na.rm=TRUE), quantile(x, probs=c(0.75), na.rm=TRUE)) / 2} #Calculate the interquartile mean\n'); mean_fun = "interq_mean"; } else { // arithmetic mean var trim = getValue("trim"); if (trim != 0) mean_fun += ", trim=" + trim; } if (horizontal) { echo (' points(1:length(data_list) ~ sapply(data_list, ' + mean_fun + '), pch=' + pch_mean + ', cex = ' + getValue ("cex_sd_mean") + getValue ("sd_mean_color.code.printout") + ') #calculates the mean for all data and adds a point at the corresponding position\n'); } else { echo (' points(sapply(data_list, ' + mean_fun + '), pch=' + pch_mean + ', cex = ' + getValue ("cex_sd_mean") + getValue ("sd_mean_color.code.printout") + ') #calculates the mean for all data and adds a point at the corresponding position\n'); } } if (do_sd) { echo (' sd_low <- (sapply(data_list, mean, na.rm = TRUE)) - (sapply(data_list,sd,na.rm = TRUE))\n'); echo (' sd_high <- (sapply(data_list, mean, na.rm = TRUE)) + (sapply(data_list,sd,na.rm = TRUE))\n'); if (horizontal) { echo (' points(1:length(data_list) ~ sd_low, pch=' + pch_sd_low + ', cex = ' + getValue ("cex_sd_mean") + getValue ("sd_mean_color.code.printout") + ')\n'); echo (' points(1:length(data_list) ~ sd_high, pch=' + pch_sd_high + ', cex = ' + getValue ("cex_sd_mean") + getValue ("sd_mean_color.code.printout") + ')\n'); } else { echo (' points(sd_low, pch=' + pch_sd_low + ', cex = ' + getValue ("cex_sd_mean") + getValue ("sd_mean_color.code.printout") + ')\n'); echo (' points(sd_high, pch=' + pch_sd_high + ', cex = ' + getValue ("cex_sd_mean") + getValue ("sd_mean_color.code.printout") + ')\n'); } } printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n'); echo ('})\n'); // end of try () if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/plot_stepfun_options.rkh0000644000175000017500000000521712124345413023503 0ustar thomasthomas Various graphical parameters for plot.stepfun. For detailed description of the individual parameters see the R reference on 'plot.stepfun'. This is supposed to be used as an embeded plugin. All the elements are arguments to the plot.stepfun function. This plugin is useful in constructing ecdf plots. This is the add argument. This option might be disabled by the embedding plugin. This is the lty argument. This is the do.points argument. Uncheck this option if points are NOT to be drawn. This is the col.points argument. Leave this as 'default' for using the standard color settings from par(). This is the col.hor argument. This is the verticals arguments. Uncheck this option if vertical lines are NOT to be drawn. This is the col.vert argument. The above two options are not for plot.stepfun, but rather for ecdf. These are visible only in the context of 'ecdf'. They are used to set the color for the horizontal lines at y = 0 and y = 1 respectively. Specifically, this is the col.01line argument to ecdf. If only one is provided (i.e the other is set as 'Default') then both the line are of the same (specified) color. Otherwise (i.e., when both the colors are provided) both the colors are provided as a character vector of length two.
    General users may skip this section of help, this is primarily for developers. The following external tags are provided for use in the embedding plugin.
    • allow_addtoplot: Setting this to "true" ("false") enables (disables) the display of the 'Add to current plot' checkbox.
    • default_dopoints: Setting this to "true" ("false") toggles the state of the 'Draw points' checkbox.
    • default_verticals: Setting this to "true" ("false") toggles the state of the 'Draw verticals' checkbox.
    • allow_col01line: Setting this to "true" ("false") enables (disables) the display of the two frames ('For y = 0 line' and 'For y = 1 line') for col.01line option to ecdf.
    rkward-0.6.1/rkward/plugins/plots/density_plot.js0000644000175000017500000000360512124345413021552 0ustar thomasthomasvar dodensity_plot; function preprocess () { dodensity_plot = (getValue ("plot_type") == "density_plot"); if (!dodensity_plot) { echo ('require(hdrcde)\n'); } } function preview () { preprocess (); doPrintout (false); } function printout () { doPrintout (true); } function doPrintout (full) { var adjust = getValue ("adjust"); var x = getValue ("x"); var resolution = getValue ("n"); var narm = getValue ("narm"); var kern = getValue ("kern"); var bw = ""; if (kern == "gaussian") { bw = getValue ("bw"); } var dorug = getValue ("rug"); var density_call = "density(" + x; if (bw != "") density_call += ", bw=\"" + bw + "\""; density_call += ", adjust=" + adjust + ", kern=\"" + kern + "\", n=" + resolution + ", " + narm + ")"; var title = ""; if (dodensity_plot) title = "Density Plot"; else title = "Highest density regions"; if (full) { echo ('rk.header ("' + title + '", list ("Variable", rk.get.description (' + x + ')'); if (bw != "") { echo (', "Band Width", "'); echo (bw); echo ('"'); } echo (', "Adjust", ' + adjust + ', "Remove Missing Values", ' + narm + ', "Length", length (' + x + '), "Resolution", ' + resolution + ', "Smoothing Kernel", "' + kern + '"))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); if (dodensity_plot) { echo (' plot(' + density_call + getValue ("plotoptions.code.printout") + ')\n'); } else { echo (' hdr.den(den=' + density_call + getValue ("plotoptions.code.printout") + ')\n'); } if (dorug) { echo (' rug(' + x + ', ' + getValue ("rug_ticksize") + ', ' + getValue ("rug_lwd") + ', ' + getValue ("rug_side") + getValue ("rug_col.code.printout") + ')\n'); } printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/sieve_plot.xml0000644000175000017500000000212112124345413021362 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/piechart.xml0000644000175000017500000001004312124345413021012 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots/pareto.js0000644000175000017500000000307712124345413020332 0ustar thomasthomasfunction preprocess () { echo ('require(qcc)\n'); } function calculate () { if (!getValue ("tabulate.checked")) { echo ('x <- ' + getValue ("x") + '\n'); echo ('title <- rk.get.description (' + getValue ("x") + ')\n'); echo ('if (!is.numeric (x)) {\n'); echo (' warning ("Data is not numeric, but proceeding as requested.\\nDid you forget to check the tabulate option?")\n'); echo ('}\n'); } else { echo (getValue ('tabulate_options.code.calculate')); } if (getValue ("limit.checked")) { echo (getValue ('limit_options.code.calculate')); } } function printout () { doPrintout (true); } function preview () { preprocess (); calculate (); doPrintout (false); } function doPrintout (full) { var descriptives = getValue ("descriptives")=="TRUE"; if (full) { echo ('rk.header ("Pareto chart", parameters=list ('); if (getValue ("tabulate.checked")) echo (getValue ('tabulate_options.parameters')); else echo ('"Variable"=title'); if (getValue ("limit.checked")) echo (', ' + getValue ('limit_options.parameters')); echo ('))\n'); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo ('\t'); if (full && descriptives) echo ('descriptives <- '); echo ('pareto.chart(x' + getValue ("plotoptions.code.printout") + ')\n'); if (full && descriptives) echo (' rk.results(descriptives, titles=c(NA,NA))\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/plots/color_chooser.js0000644000175000017500000000061612124345413021674 0ustar thomasthomas/* NOTE: This file is currently not used by the color_chooser plugin. Pehaps we can start using it again, now that a full PHP backend no longer needs to be started for this simple plugin. TODO: test it. */ function printout () { var col = getValue ("color"); if (empty (col)) col = getValue ("default_color"); if (!empty (col)) col = getValue ("argument") + "\"" + col + "\""; echo (col); } rkward-0.6.1/rkward/plugins/plots/histogram_options.xml0000644000175000017500000001123412124345413022766 0ustar thomasthomas --> (For vector valued breaks) rkward-0.6.1/rkward/plugins/pluginmap_meta.inc0000644000175000017500000000072112124346352021032 0ustar thomasthomas rkward-0.6.1/rkward/plugins/php2js.js0000644000175000017500000003125012124345412017076 0ustar thomasthomas// php2js.js a small converter for PHP-code -> JS-code. // // usage: rhino php2js.js file.php > file.js // // Anybody stumbling on this, please note that this covers only a very limited range of functionality, // specific to the needs of the RKWard project. Give it a try if you like, but probably it does not // help you much. function convertTopLevel (input) { var in_echo = false; var first_char = true; for (var i = 0; i < input.length; ++i) { var c = input.charAt (i); var cn = input.charAt (i+1); // start of PHP block detection if (c == "<") { if (cn == "?") { if (in_echo) { output += "'); "; in_echo = false; } if (input.substr (i+2, 3) == "php") i += 3; i += 1 + convertPHPBlock (input.substr (i+2)); first_char = true; continue; } } // fallthrough: echo it if (!in_echo) { if ((first_char) && (c == "\n")) { output += "\n"; first_char = false; continue; } output += "echo ('"; in_echo = true; } if (c == "'") c = "\\'"; else if (c == "\\") c = "\\\\"; // else if (c == "\t") c = "\\t"; else if (c == "\n") { c = "\\n');\n" in_echo = false; } first_char = false; output += c; if (i >= input.length) { message ("Something's wrong. Closure not found."); } } } function convertPHPBlock (input) { for (var i = 0; i < input.length; ++i) { var c = input.charAt (i); var cn = input.charAt (i+1); if (i == 0) { if (c == " ") continue; if ((c == "\n") && (output[output.length - 1] == "\n")) continue; } // end of PHP block detection if (c == "?") { if (cn == ">") { return (i + 2); } } // comments if ((c == "/") && (cn == "/")) { var eol = input.indexOf ("\n", i); output += input.substring (i, eol); i = eol - 1; continue; } if (c == "#") { var eol = input.indexOf ("\n", i); output += "//" + input.substring (i + 1, eol); i = eol - 1; continue; } if ((c == "/") && (cn == "*")) { message ("Warning: multiline comments are not handled! Check by hand!"); } // handle quotes if (c == "\"") { output += c; i += convertPHPQuote (input.substr (i+1), "\""); continue; } if (c == "\'") { output += c; i += convertPHPQuote (input.substr (i+1), "\'"); continue; } if (c == "$") { var token = getToken (input.substr (i + 1)); output += token; i += token.length; continue; } // replace some functions if (input.indexOf ("getRK_val", i) == i) { output += "getValue"; i += 8; continue; } else if (input.indexOf ("getRK", i) == i) { // replace with an echo form to allow later merging of echo statements output += "echo (getValue"; closure = input.indexOf (")", i); output += input.substring (i + 5, closure + 1) + ")"; i = closure; continue; } else if (input.indexOf ("Array", i) == i) { output += "new "; } else if (input.indexOf ("array", i) == i) { output += "new Array"; i += 5; continue; } else if (input.indexOf ("global ", i) == i) { i += 7 + eatGlobals (input.substr (i + 7)); continue; } else if (input.indexOf ("function", i) == i) { current_fun = getFunctionName (input.substr (i+8)); locals[current_fun] = new Array (); fun_args[current_fun] = new Array (); var args_start = input.indexOf ("(", i+8) + 1; var funb_level = 1; var args_end = args_start; while (funb_level) { if (input.charAt (args_end) == ")") { funb_level -= 1; } else if (input.charAt (args_end) == "(") { funb_level += 1; } args_end += 1; } eatFunctionArgs (input.substring (args_start, args_end - 1)); } else if (input.indexOf ("count", i) == i) { message ("Found string 'count'. Please check whether conversion is needed (use varname.length)."); } else if (input.indexOf ("strtr", i) == i) { message ("Found string 'strtr'. Please check whether conversion is needed (use varname.replace(...))."); } // associative array operator if ((c == "=") && (cn == ">")) { message ("Warning: please check correctness of conversion of '=>' in arrays by hand"); output += ", "; i++; continue; } // string concatenation operator if (c == ".") c = "+"; output += c; } message ("Something's wrong. Closing ?> not found."); return input.length; } function getFunctionName (input) { var open_paren = input.indexOf ("("); var fun_name = input.substring (0, open_paren - 1); fun_name = fun_name.replace (/\s*/g, ""); return fun_name; } function convertPHPQuote (input, quote_char) { var inside_quote = ""; var closed = false; for (var i = 0; i < input.length; ++i) { var c = input.charAt (i); // handle escapes first if (c == "\\") { inside_quote += c; inside_quote += input.charAt (++i); continue; } if ((c == "$") && (quote_char == "\"") && (pass == 1)) { if (input.charAt (i+1) != quote_char) { message ("Warning: '$' inside '\"'-delimited string. This might be a variable name. Please check by hand!"); } /* token = getToken (input.substr (i + 1)); output += quote_char + " + " + token; i += token.length; if (input.charAt (i + 1) != quote_char) output += " + " + quote_char; continue; */ } // end of string if (c == quote_char) { closed = true; break; } inside_quote += c; } /* // unquote numeric constants if ((inside_quote.length > 0) && (!isNaN (inside_quote))) { output = output.substr (0, output.length -1); // ugly hack: remove quote already added output += inside_quote; } else { output += inside_quote + quote_char; }*/ output += inside_quote + quote_char; if (!closed) message ("Something's wrong. Closing " + quote_char + " not found."); return i + 1; } function getToken (input) { var i = input.search (/[^a-zA-Z0-9_]+/); /* if ((input.charAt (i) == "[") || (input.charAt (i+1) == "[")) { // array subscripts i = input.indexOf ("]", i) + 1; } if (i < 1) { message ("Something's wrong. Token end not found. Token start was " + input.substr (0, 10)); return (input); } */ var token = input.substr (0, i); /* if (token.search (/\[\]/) != -1) { message ("Use of [] in token " + token + ". Please convert to 'X.push (Y)' by hand."); } */ if (!contains(locals[current_fun], token)) locals[current_fun].push (token); return (token); } function eatGlobals (input) { var end = input.indexOf (";") + 1; var text = input.substr (0, end); var tokens = text.split (","); for (var i = 0; i < tokens.length; ++i) { var token = tokens[i].replace (/^[\$ ]*/, ""); token = getToken (token + " "); if (!contains (globals, token)) globals.push (token); } return (end); } function eatFunctionArgs (input) { var tokens = input.split (","); for (var i = 0; i < tokens.length; ++i) { var token = tokens[i].replace (/^[\$ ]*/, ""); token = getToken (token + " "); fun_args[current_fun].push (token); } } // this function is meant to be run in step 2 (i.e. on already js code) function mergeEchos (line) { var output_save = output; output = ""; var directly_after_echo = false; for (var i = 0; i < line.length; ++i) { var c = line.charAt (i); var cn = line.charAt (i + 1); // comments if ((c == "/") && (cn == "/")) { if (directly_after_echo) { output += "); "; directly_after_echo = false; } output += line.substr (i); break; } if (!directly_after_echo) { if ((c == "'") || (c == "\"")) { // hack: skips js quotes, too output += c; i += convertPHPQuote (line.substr (i + 1), c); continue; } } if (line.indexOf ("echo", i) == i) { i += 4; var output_save_2 = output; output = ""; var cb = line.charAt (i); while (cb != ";") { if ((cb == "'") || (cb == "\"")) { output += cb; i += convertPHPQuote (line.substr (i + 1), cb); } else { output += cb; } ++i; cb = line.charAt (i); } var fragment = output; output = output_save_2; if (i >= line.length) { message ("Strange echo statement. Please check by hand."); continue; } fragment = fragment.replace (/^\s*\(\s*/, ""); fragment = fragment.replace (/\s*\)\s*$/, ""); if (!directly_after_echo) { output += "echo ("; } else { output += " + "; } output += fragment; directly_after_echo = true; } else { if (directly_after_echo) { if (c != " ") { output += "); " + c; directly_after_echo = false; } } else { output += c; } if (line.indexOf ("if", i) == i) { output += "f"; i += feedthroughControlStatement (line.substr (i+2)) + 2; } } } if (directly_after_echo) { output += ");"; } var ret = output; output = output_save; return (ret); } function feedthroughControlStatement (input) { var levelstack = new Array (); for (var i = 0; i < input.length; ++i) { var c = input.charAt (i); output += c; if ((c == "{") || (c == "(")) { levelstack.push (c); } else if (c == "}") { if (levelstack[levelstack.length - 1] == "{") { levelstack.pop (); if (levelstack.length == 0) { return i; } } else { message ("Warning: Brace mismatch while postprocessing " + input); } } else if (c == ")") { if (levelstack[levelstack.length - 1] == "(") { levelstack.pop (); } else { message ("Warning: Brace mismatch while postprocessing " + input); } } else if (c == ";") { if (levelstack.length == 0) { message ("Note: Control statement without braces. This is bad style. "); return i; } } } return i; // end of line reached is an ok condition } function contains (array, token) { for (var i = 0; i < array.length; ++i) { if (array[i] == token) return (true); } return (false); } function postProcess (input) { var lines = input.split ("\n"); var olines = new Array (); for (var i = 0; i < lines.length; ++i) { if (lines[i].search (/^function /) >= 0) { var fun_name = getFunctionName (lines[i].substr (8)); olines.push (lines[i]); while (lines[++i].search (/^\s*$/) >= 0) { // skip empty line } if (lines[i] == "}") { // kill entire function olines.pop (); continue; } for (var l = 0; l < locals[fun_name].length; ++l) { if (!contains (globals, locals[fun_name][l])) { if (!contains (fun_args[fun_name], locals[fun_name][l])) { olines.push ('var ' + locals[fun_name][l] + ' = "";'); } } } } // fix includes lines[i] = lines[i].replace (/^include\s*\(\s*[\"\']([^\)]*)\.php[\"\']\s*\)/, "include ('$1.js')"); // olines.push (lines[i]); olines.push (mergeEchos (lines[i])); } return (olines.join ("\n")); } function message (text) { _message += text + "\n"; print (text); } filename = arguments[0]; file = readFile (filename); print ("--------- converting file " + filename); var _message = ""; // the output buffer var output = ""; // list of global vars var globals = new Array (); var locals = new Object (); var fun_args = new Object (); fun_args.none = new Array (); locals.none = new Array (); var current_fun = "none"; var pass = 1; // main conversion step convertTopLevel (file); pass = 2; output = postProcess (output); // add global var declarations for (var i = globals.length; i >= 0; --i) { output = "var " + globals[i] + "; \n" + output; if (i == 0) output = "// globals\n" + output; } output = "/* ------- This file generated by php2js from PHP code. --------\nPlease check this file by hand, and remove this notice, afterwards.\nMessages:\n" + _message + "\n---------------------------- */\n\n" + output; // write to file importPackage(java.io); // From rhino directory function writeFile(file, content) { var buffer = new PrintWriter( new FileWriter(file) ); buffer.print(content); buffer.flush(); buffer.close(); } outfile = arguments[0].replace (/\.php$/, ".js"); writeFile (outfile, output); rkward-0.6.1/rkward/plugins/import_export.pluginmap0000644000175000017500000000476012124345414022173 0ustar thomasthomas rkward-0.6.1/rkward/plugins/plots.pluginmap0000644000175000017500000000353312124345412020414 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data/0000755000175000017500000000000012124345414016244 5ustar thomasthomasrkward-0.6.1/rkward/plugins/data/generate_random.xml0000644000175000017500000000201712124345414022120 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data/sort2.xml0000644000175000017500000000460112124345414020040 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data/generate_random.js0000644000175000017500000000056612124345414021743 0ustar thomasthomasfunction calculate () { if (getValue ("length.enabled.numeric")) { length = getValue ("length"); } else { // this happens when the saveto.parent is a data.frame, only. length = "dim (" + getValue ("saveto.parent") + ")[1]"; } echo (".GlobalEnv$" + getValue ("saveto") + " <- rnorm (" + length + ", mean=" + getValue ("mean") + ", sd=" + getValue ("sd") + ")\n"); } rkward-0.6.1/rkward/plugins/data/one_var_tabulation.xml0000644000175000017500000000443712124345414022651 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data/subset_dataframe.xml0000644000175000017500000001445312124345414022306 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data/limit_vector_length.js0000644000175000017500000000171712124345414022651 0ustar thomasthomasfunction calculate () { var invar = getValue ("invar"); var outvar = getValue ("outvar"); echo ('max.categories <- ' + getValue ("cutoff") + '\n'); echo ('if (length (' + invar + ') > max.categories) {\n'); echo ('\t' + invar + ' <- sort (' + invar); if (getValue ("sorting") != "smallest") echo (', decreasing=TRUE'); echo (')\n'); if (getValue ("include_others.checked")) { var others_labelling = getValue ("others_label"); if (others_labelling != "") others_labelling = quote (others_labelling) + '='; echo ('\tothers <- ' + invar + '[(max.categories+1):length(' + invar + ')]\n'); var fun = getValue ("others_statistic"); if (fun == "custom") { echo ('\tfun <- function (x) ' + getValue ("custom_stat") + '\n'); fun = "fun"; } echo ('\t' + outvar + ' <- c (' + invar + '[1:max.categories], ' + others_labelling + fun + ' (others)' + ')\n'); } else { echo ('\t' + outvar + ' <- ' + invar + '[1:max.categories]\n'); } echo ('}\n'); } rkward-0.6.1/rkward/plugins/data/sort.js0000644000175000017500000000251012124345414017567 0ustar thomasthomasfunction makeSortItem (objectname, reversed, mode, conversion_custom) { var obj = objectname; if (mode == 'character') obj = 'as.character (' + obj + ')'; else if (mode == 'number') obj = 'as.numeric (' + obj + ')'; else if (mode == 'custom') { obj = conversion_custom.replace (/_X_/g, obj); } if (reversed) { if (mode != 'number') obj = '-xtfrm (' + obj + ')'; else obj = '-' + obj; } return obj; } function calculate () { var object = getString ("object"); var is_data_frame = getBoolean ("sortby.enabled"); var saveto = object; if (getString ("saveto_select") == 'other') saveto = getString ("saveto"); var sortby; if (is_data_frame) { sortby = ""; var sortbylist = getList ("sortby"); var sortbyreverse = getList ("multi_sortby.reverse"); var sortbymode = getList ("multi_sortby.conversion"); var sortbycustom = getList ("multi_sortby.conversion_custom"); for (var i = 0; i < sortbylist.length; ++i) { if (i > 0) sortby = sortby + ', '; sortby = sortby + makeSortItem (sortbylist[i], sortbyreverse[i] != "", sortbymode[i], sortbycustom[i]); } } else { sortby = makeSortItem (object, false, getString ("conversion"), getString ("conversion_custom")); } echo ('.GlobalEnv$' + saveto + ' <- ' + object + '[order (' + sortby + getString ("order") + ')'); if (is_data_frame) echo (','); echo (']\n'); } rkward-0.6.1/rkward/plugins/data/one_var_tabulation.js0000644000175000017500000000122112124345414022451 0ustar thomasthomasfunction calculate () { var titlevar = getValue ("titlevar"); var outvar = getValue ("outvar"); var groups = getValue ("groups").split ("\n").join (", "); var stat = getValue ("stat"); var fun = "length"; echo ('groups <- rk.list (' + groups + ')\n'); if (titlevar != "") echo (titlevar + ' <- paste (names (groups), collapse=" by ")\n'); if (stat == "freq") { echo (outvar + ' <- table (interaction (groups))\n'); } else { if (stat == "sum") { fun = "sum"; } else { fun = 'function (x) { ' + getValue ("custom_stat") + ' }'; } echo (outvar + ' <- by (' + getValue ("outcome") +', interaction (groups), FUN=' + fun + ')\n'); } } rkward-0.6.1/rkward/plugins/data/sort.rkh0000644000175000017500000000301712124345414017742 0ustar thomasthomas Sort data. Currently data.frames, or individual vectors can be sorted. Select the object to be sorted. For data.frames, also specify the column to sort by. By default the object to be sorted is replaced with the sorted variant, but you can also specify to save to a separate object. The object to sort. If a data.frame editor window is currently active, the corresponding object name will be filled in as a default. Only for data.frame objects. Select the column(s) to sort by. Chose "Same object" (the default) to replace the object to be sorted with the sorted variant. If, instead, you want to keep the unsorted object, chose "Another object" to save the sorted object, separately. Only, if you selected "Another object", above: Specify the object to save to. Sort in ascending or descending order. Allows to apply conversions, which may affect sort order (when sorting data.frames, this option is available for each column to sort by). When sorting data.frames, this option allows to reverse the global sort order for individual columns.
    rkward-0.6.1/rkward/plugins/data/subset_dataframe.rkh0000644000175000017500000000572412124345414022273 0ustar thomasthomas subset_dataframe Select a subset of rows and / or columns of a data.frame Select the data.frame to subset. Then specify rules to filter by rows / cases, and / or columns. A data.frame containing only the specified subset is saved to your workspace. Select the data.frame to subset. Select a column of the data.frame specifying the condition to filter cases on. Leave empty, if you do not want to filter on a column. Select the type of condition. Note that depending on the type of the filter variable, different options are available The value to compare against (for condition types equal / not equal, and one of / not one of). Note that this will be pasted as R code, verbatim. This means, you can specify any valid R expression, including the name of another column of the data.frame. However, if you want to compare to fixed strings, you will have to make sure to quote these. E.g. 'c ("City A", "City B")'. For comparing against ranges (condition types in between / not in between), minimum and / or maximum values can be specified. If either is omitted, only the other is checked (i.e. greater / smaller than). Note that this will be pasted as R code, verbatim. This means, you can specify any valid R expression, including the name of another column of the data.frame. Whether the minimum value is contained in the range to check against (i.e. compare 'larger or equal (>=)'). See above. Maximum value. Whether the maximum value is contained in the range to check against (i.e. compare 'smaller or equal (<=)'). You can also filter rows / cases by a custom R expression. If using this in combination with filtering by a column (see above), both conditions are combined by logical 'and' (&). Leave empty, if you do not want to filter on a custom expression. Check this, if you want to remove some columns from the resulting data.frame. Otherwise, all columns will be included. Variables to include in the resulting data.frame
    rkward-0.6.1/rkward/plugins/data/subset_dataframe.js0000644000175000017500000000503212124345414022113 0ustar thomasthomas// this code was generated using the rkwarddev package. //perhaps don't make changes here, but in the rkwarddev script instead! function preprocess(){ // add requirements etc. here } function calculate(){ // the R code to be evaluated var data = getString ('var_data'); var filter_var = getString ('vrsl_Fltrbyvr.shortname'); var filter_expr = getString ('inp_Exprssnr'); echo ('\tsset.result <- subset('); if (data != '') { echo ('\n\t\t' + data); // row filter var row_filter_exp = ''; if (filter_var != '') { var filter_operand = getString ('swt_csfltrdt'); if (getBoolean ('swt_swtcsflt')) { var range_limit = ''; var max_range = ''; var fmin = getString ('inp_Mnmmrmpt'); var fmax = getString ('inp_Mxmmrmpt'); var fmininc = getBoolean ('mininc'); var fmaxinc = getBoolean ('maxinc'); if (fmin != '') range_limit = filter_var + ' >' + (fmininc ? '= ' : ' ') + fmin; if (fmax != '') max_range = filter_var + ' <' + (fmaxinc ? '= ' : ' ') + fmax; if (!(max_range == '' || range_limit == '')) range_limit = '(' + range_limit + ') & (' + max_range + ')'; else range_limit += max_range; if (filter_operand == 'range') row_filter_exp += range_limit; else row_filter_exp += '!(' + range_limit + ')'; } else if (getString ('case_filter_data_mode') == 'logical') { if (filter_operand == 'TRUE') row_filter_exp += filter_var; else row_filter_exp += '!' + filter_var; } else { var input_filter = getString ('inp_Vlpstdss'); if (filter_operand == '!%in%') row_filter_exp += '!(' + filter_var + ' %in% ' + input_filter + ')'; else row_filter_exp += filter_var + ' ' + filter_operand + ' ' + input_filter; } } if (filter_expr != '') { if (row_filter_exp != '') row_filter_exp = '(' + row_filter_exp + ') & (' + filter_expr + ')'; else row_filter_exp = filter_expr; } if (row_filter_exp != '') echo (',\n\t\t' + row_filter_exp); // column filter if (getBoolean ('frm_Onlyssbs.checked')) { var selected_vars = getList ('vrsl_Slctdvrb.shortname').join (', '); if (selected_vars != '') echo (',\n\t\tselect=c (' + selected_vars + ')'); } } echo ('\n\t)\n\n'); } function printout(){ // printout the results //// save result object // read in saveobject variables var svbSvrsltst = getValue("svb_Svrsltst"); var svbSvrsltstActive = getValue("svb_Svrsltst.active"); var svbSvrsltstParent = getValue("svb_Svrsltst.parent"); // assign object to chosen environment if(svbSvrsltstActive) { echo(".GlobalEnv$" + svbSvrsltst + " <- sset.result\n"); } } rkward-0.6.1/rkward/plugins/data/one_var_tabulation.rkh0000644000175000017500000000467212124345414022636 0ustar thomasthomas Generic tabulation plugin (single outcome vector). This plugin is designed to be embeded into other plugins. Allows to tabulate frequencies, or aggregate a single variable, by the levels of one or more grouping variables. Select the grouping variables. Often, these will be factors. The levels of each grouping variable will be crossed. Type of tabulation / statistic to compute. This can be frequency of occurrence, or a function of a separate vector. When computing a statistic other than frequency, specify the vector containing the underlying data, here. When the statistic is set to "Other:", this allows you to specify an arbitrary function to compute the statistic. The function may take a vector (a sub-group of the variable selected above) as parameter "x", and must return a single numeric value. Typical examples are "mean(x)" or "sd(x)".
    • and
    • for tabulation of frequencies across many variables.
    General users may skip this section of help, this is primarily for developers. The following external properties are provided for use in the embedding plugin.
    • varsource: The tabulation plugin does not show its own varselector by default. Connect your own to this one (client="embedded_id.varsource.selected", governor="myvarselector_id.selected").
    • outvar: By default, the plugin produces a table in a variable called "x". You can set it to use a different name, here.
    • titlevar: If you want the plugin to save a description of the grouping variables in an R variable, set this to an object name to use. Else set this to "" to disable. Defaults to "title"
    • fun_label: This property will be set to a description of the statistic.
    • parameters: This property will be set to a string describing the tabulation options, suitable for pasting into the "parameters" argument of rk.header().
    The generated code is available from code.calculate.
    rkward-0.6.1/rkward/plugins/data/limit_vector_length.xml0000644000175000017500000000306312124345414023031 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data/limit_vector_length.rkh0000644000175000017500000000365612124345414023025 0ustar thomasthomas Generic plugin to limit a single numeric vector to the n largest / smallest values. This plugin is designed to be embedded into other plugins. Specify the desired length cutoff and sorting. Note that the result is always sorted, with the sum of remainder values appended at the end. Maximum number of regular groups to display. One additional group "others" will be displayed, if appropriate. Should the largest or the lowest values be kept? For most purposes, you will want to keep the largest values. Should a category be added for the remaining value (those which have been cut off)? Note: This will always be appended to the end of the vector. Statistic to use for summarizing the cut off values. If you chose to use a custom statistic for summarizing the cut off values, specify it, here, as a function of x. Label to use for the "others" category. Note: If your data is not labeled, emptying this field will sometimes be preferable. General users may skip this section of help, this is primarily for developers. The following external properties are provided for use in the embedding plugin.
    • invar: Symbol name of the input variable to be limited. Defaults to 'x'.
    • outvar: Symbol name to use for the output variable (the limited vector). May be identical to invar. Defaults to 'x'.
    • parameters: This property will be set to a string describing the limitation options, suitable for pasting into the "parameters" argument of rk.header().
    The generated code is available from code.calculate.
    rkward-0.6.1/rkward/plugins/data/sort.xml0000644000175000017500000001027412124345414017761 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/0000755000175000017500000000000012124345414020235 5ustar thomasthomasrkward-0.6.1/rkward/plugins/distributions/gamma_probabilities.xml0000755000175000017500000000072212124345414024755 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_exponential_distribution.xml0000644000175000017500000000164012124345413027142 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_gamma_distribution.rkh0000644000175000017500000000133112124345414025660 0ustar thomasthomas Density and distribution function plots for the Gamma distribution. See R reference on Gamma distribution. See R reference on Gamma distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_chi_squared_distribution.xml0000644000175000017500000000204412124345413027102 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/wilcoxon_quantiles.js0000755000175000017500000000131512124345414024525 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qwilcox (p = ' + p + ', m = ' + getValue ("m") + ', n = ' + getValue ("n") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Wilcoxon Rank Sum quantile", list ("Vector of probabilities", "' + p + '", "m (Numbers of observations in the first sample)", "' + getValue ("m") + '", "n (Numbers of observations in the second sample)", "' + getValue ("n") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Wilcoxon Rank Sum quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/poisson_probabilities.js0000644000175000017500000000106612124345414025200 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (ppois (q = ' + q + ', lambda = ' + getValue ("lambda") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Poisson probability", list ("Vector of quantiles", "' + q + '", "Lambda", "' + getValue ("lambda") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Poisson probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_poisson_distribution.js0000644000175000017500000000131712124345413026123 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['mean'] = getValue ("mean"); getDiscontRangeParameters(); if (options['is_density']) { options['fun'] = "dpois"; } else { options['fun'] = "ppois"; } } function doHeader () { echo ('rk.header ("Poisson ' + options['label'] + ' function", list ("Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Mean", "' + options['mean'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, lambda=' + options['mean'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_binomial_distribution.xml0000644000175000017500000000171412124345413026410 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/geom_probabilities.js0000755000175000017500000000112212124345414024431 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pgeom (q = ' + q + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Geometric probability", list ("Vector of quantiles", "' + q + '", "Probability of success in each trial", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Geometric probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/logistic_probabilities.js0000755000175000017500000000121412124345414025321 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (plogis (q = ' + q + ', location = ' + getValue ("location") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Logistic probability", list ("Vector of quantiles", "' + q + '", "Location", "' + getValue ("location") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Logistic probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/0000755000175000017500000000000012124345414021017 5ustar thomasthomasrkward-0.6.1/rkward/plugins/distributions/clt/plot_wilcoxon_clt.js0000644000175000017500000000062312124345414025120 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('m <- ' + getValue ("nm") + '; n <- ' + getValue ("nn") + ';\n'); } function doExpVar () { echo ('avg.exp <- m*n/2;\n'); echo ('avg.var <- (m*n*(m+n+1)/12)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rwilcox(nn=' + nAvg*nDist + ', m=m, n=n), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_negbinomial_clt.xml0000644000175000017500000000325112124345414025726 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_poisson_clt.xml0000644000175000017500000000124212124345414025132 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_beta_clt.rkh0000644000175000017500000000102512124345414024336 0ustar thomasthomas Beta
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_gamma_clt.js0000644000175000017500000000066012124345414024341 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('shape <- ' + getValue ("shape") + '; rate <- ' + getValue ("rate") + ';\n'); } function doExpVar () { echo ('avg.exp <- shape/rate;\n'); echo ('avg.var <- (shape/(rate^2))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rgamma(n=' + nAvg*nDist + ', shape=shape, rate=rate), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_clt_snippets.xml0000644000175000017500000000641512124345414025314 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_beta_clt.xml0000644000175000017500000000136512124345414024361 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_f_clt.rkh0000644000175000017500000000115512124345414023654 0ustar thomasthomas F
  • See RKWard help on . For variance to exist we need the 'Denominator degrees of freedom' parameter to be greater than 4.
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_negbinomial_clt.rkh0000644000175000017500000000107412124345414025713 0ustar thomasthomas Negative Binomial
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_poisson_clt.js0000644000175000017500000000055712124345414024756 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('mean <- ' + getValue ("mean") + ';\n'); } function doExpVar () { echo ('avg.exp <- mean;\n'); echo ('avg.var <- (mean)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rpois(n=' + nAvg*nDist + ', lambda=mean), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_t_clt.xml0000644000175000017500000000136112124345414023705 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_exponential_clt.rkh0000644000175000017500000000106012124345414025750 0ustar thomasthomas Exponential
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_uniform_clt.js0000644000175000017500000000065612124345414024743 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('llim <- ' + getValue ("llim") + '; ulim <- ' + getValue ("ulim") + ';\n'); } function doExpVar () { echo ('avg.exp <- (llim+ulim)/2;\n'); echo ('avg.var <- ((ulim-llim)^2/12)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(runif(n=' + nAvg*nDist + ', min=llim, max=ulim), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_exponential_clt.js0000644000175000017500000000056412124345414025610 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('rate <- ' + getValue ("rate") + ';\n'); } function doExpVar () { echo ('avg.exp <- 1/rate;\n'); echo ('avg.var <- (1/(rate^2))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rexp(n=' + nAvg*nDist + ', rate=rate), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_weibull_clt.xml0000644000175000017500000000140712124345414025106 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_binomial_clt.xml0000644000175000017500000000144312124345414025235 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_weibull_clt.rkh0000644000175000017500000000104412124345414025067 0ustar thomasthomas Weibull
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_weibull_clt.js0000644000175000017500000000073012124345414024720 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('scale <- ' + getValue ("scale") + '; shape <- ' + getValue ("shape") + ';\n'); } function doExpVar () { echo ('avg.exp <- scale*gamma(1+1/shape);\n'); echo ('avg.var <- (scale^2*gamma(1+2/shape) - avg.exp^2)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rweibull(n=' + nAvg*nDist + ', shape=shape, scale=scale), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_gamma_clt.rkh0000644000175000017500000000103612124345414024507 0ustar thomasthomas Gamma
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_geometric_clt.xml0000644000175000017500000000132012124345414025413 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_normal_clt.rkh0000644000175000017500000000075612124345414024725 0ustar thomasthomas Normal
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_normal_clt.xml0000644000175000017500000000137312124345414024735 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_chi_squared_clt.rkh0000644000175000017500000000106012124345414025711 0ustar thomasthomas Chi-Squared
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_beta_clt.js0000644000175000017500000000074412124345414024175 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('shape1 <- ' + getValue ("a") + '; shape2 <- ' + getValue ("b") + ';\n'); } function doExpVar () { echo ('avg.exp <- shape1/(shape1 + shape2);\n'); echo ('avg.var <- (shape1*shape2/((shape1+shape2)^2*(shape1+shape2+1)))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rbeta(n=' + nAvg*nDist + ', shape1=shape1, shape2=shape2), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_logistic_clt.xml0000644000175000017500000000137612124345414025265 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_geometric_clt.js0000644000175000017500000000060312124345414025232 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('prob <- ' + getValue ("prob") + ';\n'); } function doExpVar () { echo ('avg.exp <- (1-prob)/prob;\n'); echo ('avg.var <- ((1-prob)/(prob^2))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rgeom(n=' + nAvg*nDist + ', prob=prob), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_chi_squared_clt.xml0000644000175000017500000000146112124345414025732 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_f_clt.xml0000644000175000017500000000157512124345414023676 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_clt_help_snippets.xml0000644000175000017500000000636512124345414026330 0ustar thomasthomas Normal approximation to Sample averages. Most of this help file is generic description of CLT plugins. Sample averages from a contending distribution (Binomial here) are compared to a target Normal distribution. The comparision is made based on either histograms or distribution functions. For brevity, D will denote the contending distribution ( here). Choose the parameters, the sample sizes needed for CLT and a choice of function. The function specific options are provided in different tabs. These many samples (nAvg) are used to calculate sample average. For a fixed value of the parameters, one would be interested in seeing how the distribution of the sample averages change as this number increases. These many sets-of-samples (nDist) are used to get some idea about the distribution of the sample averages. Each set provides an average. Then these averages are used to construct the 'Histogram' or the 'Distribution function'. Choose one of 'Histogram' or 'Distribution function' to compare the distribution of the sample averages of D with that of Normal distribution. Should the sample averages be normalised, by subtracting the mean, E(D), of D and dividing by the standard deviation, S(D)/sqrt(nAvg), where S(D) is the standard deviation of D? If done so, then the target Normal distribution is taken to be the standard one, that is, with mean 0 and variance 1. Otherwise the target distribution is Normal with the mean E(D) and standard deviation S(D)/sqrt(nAvg). Should a Normal curve be drawn? For the case of 'Histogram', nDist random samples are drawn from the target Normal distribution and their density values are plotted. Pointtype for the Normal curve. Color of the Normal curve. Various plot options. Preview button. The 'Frequency' checkbox is unavailable because, in this situation, drawing the histogram with freq=TRUE doesnot make sense. Also, since histogram is the main plot, 'Add to current plot' checkbox has also been disabled. See RKWard help on for other histogram centric details. See the help on the plugin. The 'Add to current plot' option is unavailable.
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_normal_clt.js0000644000175000017500000000062312124345414024546 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('mean <- ' + getValue ("mean") + '; sd <- ' + getValue ("sd") + ';\n'); } function doExpVar () { echo ('avg.exp <- mean;\n'); echo ('avg.var <- (sd^2)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rnorm(n=' + nAvg*nDist + ', mean=mean, sd=sd), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_lognormal_clt.js0000644000175000017500000000070012124345414025244 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('mean <- ' + getValue ("mean") + '; sd <- ' + getValue ("sd") + ';\n'); } function doExpVar () { echo ('avg.exp <- exp(mean+sd^2/2);\n'); echo ('avg.var <- (exp(2*mean+sd^2)*(exp(sd^2)-1))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rlnorm(n=' + nAvg*nDist + ', meanlog=mean, sdlog=sd), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_t_clt.rkh0000644000175000017500000000114212124345414023666 0ustar thomasthomas t
  • See RKWard help on . For the variance to exist, the 'Degrees of freedom' parameter has to be greater than 2.
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_clt_common.js0000644000175000017500000000624212124345414024551 0ustar thomasthomas// globals var nAvg; var nDist; function printout () { doPrintout (true); } function preview () { if (typeof (preprocess) != "undefined") preprocess (); if (typeof (calculate) != "undefined") calculate (); doPrintout (false); } function doPrintout (full) { var fun = getValue ("function"); nAvg = getValue ("nAvg"); // number of observations to calculate the averages nDist = getValue ("nDist"); // number of sample to construct the distribution var scalenorm = getValue ("scalenorm"); // if variables should to normalised.. var drawnorm = getValue ("drawnorm"); echo ('# parameters:\n'); doParameters (); // get the parameters from xml file and store them R varaibles if (scalenorm || drawnorm) { echo ('# mean and variances of the distribution of sample averages:\n'); doExpVar (); // calculate the expectation and varaince of the distribution of smaple averages } // Mean and Std.deviantion of Normal distribution: var normMuSigma_tag = ""; // defaults to mean=0, sd=1. if (!scalenorm) normMuSigma_tag = ", mean = avg.exp, sd = sqrt(avg.var)"; var plotpre = getValue ("plotoptions.code.preprocess"); var plotoptions = getValue ("plotoptions.code.printout"); var plotadds = getValue ("plotoptions.code.calculate"); var normFun = ""; var histcalcoptions = ""; var histplotoptions = ""; if (fun == "hist") { normFun = "dnorm"; // draw normal density on the histogram histcalcoptions = getValue ("histogram_opt.code.calculate"); // options that goes into hist() function histplotoptions = getValue ("histogram_opt.code.printout"); // options that goes into plot.histogram() histplotoptions += plotoptions; // generic plot options } else if (fun == "dist") { normFun = "pnorm"; // draw normal cdf on the ecdf plot plotoptions += getValue ("dist_stepfun.code.printout"); // plot.ecdf() and plot.stepfun() options } var yLim = ""; // initialise the ylim option echo ('# generate the entire data:\n'); doGenerateData (); // generate the random samples echo ('# get the sample averages:\n'); echo ('avg <- colMeans(data);\n'); if (scalenorm) { echo ('# normalise the variables:\n'); echo ('avg <- (avg - avg.exp)/sqrt(avg.var);\n'); } if (drawnorm) { echo ('# generate random normal samples:\n'); echo ('normX <- seq(from=min(avg), to=max(avg), length=' + nDist + ');\n'); echo ('normY <- ' + normFun + ' (normX' + normMuSigma_tag + ');\n'); } if (fun == "hist") { echo ('dist.hist <- hist(avg, plot=FALSE' + histcalcoptions + ');\n'); if (drawnorm) { echo ('# calculate the ylims appropriately:\n'); echo ('ylim <- c(0,max(c(dist.hist$density, normY)));\n'); yLim = ', ylim=ylim'; } } if (full) { echo ('rk.graph.on ()\n'); echo ('try ({\n'); } if (plotpre.length > 0) printIndented ("\t", plotpre); if (fun == "hist") { echo (' plot(dist.hist' + yLim + histplotoptions + ')\n'); } else if (fun == "dist") { echo (' plot(ecdf(avg)' + plotoptions + ')\n'); } if (drawnorm) { echo (' lines (x=normX, y=normY, type="' + getValue ("normpointtype") + '"' + getValue ("normlinecol.code.printout") + ')\n'); } if (plotadds.length > 0) printIndented ("\t", plotadds); if (full) { echo ('})\n'); echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/distributions/clt/plot_uniform_clt.rkh0000644000175000017500000000104112124345414025100 0ustar thomasthomas Uniform
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_wilcoxon_clt.rkh0000644000175000017500000000105212124345414025265 0ustar thomasthomas Wilcoxon
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_t_clt.js0000644000175000017500000000116612124345414023524 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('df <- ' + getValue ("df") + '; ncp <- ' + getValue ("ncp") + ';\n'); } function doExpVar () { if (getValue ("ncp") == 0) { echo ('avg.exp <- 0;\n'); echo ('avg.var <- df/((df-2)*' + nAvg + ');\n'); } else { echo ('tmp.var <- gamma((df-1)/2)/gamma(df/2);\n'); echo ('avg.exp <- ncp*sqrt(df/2)*tmp.var;\n'); echo ('avg.var <- (df*(1+ncp^2)/(df-2) - ncp^2*df*tmp.var^2/2)/' + nAvg + ';\n'); } } function doGenerateData () { echo ('data <- matrix(rt(n=' + nAvg*nDist + ', df=df, ncp=ncp), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_lognormal_clt.rkh0000644000175000017500000000105212124345414025415 0ustar thomasthomas Lognormal
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_gamma_clt.xml0000644000175000017500000000143012124345414024521 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_hypergeometric_clt.js0000644000175000017500000000070712124345414026307 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('m <- ' + getValue ("m") + '; n <- ' + getValue ("n") + '; k <- ' + getValue ("k") + ';\n'); } function doExpVar () { echo ('avg.exp <- k*m/(m+n);\n'); echo ('avg.var <- (k*m*n*(m+n-k)/((m+n)^2*(m+n-1)))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rhyper(nn=' + nAvg*nDist + ', m=m, n=n, k=k), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_negbinomial_clt.js0000644000175000017500000000125212124345414025541 0ustar thomasthomas// globals var paramTag; var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { if ( getValue ("param") == "pprob") { paramTag = ", prob=prob"; echo ('size <- ' + getValue ("size_trial") + '; prob <- ' + getValue ("prob") + ';\n'); } else { paramTag = ", mu=mu"; echo ('size <- ' + getValue ("size_disp") + '; mu <- ' + getValue ("mu") + '; prob <- size/(size+mu);\n'); } } function doExpVar () { echo ('avg.exp <- size*(1-prob)/prob;\n'); echo ('avg.var <- (size*(1-prob)/prob^2)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rnbinom(n=' + nAvg*nDist + ', size=size' + paramTag + '), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_hypergeometric_clt.rkh0000644000175000017500000000110312124345414026446 0ustar thomasthomas Hypergeometric
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_hypergeometric_clt.xml0000644000175000017500000000157612124345414026500 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_logistic_clt.js0000644000175000017500000000065412124345414025077 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('loc <- ' + getValue ("loc") + '; scale <- ' + getValue ("scale") + ';\n'); } function doExpVar () { echo ('avg.exp <- loc;\n'); echo ('avg.var <- ((pi^2/3)*scale^2)/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rlogis(n=' + nAvg*nDist + ', location=loc, scale=scale), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_logistic_clt.rkh0000644000175000017500000000104612124345414025243 0ustar thomasthomas Logistic
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_wilcoxon_clt.xml0000644000175000017500000000144512124345414025307 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_lognormal_clt.xml0000644000175000017500000000143112124345414025432 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_geometric_clt.rkh0000644000175000017500000000105212124345414025401 0ustar thomasthomas Geometric
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_uniform_clt.xml0000644000175000017500000000135612124345414025125 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_poisson_clt.rkh0000644000175000017500000000104512124345414025117 0ustar thomasthomas Poisson
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/clt/plot_chi_squared_clt.js0000644000175000017500000000102412124345414025541 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('df <- ' + getValue ("df") + '; ncp <- ' + getValue ("ncp") + ';\n'); } function doExpVar () { if (getValue ("ncp") == 0) { echo ('avg.exp <- df;\n'); echo ('avg.var <- (2*df)/' + nAvg + ';\n'); } else { echo ('avg.exp <- df + ncp;\n'); echo ('avg.var <- (2*df + 4*ncp)/' + nAvg + ';\n'); } } function doGenerateData () { echo ('data <- matrix(rchisq(n=' + nAvg*nDist + ', df=df, ncp=ncp), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_exponential_clt.xml0000644000175000017500000000126112124345414025767 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/clt/plot_f_clt.js0000644000175000017500000000130712124345414023503 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('df1 <- ' + getValue ("df1") + '; df2 <- ' + getValue ("df2") + '; ncp <- ' + getValue ("ncp") + ';\n'); } function doExpVar () { if (getValue ("ncp") == 0) { echo ('avg.exp <- df2*df1/(df1*(df2-2));\n'); echo ('avg.var <- (2*df2^2*(df1+df2-2)/(df1*(df2-2)^2*(df2-4)))/' + nAvg + ';\n'); } else { echo ('avg.exp <- df2*(df1+ncp)/(df1*(df2-2));\n'); echo ('avg.var <- (2*df2^2*((df1+ncp)^2 + (df1+2*ncp)*(df2-2)) / (df1^2*(df2-2)^2*(df2-4)))/' + nAvg + ';\n'); } } function doGenerateData () { echo ('data <- matrix(rf(n=' + nAvg*nDist + ', df1=df1, df2=df2, ncp=ncp), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_binomial_clt.js0000644000175000017500000000065712124345414025057 0ustar thomasthomas// globals var nAvg; var nDist; include ('plot_clt_common.js'); function doParameters () { echo ('size <- ' + getValue ("size") + '; prob <- ' + getValue ("prob") + ';\n'); } function doExpVar () { echo ('avg.exp <- size*prob;\n'); echo ('avg.var <- (size*prob*(1-prob))/' + nAvg + ';\n'); } function doGenerateData () { echo ('data <- matrix(rbinom(n=' + nAvg*nDist + ', size=size, prob=prob), nrow=' + nAvg + ');\n'); } rkward-0.6.1/rkward/plugins/distributions/clt/plot_binomial_clt.rkh0000644000175000017500000000104712124345414025221 0ustar thomasthomas Binomial
  • See RKWard help on .
    rkward-0.6.1/rkward/plugins/distributions/plot_binomial_distribution.rkh0000644000175000017500000000134312124345414026373 0ustar thomasthomas Density and distribution function plots for the Binomial distribution. See R reference on Binomial distribution. See R reference on Binomial distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_logistic_distribution.rkh0000644000175000017500000000134012124345414026413 0ustar thomasthomas Density and distribution function plots for the Logistic distribution. See R reference on Logistic distribution. See R reference on Logistic distribution.
    rkward-0.6.1/rkward/plugins/distributions/beta_quantiles.js0000755000175000017500000000133612124345413023600 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qbeta (p = ' + p + ', shape1 = ' + getValue ("shape1") + ', shape2 = ' + getValue ("shape2") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Beta quantiles", list ("Vector of probabilities", "' + p + '", "Shape 1", "' + getValue ("shape1") + '", "Shape 2", "' + getValue ("shape2") + '", "non-centrality parameter (ncp)", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Beta quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/geom_quantiles.xml0000755000175000017500000000062612124345413024001 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_hypergeometric_distribution.xml0000644000175000017500000000204712124345413027644 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/poisson_probabilities.xml0000644000175000017500000000057512124345414025370 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/gumbel_probabilities.xml0000755000175000017500000000072612124345414025152 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_geometric_distribution.rkh0000644000175000017500000000123512124345414026557 0ustar thomasthomas Density and distribution function plots for the Geometric distribution. See R reference on Geometric distribution.
    rkward-0.6.1/rkward/plugins/distributions/dist_snippets.xml0000644000175000017500000000245612124345414023656 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/f_quantiles.xml0000644000175000017500000000113012124345414023264 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_weibull_distribution.rkh0000644000175000017500000000133612124345414026246 0ustar thomasthomas Density and distribution function plots for the Weibull distribution. See R reference on Weibull distribution. See R reference on Weibull distribution.
    rkward-0.6.1/rkward/plugins/distributions/uniform_probabilities.js0000755000175000017500000000124712124345414025171 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (punif (q = ' + q + ', min = ' + getValue ("min") + ', max = ' + getValue ("max") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Uniform probability", list ("Vector of quantiles", "' + q + '", "Lower limits of the distribution", "' + getValue ("min") + '", "Upper limits of the distribution", "' + getValue ("max") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Uniform probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_geometric_distribution.js0000644000175000017500000000135712124345413026413 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['prob'] = getValue ("prob"); getDiscontRangeParameters(); if (options['is_density']) { options['fun'] = "dgeom"; } else { options['fun'] = "pgeom"; } } function doHeader () { echo ('rk.header ("Geometric ' + options['label'] + ' function", list ("Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Probability of success on each trial", "' + options['prob'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, prob=' + options['prob'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/tukey_probabilities.xml0000644000175000017500000000114612124345413025031 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/weibull_probabilities.xml0000755000175000017500000000073712124345414025344 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_chi_squared_distribution.rkh0000644000175000017500000000134712124345413027073 0ustar thomasthomas Density and distribution function plots for the Chi-squared distribution. See R reference on Chi-squared distribution. See R reference on Chi-squared distribution.
    rkward-0.6.1/rkward/plugins/distributions/cauchy_probabilities.xml0000755000175000017500000000072412124345414025151 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/hypergeometric_quantiles.js0000755000175000017500000000140312124345413025706 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qhyper (p = ' + p + ', m = ' + getValue ("m") + ', n = ' + getValue ("n") + ', k = ' + getValue ("k") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Hypergeometric quantile", list ("Vector of probabilities", "' + p + '", "Number of white balls in the urn", "' + getValue ("m") + '", "Number of black balls in the urn", "' + getValue ("n") + '", "Number of balls drawn from the urn", "' + getValue ("k") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Hypergeometric quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/negative_binomial_probabilities.js0000755000175000017500000000125312124345414027163 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pnbinom (q = ' + q + ', size = ' + getValue ("size") + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Negative Binomial probability", list ("Vector of quantiles", "' + q + '", "Size", "' + getValue ("size") + '", "Probability of success in each trial", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Negative Binomial probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_weibull_distribution.js0000644000175000017500000000156612124345414026103 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['scale'] = getValue ("scale"); options['shape'] = getValue ("shape"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dweibull"; } else { options['fun'] = "pweibull"; } } function doHeader () { echo ('rk.header ("Weibull ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Shape", "' + options['shape'] + '", "Scale", "' + options['scale'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, shape=' + options['shape'] + ', scale=' + options['scale'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/chi_squared_quantiles.xml0000644000175000017500000000075612124345413025342 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_t_distribution.rkh0000644000175000017500000000130412124345414025041 0ustar thomasthomas Density and distribution function plots for the t distribution. See R reference on t distribution. See R reference on t distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_lognormal_distribution.rkh0000644000175000017500000000134212124345414026572 0ustar thomasthomas Density and distribution function plots for the Lognormal distribution. See R reference on Lognormal distribution. See R reference on Lognormal distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_dist_common.js0000644000175000017500000000427512124345414024154 0ustar thomasthomas// globals var options; function printout () { doPrintout (true); } function preview () { if (typeof (preprocess) != "undefined") preprocess (); if (typeof (calculate) != "undefined") calculate (); doPrintout (false); } // get the range parameters for the continuous distributions (it's all the same for these) function getContRangeParameters () { options['n'] = getValue ("n"); options['min'] = getValue ("min"); options['max'] = getValue ("max"); } // get the range parameters for the discontinuous distributions (it's all the same for these) function getDiscontRangeParameters () { options['min'] = getValue ("min"); options['max'] = getValue ("max"); options['n'] = options['max'] - options['min'] + 1; } function doPrintout (full) { var fun = getValue ("function"); var _log = (getValue ("log") == 1); var is_density = ""; var label = ""; var tail_option = ""; var tail_label = ""; var log_option = ""; if (fun == "d") { is_density = true; label = "density"; tail_option = ""; tail_label = ""; if (_log) log_option = ", log=TRUE"; } else { is_density = false; label = "distribution"; if (getValue("lower") == "1") { tail_option = ", lower.tail = TRUE"; tail_label = ", \"Tail\",\"Lower\""; } else { tail_option = ", lower.tail = FALSE"; tail_label = ", \"Tail\",\"Upper\""; } if (_log) log_option = ", log.p=TRUE"; } var log_label = ', "Scale", "normal"'; if (_log) log_label = ', "Scale", "logarithmic"'; options = new Array(); options['is_density'] = is_density; options['label'] = label; options['tail_option'] = tail_option; options['tail_label'] = tail_label; options['log_option'] = log_option; options['log_label'] = log_label; getParameters (); if (full) { doHeader (); echo ('\n'); echo ('rk.graph.on ()\n'); } echo ('try ({\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.preprocess"), '', '\n'); echo (' curve ('); doFunCall (); echo (', from=' + options['min'] + ', to=' + options['max'] + ', n=' + options['n'] + getValue ("plotoptions.code.printout") + ')\n'); printIndentedUnlessEmpty ("\t", getValue ("plotoptions.code.calculate"), '\n', ''); echo ('})\n'); if (full) { echo ('rk.graph.off ()\n'); } } rkward-0.6.1/rkward/plugins/distributions/plot_normal_distribution.js0000644000175000017500000000154712124345414025727 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['mean'] = getValue ("mean"); options['sd'] = getValue ("sd"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dnorm"; } else { options['fun'] = "pnorm"; } } function doHeader () { echo ('rk.header ("Normal ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Mean", "' + options['mean'] + '", "Standard Deviation", "' + options['sd'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, mean=' + options['mean'] + ', sd=' + options['sd'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/normal_quantiles.xml0000644000175000017500000000073012124345414024334 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_uniform_distribution.xml0000644000175000017500000000172412124345414026277 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/wilcoxon_probabilities.js0000755000175000017500000000132012124345414025344 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pwilcox (q = ' + q + ', m = ' + getValue ("m") + ', n = ' + getValue ("n") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Wilcoxon Rank Sum probability", list ("Vector of quantiles", "' + q + '", "m (Numbers of observations in the first sample)", "' + getValue ("m") + '", "n (Numbers of observations in the second sample)", "' + getValue ("n") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Wilcoxon Rank Sum probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/t_quantiles.xml0000644000175000017500000000073212124345413023310 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/negative_binomial_probabilities.xml0000755000175000017500000000104112124345413027341 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/poisson_quantiles.xml0000755000175000017500000000056112124345414024543 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_beta_distribution.xml0000644000175000017500000000217412124345413025532 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_negbinomial_distribution.xml0000644000175000017500000000341012124345413027075 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/logistic_quantiles.js0000755000175000017500000000121112124345414024473 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qlogis (p = ' + p + ', location = ' + getValue ("location") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Logistic quantile", list ("Vector of probabilities", "' + p + '", "Location", "' + getValue ("location") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Logistic quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/chi_squared_probabilities.xml0000644000175000017500000000077112124345414026163 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_tukey_distribution.xml0000644000175000017500000000303312124345414025754 0ustar thomasthomas Only the distribution function can be plotted for the Tukey distribution. rkward-0.6.1/rkward/plugins/distributions/normal_probabilities.js0000644000175000017500000000115612124345414024776 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pnorm (q = ' + q + ', mean = ' + getValue ("mean") + ', sd = ' + getValue ("sd") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Normal probability", list ("Vector of quantiles", "' + q + '", "mu", "' + getValue ("mean") + '", "sigma", "' + getValue ("sd") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Normal probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/exponential_probabilities.js0000755000175000017500000000106712124345414026040 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pexp (q = ' + q + ', rate = ' + getValue ("rate") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Exponential probabilities", list ("Vector of quantiles", "' + q + '", "Rate", "' + getValue ("rate") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Exponential probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/beta_probabilities.xml0000755000175000017500000000111212124345413024577 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_normal_distribution.rkh0000644000175000017500000000132612124345413026071 0ustar thomasthomas Density and distribution function plots for the Normal distribution. See R reference on Normal distribution. See R reference on Normal distribution.
    rkward-0.6.1/rkward/plugins/distributions/wilcoxon_quantiles.xml0000755000175000017500000000077612124345414024723 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/weibull_probabilities.js0000755000175000017500000000120012124345414025142 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pweibull (q = ' + q + ', shape = ' + getValue ("shape") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Weibull probability", list ("Vector of quantiles", "' + q + '", "Shape", "' + getValue ("shape") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Weibull probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/uniform_quantiles.xml0000755000175000017500000000075612124345413024535 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/f_probabilities.xml0000644000175000017500000000114212124345413024111 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/f_quantiles.js0000644000175000017500000000135012124345414023104 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qf (p = ' + p + ', df1 = ' + getValue ("df1") + ', df2 = ' + getValue ("df2") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("F quantile", list ("Vector of probabilities", "' + p + '", "Numerator degrees of freedom", "' + getValue ("df1") + '", "Denominator degrees of freedom", "' + getValue ("df2") + '", "non-centrality parameter", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="F quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/uniform_probabilities.xml0000755000175000017500000000077012124345414025355 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_beta_distribution.rkh0000644000175000017500000000144612124345413025517 0ustar thomasthomas Density and distribution function plots for the Beta distribution. shape1 parameter of the Beta distribution. shape2 parameter of the Beta distribution. Non-centrality parameter of the Beta distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_lognormal_distribution.xml0000644000175000017500000000202512124345413026604 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/log_normal_probabilities.js0000644000175000017500000000121512124345413025632 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (plnorm (q = ' + q + ', meanlog = ' + getValue ("meanlog") + ', sdlog = ' + getValue ("sdlog") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Log Normal probability", list ("Vector of quantiles", "' + q + '", "meanlog", "' + getValue ("meanlog") + '", "sdlog", "' + getValue ("sdlog") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Log Normal probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/negative_binomial_quantiles.xml0000755000175000017500000000102512124345413026520 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/beta_probabilities.js0000755000175000017500000000133612124345413024423 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pbeta (q = ' + q + ', shape1 = ' + getValue ("shape1") + ', shape2 = ' + getValue ("shape2") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Beta probability", list ("Vector of quantiles", "' + q + '", "Shape 1", "' + getValue ("shape1") + '", "Shape 2", "' + getValue ("shape2") + '", "non-centrality parameter (ncp)", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Beta probability")\n'); } rkward-0.6.1/rkward/plugins/distributions/normal_quantiles.js0000644000175000017500000000115312124345413024147 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qnorm (p = ' + p + ', mean = ' + getValue ("mean") + ', sd = ' + getValue ("sd") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Normal quantile", list ("Vector of probabilities", "' + p + '", "mu", "' + getValue ("mean") + '", "sigma", "' + getValue ("sd") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Normal quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/geom_probabilities.xml0000755000175000017500000000064212124345414024623 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_geometric_distribution.xml0000644000175000017500000000157012124345413026574 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/weibull_quantiles.xml0000755000175000017500000000072312124345413024513 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/exponential_probabilities.xml0000755000175000017500000000061412124345414026221 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/gumbel_quantiles.xml0000755000175000017500000000071212124345413024321 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/wilcoxon_probabilities.xml0000755000175000017500000000101212124345414025526 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/gumbel_probabilities.js0000755000175000017500000000120312124345414024755 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pweibull (q = exp(' + q + '), shape = ' + getValue ("shape") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Gumbel probability", list ("Vector of quantiles", "' + q + '", "Shape", "' + getValue ("shape") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Gumbel probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/tukey_probabilities.js0000644000175000017500000000145712124345413024652 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (ptukey (q = ' + q + ', nmeans = ' + getValue ("nmeans") + ', df = ' + getValue ("df") + ', nranges = ' + getValue ("nranges") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Studentized Range probability", list ("Vector of quantiles", "' + q + '", "Sample size for range", "' + getValue ("nmeans") + '", "Degrees of freedom for s", "' + getValue ("df") + '", "Number of groups whose maximum range is considered", "' + getValue ("nranges") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Studentized Range probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/hypergeometric_probabilities.xml0000755000175000017500000000113512124345413026717 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/log_normal_quantiles.xml0000644000175000017500000000106412124345414025176 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_tukey_distribution.js0000644000175000017500000000217112124345414025572 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['df'] = getValue ("df"); options['nmeans'] = getValue ("nmeans"); options['nranges'] = getValue ("nranges"); getContRangeParameters (); if (options['is_density']) { // actually, this can never happen in this case, but we add it here, for consistency with the other plugins options['fun'] = "dtukey"; } else { options['fun'] = "ptukey"; } } function doHeader () { echo ('rk.header ("Tukey ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Sample size for range", "' + options['nmeans'] + '", "Degreed of freedom for s", "' + options['df'] + '", "Number of groups", "' + options['nranges'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, nmeans=' + options['nmeans'] + ', df=' + options['df'] + ', nranges=' + options['nranges'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_cauchy_distribution.xml0000644000175000017500000000201712124345413026067 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_cauchy_distribution.js0000644000175000017500000000156112124345413025706 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['loc'] = getValue ("loc"); options['scale'] = getValue ("scale"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dcauchy"; } else { options['fun'] = "pcauchy"; } } function doHeader () { echo ('rk.header ("Cauchy ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Location", "' + options['loc'] + '", "Scale", "' + options['scale'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, location=' + options['loc'] + ', scale=' + options['scale'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_logistic_distribution.js0000644000175000017500000000156112124345414026250 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['loc'] = getValue ("loc"); options['scale'] = getValue ("scale"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dlogis"; } else { options['fun'] = "plogis"; } } function doHeader () { echo ('rk.header ("Logistic ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Location", "' + options['loc'] + '", "Scale", "' + options['scale'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, location=' + options['loc'] + ', scale=' + options['scale'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_gamma_distribution.js0000644000175000017500000000155212124345414025515 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['shape'] = getValue ("shape"); options['rate'] = getValue ("rate"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dgamma"; } else { options['fun'] = "pgamma"; } } function doHeader () { echo ('rk.header ("Gamma ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Shape", "' + options['shape'] + '", "Rate", "' + options['rate'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, shape=' + options['shape'] + ', rate=' + options['rate'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_lognormal_distribution.js0000644000175000017500000000156212124345414026426 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['sd'] = getValue ("sd"); options['mean'] = getValue ("mean"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dlnorm"; } else { options['fun'] = "plnorm"; } } function doHeader () { echo ('rk.header ("Lognormal ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Mean", "' + options['mean'] + '", "Standard deviation", "' + options['sd'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, meanlog=' + options['mean'] + ', sdlog=' + options['sd'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/binomial_tail_probabilities.xml0000644000175000017500000000101012124345414026462 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/t_quantiles.js0000644000175000017500000000117612124345414023130 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qt (p = ' + p + ', df = ' + getValue ("df") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("t quantile", list ("Vector of probabilities", "' + p + '", "Degrees of freedom", "' + getValue ("df") + '", "non-centrality parameter", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="t quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/gumbel_quantiles.js0000755000175000017500000000117612124345414024143 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- log(qweibull (p = ' + p + ', shape = ' + getValue ("shape") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Gumbel quantile", list ("Vector of probabilities", "' + p + '", "Shape", "' + getValue ("shape") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Gumbel quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/log_normal_probabilities.xml0000644000175000017500000000110712124345413026016 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/cauchy_probabilities.js0000755000175000017500000000121312124345414024757 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pcauchy (q = ' + q + ', location = ' + getValue ("location") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Cauchy probabilities", list ("Vector of quantiles", "' + q + '", "Location", "' + getValue ("location") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Cauchy probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_uniform_distribution.rkh0000644000175000017500000000133412124345413026257 0ustar thomasthomas Density and distribution function plots for the Uniform distribution. See R reference on Uniform distribution. See R reference on Uniform distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_wilcoxon_distribution.js0000644000175000017500000000147612124345413026301 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['nm'] = getValue ("nm"); options['nn'] = getValue ("nn"); getDiscontRangeParameters(); if (options['is_density']) { options['fun'] = "dwilcox"; } else { options['fun'] = "pwilcox"; } } function doHeader () { echo ('rk.header ("Binomial ' + options['label'] + ' function", list ("Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "First sample size", "' + options['nm'] + '", "Second sample size", "' + options['nn'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, m=' + options['nm'] + ', n=' + options['nn'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_t_distribution.xml0000644000175000017500000000177012124345413025063 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/geom_quantiles.js0000755000175000017500000000111712124345413023611 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qgeom (p = ' + p + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Geometric quantile", list ("Vector of probabilities", "' + p + '", "Probability of success in each trial", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Geometric quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/log_normal_quantiles.js0000644000175000017500000000121212124345413025004 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qlnorm (p = ' + p + ', meanlog = ' + getValue ("meanlog") + ', sdlog = ' + getValue ("sdlog") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Log Normal quantile", list ("Vector of probabilities", "' + p + '", "meanlog", "' + getValue ("meanlog") + '", "sdlog", "' + getValue ("sdlog") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Log Normal quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_t_distribution.js0000644000175000017500000000153312124345414024675 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['ncp'] = getValue ("ncp"); options['df'] = getValue ("df"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dt"; } else { options['fun'] = "pt"; } } function doHeader () { echo ('rk.header ("Student t ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Minimum", "' + options['min'] + '", "Maximum", "' + options['max'] + '", "Degrees of freedom", "' + options['df'] + '", "Non-centrality", "' + options['ncp'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, df=' + options['df'] + ', ncp=' + options['ncp'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/t_probabilities.xml0000644000175000017500000000074512124345414024140 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/exponential_quantiles.js0000755000175000017500000000106312124345414025211 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qexp (p = ' + p + ', rate = ' + getValue ("rate") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Exponential quantiles", list ("Vector of probabilities", "' + p + '", "Rate", "' + getValue ("rate") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Exponential quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_hypergeometric_distribution.rkh0000644000175000017500000000150512124345414027627 0ustar thomasthomas Density and distribution function plots for the Hypergeometric distribution. See R reference on Hypergeometric distribution. See R reference on Hypergeometric distribution. See R reference on Hypergeometric distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_hypergeometric_distribution.js0000644000175000017500000000167212124345413027463 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['n_val'] = getValue ("n_val"); options['m'] = getValue ("m"); options['k'] = getValue ("k"); getDiscontRangeParameters(); if (options['is_density']) { options['fun'] = "dhyper"; } else { options['fun'] = "phyper"; } } function doHeader () { echo ('rk.header ("Hypergeometric ' + options['label'] + ' function", list ("Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Number of white balls", "' + options['m'] + '", "Number of black balls", "' + options['n_val'] + '", "Number of balls drawn", "' + options['k'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, m=' + options['m'] + ', n=' + options['n_val'] + ', k=' + options['k'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_normal_distribution.xml0000644000175000017500000000174712124345413026114 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_wilcoxon_distribution.xml0000644000175000017500000000175212124345414026463 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_f_distribution.js0000644000175000017500000000175412124345414024664 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['df1'] = getValue ("df1"); options['df2'] = getValue ("df2"); options['ncp'] = getValue ("ncp"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "df"; } else { options['fun'] = "pf"; } } function doHeader () { echo ('rk.header ("F ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Numerator degrees of freedom", "' + options['df1'] + '", "Denominator degrees of freedom", "' + options['df2'] + '", "Non-centrality", "' + options['ncp'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, df1=' + options['df1'] + ', df2=' + options['df2'] + ', ncp=' + options['ncp'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_binomial_distribution.js0000644000175000017500000000154312124345414026225 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['size'] = getValue ("size"); options['prob'] = getValue ("prob"); getDiscontRangeParameters(); if (options['is_density']) { options['fun'] = "dbinom"; } else { options['fun'] = "pbinom"; } } function doHeader () { echo ('rk.header ("Binomial ' + options['label'] + ' function", list ("Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Number of trials", "' + options['size'] + '", "Probability of success on each trial", "' + options['prob'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, size=' + options['size'] + ', prob=' + options['prob'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_weibull_distribution.xml0000644000175000017500000000177112124345414026265 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/cauchy_quantiles.js0000755000175000017500000000121012124345413024130 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qcauchy (p = ' + p + ', location = ' + getValue ("location") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Cauchy quantiles", list ("Vector of probabilities", "' + p + '", "Location", "' + getValue ("location") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Cauchy quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_chi_squared_distribution.js0000644000175000017500000000157312124345414026725 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['df'] = getValue ("df"); options['ncp'] = getValue ("ncp"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dchisq"; } else { options['fun'] = "pchisq"; } } function doHeader () { echo ('rk.header ("Chisquare ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Degrees of freedom", "' + options['df'] + '", "Non-centrality parameter", "' + options['ncp'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, df=' + options['df'] + ', ncp=' + options['ncp'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_f_distribution.xml0000644000175000017500000000221612124345414025042 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/binomial_quantiles.xml0000644000175000017500000000076412124345414024645 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/hypergeometric_probabilities.js0000755000175000017500000000140612124345414026535 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (phyper (q = ' + q + ', m = ' + getValue ("m") + ', n = ' + getValue ("n") + ', k = ' + getValue ("k") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Hypergeometric probability", list ("Vector of quantiles", "' + q + '", "Number of white balls in the urn", "' + getValue ("m") + '", "Number of black balls in the urn", "' + getValue ("n") + '", "Number of balls drawn from the urn", "' + getValue ("k") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Hypergeometric probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_negbinomial_distribution.js0000644000175000017500000000302312124345413026711 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { var size = ""; var size_label = ""; var paramTag = ""; var paramVal = ""; var paramLabel = ""; if (getValue ("param") == "pprob") { size = getValue ("size_trial"); size_label = "Target for number of successful trials"; paramTag = ", prob="; paramVal = getValue ("prob"); paramLabel = "Probability of success in each trial"; } else { size = getValue ("size_disp"); size_label = "Dispersion (size)"; paramTag = ", mu="; paramVal = getValue ("mu"); paramLabel = "Alternative parameter, mu"; } options['size'] = size; options['size_label'] = size_label; options['param_tag'] = paramTag; options['param_val'] = paramVal; options['param_label'] = paramLabel; options['prob'] = getValue ("prob"); getDiscontRangeParameters(); if (options['is_density']) { options['fun'] = "dnbinom"; } else { options['fun'] = "pnbinom"; } } function doHeader () { echo ('rk.header ("Negative Binomial ' + options['label'] + ' function", list ("Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "' + options['size_label'] + '", "' + options['size'] + '", "' + options['param_label'] + '", "' + options['param_val'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, size=' + options['size'] + options['param_tag'] + options['param_val'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/chi_squared_probabilities.js0000644000175000017500000000123212124345414025770 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pchisq (q = ' + q + ', df = ' + getValue ("df") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Chi-squared probability", list ("Vector of quantiles", "' + q + '", "Degrees of Freedom", "' + getValue ("df") + '", "non-centrality parameter", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Chi-squared probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_beta_distribution.js0000644000175000017500000000170712124345414025350 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['a'] = getValue ("a"); options['b'] = getValue ("b"); options['ncp'] = getValue ("ncp"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dbeta"; } else { options['fun'] = "pbeta"; } } function doHeader () { echo ('rk.header ("Beta ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Shape1", "' + options['a'] + '", "Shape2", "' + options['b'] + '", "Non-centrality parameter", "' + options['ncp'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, shape1=' + options['a'] + ', shape2=' + options['b'] + ', ncp=' + options['ncp'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_f_distribution.rkh0000644000175000017500000000140712124345414025027 0ustar thomasthomas Density and distribution function plots for the F distribution. See R reference on F distribution. See R reference on F distribution. See R reference on F distribution.
    rkward-0.6.1/rkward/plugins/distributions/tukey_quantiles.js0000644000175000017500000000145512124345413024025 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qtukey (p = ' + p + ', nmeans = ' + getValue ("nmeans") + ', df = ' + getValue ("df") + ', nranges = ' + getValue ("nranges") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Studentized Range quantiles", list ("Vector of probabilities", "' + p + '", "Sample size for range", "' + getValue ("nmeans") + '", "Degrees of freedom for s", "' + getValue ("df") + '", "Number of groups whose maximum range is considered", "' + getValue ("nranges") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Studentized Range quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/binomial_quantiles.js0000644000175000017500000000126512124345414024456 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qbinom (p = ' + p + ', size = ' + getValue ("size") + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { //produce the output echo ('rk.header ("Binomial quantile", list ("Vector of quantiles probabilities", "' + p + '", "Binomial trials", "' + getValue ("size") + '", "Probability of success", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Binomial quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/gamma_quantiles.xml0000755000175000017500000000070612124345414024134 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_poisson_distribution.rkh0000644000175000017500000000122712124345414026274 0ustar thomasthomas Density and distribution function plots for the Poisson distribution. See R reference on Poisson distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_tukey_distribution.rkh0000644000175000017500000000155612124345413025747 0ustar thomasthomas Distribution function plot for the Studentized Range (Tukey) distribution. Only the distribution function can be plotted for the Tukey distribution. See R reference on Tukey distribution. See R reference on Tukey distribution. See R reference on Tukey distribution.
    rkward-0.6.1/rkward/plugins/distributions/plot_logistic_distribution.xml0000644000175000017500000000174712124345414026442 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/chi_squared_quantiles.js0000644000175000017500000000122612124345414025150 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qchisq (p = ' + p + ', df = ' + getValue ("df") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Chi-squared quantile", list ("Vector of probabilities", "' + p + '", "Degrees of freedom", "' + getValue ("df") + '", "non-centrality parameter", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Chi-squared quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/0000755000175000017500000000000012124345413021376 5ustar thomasthomasrkward-0.6.1/rkward/plugins/distributions/tests/shapiro_test.js0000755000175000017500000000144112124345413024443 0ustar thomasthomasfunction calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo (' try ({\n'); echo (' test <- shapiro.test (var)\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Shapiro-Wilk Normality Test")\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/lillie_test.xml0000755000175000017500000000126512124345413024440 0ustar thomasthomas Note: Objects must have at least 5 values rkward-0.6.1/rkward/plugins/distributions/tests/sf_test.js0000755000175000017500000000155012124345413023407 0ustar thomasthomasfunction preprocess () { echo ('require(nortest)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo (' try ({\n'); echo (' test <- sf.test (var)\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo (' \n'); echo ('rk.header ("Shapiro-Francia Normality Test")\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/pearson_test.xml0000755000175000017500000000162712124345413024637 0ustar thomasthomas Note: Objects must have at least 8 values rkward-0.6.1/rkward/plugins/distributions/tests/jb_test.js0000755000175000017500000000211312124345413023366 0ustar thomasthomasfunction preprocess () { echo ('require(tseries)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } if (getValue ("excludenas")) { echo (' var <- na.omit (var)\n'); } echo (' try ({\n'); echo (' test <- jarque.bera.test (var)\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'df\'] <- test$parameter\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Jarque-Bera Normality Test", parameters=list ("Exclude NAs", '); if (getValue ("excludenas")) echo ('"YES"'); else echo ('"NO"'); echo ('))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/lillie_test.js0000755000175000017500000000155612124345413024257 0ustar thomasthomasfunction preprocess () { echo ('require (nortest)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo (' try ({\n'); echo (' test <- lillie.test (var)\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Lilliefors (Kolmogorov-Smirnov) Normality test")\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/cvm_test.xml0000755000175000017500000000124312124345413023747 0ustar thomasthomas Note: Objects must have at least 8 values rkward-0.6.1/rkward/plugins/distributions/tests/cvm_test.js0000755000175000017500000000153312124345413023565 0ustar thomasthomasfunction preprocess () { echo ('require(nortest)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo (' try ({\n'); echo (' test <- cvm.test (var)\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Cramer-von Mises Normality Test")\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/pearson_test.js0000755000175000017500000000230112124345413024441 0ustar thomasthomasfunction preprocess () { echo ('require(nortest)\n'); } function calculate () { var adjust = getValue ("adjust"); var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo (' try ({\n'); echo (' test <- pearson.test (var, ' + adjust + ')\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' results[i, \'number of classes\'] <- test$n.classes\n'); echo (' results[i, \'degrees of freedom\'] <- test$df\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Pearson chi-square Normality Test",\n'); echo (' parameters=list ("chi-square distribution with n.classes-3 df (TRUE) or chi-square distribution with n.classes-1 df (FALSE)", "' + getValue ("adjust") + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/sf_test.xml0000755000175000017500000000126712124345413023600 0ustar thomasthomas Note: Objects must have between 5 and 5000 values rkward-0.6.1/rkward/plugins/distributions/tests/jb_test.rkh0000644000175000017500000000234112124345413023536 0ustar thomasthomas This plugin calculates a Jarque-Bera chi-squared statistic for a variable x and tests against the null hypothesis of normality. Select one or more numeric variables to test against normality. An individual test is run for each one of them. The output consists of the JB chi-squared statistic with 2 degrees of freedom and its correspondent p-value. The statistic's distribution is asynthotic, so this test performs better when working with big samples. Make sure the data does not contain NAs or, if so, that the 'Exclude NAs' option is checked, as neglecting this will usually prevent the test from succeeding. Select the data to be computed (one or more variables). The vectors need to be numeric and can be of different length. Select if you want to include the number of observations and NAs in the output. (Default: YES) Select if your data has missing values. The NAs are then omitted when performing the test. (Default: YES)
    rkward-0.6.1/rkward/plugins/distributions/tests/ad_test.xml0000755000175000017500000000124212124345413023545 0ustar thomasthomas Note: Objects must have at least 8 values rkward-0.6.1/rkward/plugins/distributions/tests/ad_test.js0000755000175000017500000000155012124345413023363 0ustar thomasthomasfunction preprocess () { echo ('require(nortest)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo (' try ({\n'); echo (' test <- ad.test (var)\n'); echo (' results[i, \'Statistic\'] <- paste (names (test$statistic), test$statistic, sep=" = ")\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Anderson-Darling Normality Test")\n'); echo ('\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/distributions/tests/shapiro_test.xml0000755000175000017500000000127512124345413024634 0ustar thomasthomas Note: Objects must have between 3 and 5000 values rkward-0.6.1/rkward/plugins/distributions/tests/jb_test.xml0000755000175000017500000000126012124345413023554 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/gamma_probabilities.js0000755000175000017500000000116612124345414024574 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pgamma (q = ' + q + ', shape = ' + getValue ("shape") + ', rate = ' + getValue ("rate") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Gamma probability", list ("Vector of quantiles", "' + q + '", "Shape", "' + getValue ("shape") + '", "Rate", "' + getValue ("rate") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Gamma probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_uniform_distribution.js0000644000175000017500000000155012124345414026110 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['llim'] = getValue ("llim"); options['ulim'] = getValue ("ulim"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dunif"; } else { options['fun'] = "punif"; } } function doHeader () { echo ('rk.header ("Uniform ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Minimum", "' + options['llim'] + '", "Maximum", "' + options['ulim'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, min=' + options['llim'] + ', max=' + options['ulim'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/plot_gamma_distribution.xml0000644000175000017500000000203312124345414025674 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_wilcoxon_distribution.rkh0000644000175000017500000000133712124345414026446 0ustar thomasthomas Density and distribution function plots for the Wilcoxon distribution. See R reference on Wilcoxon distribution. See R reference on Wilcoxon distribution.
    rkward-0.6.1/rkward/plugins/distributions/beta_quantiles.xml0000755000175000017500000000110012124345414023752 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_poisson_distribution.xml0000644000175000017500000000146212124345414026311 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/binomial_tail_probabilities.js0000644000175000017500000000124112124345414026304 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pbinom (q = ' + q + ', size = ' + getValue ("size") + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue ("logp") + '))\n'); } function printout () { echo ('rk.header ("Binomial tail probability", list ("Vector of quantiles", "' + q + '", "Binomial trials", "' + getValue ("size") + '", "Probability of success", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="Binomial tail probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/normal_probabilities.xml0000644000175000017500000000074312124345413025162 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_exponential_distribution.js0000644000175000017500000000137712124345413026765 0ustar thomasthomas// globals var options; include ('plot_dist_common.js'); function getParameters () { options['rate'] = getValue ("rate"); getContRangeParameters (); if (options['is_density']) { options['fun'] = "dexp"; } else { options['fun'] = "pexp"; } } function doHeader () { echo ('rk.header ("Exponential ' + options['label'] + ' function", list ("Number of Observations", "' + options['n'] + '", "Lower quantile", "' + options['min'] + '", "Upper quantile", "' + options['max'] + '", "Rate", "' + options['rate'] + '"' + options['log_label'] + options['tail_label'] + ', "Function", "' + options['fun'] + '"));' + "\n"); } function doFunCall () { echo (options['fun'] + '(x, rate=' + options['rate'] + options['log_option'] + options['tail_option'] + ')'); } rkward-0.6.1/rkward/plugins/distributions/exponential_quantiles.xml0000755000175000017500000000060012124345414025371 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/uniform_quantiles.js0000755000175000017500000000124412124345414024343 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qunif (p = ' + p + ', min = ' + getValue ("min") + ', max = ' + getValue ("max") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Uniform quantile", list ("Vector of probabilities", "' + p + '", "Lower limits of the distribution", "' + getValue ("min") + '", "Upper limits of the distribution", "' + getValue ("max") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Uniform quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/weibull_quantiles.js0000755000175000017500000000117512124345414024332 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qweibull (p = ' + p + ', shape = ' + getValue ("shape") + ', scale = ' + getValue ("scale") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Weibull quantile", list ("Vector of probabilities", "' + p + '", "Shape", "' + getValue ("shape") + '", "Scale", "' + getValue ("scale") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Weibull quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/hypergeometric_quantiles.xml0000755000175000017500000000112112124345414026070 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_negbinomial_distribution.rkh0000644000175000017500000000245612124345413027072 0ustar thomasthomas Density and distribution function plots for the Negative Binomial distribution. This is the size parameter when the 'probability' form of the parameterisation is used. This is always a non-negative integer. See R reference on Negative Binomial distribution. This is the size parameter when the 'mu' form of the parameterisation is used. This is a non-negative real number. See R reference on Negative Binomial distribution. See R reference on Negative Binomial distribution. See R reference on Negative Binomial distribution. The type of the parameterization to be used. See R reference on Negative Binomial distribution.
    rkward-0.6.1/rkward/plugins/distributions/poisson_quantiles.js0000755000175000017500000000106312124345413024354 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qpois (p = ' + p + ', lambda = ' + getValue ("lambda") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Poisson quantile", list ("Vector of probabilities", "' + p + '", "Lambda", "' + getValue ("lambda") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Poisson quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/negative_binomial_quantiles.js0000755000175000017500000000125012124345414026335 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qnbinom (p = ' + p + ', size = ' + getValue ("size") + ', prob = ' + getValue ("prob") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("Negative Binomial quantile", list ("Vector of probabilities", "' + p + '", "Size", "' + getValue ("size") + '", "Probability of success in each trial", "' + getValue ("prob") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Negative Binomial quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/tukey_quantiles.xml0000644000175000017500000000113512124345414024205 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/t_probabilities.js0000644000175000017500000000120012124345414023737 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pt (q = ' + q + ', df = ' + getValue ("df") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("t probability", list ("Vector of quantiles", "' + q + '", "Degrees of Freedom", "' + getValue ("df") + '", "non-centrality parameter", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="t probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/gamma_quantiles.js0000755000175000017500000000120112124345413023736 0ustar thomasthomas// globals var p; function calculate () { p = "c (" + getString ("p").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (qgamma (p = ' + p + ', shape = ' + getValue ("shape") + ', rate = ' + getValue ("rate") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); echo ('\n'); } function printout () { echo ('rk.header ("Gamma quantile", list ("Vector of probabilities", "' + p + '", "Shape", "' + getValue ("shape") + '", "Rate", "' + getValue ("rate") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"))\n'); echo ('rk.results (result, titles="Gamma quantiles")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_cauchy_distribution.rkh0000644000175000017500000000132712124345413026056 0ustar thomasthomas Density and distribution function plots for the Cauchy distribution. See R reference on Cauchy distribution. See R reference on Cauchy distribution.
    rkward-0.6.1/rkward/plugins/distributions/f_probabilities.js0000644000175000017500000000135412124345414023733 0ustar thomasthomas// globals var q; function calculate () { q = "c (" + getString ("q").replace (/[, ]+/g, ", ") + ")"; echo ('result <- (pf (q = ' + q + ', df1 = ' + getValue ("df1") + ', df2 = ' + getValue ("df2") + ', ncp = ' + getValue ("ncp") + ', ' + getValue ("tail") + ', ' + getValue("logp") + '))\n'); } function printout () { echo ('rk.header ("F probability", list ("Vector of quantiles", "' + q + '", "Numerator degrees of freedom", "' + getValue ("df1") + '", "Denominator degrees of freedom", "' + getValue ("df2") + '", "non-centrality parameter", "' + getValue ("ncp") + '", "Tail", "' + getValue ("tail") + '", "Probabilities p are given as", "' + getValue ("logp") + '"));\n'); echo ('rk.results (result, titles="F probabilities")\n'); } rkward-0.6.1/rkward/plugins/distributions/plot_dist_common_snippets.xml0000644000175000017500000000646212124345414026265 0ustar thomasthomas Check this box if log of the function values are to be plotted. This option is valid only for plotting the distribution function. Uncheck this box if the upper tail of the distribution function (P[X > x]) is to be plotted. Check this box for previewing the function plot. A new graphics window will pop up and it will be dynamically updated based on the choice of parameters. It may take a while for the window to show up. Sometimes, only an empty graphics device may get displayed, in which case, close the device (dev.off() or may be even graphics.off()), uncheck the box, wait for a while and try again. If it still persists, use only the "Submit" button to view the exported plot in the Output window. Various plotting parameter settings for the plot. See the help page of "Plot Options" for more details. Choose appropriate values for the various parameters of the distribution and select the type of function. The "Submit" button will export the plot to the "Output" window. To dynamically visualise the plot check the "Preview" box.
  • Density Function, or
  • Distribution Function
  • Number of observations (points) for constructing the plot (n). Smallest value at which the function is to be plotted. Largest value at which the function is to be plotted. So, the function will be evaluated at 'n' equally spaced points between the lower quantile and the upper quantile (inclusive of end points). Smallest value at which the function is to be plotted. Largest value at which the function is to be plotted. Since this is a discrete distribution the function will be evaluated at all the integers between the lower quantile and the upper quantile (inclusive of the end points).
    rkward-0.6.1/rkward/plugins/distributions/logistic_quantiles.xml0000755000175000017500000000071412124345414024666 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/cauchy_quantiles.xml0000755000175000017500000000071012124345413024320 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/logistic_probabilities.xml0000755000175000017500000000073012124345414025507 0ustar thomasthomas rkward-0.6.1/rkward/plugins/distributions/plot_exponential_distribution.rkh0000644000175000017500000000123712124345414027131 0ustar thomasthomas Density and distribution function plots for the Exponential distribution. See R reference on Exponential distribution.
    rkward-0.6.1/rkward/plugins/uni1.2/0000755000175000017500000000000012124345414016347 5ustar thomasthomasrkward-0.6.1/rkward/plugins/uni1.2/code.js0000644000175000017500000001136412124345414017624 0ustar thomasthomasfunction calculate () { var narm = "na.rm=FALSE"; if (getValue ("narm")) narm = "na.rm=TRUE"; var vars = trim (getValue ("z")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo ('\n'); if (getValue ("length")) { echo (' results[i, \'Number of obs\'] <- length(var)\n'); echo (' results[i, \'Number of missing values\'] <- sum(is.na(var))\n'); } if (getValue ("mean")) { echo (' results[i, \'Mean\'] <- mean(var,' + narm + ')\n'); } if (getValue ("geo_mean")) { // compute the geometric mean echo (' results[i, \'geometric mean\'] <- try (prod (na.omit(var))^(1 / length (na.omit(var))))\n'); } if (getValue ("interquantile_mean")) { // compute the quartile (25% and 75%) mean echo (' results[i, \'interquantile mean\'] <- try (sum(quantile(var, probs=c(0.25), na.rm=T), quantile(var, probs=c(0.75), na.rm=TRUE)) / 2)\n'); } if (getValue ("harmonic_mean")) { // compute the harmonic mean echo (' results[i, \'harmonic mean\'] <- try (1 / mean(1 / na.omit(var)))\n'); } if (getValue ("vari")) { echo (' results[i, \'Variance\'] <- var(var,' + narm + ')\n'); } if (getValue ("sd")) { echo (' results[i, \'Sd\'] <- sd(var,' + narm + ')\n'); } if (getValue ("minimum")) { echo (' results[i, \'Minimum\'] <- min(var,' + narm + ')\n'); } if (getValue ("maximum")) { echo (' results[i, \'Maximum\'] <- max(var,' + narm + ')\n'); } var nmin; if ((nmin = getValue ("nbminimum")) != "0") { echo (' if (length (var) >= ' + nmin + ') {\n'); echo (' results[i, \'Minimum values\'] <- paste (sort(var, decreasing=FALSE, na.last=TRUE)[1:' + nmin + '], collapse=" ")\n'); echo (' }\n'); } var nmax; if ((nmax = getValue ("nbmaximum")) != "0") { echo (' if (length (var) >= ' + nmax + ') {\n'); echo (' results[i, \'Maximum values\'] <- paste (sort(var, decreasing=TRUE, na.last=TRUE)[1:' + nmax + '], collapse=" ")\n'); echo (' }\n'); } if (getValue ("median")) { echo (' results[i, \'Median\'] <- median(var,' + narm + ')\n'); } if (getValue ("irq")) { echo (' results[i, \'Inter Quartile Range\'] <- IQR(var,' + narm + ')\n'); } if (getValue ("quartile")) { echo (' temp <- quantile (var,' + narm + ')\n'); echo (' results[i, \'Quartiles\'] <- paste (names (temp), temp, sep=": ", collapse=" ")\n'); } var nautre; if ((nautre = getValue ("autre")) != "0") { echo (' temp <- quantile (var, probs=seq (0, 1, length.out=' + nautre + '), ' + narm + ')\n'); echo (' results[i, \'Quantiles\'] <- paste (names (temp), temp, sep=": ", collapse=" ")\n'); } echo (' \n'); echo (' #robust statistics\n'); if (getValue ("trim") == "1") { echo (' results[i, \'Trimmed Mean\'] <- mean (var, trim=' + getValue ("pourcent") + ', ' + narm + ')\n'); } if (getValue ("mad") == "1") { echo (' results[i, \'Median Absolute Deviation\'] <- mad (var, constant=' + getValue ("constMad") + ', ' + narm + ')\n'); } if (getValue ("huber") == "1") { echo (' require ("MASS")\n'); echo (' temp <- list (c(\'Location Estimate\',\'Mad scale estimate\'), c(NA,NA))\n'); echo (' try({\n'); echo (' temp <- hubers (var, k = ' + getValue ("winsor") + ',tol=' + getValue ("tol")); if (getValue("customMu")=="1") echo (", mu="+getValue("mu")); if (getValue("customS")=="1") echo (", s="+getValue("s")); echo (",initmu ="+getValue("initmu")+"(var))\n"); echo (' })\n'); echo (' results[i, \'Huber M-Estimator\'] <- paste (temp[[1]], temp[[2]], sep=": ", collapse=" ")\n'); } echo ('}\n'); echo ('\n'); if (getValue ("saveas.active")) { echo ('# store results\n'); echo ('.GlobalEnv$' + getValue ("saveas") + ' <- results\n'); } } function printout () { echo ('rk.header ("Univariate statistics", parameters=list (\n'); echo ('"Remove Missing values", '); if (getValue ("narm")) echo ("TRUE"); else echo ("FALSE"); if (getValue("trim")=="1") { echo (', "Trimmed value for trimmed mean", "' + getValue ("pourcent") + '"\n'); } if (getValue("mad")=="1") { echo (', "Constant for the MAD estimation", "' + getValue ("constMad") + '"\n'); } if (getValue("huber")=="1") { echo (', "Winsorized values for Huber estimator", "' + getValue ("winsor") + '"\n'); echo (', "Tolerance in Huber estimator", "' + getValue ("tol") + '"\n'); if (getValue ("customMu")=="1") { echo (', "Mu for Huber estimator", "' + getValue ("mu") + '"\n'); } if (getValue ("customS")=="1") { echo (', "S for Huber estimator", "' + getValue ("s") + '"\n'); } echo (', "Initial value", "' + getValue ("initmu") + '"\n'); } echo ('))\n'); echo ('\n'); echo ('rk.results (results)\n'); if (getValue ("save_to_file")) echo ('write.csv(file="' + getValue ("file") + '", results)\n'); } rkward-0.6.1/rkward/plugins/uni1.2/description.xml0000644000175000017500000001205712124345414021421 0ustar thomasthomas rkward-0.6.1/rkward/plugins/descriptive/0000755000175000017500000000000012124345412017652 5ustar thomasthomasrkward-0.6.1/rkward/plugins/descriptive/descriptive_statistics.js0000644000175000017500000000561412124345412025011 0ustar thomasthomas// globals var mad_type; var constMad; function calculate () { var vars = trim (getValue ("x")).split ("\n").join (", "); constMad = getValue ("constMad"); mad_type = getValue ("mad_type"); echo ('vars <- rk.list (' + vars + ')\n'); echo ('results <- data.frame (\'Object\'=I(names (vars)))\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo ('\n'); echo (' # we wrap each single call in a "try" statement to always continue on errors.\n'); if (getValue ("mean")) { // trim is the fraction (0 to 0.5) of observations to be trimmed from each end of x before the mean is computed echo (' results[i, \'mean\'] <- try (mean (var, trim = ' + getValue ("trim") + ', na.rm=TRUE))\n'); } if (getValue ("geo_mean")) { // compute the geometric mean echo (' results[i, \'geometric mean\'] <- try (prod (na.omit(var))^(1 / length (na.omit(var))))\n'); } if (getValue ("interquantile_mean")) { // compute the quartile (25% and 75%) mean echo (' results[i, \'interquantile mean\'] <- try (sum(quantile(var, probs=c(0.25), na.rm=T), quantile(var, probs=c(0.75), na.rm=TRUE)) / 2)\n'); } if (getValue ("harmonic_mean")) { // compute the harmonic mean echo (' results[i, \'harmonic mean\'] <- try (1 / mean(1 / na.omit(var)))\n'); } if (getValue ("median")) { echo (' results[i, \'median\'] <- try (median (var, na.rm=TRUE))\n'); } if (getValue ("range")) { echo (' try ({\n'); echo (' range <- try (range (var, na.rm=TRUE))\n'); echo (' results[i, \'min\'] <- range[1]\n'); echo (' results[i, \'max\'] <- range[2]\n'); echo (' })\n'); } if (getValue ("sd")) { echo (' results[i, \'standard deviation\'] <- try (sd (var, na.rm=TRUE))\n'); } if (getValue ("sum")) { echo (' results[i, \'sum\'] <- try (sum (var, na.rm=TRUE))\n'); } if (getValue ("prod")) { echo (' results[i, \'product\'] <- try (prod (var, na.rm=TRUE))\n'); } if (getValue ("mad")) { echo (' results[i, \'Median Absolute Deviation\'] <- try (mad (var, constant = ' + constMad); if (mad_type == "low") echo (", low=TRUE"); else if (mad_type == "high") echo (", high=TRUE"); echo (', na.rm=TRUE))\n'); } if (getValue ("length")) { echo (' results[i, \'length of sample\'] <- length (var)\n'); echo (' results[i, \'number of NAs\'] <- sum (is.na(var))\n'); } echo ('}\n'); } function printout () { echo ('rk.header ("Descriptive statistics", parameters=list (\n'); echo (' "Trim of mean", ' + getValue ("trim")); if (getValue ("mad")) { echo (',\n'); echo (' "Median Absolute Deviation",\n'); echo (' paste ("constant:", ' + constMad + ', '); if (mad_type == "low") echo ('"lo-median"'); else if (mad_type == "high") echo ('"hi-median"'); else echo ('"average"' + ')'); } echo ('))\n'); echo ('\n'); echo ('rk.results (results)\n'); if (getValue ("save_to_file")) echo ('write.csv(file="' + getValue ("file") + '", results)\n'); } rkward-0.6.1/rkward/plugins/descriptive/descriptive_statistics.rkh0000644000175000017500000000504012124345412025152 0ustar thomasthomas Compute the most common descriptive statistics for one or more numeric vectors Select one or more objects to analyse. For most types of analysis, the objects need to be numeric vectors. On the subsequent tabs/pages specify, which statistics you want computed (see below for details). Each selected variable will be analysed independently of the others. NA values are excluded from the calculations. Select one or more numeric vectors to analyse Should the mean value be computed? Trim of the mean. See Should the geometric mean value be computed? Should the interquantile mean value be computed? Compute the standard deviation? Should the median value be computed? Compute the median absolute deviation, i.e., the (lo-/hi-) median of the absolute deviations from the median, and (by default) adjust by a factor for asymptotically normal consistency (see ). Scale factor to use when computing the median absolute deviation How to treat even size samples: Average the two middle values, take the lower, or take the higher Compute the range, i.e. lowest and highest value Compute the sum of all values Compute the product of all values Count the total length of values, and the number of missing values (NAs)
    rkward-0.6.1/rkward/plugins/descriptive/descriptive_statistics.xml0000644000175000017500000000521112124345412025166 0ustar thomasthomas rkward-0.6.1/rkward/plugins/all.pluginmap0000644000175000017500000000063212124345414020022 0ustar thomasthomas rkward-0.6.1/rkward/plugins/data.pluginmap0000644000175000017500000000123512124345414020163 0ustar thomasthomas rkward-0.6.1/rkward/plugins/simple_anova/0000755000175000017500000000000012124345414020010 5ustar thomasthomasrkward-0.6.1/rkward/plugins/simple_anova/code.js0000644000175000017500000000046612124345414021266 0ustar thomasthomasfunction calculate () { echo ('model = glm (' + getValue ("model") + ', data=' + getValue ("model.table") + ')\n'); echo ('labels = ' + getValue ("model.labels") + ' \n'); echo ('result = anova (model)\n'); } function printout () { echo ('rk.header ("Simple Anova")\n'); echo ('rk.print (result)\n'); } rkward-0.6.1/rkward/plugins/simple_anova/description.xml0000644000175000017500000000123012124345414023051 0ustar thomasthomas This plugin is bogus! Do not use! rkward-0.6.1/rkward/plugins/x11device/0000755000175000017500000000000012124345412017122 5ustar thomasthomasrkward-0.6.1/rkward/plugins/x11device/export.xml0000644000175000017500000002114412124345412021167 0ustar thomasthomas rkward-0.6.1/rkward/plugins/x11device/grid.js0000644000175000017500000000134512124345412020410 0ustar thomasthomasfunction preprocess () { if (getValue ("is_embed")) { echo ('dev.set (' + getValue ("devnum") + ')\n'); } } function printout () { var gridoptions = ""; var nx = getValue ("nx"); if (nx == "other") gridoptions = 'nx=' + getValue ("nx_cells"); else gridoptions = 'nx=' + nx; var ny = getValue ("ny"); if (ny == "other") gridoptions += ', ny=' + getValue ("ny_cells"); else gridoptions += ', ny=' + ny; gridoptions += getValue ("col.code.printout"); if (getValue("custlwd")) gridoptions += ', lwd=' + round(getValue ("lwd"),1); var lty = getValue("linetype"); if (lty != "") gridoptions += ", lty=\"" + lty + "\""; if (!getValue("equilogs")) gridoptions += ', equilogs=FALSE'; echo ('grid(' + gridoptions + ');\n'); } rkward-0.6.1/rkward/plugins/x11device/grid.xml0000644000175000017500000000421212124345412020570 0ustar thomasthomas Note: Not applicable for Trellis type devices! rkward-0.6.1/rkward/plugins/x11device/grid.rkh0000644000175000017500000000400412124345412020553 0ustar thomasthomas Various parameters for the grid. For detailed description of the individual parameters see the R reference on 'grid'. Note that this works only when standard (traditional S) graphics functions (see library(help="graphics")) are used to construct the plot. This does not work for trellis graphics devices (see for some information). This may or may not be used as an embeded plugin. When used on a trellis device the produced error message is displayed. This is the nx argument. The default is NULL, in which case, the vertical lines are drawn at the xaxis ticks. Select None to not draw the vertical lines. Select 'Specify below' to provide a specified (to be specified below) number of vertical lines in the grid. This is the nx argument, when 'Specify below' is selected in the above option list. This is the ny argument. Similar to nx. See the explanation on number of x cells above. This is the ny argument when a specified (by the user) number of y cells are to be used. Similar to x cells. Check this option to use a custom line width. In which case, provide the width below. This is the lwd argument. Check the above option to use this. This is the lty argument. Choosing Default will not add any arguments to the grid function call, hence the default line type will be used. This is the col argument. The Default option is similar to that of Line type (see above). This is the equilogs argument. Uncheck this option to set equilogs=FALSE.
    rkward-0.6.1/rkward/plugins/x11device/export.rkh0000644000175000017500000001571712124345412021164 0ustar thomasthomas Export the current contents of a graphics device to a postscript/pdf/png/jpeg file either using the native functions or using ghostscript. Chose an exporting function and a filename to save to. Additional options for size and resolution etc. are also available (see below). Exporting is done using dev.print. For exporting using ghostscript, dev2bitmap is used, which needs Ghostscript. Most of the exporting parameters are directly sent to the exporting function (postscript, pdf, svg, png, or jpeg) by dev.print. Note that there are no 'color' options (like background or foreground color) in this plugin. This is because dev.print simply prints the current graphics (mostly on X11) to the spedified file in the chosen format. To set background (or foreground) colors, these will need to be provided when calling the plotting function, mostly using par(). Note that all the parameters to postscript are also valid parameters to dev2bitmap. This plugin is only available in the context of a graphics device. The filename to save to. By default the file will be saved in the directory from where RkWard was started, which is the user's home directory when started from K-menu. After checking for a proper file extension, this is the file parameter to dev.print. For exporting via ghostscript provide a suitable extension. Check this box to let RKWard detect the file extension automatically. If the filename specified in the 'File name' box already has a relevant extension, then nothing is done, that is, the specified filename is used. Otherwise a relevant extension is appended to the filename above to construct the full filename. This option is disabled for exporting via ghostscript. Choose whether to use postscript, pdf, svg, png or jpeg for exporting the file. This is the device parameter to dev.print. If 'via Ghostscript' is chosen then the output format of the ghostscript device will need to be provided (see below under 'Ghostscript specific options'). When exporting in postscript format, this allows you to select, whether an EPSF (.eps-file) header should be generated. This seems to generate more portable files, so is recommended in most cases. Papersize and orientation can not be set in this case. This sets the onefile parameter to postscript to FALSE. Check this box to let the export function determine the width automatically. This is similar to 'Automatic Width', but for height. This is the width parameter to the exporting function. This is specified in inches. For JPEG/PNG exports (which require width in pixels), the actual width is evaluated by multiplying the width value provided in inches with the resolution (in dpi, 'dots per inch'). So, width_pixels = width_inches * resolution_dpi. If resolution is set to 'Default Resolution', then a value of 96 is used as the default resolution for exporting to jpeg or png and a value of 72 is used for exporting via ghostscript. Otherwise the provided resolution value is used. None of these matter for exporting to Postscript/PDF where the width parameter is provided in inches. jpeg or png functions need at least one of width/height to be provided. We override this restriction by reading in the width (in inches) from par("din")[1] and then setting 'par("din")[1] * resolution' as the width (in pixels) parameter value. Again, none of these are required for exporting to Postscript/PDF. This is the height parameter to the exporting function. Similar to 'Width'. This is the pointsize parameter to dev.print. Available only for PNG/JPEG/Ghostscript, this is the res parameter to dev.print or dev2bitmap. This value is used in converting from width/height in pixels to inches as described above (under 'Width'). The default resolution (when 'Default Resolution' is checked) is 96 for PNG/JPEG exports and it is 72 for Ghostscript exports. Available only for JPEG, this is the quality parameter to jpeg. Sets the quality for JPEG exporting. The default quality is 75. Use this to set the papersize for export. Choose 'Default' to not specify any paper option. Other options are explained in R reference for postscript. This is available only for Postscript/PDF exports. This is the paper option to the exporting function. Uncheck this for NOT centering the image on the page. This is the pagecentre parameter. Available only for Postscript/Ghostscript exporting, this is the horizontal parameter. This is the family parameter to postscript. Be sure to chooe a family that is available on the machine. The 'URW' class of font families require ghostscript. When in doubt leave this as 'Default', the default family (Helvectica) will be used. See the R reference on postscript for more details. This is the encoding parameter to postscript. Be sure to chooe an encoding compatible with the chosen font family. When in doubt leave this as 'Default', the default encoding (ISOLatin1) will be used. See the R reference on postscript for more details. Uncheck this box, to specify a custom title to the graphics file. Note that this is not displayed on the plot, but rather it is embeded inside the grpahics file. This is the title parameter to postscript. File format to use. Only the most common ones are listed, but many more are supported by ghostscript. Select "Other" and see the option below to use these formats. Select "Other" in the option above to use this setting. Specify the device identifier as used by ghostscript. Running "ghostscript --help" (or "gs --help") in a terminal should give a list of available devices.
    rkward-0.6.1/rkward/plugins/x11device/export.js0000644000175000017500000000712412124345412021005 0ustar thomasthomasfunction preprocess () { if (getValue ("format") == "svg") { echo ('if (!capabilities ("cairo")) {\n'); echo (' # The "cairo" library, providing SVG-support, is not compiled in by default on some systems.\n'); echo (' require (cairoDevice)\n'); echo (' svg <- Cairo_svg\n'); echo ('}\n'); } } function calculate () { var type = getValue ("format"); var file = getValue ("file"); var gstype = ""; var jpegpng = ""; var eps = ""; var ext = ""; if (type == "gs") { gstype = getValue ("gsformat"); if (gstype == "other") gstype = getValue ("gs_specifiedformat"); } else { jpegpng = ((type == "jpeg") | (type == "png")); eps = (type == "postscript") && (getValue ("formateps")); // Does the filename end with .ps/.eps or .pdf or .png or .jpeg/.jpg? // If not, add the appropriate extension. if (getValue ("autoextension")) { if (type == "jpeg") { if (file.search (/\.jpg$/i) < 0) file += ".jpg"; } else if (type == "postscript") { if (eps) { if (file.search (/\.e?ps$/i) < 0) file += ".eps"; } else { if (file.search (/\.e?ps$/i) < 0) file += ".ps"; } } else { var regexp = new RegExp ("\." + type + "$", "i"); if (file.search (regexp) < 0) file += "." + type; } } } var options = ""; if ((type == "postscript") && eps) options += ", onefile=FALSE"; var autores = ""; var resolution = ""; // set $resolution appropriately: if (jpegpng || (type == "gs")) { autores = getValue ("autores"); if (autores) { if (jpegpng) resolution = 96; else resolution = 72; } else resolution = getValue ("resolution"); } var autoW = getValue ("autowidth"); var autoH = getValue ("autoheight"); // jpeg()/png() need at least one of width/height. For jpeg()/png() the width/height parameter (in pixels) // is calculated using width/height (in inches) times the resolution. For postscript()/pdf() $resolution is set to 1. if (jpegpng && autoW && autoH) { options += ", width=par(\"din\")[1]*" + resolution; } else if (jpegpng) { if (!autoW) options += ", width=" + Math.round(getValue ("width")*resolution); if (!autoH) options += ", height=" + Math.round(getValue ("height")*resolution); } else { if (!autoW) options += ", width=" + getValue ("width"); if (!autoH) options += ", height=" + getValue ("height"); } // pointsize, resolution and quality parameters: if (!getValue ("autopointsize")) options += ", pointsize=" + getValue ("pointsize"); if ((jpegpng && !autores) || (type == "gs")) options += ", res=" + resolution; if ((type == "jpeg") && (!getValue ("autoquality"))) options += ", quality=" + getValue ("quality"); // For ps/pdf: page, pagecentre, horizontal, family, encoding and title parameters: if (!jpegpng) { var paper = ""; if (!(eps)) paper = getValue ("paper"); else paper = "special"; if (paper != "") options += ", paper=" + "\"" + paper + "\""; var pagecentre = getValue ("pagecentre"); if (!pagecentre) options += ", pagecentre=FALSE"; var pshoriz = ""; if (!eps) pshoriz = getValue ("ps_horiz"); else pshoriz = false; if (!pshoriz) options += ", horizontal=FALSE"; var family = getValue ("family"); if (family != "") options += ", family=" + "\"" + family + "\""; var enc = getValue ("encoding"); if (enc != "") options += ", encoding=" + "\"" + enc + "\""; if (!getValue("autotitle")) options += ", title=" + "\"" + getValue("title") + "\""; } echo ('dev.set (' + getValue ("devnum") + ')\n'); if (type == "gs") { echo ('dev2bitmap ("' + file + '", type="' + gstype + '"' + options + ');\n'); } else { echo ('dev.print (device=' + type + ', file="' + file + '"' + options + ');\n'); } } rkward-0.6.1/rkward/plugins/analysis/0000755000175000017500000000000012124345412017154 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/crosstab_multi.rkh0000644000175000017500000000160712124345412022720 0ustar thomasthomas Multiple crosstabulation where all the variables are crosstabulated with all the others. Choose one or more objects to be crosstabulated. For the case of two variables, or when the occurrences of values should be counted only for one "dependent" variable, may be more appropriate, and offers more options. Select a data frame or more than one variables from a data frame or with the same length Should NA (and NaN) values be excluded (default)? If this option is not checked, missing values are listed in the table just like regular values.
    rkward-0.6.1/rkward/plugins/analysis/variances/0000755000175000017500000000000012124345412021127 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/variances/levene_test.js0000644000175000017500000000067712124345412024014 0ustar thomasthomasfunction preprocess () { echo ('require(car)\n'); } function calculate () { echo ('result <- leveneTest (' + getValue ("y") + ', ' + getValue ("group") + ')\n'); } function printout () { echo ('names <- rk.get.description (' + getValue ("y") + ', ' + getValue ("group") + ')\n'); echo ('\n'); echo ('rk.header ("Levene\'s Test", list ("response variable", names[1], "groups", names[2]))\n'); echo ('\n'); echo ('rk.print (result)\n'); } rkward-0.6.1/rkward/plugins/analysis/variances/fligner_test.js0000644000175000017500000000102712124345412024152 0ustar thomasthomas// globals var vars; function calculate () { vars = trim (getValue ("x")).replace (/\n/g, ", "); echo ('result <- fligner.test (list (' + vars + '))\n'); } function printout () { echo ('names <- rk.get.description (' + vars + ')\n'); echo ('\n'); echo ('rk.header (result$method)\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variables\'=names,\n'); echo (' \'Fligner-Killeen:med X^2 test statistic\'=result$statistic,\n'); echo (' \'df\'=result$parameter,\n'); echo (' \'p-value\'=result$p.value))\n'); } rkward-0.6.1/rkward/plugins/analysis/variances/bartlett_test.rkh0000644000175000017500000000114512124345412024516 0ustar thomasthomas This test performs the Bartlett Test of Homogeneity of Variances. Select several numeric vectors to perform Bartlett's test of the null that the variances in each of the samples are the same. The samples to be checked for equal variance. The vectors need to be numeric, but don't need to have the same length.
    rkward-0.6.1/rkward/plugins/analysis/variances/F_test.xml0000644000175000017500000000165012124345412023077 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/variances/levene_test.xml0000644000175000017500000000062112124345412024165 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/variances/fligner_test.xml0000644000175000017500000000056112124345412024340 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/variances/bartlett_test.xml0000644000175000017500000000055412124345412024535 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/variances/bartlett_test.js0000644000175000017500000000100512124345412024341 0ustar thomasthomas// globals var vars; function calculate () { vars = trim (getValue ("x")).replace (/\n/g, ", "); echo ('result <- bartlett.test (list (' + vars + '))\n'); } function printout () { echo ('names <- rk.get.description (' + vars + ')\n'); echo ('\n'); echo ('rk.header (result$method)\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variables\'=names,\n'); echo (' \'Bartlett s K-squared\'=result$statistic,\n'); echo (' \'df\'=result$parameter,\n'); echo (' \'p-value\'=result$p.value))\n'); } rkward-0.6.1/rkward/plugins/analysis/variances/F_test.rkh0000644000175000017500000000164512124345412023067 0ustar thomasthomas This test performs the F Test to compare two variances. Select two samples from normal populations to compare the variances by the F test. For this test the samples need to be numeric vectors (see below for details). First sample (numeric vector). Second sample (numeric vector). Alternative hypothesis of the test. Defines the hypothesized ratio of the population variances. Defines the confidence level of the interval (95% is typical).
    rkward-0.6.1/rkward/plugins/analysis/variances/F_test.js0000644000175000017500000000205512124345412022713 0ustar thomasthomasfunction calculate () { echo ('result <- var.test (' + getValue ("x") + ', ' + getValue ("y") + ', alternative = "' + getValue ("alternative") + '", ratio = ' + getValue ("ratio")); var conflevel = getValue ("conflevel"); if (conflevel != "0.95") echo (", conf.level=" + conflevel); echo (')\n'); echo ('\n'); } function printout () { echo ('names <- rk.get.description (' + getValue ("x") + ', ' + getValue ("y") + ')\n'); echo ('\n'); echo ('rk.header (result$method,\n'); echo (' parameters=list ("Confidence Level", "' + getValue ("conflevel") + '", "Alternative Hypothesis", rk.describe.alternative(result)))\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variables\'=names,\n'); echo (' \'F\'=result$statistic["F"],\n'); echo (' \'Numerator DF\'=result$parameter["num df"],\n'); echo (' \'Denominator DF\'=result$parameter["denom df"],\n'); echo (' \'p-value\'=result$p.value,\n'); echo (' \'Lower CI\'=result$conf.int[1],\n'); echo (' \'Upper CI\'=result$conf.int[2],\n'); echo (' \'ratio of variances\'=result$estimate))\n'); } rkward-0.6.1/rkward/plugins/analysis/variances/levene_test.rkh0000644000175000017500000000137212124345412024155 0ustar thomasthomas This test performs the Levene's test for homeogeneity of variance across groups. Select the response variable and the factor defining groups to test for homeogeneity of variance across groups. response variable (numeric vector). factor defining groups (factor).
    • Levene, H. (1960). In Contributions to Probability and Statistics: Essays in Honor of Harold Hotelling, I. Olkin et al. eds., Stanford University Press, pp. 278-292.
    rkward-0.6.1/rkward/plugins/analysis/variances/fligner_test.rkh0000644000175000017500000000126212124345412024323 0ustar thomasthomas This test performs the Fligner-Killeen Test of Homogeneity of Variances. Select several numeric vectors to perform the Fligner-Killeen (median) test of the null that the variances in each of the samples are the same. The samples to be checked for equal variance. The vectors need to be numeric, but don't need to have the same length.
    rkward-0.6.1/rkward/plugins/analysis/ansari_bradley/0000755000175000017500000000000012124345412022133 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/ansari_bradley/ansari_bradley_exact_test.js0000644000175000017500000000326212124345412027676 0ustar thomasthomasfunction preprocess () { echo ('require(exactRankTests)\n'); echo ('\n'); echo ('names <- rk.get.description (' + getValue ("x") + ', ' + getValue ("y") + ')\n'); } function calculate () { var exact_opt = ""; var exact_setting = getValue ("exact"); if (exact_setting == "yes") { exact_opt = ", exact=TRUE"; } else if (exact_setting == "no") { exact_opt = ", exact=FALSE"; } var conflevel_opt = ""; if (getValue ("confint") == "TRUE") { var conflevel = getValue("conflevel"); if (conflevel != "0.95") conflevel_opt = ", conf.level=" + conflevel; } echo ('result <- ansari.exact (' + getValue ("x") + ', ' + getValue ("y") + ', alternative = "' + getValue ("alternative") + '"' + exact_opt + ', conf.int = ' + getValue ("confint") + conflevel_opt + ')\n'); echo ('\n'); } function printout () { echo ('rk.header (result$method,\n'); echo (' parameters=list ("Comparing", paste (names[1], "against", names[2]),\n'); echo (' \'H1\', rk.describe.alternative (result),\n'); echo (' "Compute exact p-value", "' + getValue ("exact") + '"'); if (getValue ("confint")== "TRUE") { echo (',\n'); echo (' "Confidence Level", "' + getValue ("conflevel") + '" '); } echo ('))\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variable Names\'=names,\n'); echo (' \'statistic\'=result$statistic,\n'); echo (' \'null.value\'=result$null.value,\n'); echo (' p=result$p.value'); if (getValue ("confint")== "TRUE") { echo (',\n'); echo (' \'confidence interval percent\'=(100 * attr(result$conf.int, "conf.level")),\n'); echo (' \'confidence interval of difference\'=result$conf.int,\n'); echo (' \'estimate of the ratio of scales\'=result$estimate'); } echo ('))\n'); } rkward-0.6.1/rkward/plugins/analysis/ansari_bradley/ansari_bradley_test.xml0000644000175000017500000000255112124345412026676 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/ansari_bradley/ansari_bradley_exact_test.rkh0000644000175000017500000000247712124345412030055 0ustar thomasthomas This test performs the Ansari-Bradley two-sample exact test to test for a difference in scale parameters. This test differs from in that exact p-values can also be computed in the presence of ties. Select two data sets for the Ansari-Bradley two-sample test. For this test the samples need to be numeric vectors (see below for details). Select the data to be computed. The vectors need to be numeric. Select the data to be computed. The vectors need to be numeric. Here you can specify the alternative hypothesis. It must be one of "two sided", "greater" or "less". Defines whether an exact p-value should be computed. Check this if you want the confidence interval to be computed. Here you can define the confidence level of the interval (95% is typical).
    rkward-0.6.1/rkward/plugins/analysis/ansari_bradley/ansari_bradley_exact_test.xml0000644000175000017500000000252712124345412030065 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/ansari_bradley/ansari_bradley_test.js0000644000175000017500000000324312124345412026511 0ustar thomasthomasfunction preprocess () { echo ('names <- rk.get.description (' + getValue ("x") + ', ' + getValue ("y") + ')\n'); } function calculate () { var exact_opt = ""; var exact_setting = getValue ("exact"); if (exact_setting == "yes") { exact_opt = ", exact=TRUE"; } else if (exact_setting == "no") { exact_opt = ", exact=FALSE"; } var conflevel_opt = ""; if (getValue ("confint") == "TRUE") { var conflevel = getValue("conflevel"); if (conflevel != "0.95") conflevel_opt = ", conf.level=" + conflevel; } echo ('result <- ansari.test (' + getValue ("x") + ', ' + getValue ("y") + ', alternative = "' + getValue ("alternative") + '"' + exact_opt + ', conf.int = ' + getValue ("confint") + conflevel_opt + ')\n'); echo ('\n'); } function printout () { echo ('rk.header (result$method,\n'); echo (' parameters=list (\n'); echo (' "Comparing", paste (names[1], "against", names[2]),\n'); echo (' "Alternative Hypothesis", rk.describe.alternative(result),\n'); echo (' "Compute exact p-value", "' + getValue ("exact") + '"'); if (getValue ("confint")== "TRUE") { echo (',\n'); echo (' "Confidence Level", "' + getValue ("conflevel") + '" '); } echo ('))\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variable Names\'=names,\n'); echo (' \'statistic\'=result$statistic,\n'); echo (' \'null.value\'=result$null.value,\n'); echo (' p=result$p.value'); if (getValue ("confint")== "TRUE") { echo (',\n'); echo (' \'confidence interval percent\'=(100 * attr(result$conf.int, "conf.level")),\n'); echo (' \'confidence interval of difference\'=result$conf.int,\n'); echo (' \'estimate of the ratio of scales\'=result$estimate'); } echo ('))\n'); } rkward-0.6.1/rkward/plugins/analysis/ansari_bradley/ansari_bradley_test.rkh0000644000175000017500000000253112124345412026660 0ustar thomasthomas This test performs the Ansari-Bradley two-sample test to test for a difference in scale parameters. Select two data sets for the Ansari-Bradley two-sample test. For this test the samples need to be numeric vectors (see below for details). Select the data to be computed. The vectors need to be numeric. Select the data to be computed. The vectors need to be numeric. Here you can specify the alternative hypothesis. It must be one of "two sided", "greater" or "less". Defines whether an exact p-value should be computed. To compute an exact p-value in the presence of ties, use . Check this if you want the confidence interval to be computed. Here you can define the confidence level of the interval (95% is typical).
    rkward-0.6.1/rkward/plugins/analysis/crosstab.js0000644000175000017500000001100412124345412021326 0ustar thomasthomasvar prop_row, prop_column, prop_total, chisq, chisq_expetec, any_table_additions; function preprocess () { prop_row = getValue ("prop_row") == "TRUE"; prop_column = getValue ("prop_column") == "TRUE"; prop_total = getValue ("prop_total") == "TRUE"; chisq = getValue ("chisq") == "TRUE"; chisq_expected = (getValue ("chisq_expected") == "TRUE") && chisq; any_table_additions = (prop_row || prop_column || prop_total || chisq_expected); if (!any_table_additions) return; echo ('# convenience function to bind together several two dimensional tables into a single three dimensional table\n'); echo ('bind.tables <- function (...) {\n'); echo (' tables <- list (...)\n'); echo (' output <- unlist (tables)\n'); echo (' dim (output) <- c (dim (tables[[1]]), length (tables))\n'); echo (' dimnames (output) <- c (dimnames (tables[[1]]), list (statistic=names(tables)))\n'); echo (' output\n'); echo ('}\n'); } function calculate () { var x = getValue ("x") ; var y = getList ("y").join (', '); var margins = (getValue ("margins") == "TRUE"); echo ('x <- rk.list (' + x + ')\n'); echo ('yvars <- rk.list (' + y + ')\n'); echo ('results <- list()\n'); if (chisq) echo ('chisquares <- list ()\n'); echo ('\n'); echo ('# calculate crosstabs\n'); echo ('for (i in 1:length (yvars)) {\n'); echo (' count <- table(x[[1]], yvars[[i]])\n'); if (chisq) { echo (' chisquares[[i]] <- chisq.test (count, simulate.p.value = ' + getValue ("simpv")); if (getValue ("simpv") == "TRUE") { echo (',B=('); echo (getValue ("B")); echo (') '); } echo (')\n'); } if (!any_table_additions) { if (margins) echo (' results[[i]] <- addmargins (count)\n'); else echo (' results[[i]] <- count\n'); } else { // unfortunately, mixing margins and proportions is a pain, in that they don't make a whole lot of sense for "% of row", and "% of column" if (margins) { echo (' results[[i]] <- bind.tables ("count"=addmargins (count)'); if (prop_row) echo (',\n "% of row"=addmargins (prop.table(count, 1) * 100, quiet=TRUE, FUN=function(x) NA)'); if (prop_column) echo (',\n "% of column"=addmargins (prop.table(count, 2) * 100, quiet=TRUE, FUN=function(x) NA)'); if (prop_total) echo (',\n "% of total"=addmargins (prop.table(count) * 100)'); if (chisq_expected) echo (',\n "expected"=addmargins (chisquares[[i]]$expected, quiet=TRUE, FUN=function(x) NA)'); echo (')\n'); } else { echo (' results[[i]] <- bind.tables ("count"=count'); if (prop_row) echo (',\n "% of row"=prop.table(count, 1) * 100'); if (prop_column) echo (',\n "% of column"=prop.table(count, 2) * 100'); if (prop_total) echo (',\n "% of total"=prop.table(count) * 100'); if (chisq_expected) echo (',\n "expected"=chisquares[[i]]$expected'); echo (')\n'); } } echo ('}\n'); } function printout () { doPrintout (true); } function preview () { calculate (); doPrintout (false); } function doPrintout (full) { if (full) { echo ('rk.header ("Crosstabs (n to 1)", level=1)\n'); echo ('for (i in 1:length (results)) {\n'); echo (' rk.header ("Crosstabs (n to 1)", parameters=list ("Dependent", names (x)[1], "Independent", names (yvars)[i]), level=2)\n'); if (any_table_additions) { echo (' rk.print (ftable (results[[i]], col.vars=2))\n'); } else { echo (' rk.results (results[[i]], titles=c(names (x)[1], names (yvars)[i]))\n'); } if (getValue ("chisq") == "TRUE") { echo ('\n'); echo (' rk.header ("Pearson\'s Chi Square Test for Crosstabs", list ("Dependent", names (x)[1], "Independent", names (yvars)[i], "Method", chisquares[[i]][["method"]]), level=2)\n'); echo (' rk.results (list (\'Statistic\'=chisquares[[i]][[\'statistic\']], \'df\'=chisquares[[i]][[\'parameter\']], \'p\'=chisquares[[i]][[\'p.value\']]))\n'); } if (getValue ("barplot") == "TRUE") { echo ('\n'); echo (' rk.header ("Barplot for Crosstabs", list ("Dependent"=names (x)[1], "Independent"=names (yvars)[i]' + getValue ('barplot_embed.code.preprocess') + '), level=2)\n'); echo (' rk.graph.on ()\n'); echo (' try ({\n'); if (any_table_additions) { echo (' counts <- results[[i]][, , "count"]\n'); } else { echo (' counts <- results[[i]]\n'); } printIndented ("\t\t", getValue ('barplot_embed.code.printout')); echo (' })\n'); echo (' rk.graph.off ()\n'); } echo ('}\n'); } else { // produce a single barplot of the first result if (any_table_additions) { echo ('counts <- results[[1]][, , "count"]\n'); } else { echo ('counts <- results[[1]]\n'); } echo (getValue ('barplot_embed.code.printout')); } } rkward-0.6.1/rkward/plugins/analysis/TESTS/0000755000175000017500000000000012124345412020056 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/TESTS/mood_test.rkh0000644000175000017500000000122612124345412022562 0ustar thomasthomas This test performs the Mood Two-Sample Test of Scale. Select two data sets to test for a difference in scale parameters by the Mood Two-Sample Test. For this test the samples need to be numeric vectors (see below for details). First sample. The vectors need to be numeric. Second sample. The vectors need to be numeric. Alternative hypothesis to use for the test.
    rkward-0.6.1/rkward/plugins/analysis/TESTS/PP_test.js0000755000175000017500000000213612124345412021777 0ustar thomasthomasfunction calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); } if (getValue ("narm")) { echo (' var <- var[!is.na (var)] # remove NAs\n'); } echo (' try ({\n'); echo (' test <- PP.test (var, lshort = ' + getValue ("lshort") + ')\n'); echo (' results[i, \'Dickey-Fuller\'] <- test$statistic\n'); echo (' results[i, \'Truncation lag parameter\'] <- test$parameter\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("Phillips-Perron Test for Unit Roots",\n'); echo (' parameters=list ("Truncation lag parameter short (\'TRUE\') or long (\'FALSE\')", "' + getValue ("lshort") + '"))\n'); echo ('\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/TESTS/mood_test.xml0000644000175000017500000000114412124345412022575 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/TESTS/PP_test.xml0000755000175000017500000000156212124345412022165 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/TESTS/PP_test.rkh0000644000175000017500000000173212124345412022145 0ustar thomasthomas This test computes the Phillips-Perron test for the null hypothesis that x has a unit root against a stationary alternative. Select the data sets for which you want to perform the Phillips-Perron test. For this test the samples need to be numeric vectors (see below for details). Select the data to be computed. The vectors need to be numeric, and can be of different length. Which version of the truncation lag parameter should be used? Exclude missing values from calculation? Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/TESTS/mood_test.js0000644000175000017500000000110612124345412022407 0ustar thomasthomasfunction calculate () { echo ('result <- mood.test (' + getValue ("x") + ', ' + getValue ("y") + ', alternative = "' + getValue ("alternative") + '")\n'); } function printout () { echo ('names <- rk.get.description (' + getValue ("x") + ', ' + getValue ("y") + ')\n'); echo ('\n'); echo ('rk.header (result$method,\n'); echo (' parameters=list ("Alternative Hypothesis", rk.describe.alternative (result)))\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variables\'=names,\n'); echo (' \'Z\'=result$statistic,\n'); echo (' \'p-value\'=result$p.value))\n'); } rkward-0.6.1/rkward/plugins/analysis/time_series/0000755000175000017500000000000012124345412021464 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/time_series/hp_filter.rkh0000644000175000017500000000444312124345412024153 0ustar thomasthomas This plugin extracts and plots the long term trend of a series and (optionally) its cyclical component. The Hodrick-Prescott filter is used to separate the long term trend of a time series from its cyclical (short term) component. In addition to the resulting series object(s), this plugin can plot them in relation with the original series provided so as to give a graphic view of the filtering operation. Select the data to be computed. It must be a single Time Series object or a Numeric Vector. NA values are not admitted. This is the smoothing parameter. You have a dropdown menu with the three most common values depending on the frequency of the data (Annual, Quarterly and Monthly). (Default: 1600) Select if you want to specify a lambda value yourself in the spinbox below. Select which resulting series should be created in the workspace. The trend of the original series is created by default. Write any name you want to use as identifier for the series. By default, it's hp followed by trend and/or cycle. Tip: you can add the name of the original series to avoid overwriting other variables' trend/cycle (i.e. "myseries.hptrend"). Plot the cyclical component below the trend graph. (Default: YES) Here you can adjust the line width, type and colour of each series on the plot. (Default: blue series, red trend and dark green cycle) Here you can specify the text on the Y axis label of the trend plot (upper). If empty, the default label is the name of the original series plus , Trend. Here you can specify the text on the Y axis label of the cycle plot (lower - if applicable). If empty, the default label is Cycle. Enable or disable the labels being evaluated as literal (quoted) strings. To achieve a line-break (in a quoted string), enter '\n'. (Default: YES) rkward-0.6.1/rkward/plugins/analysis/time_series/kpss_test.js0000755000175000017500000000241512124345412024046 0ustar thomasthomasfunction preprocess () { echo ('require (tseries)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); } if (getValue ("narm")) { echo (' var <- var[!is.na (var)] # remove NAs\n'); } echo (' try ({\n'); echo (' test <- kpss.test (var, null = "' + getValue ("null") + '", lshort = ' + getValue ("lshort") + ')\n'); echo (' results[i, \'KPSS ' + getValue ("null") + '\'] <- test$statistic\n'); echo (' results[i, \'Truncation lag parameter\'] <- test$parameter\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("KPSS Test for Level Stationarity",\n'); echo (' parameters=list ("null hypothesis"="' + getValue ("null") + '", "version of truncation lag parameter"="'); if (getValue ("lshort") == "TRUE") echo ("short"); else echo ("long"); echo ('"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/time_series/Box_test.rkh0000644000175000017500000000217512124345412023766 0ustar thomasthomas This test computes Box-Pierce or Ljung-Box test statistic for examining the null hypothesis of independence in a given time series. Select the data sets for which you want to perform the Box-Pierce or Ljung-Box test. For this test the samples need to be numeric vectors (see below for details). Select the data to be computed. The vectors need to be numeric, and can be of different length. Number of autocorrelation coefficients to base the test on. Define type of test. Either Ljung-Box or Box-Pierce can be used. Exclude missing values from calculation? Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/time_series/hp_filter.js0000644000175000017500000000603012124345412023775 0ustar thomasthomasfunction printout () { var lambda = ""; if (getValue("custom") == 0) { lambda = getValue ("lambda"); } else { lambda = getValue ("clambda"); } echo ('rk.header ("Hodrick-Prescott Filter", parameters=list("Lambda", ' + lambda + '))\n'); echo ('x <- ' + getValue("x") + '\n'); echo ('lambda <- ' + lambda + "\n"); echo ('\n'); echo ('if (any (is.na (x))) stop ("Missing values cannot be handled")\n'); echo ('\n'); echo ('i <- diag(length(x))\n'); echo ('trend <- solve(i + lambda * crossprod(diff(i, lag=1, d=2)), x) # The HP Filter itself. Thanks to Grant V. Farnsworth\n'); echo ('cycle <- x - trend\n'); echo ('if (is.ts(x)) {\n'); echo (' trend <- ts(trend,start(x),frequency=frequency(x))\n'); echo (' cycle <- ts(cycle,start(x),frequency=frequency(x))\n'); echo ('}\n'); if (getValue("trend_name.active")) { echo ('.GlobalEnv$' + getValue("trend_name") + ' <- trend\n'); } if (getValue("cycle_name.active")) { echo ('.GlobalEnv$' + getValue("cycle_name") + ' <- cycle\n'); } var upcol = ""; if (getValue("series_col.color") != "" & getValue("trend_col.color") != "") { upcol = ", col=c(\"" + getValue("series_col.color") + "\", \"" + getValue("trend_col.color") + "\")"; } else if (getValue("series_col.color") != "") { upcol = ", col=c(\"" + getValue("series_col.color") + "\", \"black\")"; } else if (getValue("trend_col.color") != "") { upcol = ", col=c(\"black\", \"" + getValue("trend_col.color") + "\")"; } else { upcol = ""; } var uplty = ""; if (getValue("series_lty") != "" & getValue("trend_lty") != "") { uplty = ", lty=c(" + quote (getValue("series_lty")) + ", " + quote (getValue("trend_lty")) + ")"; } else if (getValue("series_lty") != "") { uplty = ", lty=c(" + quote (getValue("series_lty")) + ", \"solid\")"; } else if (getValue("trend_lty") != "") { uplty = ", lty=c(\"solid\", " + quote (getValue("trend_lty")) + ")"; } else { uplty = ""; } var uplab = ""; if (getValue("uplab.text") == "") { uplab = quote (getValue("x") + ", Trend"); } else if (getValue("uplabisquote") == 1) { uplab = quote (getValue("uplab")); } else { uplab = getValue("uplab"); } echo ('rk.graph.on ()\n'); echo ('try({\n'); echo (' par(mfrow=c('); if (getValue("plot_cycle") == 1) echo ("2"); else echo ("1"); echo (',1),mar=c(2,4,2,2)+0.1)\n'); echo (' plot.ts(cbind(x, trend), ylab=' + uplab + upcol + ',lwd=c(' + getValue("series_lwd") + ',' + getValue("trend_lwd") + ')' + uplty + ', plot.type="single")\n'); var downlab = ""; if (getValue("plot_cycle") == 1) { if (getValue("downlab.text") == "") { downlab = "\"Cycle\""; } else if (getValue("downlabisquote") == 1) { downlab = quote (getValue("downlab")); } else { downlab = getValue("downlab"); } echo (' plot.ts(cycle, ylab=' + downlab); if (getValue("cycle_col.color") != "") echo (", col=\"" + getValue("cycle_col.color") + "\""); echo (', lwd=' + getValue("cycle_lwd")); if (getValue("cycle_lty") != "") echo (", lty=\"" + getValue("cycle_lty") + "\""); echo (')\n'); } echo ('})\n'); echo ('rk.graph.off ()\n'); } rkward-0.6.1/rkward/plugins/analysis/time_series/Box_test.xml0000755000175000017500000000177312124345412024010 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/time_series/kpss_test.rkh0000644000175000017500000000226412124345412024215 0ustar thomasthomas This test computes the Kwiatkowski-Phillips-Schmidt-Shin (KPSS) test for the null hypothesis that x is level or trend stationary. Select the data sets for which you want to perform the Kwiatkowski-Phillips-Schmidt-Shin (KPSS) test. For this test the samples need to be numeric vectors (see below for details). Select the data to be computed. The vectors need to be numeric, and can be of different length. Indicates the null hypothesis and must be one of "Level" (default) or "Trend". Defines whether the short or long version of the truncation lag parameter is used. Exclude missing values from calculation? Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/time_series/kpss_test.xml0000755000175000017500000000200612124345412024226 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/time_series/Box_test.js0000755000175000017500000000212612124345412023615 0ustar thomasthomasfunction calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); } if (getValue ("narm")) { echo (' var <- var[!is.na (var)] # remove NAs\n'); } echo (' try ({\n'); echo (' test <- Box.test (var, lag = ' + getValue ("lag") + ', type = "' + getValue ("type") + '")\n'); echo (' results[i, \'X-squared\'] <- test$statistic\n'); echo (' results[i, \'degrees of freedom\'] <- test$parameter\n'); echo (' results[i, \'p-value\'] <- test$p.value\n'); echo (' })\n'); echo ('}\n'); } function printout () { echo ('rk.header ("' + getValue ("type") + ' Test",\n'); echo (' parameters=list ("lag", "' + getValue ("lag") + '", "type", "' + getValue ("type") + '"))\n'); echo ('\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/time_series/hp_filter.xml0000644000175000017500000001163012124345412024163 0ustar thomasthomas Interpret these labels as literal (quoted) strings? rkward-0.6.1/rkward/plugins/analysis/t_test.rkh0000644000175000017500000000261112124345412021164 0ustar thomasthomas t-Test (two variable paired or independent samples, or one variable). Chose two numeric vectors or one vector an a constant to compare against each other. For two samples, specify whether the variables are paired or independent samples. For details, see below. Chose whether you want a two samples test (paired samples or independent samples), or to test a single variable against a constant A numeric vector for the first variable A numeric vector for the second variable. Available for two samples tests only. A numeric constant. Available for tests agains constant only. Whether to assume equal variances for the two samples (for independent samples t-test, only). This option is implied for a paired test. Alternative hypothesis (H1) of the test. Whether to print the confidence interval of the estimated mean. Confidence level to print.
    rkward-0.6.1/rkward/plugins/analysis/corr_matrix.xml0000644000175000017500000000303712124345412022232 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/outliers/0000755000175000017500000000000012124345412021022 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/outliers/grubbs_test.js0000755000175000017500000000366612124345412023721 0ustar thomasthomasfunction preprocess () { echo ('require(outliers)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); if (getValue ("length")) { echo (' var <- vars[[i]]\n'); echo ('\n'); echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); echo (' var <- na.omit (var) # omit NAs for all further calculations\n'); } else { echo (' var <- na.omit (vars[[i]])\n'); } echo ('\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' # This is the core of the calculation\n'); echo (' t <- grubbs.test (var, type = ' + getValue ("type") + ', opposite = ' + getValue ("opposite") + ', two.sided = ' + getValue ("two_sided") + ')\n'); echo (' results[i, \'G\'] <- t$statistic["G"]\n'); echo (' results[i, \'U\'] <- t$statistic["U"]\n'); echo (' results[i, \'p-value\'] <- t$p.value\n'); echo (' results[i, \'Alternative Hypothesis\']<- rk.describe.alternative (t)\n'); if (getValue ("descriptives")) { echo (' results[i, \'Mean\'] <- mean (var)\n'); echo (' results[i, \'Standard Deviation\'] <- sd (var)\n'); echo (' results[i, \'Median\'] <- median (var)\n'); echo (' results[i, \'Minimum\'] <- min (var)\n'); echo (' results[i, \'Maximum\'] <- max (var)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("Grubbs tests for one or two outliers in data sample",\n'); echo (' parameters=list ("Type", "' + getValue ("type") + '", "Opposite", "' + getValue ("opposite") + '", "two-sided", "' + getValue ("two_sided") + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/outliers/dixon_test.xml0000755000175000017500000000277112124345412023736 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/outliers/chisq_out_test.xml0000755000175000017500000000165712124345412024615 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/outliers/outlier.js0000755000175000017500000000305512124345412023051 0ustar thomasthomasfunction preprocess () { echo ('require(outliers)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); if (getValue ("length")) { echo (' var <- vars[[i]]\n'); echo ('\n'); echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); echo (' var <- na.omit (var) # omit NAs for all further calculations\n'); } else { echo (' var <- na.omit (vars[[i]])\n'); } echo ('\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' # This is the core of the calculation\n'); echo (' t <- outlier (var, opposite = ' + getValue ("opposite") + ')\n'); echo (' results[i, \'Outlier\'] <- t\n'); if (getValue ("descriptives")) { echo (' results[i, \'Mean\'] <- mean (var)\n'); echo (' results[i, \'Standard Deviation\'] <- sd (var)\n'); echo (' results[i, \'Median\'] <- median (var)\n'); echo (' results[i, \'Minimum\'] <- min (var)\n'); echo (' results[i, \'Maximum\'] <- max (var)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("Find potential outlier",\n'); echo (' parameters=list ("Opposite", "' + getValue ("opposite") + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/outliers/outlier.rkh0000644000175000017500000000254712124345412023223 0ustar thomasthomas Shows the value with largest difference from sample mean (potential outlier). Chose the data to find the value with the largest difference from the sample mean. You can select multiple vectors. See . Select the data to be computed. The vectors need to be numeric. Any missing values are ignored in the calculation. Select this option to give the opposite value. If the largest value has maximum difference from the mean, it gives smallest and vice versa. Print additional descriptive statistics (mean, sd, median, min, max) to help with interpretation of the test result (purely informational, does not affect the test). Missing values will be ignored. Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/outliers/grubbs_test.rkh0000644000175000017500000000272112124345412024055 0ustar thomasthomas This test performs the Grubbs tests for one or two outliers in data sample. Chose the data to perform the Grubbs tests for one or two outliers in data sample. You can chose multiple data. See . Select the data to be computed. The vectors need to be numeric, and may be of different length. Variant of test to be performed. One or two outliers can be detected, on the same, or on opposite tails. Should the test be treated as two-sided? Here you can define if you want to check not the value with largest difference from the mean, but opposite. Print additional descriptive statistics (mean, sd, median, min, max) to help with interpretation of the test result (purely informational, does not affect the test). Missing values will be ignored. Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/outliers/chisq_out_test.js0000755000175000017500000000340312124345412024420 0ustar thomasthomasfunction preprocess () { echo ('require(outliers)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); if (getValue ("length")) { echo (' var <- vars[[i]]\n'); echo ('\n'); echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); echo (' var <- na.omit (var) # omit NAs for all further calculations\n'); } else { echo (' var <- na.omit (vars[[i]])\n'); } echo ('\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' # This is the core of the calculation\n'); echo (' t <- chisq.out.test (var, opposite = ' + getValue ("opposite") + ')\n'); echo (' results[i, \'X-squared\'] <- t$statistic\n'); echo (' results[i, \'p-value\'] <- t$p.value\n'); echo (' results[i, \'Alternative Hypothesis\']<- rk.describe.alternative (t)\n'); echo (' results[i, \'Variance\'] <- var (var)\n'); if (getValue ("descriptives")) { echo (' results[i, \'Mean\'] <- mean (var)\n'); echo (' results[i, \'Standard Deviation\'] <- sd (var)\n'); echo (' results[i, \'Median\'] <- median (var)\n'); echo (' results[i, \'Minimum\'] <- min (var)\n'); echo (' results[i, \'Maximum\'] <- max (var)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("Chi-squared test for outlier",\n'); echo (' parameters=list ("Opposite", "' + getValue ("opposite") + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/outliers/chisq_out_test.rkh0000644000175000017500000000265712124345412024577 0ustar thomasthomas This test performs a chisquared test for detection of one outlier. Chose the data set to find one outlier, based on chisquared distribution of squared differences between data and sample mean. You can chose multiple data. Please consider that this test is no longer recommended. See . Select the data to be computed. The vectors need to be numeric, and can be of different length. For the calculation missing values are removed from the data. Check if you want not the value with largest difference from the mean, but opposite (lowest, if most suspicious is highest etc.). Print additional descriptive statistics (mean, sd, median, min, max) to help with interpretation of the test result (purely informational, does not affect the test). Missing values will be ignored. Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/outliers/outlier.xml0000755000175000017500000000165512124345412023241 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/outliers/dixon_test.rkh0000644000175000017500000000305412124345412023712 0ustar thomasthomas This test performs the Dixon test for outlier. Chose the data to perform the Dixon test for outlier. You can chose multiple vectors. See . Select the data to be computed. The vectors need to be numeric, and can be of different length but there is a limit. Specifies the variant of test to be performed. See for details. The default value (0) means that a suitable variant is selected automatically, according to the size of the sample. Should the test be treated as two-sided (default)? Here you can define if you want to check not the value with largest difference from the mean, but opposite. Print additional descriptive statistics (mean, sd, median, min, max) to help with interpretation of the test result (purely informational, does not affect the test). Missing values will be ignored. Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/outliers/grubbs_test.xml0000755000175000017500000000256412124345412024101 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/outliers/dixon_test.js0000755000175000017500000000356412124345412023553 0ustar thomasthomasfunction preprocess () { echo ('require(outliers)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); if (getValue ("length")) { echo (' var <- vars[[i]]\n'); echo ('\n'); echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); echo ('\n'); echo (' var <- na.omit (var) # omit NAs for all further calculations\n'); } else { echo (' var <- na.omit (vars[[i]])\n'); } echo ('\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' # This is the core of the calculation\n'); echo (' t <- dixon.test (var, type = ' + getValue ("type") + ', opposite = ' + getValue ("opposite") + ', two.sided = ' + getValue ("two_sided") + ')\n'); echo (' results[i, \'Dixon Q-statistic\'] <- t$statistic["Q"]\n'); echo (' results[i, \'p-value\'] <- t$p.value\n'); echo (' results[i, \'Alternative Hypothesis\']<- rk.describe.alternative (t)\n'); if (getValue ("descriptives")) { echo (' results[i, \'Mean\'] <- mean (var)\n'); echo (' results[i, \'Standard Deviation\'] <- sd (var)\n'); echo (' results[i, \'Median\'] <- median (var)\n'); echo (' results[i, \'Minimum\'] <- min (var)\n'); echo (' results[i, \'Maximum\'] <- max (var)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("Dixon test for outlier",\n'); echo (' parameters=list ("Type", "' + getValue ("type") + '", "Opposite", "' + getValue ("opposite") + '", "two-sided", "' + getValue ("two_sided") + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/crosstab_multi.js0000644000175000017500000000104112124345412022540 0ustar thomasthomasfunction preprocess () { var vars = trim (getValue ("x")).replace (/\n/g, ","); echo ('data <- data.frame (' + vars + ', check.names=FALSE)\n'); echo ('datadescription <- paste (rk.get.description (' + vars + '), collapse=", ");\n'); } function calculate () { echo ('result <- ftable (data'); if (!getValue ("exclude_nas.state")) echo (", exclude=NULL"); echo (');\n'); } function printout () { echo ('rk.header ("Crosstabs (n to n)", parameters=list ("Variables"=datadescription))\n'); echo ('\n'); echo ('rk.print (result)\n'); } rkward-0.6.1/rkward/plugins/analysis/crosstab_multi.xml0000644000175000017500000000063712124345412022736 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/crosstab.rkh0000644000175000017500000000535712124345412021514 0ustar thomasthomas Calculate two dimensional contingency tables for the count of occurrences of values in one "dependent" variable crossed with the values in one or more "independent" variables. Specify the "dependent" variable. This variable will be present in all created tables. Specify one or more "independent" variables. Each of these will be cross-tabulated against the "dependent" variable. "Dependent" and "Independent", here, does not imply any inferential statistics. In each table, the occurrence of combinations of values in the "dependent" and "independent" variable is counted. For complete crosstabulation of three or more variables against each other (into a single table), use . Select any vector that can be interpreted as a factor. This variable will be present in all tables. Select one or more vector that can be interpreted as a factor. Each of these will be cross-tabulated against the "dependent" variable. Should a chisquare test be performed (for each pair)? Should a barplot be produced (for each pair)? Allows to preview the barplot(s). Only the first of the barplots is shown in the preview, even if more than one table is produced. Calculate and show sums / margins Calculate and show the proportion (in %) of each cell's count of the corresponding row's total count. Calculate and show the proportion (in %) of each cell's count of the corresponding column's total count. Calculate and show the proportion (in %) of each cell's count of overall total count. Should Monte-Carlo simulation be used to compute the p-value(s)? Number of replicates used in the Monte-Carlo test (if applicable). Show the chisquare expected values per cell. Various options controlling the look of the generated barplot(s). See
    rkward-0.6.1/rkward/plugins/analysis/corr_matrix.js0000644000175000017500000001203612124345412022045 0ustar thomasthomas// globals var use; var method; var polyCorr; var do_p; var toNumeric; function preprocess() { method = "\"" + getValue ("method") + "\""; if (method == "\"polyserial\"" || method == "\"polychoric\""){ polyCorr = true; } else { polyCorr = false; } if (polyCorr) { echo ('require(polycor)\n'); } else {} } function calculate () { do_p = getValue ("do_p"); var exclude_whole = ""; var vars = trim (getValue ("x")); toNumeric = getValue ("to_numeric"); use = getValue ("use"); if (use == "pairwise") { exclude_whole = false; if (!polyCorr) { use = "\"pairwise.complete.obs\""; } else { use = "\"pairwise\""; } } else { exclude_whole = true; if (!polyCorr) { use = "\"complete.obs\""; } else { use = "\"complete cases\""; } } echo ('# cor requires all objects to be inside the same data.frame.\n'); echo ('# Here we construct such a temporary frame from the input variables\n'); echo ('data.list <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); if (!polyCorr && toNumeric) { echo ('# Non-numeric variables will be treated as ordered data and transformed into numeric ranks\n'); echo ('transformed.vars <- list()\n'); echo ('for (i in names(data.list)) {\n'); echo (' if(!is.numeric(data.list[[i]])){\n'); echo (' before.vars <- as.character(unique(data.list[[i]]))\n'); echo (' data.list[[i]] <- xtfrm(data.list[[i]])\n'); echo (' after.vars <- unique(data.list[[i]])\n'); echo (' names(after.vars) <- before.vars\n'); echo (' # Keep track of all transformations\n'); echo (' transformed.vars[[i]] <- data.frame(rank=sort(after.vars))\n'); echo (' } else {}\n'); echo ('}\n'); echo ('# Finally combine the actual data\n'); } else {} echo ('data <- as.data.frame (data.list, check.names=FALSE)\n'); echo ('\n'); echo ('# calculate correlation matrix\n'); if (polyCorr) { echo ('result <- matrix (nrow = length (data), ncol = length (data), dimnames=list (names (data), names (data)))\n'); } else { echo ('result <- cor (data, use=' + use + ', method=' + method + ')\n'); } if (do_p || polyCorr) { echo ('# calculate matrix of probabilities\n'); echo ('result.p <- matrix (nrow = length (data), ncol = length (data), dimnames=list (names (data), names (data)))\n'); if (exclude_whole) { echo ('# as we need to do pairwise comparisons for technical reasons,\n'); echo ('# we need to exclude incomplete cases first to match the use="complete.obs" parameter in cor()\n'); echo ('data <- data[complete.cases (data),]\n'); } else {} echo ('for (i in 1:length (data)) {\n'); echo (' for (j in i:length (data)) {\n'); echo (' if (i != j) {\n'); if (polyCorr) { if(method == "\"polyserial\""){ echo(' # polyserial expects x to be numeric\n'); echo(' if(is.numeric(data[[i]]) & !is.numeric(data[[j]])){\n'); echo(' t <- polyserial(data[[i]], data[[j]]'); if (do_p) { echo(', std.err=TRUE'); } else {} echo(')\n } else if(is.numeric(data[[j]]) & !is.numeric(data[[i]])){\n'); echo(' t <- polyserial(data[[j]], data[[i]]'); if (do_p) { echo(', std.err=TRUE'); } else {} echo(')\n } else {\n'); echo(' next\n'); echo(' }\n'); } else { echo(' t <- polychor(data[[i]], data[[j]]'); if (do_p) { echo(', std.err=TRUE)\n'); } else { echo(')\n'); } } if (do_p) { echo (' result[j, i] <- result[i, j] <- t$rho\n'); echo (' result.p[j, i] <- paste("Chisq=", t$chisq, ",
    df=", t$df, ",
    p=", pchisq(t$chisq, t$df, lower.tail=FALSE), sep="")\n'); echo (' result.p[i, j] <- paste("se=", sqrt(diag(t$var)), ",
    n=", t$n, sep="")\n'); } else { echo (' result[i, j] <- result[j, i] <- t\n'); } } else { echo (' t <- cor.test (data[[i]], data[[j]], method=' + method + ')\n'); echo (' result.p[i, j] <- t$p.value\n'); echo (' result.p[j, i] <- sum (complete.cases (data[[i]], data[[j]]))\n'); } echo (' }\n'); echo (' }\n'); echo ('}\n'); } } function printout () { echo ('rk.header ("Correlation Matrix", parameters=list ("Method", ' + method + ', "Exclusion", ' + use + '))\n\n'); echo ('rk.results (data.frame (result, check.names=FALSE), titles=c ("Coefficient", names (data)))\n'); if (do_p) { if (polyCorr) { echo ('rk.header ("Standard errors, test of bivariate normality and sample size", level=4)\n'); echo ('rk.results (data.frame (result.p, check.names=FALSE, stringsAsFactors=FALSE), titles=c ("Chisq, df, p \\\\ se, n", names (data)))\n'); } else { echo ('rk.header ("p-values and sample size", level=4)\n'); echo ('rk.results (data.frame (result.p, check.names=FALSE), titles=c ("n \\\\ p", names (data)))\n'); } } if (!polyCorr && toNumeric) { echo ('if(length(transformed.vars) > 0){\n'); echo (' rk.header("Variables treated as numeric ranks", level=4)\n'); echo (' for (i in names(transformed.vars)) {\n'); echo (' rk.print(paste("Variable:", i, ""))\n'); echo (' rk.results(transformed.vars[[i]], titles=c("original value", "assigned rank"))\n'); echo (' }\n'); echo ('} else {}\n'); } else {} } rkward-0.6.1/rkward/plugins/analysis/regression/0000755000175000017500000000000012124345412021334 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/regression/linear_regression.xml0000644000175000017500000000102512124345412025566 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/regression/linear_regression.rkh0000644000175000017500000000151712124345412025560 0ustar thomasthomas Perform a simple linear regression. Currently, this plugin provides only basic functionality. For more options refer to . Select the variable to be predicted (dependent), and one or more independent variables. The dependent variable. This must be numeric. One or more independent variables, each of the same length as the dependent. Note that factor variables are treated as categorial predictors, while numeric variables are treated as continuous predictors, automatically. Should an intercept term be included in the model?
    rkward-0.6.1/rkward/plugins/analysis/regression/linear_regression.js0000644000175000017500000000055512124345412025411 0ustar thomasthomasfunction calculate () { var vars = trim (getValue ("x")).replace (/\n/g, " + "); var intercept = ""; if (!getValue ("intercept.state.numeric")) intercept = "0 + "; echo ('results <- summary.lm (lm (' + getValue ("y") + ' ~ ' + intercept + vars + '))\n'); } function printout () { echo ('rk.header ("Linear Regression")\n'); echo ('rk.print(results)\n'); } rkward-0.6.1/rkward/plugins/analysis/irt/0000755000175000017500000000000012124345412017752 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/irt/polytomous/0000755000175000017500000000000012124345412022204 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.rkh0000644000175000017500000000453012124345412025364 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the eRm package. To fit the linear partial credit model with default settings, just the matrix of manifest variables (item responses) must be selected. Further options are described in the sections below. For detailed information on the expected layout of matrices and vectors please refer to the manual for the LPCM() function. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of item responses from the objects shown on the left. If repeated measurement applies, specify how many are represented in the data matrix (defaults to 1). This will divide the columns in the matrix into equally sized subsets of data. If you want to compute group contrasts, a vector determing the group membership of each subject must be given. By default no group contrasts are imposed. By default the design matrix for the LPCM will be computed automatically. Alternatively, you may specify your own design matrix here. By default eta values start with the 0-vector. To change this, a vector of starting values can be specified. If checked, standard errors are computed (which is the default). By default parameters are normalized to sum-0 by specifying an appropriate design matrix. Uncheck this box to restrict the first parameter to 0. Please refer to the eRm manuals for further information and detailed command line options:
    rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.xml0000644000175000017500000000601112124345412025374 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_grm.xml0000644000175000017500000000615112124345412025233 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_pcm.xml0000644000175000017500000000472012124345412025225 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.xml0000644000175000017500000000622412124345412025424 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_pcm.rkh0000644000175000017500000000362712124345412025216 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the eRm package. To fit the partial credit model with default settings, just the matrix of manifest variables (item responses) must be selected. Further options are described in the sections below. For detailed information on the expected layout of matrices and vectors please refer to the manual for the PCM() function. The complete results can be are stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of item responses from the objects shown on the left. By default the design matrix for the PCM will be computed automatically. Alternatively, you may specify your own design matrix here. By default eta values start with the 0-vector. To change this, a vector of starting values can be specified. If checked, standard errors are computed (which is the default). By default parameters are normalized to sum-0 by specifying an appropriate design matrix. Uncheck this box to restrict the first parameter to 0. Please refer to the eRm manuals for further information and detailed command line options:
    rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.js0000644000175000017500000000354712124345412025245 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var mpoints = getValue("mpoints"); var groups = getValue("groups"); var group_vec = getValue("group_vec"); var design = getValue("design"); var design_mtx = getValue("design_mtx"); var etastart = getValue("etastart"); var etastart_vec = getValue("etastart_vec"); var stderr = getValue("stderr"); var sumnull = getValue("sumnull"); echo ('estimates.lrsm <- LRSM(' + getValue("x")); // any additional options? if (design == "matrix") echo(", W="+design_mtx); if (mpoints > 1) echo(", mpoints="+mpoints); if (groups == "contrasts") echo(", groupvec="+group_vec); if (stderr != "se") echo(", se=FALSE"); if (sumnull != "sum0") echo(", sum0=FALSE"); if (etastart == "startval") echo(", etaStart="+etastart_vec); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("LRSM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.lrsm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print(t(rbind(Eta=estimates.lrsm$etapar,StdErr=estimates.lrsm$se.eta)))\n'); echo ('rk.print (paste("Conditional log-likelihood:",round(estimates.lrsm$loglik, digits=1),\n'); echo ('"
    Number of iterations:",estimates.lrsm$iter,"
    Number of parameters:",estimates.lrsm$npar))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.lrsm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.rkh0000644000175000017500000000721112124345412025356 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the ltm package. To fit the generalized partial credit model with default settings, just the matrix of manifest variables (polytomous item responses) must be selected. Further options are described in the sections below. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of polytomous item responses from the objects shown on the left. If you only want to use a subset of items from selected object, you can specify these here. Choose if discrimination parameters should be computed for each item individually. Alternatively, you can estimate one discrimination parameter that is equal for all items, or fix it at 1 for all items. By default start values for the parameters are computed automatically. Alternatively, you can force the use of random start values, or give a list of values to be used. For detailed information on the specific layout of that list please refer to the manual for the gpcm() function. Specifies how missing values are to be treated. By default all available cases are used. If checked, only complete cases will be considered. If checked, the coefficients' estimates are reported under the usual Item Response Theory parameterization (which is the default). Defaults to 150. Defaults to 21. By default optim() is being used for optimization. Alternatively, nlminb() can be called. The default optimization method is BFGS. It can be set to Nelder-Mead, CG, L-BFGS-B, or SANN instead. Please refer to the optim() manual for details. Options are forward difference approximation (the default) and central difference approximation. Step size to be used in the numerical derivative. Default is 1e-06. If you use central difference approximation, change this to a larger value, e.g., 1e-03 or 1e-04. Pretty much speaks for itself ;-) Please refer to the ltm manuals for further information and detailed command line options:
    Todo:
    • The parscale control element is not yet implemented.
    rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_rsm.rkh0000644000175000017500000000362112124345412025232 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the eRm package. To fit the rating scale model with default settings, just the matrix of manifest variables (item responses) must be selected. Further options are described in the sections below. For detailed information on the expected layout of matrices and vectors please refer to the manual for the RSM() function. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of item responses from the objects shown on the left. By default the design matrix for the RSM will be computed automatically. Alternatively, you may specify your own design matrix here. By default eta values start with the 0-vector. To change this, a vector of starting values can be specified. If checked, standard errors are computed (which is the default). By default parameters are normalized to sum-0 by specifying an appropriate design matrix. Uncheck this box to restrict the first parameter to 0. Please refer to the eRm manuals for further information and detailed command line options:
    rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_pcm.js0000644000175000017500000000316612124345412025044 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var design = getValue("design"); var design_mtx = getValue("design_mtx"); var etastart = getValue("etastart"); var etastart_vec = getValue("etastart_vec"); var stderr = getValue("stderr"); var sumnull = getValue("sumnull"); echo ('estimates.pcm <- PCM(' + getValue("x")); // any additional options? if (design == "matrix") echo(", W="+design_mtx); if (stderr != "se") echo(", se=FALSE"); if (sumnull != "sum0") echo(", sum0=FALSE"); if (etastart == "startval") echo(", etaStart="+etastart_vec); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("PCM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.pcm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print(t(rbind(Eta=estimates.pcm$etapar,StdErr=estimates.pcm$se.eta)))\n'); echo ('rk.print (paste("Conditional log-likelihood:",round(estimates.pcm$loglik, digits=1),\n'); echo ('"
    Number of iterations:",estimates.pcm$iter,"
    Number of parameters:",estimates.pcm$npar))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.pcm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_rsm.js0000644000175000017500000000316612124345412025066 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var design = getValue("design"); var design_mtx = getValue("design_mtx"); var etastart = getValue("etastart"); var etastart_vec = getValue("etastart_vec"); var stderr = getValue("stderr"); var sumnull = getValue("sumnull"); echo ('estimates.rsm <- RSM(' + getValue("x")); // any additional options? if (design == "matrix") echo(", W="+design_mtx); if (stderr != "se") echo(", se=FALSE"); if (sumnull != "sum0") echo(", sum0=FALSE"); if (etastart == "startval") echo(", etaStart="+etastart_vec); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("RSM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.rsm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print(t(rbind(Eta=estimates.rsm$etapar,StdErr=estimates.rsm$se.eta)))\n'); echo ('rk.print (paste("Conditional log-likelihood:",round(estimates.rsm$loglik, digits=1),\n'); echo ('"
    Number of iterations:",estimates.rsm$iter,"
    Number of parameters:",estimates.rsm$npar))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.rsm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.xml0000644000175000017500000001042312124345412025371 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_grm.rkh0000644000175000017500000000604512124345412025221 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the ltm package. To fit the graded response model with default settings, just the matrix of manifest variables (polytomous item responses) must be selected. Further options are described in the sections below. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of polytomous item responses from the objects shown on the left. If checked it is assumed that discrimination parameters are equal for all items. By default start values for the parameters are computed automatically. Alternatively, you can force the use of random start values, or give a list of values to be used. For detailed information on the specific layout of that list please refer to the manual for the grm() function. If checked the Hessian matrix is computed. Specifies how missing values are to be treated. By default all available cases are used. If checked, only complete cases will be considered. If checked, the coefficients' estimates are reported under the usual Item Response Theory parameterization (which is the default). Defaults to 150. Defaults to 21. The default optimization method is BFGS. It can be set to Nelder-Mead, CG, L-BFGS-B, or SANN instead. Please refer to the optim() manual for details. Specifies how many digits are used in abbreviating item names. Defaults to 6. Pretty much speaks for itself ;-) Please refer to the ltm manuals for further information and detailed command line options:
    Todo:
    • The parscale control element is not yet implemented.
    rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_grm.js0000644000175000017500000000471512124345412025053 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var constraint = getValue("constraint"); var startval = getValue("startval"); var startval_lst = getValue("startval_lst"); var hessian = getValue("hessian"); var naaction = getValue("naaction"); var irtparam = getValue("irtparam"); var optimeth = getValue("optimeth"); var verbose = getValue("verbose"); // these are grm specific var ghk_grm = getValue("ghk_grm"); var iterqn_grm = getValue("iterqn_grm"); var dig_abbrv = getValue("dig_abbrv"); /////////////////////////////////// // check for selected advanced control options var control = new Array() ; if (iterqn_grm != 150) control[control.length] = "iter.qN="+iterqn_grm ; if (ghk_grm != 21) control[control.length] = "GHk="+ghk_grm ; if (optimeth != "BFGS") control[control.length] = "method=\""+optimeth+"\"" ; if (verbose == "TRUE") control[control.length] = "verbose=TRUE" ; if (dig_abbrv != 6) control[control.length] = "digits.abbrv="+dig_abbrv ; echo ('estimates.grm <- grm(' + getValue("x")); // any additional options? if (constraint == "const_discr") echo(", constrained=TRUE"); if (irtparam != "TRUE") echo(", IRT.param=FALSE"); if (hessian == "hessian") echo(", Hessian=TRUE"); if (startval == "random") echo(", start.val=\"random\""); if (startval == "list") echo(", start.val="+startval_lst); if (naaction) echo(", na.action="+naaction); // finally check if any advanced control options must be inserted if (control.length > 0) echo(", control=list("+control.join(", ")+")"); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("GRM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.grm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print (coef(estimates.grm))\n'); echo ('rk.print (paste("Log-likelihood value at convergence:",round(estimates.grm$log.Lik, digits=1)))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.grm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_gpcm.js0000644000175000017500000000605712124345412025215 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var data = getValue("x"); var chk_select = getValue("chk_select"); var inp_items = getValue("inp_items"); // reformat inp_items if (inp_items) inp_items = inp_items.replace(/\n/g,', ').replace(/(\w*)\[\[|\]\]/g, ''); var constraint = getValue("constraint"); var startval = getValue("startval"); var startval_lst = getValue("startval_lst"); var naaction = getValue("naaction"); var irtparam = getValue("irtparam"); var optimeth = getValue("optimeth"); var verbose = getValue("verbose"); // these are gpcm specific var ghk_gpcm = getValue("ghk_gpcm"); var iterqn_gpcm = getValue("iterqn_gpcm"); var optimizer = getValue("optimizer"); var numrderiv = getValue("numrderiv"); var epshess = getValue("epshess"); // parscale = getValue("parscale"); not implemented yet... /////////////////////////////////// // check for selected advanced control options var control = new Array() ; if (iterqn_gpcm != 150) control[control.length] = "iter.qN="+iterqn_gpcm ; if (ghk_gpcm != 21) control[control.length] = "GHk="+ghk_gpcm ; if (optimizer != "optim") control[control.length] = "optimizer=\"nlminb\"" ; if (optimizer == "optim" && optimeth != "BFGS") control[control.length] = "optimMethod=\""+optimeth+"\"" ; if (numrderiv != "fd") control[control.length] = "numrDeriv=\"cd\"" ; if (epshess != 1e-06) control[control.length] = "epsHes="+epshess ; if (verbose == "TRUE") control[control.length] = "verbose=TRUE" ; echo ('estimates.gpcm <- gpcm('); if (data && chk_select && inp_items) echo ("subset("+data+", select=c("+inp_items+"))"); else echo (data); // any additional options? if (constraint != "gpcm") echo(", constraint=\""+constraint+"\""); if (irtparam != "TRUE") echo(", IRT.param=FALSE"); if (startval == "list" && startval_lst) echo(", start.val="+startval_lst); if (startval == "random") echo(", start.val=\"random\""); if (naaction) echo(", na.action="+naaction); // finally check if any advanced control options must be inserted if (control.length > 0) echo(", control=list("+control.join(", ")+")"); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("GPCM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.gpcm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print (coef(estimates.gpcm))\n'); echo ('rk.print (paste("Log-likelihood value at convergence:",round(estimates.gpcm$log.Lik, digits=1)))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.gpcm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_lpcm.js0000644000175000017500000000355012124345412025215 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var mpoints = getValue("mpoints"); var groups = getValue("groups"); var group_vec = getValue("group_vec"); var design = getValue("design"); var design_mtx = getValue("design_mtx"); var etastart = getValue("etastart"); var etastart_vec = getValue("etastart_vec"); var stderr = getValue("stderr"); var sumnull = getValue("sumnull"); echo ('estimates.lpcm <- LPCM(' + getValue("x")); // any additional options? if (design == "matrix") echo(", W="+design_mtx); if (mpoints > 1) echo(", mpoints="+mpoints); if (groups == "contrasts") echo(", groupvec="+group_vec); if (stderr != "se") echo(", se=FALSE"); if (sumnull != "sum0") echo(", sum0=FALSE"); if (etastart == "startval") echo(", etaStart="+etastart_vec); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("LPCM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.lpcm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print(t(rbind(Eta=estimates.lpcm$etapar,StdErr=estimates.lpcm$se.eta)))\n'); echo ('rk.print (paste("Conditional log-likelihood:",round(estimates.lpcm$loglik, digits=1),\n'); echo ('"
    Number of iterations:",estimates.lpcm$iter,"
    Number of parameters:",estimates.lpcm$npar))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.lpcm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_lrsm.rkh0000644000175000017500000000452612124345412025413 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the eRm package. To fit the linear rating scale model with default settings, just the matrix of manifest variables (item responses) must be selected. Further options are described in the sections below. For detailed information on the expected layout of matrices and vectors please refer to the manual for the LRSM() function. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of item responses from the objects shown on the left. If repeated measurement applies, specify how many are represented in the data matrix (defaults to 1). This will divide the columns in the matrix into equally sized subsets of data. If you want to compute group contrasts, a vector determing the group membership of each subject must be given. By default no group contrasts are imposed. By default the design matrix for the LRSM will be computed automatically. Alternatively, you may specify your own design matrix here. By default eta values start with the 0-vector. To change this, a vector of starting values can be specified. If checked, standard errors are computed (which is the default). By default parameters are normalized to sum-0 by specifying an appropriate design matrix. Uncheck this box to restrict the first parameter to 0. Please refer to the eRm manuals for further information and detailed command line options:
    rkward-0.6.1/rkward/plugins/analysis/irt/polytomous/par_est_rsm.xml0000644000175000017500000000471612124345412025254 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/0000755000175000017500000000000012124345412022307 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.js0000644000175000017500000000462112124345412025062 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into variables for the sake of readable code var constraint = getValue("constraint"); var startval = getValue("startval"); var startval_mtx = getValue("startval_mtx"); var naaction = getValue("naaction"); var irtparam = getValue("irtparam"); var optimeth = getValue("optimeth"); var verbose = getValue("verbose"); // these are 2pl specific var ghk_2pl = getValue("ghk_2pl"); var iterem = getValue("iterem"); var iterqn_2pl = getValue("iterqn_2pl"); var interact = getValue("interact"); /////////////////////////////////// // check for selected advanced control options var control = new Array() ; if (iterem != "40") control[control.length] = "iter.em="+iterem ; if (iterqn_2pl != "150") control[control.length] = "iter.qN="+iterqn_2pl ; if (ghk_2pl != "15") control[control.length] = "GHk="+ghk_2pl ; if (optimeth != "BFGS") control[control.length] = "method=\""+optimeth+"\"" ; if (verbose == "TRUE") control[control.length] = "verbose=TRUE" ; echo ('estimates.2pl <- ltm(' + getValue("x") + ' ~ z1'); // any additional options? if (interact == "TRUE") echo(" * z2"); if (constraint) echo(", constraint="+constraint); if (irtparam != "TRUE") echo(", IRT.param=FALSE"); if (startval == "random") echo(", start.val=\"random\""); if (startval == "matrix") echo(", start.val="+startval_mtx); if (naaction) echo(", na.action="+naaction); // finally check if any advanced control options must be inserted if (control.length > 0) echo(", control=list("+control.join(", ")+")"); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("2PL parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.2pl$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print (coef(estimates.2pl))\n'); echo ('rk.print (paste("Log-likelihood value at convergence:",round(estimates.2pl$log.Lik, digits=1)))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.2pl\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.xml0000644000175000017500000000567312124345412025661 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.xml0000644000175000017500000000623212124345412025246 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.xml0000644000175000017500000000601612124345412025521 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_2pl.rkh0000644000175000017500000000614312124345412025233 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the ltm package. To fit the two parameter logistic model with default settings, just the matrix of manifest variables (dichotomous item responses) must be selected. Further options are described in the sections below. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of dichotomous item responses from the objects shown on the left. If you want to fix parameters, you have to prepare a matrix of fixed-value constraints first and then select it here. For detailed information on the specific layout of that matrix please refer to the manual for the ltm() function. By default start values for the parameters are computed automatically. Alternatively, you can force the use of random start values, or give a matrix of values to be used. For detailed information on the specific layout of that matrix please refer to the manual for the ltm() function. Specifies how missing values are to be treated. By default all available cases are used. If checked, only complete cases will be considered. If checked, the coefficients' estimates are reported under the usual Item Response Theory parameterization (which is the default). Defaults to 40. Defaults to 150. Defaults to 15. The default optimization method is BFGS. It can be set to Nelder-Mead, CG, L-BFGS-B, or SANN instead. Please refer to the optim() manual for details. Pretty much speaks for itself ;-) Please refer to the ltm manuals for further information and detailed command line options:
    • The two factor solution of the ltm() function is not yet fully implemented (quadratic term is missing).
    rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.xml0000644000175000017500000000726612124345412025257 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.rkh0000644000175000017500000000547312124345412025643 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the ltm package. To fit the Rasch model with default settings, just the matrix of manifest variables (dichotomous item responses) must be selected. Further options are described in the sections below. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of dichotomous item responses from the objects shown on the left. If you want to fix parameters, you have to prepare a matrix of fixed-value constraints first and then select it here. For detailed information on the specific layout of that matrix please refer to the manual for the rasch() function. By default start values for the parameters are computed automatically. Alternatively, you can force the use of random start values, or give a matrix of values to be used. For detailed information on the specific layout of that matrix please refer to the manual for the rasch() function. Specifies how missing values are to be treated. By default all available cases are used. If checked, only complete cases will be considered. If checked, the coefficients' estimates are reported under the usual Item Response Theory parameterization (which is the default). Defaults to 150. Defaults to 21. The default optimization method is BFGS. It can be set to Nelder-Mead, CG, L-BFGS-B, or SANN instead. Please refer to the optim() manual for details. Pretty much speaks for itself ;-) Please refer to the ltm manuals for further information and detailed command line options:
    rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.rkh0000644000175000017500000000455612124345412025514 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the eRm package. To fit the linear logstic test model with default settings, just the matrix of manifest variables (dichotomous item responses) must be selected. Further options are described in the sections below. For detailed information on the expected layout of matrices and vectors please refer to the manual for the LLTM() function. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of dichotomous item responses from the objects shown on the left. If repeated measurement applies, specify how many are represented in the data matrix (defaults to 1). This will divide the columns in the matrix into equally sized subsets of data. If you want to compute group contrasts, a vector determing the group membership of each subject must be given. By default no group contrasts are imposed. By default the design matrix for the LLTM will be computed automatically. Alternatively, you may specify your own design matrix here. By default eta values start with the 0-vector. To change this, a vector of starting values can be specified. If checked, standard errors are computed (which is the default). By default parameters are normalized to sum-0 by specifying an appropriate design matrix. Uncheck this box to restrict the first parameter to 0. Please refer to the eRm manuals for further information and detailed command line options:
    rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.js0000644000175000017500000000535112124345412025064 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var constraint = getValue("constraint"); var startval = getValue("startval"); var startval_mtx = getValue("startval_mtx"); var naaction = getValue("naaction"); var irtparam = getValue("irtparam"); var optimeth = getValue("optimeth"); var verbose = getValue("verbose"); // these are 3pl specific var ghk_3pl = getValue("ghk_3pl"); var iterqn_3pl = getValue("iterqn_3pl"); var type = getValue("type"); var maxguess = getValue("maxguess"); var optimizer = getValue("optimizer"); var epshess = getValue("epshess"); // var parscale = getValue("parscale"); not implemented yet... /////////////////////////////////// // check for selected advanced control options var control = new Array() ; if (optimizer != "optim") control[control.length] = "optimizer=\"nlminb\"" ; if (iterqn_3pl != 1000) control[control.length] = "iter.qN="+iterqn_3pl ; if (ghk_3pl != 21) control[control.length] = "GHk="+ghk_3pl ; if (optimizer == "optim" && optimeth != "BFGS") control[control.length] = "method=\""+optimeth+"\"" ; if (verbose == "TRUE") control[control.length] = "verbose=TRUE" ; if (epshess != 1e-03) control[control.length] = "eps.hessian="+epshess ; echo ('estimates.3pl <- tpm(' + getValue("x")); // any additional options? if (type == "rasch") echo(", type=\"rasch\""); if (constraint) echo(", constraint="+constraint); if (maxguess != 1) echo(", max.guessing="+maxguess); if (irtparam != "TRUE") echo(", IRT.param=FALSE"); if (startval == "random") echo(", start.val=\"random\""); if (startval == "matrix") echo(", start.val="+startval_mtx); if (naaction) echo(", na.action="+naaction); // finally check if any advanced control options must be inserted if (control.length > 0) echo(", control=list("+control.join(", ")+")"); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("3PL parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.3pl$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print (coef(estimates.3pl))\n'); echo ('rk.print (paste("Log-likelihood value at convergence:",round(estimates.3pl$log.Lik, digits=1)))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.3pl\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_3pl.rkh0000644000175000017500000000737112124345412025240 0ustar thomasthomas This plugin estimates parameters under Item Response Theory approach, using the ltm package. To fit the Birnbaum three parameter model with default settings, just the matrix of manifest variables (dichotomous item responses) must be selected. Further options are described in the sections below. The complete results can be stored as a new object in the current workspace for further use (e.g. plotting item characteristic curves). Select the matrix of dichotomous item responses from the objects shown on the left. If you want to fix parameters, you have to prepare a matrix of fixed-value constraints first and then select it here. For detailed information on the specific layout of that matrix please refer to the manual for the tpm() function. Limits the estimated guessing parameter (accepts values between 0 and 1). By default start values for the parameters are computed automatically. Alternatively, you can force the use of random start values, or give a matrix of values to be used. For detailed information on the specific layout of that matrix please refer to the manual for the tpm() function. If checked it is assumed that discrimination parameters are equal for all items, as in the 1PL Rasch model. That leaves difficulty and guessing parameters to be estimated. Specifies how missing values are to be treated. By default all available cases are used. If checked, only complete cases will be considered. If checked, the coefficients' estimates are reported under the usual Item Response Theory parameterization (which is the default). Defaults to 1000. Defaults to 21. By default optim() is being used for optimization. Alternatively, nlminb() can be called. Only if optim() is used: The default optimization method is BFGS. It can be set to Nelder-Mead, CG, L-BFGS-B, or SANN instead. Please refer to the optim() manual for details. Used in the central difference approximation that approximates the hessian. Defaults to 1e-03. Pretty much speaks for itself ;-) Please refer to the ltm manuals for further information and detailed command line options:
    Todo:
    • The parscale control element is not yet implemented.
    rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_lltm.js0000644000175000017500000000347012124345412025336 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var mpoints = getValue("mpoints"); var groups = getValue("groups"); var group_vec = getValue("group_vec"); var design = getValue("design"); var design_mtx = getValue("design_mtx"); var etastart = getValue("etastart"); var etastart_vec = getValue("etastart_vec"); var stderr = getValue("stderr"); var sumnull = getValue("sumnull"); echo ('estimates.lltm <- LLTM(' + getValue("x")); // any additional options? if (design == "matrix") echo(", W="+design_mtx); if (mpoints > 1) echo(", mpoints="+mpoints); if (groups == "contrasts") echo(", groupvec="+group_vec); if (stderr != "se") echo(", se=FALSE"); if (sumnull != "sum0") echo(", sum0=FALSE"); if (etastart == "startval") echo(", etaStart="+etastart_vec); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("LLTM parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.lltm$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print(t(rbind(Eta=estimates.lltm$etapar,StdErr=estimates.lltm$se.eta)))\n'); echo ('rk.print (paste("Conditional log-likelihood:",round(estimates.lltm$loglik, digits=1),\n'); echo ('"
    Number of iterations:",estimates.lltm$iter,"
    Number of parameters:",estimates.lltm$npar))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.lltm\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/dichotomous/par_est_rasch.js0000644000175000017500000000445112124345412025466 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var constraint = getValue("constraint"); var startval = getValue("startval"); var startval_mtx = getValue("startval_mtx"); var naaction = getValue("naaction"); var irtparam = getValue("irtparam"); var optimeth = getValue("optimeth"); var verbose = getValue("verbose"); // these are rasch specific var ghk_rasch = getValue("ghk_rasch"); var iterqn_rasch = getValue("iterqn_rasch"); /////////////////////////////////// // check for selected advanced control options var control = new Array() ; if (iterqn_rasch != 150) control[control.length] = "iter.qN="+iterqn_rasch ; if (ghk_rasch != 21) control[control.length] = "GHk="+ghk_rasch ; if (optimeth != "BFGS") control[control.length] = "method=\""+optimeth+"\"" ; if (verbose == "TRUE") control[control.length] = "verbose=TRUE" ; echo ('estimates.rasch <- rasch(' + getValue("x")); // any additional options? if (constraint) echo(", constraint="+constraint); if (irtparam != "TRUE") echo(", IRT.param=FALSE"); if (startval == "random") echo(", start.val=\"random\""); if (startval == "matrix") echo(", start.val="+startval_mtx); if (naaction) echo(", na.action="+naaction); // finally check if any advanced control options must be inserted if (control.length > 0) echo(", control=list("+control.join(", ")+")"); echo (')\n'); } function printout () { // check whether parameter estimations should be kept in the global enviroment var save = getValue("save_name.active"); var save_name = getValue("save_name"); var irtparam = getValue("irtparam"); echo ('rk.header ("Rasch parameter estimation")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(estimates.rasch$call, width.cutoff=500))\n'); echo ('rk.header ("Coefficients:", level=4)\n'); echo ('rk.print (coef(estimates.rasch))\n'); echo ('rk.print (paste("Log-likelihood value at convergence:",round(estimates.rasch$log.Lik, digits=1)))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- estimates.rasch\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/tests/0000755000175000017500000000000012124345412021114 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_item_fit.js0000644000175000017500000000331012124345412024123 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var spin_groups = getValue("spin_groups"); var drop_sumgroups = getValue("drop_sumgroups"); var rad_pvalue = getValue("rad_pvalue"); var spin_mc = getValue("spin_mc"); /////////////////////////////////// // check for selected options var options = new Array() ; if (spin_groups != 10) options[options.length] = "G="+spin_groups ; if (drop_sumgroups != "median") options[options.length] = "FUN="+drop_sumgroups ; if (rad_pvalue == "montecarlo") options[options.length] = "simulate.p.value=TRUE" ; if (rad_pvalue == "montecarlo" && spin_mc != 100 ) options[options.length] = "B="+spin_mc ; echo ("itemfit.res <- item.fit(" + getValue("x")); // check if any advanced control options must be inserted if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); } function printout () { var rad_pvalue = getValue("rad_pvalue"); echo ('rk.header ("Item-fit statistics (' + getValue("x") + ')")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(itemfit.res$call, width.cutoff=500))\n'); echo ('rk.print ("Alternative: Items do not fit the model")\n'); echo ('rk.print (paste("Ability Categories:", itemfit.res$G))\n'); if (rad_pvalue == "montecarlo") echo ('rk.print (paste("Monte Carlo samples:", itemfit.res$B))\n'); echo ('rk.header ("Item-Fit Statistics and P-values:", level=4)\n'); echo ('rk.print(cbind("X^2"=round(itemfit.res$Tobs, digits=3), "Pr (>X^2)"=format(round(itemfit.res$p.values, digits=3), nsmall=3)))\n'); } rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_unidimensional.js0000644000175000017500000000325412124345412025350 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var spin_samples = getValue("spin_samples"); echo ('unidim.res <- unidimTest(' + getValue("x")); // check if any options must be inserted if (spin_samples != 100) echo(", B=" + spin_samples) ; echo (')\n'); } function printout () { var save = getValue("save_name.active"); var save_name = getValue("save_name"); echo ('rk.header ("Unidimensionality check (' + getValue("x") + ')")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(unidim.res$call, width.cutoff=500))\n'); echo ('rk.header ("Matrix of tertachoric correlations:", level=4)\n'); echo ('rk.print (unidim.res$Rho)\n'); echo ('rk.header ("Unidimensionality Check using Modified Parallel Analysis:", level=4)\n'); echo ('rk.print ("Alternative hypothesis: The second eigenvalue of the observed data is substantially larger than the second eigenvalue of data under the assumed IRT model")\n'); echo ('rk.print (paste("Second eigenvalue in the observed data:", round(unidim.res$Tobs[2], digits=3)))\n'); echo ('rk.print (paste("Average of second eigenvalues in Monte Carlo samples:", round(mean(unidim.res$T.boot[,2]), digits=3)))\n'); echo ('rk.print (paste("Monte Carlo samples:", dim(unidim.res$T.boot)[1]))\n'); echo ('rk.print (paste("p-value:", round(unidim.res$p.value, digits=3)))\n'); // check if results are to be saved: if (save && save_name) { echo ('# keep results in current workspace\n'); echo ('.GlobalEnv$' + save_name + ' <- unidim.res\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_person_fit.xml0000644000175000017500000000506212124345412024665 0ustar thomasthomas Only objects of class ltm, rasch and tpm are valid! rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_cronbach_alpha.js0000644000175000017500000000547212124345412025262 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var data = getValue("x"); var chk_select = getValue("chk_select"); var inp_items = getValue("inp_items"); var spin_samples = getValue("spin_samples"); var chk_standard = getValue("chk_standard"); var chk_na = getValue("chk_na"); var chk_bsci = getValue("chk_bsci"); var spin_ci = getValue("spin_ci"); // reformat inp_items if (inp_items) inp_items = inp_items.replace(/\n/g,', ').replace(/(\w*)\[\[|\]\]/g, ''); /////////////////////////////////// // check for selected options var cilo = ""; var cihi = ""; var options = new Array() ; if (chk_standard == "standard") options[options.length] = "standardized=TRUE" ; if (chk_bsci == "bsci") options[options.length] = "CI=TRUE" ; if (spin_ci != .95) { cilo = (1-spin_ci)/2 ; cihi = 1-cilo ; options[options.length] = "probs=c("+cilo+", "+cihi+")" ; } if (spin_samples != 1000) options[options.length] = "B="+spin_samples ; if (chk_na == "rm") options[options.length] = "na.rm=TRUE" ; echo ('cronalpha.res <- cronbach.alpha('); if (data && chk_select && inp_items) echo ("subset("+data+", select=c("+inp_items+"))"); else echo (data); // check if any advanced control options must be inserted if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); echo ('descript.res <- descript('); if (data && chk_select && inp_items) echo ("subset("+data+", select=c("+inp_items+"))"); else echo (data); echo (', chi.squared=FALSE, B=' + spin_samples + ')\n'); } function printout () { var chk_select = getValue("chk_select"); var spin_samples = getValue("spin_samples"); var chk_standard = getValue("chk_standard"); var chk_na = getValue("chk_na"); var chk_bsci = getValue("chk_bsci"); var spin_ci = getValue("spin_ci"); var inp_items = getValue("inp_items"); // reformat inp_items if (inp_items) inp_items = inp_items.replace(/\n/g,', ').replace(/(\w*)\[\["|"\]\]/g, ''); echo ('rk.header ("Cronbach\'s alpha")\n'); echo ('rk.print("for the \'' + getValue("x") + '\' data-set'); if (chk_select && inp_items) echo (" (subset: "+inp_items+")"); echo ('")\n'); echo ('rk.print(paste("Items:",cronalpha.res$p,"
    Sample units:",cronalpha.res$n,"
    alpha:",round(cronalpha.res$alpha, digits=2),"'); if (chk_standard) echo(" (standardized)"); echo ('"))\n'); echo ('rk.print("Effects on alpha if items are removed:")\n'); echo ('rk.print(descript.res$alpha)\n'); if (chk_bsci) { echo ('rk.print("' + (spin_ci * 100)+"%" + ' Confidence interval:")\n'); echo ('rk.print(cronalpha.res$ci)\n'); } } rkward-0.6.1/rkward/plugins/analysis/irt/tests/eRm_waldtest.js0000644000175000017500000000207212124345412024105 0ustar thomasthomasfunction preprocess () { // we'll need the eRm package, so in case it's not loaded... echo ('require(eRm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var rad_splitcr = getValue("rad_splitcr"); var splitvector = getValue("splitvector"); var optimizer = getValue("drop_optimizer"); if (optimizer != "nlm") echo('.GlobalEnv$fitctrl <- \"'+optimizer+'\"\n'); echo ('waldtest.res <- Waldtest(' + getValue("x")); // check if any advanced control options must be inserted if (rad_splitcr == "mean") echo(", splitcr=\"mean\""); if (rad_splitcr == "vector" && splitvector) echo(", splitcr="+splitvector); echo (')\n'); if (optimizer != "nlm") echo('rm(fitctrl, envir=.GlobalEnv)\n'); } function printout () { echo ('rk.header ("Wald test (' + getValue("x") + ')")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(waldtest.res$call, width.cutoff=500))\n'); echo ('rk.header ("Wald test on item level (z-values):", level=4)\n'); echo ('rk.print(waldtest.res$coef.table)\n'); } rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_gof_rasch.xml0000644000175000017500000000145712124345412024454 0ustar thomasthomas Only objects of class rasch are valid! rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_gof_rasch.js0000644000175000017500000000167312124345412024270 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var spin_samples = getValue("spin_samples"); echo ('GoFRasch.res <- GoF.rasch(' + getValue("x")); // check if any advanced control options must be inserted if (spin_samples != 49) echo(", B="+spin_samples); echo (')\n'); } function printout () { echo ('rk.header ("Goodness of Fit for Rasch Models (' + getValue("x") + ')")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(GoFRasch.res$call, width.cutoff=500))\n'); echo ('rk.header ("Parametric Bootstrap test:", level=4)\n'); echo ('rk.print (paste("Chi-squared statistic:", round(GoFRasch.res$Tobs, digits=3)))\n'); echo ('rk.print (paste("Bootstrap samples:", GoFRasch.res$B))\n'); echo ('rk.print (paste("p-value:", GoFRasch.res$p.value))\n'); } rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_cronbach_alpha.xml0000644000175000017500000000321612124345412025440 0ustar thomasthomas Must be a matrix or data.frame, including the items as columns. rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_person_fit.js0000644000175000017500000000320112124345412024472 0ustar thomasthomasfunction preprocess () { // we'll need the ltm package, so in case it's not loaded... echo ('require(ltm)\n'); } function calculate () { // let's read all values into php variables for the sake of readable code var rad_hypot = getValue("rad_hypot"); var rad_resppat = getValue("rad_resppat"); var mtx_resppat = getValue("mtx_resppat"); var rad_pvalue = getValue("rad_pvalue"); var spin_mc = getValue("spin_mc"); /////////////////////////////////// // check for selected options var options = new Array() ; if (rad_hypot == "greater" || rad_hypot == "two.sided") options[options.length] = "alternative=\""+rad_hypot+"\"" ; if (rad_resppat == "resp_matrix" && mtx_resppat) options[options.length] = "resp.patterns="+mtx_resppat ; if (rad_pvalue == "montecarlo") options[options.length] = "simulate.p.value=TRUE" ; if (rad_pvalue == "montecarlo" && spin_mc != 1000 ) options[options.length] = "B="+spin_mc ; echo ('personfit.res <- person.fit(' + getValue("x")); // check if any advanced control options must be inserted if (options.length > 0) echo(", "+options.join(", ")); echo (')\n'); } function printout () { echo ('rk.header ("Person-fit statistics (' + getValue("x") + ')")\n'); echo ('rk.print ("Call:")\n'); echo ('rk.print.literal (deparse(personfit.res$call, width.cutoff=500))\n'); echo ('rk.header ("Response patterns, person-fit statistics (L0, Lz) and probabilities for each response pattern (Pr):", level=4)\n'); echo ('rk.print(cbind(format(personfit.res$resp.patterns, nsmall=0), round(personfit.res$Tobs, digits=3), "Pr (<Lz)"=round(c(personfit.res$p.values), digits=3)))\n'); } rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_unidimensional.xml0000644000175000017500000000217212124345412025532 0ustar thomasthomas Only objects of class rasch, ltm or tpm are valid! rkward-0.6.1/rkward/plugins/analysis/irt/tests/ltm_item_fit.xml0000644000175000017500000000335212124345412024315 0ustar thomasthomas Only objects of class ltm, rasch and tpm are valid! rkward-0.6.1/rkward/plugins/analysis/irt/tests/eRm_waldtest.xml0000644000175000017500000000327412124345412024276 0ustar thomasthomas Only objects of class Rm are valid! rkward-0.6.1/rkward/plugins/analysis/crosstab.xml0000644000175000017500000000457312124345412021527 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/t_test.xml0000644000175000017500000000563612124345412021212 0ustar thomasthomas As a first step, select the type of test to conduct. Select "Independent samples" when comparing data from two different populations (e.g. treatment group vs. control group). For comparing matched pairs or repeated measures on the same subject, select "Paired samples". Finally, you can also test a single sample against a constant value. Select the parameters of the t-test. If your hypothesis is directed, selecting a directional test hypothesis may increase test power. Sometimes it's helpful to get an estimate of the confidence interval of the difference in means. Below you can specify whether one should be shown, and which confidence-level should be applied (95% corresponds to a 5% level of significance). rkward-0.6.1/rkward/plugins/analysis/t_test.js0000644000175000017500000000354012124345412021016 0ustar thomasthomas// globals var x; var y; var mu; var testForm; var varequal; var confint; function preprocess () { x = getValue ("x"); y = getValue ("y"); mu = getValue ("mu"); testForm = getValue ("test_form"); if (testForm != "const") { echo ('names <- rk.get.description (' + x + ", " + y + ')\n'); } else { echo ('names <- rk.get.description (' + x + ')\n'); } } function calculate () { varequal = getValue ("varequal"); confint = getValue ("confint"); var conflevel = getValue ("conflevel"); var hypothesis = getValue ("hypothesis"); var options = ", alternative=\"" + hypothesis + "\""; if (testForm == "paired") options += ", paired=TRUE"; else if (testForm == "indep" && varequal) options += ", var.equal=TRUE"; if (confint && (conflevel != "0.95")) options += ", conf.level=" + conflevel; echo('result <- t.test (x=' + x); if(testForm != "const") { echo(', y=' + y); } else { echo(', mu=' + mu); } echo (options + ')\n'); } function printout () { echo ('rk.header (result$method, \n'); if (testForm != "const") { echo (' parameters=list ("Comparing"=paste (names[1], "against", names[2]),\n'); } else { echo (' parameters=list ("Comparing"=paste (names[1], "against constant"),\n'); } echo (' "H1"=rk.describe.alternative (result)'); if (testForm == "indep") { echo (',\n'); echo (' "Equal variances"="'); if (!varequal) echo ("not"); echo (' assumed"'); } echo ('))\n'); echo ('\n'); echo ('rk.results (list (\n'); echo (' \'Variable Name\'=names,\n'); echo (' \'estimated mean\'=result$estimate,\n'); echo (' \'degrees of freedom\'=result$parameter,\n'); echo (' t=result$statistic,\n'); echo (' p=result$p.value'); if (confint) { echo (',\n'); echo (' \'confidence interval percent\'=(100 * attr(result$conf.int, "conf.level")),\n'); echo (' \'confidence interval of difference\'=result$conf.int '); } echo ('))\n'); } rkward-0.6.1/rkward/plugins/analysis/corr_matrix.rkh0000644000175000017500000000346412124345412022222 0ustar thomasthomas Calculate a correlation matrix given a number of numerical input vectors. Chose the vectors to calculate correlations for. A correlation is calculated for each pair of vectors. Optionally, (two-sided) p-values are calculated for each pair. Select the vectors to be correlated. For Pearson, Kendall and Spearman, the vectors need to be numeric (see below), and of equal length. Polyserial correlations are calculated between pairs of numeric and categorial variables, and polychoric correlations between categorial variables. If the categorial variables are dichotomous, polyserial/polychoric is equivalent to biserial/tetrachoric correlations. If checked, an additional table with the (two-sided) significance values is calculated and printed. For polyserial/polychoric correlations, Chi-squared tests of bivariate normality are conducted, and also the standard errors are reported. Method of correlation to be used. For Kendall and Spearman, if some variables are not numeric but ordered categorial variables, have them treated as numeric ranks. In case of missing values, should be row be excluded from all calculation (i.e. even for those pairs of variables, where neither value is missing), or should they only be excluded for those pairs where it is actually missing?
    rkward-0.6.1/rkward/plugins/analysis/moments/0000755000175000017500000000000012124345412020636 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/moments/anscombe_test.rkh0000644000175000017500000000244412124345412024176 0ustar thomasthomas This test performs the Anscombe-Glynn test of kurtosis for normal samples. Chose the data to perform the Anscombe-Glynn test of kurtosis for normal samples. You can chose multiple data. See . Select the data to be computed. The vectors need to be numeric, and can be of different length. Here you can specify the alternative hypothesis. It must be one of "two sided", "greater" or "less". Show the total length of the data, and the number of missing values (purely informational, does not affect the test)? If checked, a verbose description of the alternative hypothesis will be shown along with the results
    rkward-0.6.1/rkward/plugins/analysis/moments/agostino_test.xml0000755000175000017500000000167112124345412024252 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/moments/anscombe_test.xml0000644000175000017500000000167612124345412024220 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/moments/bonett_test.xml0000644000175000017500000000170012124345412023710 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/moments/moment.xml0000644000175000017500000000210112124345412022651 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/moments/bonett_test.rkh0000644000175000017500000000253412124345412023702 0ustar thomasthomas This test performs the Bonett-Seier test of Geary's measure of kurtosis for normally distributed data. Chose the data to perform the Bonett-Seier test of Geary's measure of kurtosis for normally distributed data. You can chose multiple data. See . Select the data to be computed. The vectors need to be numeric, and can be of different length. Here you can specify the alternative hypothesis. It must be one of "two sided", "greater" or "less". Show the total length of the data, and the number of missing values (purely informational, does not affect the test)? If checked, a verbose description of the alternative hypothesis will be shown along with the results
    rkward-0.6.1/rkward/plugins/analysis/moments/agostino_test.rkh0000644000175000017500000000246312124345412024233 0ustar thomasthomas This test performs the D'Agostino test for skewness in normally distributed data. Chose the data to perform the D'Agostino test for skewness in normally distributed data. You can chose multiple data. See . Select the data to be computed. The vectors need to be numeric, and can be of different length. Here you can specify the alternative hypothesis. It must be one of "two sided", "greater" or "less". Show the total length of the data, and the number of missing values (purely informational, does not affect the test)? If checked, a verbose description of the alternative hypothesis will be shown along with the results
    rkward-0.6.1/rkward/plugins/analysis/moments/moment.rkh0000644000175000017500000000234512124345412022647 0ustar thomasthomas This test computes the sample moment of specified order. Chose the data to computes the sample moments. You can chose multiple data. See . Select the data to be computed. The vectors need to be numeric, and can be of different length. If checked, central moments are computed. If checked, absolute moments are computed. If checked, missing values will be excluded from calculation (default setting in RKWard). Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/moments/skewness_kurtosis_test.js0000755000175000017500000000216112124345412026043 0ustar thomasthomasfunction preprocess () { echo ('require(moments)\n'); } function calculate () { var narm = ", na.rm=FALSE"; if (getValue ("narm")) narm = ", na.rm=TRUE"; var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo (' try ({\n'); if (getValue ("skewness")) { echo (' results[i, \'Skewness\'] <- skewness (var' + narm + ')\n'); } if (getValue ("kurtosis")) { echo (' results[i, \'Kurtosis\'] <- kurtosis (var' + narm + ')\n'); echo (' results[i, \'Excess Kurtosis\'] <- results[i, \'Kurtosis\'] - 3\n'); } if (getValue ("geary")) { echo (' results[i, \'Geary Kurtosis\'] <- geary (var' + narm + ')\n'); } echo (' })\n'); if (getValue ("length")) { echo ('\n'); echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo ('}\n'); } function printout () { echo ('rk.header ("Skewness and Kurtosis")\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/moments/skewness_kurtosis_test.rkh0000644000175000017500000000261112124345412026210 0ustar thomasthomas This computes the estimator of Pearson's measure of kurtosis, Geary's kurtosis and skewness of given data. Chose the data to compute the kurtosis and/or skewness. You can chose multiple data. See , and . Select the data to be computed. The vectors need to be numeric, and can be of different length. If this option is chosen, Skewness will be computed. If this option is chosen, Pearson's kurtosis will be computed. If this option is chosen, Geary's kurtosis will be computed. If checked, missing values will be excluded from calculation of skewness and kurtosis. Show the total length of the data, and the number of missing values (purely informational, does not affect the test)?
    rkward-0.6.1/rkward/plugins/analysis/moments/anscombe_test.js0000644000175000017500000000260012124345412024020 0ustar thomasthomas// globals var alternative; function preprocess () { echo ('require(moments)\n'); } function calculate () { alternative = getValue ("alternative"); var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' t <- anscombe.test (var, alternative = "' + alternative + '")\n'); echo (' results[i, \'Kurtosis estimator (tau)\'] <- t$statistic["kurt"]\n'); echo (' results[i, \'Transformation (z)\'] <- t$statistic["z"]\n'); echo (' results[i, \'p-value\'] <- t$p.value\n'); if (getValue ("show_alternative")) { echo (' results[i, \'Alternative Hypothesis\'] <- rk.describe.alternative (t)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("Anscombe-Glynn test of kurtosis",\n'); echo (' parameters=list ("Alternative Hypothesis", "' + alternative + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/moments/bonett_test.js0000644000175000017500000000261512124345412023532 0ustar thomasthomas// globals var alternative; function preprocess () { echo ('require(moments)\n'); } function calculate () { alternative = getValue ("alternative"); var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' t <- bonett.test (var, alternative = "' + alternative + '")\n'); echo (' results[i, \'Kurtosis estimator (tau)\'] <- t$statistic["tau"]\n'); echo (' results[i, \'Transformation (z)\'] <- t$statistic["z"]\n'); echo (' results[i, \'p-value\'] <- t$p.value\n'); if (getValue ("show_alternative")) { echo (' results[i, \'Alternative Hypothesis\'] <- rk.describe.alternative (t)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- length (which(is.na(var)))\n'); } echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("Bonett-Seier test of Geary\'s kurtosis",\n'); echo (' parameters=list ("Alternative Hypothesis", "' + alternative + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/moments/skewness_kurtosis_test.xml0000755000175000017500000000226112124345412026230 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/moments/moment.js0000644000175000017500000000207612124345412022500 0ustar thomasthomasfunction preprocess () { echo ('require(moments)\n'); } function calculate () { var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo (' try (results[i, \'Moment\'] <- moment (var, order = ' + getValue ("order") + ', central = ' + getValue ("central") + ', absolute = ' + getValue ("absolute") + ', na.rm = ' + getValue ("narm") + '))\n'); if (getValue ("length")) { echo ('\n'); echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo ('}\n'); } function printout () { echo ('rk.header ("Statistical Moment",\n'); echo (' parameters=list ("Order", "' + getValue ("order") + '", "Compute central moments", "' + getValue ("central") + '", "Compute absolute moments", "' + getValue ("absolute") + '", "Remove missing values", "' + getValue ("narm") + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/moments/agostino_test.js0000755000175000017500000000266412124345412024071 0ustar thomasthomas// globals var alternative; function preprocess () { echo ('require(moments)\n'); } function calculate () { alternative = getValue ("alternative"); var vars = trim (getValue ("x")); echo ('vars <- rk.list (' + vars.split ("\n").join (", ") + ')\n'); echo ('results <- data.frame (\'Variable Name\'=I(names (vars)), check.names=FALSE)\n'); echo ('for (i in 1:length (vars)) {\n'); echo (' var <- vars[[i]]\n'); echo (' results[i, \'Error\'] <- tryCatch ({\n'); echo (' # This is the core of the calculation\n'); echo (' t <- agostino.test (var, alternative = "' + alternative + '")\n'); echo (' results[i, \'skewness estimator (skew)\'] <- t$statistic["skew"]\n'); echo (' results[i, \'transformation (z)\'] <- t$statistic["z"]\n'); echo (' results[i, \'p-value\'] <- t$p.value\n'); if (getValue ("show_alternative")) { echo (' results[i, \'Alternative Hypothesis\'] <- rk.describe.alternative (t)\n'); } echo (' NA # no error\n'); echo (' }, error=function (e) e$message) # catch any errors\n'); if (getValue ("length")) { echo (' results[i, \'Length\'] <- length (var)\n'); echo (' results[i, \'NAs\'] <- sum (is.na(var))\n'); } echo ('}\n'); echo ('if (all (is.na (results$\'Error\'))) results$\'Error\' <- NULL\n'); } function printout () { echo ('rk.header ("D\'Agostino test of skewness",\n'); echo (' parameters=list ("Alternative Hypothesis", "' + alternative + '"))\n'); echo ('rk.results (results)\n'); } rkward-0.6.1/rkward/plugins/analysis/wilcoxon/0000755000175000017500000000000012124345412021016 5ustar thomasthomasrkward-0.6.1/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.xml0000644000175000017500000000377212124345412024635 0ustar thomasthomas rkward-0.6.1/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.rkh0000644000175000017500000000376112124345412024617 0ustar thomasthomas This test performs the Wilcoxon Rank Sum and Signed Rank Tests (the first is equivalent to the Mann-Whitney test). Select a single vector (or paired test) to perform a Wilcoxon signed rank test on the null that the true distribution of x (or the difference between the paired vectors) is symmetric about 0 (or the specified location). Select two vectors to perform a Wilcoxon rank sum test (equivalent to the Mann-Whitney test: see for details) on the null that the distributions of x and y differ (by 0 or the specified location shift). Select the data to be computed. The vectors need to be numeric. The alternative hypothesis. "greater" means that x is shifted to the right of y / of the location parameter. Check this for a paired test (Wilcoxon signed rank test of the difference between the two vectors). Check this if you want the confidence interval to be computed/printed. Confidence level of the printed confidence interval. The location / location shift to form the null hypothesis. Should an exact p-value be computed? By default ("Automatic") an asymptomatic p-value is calculated if and only if you have less than 50 cases per group without binding than an exact test should be performed. Check this option to compute an exact p-value even in the presence of ties. If checked a continuity correction in the normal approximation for the p-value is applied.
    rkward-0.6.1/rkward/plugins/analysis/wilcoxon/wilcoxon_tests.js0000644000175000017500000000610712124345412024444 0ustar thomasthomasfunction preprocess(){ var x = getValue("x"); var y = getValue("y"); var ties = getValue("ties"); if(ties) { echo("\trequire(exactRankTests)\n"); } else {} echo("\tnames <- rk.get.description (" + x); if(y) { echo(", " + y); } else {} echo(")\n"); } function calculate(){ // read in variables from dialog var x = getValue("x"); var y = getValue("y"); var alternative = getValue("alternative"); var paired = getValue("paired"); var svbSvrsltst = getValue("svb_Svrsltst"); var conflevel = getValue("conflevel"); var mu = getValue("mu"); var exact = getValue("exact"); var correct = getValue("correct"); var ties = getValue("ties"); var confintChecked = getValue("confint.checked"); // the R code to be evaluated var confintChecked = getValue("confint.checked"); echo("\twcox.result <- "); if(ties) { echo("wilcox.exact("); } else { echo("wilcox.test("); } if(x) { echo("\n\t\tx=" + x); } else {} if(y) { echo(",\n\t\ty=" + y); } else {} if(alternative != "two.sided") { echo(",\n\t\talternative=\"" + alternative + "\""); } else {} if(mu != 0) { echo(",\n\t\tmu=" + mu); } else {} if(y && paired) { echo(",\n\t\tpaired=TRUE"); } else {} if(exact != "automatic") { echo(",\n\t\texact=" + exact); } else {} if(correct) { echo(",\n\t\tcorrect=TRUE"); } else {} if(confintChecked) { echo(",\n\t\tconf.int=TRUE"); if(conflevel != 0.95) { echo(",\n\t\tconf.level=" + conflevel); } else {} } else {} echo("\n\t)\n\n"); } function printout(){ // printout the results var confintChecked = getValue("confint.checked"); var correct = getValue("correct"); var exact = getValue("exact"); var paired = getValue("paired"); var mu = getValue("mu"); echo("rk.header (wcox.result$method,\n" + "\tparameters=list (\"Comparing\", paste (names, collapse=\" against \"),\n" + "\t\"H1\", rk.describe.alternative (wcox.result),\n" + "\t\"Continuity correction in normal approximation for p-value\", "); if(correct) { echo("\"TRUE\",\n"); } else { echo("\"FALSE\",\n"); } echo("\t\"Compute exact p-value\", \"" + exact + "\",\n"); echo("\t\"Paired test\", "); if(paired) { echo("\"TRUE\",\n"); } else { echo("\"FALSE\",\n"); } echo("\t\"mu\", \"" + mu + "\"))\n\n"); echo("rk.results (list (\n" + "\t\"Variable Names\"=names,\n" + "\t\"Statistic\"=wcox.result$statistic,\n" + "\t\"Location Shift\"=wcox.result$null.value,\n" + "\t\"Hypothesis\"=wcox.result$alternative,\n" + "\tp=wcox.result$p.value"); if(confintChecked) { echo(",\n\t\"Confidence interval percent\"=(100 * attr(wcox.result$conf.int, \"conf.level\")),\n" + "\t\"Confidence interval of difference\"=wcox.result$conf.int,\n" + "\t\"Difference in Location\"=wcox.result$estimate"); } else {} echo("))\n"); //// save result object // read in saveobject variables var svbSvrsltst = getValue("svb_Svrsltst"); var svbSvrsltstActive = getValue("svb_Svrsltst.active"); var svbSvrsltstParent = getValue("svb_Svrsltst.parent"); // assign object to chosen environment if(svbSvrsltstActive) { echo("assign(\"" + svbSvrsltst + "\", wcox.result, envir=" + svbSvrsltstParent + ")\n"); } else {} } rkward-0.6.1/rkward/plugins/distributions.pluginmap0000644000175000017500000004535612124345412022166 0ustar thomasthomas rkward-0.6.1/rkward/plugins/under_development.pluginmap0000644000175000017500000000406212124345414022772 0ustar thomasthomas rkward-0.6.1/rkward/plugins/x11device.pluginmap0000644000175000017500000000101412124345412021034 0ustar thomasthomas rkward-0.6.1/rkward/windows/0000755000175000017500000000000012124345411015341 5ustar thomasthomasrkward-0.6.1/rkward/windows/rktoplevelwindowgui.cpp0000644000175000017500000002560312124345411022177 0ustar thomasthomas/*************************************************************************** rktoplevelwindowgui - description ------------------- begin : Tue Apr 24 2007 copyright : (C) 2007, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rktoplevelwindowgui.h" #include #include #include #include #include #include #include #include #include "../rkconsole.h" #include "../windows/robjectbrowser.h" #include "../windows/rkfilebrowser.h" #include "../windows/rcontrolwindow.h" #include "../windows/rkhtmlwindow.h" #include "../windows/rkworkplaceview.h" #include "../windows/rkworkplace.h" #include "../windows/rkcommandlog.h" #include "../windows/rkhelpsearchwindow.h" #include "../windows/rkmdiwindow.h" #include "../misc/rkstandardicons.h" #include "../misc/rkprogresscontrol.h" #include "../misc/rkcommonfunctions.h" #include "../plugin/rkcomponentmap.h" #include "../rbackend/rinterface.h" #include "../rkglobals.h" #include "../rkward.h" #include "../debug.h" RKTopLevelWindowGUI::RKTopLevelWindowGUI (KXmlGuiWindow *for_window) : QObject (for_window), KXMLGUIClient () { RK_TRACE (APP); RKTopLevelWindowGUI::for_window = for_window; setXMLFile ("rktoplevelwindowgui.rc"); // help menu QAction *help_invoke_r_help = actionCollection ()->addAction ("invoke_r_help", this, SLOT(invokeRHelp())); help_invoke_r_help->setText (i18n ("Help on R")); QAction *show_help_search = actionCollection ()->addAction ("show_help_search", this, SLOT(showHelpSearch())); show_help_search->setText (i18n ("Search R Help")); QAction *show_rkward_help = actionCollection ()->addAction (KStandardAction::HelpContents, "rkward_help", this, SLOT (showRKWardHelp())); show_rkward_help->setText (i18n ("Help on RKWard")); actionCollection ()->addAction (KStandardAction::AboutApp, "about_app", this, SLOT (showAboutApplication())); actionCollection ()->addAction (KStandardAction::WhatsThis, "whats_this", this, SLOT (startWhatsThis())); actionCollection ()->addAction (KStandardAction::ReportBug, "report_bug", this, SLOT (reportRKWardBug())); help_invoke_r_help->setStatusTip (i18n ("Shows the R help index")); show_help_search->setStatusTip (i18n ("Shows/raises the R Help Search window")); show_rkward_help->setStatusTip (i18n ("Show help on RKWard")); // window menu // NOTE: enabling / disabling the prev/next actions is not a good idea. It will cause the script windows to "accept" their shortcuts, when disabled prev_action = actionCollection ()->addAction ("prev_window", this, SLOT (previousWindow())); prev_action->setText (i18n ("Previous Window")); prev_action->setIcon (QIcon (RKCommonFunctions::getRKWardDataDir () + "icons/window_back.png")); prev_action->setShortcut (Qt::ControlModifier + Qt::Key_Tab); next_action = actionCollection ()->addAction ("next_window", this, SLOT (nextWindow())); next_action->setText (i18n ("Next Window")); next_action->setIcon (QIcon (RKCommonFunctions::getRKWardDataDir () + "icons/window_forward.png")); next_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_Tab); KAction *action; foreach (RKToolWindowList::ToolWindowRepresentation rep, RKToolWindowList::registeredToolWindows ()) { action = actionCollection ()->addAction ("window_show_" + rep.id, this, SLOT (toggleToolView())); action->setText (i18n ("Show/Hide %1", rep.window->shortCaption ())); action->setIcon (rep.window->windowIcon ()); action->setShortcut (rep.default_shortcut); action->setProperty ("rk_toolwindow_id", rep.id); } action = actionCollection ()->addAction ("window_activate_docview", this, SLOT(activateDocumentView())); action->setText (i18n ("Activate Document view")); action->setShortcut (Qt::AltModifier + Qt::Key_0); action = actionCollection ()->addAction ("output_show", this, SLOT (slotOutputShow())); action->setText (i18n ("Show &Output")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowOutput)); // settings KStandardAction::keyBindings (this, SLOT (configureShortcuts ()), actionCollection ()); KStandardAction::configureToolbars (this, SLOT (configureToolbars()), actionCollection ()); } RKTopLevelWindowGUI::~RKTopLevelWindowGUI () { RK_TRACE (APP); } void RKTopLevelWindowGUI::configureShortcuts () { RK_TRACE (APP); KMessageBox::information (for_window, i18n ("For technical reasons, the following dialog allows you to configure the keyboard shortcuts only for those parts of RKWard that are currently active.\n\nTherefore, if you want to configure keyboard shortcuts e.g. for use inside the script editor, you need to open a script editor window, and activate it."), i18n ("Note"), "configure_shortcuts_kparts"); KShortcutsDialog dlg (KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsAllowed, qobject_cast (parent())); foreach (KXMLGUIClient *client, factory ()->clients ()) { if (client && !client->xmlFile ().isEmpty ()) dlg.addCollection (client->actionCollection()); } dlg.addCollection (RKComponentMap::getMap ()->actionCollection (), i18n ("RKWard Plugins")); dlg.configure (true); } void RKTopLevelWindowGUI::configureToolbars () { RK_TRACE (APP); KMessageBox::information (for_window, i18n ("For technical reasons, the following dialog allows you to configure the toolbar buttons only for those parts of RKWard that are currently active.\n\nTherefore, if you want to configure tool buttons e.g. for use inside the script editor, you need to open a script editor window, and activate it."), i18n ("Note"), "configure_toolbars_kparts"); for_window->configureToolbars (); } void RKTopLevelWindowGUI::invokeRHelp () { RK_TRACE (APP); RKGlobals::rInterface ()->issueCommand ("help.start ()", RCommand::App); RKWardMainWindow::getMain ()->topLevelWidget ()->raise (); } void RKTopLevelWindowGUI::startWhatsThis () { RK_TRACE (APP); QWhatsThis::enterWhatsThisMode (); } void RKTopLevelWindowGUI::reportRKWardBug () { RK_TRACE (APP); QString report_template = i18n ("---Problem description---\n"); report_template.append (i18n ("Please give a brief summary on the problem:\n###Please fill in###\n\n")); report_template.append (i18n ("What - in detail - did you do directly before you encountered this problem?\n###Please fill in###\n\n")); report_template.append (i18n ("When you try to repeat the above, does the problem occur again (no, sometimes, always)?\n###Please fill in###\n\n")); report_template.append (i18n ("If applicable: When doing the same thing in an R session outside of RKWard, do you see the same problem?\n###Please fill in###\n\n")); report_template.append (i18n ("Do you have any further information that might help us to track this problem down? In particular, if applicable, can you provide sample data and sample R code to reproduce this problem?\n###Please fill in###\n\n")); RCommand *command = new RCommand ("rk.sessionInfo()", RCommand::App); RKProgressControl *control = new RKProgressControl (this, i18n ("Please stand by while gathering some information on your setup.\nIn case the backend has died or hung up, you may want to press 'Cancel' to skip this step."), i18n ("Gathering setup information"), RKProgressControl::CancellableNoProgress); control->addRCommand (command, true); RKGlobals::rInterface ()->issueCommand (command); bool ok = control->doModal (false); report_template.append ("---Session Info---\n"); report_template.append (control->fullCommandOutput ()); if (!ok) report_template.append ("- not available -"); delete control; KDialog *dialog = new KDialog (for_window); connect (dialog, SIGNAL (finished(int)), dialog, SLOT (deleteLater())); dialog->setCaption (i18n ("Reporting bugs in RKWard")); dialog->setButtons (KDialog::Ok); KVBox *vbox = new KVBox (dialog); dialog->setMainWidget (vbox); QLabel *label = new QLabel (i18n ("

    Where should I report bugs or wishes?

    Please submit your bug reports or wishes at %1 or send email to %2.

    " "

    What information should I provide?

    Please copy the information shown below, and fill in the details to the questions.

    " , QString ("http://sourceforge.net/tracker/?group_id=50231&atid=459007"), QString ("rkward-devel@lists.sourceforge.net")), vbox); label->setWordWrap (true); label->setOpenExternalLinks (true); QTextEdit *details = new QTextEdit (vbox); details->setReadOnly (true); details->setText (report_template); dialog->show (); } void RKTopLevelWindowGUI::showAboutApplication () { RK_TRACE (APP); KAboutApplicationDialog about (KCmdLineArgs::aboutData ()); about.exec (); } void RKTopLevelWindowGUI::toggleToolView (RKMDIWindow *tool_window) { RK_TRACE (APP); RK_ASSERT (tool_window); if (tool_window->isActive ()) { tool_window->close (false); activateDocumentView (); } else { tool_window->activate (true); } } void RKTopLevelWindowGUI::toggleToolView () { RK_TRACE (APP); QAction *act = dynamic_cast (sender ()); RK_ASSERT (act); RKMDIWindow *win = RKToolWindowList::findToolWindowById (act->property ("rk_toolwindow_id").toString ()); RK_ASSERT (win); toggleToolView (win); } void RKTopLevelWindowGUI::showHelpSearch () { RK_TRACE (APP); RKHelpSearchWindow::mainHelpSearch ()->activate (); } void RKTopLevelWindowGUI::showRKWardHelp () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->openHelpWindow (KUrl ("rkward://page/rkward_welcome"), true); } void RKTopLevelWindowGUI::activateDocumentView () { RK_TRACE (APP); RKMDIWindow *window = RKWorkplace::mainWorkplace ()->view ()->activePage (); if (window) window->activate (); } void RKTopLevelWindowGUI::slotOutputShow () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->openOutputWindow (KUrl ()); } void RKTopLevelWindowGUI::nextWindow () { RK_TRACE (APP); // well, this is sort of cumbersome, but the switcher widget gets keyboard focus, and so we need to register the window switching actions with it. RKWorkplace::getHistory ()->next (prev_action, next_action); } void RKTopLevelWindowGUI::previousWindow () { RK_TRACE (APP); RKWorkplace::getHistory ()->prev (prev_action, next_action); } #include "rktoplevelwindowgui.moc" rkward-0.6.1/rkward/windows/CMakeLists.txt0000644000175000017500000000165312124345411020106 0ustar thomasthomasINCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES}) ########### next target ############### SET(windows_STAT_SRCS rkcommandeditorwindow.cpp rkdebugconsole.cpp rkcallstackviewer.cpp rkhtmlwindow.cpp rcontrolwindow.cpp detachedwindowcontainer.cpp rkmdiwindow.cpp rkworkplaceview.cpp rkworkplace.cpp rkwindowcatcher.cpp rkcommandlog.cpp rkhelpsearchwindow.cpp rktoplevelwindowgui.cpp rkfilebrowser.cpp rktoolwindowbar.cpp rktoolwindowlist.cpp robjectbrowser.cpp rkdebugmessagewindow.cpp ) QT4_AUTOMOC(${windows_STAT_SRCS}) ADD_LIBRARY(windows STATIC ${windows_STAT_SRCS}) ########### install files ############### INSTALL(FILES rkcommandeditorwindowpart.rc rkoutputwindow.rc rkhelpwindow.rc detachedwindowcontainer.rc rkcatchedx11windowpart.rc rkcommandlogpart.rc rktoplevelwindowgui.rc rkstandardactions.rc DESTINATION ${DATA_INSTALL_DIR}/rkward) rkward-0.6.1/rkward/windows/rkdebugconsole.h0000644000175000017500000000401512124345411020520 0ustar thomasthomas/*************************************************************************** rkdebugconsole - description ------------------- begin : Wed Oct 19 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKDEBUGCONSOLE_H #define RKDEBUGCONSOLE_H #include "rkmdiwindow.h" class QPushButton; class KHistoryComboBox; class QTextEdit; class QLabel; /** A very simple debugger console */ class RKDebugConsole : public RKMDIWindow { Q_OBJECT public: RKDebugConsole (QWidget *parent, bool tool_window, const char *name=0); ~RKDebugConsole (); static RKDebugConsole *instance () { return _instance; }; // reimplemented to refuse closing while inside the debugger bool close (bool auto_delete); public slots: void newDebugState (); private slots: void sendReply (); void stepButtonClicked (); void stepOutButtonClicked (); void continueButtonClicked (); void cancelButtonClicked (); private: void sendReply (const QString &reply); QTextEdit* context_view; KHistoryComboBox* reply_edit; QLabel* prompt_label; QPushButton* step_button; QPushButton* step_out_button; QPushButton* continue_button; QPushButton* cancel_button; friend class RKWardMainWindow; static RKDebugConsole *_instance; }; #endif rkward-0.6.1/rkward/windows/robjectbrowser.h0000644000175000017500000000755312124345411020560 0ustar thomasthomas/*************************************************************************** robjectbrowser - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004, 2006, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef ROBJECTBROWSER_H #define ROBJECTBROWSER_H #include "rkmdiwindow.h" #include #include class RKObjectListView; class RKObjectListViewSettings; class QPushButton; class QRadioButton; class QCheckBox; class RObject; class RObjectBrowserInternal; class KVBox; /** This widget provides a browsable list of all objects in the R workspace Note: Most actual functionality is realized in RObjectBrowserInternal, which is created as soon as the RObjectBrowser is shown for the first time. @author Thomas Friedrichsmeier */ class RObjectBrowser : public RKMDIWindow { public: RObjectBrowser (QWidget *parent, bool tool_window, const char *name=0); ~RObjectBrowser (); void unlock (); static RObjectBrowser *mainBrowser () { return object_browser; }; /** reimplemented to create the real file browser widget only when the file browser is shown for the first time */ void showEvent (QShowEvent *e); private: RObjectBrowserInternal *internal; KVBox *layout_widget; bool locked; friend class RKWardMainWindow; static RObjectBrowser *object_browser; void initialize (); }; /** Provides most of the functionality of RObjectBrowser @author Thomas Friedrichsmeier */ class RObjectBrowserInternal : public QWidget { Q_OBJECT public: RObjectBrowserInternal (QWidget *parent); ~RObjectBrowserInternal (); private slots: void updateButtonClicked (); void contextMenuCallback (RObject *object, bool *suppress); void popupHelp (); void popupEdit (); void popupCopy (); /** essentially like popupCopy, but does not ask for a name */ void popupCopyToGlobalEnv (); void popupView (); void popupDelete (); void popupUnload (); void popupRename (); /** when an object in the list is double clicked, insert its name in the current RKCommandEditor window */ void doubleClicked (const QModelIndex &index); protected: /** reimplemnented from QWidget to make show the globalenv object when activated (other than by mouse click) */ void focusInEvent (QFocusEvent *e); private: enum PopupActions { Help=0, Edit, View, Rename, Copy, CopyToGlobalEnv, Delete, Unload, LoadUnloadPackages, ActionCount }; QList actions; QPushButton *update_button; RKObjectListView *list_view; }; /** This class provides a widget to switch quickly between the most important RKObjectListViewSettings */ class RKObjectListViewSettingsWidget : public QWidget { Q_OBJECT public: RKObjectListViewSettingsWidget (RKObjectListViewSettings *settings, QWidget *parent); ~RKObjectListViewSettingsWidget (); enum Modes { All = 0, NonFunctions = 1, Functions = 2 }; public slots: void settingsChanged (); void modeChanged (bool); void boxChanged (bool); private: QRadioButton *all; QRadioButton *nonfunctions; QRadioButton *functions; QCheckBox *all_envirs; QCheckBox *hidden_objects; RKObjectListViewSettings *settings; }; #endif rkward-0.6.1/rkward/windows/rkcommandlogpart.rc0000644000175000017500000000121612124345411021233 0ustar thomasthomas &Edit &Settings rkward-0.6.1/rkward/windows/rkworkplaceview.cpp0000644000175000017500000001715212124345411021272 0ustar thomasthomas/*************************************************************************** rkworkplaceview - description ------------------- begin : Tue Sep 26 2006 copyright : (C) 2006, 2007, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkworkplaceview.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "rkmdiwindow.h" #include "rkworkplace.h" #include "../misc/rkstandardicons.h" #include "../debug.h" RKWorkplaceView::RKWorkplaceView (QWidget *parent) : KTabWidget (parent) { RK_TRACE (APP); // close button(s) QToolButton* close_button = new QToolButton (this); close_button->setIcon (KIcon ("tab-close")); connect (close_button, SIGNAL (clicked()), this, SLOT (closeCurrentPage())); close_button->adjustSize (); setCornerWidget (close_button, Qt::TopRightCorner); #if KDE_IS_VERSION(4,1,0) # if QT_VERSION >= 0x040500 setTabsClosable (true); connect (this, SIGNAL (tabCloseRequested(int)), this, SLOT (closePage(int))); # else setCloseButtonEnabled (true); connect (this, SIGNAL (closeRequest(QWidget*)), this, SLOT (closePage(QWidget*))); # endif #endif #if QT_VERSION >= 0x040500 setMovable (true); #else setTabReorderingEnabled (true); // the KDE function is deprecated sind Qt 4.5 / KDE 4.4 #endif tabBar ()->setContextMenuPolicy (Qt::CustomContextMenu); connect (tabBar (), SIGNAL (customContextMenuRequested(const QPoint&)), this, SLOT (showContextMenu(const QPoint&))); KAcceleratorManager::setNoAccel (tabBar ()); // TODO: This is a WORKAROUND for a bug in kdelibs where tabs named "a0.txt", "a1.txt", etc. will steal the Alt+0/1... shortcuts setTabBarHidden (true); // initially connect (this, SIGNAL (currentChanged(int)), this, SLOT (currentPageChanged(int))); } RKWorkplaceView::~RKWorkplaceView () { RK_TRACE (APP); } void RKWorkplaceView::initActions (KActionCollection *ac, const char *id_left, const char *id_right) { RK_TRACE (APP); action_page_left = (KAction*) ac->addAction (id_left, this, SLOT (pageLeft())); action_page_left->setText (i18n ("Window Left")); action_page_left->setShortcut (KShortcut (Qt::ControlModifier + Qt::Key_Less, Qt::ControlModifier + Qt::Key_Comma)); action_page_right = (KAction*) ac->addAction (id_right, this, SLOT (pageRight())); action_page_right->setText (i18n ("Window Right")); action_page_right->setShortcut (KShortcut (Qt::ControlModifier + Qt::Key_Greater, Qt::ControlModifier + Qt::Key_Period)); updateActions (); } void RKWorkplaceView::updateActions () { RK_TRACE (APP); int index = currentIndex (); action_page_left->setEnabled (index > 0); action_page_right->setEnabled (index < (count () - 1)); } void RKWorkplaceView::pageLeft () { RK_TRACE (APP); int index = currentIndex (); RK_ASSERT (index > 0); setCurrentIndex (index - 1); } void RKWorkplaceView::pageRight () { RK_TRACE (APP); int index = currentIndex (); RK_ASSERT (index < (count () - 1)); setCurrentIndex (index + 1); } void RKWorkplaceView::addWindow (RKMDIWindow *widget) { RK_TRACE (APP); int id = -1; QIcon icon = widget->windowIcon (); if (icon.isNull ()) icon = widget->topLevelWidget ()->windowIcon (); if (icon.isNull ()) RK_ASSERT (false); id = addTab (widget, icon, widget->shortCaption ()); connect (widget, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (childCaptionChanged (RKMDIWindow *))); widget->show (); if (count () > 1) setTabBarHidden (false); setCurrentIndex (id); // activate the new tab } bool RKWorkplaceView::hasWindow (RKMDIWindow *widget) { return (indexOf (widget) != -1); } void RKWorkplaceView::removeWindow (RKMDIWindow *widget, bool destroyed) { RK_TRACE (APP); int id = indexOf (widget); // which page is it? if (id == -1) RK_DEBUG (APP, DL_WARNING, "did not find page in RKWorkplaceView::removeWindow"); if (!destroyed) disconnect (widget, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (childCaptionChanged (RKMDIWindow *))); removeTab (id); if (count () <= 1) setTabBarHidden (true); } // KDE4 TODO: we can use setCurrentWidget, instead. void RKWorkplaceView::setActivePage (RKMDIWindow *widget) { RK_TRACE (APP); int id = indexOf (widget); if (id == -1) RK_DEBUG (APP, DL_WARNING, "did not find page in RKWorkplaceView::setActivePage"); setCurrentIndex (id); } RKMDIWindow *RKWorkplaceView::activePage () { RK_TRACE (APP); QWidget *w = currentWidget (); return (dynamic_cast (w)); } void RKWorkplaceView::closeCurrentPage () { RK_TRACE (APP); RKMDIWindow* w = activePage (); if (!w) { RK_ASSERT (false); // the close button should not be visible, if there are no pages return; } w->close (true); } void RKWorkplaceView::closePage (QWidget* page) { RK_TRACE (APP); if (!page) { RK_ASSERT (false); return; } static_cast(page)->close (true); } void RKWorkplaceView::closePage (int page) { RK_TRACE (APP); closePage (widget (page)); } void RKWorkplaceView::showContextMenu (const QPoint &pos) { RK_TRACE (APP); int tab = tabBar ()->tabAt (pos); if (tab < 0) return; // no context menu for the empty area KMenu* m = new KMenu (this); QAction *action = KStandardAction::close (this, SLOT (contextMenuClosePage()), this); action->setData (tab); m->addAction (action); action = m->addAction (RKStandardIcons::getIcon (RKStandardIcons::ActionDetachWindow), i18n("Detach"), this, SLOT (contextMenuDetachWindow())); action->setData (tab); m->exec (mapToGlobal (pos)); delete m; } void RKWorkplaceView::contextMenuClosePage () { RK_TRACE (APP); QAction* action = dynamic_cast (sender ()); if (!action) { RK_ASSERT (false); return; } int tab = action->data ().toInt (); RK_ASSERT (tab >= 0); closePage (tab); } void RKWorkplaceView::contextMenuDetachWindow () { RK_TRACE (APP); QAction* action = dynamic_cast (sender ()); if (!action) { RK_ASSERT (false); return; } int tab = action->data ().toInt (); RK_ASSERT (tab >= 0); RKWorkplace::mainWorkplace ()->detachWindow (static_cast (widget (tab))); } void RKWorkplaceView::childCaptionChanged (RKMDIWindow *widget) { RK_TRACE (APP); int id = indexOf (widget); RK_ASSERT (id >= 0); setTabText (id, widget->shortCaption ()); if (id == currentIndex ()) setCaption (widget->shortCaption ()); } void RKWorkplaceView::setCaption (const QString &caption) { RK_TRACE (APP); QWidget::setWindowTitle (caption); emit (captionChanged (caption)); } void RKWorkplaceView::currentPageChanged (int) { RK_TRACE (APP); RKMDIWindow *w = activePage (); if (w) { setCaption (w->shortCaption ()); w->activate (); // not always automatically active } else { setCaption (QString ()); } updateActions (); } #include "rkworkplaceview.moc" rkward-0.6.1/rkward/windows/rkworkplace.h0000644000175000017500000002273212124345411020044 0ustar thomasthomas/*************************************************************************** rkworkplace - description ------------------- begin : Thu Sep 21 2006 copyright : (C) 2006, 2007, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKWORKPLACE_H #define RKWORKPLACE_H #include #include #include #include #include #include "rkmdiwindow.h" #include "rktoolwindowlist.h" class RObject; class RCommandChain; class RKWorkplaceView; class RKEditor; class KActionCollection; class KAction; class RKToolWindowBar; class RKMDIWindowHistoryWidget; #define TOOL_WINDOW_BAR_COUNT 4 /** Simple class to store the history of recently used RKMDIWindow */ class RKMDIWindowHistory : public QObject { Q_OBJECT public: RKMDIWindowHistory (QObject *parent); ~RKMDIWindowHistory (); void removeWindow (RKMDIWindow *window); /** pops the last window from the list, if it matches the given pointer */ void popLastWindow (RKMDIWindow *match); RKMDIWindow *previousDocumentWindow (); void next (KAction *prev_action, KAction *next_action); void prev (KAction *prev_action, KAction *next_action); public slots: void windowActivated (RKMDIWindow *window); private slots: void switcherDestroyed (); private: void updateSwitcher (); QList recent_windows; RKMDIWindowHistoryWidget *switcher; RKMDIWindowHistoryWidget *getSwitcher (KAction *prev_action, KAction *next_action); }; /** This class (only one instance will probably be around) keeps track of which windows are opened in the workplace, which are detached, etc. Also it is responsible for creating and manipulating those windows. It also provides a QWidget (RKWorkplace::view ()), which actually manages the document windows (only those, so far. I.e. this is a half-replacement for KMdi, which will be gone in KDE 4). Currently layout of the document windows is always tabbed. */ class RKWorkplace : public QWidget { Q_OBJECT public: /** ctor. @param parent: The parent widget for the workspace view (see view ()) */ explicit RKWorkplace (QWidget *parent); ~RKWorkplace (); void initActions (KActionCollection *ac, const char *left_id, const char *right_id); /** @returns a pointer to the view of the workplace. Since possibly the workplace layout might change, better not rely on this pointer being valid for long */ RKWorkplaceView *view () { return wview; }; /** convenience typedef: A list of RKMDIWindow s */ typedef QList RKWorkplaceObjectList; /** Returns a list of all windows in the workplace. */ RKWorkplaceObjectList getObjectList () { return windows; }; /** Returns a list of all windows with a given type and state */ RKWorkplaceObjectList getObjectList (int type, int state=RKMDIWindow::AnyWindowState); /** Attach an already created window. */ void attachWindow (RKMDIWindow *window); /** Dettach a window (it is removed from the view (), and placed in a top-level DetachedWindowContainer instead. */ void detachWindow (RKMDIWindow *window, bool was_attached=true); /** @returns a pointer to the current window. state specifies, which windows should be considered. */ RKMDIWindow *activeWindow (RKMDIWindow::State state); /** Opens the given url in the appropriate way. */ bool openAnyUrl (const KUrl &url, const QString &known_mimetype = QString (), bool force_external=false); /** Opens a new script editor @param url URL to load. Default option is to open an empty document @param encoding encoding to use. If QString (), the default encoding is used. @param use_r_highlighting Set R highlighting mode (vs. no highlighting)? Default is yes @param read_only Open the document read only? Default is false, i.e. Read-write @param force_caption Usually the caption is determined from the url of the file. If you specify a non-empty string here, that is used instead. @returns false if a local url could not be opened, true for all remote urls, and on success */ RKMDIWindow* openScriptEditor (const KUrl &url=KUrl (), const QString& encoding=QString (), bool use_r_highlighting=true, bool read_only=false, const QString &force_caption = QString::null, bool delete_on_close=false); /** Opens a new help window, starting at the given url @param url URL to open @param only_once if true, checks whether any help window already shows this URL. If so, raise it, but do not open a new window. Else show the new window */ RKMDIWindow* openHelpWindow (const KUrl &url=KUrl (), bool only_once=false); /** Opens a new output window. Currently only a single output window will ever be created. Subsequent calls to the function will not create additional windows right now (but will raise / refresh the output window @param url currently ignored! */ RKMDIWindow* openOutputWindow (const KUrl &url=KUrl ()); void newX11Window (WId window_to_embed, int device_number); void newObjectViewer (RObject *object); /** @returns true if there is a known editor for this type of object, false otherwise */ bool canEditObject (RObject *object); /** Creates a new editor of an appropriate type, and loads the given object into the editor @param object object to edit @returns a pointer to the editor */ RKEditor* editObject (RObject *object); /** Creates a new data.frame with the given name, and loads it in an editor. @see editObject() @param name Name of the data.frame to create @returns a pointer to the editor */ RKEditor* editNewDataFrame (const QString& name); /** tell all DataEditorWindow s to synchronize changes to the R backend // TODO: add RCommandChain parameter */ void flushAllData (); /** Close the active (attached) window. Safe to call even if there is no current active window (no effect in that case) */ void closeActiveWindow (); /** Close the given window, whether it is attached or detached. @param window window to close */ void closeWindow (RKMDIWindow *window); /** Closes all windows of the given type(s). Default call (no arguments) closes all windows @param type: A bitwise OR of RKWorkplaceObjectType @param state: A bitwise OR of RKWorkplaceObjectState */ void closeAll (int type=RKMDIWindow::AnyType, int state=RKMDIWindow::AnyWindowState); /** Write a description of all current windows to the R backend. This can later be read by restoreWorkplace (). Has no effect, if RKSettingsModuleGeneral::workplaceSaveMode () != RKSettingsModuleGeneral::SaveWorkplaceWithWorkspace @param chain command chain to place the command in */ void saveWorkplace (RCommandChain *chain=0); /** Load a description of windows from the R backend (created by saveWorkplace ()), and (try to) restore all windows accordingly Has no effect, if RKSettingsModuleGeneral::workplaceSaveMode () != RKSettingsModuleGeneral::SaveWorkplaceWithWorkspace @param chain command chain to place the command in */ void restoreWorkplace (RCommandChain *chain=0); /** Like the other restoreWorkplace (), but takes the description as a parameter rather than reading from the R workspace. To be used, when RKSettingsModuleGeneral::workplaceSaveMode () == RKSettingsModuleGeneral::SaveWorkplaceWithSeesion @param description workplace description */ void restoreWorkplace (const QStringList &description); QStringList makeWorkplaceDescription (); /** In the current design there is only ever one workplace. Use this static function to reference it. @returns a pointer to the workplace */ static RKWorkplace *mainWorkplace () { return main_workplace; }; static RKMDIWindowHistory *getHistory () { return main_workplace->history; }; void placeToolWindows (); void setWorkspaceURL (const KUrl &url, bool keep_config=false); KUrl workspaceURL () const { return current_url; }; KConfigBase *workspaceConfig (); QString portableUrl (const KUrl &url); signals: /** emitted when the workspace Url has changed */ void workspaceUrlChanged (const KUrl& url); public slots: /** When windows are attached to the workplace, their QObject::destroyed () signal is connected to this slot. Thereby deleted objects are removed from the workplace automatically */ void removeWindow (QObject *window); void saveSettings (); private: KUrl current_url; KConfig *_workspace_config; /** current list of windows. @See getObjectList () */ RKWorkplaceObjectList windows; /** the view. @See view () */ RKWorkplaceView *wview; /** Internal function to add an existing window to the list of mdi windows */ void addWindow (RKMDIWindow *window, bool attached=true); /** static pointer to the workplace. @See mainWorkplace () */ static RKWorkplace *main_workplace; /** a window was removed. Try to activate some other window. */ void windowRemoved (); RKMDIWindowHistory *history; QSplitter *horiz_splitter; QSplitter *vert_splitter; RKToolWindowBar* tool_window_bars[TOOL_WINDOW_BAR_COUNT]; friend class RKToolWindowBar; void placeInToolWindowBar (RKMDIWindow *window, int position); }; #endif rkward-0.6.1/rkward/windows/rkworkplace.cpp0000644000175000017500000007231312124345411020377 0ustar thomasthomas/*************************************************************************** rkworkplace - description ------------------- begin : Thu Sep 21 2006 copyright : (C) 2006-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkworkplace.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "detachedwindowcontainer.h" #include "rkcommandeditorwindow.h" #include "rkhtmlwindow.h" #include "rkworkplaceview.h" #include "rktoolwindowbar.h" #include "rktoolwindowlist.h" #include "../core/robject.h" #include "../core/rcontainerobject.h" #include "../core/robjectlist.h" #include "../dataeditor/rkeditor.h" #include "../dataeditor/rkeditordataframe.h" #include "../robjectviewer.h" #include "../settings/rksettingsmodulegeneral.h" #include "../settings/rksettingsmodulecommandeditor.h" #include "../rbackend/rinterface.h" #include "../windows/rkwindowcatcher.h" #include "../rbackend/rcommand.h" #include "../misc/rkcommonfunctions.h" #include "../rkglobals.h" #include "../rkward.h" #include "../debug.h" // static RKWorkplace *RKWorkplace::main_workplace = 0; RKWorkplace::RKWorkplace (QWidget *parent) : QWidget (parent) { RK_TRACE (APP); RK_ASSERT (main_workplace == 0); main_workplace = this; _workspace_config = 0; /* Splitter setup contains heavy copying from Kate's katemdi! */ KVBox *vbox = new KVBox (this); tool_window_bars[RKToolWindowList::Top] = new RKToolWindowBar (KMultiTabBar::Top, vbox); vert_splitter = new QSplitter (Qt::Vertical, vbox); vert_splitter->setOpaqueResize (KGlobalSettings::opaqueResize ()); tool_window_bars[RKToolWindowList::Top]->setSplitter (vert_splitter); KHBox *hbox = new KHBox (vert_splitter); vert_splitter->setCollapsible (vert_splitter->indexOf (hbox), false); vert_splitter->setStretchFactor (vert_splitter->indexOf (hbox), 1); tool_window_bars[RKToolWindowList::Left] = new RKToolWindowBar (KMultiTabBar::Left, hbox); horiz_splitter = new QSplitter (Qt::Horizontal, hbox); horiz_splitter->setOpaqueResize (KGlobalSettings::opaqueResize ()); tool_window_bars[RKToolWindowList::Left]->setSplitter (horiz_splitter); wview = new RKWorkplaceView (horiz_splitter); horiz_splitter->setCollapsible (horiz_splitter->indexOf (wview), false); horiz_splitter->setStretchFactor(horiz_splitter->indexOf (wview), 1); tool_window_bars[RKToolWindowList::Bottom] = new RKToolWindowBar (KMultiTabBar::Bottom, vbox); tool_window_bars[RKToolWindowList::Bottom]->setSplitter (vert_splitter); tool_window_bars[RKToolWindowList::Right] = new RKToolWindowBar (KMultiTabBar::Right, hbox); tool_window_bars[RKToolWindowList::Right]->setSplitter (horiz_splitter); KConfigGroup toolbar_config = KGlobal::config ()->group ("ToolwindowBars"); for (int i = 0; i < TOOL_WINDOW_BAR_COUNT; ++i) tool_window_bars[i]->restoreSize (toolbar_config); // now add it all to this widget QVBoxLayout *box = new QVBoxLayout (this); box->setContentsMargins (0, 0, 0, 0); box->addWidget (vbox); history = new RKMDIWindowHistory (this); connect (RKWardMainWindow::getMain (), SIGNAL (aboutToQuitRKWard()), this, SLOT (saveSettings())); } RKWorkplace::~RKWorkplace () { RK_TRACE (APP); delete _workspace_config; // closeAll (); // not needed, as the windows will autodelete themselves using QObject mechanism. Of course, closeAll () should be called *before* quitting. } QString workspaceConfigFileName (const KUrl &url) { QString base_name = QString (QCryptographicHash::hash (url.prettyUrl ().toUtf8 (), QCryptographicHash::Md5).toHex()); return (KStandardDirs::locateLocal ("data", "rkward/workspace_config_" + base_name)); } KConfigBase *RKWorkplace::workspaceConfig () { if (!_workspace_config) { RK_TRACE (APP); _workspace_config = new KConfig (workspaceConfigFileName (workspaceURL ())); } return _workspace_config; } QString RKWorkplace::portableUrl (const KUrl &url) { KUrl relative = KUrl::relativeUrl (workspaceURL (), url); relative.cleanPath (); return relative.prettyUrl (); } void RKWorkplace::setWorkspaceURL (const KUrl &url, bool keep_config) { RK_TRACE (APP); if (url != current_url) { current_url = url; if (keep_config && _workspace_config) { KConfig * _new_config = _workspace_config->copyTo (workspaceConfigFileName (workspaceURL ())); delete _workspace_config; _workspace_config = _new_config; } else { delete _workspace_config; _workspace_config = 0; } emit (workspaceUrlChanged (url)); } } void RKWorkplace::saveSettings () { RK_TRACE (APP); KConfigGroup toolbar_config = KGlobal::config ()->group ("ToolwindowBars"); for (int i = 0; i < TOOL_WINDOW_BAR_COUNT; ++i) tool_window_bars[i]->saveSize (toolbar_config); } void RKWorkplace::initActions (KActionCollection *ac, const char *left_id, const char *right_id) { RK_TRACE (APP); wview->initActions (ac, left_id, right_id); } void RKWorkplace::attachWindow (RKMDIWindow *window) { RK_TRACE (APP); RK_ASSERT (windows.contains (window)); // This should not happen for now. if (!window->isAttached ()) { QWidget *old_parent = window->parentWidget (); window->prepareToBeAttached (); if (old_parent && qobject_cast (old_parent)) { old_parent->deleteLater (); } } // all the rest is done, even if the window was previously "Attached", as this may also mean it was freshly created window->state = RKMDIWindow::Attached; if (window->isToolWindow ()) { if (!window->tool_window_bar) placeInToolWindowBar (window, RKToolWindowList::Bottom); else window->tool_window_bar->reclaimDetached (window); } else { view ()->addWindow (window); view ()->topLevelWidget ()->raise (); view ()->topLevelWidget ()->activateWindow (); } RK_ASSERT (window->getPart ()); RKWardMainWindow::getMain ()->partManager ()->addPart (window->getPart ()); } void RKWorkplace::detachWindow (RKMDIWindow *window, bool was_attached) { RK_TRACE (APP); if (!window) return; RK_ASSERT (windows.contains (window)); // Can't detach a window that is not registered window->prepareToBeDetached (); window->state = RKMDIWindow::Detached; RK_ASSERT (window->getPart ()); if (was_attached) { RKWardMainWindow::getMain ()->partManager ()->removePart (window->getPart ()); if (!window->isToolWindow ()) view ()->removeWindow (window); } DetachedWindowContainer *detached = new DetachedWindowContainer (window); detached->show (); if (!was_attached) window->activate (); } void RKWorkplace::addWindow (RKMDIWindow *window, bool attached) { RK_TRACE (APP); windows.append (window); connect (window, SIGNAL (destroyed (QObject *)), this, SLOT (removeWindow (QObject *))); connect (window, SIGNAL (windowActivated(RKMDIWindow*)), history, SLOT (windowActivated(RKMDIWindow*))); if (window->isToolWindow () && !window->tool_window_bar) return; if (attached) attachWindow (window); else detachWindow (window, false); } void RKWorkplace::placeToolWindows() { RK_TRACE (APP); foreach (const RKToolWindowList::ToolWindowRepresentation rep, RKToolWindowList::registeredToolWindows ()) { placeInToolWindowBar (rep.window, rep.default_placement); getHistory ()->popLastWindow (rep.window); // windows send a spurious activation signal triggered from KPartsManager::addPart(), so we pop them, again } } void RKWorkplace::placeInToolWindowBar (RKMDIWindow *window, int position) { RK_TRACE (APP); RK_ASSERT (window->isToolWindow ()); bool needs_registration = (!window->tool_window_bar && (position != RKToolWindowList::Nowhere)); if ((position < 0) || (position >= TOOL_WINDOW_BAR_COUNT)) { RK_ASSERT (position == RKToolWindowList::Nowhere); // should never happen... position = RKToolWindowList::Nowhere; // ... but let's set this explicitly, in case of a broken workplace representation } if (position == RKToolWindowList::Nowhere) { if (window->tool_window_bar) window->tool_window_bar->removeWidget (window); } else { tool_window_bars[position]->addWidget (window); } if (!windows.contains (window)) addWindow (window, true); // first time we see this window else if (needs_registration) attachWindow (window); } bool RKWorkplace::openAnyUrl (const KUrl &url, const QString &known_mimetype, bool force_external) { RK_TRACE (APP); #warning TODO support rkward:\/\/-protocol, here, too KMimeType::Ptr mimetype; if (!known_mimetype.isEmpty ()) mimetype = KMimeType::mimeType (known_mimetype); else mimetype = KMimeType::findByUrl (url); if (!force_external) { // NOTE: Currently a known mimetype implies that the URL is local or served from the local machine. // Thus, external web pages are *not* opened, here. Which is the behavior we want, although the implementation is ugly if (mimetype->is ("text/html")) { openHelpWindow (url, true); return true; // TODO } if (url.fileName ().toLower ().endsWith (".rdata")) { RKWardMainWindow::getMain ()->fileOpenAskSave (url); return true; // TODO } if (mimetype->name ().startsWith ("text")) { return (openScriptEditor (url, QString (), RKSettingsModuleCommandEditor::matchesScriptFileFilter (url.fileName()))); } } if (KMessageBox::questionYesNo (this, i18n ("The url you are trying to open ('%1') is not a local file or the filetype is not supported by RKWard. Do you want to open the url in the default application?", url.prettyUrl ()), i18n ("Open in default application?")) != KMessageBox::Yes) { return false; } KRun *runner = new KRun (url, topLevelWidget()); // according to KRun-documentation, KRun will self-destruct when done. runner->setRunExecutables (false); return false; } RKMDIWindow* RKWorkplace::openScriptEditor (const KUrl &url, const QString& encoding, bool use_r_highlighting, bool read_only, const QString &force_caption, bool delete_on_close) { RK_TRACE (APP); // is this url already opened? if (!url.isEmpty ()) { RKWorkplaceObjectList script_windows = getObjectList (RKMDIWindow::CommandEditorWindow, RKMDIWindow::AnyWindowState); for (RKWorkplaceObjectList::const_iterator it = script_windows.constBegin (); it != script_windows.constEnd (); ++it) { KUrl ourl = static_cast (*it)->url (); if (url == ourl) { (*it)->activate (); return (*it); } } } RKCommandEditorWindow *editor = new RKCommandEditorWindow (view (), use_r_highlighting); if (!url.isEmpty ()) { if (!editor->openURL (url, encoding, use_r_highlighting, read_only, delete_on_close)) { delete editor; KMessageBox::messageBox (view (), KMessageBox::Error, i18n ("Unable to open \"%1\"", url.prettyUrl ()), i18n ("Could not open command file")); return 0; } } if (!force_caption.isEmpty ()) editor->setCaption (force_caption); addWindow (editor); return (editor); } RKMDIWindow* RKWorkplace::openHelpWindow (const KUrl &url, bool only_once) { RK_TRACE (APP); if (url.isEmpty ()) { RK_ASSERT (false); return 0; } if (only_once) { RKWorkplaceObjectList help_windows = getObjectList (RKMDIWindow::HelpWindow, RKMDIWindow::AnyWindowState); for (RKWorkplaceObjectList::const_iterator it = help_windows.constBegin (); it != help_windows.constEnd (); ++it) { if (static_cast (*it)->url ().equals (url, KUrl::CompareWithoutTrailingSlash | KUrl::CompareWithoutFragment)) { (*it)->activate (); return (*it); } } } RKHTMLWindow *hw = new RKHTMLWindow (view (), RKHTMLWindow::HTMLHelpWindow); hw->openURL (url); addWindow (hw); return (hw); } RKMDIWindow* RKWorkplace::openOutputWindow (const KUrl &url) { RK_TRACE (APP); RKHTMLWindow *w = RKOutputWindowManager::self ()->getCurrentOutputWindow (); if (!windows.contains (w)) { addWindow (w); } else { w->activate (); } return (w); } void RKWorkplace::newX11Window (WId window_to_embed, int device_number) { RK_TRACE (APP); RKCaughtX11Window *window = new RKCaughtX11Window (window_to_embed, device_number); window->state = RKMDIWindow::Detached; addWindow (window, false); } void RKWorkplace::newObjectViewer (RObject *object) { RK_TRACE (APP); RK_ASSERT (object); RKWorkplaceObjectList object_windows = getObjectList (RKMDIWindow::ObjectWindow, RKMDIWindow::AnyWindowState); for (RKWorkplaceObjectList::const_iterator it = object_windows.constBegin (); it != object_windows.constEnd (); ++it) { if (static_cast (*it)->object () == object) { (*it)->activate (); return; } } RObjectViewer *ov = new RObjectViewer (view (), object); addWindow (ov); } bool RKWorkplace::canEditObject (RObject *object) { RK_TRACE (APP); if (object->isDataFrame ()) { return true; } else if (object->isVariable () && object->parentObject ()->isDataFrame ()) { return true; } return false; } RKEditor* RKWorkplace::editNewDataFrame (const QString &name) { RK_TRACE (APP); RKEditorDataFrame* ed = new RKEditorDataFrame (name, 0); addWindow (ed); ed->activate (); return ed; } RKEditor *RKWorkplace::editObject (RObject *object) { RK_TRACE (APP); RK_ASSERT (object); RObject *iobj = object; RKEditor *ed = 0; RKEditor *existing_editor = object->editor (); if (!existing_editor) { if (!iobj->isDataFrame ()) { if (iobj->isVariable () && iobj->parentObject ()->isDataFrame ()) { iobj = iobj->parentObject (); } else { return 0; } } unsigned long size = 1; foreach (int dim, iobj->getDimensions ()) { size *= dim; } if ((RKSettingsModuleGeneral::warnLargeObjectThreshold () != 0) && (size > RKSettingsModuleGeneral::warnLargeObjectThreshold ())) { if (KMessageBox::warningContinueCancel (view (), i18n ("You are about to edit object \"%1\", which is very large (%2 fields). RKWard is not optimized to handle very large objects in the built in data editor. This will use a lot of memory, and - depending on your system - might be very slow. For large objects it is generally recommended to edit using command line means or to split into smaller chunks before editing. On the other hand, if you have enough memory, or the data is simple enough (numeric data is easier to handle, than factor), editing may not be a problem at all. You can configure this warning (or turn it off entirely) under Settings->Configure RKWard->General.\nReally edit object?", iobj->getFullName (), size), i18n ("About to edit very large object")) != KMessageBox::Continue) { return 0; } } ed = new RKEditorDataFrame (static_cast (iobj), 0); addWindow (ed); } else { ed = existing_editor; } ed->activate (); return ed; } void RKWorkplace::flushAllData () { RK_TRACE (APP); for (RKWorkplaceObjectList::const_iterator it = windows.constBegin (); it != windows.constEnd (); ++it) { if ((*it)->type == RKMDIWindow::DataEditorWindow) { static_cast (*it)->flushChanges (); } } } void RKWorkplace::closeWindow (RKMDIWindow *window) { RK_TRACE (APP); RK_ASSERT (windows.contains (window)); bool tool_window = window->isToolWindow (); window->close (true); // all the rest should happen in removeWindow () if (tool_window) windowRemoved (); // for regular windows, this happens in removeWindow(), already } void RKWorkplace::closeActiveWindow () { RK_TRACE (APP); RKMDIWindow *w = activeWindow (RKMDIWindow::Attached); if (w) closeWindow (w); } RKWorkplace::RKWorkplaceObjectList RKWorkplace::getObjectList (int type, int state) { RK_TRACE (APP); RKWorkplaceObjectList ret; for (RKWorkplaceObjectList::const_iterator it = windows.constBegin (); it != windows.constEnd (); ++it) { if (((*it)->type & type) && ((*it)->state & state)) { ret.append ((*it)); } } return ret; } void RKWorkplace::closeAll (int type, int state) { RK_TRACE (APP); RKWardMainWindow::getMain ()->lockGUIRebuild (true); RKWorkplaceObjectList list_to_close = getObjectList (type, state); for (RKWorkplaceObjectList::const_iterator it = list_to_close.constBegin (); it != list_to_close.constEnd (); ++it) { closeWindow (*it); } RKWardMainWindow::getMain ()->lockGUIRebuild (false); } void RKWorkplace::removeWindow (QObject *object) { RK_TRACE (APP); RKMDIWindow *window = static_cast (object); // remove from history first (otherwise, we might find it there, when trying to activate a new window) history->removeWindow (window); // WARNING: the window is dead. Don't call any functions on it. RK_ASSERT (windows.contains (window)); windows.removeAll (window); // do this first! view()->removeWindow will call activePage() indirectly from setCaption, causing us to iterate over all known windows! if (view ()->hasWindow (window)) view ()->removeWindow (window, true); windowRemoved (); } void RKWorkplace::windowRemoved () { RK_TRACE (APP); if (activeWindow (RKMDIWindow::AnyWindowState) != 0) return; // something already active // try to activate an attached document window, first RKMDIWindow *window = view ()->activePage (); if (window) { window->activate (true); return; } // some document window in the history? Try that. window = history->previousDocumentWindow (); if (window) { window->activate (true); return; } // now try to activate an attached (tool) window, if one is visible for (RKWorkplaceObjectList::const_iterator it = windows.constBegin (); it != windows.constEnd (); ++it) { if ((*it)->isAttached ()) { if ((*it)->isVisible ()) { (*it)->activate (true); return; } } } // nothing, yet? Try *any* visible window for (RKWorkplaceObjectList::const_iterator it = windows.constBegin (); it != windows.constEnd (); ++it) { if ((*it)->isVisible ()) { (*it)->activate (true); return; } } // give up } RKMDIWindow *RKWorkplace::activeWindow (RKMDIWindow::State state) { RK_TRACE (APP); RKMDIWindow *ret = 0; for (RKWorkplaceObjectList::const_iterator it = windows.constBegin (); it != windows.constEnd (); ++it) { if (!(state & ((*it)->state))) continue; if ((*it)->isActive ()) { ret = *it; break; } } return (ret); } QStringList RKWorkplace::makeWorkplaceDescription () { RK_TRACE (APP); QStringList workplace_description; // first, save the base directory of the workplace. This allows us to cope better with moved workspaces while restoring. KUrl base_url = workspaceURL (); base_url.setPath (base_url.directory ()); if (base_url.isLocalFile () && base_url.hasPath ()) workplace_description.append ("base::::" + base_url.url ()); // window order in the workplace view may have changed with respect to our list. Thus we first generate a properly sorted list RKWorkplaceObjectList list = getObjectList (RKMDIWindow::DocumentWindow, RKMDIWindow::Detached); for (int i=0; i < wview->count (); ++i) { list.append (static_cast (wview->widget (i))); } list.append (getObjectList (RKMDIWindow::ToolWindow, RKMDIWindow::AnyWindowState)); foreach (RKMDIWindow *win, list) { QString type, specification; QStringList params; if (win->isType (RKMDIWindow::DataEditorWindow)) { type = "data"; specification = static_cast (win)->getObject ()->getFullName (); } else if (win->isType (RKMDIWindow::CommandEditorWindow)) { type = "script"; specification = static_cast (win)->url ().url (); } else if (win->isType (RKMDIWindow::OutputWindow)) { type = "output"; specification = static_cast (win)->url ().url (); } else if (win->isType (RKMDIWindow::HelpWindow)) { type = "help"; specification = static_cast (win)->restorableUrl ().url (); } else if (win->isToolWindow ()) { type = RKToolWindowList::idOfWindow (win); } if (!type.isEmpty ()) { if (!win->isAttached ()) { params.append (QString ("detached,") + QString::number (win->x ()) + ',' + QString::number (win->y ()) + ',' + QString::number (win->width ()) + ',' + QString::number (win->height ())); } if (win->isToolWindow ()) { int sidebar = RKToolWindowList::Nowhere; for (int i = 0; i < TOOL_WINDOW_BAR_COUNT; ++i) { if (win->tool_window_bar == tool_window_bars[i]) { sidebar = i; break; } } params.append (QString ("sidebar,") + QString::number (sidebar)); } workplace_description.append (type + "::" + params.join (":") + "::" + specification); } } return workplace_description; } void RKWorkplace::saveWorkplace (RCommandChain *chain) { RK_TRACE (APP); // TODO: This is still a mess. All workplace-related settings, including the workspaceConfig(), should be saved to a single place, and in // standard KConfig format. if (RKSettingsModuleGeneral::workplaceSaveMode () != RKSettingsModuleGeneral::SaveWorkplaceWithWorkspace) return; RKGlobals::rInterface ()->issueCommand ("rk.save.workplace(description=" + RObject::rQuote (makeWorkplaceDescription().join ("\n")) + ")", RCommand::App, i18n ("Save Workplace layout"), 0, 0, chain); } void RKWorkplace::restoreWorkplace (RCommandChain *chain) { RK_TRACE (APP); if (RKSettingsModuleGeneral::workplaceSaveMode () != RKSettingsModuleGeneral::SaveWorkplaceWithWorkspace) return; RKGlobals::rInterface ()->issueCommand ("rk.restore.workplace()", RCommand::App, i18n ("Restore Workplace layout"), 0, 0, chain); } KUrl checkAdjustRestoredUrl (const QString &_url, const QString old_base) { KUrl url (_url); if (old_base.isEmpty ()) return (url); KUrl new_base_url = RKWorkplace::mainWorkplace ()->workspaceURL (); new_base_url.setPath (new_base_url.directory ()); if (new_base_url.isEmpty ()) return (url); KUrl old_base_url (old_base); if (old_base_url == new_base_url) return (url); // TODO: Should we also care about non-local files? In theory: yes, but stat'ing remote files for existence can take a long time. if (!(old_base_url.isLocalFile () && new_base_url.isLocalFile () && url.isLocalFile ())) return (url); // if the file exists, unadjusted, return it. if (QFileInfo (url.toLocalFile ()).exists ()) return (url); // check whether a file exists for the adjusted url KUrl relative = KUrl::fromLocalFile (new_base_url.path () + '/' + KUrl::relativePath (old_base_url.path (), url.path ())); relative.cleanPath (); // if (QFileInfo (relative.toLocalFile ()).exists ()) return (relative); return (url); } void RKWorkplace::restoreWorkplace (const QStringList &description) { RK_TRACE (APP); RKWardMainWindow::getMain ()->lockGUIRebuild (true); QString base; for (int i = 0; i < description.size (); ++i) { // Item format for rkward <= 0.5.4: "type:specification" // Item format for rkward <= 0.5.5: "type::[optional_params1[:optional_params2[:...]]]::specification" int typeend = description[i].indexOf (':'); if ((typeend < 0) || (typeend >= (description[i].size () - 1))) { RK_ASSERT (false); continue; } QString type, specification; QStringList params; type = description[i].left (typeend); if (description[i].at (typeend + 1) == ':') { // rkward 0.5.5 or later int specstart = description[i].indexOf ("::", typeend + 2); if (specstart < typeend) { RK_ASSERT (false); continue; } params = description[i].mid (typeend + 2, specstart - typeend - 2).split (':', QString::SkipEmptyParts); specification = description[i].mid (specstart + 2); } else { specification = description[i].mid (typeend + 1); } RKMDIWindow *win = 0; if (type == "base") { RK_ASSERT (i == 0); base = specification; } else if (type == "data") { RObject *object = RObjectList::getObjectList ()->findObject (specification); if (object) win = editObject (object); } else if (type == "script") { win = openScriptEditor (checkAdjustRestoredUrl (specification, base)); } else if (type == "output") { win = openOutputWindow (checkAdjustRestoredUrl (specification, base)); } else if (type == "help") { win = openHelpWindow (checkAdjustRestoredUrl (specification, base), true); } else { win = RKToolWindowList::findToolWindowById (type); RK_ASSERT (win); } // apply generic window parameters if (win) { for (int p = 0; p < params.size (); ++p) { if (params[p].startsWith ("sidebar")) { int position = params[p].section (',', 1).toInt (); placeInToolWindowBar (win, position); } if (params[p].startsWith ("detached")) { QStringList geom = params[p].split (','); win->hide (); win->setGeometry (geom.value (1).toInt (), geom.value (2).toInt (), geom.value (3).toInt (), geom.value (4).toInt ()); detachWindow (win); } } } } RKWardMainWindow::getMain ()->lockGUIRebuild (false); } ///////////////////////// END RKWorkplace //////////////////////////// ///////////////////// BEGIN RKMDIWindowHistory /////////////////////// #include "../misc/rkstandardicons.h" #include class RKMDIWindowHistoryWidget : public QListWidget { public: RKMDIWindowHistoryWidget () : QListWidget (0) { RK_TRACE (APP); current = 0; setFocusPolicy (Qt::StrongFocus); setWindowFlags (Qt::Popup); } ~RKMDIWindowHistoryWidget () { RK_TRACE (APP); } void update (const QList windows) { RK_TRACE (APP); clear (); _windows = windows; for (int i = windows.count () - 1; i >= 0; --i) { // most recent top RKMDIWindow *win = windows[i]; QListWidgetItem *item = new QListWidgetItem (this); item->setIcon (RKStandardIcons::iconForWindow (win)); item->setText (win->windowTitle ()); } if (current >= count ()) current = count () - 1; if (current < 0) { hide (); return; } setCurrentRow (current); } void next () { RK_TRACE (APP); if (--current < 0) current = count () - 1; setCurrentRow (current); } void prev () { RK_TRACE (APP); if (++current >= count ()) current = 0; setCurrentRow (current); } private: void focusOutEvent (QFocusEvent *) { RK_TRACE (APP); deleteLater (); } void keyReleaseEvent (QKeyEvent *ev) { RK_TRACE (APP); if (ev->modifiers () == Qt::NoModifier) { commit (); } } void mouseReleaseEvent (QMouseEvent *ev) { RK_TRACE (APP); // HACK to get by without slots, and the associated moc'ing QListWidget::mouseReleaseEvent (ev); commit (); } void commit () { RK_TRACE (APP); current = currentRow (); if ((current > 0) && (current < count ())) { RKMDIWindow *win = _windows.value (count () - 1 - current); RK_ASSERT (win); win->activate (true); } deleteLater (); } int current; QList _windows; }; RKMDIWindowHistory::RKMDIWindowHistory (QObject *parent) : QObject (parent) { RK_TRACE (APP); switcher = 0; } RKMDIWindowHistory::~RKMDIWindowHistory () { RK_TRACE (APP); RK_DEBUG (APP, DL_DEBUG, "Remaining windows in history: %d", recent_windows.count ()); } void RKMDIWindowHistory::windowActivated (RKMDIWindow *window) { RK_TRACE (APP); if (!window) return; if (!recent_windows.isEmpty () && (window == recent_windows.last ())) return; // update lists recent_windows.removeAll (window); // remove dupes recent_windows.append (window); updateSwitcher (); } void RKMDIWindowHistory::next (KAction* prev_action, KAction *next_action) { RK_TRACE (APP); if (recent_windows.isEmpty ()) return; getSwitcher (prev_action, next_action)->next (); } void RKMDIWindowHistory::prev (KAction* prev_action, KAction *next_action) { RK_TRACE (APP); if (recent_windows.isEmpty ()) return; getSwitcher (prev_action, next_action)->prev (); } RKMDIWindow* RKMDIWindowHistory::previousDocumentWindow () { RK_TRACE (APP); for (int i = recent_windows.count () - 1; i >= 0; --i) { if (!recent_windows[i]->isToolWindow ()) return (recent_windows[i]); } return 0; } void RKMDIWindowHistory::updateSwitcher () { RK_TRACE (APP); if (switcher) switcher->update (recent_windows); } void RKMDIWindowHistory::removeWindow (RKMDIWindow *window) { RK_TRACE (APP); recent_windows.removeAll (window); updateSwitcher (); } RKMDIWindowHistoryWidget* RKMDIWindowHistory::getSwitcher (KAction* prev_action, KAction *next_action) { RK_TRACE (APP); if (switcher) return switcher; switcher = new RKMDIWindowHistoryWidget (); connect (switcher, SIGNAL (destroyed(QObject*)), this, SLOT (switcherDestroyed())); switcher->addAction (prev_action); switcher->addAction (next_action); switcher->update (recent_windows); switcher->show (); QWidget *act = QApplication::activeWindow (); if (act) { int center_x = act->x () + act->width () / 2; int center_y = act->y () + act->height () / 2; switcher->move (center_x - switcher->width () / 2, center_y - switcher->height () / 2); } else { RK_ASSERT (false); } switcher->setFocus (); return switcher; } void RKMDIWindowHistory::switcherDestroyed () { RK_TRACE (APP); RK_ASSERT (switcher); switcher = 0; } void RKMDIWindowHistory::popLastWindow (RKMDIWindow* match) { RK_TRACE (APP); if (recent_windows.isEmpty ()) return; else if (recent_windows.last () == match) recent_windows.removeLast (); updateSwitcher (); } #include "rkworkplace.moc" rkward-0.6.1/rkward/windows/detachedwindowcontainer.cpp0000644000175000017500000001340112124345411022740 0ustar thomasthomas/*************************************************************************** detachedwindowcontainer - description ------------------- begin : Wed Oct 21 2005 copyright : (C) 2005, 2007, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "detachedwindowcontainer.h" #include #include #include #include #include #include #include #include #include #include "rktoplevelwindowgui.h" #include "../rkward.h" #include "../misc/rkstandardicons.h" #include "../misc/rkxmlguisyncer.h" #include "rkworkplace.h" #include "../rkglobals.h" #include "../debug.h" /* Warning! Do not pass a parent widget to the KParts::MainWindow. Otherwise there will be strange crahes while removing the KXMLGUIClients! (In this case: Open a help window, and detach it. Open another help window attached. Close the detached one, then close the attached one -> crash; KDE 3.5.5) */ DetachedWindowContainer::DetachedWindowContainer (RKMDIWindow *widget_to_capture) : KParts::MainWindow () { RK_TRACE (APP); actionCollection ()->addAction (KStandardAction::Close, "dwindow_close", this, SLOT(close())); QAction *reattach = actionCollection ()->addAction ("dwindow_attach", this, SLOT(slotReattach())); reattach->setText (i18n ("Attach to main window")); reattach->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionAttachWindow)); setHelpMenuEnabled (false); // create own GUI setXMLFile ("detachedwindowcontainer.rc"); insertChildClient (toplevel_actions = new RKTopLevelWindowGUI (this)); statusBar ()->hide (); createShellGUI (true); RKXMLGUISyncer::self ()->watchXMLGUIClientUIrc (this); // copy main window toolbar settings QMap main_window_toolbar_styles; foreach (KToolBar *bar, RKWardMainWindow::getMain ()->toolBars ()) { main_window_toolbar_styles.insert (bar->objectName (), bar->toolButtonStyle ()); } // capture widget // NOTE: If the window has not been shown, before, its geometry() is always 640*480, unconditionally. setGeometry (widget_to_capture->frameGeometry ()); if (!widget_to_capture->isWindow ()) move (widget_to_capture->mapToGlobal (widget_to_capture->pos ())); #ifdef Q_WS_WIN // fix for detached tool windows positioned with the frame outside the screen ensurePolished (); QPoint adjust = pos (); if (adjust.x () < 0) adjust.setX (0); if (adjust.y () < 0) adjust.setY (0); if (adjust != pos ()) move (adjust); #endif widget_to_capture->setParent (this); setCentralWidget (widget_to_capture); widget_to_capture->show (); createGUI (widget_to_capture->getPart ()); captured = widget_to_capture; hideEmptyMenus (); // hide empty menus now, and after any reloads // the signal is available since KDE 4.1.3, but we can tolerate a bit of aesthethic malfunction on earlier versions connect (guiFactory (), SIGNAL(makingChanges(bool)), this, SLOT(hideEmptyMenus(bool))); // sanitize toolbars foreach (KToolBar *bar, toolBars ()) { if (main_window_toolbar_styles.contains (bar->objectName ())) { bar->setToolButtonStyle (main_window_toolbar_styles[bar->objectName ()]); } else { RK_ASSERT (false); } } // should self-destruct, when child widget is destroyed connect (widget_to_capture, SIGNAL (destroyed (QObject *)), this, SLOT (viewDestroyed (QObject *))); connect (widget_to_capture, SIGNAL (captionChanged (RKMDIWindow *)), this, SLOT (updateCaption (RKMDIWindow *))); setCaption (widget_to_capture->fullCaption ()); // has to come after createGUI! } DetachedWindowContainer::~DetachedWindowContainer () { RK_TRACE (APP); } void DetachedWindowContainer::hideEmptyMenus (bool ignore) { if (ignore) return; RK_TRACE (APP); // remove empty menus (we had to define them in detachedwindowcontainer.rc in order to force a sane menu order) QStringList menu_names; menu_names << "file" << "device" << "history" << "edit" << "run" << "view" << "settings"; foreach (QString name, menu_names) { QMenu* menu = dynamic_cast(guiFactory ()->container (name, this)); if (menu) menu->menuAction ()->setVisible (!menu->isEmpty ()); } } void DetachedWindowContainer::viewDestroyed (QObject *) { RK_TRACE (APP); hide (); deleteLater (); } void DetachedWindowContainer::updateCaption (RKMDIWindow *widget) { RK_TRACE (APP); RK_ASSERT (widget == captured); setCaption (widget->fullCaption ()); } void DetachedWindowContainer::slotSetStatusBarText (const QString &text) { RK_TRACE (APP); QString ntext = text.trimmed (); ntext.replace ("", ""); // WORKAROUND: what the ?!? is going on? The KTHMLPart seems to post such messages. statusBar ()->showMessage (ntext); statusBar ()->show (); } void DetachedWindowContainer::slotReattach () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->attachWindow (captured); } void DetachedWindowContainer::closeEvent (QCloseEvent *e) { RK_TRACE (APP); if (captured->close (true)) { e->accept (); } else { e->ignore (); } } #include "detachedwindowcontainer.moc" rkward-0.6.1/rkward/windows/rkhtmlwindow.cpp0000644000175000017500000007452412124345411020612 0ustar thomasthomas/*************************************************************************** rkhtmlwindow - description ------------------- begin : Wed Oct 12 2005 copyright : (C) 2005-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkhtmlwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "rkhelpsearchwindow.h" #include "../rkward.h" #include "../rkconsole.h" #include "../settings/rksettingsmodulegeneral.h" #include "../settings/rksettingsmoduler.h" #include "../settings/rksettingsmoduleoutput.h" #include "../misc/rkcommonfunctions.h" #include "../misc/rkstandardactions.h" #include "../misc/rkstandardicons.h" #include "../misc/xmlhelper.h" #include "../misc/rkxmlguisyncer.h" #include "../misc/rkprogresscontrol.h" #include "../plugin/rkcomponentmap.h" #include "../windows/rkworkplace.h" #include "../windows/rkworkplaceview.h" #include "../debug.h" RKHTMLWindow::RKHTMLWindow (QWidget *parent, WindowMode mode) : RKMDIWindow (parent, RKMDIWindow::HelpWindow) { RK_TRACE (APP); scroll_position=-1; setComponentData (KGlobal::mainComponent ()); khtmlpart = new KHTMLPart (this, 0, KHTMLPart::BrowserViewGUI); setPart (khtmlpart); fixupPartGUI (); // WORKAROUND for annoying kdelibs bug in KDE 4.6: https://sourceforge.net/tracker/?func=detail&atid=459007&aid=3310106&group_id=50231 // NOTE: Fixed in KDE 4.7. See http://git.reviewboard.kde.org/r/101491/ QAction *action = khtmlpart->action ("findAheadText"); if (action) action->setShortcutContext (Qt::WidgetWithChildrenShortcut); // WORKAROUND end initializeActivationSignals (); RKXMLGUISyncer::self()->registerChangeListener (khtmlpart, this, SLOT (fixupPartGUI())); khtmlpart->setSelectable (true); setFocusProxy (khtmlpart->widget ()); khtmlpart->widget ()->setFocusPolicy (Qt::StrongFocus); khtmlpart->widget ()->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding); QHBoxLayout *pLayout = new QHBoxLayout (this); pLayout->setContentsMargins (0, 0, 0, 0); pLayout->addWidget (khtmlpart->widget ()); // We have to connect this in order to allow browsing. connect (khtmlpart->browserExtension (), SIGNAL (openUrlRequestDelayed (const KUrl&, const KParts::OpenUrlArguments&, const KParts::BrowserArguments&)), this, SLOT (slotOpenUrl (const KUrl&, const KParts::OpenUrlArguments&, const KParts::BrowserArguments&))); connect (khtmlpart, SIGNAL (completed ()), this, SLOT (loadDone ())); connect (khtmlpart->browserExtension (), SIGNAL (openUrlNotify()), this, SLOT (internalNavigation())); // to catch internal navigation on a page current_history_position = -1; url_change_is_from_history = false; initActions (); window_mode = Undefined; useMode (mode); } RKHTMLWindow::~RKHTMLWindow () { RK_TRACE (APP); // WORKAROUND for annoying kdelibs bug (KDE 4.0 up to at least KDE 4.6): Status bar icons added by plugins typically do not get deleted in case the KParts::StatusBarExtension // has already been deleted, first. See http://www.mail-archive.com/rkward-devel@lists.sourceforge.net/msg01345.html . Therefore, delete the plugins, explicitely, while the // StatusBarExtension is still alive... QList plugins = KParts::Plugin::pluginObjects (khtmlpart); foreach (KParts::Plugin *plugin, plugins) { delete plugin; } // I hope this does not come back to bite us one day... If it does, here's a safer variant, which simply hides the problem (the way it is hidden in konqueror, among others): // RKWardMainWindow::getMain ()->partManager ()->setActivePart (0); // WORKAROUND end delete khtmlpart; } void RKHTMLWindow::fixupPartGUI () { RK_TRACE (APP); // strip down the khtmlpart's GUI. remove some stuff we definitely don't need. RKCommonFunctions::removeContainers (khtmlpart, QString ("tools,security,extraToolBar,saveBackground,saveFrame,printFrame,kget_menu").split (','), true); } KUrl RKHTMLWindow::restorableUrl () { RK_TRACE (APP); return (current_url.url ().replace (RKSettingsModuleR::helpBaseUrl(), "rkward://RHELPBASE")); } bool RKHTMLWindow::isModified () { RK_TRACE (APP); return false; } void RKHTMLWindow::initActions () { RK_TRACE (APP); // common actions actionCollection ()->addAction (KStandardAction::Copy, "copy", khtmlpart->browserExtension (), SLOT (copy ())); print = actionCollection ()->addAction (KStandardAction::Print, "print_html", this, SLOT (slotPrint())); run_selection = RKStandardActions::runSelection (this, this, SLOT (runSelection())); // needed to enable / disable the run selection action connect (khtmlpart, SIGNAL (selectionChanged()), this, SLOT (selectionChanged())); selectionChanged (); // help window actions back = actionCollection ()->addAction (KStandardAction::Back, "help_back", this, SLOT (slotBack())); back->setEnabled (false); forward = actionCollection ()->addAction (KStandardAction::Forward, "help_forward", this, SLOT (slotForward())); forward->setEnabled (false); // output window actions outputFlush = actionCollection ()->addAction ("output_flush", this, SLOT (flushOutput())); outputFlush->setText (i18n ("&Flush Output")); outputFlush->setIcon (KIcon ("edit-delete")); outputRefresh = actionCollection ()->addAction ("output_refresh", this, SLOT (refresh())); outputRefresh->setText (i18n ("&Refresh Output")); outputRefresh->setIcon (KIcon ("view-refresh")); } void RKHTMLWindow::selectionChanged () { RK_TRACE (APP); if (!run_selection) { RK_ASSERT (false); return; } run_selection->setEnabled (khtmlpart->hasSelection ()); } void RKHTMLWindow::runSelection () { RK_TRACE (APP); RKConsole::pipeUserCommand (khtmlpart->selectedText ()); } void RKHTMLWindow::doGotoAnchor (const QString &anchor_name) { RK_TRACE (APP); goto_anchor_name = anchor_name; QTimer::singleShot (0, this, SLOT (doGotoAnchorNow ())); } void RKHTMLWindow::doGotoAnchorNow () { RK_TRACE (APP); khtmlpart->gotoAnchor (goto_anchor_name); } void RKHTMLWindow::slotPrint () { RK_TRACE (APP); khtmlpart->view ()->print (); } void RKHTMLWindow::openLocationFromHistory (const VisitedLocation &loc) { RK_TRACE (APP); RK_ASSERT (window_mode == HTMLHelpWindow); int history_last = url_history.count () - 1; RK_ASSERT (current_history_position >= 0); RK_ASSERT (current_history_position <= history_last); if (loc.url == khtmlpart->url ()) { khtmlpart->view()->setContentsPos (0, loc.y_offset); } else { url_change_is_from_history = true; KParts::OpenUrlArguments args; args.setYOffset (loc.y_offset); khtmlpart->setArguments (args); openURL (loc.url); url_change_is_from_history = false; } back->setEnabled (current_history_position > 0); forward->setEnabled (current_history_position < history_last); } void RKHTMLWindow::slotForward () { RK_TRACE (APP); ++current_history_position; openLocationFromHistory (url_history[current_history_position]); } void RKHTMLWindow::slotBack () { RK_TRACE (APP); // if going back from the end of the history, save that position, first. if (current_history_position >= (url_history.count () - 1)) { changeURL (khtmlpart->url ()); --current_history_position; } --current_history_position; openLocationFromHistory (url_history[current_history_position]); } bool RKHTMLWindow::handleRKWardURL (const KUrl &url) { RK_TRACE (APP); if (url.protocol () == "rkward") { if (url.host () == "runplugin") { QString path = url.path (); if (path.startsWith ('/')) path = path.mid (1); int sep = path.indexOf ('/'); RKComponentMap::invokeComponent (path.left (sep), path.mid (sep+1).split ('\n', QString::SkipEmptyParts)); return true; } else { if (url.host () == "rhelp") { // TODO: find a nice solution to render this in the current window RKHelpSearchWindow::mainHelpSearch ()->getFunctionHelp (url.path ().mid (1)); return true; } changeURL (url); bool ok = false; if (url.host () == "component") { ok = renderRKHelp (url); } else if (url.host () == "page") { ok = renderRKHelp (url); } else if (url.host ().toUpper () == "RHELPBASE") { // NOTE: QUrl () may lowercase the host part, internally KUrl fixed_url = KUrl (RKSettingsModuleR::helpBaseUrl ()); fixed_url.setPath (url.path ()); if (url.hasQuery ()) fixed_url.setQuery (url.query ()); if (url.hasFragment ()) fixed_url.setFragment (url.fragment ()); ok = openURL (fixed_url); } if (!ok) { fileDoesNotExistMessage (); } return true; } } return false; } bool RKHTMLWindow::openURL (const KUrl &url) { RK_TRACE (APP); if (handleRKWardURL (url)) return true; if (window_mode == HTMLOutputWindow) { if (url != current_url) { // output window should not change url after initialization if (!current_url.isEmpty ()) { RK_ASSERT (false); return false; } current_url = url; // needs to be set before registering RKOutputWindowManager::self ()->registerWindow (this); } } if (url.isLocalFile () && (KMimeType::findByUrl (url)->is ("text/html") || window_mode == HTMLOutputWindow)) { changeURL (url); QFileInfo out_file (url.toLocalFile ()); bool ok = out_file.exists(); if (ok) { khtmlpart->openUrl (url); } else { fileDoesNotExistMessage (); } return ok; } if (url_change_is_from_history || url.protocol ().toLower ().startsWith ("help")) { // handle help pages, and any page that we have previously handled (from history) changeURL (url); khtmlpart->openUrl (url); return true; } // special casing for R's dynamic help pages. These should be considered local, even though they are served through http if (url.protocol ().toLower ().startsWith ("http")) { QString host = url.host (); if ((host == "127.0.0.1") || (host == "localhost") || host == QHostInfo::localHostName ()) { KIO::TransferJob *job = KIO::get (url, KIO::Reload); connect (job, SIGNAL (mimetype(KIO::Job*, const QString&)), this, SLOT (mimeTypeDetermined(KIO::Job*, const QString&))); return true; } } RKWorkplace::mainWorkplace ()->openAnyUrl (url, QString (), KMimeType::findByUrl (url)->is ("text/html")); // NOTE: text/html type urls, which we have not handled, above, are forced to be opened externally, to avoid recursion. E.g. help:// protocol urls. return true; } KUrl RKHTMLWindow::url () { return current_url; } void RKHTMLWindow::mimeTypeDetermined (KIO::Job* job, const QString& type) { RK_TRACE (APP); KIO::TransferJob* tj = static_cast (job); KUrl url = tj->url (); tj->putOnHold (); if (type == "text/html") { changeURL (url); khtmlpart->openUrl (url); } else { RKWorkplace::mainWorkplace ()->openAnyUrl (url, type); } } void RKHTMLWindow::internalNavigation () { RK_TRACE (APP); changeURL (khtmlpart->url ()); } void RKHTMLWindow::changeURL (const KUrl &url) { current_url = url; updateCaption (url); if (!url_change_is_from_history) { if (window_mode == HTMLHelpWindow) { if (current_history_position >= 0) { // skip initial blank page url_history = url_history.mid (0, current_history_position); VisitedLocation loc; loc.url = khtmlpart->url (); KParts::OpenUrlArguments args = khtmlpart->arguments (); loc.y_offset = args.yOffset (); url_history.append (loc); } ++current_history_position; back->setEnabled (current_history_position > 0); forward->setEnabled (false); } } } void RKHTMLWindow::updateCaption (const KUrl &url) { RK_TRACE (APP); if (window_mode == HTMLOutputWindow) setCaption (i18n ("Output %1").arg (url.fileName ())); else setCaption (url.fileName ()); } void RKHTMLWindow::slotOpenUrl (const KUrl & url, const KParts::OpenUrlArguments &, const KParts::BrowserArguments &) { RK_TRACE (APP); openURL (url); } void RKHTMLWindow::refresh () { RK_TRACE (APP); KParts::OpenUrlArguments args; args.setReload (true); // this forces the next openURL to reload all images khtmlpart->setArguments (args); scroll_position = khtmlpart->view ()->contentsY (); openURL (current_url); } void RKHTMLWindow::loadDone () { RK_TRACE (APP); if (window_mode == HTMLOutputWindow) { // scroll to bottom khtmlpart->view ()->setContentsPos (0, khtmlpart->view ()->contentsHeight ()); } else { // scroll to previous pos if (scroll_position >= 0) khtmlpart->view()->setContentsPos (0, scroll_position); scroll_position = -1; } } void RKHTMLWindow::useMode (WindowMode new_mode) { RK_TRACE (APP); RK_ASSERT (new_mode != Undefined); if (window_mode == new_mode) return; if (new_mode == HTMLOutputWindow) { type = RKMDIWindow::OutputWindow | RKMDIWindow::DocumentWindow; setWindowIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowOutput)); print->setText (i18n ("Print output")); QAction *action = khtmlpart->action ("saveDocument"); if (action) action->setText (i18n ("Export page as HTML")); else RK_ASSERT (false); // we should know about this setXMLFile ("rkoutputwindow.rc"); setMetaInfo (i18n ("Output Window"), "rkward://page/rkward_output", RKSettings::PageOutput); run_selection->setVisible (false); } else { RK_ASSERT (new_mode == HTMLHelpWindow); type = RKMDIWindow::HelpWindow | RKMDIWindow::DocumentWindow; setWindowIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowHelp)); print->setText (i18n ("Print page")); QAction *action = khtmlpart->action ("saveDocument"); if (action) action->setText (i18n ("Save Output as HTML")); else RK_ASSERT (false); // we should know about this setXMLFile ("rkhelpwindow.rc"); run_selection->setVisible (true); } if (parentClient ()) khtmlpart->removeChildClient (this); khtmlpart->insertChildClient (this); updateCaption (current_url); window_mode = new_mode; } void RKHTMLWindow::fileDoesNotExistMessage () { RK_TRACE (APP); khtmlpart->begin(); if (window_mode == HTMLOutputWindow) { khtmlpart->write (i18n ("

    RKWard output file could not be found

    \n")); } else { khtmlpart->write ("

    " + i18n ("Page does not exist or is broken") + "

    "); } khtmlpart->end(); } void RKHTMLWindow::flushOutput () { RK_TRACE (APP); int res = KMessageBox::questionYesNo (this, i18n ("Do you really want to clear the output? This will also remove all image files used in the output. It will not be possible to restore it."), i18n ("Flush output?")); if (res==KMessageBox::Yes) { QFile out_file (current_url.toLocalFile ()); RCommand *c = new RCommand ("rk.flush.output (" + RCommand::rQuote (out_file.fileName ()) + ", ask=FALSE)\n", RCommand::App); connect (c->notifier (), SIGNAL (commandFinished(RCommand*)), this, SLOT (refresh())); RKProgressControl *status = new RKProgressControl (this, i18n ("Flushing output"), i18n ("Flushing output"), RKProgressControl::CancellableNoProgress); status->addRCommand (c, true); status->doNonModal (true); RKGlobals::rInterface ()->issueCommand (c); } } bool RKHTMLWindow::renderRKHelp (const KUrl &url) { RK_TRACE (APP); if (url.protocol () != "rkward") { RK_ASSERT (false); return (false); } useMode (HTMLHelpWindow); bool for_component = false; // is this a help page for a component, or a top-level help page? if (url.host () == "component") for_component = true; XMLHelper component_xml; XMLHelper help_xml; QStringList anchors, anchornames; RKComponentHandle *chandle = 0; QString help_file_name; QDomElement element; QDomElement component_doc_element; QString help_base_dir = RKCommonFunctions::getRKWardDataDir () + "pages/"; QString css_filename = QUrl::fromLocalFile (help_base_dir + "rkward_help.css").toString (); // determine help file, and prepare if (for_component) { chandle = componentPathToHandle (url.path ()); if (!chandle) return false; component_doc_element = component_xml.openXMLFile (chandle->getFilename (), DL_ERROR); if (component_doc_element.isNull ()) return false; element = component_xml.getChildElement (component_doc_element, "help", DL_ERROR); if (!element.isNull ()) { help_file_name = component_xml.getStringAttribute (element, "file", QString::null, DL_ERROR); if (!help_file_name.isEmpty ()) help_file_name = QFileInfo (chandle->getFilename ()).absoluteDir ().filePath (help_file_name); } } else { help_file_name = help_base_dir + url.path () + ".rkh"; } RK_DEBUG (APP, DL_DEBUG, "rendering help page for local file %s", help_file_name.toLatin1().data()); // open help file QDomElement help_doc_element = help_xml.openXMLFile (help_file_name, DL_ERROR); if (help_doc_element.isNull () && (!for_component)) return false; // initialize output, and set title khtmlpart->begin (url); QString page_title (i18n ("No Title")); if (for_component) { page_title = chandle->getLabel (); } else { element = help_xml.getChildElement (help_doc_element, "title", DL_WARNING); if (!element.isNull ()) { page_title = element.text (); } } khtmlpart->write ("" + page_title + "\n
    \n

    " + page_title + "

    \n"); if (help_doc_element.isNull ()) { RK_ASSERT (for_component); khtmlpart->write (i18n ("

    Help page missing

    \n

    The help page for this component has not yet been written (or is broken). Please consider contributing it.

    \n")); } if (for_component) { QString component_id = componentPathToId (url.path()); RKComponentHandle *handle = componentPathToHandle (url.path()); if (handle && handle->isAccessible ()) khtmlpart->write ("" + i18n ("Use %1 now", page_title) + ""); } // fix all elements containing an "src" attribute QDir base_path (QFileInfo (help_file_name).absolutePath()); XMLChildList src_elements = help_xml.findElementsWithAttribute (help_doc_element, "src", QString (), true, DL_DEBUG); for (XMLChildList::iterator it = src_elements.begin (); it != src_elements.end (); ++it) { QString src = (*it).attribute ("src"); if (KUrl::isRelativeUrl (src)) { src = "file://" + QDir::cleanPath (base_path.filePath (src)); (*it).setAttribute ("src", src); } } // render the sections element = help_xml.getChildElement (help_doc_element, "summary", DL_INFO); if (!element.isNull ()) { khtmlpart->write (startSection ("summary", i18n ("Summary"), QString (), &anchors, &anchornames)); khtmlpart->write (renderHelpFragment (element)); } element = help_xml.getChildElement (help_doc_element, "usage", DL_INFO); if (!element.isNull ()) { khtmlpart->write (startSection ("usage", i18n ("Usage"), QString (), &anchors, &anchornames)); khtmlpart->write (renderHelpFragment (element)); } XMLChildList section_elements = help_xml.getChildElements (help_doc_element, "section", DL_INFO); for (XMLChildList::iterator it = section_elements.begin (); it != section_elements.end (); ++it) { QString title = help_xml.getStringAttribute (*it, "title", QString (), DL_WARNING); QString shorttitle = help_xml.getStringAttribute (*it, "shorttitle", QString (), DL_DEBUG); QString id = help_xml.getStringAttribute (*it, "id", QString (), DL_WARNING); khtmlpart->write (startSection (id, title, shorttitle, &anchors, &anchornames)); khtmlpart->write (renderHelpFragment (*it)); } // the section "settings" is the most complicated, as the labels of the individual GUI items has to be fetched from the component description. Of course it is only meaningful for component help, and not rendered for top level help pages. if (for_component) { element = help_xml.getChildElement (help_doc_element, "settings", DL_INFO); if (!element.isNull ()) { khtmlpart->write (startSection ("settings", i18n ("GUI settings"), QString (), &anchors, &anchornames)); XMLChildList setting_elements = help_xml.getChildElements (element, QString (), DL_WARNING); for (XMLChildList::iterator it = setting_elements.begin (); it != setting_elements.end (); ++it) { if ((*it).tagName () == "setting") { QString id = help_xml.getStringAttribute (*it, "id", QString (), DL_WARNING); QString title = help_xml.getStringAttribute (*it, "title", QString (), DL_INFO); if (title.isEmpty ()) { QDomElement source_element = component_xml.findElementWithAttribute (component_doc_element, "id", id, true, DL_WARNING); if (source_element.isNull ()) RK_DEBUG (PLUGIN, DL_ERROR, "No such UI element: %s", qPrintable (id)); title = component_xml.getStringAttribute (source_element, "label", i18n ("Unnamed GUI element"), DL_WARNING); } khtmlpart->write ("

    " + title + "

    "); khtmlpart->write (renderHelpFragment (*it)); } else if ((*it).tagName () == "caption") { QString id = help_xml.getStringAttribute (*it, "id", QString (), DL_WARNING); QString title = help_xml.getStringAttribute (*it, "title", QString (), DL_INFO); QDomElement source_element = component_xml.findElementWithAttribute (component_doc_element, "id", id, true, DL_WARNING); if (source_element.isNull ()) RK_DEBUG (PLUGIN, DL_ERROR, "No such UI element: %s", qPrintable (id)); title = component_xml.getStringAttribute (source_element, "label", title, DL_WARNING); khtmlpart->write ("

    " + title + "

    "); } else { help_xml.displayError (&(*it), "Tag not allowed, here", DL_WARNING); } } } } // "related" section element = help_xml.getChildElement (help_doc_element, "related", DL_INFO); if (!element.isNull ()) { khtmlpart->write (startSection ("related", i18n ("Related functions and pages"), QString (), &anchors, &anchornames)); khtmlpart->write (renderHelpFragment (element)); } // "technical" section element = help_xml.getChildElement (help_doc_element, "technical", DL_INFO); if (!element.isNull ()) { khtmlpart->write (startSection ("technical", i18n ("Technical details"), QString (), &anchors, &anchornames)); khtmlpart->write (renderHelpFragment (element)); } if (for_component) { // "dependencies" section QList deps = chandle->getDependencies (); if (!deps.isEmpty ()) { khtmlpart->write (startSection ("dependencies", i18n ("Dependencies"), QString (), &anchors, &anchornames)); khtmlpart->write (RKComponentDependency::depsToHtml (deps)); } } // "about" section if (for_component) { element = component_xml.getChildElement (component_doc_element, "about", DL_INFO); if (element.isNull ()) { XMLHelper pluginmap_helper; element = pluginmap_helper.openXMLFile (chandle->getPluginmapFilename (), DL_ERROR); element = pluginmap_helper.getChildElement (element, "about", DL_INFO); } } else { element = help_xml.getChildElement (help_doc_element, "about", DL_INFO); } if (!element.isNull ()) { RKComponentAboutData about (element); khtmlpart->write (startSection ("about", i18n ("About"), QString (), &anchors, &anchornames)); khtmlpart->write (about.toHtml ()); } // create a navigation bar KUrl url_copy = url; QString navigation = i18n ("

    On this page:

    "); RK_ASSERT (anchornames.size () == anchors.size ()); for (int i = 0; i < anchors.size (); ++i) { QString anchor = anchors[i]; QString anchorname = anchornames[i]; if (!(anchor.isEmpty () || anchorname.isEmpty ())) { url_copy.setRef (anchor); navigation.append ("

    " + anchorname + "

    \n"); } } khtmlpart->write ("
    " + navigation + "
    "); khtmlpart->write ("\n"); khtmlpart->end (); QString ref = url.ref (); if (!ref.isEmpty ()) { doGotoAnchor (ref); } return (true); } QString RKHTMLWindow::renderHelpFragment (QDomElement &fragment) { RK_TRACE (APP); // prepare all internal links QDomNodeList link_nodes = fragment.elementsByTagName ("link"); for (int i=link_nodes.count (); i >= 0; --i) { QDomElement element = link_nodes.item (i).toElement (); if (element.isNull ()) continue; prepareHelpLink (&element); } // render to string QString ret; QTextStream stream (&ret, QIODevice::WriteOnly); for (QDomNode node = fragment.firstChild (); !node.isNull (); node = node.nextSibling ()) { node.save (stream, 0); } ret.prepend ("

    "); ret.append ("

    "); ret.replace ("\n\n", "

    \n

    "); RK_DEBUG (APP, DL_DEBUG, "%s", ret.toLatin1 ().data ()); return ret; } void RKHTMLWindow::prepareHelpLink (QDomElement *link_element) { RK_TRACE (APP); link_element->setTagName ("a"); if (link_element->text ().isEmpty ()) { QString text; KUrl url = link_element->attribute ("href"); if (url.protocol () == "rkward") { if (url.host () == "component") { RKComponentHandle *chandle = componentPathToHandle (url.path ()); if (chandle) text = chandle->getLabel (); } else if (url.host () == "rhelp") { text = i18n ("R Reference on '%1'", url.path ().mid (1)); } else if (url.host () == "page") { QString help_base_dir = RKCommonFunctions::getRKWardDataDir () + "pages/"; QString help_file_name = help_base_dir + url.path () + ".rkh"; XMLHelper *xml = new XMLHelper (); QDomElement doc_element = xml->openXMLFile (help_file_name, DL_WARNING); QDomElement title_element = xml->getChildElement (doc_element, "title", DL_WARNING); text = title_element.text (); delete xml; } if (text.isEmpty ()) { text = i18n ("BROKEN REFERENCE"); RK_DEBUG (APP, DL_WARNING, "Broken reference to %s", url.path ().toLatin1 ().data ()); } link_element->appendChild (link_element->ownerDocument ().createTextNode (text)); } } } QString RKHTMLWindow::componentPathToId (QString path) { RK_TRACE (APP); QStringList path_segments = path.split ('/', QString::SkipEmptyParts); if (path_segments.count () > 2) return 0; if (path_segments.count () < 1) return 0; if (path_segments.count () == 1) path_segments.push_front ("rkward"); RK_ASSERT (path_segments.count () == 2); return (path_segments.join ("::")); } RKComponentHandle *RKHTMLWindow::componentPathToHandle (QString path) { RK_TRACE (APP); return (RKComponentMap::getComponentHandle (componentPathToId (path))); } QString RKHTMLWindow::startSection (const QString &name, const QString &title, const QString &shorttitle, QStringList *anchors, QStringList *anchor_names) { QString ret = ""; ret.append ("

    " + title + "

    \n"); anchors->append (name); if (!shorttitle.isNull ()) anchor_names->append (shorttitle); else anchor_names->append (title); return (ret); } ///////////////////////////////////// ///////////////////////////////////// // static RKOutputWindowManager* RKOutputWindowManager::_self = 0; RKOutputWindowManager* RKOutputWindowManager::self () { if (!_self) { RK_TRACE (APP); _self = new RKOutputWindowManager (); } return _self; } RKOutputWindowManager::RKOutputWindowManager () : QObject () { RK_TRACE (APP); file_watcher = new KDirWatch (this); connect (file_watcher, SIGNAL (dirty(const QString&)), this, SLOT (fileChanged(const QString&))); connect (file_watcher, SIGNAL (created(const QString&)), this, SLOT (fileChanged(const QString&))); } RKOutputWindowManager::~RKOutputWindowManager () { RK_TRACE (APP); file_watcher->removeFile (current_default_path); delete (file_watcher); } void RKOutputWindowManager::registerWindow (RKHTMLWindow *window) { RK_TRACE (APP); RK_ASSERT (window->mode () == RKHTMLWindow::HTMLOutputWindow); KUrl url = window->url (); if (!url.isLocalFile ()) { RK_ASSERT (false); // should not happen right now, but might be an ok condition in the future. We can't monitor non-local files, though. return; } url.cleanPath (); QString file = url.toLocalFile (); if (!windows.contains (file, window)) { if (!windows.contains (file)) { if (file != current_default_path) file_watcher->addFile (file); } windows.insertMulti (file, window); connect (window, SIGNAL (destroyed(QObject*)), this, SLOT (windowDestroyed(QObject*))); } else { RK_ASSERT (false); } } void RKOutputWindowManager::setCurrentOutputPath (const QString &_path) { RK_TRACE (APP); KUrl url = KUrl::fromLocalFile (_path); url.cleanPath (); QString path = url.toLocalFile (); if (path == current_default_path) return; if (!windows.contains (path)) { file_watcher->addFile (path); } if (!windows.contains (current_default_path)) { file_watcher->removeFile (current_default_path); } current_default_path = path; } RKHTMLWindow* RKOutputWindowManager::getCurrentOutputWindow () { RK_TRACE (APP); RKHTMLWindow *current_output = windows.value (current_default_path); if (!current_output) { current_output = new RKHTMLWindow (RKWorkplace::mainWorkplace ()->view (), RKHTMLWindow::HTMLOutputWindow); current_output->openURL (KUrl::fromLocalFile (current_default_path)); RK_ASSERT (current_output->url ().toLocalFile () == current_default_path); } return current_output; } void RKOutputWindowManager::fileChanged (const QString &path) { RK_TRACE (APP); RKHTMLWindow *w = 0; QList window_list = windows.values (path); for (int i = 0; i < window_list.size (); ++i) { window_list[i]->refresh (); w = window_list[i]; } if (w) { if (RKSettingsModuleOutput::autoRaise ()) w->activate (); } else { RK_ASSERT (path == current_default_path); if (RKSettingsModuleOutput::autoShow ()) RKWorkplace::mainWorkplace ()->openOutputWindow (path); } } void RKOutputWindowManager::windowDestroyed (QObject *window) { RK_TRACE (APP); // warning: Do not call any methods on the window. It is half-destroyed, already. RKHTMLWindow *w = static_cast (window); QString path = windows.key (w); windows.remove (path, w); // if there are no further windows for this file, stop listening if ((path != current_default_path) && (!windows.contains (path))) { file_watcher->removeFile (path); } } #include "rkhtmlwindow.moc" rkward-0.6.1/rkward/windows/rkcatchedx11windowpart.rc0000644000175000017500000000247712124345411022302 0ustar thomasthomas &Device &History &View rkward-0.6.1/rkward/windows/rkdebugmessagewindow.cpp0000644000175000017500000001137512124345411022274 0ustar thomasthomas/*************************************************************************** rkdebugmessagewindow - description ------------------- begin : Sat Dec 01 2012 copyright : (C) 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkdebugmessagewindow.h" #include #include #include #include #include #include #include #include "../misc/rkdummypart.h" #include "../debug.h" RKDebugMessageWindow* RKDebugMessageWindow::_instance = 0; RKDebugMessageWindow::RKDebugMessageWindow (QWidget* parent, bool tool_window, const char* name) : RKMDIWindow (parent, RKMDIWindow::DebugMessageWindow, tool_window, name) { RK_TRACE (APP); RK_ASSERT (!_instance); real_widget = 0; first = true; QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); layout_widget = new KVBox (this); layout->addWidget (layout_widget); layout_widget->setFocusPolicy (Qt::StrongFocus); setPart (new RKDummyPart (this, layout_widget)); initializeActivationSignals (); } RKDebugMessageWindow::~RKDebugMessageWindow () { RK_TRACE (APP); } void RKDebugMessageWindow::showEvent (QShowEvent *e) { RK_TRACE (APP); if (!e->spontaneous ()) createWidget (); RKMDIWindow::showEvent (e); } void RKDebugMessageWindow::hideEvent (QHideEvent *e) { RK_TRACE (APP); if (!e->spontaneous ()) discardWidget (); RKMDIWindow::hideEvent (e); } void RKDebugMessageWindow::createWidget () { RK_TRACE (APP); if (!real_widget) { RK_DEBUG (APP, DL_INFO, "creating debug message viewer"); real_widget = new RKDebugMessageWindowWidget (layout_widget); setFocusProxy (layout_widget); if (first) { KMessageBox::information (this, i18n ("

    This window is used for displaying RKWard related debug messages. It is targetted primarily at (plugin) developers. It does not offer any features for debugging R code.

    " "

    Note that the list of message is cleared everytime you close the window.

    Type and severity level of messages can be controlled from Settings->Configure RKWard->Debug

    "), i18n ("About this window"), "inforkdebugmessagewindow"); first = false; } } } void RKDebugMessageWindow::discardWidget () { RK_TRACE (APP); if (real_widget) { RK_DEBUG (APP, DL_INFO, "discarding debug message viewer"); delete real_widget; real_widget = 0; } } void RKDebugMessageWindow::newMessage (const int flags, const int level, const QString &message) { // Not tracing this! That might lead to infinite recursion! if (_instance && _instance->real_widget) _instance->real_widget->newMessage (flags, level, message); } RKDebugMessageWindowWidget::RKDebugMessageWindowWidget (QWidget *parent) : QWidget (parent) { RK_TRACE (APP); QVBoxLayout *v_layout = new QVBoxLayout (this); v_layout->setContentsMargins (0, 0, 0, 0); message_viewer = new QTextEdit (this); message_viewer->setUndoRedoEnabled (false); message_viewer->setReadOnly (true); message_viewer->setTextBackgroundColor (Qt::white); v_layout->addWidget (message_viewer); } RKDebugMessageWindowWidget::~RKDebugMessageWindowWidget () { RK_TRACE (APP); } void RKDebugMessageWindowWidget::newMessage (const int flags, const int level, const QString &message) { Q_UNUSED (flags); // Not tracing this! That might lead to infinite recursion! if (level == DL_TRACE) { message_viewer->setTextColor (Qt::gray); message_viewer->insertPlainText ("TRACE\t"); } else if (level == DL_DEBUG) { message_viewer->setTextColor (Qt::blue); message_viewer->insertPlainText ("DEBUG\t"); } else if (level == DL_INFO) { message_viewer->setTextColor (Qt::green); message_viewer->insertPlainText ("INFO\t"); } else if (level == DL_WARNING) { message_viewer->setTextColor (Qt::darkYellow); message_viewer->insertPlainText ("WARNING\t"); } else { message_viewer->setTextColor (Qt::red); message_viewer->insertPlainText ("ERROR\t"); } message_viewer->setTextColor (Qt::black); message_viewer->insertPlainText (message + "\n"); } rkward-0.6.1/rkward/windows/rktoplevelwindowgui.h0000644000175000017500000000506412124345411021643 0ustar thomasthomas/*************************************************************************** rktoplevelwindowgui - description ------------------- begin : Tue Apr 24 2007 copyright : (C) 2007, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKTOPLEVELWINDOWGUI_H #define RKTOPLEVELWINDOWGUI_H #include #include class KXmlGuiWindow; class RKMDIWindow; class KAction; /** represents the common portions of the GUI for top level windows: The help menu, and the windows menu */ class RKTopLevelWindowGUI : public QObject, public KXMLGUIClient { Q_OBJECT public: RKTopLevelWindowGUI (KXmlGuiWindow *for_window); ~RKTopLevelWindowGUI (); public slots: // windows menu /** Raise the help search window */ void showHelpSearch (); /** Activate the current (non tools) window in the workspace */ void activateDocumentView (); /** ensure output window is shown. */ void slotOutputShow (); // help menu /** Show the starting page of RKWard help */ void showRKWardHelp (); /** enter "what's this" mode */ void startWhatsThis (); /** Invokes R help (help.start ()) */ void invokeRHelp (); /** show instructions on reporting bugs in rkward */ void reportRKWardBug (); /** not quite sure, why I have to reimplement this from KMainWindow */ void showAboutApplication (); // settings menu /** configure key bindings. Reimplemented to show notice before the actual dialog. */ void configureShortcuts (); /** configure key bindings. Reimplemented to show notice before the actual dialog. */ void configureToolbars (); private slots: void toggleToolView (); void previousWindow (); void nextWindow (); private: KXmlGuiWindow *for_window; KAction *prev_action; KAction *next_action; void toggleToolView (RKMDIWindow *tool_window); }; #endif rkward-0.6.1/rkward/windows/rkhtmlwindow.h0000644000175000017500000001370412124345411020250 0ustar thomasthomas/*************************************************************************** rkhtmlwindow - description ------------------- begin : Wed Oct 12 2005 copyright : (C) 2005, 2006, 2007, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKHTMLWINDOW_H #define RKHTMLWINDOW_H #include #include #include #include #include "../windows/rkmdiwindow.h" class KHTMLPart; class KActionCollection; class KRecentFilesAction; class QAction; class QDomElement; class RKComponentHandle; /** \brief Show html files. This class wraps a khtml part. It is used as a base for several purposes: Display R-help (in HTML format), display generic HTML, display RKWard output. Do not use this class directly. Use the derived classes instead. @author Pierre Ecochard */ class RKHTMLWindow : public RKMDIWindow, public KXMLGUIClient { Q_OBJECT public: enum WindowMode { Undefined, HTMLHelpWindow, HTMLOutputWindow }; /** constructor. @param parent parent QWidget, usually RKGlobals::rkApp () or similar */ RKHTMLWindow (QWidget *parent, WindowMode mode=HTMLHelpWindow); /** destructor */ ~RKHTMLWindow (); /** open given URL. Returns false, if the URL is not an existing local file. Loading a non-local URL may succeed, even if this returns false! */ bool openURL (const KUrl &url); /** takes care of special handling, if the url is an rkward://-url. Does nothing and returns false, otherwise. */ bool handleRKWardURL (const KUrl &url); /** initialize all actions */ void initActions (); bool isModified (); /** Return current url */ KUrl url (); /** Return current url in a restorable way, i.e. for help pages, abstract the session specific part of the path */ KUrl restorableUrl (); void doGotoAnchor (const QString &anchor_name); WindowMode mode () { return window_mode; }; public slots: /** this is used for browsing only. Use openURL instead, when calling from outside. */ void slotOpenUrl (const KUrl & url, const KParts::OpenUrlArguments &, const KParts::BrowserArguments &); void slotPrint (); void slotForward (); void slotBack (); void selectionChanged (); void runSelection (); /** flush current output. */ void flushOutput (); /** Reload current page.*/ void refresh (); /** apply our customizations to the khtmlpart GUI */ void fixupPartGUI (); private slots: /** This slot is called when the new page has finished loading. Sets scroll position to scroll_position */ void loadDone (); void doGotoAnchorNow (); void mimeTypeDetermined (KIO::Job*, const QString& type); void internalNavigation (); protected: /** Here we store the position of the scroll bar before refresh. Used to scroll to the same position after a reload */ int scroll_position; /** the KHTMLPart doing all the real work */ KHTMLPart * khtmlpart; /** update caption according to given URL */ virtual void updateCaption (const KUrl &url); /** called from openURL. Takes care of updating caption, and updating back/forward actions, if available */ void changeURL (const KUrl &url); private: struct VisitedLocation { KUrl url; int y_offset; }; QList url_history; void openLocationFromHistory (const VisitedLocation &loc); int current_history_position; bool url_change_is_from_history; // dirty!!! // general actions QAction *run_selection; QAction* print; // actions in output window mode QAction* outputFlush; QAction* outputRefresh; // actions in help window mode QAction *back; QAction *forward; QString goto_anchor_name; KUrl current_url; WindowMode window_mode; void useMode (WindowMode); void fileDoesNotExistMessage (); // for dealing with rkward://[page|component]-pages bool renderRKHelp (const KUrl &url); QString renderHelpFragment (QDomElement &fragment); void prepareHelpLink (QDomElement *link_element); QString componentPathToId (QString path); RKComponentHandle *componentPathToHandle (QString path); QString startSection (const QString &name, const QString &title, const QString &shorttitle, QStringList *anchors, QStringList *anchor_names); }; /** \brief Renders RKWard help pages. @author Thomas Friedrichsmeier */ class RKHelpRenderer { public: /** ctor */ RKHelpRenderer () {}; /** destructor */ ~RKHelpRenderer () {}; }; #include #include /** Takes care of showing / refreshing output windows as needed. */ class RKOutputWindowManager : public QObject { Q_OBJECT public: static RKOutputWindowManager *self (); void registerWindow (RKHTMLWindow *window); /** R may produce output while no output window is active. This allows to set the file that should be monitored for such changes (called from within rk.set.html.output.file()). */ void setCurrentOutputPath (const QString &path); /** return a pointer to the current output. If there is no output window, one will be created (and shown) automatically */ RKHTMLWindow* getCurrentOutputWindow (); private: RKOutputWindowManager (); ~RKOutputWindowManager (); static RKOutputWindowManager *_self; QString current_default_path; KDirWatch *file_watcher; QMultiHash windows; private slots: void fileChanged (const QString &path); void windowDestroyed (QObject *window); }; #endif rkward-0.6.1/rkward/windows/rkfilebrowser.h0000644000175000017500000000543012124345411020374 0ustar thomasthomas/*************************************************************************** rkfilebrowser - description ------------------- begin : Thu Apr 26 2007 copyright : (C) 2007, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKFILEBROWSER_H #define RKFILEBROWSER_H #include "rkmdiwindow.h" #include #include class KDirOperator; class RKFileBrowserWidget; class KUrlComboBox; class KFileItem; class KFileItemActions; class QMenu; class QAction; /** The file browser (tool) window. In order to save some startup time, the file browser is not really created until it is first shown. Hence, this is mostly just a wrapper around RKFileBrowserWidget */ class RKFileBrowser : public RKMDIWindow { Q_OBJECT public: RKFileBrowser (QWidget *parent, bool tool_window, const char *name=0); ~RKFileBrowser (); /** reimplemented to create the real file browser widget only when the file browser is shown for the first time */ void showEvent (QShowEvent *e); static RKFileBrowser *getMainBrowser() { return main_browser; }; public slots: void currentWDChanged (); private: RKFileBrowserWidget *real_widget; KVBox *layout_widget; friend class RKWardMainWindow; static RKFileBrowser *main_browser; }; /** The internal widget used in RKFileBrowser TODO: KDE4: check whether there is a ready widget for this. Much of the implementation is a modified copy from Kate / kdevelop. */ class RKFileBrowserWidget : public KVBox { Q_OBJECT public: RKFileBrowserWidget (QWidget *widget); ~RKFileBrowserWidget (); void setURL (const QString &url); bool eventFilter (QObject* o, QEvent* e); public slots: void urlChangedInView (const KUrl &url); void urlChangedInCombo (const QString &url); void urlChangedInCombo (const KUrl &url); void fileActivated (const KFileItem& item); void saveConfig (); void contextMenuHook (const KFileItem &item, QMenu *menu); private: QList added_service_actions; KDirOperator *dir; KUrlComboBox *urlbox; KFileItemActions *fi_actions; }; #endif rkward-0.6.1/rkward/windows/rkoutputwindow.rc0000644000175000017500000000104312124345411021012 0ustar thomasthomas &File &Edit &View rkward-0.6.1/rkward/windows/rkcallstackviewer.h0000644000175000017500000000447712124345411021246 0ustar thomasthomas/*************************************************************************** rkcallstackviewer - description ------------------- begin : Wed Oct 19 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCALLSTACKVIEWER_H #define RKCALLSTACKVIEWER_H #include "rkmdiwindow.h" class RKCallstackViewerWidget; class RKCommandEditorWindow; class QListWidget; class QLabel; /** The call stack (tool) window. In order to save some startup time, the widget is not really created until it is first shown. Hence, this is mostly just a wrapper around RKCallstackViewerWidget */ class RKCallstackViewer : public RKMDIWindow { Q_OBJECT public: RKCallstackViewer (QWidget *parent, bool tool_window, const char *name=0); ~RKCallstackViewer (); /** reimplemented to create the real widget only when the viewer is shown for the first time */ void showEvent (QShowEvent *e); static RKCallstackViewer *instance () { return _instance; }; public slots: void newDebugState (); private: void createRealWidget (); RKCallstackViewerWidget *real_widget; QWidget *layout_widget; friend class RKWardMainWindow; static RKCallstackViewer *_instance; }; /** The internal widget used in RKCallstackViewer */ class RKCallstackViewerWidget : public QWidget { Q_OBJECT public: RKCallstackViewerWidget (QWidget *parent); ~RKCallstackViewerWidget (); void updateState (); private slots: void frameChanged (int frame_number); private: QListWidget *frame_selector; QLabel *frame_info; RKCommandEditorWindow *frame_source; }; #endif rkward-0.6.1/rkward/windows/rkcommandeditorwindowpart.rc0000644000175000017500000000243312124345411023172 0ustar thomasthomas &Edit &Tools Move &Run &Settings &Run rkward-0.6.1/rkward/windows/rkcommandeditorwindow.cpp0000644000175000017500000013151112124345411022461 0ustar thomasthomas/*************************************************************************** rkcommandeditorwindow - description ------------------- begin : Mon Aug 30 2004 copyright : (C) 2004, 2006, 2007, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcommandeditorwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../misc/rkcommonfunctions.h" #include "../misc/rkstandardicons.h" #include "../misc/rkstandardactions.h" #include "../misc/rkxmlguisyncer.h" #include "../misc/rkjobsequence.h" #include "../core/robjectlist.h" #include "../rbackend/rinterface.h" #include "../settings/rksettings.h" #include "../settings/rksettingsmodulecommandeditor.h" #include "../rkconsole.h" #include "../rkglobals.h" #include "../rkward.h" #include "rkhelpsearchwindow.h" #include "rkworkplace.h" #include "../debug.h" RKCommandEditorWindowPart::RKCommandEditorWindowPart (QWidget *parent) : KParts::Part (parent) { RK_TRACE (COMMANDEDITOR); setComponentData (KGlobal::mainComponent ()); setWidget (parent); setXMLFile ("rkcommandeditorwindowpart.rc"); } RKCommandEditorWindowPart::~RKCommandEditorWindowPart () { RK_TRACE (COMMANDEDITOR); } #define GET_HELP_URL 1 #define NUM_BLOCK_RECORDS 6 RKCommandEditorWindow::RKCommandEditorWindow (QWidget *parent, bool use_r_highlighting, bool use_codehinting) : RKMDIWindow (parent, RKMDIWindow::CommandEditorWindow) { RK_TRACE (COMMANDEDITOR); KTextEditor::Editor* editor = KTextEditor::editor("katepart"); RK_ASSERT (editor); m_doc = editor->createDocument (this); RK_ASSERT (m_doc); // yes, we want to be notified, if the file has changed on disk. // why, oh why is this not the default? // this needs to be set *before* the view is created! KTextEditor::ModificationInterface* em_iface = qobject_cast (m_doc); if (em_iface) em_iface->setModifiedOnDiskWarning (true); else RK_ASSERT (false); m_view = m_doc->createView (this); m_doc->editor ()->readConfig (); setFocusProxy (m_view); setFocusPolicy (Qt::StrongFocus); RKCommandEditorWindowPart* part = new RKCommandEditorWindowPart (m_view); part->insertChildClient (m_view); setPart (part); fixupPartGUI (); setMetaInfo (i18n ("Script Editor"), QString (), RKSettings::PageCommandEditor); initializeActions (part->actionCollection ()); initializeActivationSignals (); RKXMLGUISyncer::self()->registerChangeListener (m_view, this, SLOT (fixupPartGUI())); QHBoxLayout *layout = new QHBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); layout->addWidget(m_view); connect (m_doc, SIGNAL (documentUrlChanged (KTextEditor::Document*)), this, SLOT (updateCaption (KTextEditor::Document*))); connect (m_doc, SIGNAL (modifiedChanged (KTextEditor::Document*)), this, SLOT (updateCaption(KTextEditor::Document*))); // of course most of the time this causes a redundant call to updateCaption. Not if a modification is undone, however. connect (m_doc, SIGNAL (modifiedChanged (KTextEditor::Document*)), this, SLOT (autoSaveHandlerModifiedChanged())); connect (m_doc, SIGNAL (textChanged (KTextEditor::Document*)), this, SLOT (autoSaveHandlerTextChanged())); connect (m_view, SIGNAL (selectionChanged(KTextEditor::View*)), this, SLOT (selectionChanged(KTextEditor::View*))); // somehow the katepart loses the context menu each time it loses focus connect (m_view, SIGNAL (focusIn(KTextEditor::View*)), this, SLOT (focusIn(KTextEditor::View*))); completion_model = 0; cc_iface = 0; hinter = 0; if (use_r_highlighting) { RKCommandHighlighter::setHighlighting (m_doc, RKCommandHighlighter::RScript); if (use_codehinting) { cc_iface = qobject_cast (m_view); if (cc_iface) { cc_iface->setAutomaticInvocationEnabled (true); completion_model = new RKCodeCompletionModel (this); completion_timer = new QTimer (this); completion_timer->setSingleShot (true); connect (completion_timer, SIGNAL (timeout ()), this, SLOT (tryCompletion())); connect (m_doc, SIGNAL (textChanged (KTextEditor::Document*)), this, SLOT (tryCompletionProxy (KTextEditor::Document*))); } else { RK_ASSERT (false); } hinter = new RKFunctionArgHinter (this, m_view); } } #if KDE_IS_VERSION(4,5,0) smart_iface = qobject_cast (m_doc); #else smart_iface = qobject_cast (m_doc); #endif initBlocks (); RK_ASSERT (smart_iface); autosave_timer = new QTimer (this); connect (autosave_timer, SIGNAL (timeout()), this, SLOT (doAutoSave())); updateCaption (); // initialize QTimer::singleShot (0, this, SLOT (setPopupMenu ())); } RKCommandEditorWindow::~RKCommandEditorWindow () { RK_TRACE (COMMANDEDITOR); // NOTE: TODO: Ideally we'd only write out a changed config, but how to detect config changes? // Alternatively, only for the last closed script window m_doc->editor ()->writeConfig (); if (!url ().isEmpty ()) { KTextEditor::SessionConfigInterface *iface = qobject_cast (m_doc); QString p_url = RKWorkplace::mainWorkplace ()->portableUrl (m_doc->url ()); if (iface) { KConfigGroup conf (RKWorkplace::mainWorkplace ()->workspaceConfig (), QString ("SkriptDocumentSettings %1").arg (p_url)); iface->writeSessionConfig (conf); } iface = qobject_cast (m_view); if (iface) { KConfigGroup conf (RKWorkplace::mainWorkplace ()->workspaceConfig (), QString ("SkriptViewSettings %1").arg (p_url)); iface->writeSessionConfig (conf); } } delete hinter; delete m_doc; if (!delete_on_close.isEmpty ()) KIO::del (delete_on_close)->start (); } void RKCommandEditorWindow::fixupPartGUI () { RK_TRACE (COMMANDEDITOR); // strip down the katepart's GUI. remove some stuff we definitely don't need. RKCommonFunctions::removeContainers (m_view, QString ("bookmarks,tools_spelling,tools_spelling_from_cursor,tools_spelling_selection,switch_to_cmd_line").split (','), true); RKCommonFunctions::moveContainer (m_view, "Menu", "tools", "edit", true); } QAction *findAction (KTextEditor::View* view, const QString &actionName) { // katepart has more than one actionCollection QList acs = view->findChildren(); acs.append (view->actionCollection ()); foreach (KActionCollection* ac, acs) { QAction* found = ac->action (actionName); if (found) return found; } return 0; } void RKCommandEditorWindow::initializeActions (KActionCollection* ac) { RK_TRACE (COMMANDEDITOR); RKStandardActions::copyLinesToOutput (this, this, SLOT (copyLinesToOutput())); RKStandardActions::pasteSpecial (this, this, SLOT (paste(const QString&))); action_run_all = RKStandardActions::runAll (this, this, SLOT (runAll())); action_run_selection = RKStandardActions::runSelection (this, this, SLOT (runSelection())); action_run_selection->setEnabled (false); action_run_line = RKStandardActions::runLine (this, this, SLOT (runLine())); // NOTE: enter_and_submit is not currently added to the menu KAction *action = ac->addAction ("enter_and_submit", this, SLOT (enterAndSubmit())); action->setText (i18n ("Insert line break and run")); action->setShortcuts (KShortcut (Qt::ControlModifier + Qt::Key_Return, Qt::ControlModifier + Qt::Key_Enter)); action_help_function = RKStandardActions::functionHelp (this, this, SLOT (showHelp())); actionmenu_run_block = new KActionMenu (i18n ("Run block"), this); actionmenu_run_block->setDelayed (false); // KDE4: TODO does not work correctly in the tool bar. ac->addAction ("run_block", actionmenu_run_block); connect (actionmenu_run_block->menu(), SIGNAL (aboutToShow()), this, SLOT (clearUnusedBlocks())); actionmenu_mark_block = new KActionMenu (i18n ("Mark selection as block"), this); ac->addAction ("mark_block", actionmenu_mark_block); connect (actionmenu_mark_block->menu(), SIGNAL (aboutToShow()), this, SLOT (clearUnusedBlocks())); actionmenu_unmark_block = new KActionMenu (i18n ("Unmark block"), this); ac->addAction ("unmark_block", actionmenu_unmark_block); connect (actionmenu_unmark_block->menu(), SIGNAL (aboutToShow()), this, SLOT (clearUnusedBlocks())); action_setwd_to_script = ac->addAction ("setwd_to_script", this, SLOT (setWDToScript ())); action_setwd_to_script->setText (i18n ("CD to script directory")); #if KDE_IS_VERSION(4,3,0) action_setwd_to_script->setHelpText (i18n ("Change the working directory to the directory of this script")); #endif action_setwd_to_script->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionCDToScript)); file_save = findAction (m_view, "file_save"); if (file_save) file_save->setText (i18n ("Save Script...")); file_save_as = findAction (m_view, "file_save_as"); if (file_save_as) file_save_as->setText (i18n ("Save Script As...")); } void RKCommandEditorWindow::initBlocks () { RK_TRACE (COMMANDEDITOR); if (!smart_iface) return; // may happen in KDE => 4.6 if compiled with KDE <= 4.4 RK_ASSERT (block_records.isEmpty ()); KActionCollection* ac = getPart ()->actionCollection (); int i = 0; QColor colors[NUM_BLOCK_RECORDS]; colors[i++] = QColor (255, 0, 0); colors[i++] = QColor (0, 255, 0); colors[i++] = QColor (0, 0, 255); colors[i++] = QColor (255, 255, 0); colors[i++] = QColor (255, 0, 255); colors[i++] = QColor (0, 255, 255); RK_ASSERT (i == NUM_BLOCK_RECORDS); // sorry for those idiotic shortcuts, but I just could not find any decent unused ones i = 0; QKeySequence shortcuts[NUM_BLOCK_RECORDS]; shortcuts[i++] = QKeySequence (Qt::AltModifier | Qt::ShiftModifier | Qt::Key_F1); shortcuts[i++] = QKeySequence (Qt::AltModifier | Qt::ShiftModifier | Qt::Key_F2); shortcuts[i++] = QKeySequence (Qt::AltModifier | Qt::ShiftModifier | Qt::Key_F3); shortcuts[i++] = QKeySequence (Qt::AltModifier | Qt::ShiftModifier | Qt::Key_F4); shortcuts[i++] = QKeySequence (Qt::AltModifier | Qt::ShiftModifier | Qt::Key_F5); shortcuts[i++] = QKeySequence (Qt::AltModifier | Qt::ShiftModifier | Qt::Key_F6); RK_ASSERT (i == NUM_BLOCK_RECORDS); for (i = 0; i < NUM_BLOCK_RECORDS; ++i) { BlockRecord record; QColor shaded = colors[i]; shaded.setAlpha (30); record.attribute = KTextEditor::Attribute::Ptr (new KTextEditor::Attribute ()); record.attribute->clearProperty (KTextEditor::Attribute::BackgroundFillWhitespace); record.attribute->setBackground (shaded); QPixmap colorsquare (16, 16); colorsquare.fill (colors[i]); QIcon icon (colorsquare); record.mark = ac->addAction ("markblock" + QString::number (i), this, SLOT (markBlock())); record.mark->setIcon (icon); record.mark->setData (i); actionmenu_mark_block->addAction (record.mark); record.unmark = ac->addAction ("unmarkblock" + QString::number (i), this, SLOT (unmarkBlock())); record.unmark->setIcon (icon); record.unmark->setData (i); actionmenu_unmark_block->addAction (record.unmark); record.run = ac->addAction ("runblock" + QString::number (i), this, SLOT (runBlock())); record.run->setShortcut (shortcuts[i]); record.run->setIcon (icon); record.run->setData (i); actionmenu_run_block->addAction (record.run); // these two not strictly needed due to removeBlock(), below. Silences a GCC warning, however. record.range = 0; record.active = false; block_records.append (record); removeBlock (i, true); // initialize to empty } RK_ASSERT (block_records.size () == NUM_BLOCK_RECORDS); } void RKCommandEditorWindow::focusIn (KTextEditor::View* v) { RK_TRACE (COMMANDEDITOR); RK_ASSERT (v == m_view); setPopupMenu (); } /** NOTE: this function still needed? - Still needed in KDE 4.3.4. */ void RKCommandEditorWindow::setPopupMenu () { RK_TRACE (COMMANDEDITOR); if (!getPart ()->factory ()) return; m_view->setContextMenu (static_cast (getPart ()->factory ()->container ("ktexteditor_popup", getPart ()))); } QString RKCommandEditorWindow::fullCaption () { RK_TRACE (COMMANDEDITOR); if (m_doc->url ().isEmpty ()) { return (shortCaption ()); } else { QString cap = m_doc->url ().url (); if (isModified ()) cap.append (i18n (" [modified]")); return (cap); } } void RKCommandEditorWindow::closeEvent (QCloseEvent *e) { if (isModified ()) { int status = KMessageBox::warningYesNo (this, i18n ("The document \"%1\" has been modified. Close it anyway?", windowTitle ()), i18n ("File not saved")); if (status != KMessageBox::Yes) { e->ignore (); return; } } QWidget::closeEvent (e); } void RKCommandEditorWindow::copy () { RK_TRACE (COMMANDEDITOR); QApplication::clipboard()->setText (m_view->selectionText ()); } void RKCommandEditorWindow::setReadOnly (bool ro) { RK_TRACE (COMMANDEDITOR); m_doc->setReadWrite (!ro); } bool RKCommandEditorWindow::openURL (const KUrl url, const QString& encoding, bool use_r_highlighting, bool read_only, bool delete_on_close){ RK_TRACE (COMMANDEDITOR); // encoding must be set *before* loading the file if (!encoding.isEmpty ()) m_doc->setEncoding (encoding); if (m_doc->openUrl (url)) { if (!delete_on_close) { // don't litter config with temporary files KTextEditor::SessionConfigInterface *iface = qobject_cast (m_doc); QString p_url = RKWorkplace::mainWorkplace ()->portableUrl (m_doc->url ()); if (iface) { KConfigGroup conf (RKWorkplace::mainWorkplace ()->workspaceConfig (), QString ("SkriptDocumentSettings %1").arg (p_url)); // HACK: Hmm. KTextEditor::Document's readSessionConfig() simply restores too much. Yes, I want to load bookmarks and stuff. // I do not want to mess with encoding, or risk loading a different url, after the doc is already loaded! if (!encoding.isEmpty () && (conf.readEntry ("Encoding", encoding) != encoding)) conf.writeEntry ("Encoding", encoding); if (conf.readEntry ("URL", url) != url) conf.writeEntry ("URL", url); /* HACK: What the...?! Somehow, at least on longer R scripts, stored Mode="Normal" in combination with R Highlighting * causes code folding to fail (KDE 4.8.4, https://sourceforge.net/tracker/?func=detail&atid=459007&aid=3564769&group_id=50231). * Forcing Mode == Highlighting appears to help. */ conf.writeEntry ("Mode", conf.readEntry ("Highlighting", "Normal")); iface->readSessionConfig (conf); } iface = qobject_cast (m_view); if (iface) { KConfigGroup conf (RKWorkplace::mainWorkplace ()->workspaceConfig (), QString ("SkriptViewSettings %1").arg (p_url)); iface->readSessionConfig (conf); } } if (use_r_highlighting) RKCommandHighlighter::setHighlighting (m_doc, RKCommandHighlighter::RScript); setReadOnly (read_only); updateCaption (); if (delete_on_close) { if (!read_only) { RK_ASSERT (false); return true; } RKCommandEditorWindow::delete_on_close = url; } return true; } return false; } void RKCommandEditorWindow::autoSaveHandlerModifiedChanged () { RK_TRACE (COMMANDEDITOR); if (!isModified ()) { autosave_timer->stop (); if (RKSettingsModuleCommandEditor::autosaveKeep ()) return; if (!previous_autosave_url.isValid ()) return; if (previous_autosave_url.isLocalFile ()) { QFile::remove (previous_autosave_url.toLocalFile ()); } else { RKJobSequence* dummy = new RKJobSequence (); dummy->addJob (KIO::del (previous_autosave_url)); connect (dummy, SIGNAL (finished(RKJobSequence*)), this, SLOT (autoSaveHandlerJobFinished(RKJobSequence*))); dummy->start (); } previous_autosave_url.clear (); } } void RKCommandEditorWindow::autoSaveHandlerTextChanged () { RK_TRACE (COMMANDEDITOR); if (!isModified ()) return; // may happen after load or undo if (!RKSettingsModuleCommandEditor::autosaveEnabled ()) return; if (!autosave_timer->isActive ()) { autosave_timer->start (RKSettingsModuleCommandEditor::autosaveInterval () * 60 * 1000); } } void RKCommandEditorWindow::doAutoSave () { RK_TRACE (COMMANDEDITOR); RK_ASSERT (isModified ()); KTemporaryFile save; save.setSuffix (RKSettingsModuleCommandEditor::autosaveSuffix ()); RK_ASSERT (save.open ()); QTextStream out (&save); out.setCodec ("UTF-8"); // make sure that all characters can be saved, without nagging the user out << m_doc->text (); save.close (); save.setAutoRemove (false); RKJobSequence* alljobs = new RKJobSequence (); // The KJob-Handling below seems to be a bit error-prone, at least for the file-protocol on Windows. // Thus, for the simple case of local files, we use QFile, instead. connect (alljobs, SIGNAL (finished(RKJobSequence*)), this, SLOT (autoSaveHandlerJobFinished(RKJobSequence*))); // backup the old autosave file in case something goes wrong during pushing the new one KUrl backup_autosave_url; if (previous_autosave_url.isValid ()) { backup_autosave_url = previous_autosave_url; backup_autosave_url.setFileName (backup_autosave_url.fileName () + "~"); if (previous_autosave_url.isLocalFile ()) { QFile::remove (backup_autosave_url.toLocalFile ()); QFile::copy (previous_autosave_url.toLocalFile (), backup_autosave_url.toLocalFile ()); } else { alljobs->addJob (KIO::file_move (previous_autosave_url, backup_autosave_url, -1, KIO::HideProgressInfo | KIO::Overwrite)); } } // push the newly written file if (url ().isValid ()) { KUrl autosave_url = url (); autosave_url.setFileName (autosave_url.fileName () + RKSettingsModuleCommandEditor::autosaveSuffix ()); if (autosave_url.isLocalFile ()) { QFile::remove (autosave_url.toLocalFile ()); save.copy (autosave_url.toLocalFile ()); save.remove (); } else { alljobs->addJob (KIO::file_move (KUrl::fromLocalFile (save.fileName ()), autosave_url, -1, KIO::HideProgressInfo | KIO::Overwrite)); } previous_autosave_url = autosave_url; } else { // i.e., the document is still "Untitled" previous_autosave_url = KUrl::fromLocalFile (save.fileName ()); } // remove the backup if (backup_autosave_url.isValid ()) { if (backup_autosave_url.isLocalFile ()) { QFile::remove (backup_autosave_url.toLocalFile ()); } else { alljobs->addJob (KIO::del (backup_autosave_url, KIO::HideProgressInfo)); } } alljobs->start (); // do not create any more autosaves until the text is changed, again autosave_timer->stop (); } void RKCommandEditorWindow::autoSaveHandlerJobFinished (RKJobSequence* seq) { RK_TRACE (COMMANDEDITOR); if (seq->hadError ()) { KMessageBox::detailedError (this, i18n ("An error occurred while trying to create an autosave of the script file '%1':", url ().url ()), "- " + seq->errors ().join ("\n- ")); } } KUrl RKCommandEditorWindow::url () { // RK_TRACE (COMMANDEDITOR); return (m_doc->url ()); } bool RKCommandEditorWindow::isModified() { RK_TRACE (COMMANDEDITOR); return m_doc->isModified(); } void RKCommandEditorWindow::insertText (const QString &text) { // KDE4: inline? RK_TRACE (COMMANDEDITOR); m_view->insertText (text); setFocus(); } void RKCommandEditorWindow::restoreScrollPosition () { RK_TRACE (COMMANDEDITOR); KTextEditor::Cursor c = saved_scroll_position; c.setLine (qMin (c.line (), m_doc->lines () - 1)); if (c.column () >= m_doc->lineLength (c.line ())) c.setColumn (0); m_view->setCursorPosition (c); } void RKCommandEditorWindow::saveScrollPosition () { RK_TRACE (COMMANDEDITOR); KTextEditor::Cursor c = m_view->cursorPosition (); if (!c.isValid ()) c = KTextEditor::Cursor::start (); saved_scroll_position = c; } void RKCommandEditorWindow::setText (const QString &text) { RK_TRACE (COMMANDEDITOR); bool old_rw = m_doc->isReadWrite (); if (!old_rw) m_doc->setReadWrite (true); m_doc->setText (text); KTextEditor::MarkInterface *markiface = qobject_cast (m_doc); if (markiface) markiface->clearMarks (); if (!old_rw) m_doc->setReadWrite (false); } void RKCommandEditorWindow::highlightLine (int linenum) { RK_TRACE (COMMANDEDITOR); KTextEditor::MarkInterface *markiface = qobject_cast (m_doc); if (!markiface) { RK_ASSERT (markiface); return; } bool old_rw = m_doc->isReadWrite (); if (!old_rw) m_doc->setReadWrite (true); markiface->addMark (linenum, KTextEditor::MarkInterface::Execution); m_view->setCursorPosition (KTextEditor::Cursor (linenum, 0)); if (!old_rw) m_doc->setReadWrite (false); } void RKCommandEditorWindow::updateCaption (KTextEditor::Document*) { RK_TRACE (COMMANDEDITOR); QString name = url ().fileName (); if (name.isEmpty ()) name = url ().prettyUrl (); if (name.isEmpty ()) name = i18n ("Unnamed"); if (isModified ()) name.append (i18n (" [modified]")); setCaption (name); // Well, these do not really belong, here, but need to happen on pretty much the same occasions: action_setwd_to_script->setEnabled (!url ().isEmpty ()); RKWardMainWindow::getMain ()->addScriptUrl (url ()); } void RKCommandEditorWindow::showHelp () { RK_TRACE (COMMANDEDITOR); KTextEditor::Cursor c = m_view->cursorPosition(); QString line = m_doc->line(c.line ()) + ' '; RKHelpSearchWindow::mainHelpSearch ()->getContextHelp (line, c.column()); } void RKCommandEditorWindow::tryCompletionProxy (KTextEditor::Document*) { if (RKSettingsModuleCommandEditor::completionEnabled ()) { if (cc_iface && cc_iface->isCompletionActive ()) { tryCompletion (); } else if (cc_iface) { completion_timer->start (RKSettingsModuleCommandEditor::completionTimeout ()); } } } QString RKCommandEditorWindow::currentCompletionWord () const { RK_TRACE (COMMANDEDITOR); // KDE4 TODO: This may no longer be needed, if the katepart gets fixed not to abort completions when the range // contains dots or other special characters KTextEditor::Cursor c = m_view->cursorPosition(); if (!c.isValid ()) return QString (); uint para=c.line(); uint cursor_pos=c.column(); QString current_line = m_doc->line (para); if (current_line.lastIndexOf ("#", cursor_pos) >= 0) return QString (); // do not hint while in comments return RKCommonFunctions::getCurrentSymbol (current_line, cursor_pos, false); } #if KDE_IS_VERSION(4,2,0) KTextEditor::Range RKCodeCompletionModel::completionRange (KTextEditor::View *view, const KTextEditor::Cursor &position) { if (!position.isValid ()) return KTextEditor::Range (); QString current_line = view->document ()->line (position.line ()); int start; int end; RKCommonFunctions::getCurrentSymbolOffset (current_line, position.column (), false, &start, &end); return KTextEditor::Range (position.line (), start, position.line (), end); } #endif void RKCommandEditorWindow::tryCompletion () { // TODO: merge this with RKConsole::doTabCompletion () somehow RK_TRACE (COMMANDEDITOR); if ((!cc_iface) || (!completion_model)) { RK_ASSERT (false); return; } KTextEditor::Cursor c = m_view->cursorPosition(); uint para=c.line(); uint cursor_pos=c.column(); QString current_line = m_doc->line (para); int start; int end; RKCommonFunctions::getCurrentSymbolOffset (current_line, cursor_pos, false, &start, &end); KTextEditor::Range range = KTextEditor::Range (para, start, para, end); QString word; if (range.isValid ()) word = m_doc->text (range); if (current_line.lastIndexOf ("#", cursor_pos) >= 0) word.clear (); // do not hint while in comments if (word.length () >= RKSettingsModuleCommandEditor::completionMinChars ()) { completion_model->updateCompletionList (word); if (completion_model->isEmpty ()) { cc_iface->abortCompletion (); } else { if (!cc_iface->isCompletionActive ()) { cc_iface->startCompletion (range, completion_model); } } } else { cc_iface->abortCompletion (); } } QString RKCommandEditorWindow::provideContext (int line_rev) { RK_TRACE (COMMANDEDITOR); KTextEditor::Cursor c = m_view->cursorPosition(); int current_line_num=c.line(); int cursor_pos=c.column(); if (line_rev > current_line_num) return QString (); QString ret = m_doc->line (current_line_num - line_rev); if (line_rev == 0) ret = ret.left (cursor_pos); return ret; } void RKCommandEditorWindow::paste (const QString& text) { RK_TRACE (COMMANDEDITOR); m_view->insertText (text); } void RKCommandEditorWindow::setWDToScript () { RK_TRACE (COMMANDEDITOR); RK_ASSERT (!url ().isEmpty ()); QString dir = url ().directory (); #ifdef Q_OS_WIN // KURL::directory () returns a leading slash on windows as of KDElibs 4.3 while (dir.startsWith ('/')) dir.remove (0, 1); #endif RKConsole::pipeUserCommand ("setwd (\"" + dir + "\")"); } void RKCommandEditorWindow::runSelection() { RK_TRACE (COMMANDEDITOR); QString command = m_view->selectionText (); if (command.isEmpty ()) return; RKConsole::pipeUserCommand (command); } void RKCommandEditorWindow::runLine() { RK_TRACE (COMMANDEDITOR); KTextEditor::Cursor c = m_view->cursorPosition(); QString command = m_doc->line (c.line()); if (!command.isEmpty ()) RKConsole::pipeUserCommand (command + '\n'); // advance to next line (NOTE: m_view->down () won't work on auto-wrapped lines) c.setLine(c.line() + 1); m_view->setCursorPosition (c); } void RKCommandEditorWindow::enterAndSubmit () { RK_TRACE (COMMANDEDITOR); KTextEditor::Cursor c = m_view->cursorPosition (); int line = c.line (); m_doc->insertText (c, "\n"); QString command = m_doc->line (line); if (!command.isEmpty ()) RKConsole::pipeUserCommand (command + '\n'); } void RKCommandEditorWindow::copyLinesToOutput () { RK_TRACE (COMMANDEDITOR); RKCommandHighlighter::copyLinesToOutput (m_view, RKCommandHighlighter::RScript); } void RKCommandEditorWindow::runAll () { RK_TRACE (COMMANDEDITOR); QString command = m_doc->text (); if (command.isEmpty ()) return; RKConsole::pipeUserCommand (command); } void RKCommandEditorWindow::runBlock () { RK_TRACE (COMMANDEDITOR); QAction* action = qobject_cast(sender ()); if (!action) { RK_ASSERT (false); return; } clearUnusedBlocks (); // this block might have been removed meanwhile int index = action->data ().toInt (); RK_ASSERT ((index >= 0) && (index < block_records.size ())); if (block_records[index].active) { QString command = m_doc->text (*(block_records[index].range)); if (command.isEmpty ()) return; RKConsole::pipeUserCommand (command); } } void RKCommandEditorWindow::markBlock () { RK_TRACE (COMMANDEDITOR); QAction* action = qobject_cast(sender ()); if (!action) { RK_ASSERT (false); return; } int index = action->data ().toInt (); RK_ASSERT ((index >= 0) && (index < block_records.size ())); if (m_view->selection ()) { addBlock (index, m_view->selectionRange ()); } else { RK_ASSERT (false); } } void RKCommandEditorWindow::unmarkBlock () { RK_TRACE (COMMANDEDITOR); QAction* action = qobject_cast(sender ()); if (!action) { RK_ASSERT (false); return; } int index = action->data ().toInt (); RK_ASSERT ((index >= 0) && (index < block_records.size ())); removeBlock (index); } void RKCommandEditorWindow::clearUnusedBlocks () { RK_TRACE (COMMANDEDITOR); for (int i = 0; i < block_records.size (); ++i) { if (block_records[i].active) { // TODO: do we need to check whether the range was deleted? Does the katepart do such evil things? #if KDE_IS_VERSION(4,5,0) if (block_records[i].range->isEmpty ()) { #else if (!block_records[i].range->isValid () || block_records[i].range->isEmpty ()) { #endif removeBlock (i, true); } } } } void RKCommandEditorWindow::addBlock (int index, const KTextEditor::Range& range) { RK_TRACE (COMMANDEDITOR); if (!smart_iface) return; // may happen in KDE => 4.6 if compiled with KDE <= 4.4 RK_ASSERT ((index >= 0) && (index < block_records.size ())); clearUnusedBlocks (); removeBlock (index); #if KDE_IS_VERSION(4,5,0) KTextEditor::MovingRange* srange = smart_iface->newMovingRange (range); srange->setInsertBehaviors (KTextEditor::MovingRange::ExpandRight); #else KTextEditor::SmartRange* srange = smart_iface->newSmartRange (range); srange->setInsertBehavior (KTextEditor::SmartRange::ExpandRight); #endif QString actiontext = i18n ("%1 (Active)", index + 1); block_records[index].range = srange; srange->setAttribute (block_records[index].attribute); block_records[index].active = true; block_records[index].mark->setText (actiontext); block_records[index].unmark->setText (actiontext); block_records[index].unmark->setEnabled (true); block_records[index].run->setText (actiontext); block_records[index].run->setEnabled (true); #if !KDE_IS_VERSION(4,5,0) smart_iface->addHighlightToView (m_view, srange); #endif } void RKCommandEditorWindow::removeBlock (int index, bool was_deleted) { RK_TRACE (COMMANDEDITOR); if (!smart_iface) return; // may happen in KDE => 4.6 if compiled with KDE <= 4.4 RK_ASSERT ((index >= 0) && (index < block_records.size ())); if (!was_deleted) { #if !KDE_IS_VERSION(4,5,0) smart_iface->removeHighlightFromView (m_view, block_records[index].range); #endif delete (block_records[index].range); } QString actiontext = i18n ("%1 (Unused)", index + 1); block_records[index].range = 0; block_records[index].active = false; block_records[index].mark->setText (actiontext); block_records[index].unmark->setText (actiontext); block_records[index].unmark->setEnabled (false); block_records[index].run->setText (actiontext); block_records[index].run->setEnabled (false); } void RKCommandEditorWindow::selectionChanged (KTextEditor::View* view) { RK_TRACE (COMMANDEDITOR); RK_ASSERT (view == m_view); if (view->selection ()) { action_run_selection->setEnabled (true); actionmenu_mark_block->setEnabled (true); } else { action_run_selection->setEnabled (false); actionmenu_mark_block->setEnabled (false); } } //////////////////////// RKFunctionArgHinter ////////////////////////////// #include #include #include "../core/rfunctionobject.h" RKFunctionArgHinter::RKFunctionArgHinter (RKScriptContextProvider *provider, KTextEditor::View* view) { RK_TRACE (COMMANDEDITOR); RKFunctionArgHinter::provider = provider; RKFunctionArgHinter::view = view; const QObjectList children = view->children (); for (QObjectList::const_iterator it = children.constBegin(); it != children.constEnd (); ++it) { QObject *obj = *it; obj->installEventFilter (this); } arghints_popup = new QLabel (0, Qt::ToolTip); arghints_popup->setMargin (2); // HACK trying hard to trick the style into using the correct color // ... and sometimes we still get white on yellow in some styles. Sigh... // A simple heuristic tries to detect the worst cases of unreasonably low contrast, and forces black on light blue, then. QPalette p = QToolTip::palette (); QColor b = p.color (QPalette::Inactive, QPalette::ToolTipBase); QColor f = p.color (QPalette::Inactive, QPalette::ToolTipText); if ((qAbs (f.greenF () - b.greenF ()) + qAbs (f.redF () - b.redF ()) + qAbs (f.yellowF () - b.yellowF ())) < .6) { f = Qt::black; b = QColor (192, 219, 255); } p.setColor (QPalette::Inactive, QPalette::WindowText, f); p.setColor (QPalette::Inactive, QPalette::Window, b); p.setColor (QPalette::Inactive, QPalette::ToolTipText, f); p.setColor (QPalette::Inactive, QPalette::ToolTipBase, b); arghints_popup->setForegroundRole (QPalette::ToolTipText); arghints_popup->setBackgroundRole (QPalette::ToolTipBase); arghints_popup->setPalette (p); arghints_popup->setFrameStyle (QFrame::Box); arghints_popup->setLineWidth (1); arghints_popup->setWordWrap (true); arghints_popup->setWindowOpacity (arghints_popup->style ()->styleHint (QStyle::SH_ToolTipLabel_Opacity, 0, arghints_popup) / 255.0); arghints_popup->hide (); active = false; connect (&updater, SIGNAL (timeout()), this, SLOT (updateArgHintWindow())); } RKFunctionArgHinter::~RKFunctionArgHinter () { RK_TRACE (COMMANDEDITOR); delete arghints_popup; } void RKFunctionArgHinter::tryArgHint () { RK_TRACE (COMMANDEDITOR); if (!RKSettingsModuleCommandEditor::argHintingEnabled ()) return; // do this in the next event cycle to make sure any inserted characters have truly been inserted QTimer::singleShot (0, this, SLOT (tryArgHintNow ())); } void RKFunctionArgHinter::tryArgHintNow () { RK_TRACE (COMMANDEDITOR); // find the active opening brace int line_rev = -1; int brace_level = 1; int potential_symbol_end = -1; QString full_context; while (potential_symbol_end < 0) { QString context_line = provider->provideContext (++line_rev); if (context_line.isNull ()) break; full_context.prepend (context_line); int pos = context_line.length (); while (--pos >= 0) { QChar c = full_context.at (pos); if (c == ')') ++brace_level; else if (c == '(') { --brace_level; if (brace_level == 0) { potential_symbol_end = pos - 1; break; } } } } // now find out where the symbol to the left of the opening brace ends // there cannot be a line-break between the opening brace, and the symbol name (or can there?), so no need to fetch further context while ((potential_symbol_end >= 0) && full_context.at (potential_symbol_end).isSpace ()) { --potential_symbol_end; } if (potential_symbol_end <= 0) { hideArgHint (); return; } // now identify the symbol and object (if any) QString effective_symbol = RKCommonFunctions::getCurrentSymbol (full_context, potential_symbol_end+1); if (effective_symbol.isEmpty ()) { hideArgHint (); return; } RObject *object = RObjectList::getObjectList ()->findObject (effective_symbol); if ((!object) || (!object->isType (RObject::Function))) { hideArgHint (); return; } // initialize and show popup arghints_popup->setText (effective_symbol + " (" + static_cast (object)->printArgs () + ')'); arghints_popup->resize (arghints_popup->sizeHint () + QSize (2, 2)); active = true; updater.start (50); updateArgHintWindow (); } void RKFunctionArgHinter::updateArgHintWindow () { RK_TRACE (COMMANDEDITOR); if (!active) return; arghints_popup->move (view->mapToGlobal (view->cursorPositionCoordinates () + QPoint (0, arghints_popup->fontMetrics ().lineSpacing () + arghints_popup->margin ()*2))); if (view->hasFocus ()) arghints_popup->show (); else arghints_popup->hide (); } void RKFunctionArgHinter::hideArgHint () { RK_TRACE (COMMANDEDITOR); arghints_popup->hide (); active = false; updater.stop (); } bool RKFunctionArgHinter::eventFilter (QObject *, QEvent *e) { if (e->type () == QEvent::KeyPress || e->type () == QEvent::ShortcutOverride) { RK_TRACE (COMMANDEDITOR); // avoid loads of empty traces, putting this here QKeyEvent *k = static_cast (e); if (k->key() == Qt::Key_Enter || k->key() == Qt::Key_Return || k->key () == Qt::Key_Up || k->key () == Qt::Key_Down || k->key () == Qt::Key_Left || k->key () == Qt::Key_Right || k->key () == Qt::Key_Home || k->key () == Qt::Key_Tab) { hideArgHint (); } else if (k->key () == Qt::Key_Backspace || k->key () == Qt::Key_Delete){ tryArgHint (); } else { QString text = k->text (); if ((text == "(") || (text == ")") || (text == ",")) { tryArgHint (); } } } return false; } //////////////////////// RKCodeCompletionModel //////////////////// RKCodeCompletionModel::RKCodeCompletionModel (RKCommandEditorWindow *parent) : KTextEditor::CodeCompletionModel (parent) { RK_TRACE (COMMANDEDITOR); setRowCount (0); command_editor = parent; } RKCodeCompletionModel::~RKCodeCompletionModel () { RK_TRACE (COMMANDEDITOR); } void RKCodeCompletionModel::updateCompletionList (const QString& symbol) { RK_TRACE (COMMANDEDITOR); if (current_symbol == symbol) return; // already up to date RObject::RObjectSearchMap map; RObjectList::getObjectList ()->findObjectsMatching (symbol, &map); int count = map.size (); icons.clear (); names.clear (); #if QT_VERSION >= 0x040700 icons.reserve (count); names.reserve (count); #endif // copy the map to two lists. For one thing, we need an int indexable storage, for another, caching this information is safer // in case objects are removed while the completion mode is active. for (RObject::RObjectSearchMap::const_iterator it = map.constBegin (); it != map.constEnd (); ++it) { icons.append (RKStandardIcons::iconForObject (it.value ())); names.append (it.value ()->getBaseName ()); } setRowCount (count); current_symbol = symbol; reset (); } void RKCodeCompletionModel::completionInvoked (KTextEditor::View*, const KTextEditor::Range&, InvocationType) { RK_TRACE (COMMANDEDITOR); // we totally ignore whichever range the katepart thinks we should offer a completion on. // it is often wrong, esp, when there are dots in the symbol // KDE4 TODO: This may no longer be needed, if the katepart gets fixed not to abort completions when the range // contains dots or other special characters updateCompletionList (command_editor->currentCompletionWord ()); } void RKCodeCompletionModel::executeCompletionItem (KTextEditor::Document *document, const KTextEditor::Range &word, int row) const { RK_TRACE (COMMANDEDITOR); RK_ASSERT (names.size () > row); document->replaceText (word, names[row]); } QVariant RKCodeCompletionModel::data (const QModelIndex& index, int role) const { int col = index.column (); int row = index.row (); if (index.parent ().isValid ()) return QVariant (); if ((role == Qt::DisplayRole) || (role==KTextEditor::CodeCompletionModel::CompletionRole)) { if (col == KTextEditor::CodeCompletionModel::Name) { return (names.value (row)); } } else if (role == Qt::DecorationRole) { if (col == KTextEditor::CodeCompletionModel::Icon) { return (icons.value (row)); } } return QVariant (); } // static KTextEditor::Document* RKCommandHighlighter::_doc = 0; KTextEditor::Document* RKCommandHighlighter::getDoc () { if (_doc) return _doc; RK_TRACE (COMMANDEDITOR); KTextEditor::Editor* editor = KTextEditor::editor("katepart"); RK_ASSERT (editor); _doc = editor->createDocument (RKWardMainWindow::getMain ()); // NOTE: In KDE 4.4.5, a (dummy) view is needed to access highlighting attributes. According to a katepart error message, this will be fixed, eventually. // TODO: check whether this is fixed in some later version of KDE QWidget* view = _doc->createView (0); view->hide (); RK_ASSERT (_doc); return _doc; } #if KDE_IS_VERSION(4,4,0) # include #include ////////// // NOTE: Most of the exporting code is copied from the katepart HTML exporter plugin more or less verbatim! (Source license: LGPL v2) ////////// QString exportText(const QString& text, const KTextEditor::Attribute::Ptr& attrib, const KTextEditor::Attribute::Ptr& m_defaultAttribute) { if ( !attrib || !attrib->hasAnyProperty() || attrib == m_defaultAttribute ) { return (Qt::escape(text)); } QString ret; if ( attrib->fontBold() ) { ret.append (""); } if ( attrib->fontItalic() ) { ret.append (""); } bool writeForeground = attrib->hasProperty(QTextCharFormat::ForegroundBrush) && (!m_defaultAttribute || attrib->foreground().color() != m_defaultAttribute->foreground().color()); bool writeBackground = attrib->hasProperty(QTextCharFormat::BackgroundBrush) && (!m_defaultAttribute || attrib->background().color() != m_defaultAttribute->background().color()); if ( writeForeground || writeBackground ) { ret.append (QString("") .arg(writeForeground ? QString(QLatin1String("color:") + attrib->foreground().color().name() + QLatin1Char(';')) : QString()) .arg(writeBackground ? QString(QLatin1String("background:") + attrib->background().color().name() + QLatin1Char(';')) : QString())); } ret.append (Qt::escape(text)); if ( writeBackground || writeForeground ) { ret.append (""); } if ( attrib->fontItalic() ) { ret.append (""); } if ( attrib->fontBold() ) { ret.append (""); } return ret; } QString RKCommandHighlighter::commandToHTML (const QString r_command, HighlightingMode mode) { KTextEditor::Document* doc = getDoc (); KTextEditor::HighlightInterface *iface = qobject_cast (_doc); RK_ASSERT (iface); if (!iface) return (QString ("
    ") + r_command + "
    "); doc->setText (r_command); if (r_command.endsWith ("\n")) doc->removeLine (doc->lines () - 1); setHighlighting (doc, mode); QString ret; QString opening; KTextEditor::Attribute::Ptr m_defaultAttribute = iface->defaultStyle(KTextEditor::HighlightInterface::dsNormal); if ( !m_defaultAttribute ) { opening = "
    ";
    	} else {
    		opening = QString("
    ")
    				.arg(m_defaultAttribute->fontBold() ? "font-weight:bold;" : "")
    				.arg(m_defaultAttribute->fontItalic() ? "text-style:italic;" : "");
    				// Note: copying the default text/background colors is pointless in our case, and leads to subtle inconsistencies.
    	}
    
    	const KTextEditor::Attribute::Ptr noAttrib(0);
    
    	if (mode == RScript) ret = opening.arg ("code");
    	enum {
    		Command,
    		Output,
    		Warning,
    		None
    	} previous_chunk = None;
    	for (int i = 0; i < doc->lines (); ++i)
    	{
    		const QString &line = doc->line(i);
    		QList attribs = iface->lineAttributes(i);
    		int lineStart = 0;
    
    		if (mode == RInteractiveSession) {
    			if (line.startsWith ("> ") || line.startsWith ("+ ")) {
    				lineStart = 2;	// skip the prompt. Prompt will be indicated by the CSS, instead
    				if (previous_chunk != Command) {
    					if (previous_chunk != None) ret.append ("
    "); ret.append (opening.arg ("code")); previous_chunk = Command; } } else { if (previous_chunk != Output) { if (previous_chunk != None) ret.append ("
    "); ret.append (opening.arg ("output_normal")); previous_chunk = Output; } ret.append (Qt::escape (line) + "\n"); // don't copy output "highlighting". It is set using CSS, instead continue; } } int handledUntil = lineStart; int remainingChars = line.length(); foreach ( const KTextEditor::HighlightInterface::AttributeBlock& block, attribs ) { if ((block.start + block.length) <= handledUntil) continue; int start = qMax(block.start, lineStart); if ( start > handledUntil ) { ret += exportText( line.mid( handledUntil, start - handledUntil ), noAttrib, m_defaultAttribute ); } int end = qMin (block.start + block.length, remainingChars); int length = end - start; ret += exportText( line.mid( start, length ), block.attribute, m_defaultAttribute); handledUntil = end; } if ( handledUntil < lineStart + remainingChars ) { ret += exportText( line.mid( handledUntil, remainingChars ), noAttrib, m_defaultAttribute ); } if (i < (doc->lines () - 1)) ret.append ("\n"); } ret.append ("
    \n"); return ret; } #else // KDE < 4.4: No Highlighting Interface QString RKCommandHighlighter::commandToHTML (const QString r_command, HighlightingMode) { return (QString ("
    ") + r_command + "
    "); } #endif /** set syntax highlighting-mode to R syntax. Outside of class, in order to allow use from the on demand code highlighter */ void RKCommandHighlighter::setHighlighting (KTextEditor::Document *doc, HighlightingMode mode) { RK_TRACE (COMMANDEDITOR); QString mode_string = "R Script"; if (mode == RInteractiveSession) mode_string = "R interactive session"; if (!(doc->setHighlightingMode (mode_string) && doc->setMode (mode_string))) RK_DEBUG (COMMANDEDITOR, DL_ERROR, "R syntax highlighting defintion ('%s')not found!", qPrintable (mode_string)); } void RKCommandHighlighter::copyLinesToOutput (KTextEditor::View *view, HighlightingMode mode) { RK_TRACE (COMMANDEDITOR); // expand selection to full lines (or current line) KTextEditor::Document *doc = view->document (); KTextEditor::Range sel = view->selectionRange (); if (!sel.isValid ()) { KTextEditor::Cursor pos = view->cursorPosition (); sel.setRange (KTextEditor::Cursor (pos.line (), 0), KTextEditor::Cursor (pos.line (), doc->lineLength (pos.line ()))); } else { sel.setRange (KTextEditor::Cursor (sel.start ().line (), 0), KTextEditor::Cursor (sel.end ().line (), doc->lineLength (sel.end ().line ()))); } // highlight and submit QString highlighted = commandToHTML (doc->text (sel), mode); if (!highlighted.isEmpty ()) { RKGlobals::rInterface ()->issueCommand (".rk.cat.output (" + RObject::rQuote (highlighted) + ")\n", RCommand::App | RCommand::Silent); } } #include "rkcommandeditorwindow.moc" rkward-0.6.1/rkward/windows/rkcommandlog.cpp0000644000175000017500000002262712124345411020533 0ustar thomasthomas/*************************************************************************** rkcommandlog - description ------------------- begin : Sun Nov 3 2002 copyright : (C) 2002, 2004, 2005 2006, 2007, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcommandlog.h" #include "../rbackend/rinterface.h" #include "../rkglobals.h" #include "../rkconsole.h" #include "../settings/rksettingsmodulewatch.h" #include "../misc/rkstandardactions.h" #include "rkcommandeditorwindow.h" #include #include #include #include #include #include #include #include #include #include "../debug.h" //static RKCommandLog *RKCommandLog::rkcommand_log = 0; RKCommandLog::RKCommandLog (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, CommandLogWindow, tool_window, name) { RK_TRACE (APP); log_view = new RKCommandLogView (this); log_view->setLineWrapMode (QTextEdit::NoWrap); log_view->setUndoRedoEnabled (false); log_view->setReadOnly (true); QHBoxLayout *layout = new QHBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); layout->addWidget (log_view); setCaption (i18n ("Command log")); clearLog (); last_raised_command = 0; RKCommandLogPart *part = new RKCommandLogPart (this); setPart (part); part->initActions (); initializeActivationSignals (); setFocusPolicy (Qt::ClickFocus); connect (RKSettings::tracker (), SIGNAL (settingsChanged(RKSettings::SettingsPage)), this, SLOT (settingsChanged(RKSettings::SettingsPage))); settingsChanged (RKSettings::PageWatch); } RKCommandLog::~RKCommandLog(){ RK_TRACE (APP); RK_ASSERT (command_input_shown.isEmpty ()); } void RKCommandLog::addInput (RCommand *command) { RK_TRACE (APP); if (!RKSettingsModuleWatch::shouldShowInput (command)) return; // commands submitted via the console are often incomplete. We delay showing the input, until the command is finished. if (command->type () & RCommand::Console) return; addInputNoCheck (command); } void RKCommandLog::addInputNoCheck (RCommand *command) { RK_TRACE (APP); if (command_input_shown.contains (command)) return; // already shown // TODO: make colors/styles configurable if (command->type () & RCommand::User) { log_view->setTextColor (Qt::red); } else if (command->type () & RCommand::Sync) { log_view->setTextColor (Qt::gray); } else if (command->type () & RCommand::Plugin) { log_view->setTextColor (Qt::blue); } log_view->setFontItalic (true); log_view->insertPlainText (command->command () + '\n'); checkRaiseWindow (command); linesAdded (); log_view->setFontItalic (false); command_input_shown.append (command); } void RKCommandLog::addOutputNoCheck (RCommand *command, ROutput *output) { RK_TRACE (APP); if (command->type () & RCommand::User) { log_view->setTextColor (Qt::red); } else if (command->type () & RCommand::Sync) { log_view->setTextColor (Qt::gray); } else if (command->type () & RCommand::Plugin) { log_view->setTextColor (Qt::blue); } log_view->setFontWeight (QFont::Bold); if (output->type != ROutput::Output) { QTextBlockFormat f; f.setBackground (QBrush (QColor (255, 200, 200))); log_view->textCursor ().mergeBlockFormat (f); } log_view->insertPlainText (output->output); if (output->type != ROutput::Output) { QTextBlockFormat f; f.setBackground (QBrush (QColor (255, 255, 255))); log_view->textCursor ().mergeBlockFormat (f); } log_view->setFontWeight (QFont::Normal); log_view->setTextColor (Qt::black); checkRaiseWindow (command); linesAdded (); } void RKCommandLog::checkRaiseWindow (RCommand *command) { // called during output. do not trace if (command->id () == last_raised_command) return; if (!RKSettingsModuleWatch::shouldRaiseWindow (command)) return; if (command->type () & RCommand::Console) return; last_raised_command = command->id (); activate (false); } void RKCommandLog::newOutput (RCommand *command, ROutput *output_fragment) { RK_TRACE (APP); if (!RKSettingsModuleWatch::shouldShowOutput (command)) return; if (RKSettingsModuleWatch::shouldShowInput (command)) addInputNoCheck (command); addOutputNoCheck (command, output_fragment); } void RKCommandLog::rCommandDone (RCommand *command) { RK_TRACE (APP); if (command->type () & RCommand::Console) { if (command->errorIncomplete ()) return; addInputNoCheck (command); } // the case we have to deal with here, is that the command/output has not been shown, yet, but should, due to errors if (command->hasWarnings() || command->failed()) { if (RKSettingsModuleWatch::shouldShowError (command)) { if (!RKSettingsModuleWatch::shouldShowInput (command)) addInputNoCheck (command); if (!RKSettingsModuleWatch::shouldShowOutput (command)) { ROutputList out_list = command->getOutput (); for (ROutputList::const_iterator it = out_list.constBegin (); it != out_list.constEnd (); ++it) { addOutputNoCheck (command, *it); } } if (command->failed () && command->error ().isEmpty ()) { ROutput dummy_output; dummy_output.type = ROutput::Error; if (command->errorIncomplete ()) { dummy_output.output = i18n ("Incomplete statement.\n"); } else if (command->errorSyntax ()) { dummy_output.output = i18n ("Syntax error.\n"); } else { dummy_output.output = i18n ("An unspecified error occurred while running the command.\n"); } addOutputNoCheck (command, &dummy_output); } } } if (RKSettingsModuleWatch::shouldShowOutput (command)) log_view->insertPlainText ("\n"); command_input_shown.removeAll (command); } void RKCommandLog::settingsChanged (RKSettings::SettingsPage page) { if (page != RKSettings::PageWatch) return; RK_TRACE (APP); log_view->document ()->setMaximumBlockCount (RKSettingsModuleWatch::maxLogLines ()); } void RKCommandLog::linesAdded () { RK_TRACE (APP); // scroll to bottom log_view->moveCursor (QTextCursor::End, QTextCursor::MoveAnchor); log_view->ensureCursorVisible (); } void RKCommandLog::configureLog () { RK_TRACE (APP); RKSettings::configureSettings (RKSettings::PageWatch, this); } void RKCommandLog::clearLog () { RK_TRACE (APP); log_view->setPlainText (QString ()); // set a fixed width font QFont font = KGlobalSettings::fixedFont (); log_view->setCurrentFont (font); } void RKCommandLog::runSelection () { RK_TRACE (APP); RKConsole::pipeUserCommand (getView ()->textCursor ().selectedText ()); } ////////////////////////// END RKCommandLog /////////////////////////// /////////////////////// BEGIN RKCommandLogView //////////////////////// RKCommandLogView::RKCommandLogView (RKCommandLog *parent) : QTextEdit (parent) { RK_TRACE (APP); } RKCommandLogView::~RKCommandLogView () { RK_TRACE (APP); } void RKCommandLogView::contextMenuEvent (QContextMenuEvent *event) { RK_TRACE (APP); emit (popupMenuRequest (event->globalPos ())); event->accept (); } void RKCommandLogView::selectAll () { RK_TRACE (APP); moveCursor (QTextCursor::Start, QTextCursor::MoveAnchor); moveCursor (QTextCursor::Start, QTextCursor::KeepAnchor); } //////////////////////// END RKCommandLogView ///////////////////////// /////////////////////// BEGIN RKCommandLogPart //////////////////////// #include #include RKCommandLogPart::RKCommandLogPart (RKCommandLog *for_log) : KParts::Part (0) { RK_TRACE (APP); setComponentData (KGlobal::mainComponent ()); setWidget (log = for_log); setXMLFile ("rkcommandlogpart.rc"); } RKCommandLogPart::~RKCommandLogPart () { RK_TRACE (APP); } void RKCommandLogPart::initActions () { RK_TRACE (APP); copy = actionCollection ()->addAction (KStandardAction::Copy, "log_copy", log->getView (), SLOT (copy())); actionCollection ()->addAction (KStandardAction::Clear, "log_clear", log, SLOT (clearLog())); actionCollection ()->addAction (KStandardAction::SelectAll, "log_select_all", log->getView (), SLOT (selectAll())); QAction *configure = actionCollection ()->addAction ("log_configure", log, SLOT(configureLog())); configure->setText (i18n ("Configure")); run_selection = RKStandardActions::runSelection (log, log, SLOT(runSelection())); connect (log->getView (), SIGNAL (popupMenuRequest (const QPoint &)), this, SLOT (doPopupMenu (const QPoint &))); } void RKCommandLogPart::doPopupMenu (const QPoint &pos) { QMenu *menu = static_cast (factory ()->container ("rkcommandlog_context_menu", this)); copy->setEnabled (log->getView ()->textCursor ().hasSelection ()); run_selection->setEnabled (log->getView ()->textCursor ().hasSelection ()); if (!menu) { RK_ASSERT (false); return; } menu->exec (pos); copy->setEnabled (true); run_selection->setEnabled (true); } #include "rkcommandlog.moc" rkward-0.6.1/rkward/windows/rkhelpwindow.rc0000644000175000017500000000076312124345411020412 0ustar thomasthomas &File &Edit rkward-0.6.1/rkward/windows/rkfilebrowser.cpp0000644000175000017500000001644312124345411020735 0ustar thomasthomas/*************************************************************************** rkfilebrowser - description ------------------- begin : Thu Apr 26 2007 copyright : (C) 2007, 2008, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkfilebrowser.h" #include #include #include #include #include #include #include #include #if KDE_IS_VERSION(4,3,0) # include # include #endif #include #include #include #include #include #include #include "rkworkplace.h" #include "../rkward.h" #include "../misc/rkdummypart.h" #include "../debug.h" // static RKFileBrowser *RKFileBrowser::main_browser = 0; RKFileBrowser::RKFileBrowser (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, FileBrowserWindow, tool_window, name) { RK_TRACE (APP); real_widget = 0; QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); layout_widget = new KVBox (this); layout->addWidget (layout_widget); layout_widget->setFocusPolicy (Qt::StrongFocus); RKDummyPart *part = new RKDummyPart (this, layout_widget); setPart (part); initializeActivationSignals (); } RKFileBrowser::~RKFileBrowser () { RK_TRACE (APP); hide (); } void RKFileBrowser::showEvent (QShowEvent *e) { RK_TRACE (APP); if (!real_widget) { RK_DEBUG (APP, DL_INFO, "creating file browser"); real_widget = new RKFileBrowserWidget (layout_widget); setFocusProxy (real_widget); } RKMDIWindow::showEvent (e); } void RKFileBrowser::currentWDChanged () { RK_TRACE (APP); } /////////////////// RKFileBrowserWidget //////////////////// RKFileBrowserWidget::RKFileBrowserWidget (QWidget *parent) : KVBox (parent) { RK_TRACE (APP); KToolBar *toolbar = new KToolBar (this); toolbar->setIconSize (QSize (16, 16)); toolbar->setToolButtonStyle (Qt::ToolButtonIconOnly); urlbox = new KUrlComboBox (KUrlComboBox::Directories, true, this); KUrlCompletion* cmpl = new KUrlCompletion (KUrlCompletion::DirCompletion); urlbox->setCompletionObject (cmpl); urlbox->setAutoDeleteCompletionObject (true); urlbox->setSizePolicy (QSizePolicy (QSizePolicy::Expanding, QSizePolicy::Fixed)); urlbox->completionBox (true)->installEventFilter (this); setFocusProxy (urlbox); dir = new KDirOperator (KUrl (), this); dir->setPreviewWidget (0); KConfigGroup config = KGlobal::config ()->group ("file browser window"); dir->readConfig (config); dir->setView (KFile::Default); connect (RKWardMainWindow::getMain (), SIGNAL (aboutToQuitRKWard()), this, SLOT (saveConfig())); toolbar->addAction (dir->actionCollection ()->action ("up")); toolbar->addAction (dir->actionCollection ()->action ("back")); toolbar->addAction (dir->actionCollection ()->action ("forward")); toolbar->addAction (dir->actionCollection ()->action ("home")); toolbar->addAction (dir->actionCollection ()->action ("short view")); toolbar->addAction (dir->actionCollection ()->action ("tree view")); toolbar->addAction (dir->actionCollection ()->action ("detailed view")); // toolbar->addAction (dir->actionCollection ()->action ("detailed tree view")); // should we have this as well? Trying to avoid crowding in the toolbar #if KDE_IS_VERSION(4, 3, 0) fi_actions = new KFileItemActions (this); connect (dir, SIGNAL (contextMenuAboutToShow(KFileItem,QMenu*)), this, SLOT (contextMenuHook(KFileItem,QMenu*))); #endif connect (dir, SIGNAL (urlEntered (const KUrl &)), this, SLOT (urlChangedInView (const KUrl &))); connect (urlbox, SIGNAL (returnPressed (const QString &)), this, SLOT (urlChangedInCombo (const QString &))); connect (urlbox, SIGNAL (urlActivated (const KUrl&)), this, SLOT (urlChangedInCombo (const KUrl&))); connect (dir, SIGNAL (fileSelected (const KFileItem&)), this, SLOT (fileActivated (const KFileItem&))); setURL (QDir::currentPath ()); } RKFileBrowserWidget::~RKFileBrowserWidget () { RK_TRACE (APP); } void RKFileBrowserWidget::contextMenuHook(const KFileItem& item, QMenu* menu) { RK_TRACE (APP); #if KDE_IS_VERSION(4,3,0) QList dummy; dummy.append (item); fi_actions->setItemListProperties (KFileItemListProperties (dummy)); // some versions of KDE appear to re-use the actions, others don't, and yet other are just plain broken (see this thread: http://www.mail-archive.com/rkward-devel@lists.sourceforge.net/msg01279.html) // Therefore, we remove all actions, explicitly, each time the menu is shown, then add them again. QList menu_actions = menu->actions (); foreach (QAction* act, menu_actions) if (added_service_actions.contains (act)) menu->removeAction (act); added_service_actions.clear (); menu_actions = menu->actions (); fi_actions->addOpenWithActionsTo (menu, QString ()); fi_actions->addServiceActionsTo (menu); QList menu_actions_after = menu->actions (); foreach (QAction* act, menu_actions_after) if (!menu_actions.contains (act)) added_service_actions.append (act); #endif } // does not work in d-tor. Apparently it's too late, then void RKFileBrowserWidget::saveConfig () { RK_TRACE (APP); KConfigGroup config = KGlobal::config ()->group ("file browser window"); dir->writeConfig (config); } void RKFileBrowserWidget::setURL (const QString &url) { RK_TRACE (APP); urlbox->setUrl (url); dir->setUrl (url, true); } void RKFileBrowserWidget::urlChangedInView (const KUrl &url) { RK_TRACE (APP); urlbox->setUrl (url); } void RKFileBrowserWidget::urlChangedInCombo (const QString &url) { RK_TRACE (APP); dir->setUrl (url, true); } void RKFileBrowserWidget::urlChangedInCombo (const KUrl &url) { RK_TRACE (APP); dir->setUrl (url, true); } bool RKFileBrowserWidget::eventFilter (QObject* o, QEvent* e) { // don't trace here if (o == urlbox->completionBox () && e->type () == QEvent::Resize) { RK_TRACE (APP); // this hack (originally from a KDE 3 version of kate allows the completion popup to span beyond the border of the filebrowser widget itself KCompletionBox* box = urlbox->completionBox (); RK_ASSERT (box); int add = box->verticalScrollBar ()->isVisible () ? box->verticalScrollBar ()->width () : 0; box->setMinimumWidth (qMin (topLevelWidget ()->width (), box->sizeHintForColumn (0) + add)); return false; } return (KVBox::eventFilter (o, e)); } void RKFileBrowserWidget::fileActivated (const KFileItem& item) { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->openAnyUrl (item.url ()); } #include "rkfilebrowser.moc" rkward-0.6.1/rkward/windows/rkcallstackviewer.cpp0000644000175000017500000001327012124345411021570 0ustar thomasthomas/*************************************************************************** rkcallstackviewer - description ------------------- begin : Wed Oct 19 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcallstackviewer.h" #include #include #include #include #include #include #include #include "../misc/rkdummypart.h" #include "../agents/rkdebughandler.h" #include "rkcommandeditorwindow.h" #include "../debug.h" RKCallstackViewer* RKCallstackViewer::_instance = 0; RKCallstackViewer::RKCallstackViewer (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, RKMDIWindow::CallstackViewerWindow, tool_window, name) { RK_TRACE (APP); real_widget = 0; QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); layout_widget = new KVBox (this); layout->addWidget (layout_widget); layout_widget->setFocusPolicy (Qt::StrongFocus); setPart (new RKDummyPart (this, layout_widget)); initializeActivationSignals (); connect (RKDebugHandler::instance (), SIGNAL (newDebugState()), this, SLOT (newDebugState())); } RKCallstackViewer::~RKCallstackViewer () { RK_TRACE (APP); } void RKCallstackViewer::showEvent (QShowEvent *e) { RK_TRACE (APP); createRealWidget (); RKMDIWindow::showEvent (e); } void RKCallstackViewer::createRealWidget () { RK_TRACE (APP); if (!real_widget) { RK_DEBUG (APP, DL_INFO, "creating callstack viewer"); real_widget = new RKCallstackViewerWidget (layout_widget); setFocusProxy (real_widget); } } void RKCallstackViewer::newDebugState () { RK_TRACE (APP); if (!real_widget) createRealWidget (); else real_widget->updateState (); if (RKDebugHandler::instance ()->state () == RKDebugHandler::InDebugPrompt) activate (); } RKCallstackViewerWidget::RKCallstackViewerWidget (QWidget *parent) : QWidget (parent) { RK_TRACE (APP); QHBoxLayout *h_layout = new QHBoxLayout (this); h_layout->setContentsMargins (0, 0, 0, 0); QVBoxLayout *v_layout = new QVBoxLayout (); h_layout->addLayout (v_layout); h_layout->setStretchFactor (v_layout, 1); QLabel *label = new QLabel (i18n ("Active calls"), this); v_layout->addWidget (label); frame_selector = new QListWidget (this); frame_selector->setSelectionMode (QAbstractItemView::SingleSelection); connect (frame_selector, SIGNAL (currentRowChanged(int)), this, SLOT (frameChanged(int))); v_layout->addWidget (frame_selector); v_layout = new QVBoxLayout (); h_layout->addLayout (v_layout); h_layout->setStretchFactor (v_layout, 2); frame_info = new QLabel (this); frame_info->setWordWrap (true); v_layout->addWidget (frame_info); frame_source = new RKCommandEditorWindow (this, true); v_layout->addWidget (frame_source); updateState (); } RKCallstackViewerWidget::~RKCallstackViewerWidget () { RK_TRACE (APP); } void RKCallstackViewerWidget::updateState () { RK_TRACE (APP); if (RKDebugHandler::instance ()->state () == RKDebugHandler::NotInDebugger) { QString info = i18n ("Not in a debugger context"); frame_source->setText (info); frame_selector->clear (); frame_info->setText ("" + info + ""); } else if (RKDebugHandler::instance ()->state () == RKDebugHandler::InDebugPrompt) { frame_selector->clear (); frame_selector->setEnabled (true); frame_selector->insertItems (0, RKDebugHandler::instance ()->calls ()); frame_selector->setCurrentRow (frame_selector->count () - 1); } else { frame_selector->setEnabled (false); } } void RKCallstackViewerWidget::frameChanged (int frame_number) { RK_TRACE (APP); if (RKDebugHandler::instance ()->state () == RKDebugHandler::NotInDebugger) return; frame_info->setText (i18n ("Current call: %1
    Environment: %2
    Local objects: %3", Qt::escape (RKDebugHandler::instance ()->calls ().value (frame_number)), Qt::escape (RKDebugHandler::instance ()->environments ().value (frame_number)), Qt::escape (RKDebugHandler::instance ()->locals ().value (frame_number).split ('\n').join (", ")))); frame_source->setText (RKDebugHandler::instance ()->functions ().value (frame_number) + "\n"); int line = RKDebugHandler::instance ()->relativeSourceLines ().value (frame_number, 0); if (line > 0) frame_source->highlightLine (line - 1); else if (frame_number < RKDebugHandler::instance ()->calls ().size () - 1) { // no (valid) source reference available? Make an effort to locate (candidate line(s) for) the call QStringList lines = RKDebugHandler::instance ()->functions ().value (frame_number).split ('\n'); QString call = RKDebugHandler::instance ()->calls ().value (frame_number + 1); call = call.left (call.indexOf ('(')).trimmed (); QRegExp call_exp (QRegExp::escape (call) + "\\s*\\("); for (int i = lines.size () - 1; i >= 0; --i) { if (lines.at (i).contains (call_exp)) frame_source->highlightLine (i); } } } #include "rkcallstackviewer.moc" rkward-0.6.1/rkward/windows/detachedwindowcontainer.h0000644000175000017500000000467312124345411022420 0ustar thomasthomas/*************************************************************************** detachedwindowcontainer - description ------------------- begin : Wed Oct 21 2005 copyright : (C) 2005, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DETACHEDWINDOWCONTAINER_H #define DETACHEDWINDOWCONTAINER_H #include #include class RKMDIWindow; class RKTopLevelWindowGUI; class QCloseEvent; /** This class is used to host a (KPart enabled) window detached from the main window. @see RKWorkplace::detachWindow (). @author Thomas Friedrichsmeier */ class DetachedWindowContainer : public KParts::MainWindow { Q_OBJECT public: /** constructor. @param widget_to_capture The window to reparent into the detached window */ explicit DetachedWindowContainer (RKMDIWindow *widget_to_capture); /** destructor. Usually you don't call this explicitly, but rather delete/close the child view. The DetachedWindowContainer will then self destruct via viewDestroyed () */ ~DetachedWindowContainer (); public slots: /** self-destruct, when child view is destroyed */ void viewDestroyed (QObject *view); /** re-attach to the main window */ void slotReattach (); /** update own caption, when the window's caption has changed */ void updateCaption (RKMDIWindow *); void slotSetStatusBarText (const QString &text); /** Hide any emtpy menus. @param ignore do nothing if true. For internal use, only. */ void hideEmptyMenus (bool ignore=false); protected: /** when receiving a close event, dispatch to the embedded window */ void closeEvent (QCloseEvent *e); private: RKMDIWindow *captured; RKTopLevelWindowGUI *toplevel_actions; }; #endif rkward-0.6.1/rkward/windows/rkmdiwindow.cpp0000644000175000017500000002175412124345411020414 0ustar thomasthomas/*************************************************************************** rkmdiwindow - description ------------------- begin : Tue Sep 26 2006 copyright : (C) 2006, 2007, 2008, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkmdiwindow.h" #include #include #include #include #include #include #include #include #include #include #include "rkworkplace.h" #include "rkworkplaceview.h" #include "rktoolwindowbar.h" #include "rktoolwindowlist.h" #include "../settings/rksettingsmodulegeneral.h" #include "../misc/rkstandardicons.h" #include "../misc/rkxmlguisyncer.h" #include "../debug.h" RKMDIStandardActionClient::RKMDIStandardActionClient () : KXMLGUIClient () { RK_TRACE (APP); setComponentData (KGlobal::mainComponent ()); setXMLFile ("rkstandardactions.rc", true); } RKMDIStandardActionClient::~RKMDIStandardActionClient () { RK_TRACE (APP); } // TODO: remove name parameter RKMDIWindow::RKMDIWindow (QWidget *parent, int type, bool tool_window, const char *) : QFrame (parent) { RK_TRACE (APP); if (tool_window) { type |= ToolWindow; } else { type |= DocumentWindow; } RKMDIWindow::type = type; state = Attached; tool_window_bar = 0; part = 0; active = false; standard_client = 0; setWindowIcon (RKStandardIcons::iconForWindow (this)); } RKMDIWindow::~RKMDIWindow () { RK_TRACE (APP); if (isToolWindow ()) RKToolWindowList::unregisterToolWindow (this); delete standard_client; } KActionCollection *RKMDIWindow::standardActionCollection () { if (!standard_client) { RK_TRACE (APP); standard_client = new RKMDIStandardActionClient (); RK_ASSERT (part); // call setPart () first! part->insertChildClient (standard_client); } return standard_client->actionCollection (); } //virtual QString RKMDIWindow::fullCaption () { RK_TRACE (APP); return shortCaption (); } //virtual QString RKMDIWindow::shortCaption () { RK_TRACE (APP); return windowTitle (); } void RKMDIWindow::setCaption (const QString &caption) { RK_TRACE (APP); QWidget::setWindowTitle (caption); emit (captionChanged (this)); } bool RKMDIWindow::isActive () { // don't trace, called pretty often if (!topLevelWidget ()->isActiveWindow ()) return false; return (active || (!isAttached ())); } void RKMDIWindow::activate (bool with_focus) { RK_TRACE (APP); QWidget *old_focus = qApp->focusWidget (); if (isToolWindow ()) { if (tool_window_bar) tool_window_bar->showWidget (this); else if (!isVisible ()) RKWorkplace::mainWorkplace ()->detachWindow (this, true); else { topLevelWidget ()->show (); topLevelWidget ()->raise (); } } else { if (isAttached ()) RKWorkplace::mainWorkplace ()->view ()->setActivePage (this); else { topLevelWidget ()->show (); topLevelWidget ()->raise (); } } emit (windowActivated (this)); if (with_focus) { if (old_focus) old_focus->clearFocus (); topLevelWidget ()->activateWindow (); setFocus(); } else { if (old_focus) { old_focus->setFocus (); active = false; } } } bool RKMDIWindow::close (bool also_delete) { RK_TRACE (APP); if (isToolWindow ()) { if (!isAttached ()) { topLevelWidget ()->deleteLater (); // flee the dying DetachedWindowContainer if (tool_window_bar) RKWorkplace::mainWorkplace ()->attachWindow (this); else { state = Attached; hide (); setParent (0); } } if (tool_window_bar) tool_window_bar->hideWidget (this); else hide (); return true; } if (also_delete) { bool closed = QWidget::close (); if (closed) { // WORKAROUND for https://bugs.kde.org/show_bug.cgi?id=170806 // NOTE: can't move this to the d'tor, since the part is already partially deleted, then // TODO: use version check / remove once fixed in kdelibs if (part && part->factory ()) { part->factory ()->removeClient (part); } // WORKAROUND end delete this; // Note: using deleteLater(), here does not work well while restoring workplaces (window is not fully removed from workplace before restoring) } return closed; } else { RK_ASSERT (!testAttribute (Qt::WA_DeleteOnClose)); return QWidget::close (); } } void RKMDIWindow::prepareToBeAttached () { RK_TRACE (APP); } void RKMDIWindow::prepareToBeDetached () { RK_TRACE (APP); if (isToolWindow ()) { if (tool_window_bar) tool_window_bar->hideWidget (this); } } bool RKMDIWindow::eventFilter (QObject *watched, QEvent *e) { // WARNING: The derived object and the part may both the destroyed at this point of time! // Make sure not to call any virtual function on this object! RK_ASSERT (acceptsEventsFor (watched)); if (watched == getPart ()) { if (KParts::PartActivateEvent::test (e)) { RK_TRACE (APP); // trace only the "interesting" calls to this function KParts::PartActivateEvent *ev = static_cast (e); if (ev->activated ()) { emit (windowActivated (this)); setFocus (); // focus doesn't always work correctly for the kate part active = true; } else { active = false; } if (layout()->margin () < 1) { layout()->setMargin (1); } update (); } } return false; } bool RKMDIWindow::acceptsEventsFor (QObject *object) { // called very often. Don't trace if (object == getPart ()) return true; return false; } void RKMDIWindow::initializeActivationSignals () { RK_TRACE (APP); RK_ASSERT (getPart ()); getPart ()->installEventFilter (this); RKXMLGUISyncer::self ()->watchXMLGUIClientUIrc (getPart ()); } void RKMDIWindow::paintEvent (QPaintEvent *e) { // RK_TRACE (APP); Do not trace! QFrame::paintEvent (e); if (isActive ()) { QPainter paint (this); paint.setPen (QColor (255, 0, 0)); paint.drawLine (0, 0, 0, height ()-1); paint.drawLine (0, height ()-1, width ()-1, height ()-1); paint.drawLine (0, 0, width ()-1, 0); paint.drawLine (width ()-1, 0, width ()-1, height ()-1); } } void RKMDIWindow::windowActivationChange (bool) { RK_TRACE (APP); // NOTE: active is NOT the same as isActive(). Active just means that this window *would* be active, if its toplevel window is active. if (active || (!isAttached ())) update (); } void RKMDIWindow::slotActivate () { RK_TRACE (APP); activate (true); } void RKMDIWindow::enterEvent (QEvent *event) { RK_TRACE (APP); if (!isActive ()) { if (RKSettingsModuleGeneral::mdiFocusPolicy () == RKSettingsModuleGeneral::RKMDIFocusFollowsMouse) { if (!QApplication::activePopupWidget ()) { // see https://sourceforge.net/tracker/?func=detail&atid=459007&aid=3327985&group_id=50231 // enter events may be delivered while a popup-menu (in a different window) is executing. If we activate in this case, the popup-menu might get deleted // while still handling events. Similar problems seem to occur, when the popup menu has just finished (by the user selecting an action) and this results // in the mouse entering this widget. To prevent crashes in this second case, we delay the activation until the next iteration of the event loop. QTimer::singleShot (0, this, SLOT (slotActivate())); } } } QFrame::enterEvent (event); } void RKMDIWindow::setMetaInfo (const QString& _generic_window_name, const QString& _help_url, RKSettings::SettingsPage _settings_page) { RK_TRACE (APP); // only meant to be called once RK_ASSERT (generic_window_name.isEmpty() && help_url.isEmpty ()); generic_window_name = _generic_window_name; help_url = _help_url; settings_page = _settings_page; if (!help_url.isEmpty ()) { KAction *action = standardActionCollection ()->addAction ("window_help", this, SLOT (showWindowHelp())); action->setText (i18n ("Help on %1", generic_window_name)); } if (settings_page != RKSettings::NoPage) { KAction *action = standardActionCollection ()->addAction ("window_configure", this, SLOT (showWindowSettings())); action->setText (i18n ("Configure %1", generic_window_name)); } } void RKMDIWindow::showWindowHelp () { RK_TRACE (APP); RK_ASSERT (!help_url.isEmpty ()); RKWorkplace::mainWorkplace()->openHelpWindow (help_url, true); } void RKMDIWindow::showWindowSettings () { RK_TRACE (APP); RK_ASSERT (settings_page != RKSettings::NoPage); RKSettings::configureSettings (settings_page, this); } #include "rkmdiwindow.moc" rkward-0.6.1/rkward/windows/detachedwindowcontainer.rc0000644000175000017500000000373512124345411022573 0ustar thomasthomas &File &Device &Edit &View &History &Run &Window &Activate &Settings &Help rkward-0.6.1/rkward/windows/rkhelpsearchwindow.h0000644000175000017500000000763512124345411021430 0ustar thomasthomas/*************************************************************************** rkhelpsearchwindow - description ------------------- begin : Fri Feb 25 2005 copyright : (C) 2005, 2006, 2007, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKHELPSEARCHWINDOW_H #define RKHELPSEARCHWINDOW_H #include #include #include "../rbackend/rcommandreceiver.h" #include "rkmdiwindow.h" class QFocusEvent; class QComboBox; class QCheckBox; class QPushButton; class RKHelpSearchResultsModel; class QTreeView; class QSortFilterProxyModel; class RCommandChain; /** Provides a UI interface for help-search. @author Pierre Ecochard */ class RKHelpSearchWindow : public RKMDIWindow, public RCommandReceiver { Q_OBJECT public: RKHelpSearchWindow (QWidget *parent, bool tool_window, const char *name=0); ~RKHelpSearchWindow (); void rCommandDone (RCommand *command); /** small convenience function to get context help for RKCommandEditorWindow and RKConsole. @param context_line The current line @param cursor_pos cursor position in the current line Will figure out the word under the cursor, and provide help on that (if there is such a word, and such help exists) */ void getContextHelp (const QString &context_line, int cursor_pos); void getFunctionHelp (const QString &function_name, const QString &package=QString(), const QString &type=QString ()); static RKHelpSearchWindow *mainHelpSearch () { return main_help_search; }; public slots: void slotFindButtonClicked(); void resultDoubleClicked (const QModelIndex& index); void updateInstalledPackages (); protected: /** reimplemnented from QWidget to make the input focus default to the input field */ void focusInEvent (QFocusEvent *e); private: QComboBox* field; QComboBox* fieldsList; QComboBox* packagesList; QCheckBox* caseSensitiveCheckBox; QCheckBox* fuzzyCheckBox; QPushButton* findButton; QTreeView* results_view; RKHelpSearchResultsModel* results; QSortFilterProxyModel* proxy_model; friend class RKWardMainWindow; static RKHelpSearchWindow *main_help_search; }; /** An item model meant for use by RKHelpSearchWindow. Since it is fairly specialized, it is unlikely to be of any use in any other context. NOTE: This class is pretty useless, really, we should just switch to a QTree/TableWidget with predefined model, whenever we need to make the next big change to the RKHelpSearchWindow. @author Thomas Friedrichsmeier */ class RKHelpSearchResultsModel : public QAbstractTableModel { public: RKHelpSearchResultsModel (QObject *parent); ~RKHelpSearchResultsModel (); /** Set the results. The model will assume ownership of the results */ void setResults (const QStringList &new_results); int rowCount (const QModelIndex& parent=QModelIndex()) const; int columnCount (const QModelIndex& parent=QModelIndex()) const; QVariant data (const QModelIndex& index, int role=Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const; QString resultsType (int row); private: QStringList topics; QStringList titles; QStringList packages; QStringList types; int result_count; }; #endif rkward-0.6.1/rkward/windows/rktoolwindowlist.h0000644000175000017500000000350412124345411021152 0ustar thomasthomas/*************************************************************************** rktoolwindowlist - description ------------------- begin : Thu Apr 07 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKTOOLWINDOWLIST_H #define RKTOOLWINDOWLIST_H #include #include class RKMDIWindow; /** Simple helper functions to keep track of available tool windows. */ namespace RKToolWindowList { enum Placement { //NOTE: enum values must match thus in KMultiTabBarPosition Left=0, Right=1, Top=2, Bottom=3, Nowhere=4 }; struct ToolWindowRepresentation { RKMDIWindow *window; QString id; Placement default_placement; int default_shortcut; }; void registerToolWindow (RKMDIWindow *window, const QString &id, Placement default_placement, int default_shortcut); void unregisterToolWindow (RKMDIWindow *window); RKMDIWindow* findToolWindowById (const QString &id); QString idOfWindow (RKMDIWindow *window); QList& registeredToolWindows (); }; #endif rkward-0.6.1/rkward/windows/rkhelpsearchwindow.cpp0000644000175000017500000002773312124345411021764 0ustar thomasthomas/*************************************************************************** rkhelpsearchwindow - description ------------------- begin : Fri Feb 25 2005 copyright : (C) 2005, 2006, 2007, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkhelpsearchwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../rbackend/rinterface.h" #include "../rbackend/rcommandreceiver.h" #include "../rbackend/rksessionvars.h" #include "../debug.h" #include "../rkglobals.h" #include "../rkward.h" #include "../core/robject.h" #include "../misc/rkcommonfunctions.h" #include "../misc/rkdummypart.h" #include "../misc/rkstandardicons.h" #define GET_HELP 1 #define HELP_SEARCH 2 // result columns #define COL_TYPE 0 #define COL_TOPIC 1 #define COL_TITLE 2 #define COL_PACKAGE 3 #define COL_COUNT 4 RKHelpSearchWindow* RKHelpSearchWindow::main_help_search = 0; RKHelpSearchWindow::RKHelpSearchWindow (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, SearchHelpWindow, tool_window, name) { RK_TRACE (APP); setPart (new RKDummyPart (0, this)); initializeActivationSignals (); setFocusPolicy (Qt::ClickFocus); QVBoxLayout* main_layout = new QVBoxLayout (this); QHBoxLayout* selection_layout = new QHBoxLayout (); main_layout->addLayout (selection_layout); selection_layout->setContentsMargins (0, 0, 0, 0); QVBoxLayout* labels_layout = new QVBoxLayout (); selection_layout->addLayout (labels_layout); labels_layout->setContentsMargins (0, 0, 0, 0); QLabel *label = new QLabel (i18n ("Find:"), this); label->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Minimum); labels_layout->addWidget (label); label = new QLabel (i18n ("Fields:"), this); label->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Minimum); labels_layout->addWidget (label); QVBoxLayout* main_settings_layout = new QVBoxLayout (); selection_layout->addLayout (main_settings_layout); main_settings_layout->setContentsMargins (0, 0, 0, 0); field = new QComboBox (this); field->setEditable (true); field->setSizePolicy (QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); connect (field->lineEdit () , SIGNAL (returnPressed ()), this, SLOT (slotFindButtonClicked ())); main_settings_layout->addWidget (field); QHBoxLayout* fields_packages_layout = new QHBoxLayout (); main_settings_layout->addLayout (fields_packages_layout); fields_packages_layout->setContentsMargins (0, 0, 0, 0); fieldsList = new QComboBox (this); fieldsList->setEditable (false); fieldsList->addItem (i18n ("All"), "c(\"alias\", \"concept\", \"title\",\"keyword\")"); fieldsList->addItem (i18n ("All but keywords"), "c(\"alias\", \"concept\", \"title\")"); fieldsList->addItem (i18n ("Keywords"), "c(\"keyword\")"); fieldsList->addItem (i18n ("Title"), "c(\"title\")"); fields_packages_layout->addWidget (fieldsList); label = new QLabel (i18n ("Package:"), this); label->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Minimum); fields_packages_layout->addWidget (label); packagesList = new QComboBox (this); packagesList->setEditable (false); fields_packages_layout->addWidget (packagesList); connect (RKSessionVars::instance (), SIGNAL (installedPackagesChanged()), this, SLOT (updateInstalledPackages())); updateInstalledPackages (); QVBoxLayout* checkboxes_layout = new QVBoxLayout (); selection_layout->addLayout (checkboxes_layout); checkboxes_layout->setContentsMargins (0, 0, 0, 0); caseSensitiveCheckBox = new QCheckBox (i18n ("Case sensitive"), this); checkboxes_layout->addWidget (caseSensitiveCheckBox); fuzzyCheckBox = new QCheckBox (i18n ("Fuzzy matching"), this); fuzzyCheckBox->setChecked (true); checkboxes_layout->addWidget (fuzzyCheckBox); findButton = new QPushButton (i18n ("Find"), this); findButton->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed); connect (findButton, SIGNAL (clicked ()), this, SLOT (slotFindButtonClicked ())); selection_layout->addWidget (findButton); results = new RKHelpSearchResultsModel (this); proxy_model = new QSortFilterProxyModel (this); proxy_model->setSourceModel (results); results_view = new QTreeView (this); results_view->setRootIsDecorated (false); results_view->setModel (proxy_model); results_view->setSortingEnabled (true); connect (results_view, SIGNAL (doubleClicked(const QModelIndex&)), this, SLOT (resultDoubleClicked(const QModelIndex&))); main_layout->addWidget (results_view); setCaption (i18n ("Help search")); } RKHelpSearchWindow::~RKHelpSearchWindow () { RK_TRACE (APP); } void RKHelpSearchWindow::focusInEvent (QFocusEvent *e) { RK_TRACE (APP); RKMDIWindow::focusInEvent (e); if (e->reason () != Qt::MouseFocusReason) { field->setFocus (); } } void RKHelpSearchWindow::getContextHelp (const QString &context_line, int cursor_pos) { RK_TRACE (APP); QString result = RKCommonFunctions::getCurrentSymbol (context_line, cursor_pos); if (result.isEmpty ()) return; getFunctionHelp (result); } void RKHelpSearchWindow::getFunctionHelp (const QString &function_name, const QString &package, const QString &type) { RK_TRACE (APP); // we use .rk.getHelp() instead of plain help() to receive an error, if no help could be found QString command = ".rk.getHelp("; if (type == "demo") command = "rk.demo("; else if (type == "vignette") command = "print (vignette("; command.append (RObject::rQuote (function_name)); if (!package.isEmpty ()) command.append (", package=" + RObject::rQuote (package)); command.append (")"); if (type == "vignette") command.append (")"); RKGlobals::rInterface ()->issueCommand (command, RCommand::App | RCommand::GetStringVector, i18n ("Find HTML help for %1").arg (function_name), this, GET_HELP); } void RKHelpSearchWindow::slotFindButtonClicked () { RK_TRACE (APP); if (field->currentText ().isEmpty ()) { return; } QString agrep = "FALSE"; if (fuzzyCheckBox->isChecked ()) { agrep="NULL"; } QString ignoreCase = "TRUE"; if(caseSensitiveCheckBox->isChecked ()) { ignoreCase="FALSE"; } QString package = ", package="; if (packagesList->currentIndex () == 0) { package.append ("NULL"); // all installed packages; actually we could also use package.clear(), here. } else if (packagesList->currentIndex () == 1) { package.append (".packages()"); // all loaded packages } else { package.append ("\"" + packagesList->currentText () + "\""); } QString fields = fieldsList->itemData (fieldsList->currentIndex ()).toString (); QString s = ".rk.get.search.results (" + RObject::rQuote (field->currentText ()) + ", agrep=" + agrep + ", ignore.case=" + ignoreCase + package + ", fields=" + fields +")"; RKGlobals::rInterface ()->issueCommand (s, RCommand::App | RCommand::Sync | RCommand::GetStringVector, QString::null, this, HELP_SEARCH, 0); setEnabled (false); field->addItem (field->currentText ()); } void RKHelpSearchWindow::resultDoubleClicked (const QModelIndex& index) { RK_TRACE (APP); if (!index.isValid ()) return; int row = proxy_model->mapToSource (index).row (); QString topic = results->data (results->index (row, COL_TOPIC)).toString (); if (topic.isEmpty ()) return; QString package = results->data (results->index (row, COL_PACKAGE)).toString (); QString type = results->resultsType (row); getFunctionHelp (topic, package, type); } void RKHelpSearchWindow::updateInstalledPackages () { RK_TRACE (APP); QString old_value = packagesList->currentText (); packagesList->clear (); packagesList->addItem (i18n("All installed packages")); packagesList->addItem (i18n("All loaded packages")); #if QT_VERSION >= 0x040400 packagesList->insertSeparator (2); #endif packagesList->addItems (RKSessionVars::instance ()->installedPackages ()); int index = 0; if (!old_value.isEmpty ()) index = packagesList->findText (old_value); if (index < 0) index = 0; packagesList->setCurrentIndex (index); } void RKHelpSearchWindow::rCommandDone (RCommand *command) { RK_TRACE (APP); if (command->getFlags () == HELP_SEARCH) { QStringList res; if (command->failed ()) { RK_ASSERT (false); } else { RK_ASSERT (command->getDataType () == RData::StringVector); res = command->stringVector (); } results->setResults (res); for (int i = 0; i < COL_COUNT; ++i) results_view->resizeColumnToContents (i); setEnabled(true); } else if (command->getFlags () == GET_HELP) { if (command->failed ()) { KMessageBox::sorry (this, i18n ("No help found on '%1'. Maybe the corresponding package is not installed/loaded, or maybe you mistyped the command. Try using Help->Search R Help for more options.", command->command ().section ("\"", 1, 1)), i18n ("No help found")); } } else { RK_ASSERT (false); } } //////////////// RKHelpResultsModel //////////////// RKHelpSearchResultsModel::RKHelpSearchResultsModel (QObject *parent) : QAbstractTableModel (parent) { RK_TRACE (APP); result_count = 0; } RKHelpSearchResultsModel::~RKHelpSearchResultsModel () { RK_TRACE (APP); } void RKHelpSearchResultsModel::setResults (const QStringList &results) { RK_TRACE (APP); RK_ASSERT ((results.size () % 4) == 0); result_count = results.size () / 4; topics = results.mid (0, result_count); titles = results.mid (result_count, result_count); packages = results.mid (result_count*2, result_count); types = results.mid (result_count*3, result_count); reset (); } int RKHelpSearchResultsModel::rowCount (const QModelIndex& parent) const { // don't trace if (parent.isValid ()) return 0; return result_count; } int RKHelpSearchResultsModel::columnCount (const QModelIndex& parent) const { // don't trace if (parent.isValid ()) return 0; return COL_COUNT; } QString RKHelpSearchResultsModel::resultsType (int row) { RK_TRACE (APP); if (row >= result_count) { RK_ASSERT (false); return QString (); } return types[row]; } QVariant RKHelpSearchResultsModel::data (const QModelIndex& index, int role) const { // don't trace // easier typing int row = index.row (); int col = index.column (); if (result_count && (row < result_count)) { if (role == Qt::DisplayRole || role == Qt::ToolTipRole) { if (col == COL_TOPIC) return topics[row]; if (col == COL_TITLE) return titles[row]; if (col == COL_PACKAGE) return packages[row]; if (col == COL_TYPE) return types[row]; } else if ((col == 0) && (role == Qt::DecorationRole)) { if (types[row] == "help") return RKStandardIcons::getIcon (RKStandardIcons::WindowHelp); if (types[row] == "demo") return RKStandardIcons::getIcon (RKStandardIcons::WindowCommandEditor); if (types[row] == "vignette") return RKStandardIcons::getIcon (RKStandardIcons::DocumentPDF); } } else { RK_ASSERT (false); } return QVariant (); } QVariant RKHelpSearchResultsModel::headerData (int section, Qt::Orientation orientation, int role) const { // don't trace if (orientation == Qt::Horizontal) { if (role == Qt::DisplayRole) { if (section == COL_TOPIC) return (i18n ("Topic")); if (section == COL_TITLE) return (i18n ("Title")); if (section == COL_PACKAGE) return (i18n ("Package")); if (section == COL_TYPE) return (i18n ("Type")); } } return QVariant (); } #include "rkhelpsearchwindow.moc" rkward-0.6.1/rkward/windows/rkdebugmessagewindow.h0000644000175000017500000000446312124345411021741 0ustar thomasthomas/*************************************************************************** rkdebugmessagewindow - description ------------------- begin : Sat Dec 01 2012 copyright : (C) 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKDEBUGMESSAGEWINDOW_H #define RKDEBUGMESSAGEWINDOW_H #include "rkmdiwindow.h" class RKDebugMessageWindowWidget; class QTextEdit; /** Tool window for displaying RKWard debug messages. Mainly targetted at plugin * developers. */ class RKDebugMessageWindow : public RKMDIWindow { public: RKDebugMessageWindow (QWidget *parent, bool tool_window, const char *name=0); ~RKDebugMessageWindow (); /** reimplemented to create the real widget only when the viewer is shown */ void showEvent (QShowEvent *e); /** reimplemented to discard the real widget only when the viewer is hidden */ void hideEvent (QHideEvent *e); static RKDebugMessageWindow *instance () { return _instance; }; static void newMessage (const int flags, const int level, const QString &message); private: void createWidget (); void discardWidget (); RKDebugMessageWindowWidget *real_widget; bool first; QWidget *layout_widget; friend class RKWardMainWindow; static RKDebugMessageWindow *_instance; }; /** The internal widget used in RKDebugMessageWindow */ class RKDebugMessageWindowWidget : public QWidget { public: RKDebugMessageWindowWidget (QWidget *parent); ~RKDebugMessageWindowWidget (); void newMessage (const int flags, const int level, const QString &message); private: QTextEdit *message_viewer; }; #endif rkward-0.6.1/rkward/windows/robjectbrowser.cpp0000644000175000017500000003413412124345411021106 0ustar thomasthomas/*************************************************************************** robjectbrowser - description ------------------- begin : Thu Aug 19 2004 copyright : (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "robjectbrowser.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../rkward.h" #include "rkhelpsearchwindow.h" #include "../rkglobals.h" #include "../core/robjectlist.h" #include "../core/renvironmentobject.h" #include "../core/rkmodificationtracker.h" #include "../rbackend/rinterface.h" #include "../misc/rkobjectlistview.h" #include "../misc/rkdummypart.h" #include "rkworkplace.h" #include "../dataeditor/rkeditor.h" #include "../debug.h" // static RObjectBrowser* RObjectBrowser::object_browser = 0; RObjectBrowser::RObjectBrowser (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, WorkspaceBrowserWindow, tool_window, name) { RK_TRACE (APP); internal = 0; locked = true; QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); layout_widget = new KVBox (this); layout->addWidget (layout_widget); layout_widget->setFocusPolicy (Qt::StrongFocus); RKDummyPart *part = new RKDummyPart (this, layout_widget); setPart (part); setMetaInfo (i18n ("R workspace browser"), "rkward://page/rkward_workspace_browser", RKSettings::PageObjectBrowser); initializeActivationSignals (); setCaption (i18n ("R Workspace")); } RObjectBrowser::~RObjectBrowser () { RK_TRACE (APP); } void RObjectBrowser::unlock () { RK_TRACE (APP); locked = false; if (!isHidden ()) { initialize (); } } void RObjectBrowser::showEvent (QShowEvent *e) { RK_TRACE (APP); initialize (); RKMDIWindow::showEvent (e); } void RObjectBrowser::initialize () { RK_TRACE (APP); if (internal) return; if (locked) return; RK_DEBUG (APP, DL_INFO, "creating workspace browser"); internal = new RObjectBrowserInternal (layout_widget); setFocusProxy (internal); setMinimumSize (internal->minimumSize ()); } ///////////////////////// RObjectBrowserInternal ///////////////////////////// RObjectBrowserInternal::RObjectBrowserInternal (QWidget *parent) : QWidget (parent) { RK_TRACE (APP); setFocusPolicy (Qt::ClickFocus); QVBoxLayout *vbox = new QVBoxLayout (this); vbox->setContentsMargins (0, 0, 0, 0); list_view = new RKObjectListView (this); vbox->addWidget (new RKObjectListViewSettingsWidget (list_view->getSettings (), this)); vbox->addWidget (list_view); update_button = new QPushButton (i18n ("Update"), this); vbox->addWidget (update_button); actions.insert (Help, new QAction (i18n ("Search Help"), this)); connect (actions[Help], SIGNAL(triggered(bool)), this, SLOT(popupHelp())); actions.insert (Edit, new QAction (i18n ("Edit"), this)); connect (actions[Edit], SIGNAL(triggered(bool)), this, SLOT(popupEdit())); actions.insert (View, new QAction (i18n ("View"), this)); connect (actions[View], SIGNAL(triggered(bool)), this, SLOT(popupView())); actions.insert (Rename, new QAction (i18n ("Rename"), this)); connect (actions[Rename], SIGNAL(triggered(bool)), this, SLOT(popupRename())); actions.insert (Copy, new QAction (i18n ("Copy to new symbol"), this)); connect (actions[Copy], SIGNAL(triggered(bool)), this, SLOT(popupCopy())); actions.insert (CopyToGlobalEnv, new QAction (i18n ("Copy to .GlobalEnv"), this)); connect (actions[CopyToGlobalEnv], SIGNAL(triggered(bool)), this, SLOT(popupCopyToGlobalEnv())); actions.insert (Delete, new QAction (i18n ("Delete"), this)); connect (actions[Delete], SIGNAL(triggered(bool)), this, SLOT(popupDelete())); actions.insert (Unload, new QAction (i18n ("Unload Package"), this)); connect (actions[Unload], SIGNAL(triggered(bool)), this, SLOT(popupUnload())); actions.insert (LoadUnloadPackages, new QAction (i18n ("Load / Unload Packages"), this)); connect (actions[LoadUnloadPackages], SIGNAL(triggered(bool)), RKWardMainWindow::getMain(), SLOT(slotFileLoadLibs())); QAction* sep = list_view->contextMenu ()->insertSeparator (list_view->contextMenu ()->actions ().value (0)); list_view->contextMenu ()->insertActions (sep, actions); connect (list_view, SIGNAL (aboutToShowContextMenu (RObject *, bool*)), this, SLOT (contextMenuCallback (RObject*, bool*))); connect (list_view, SIGNAL (doubleClicked(const QModelIndex&)), this, SLOT (doubleClicked(const QModelIndex&))); resize (minimumSizeHint ().expandedTo (QSize (400, 480))); list_view->initialize (); connect (update_button, SIGNAL (clicked ()), this, SLOT (updateButtonClicked ())); } RObjectBrowserInternal::~RObjectBrowserInternal () { RK_TRACE (APP); } void RObjectBrowserInternal::focusInEvent (QFocusEvent *e) { RK_TRACE (APP); list_view->setFocus (); if (e->reason () != Qt::MouseFocusReason) { list_view->setObjectCurrent (RObjectList::getGlobalEnv (), true); } } void RObjectBrowserInternal::updateButtonClicked () { RK_TRACE (APP); RObjectList::getObjectList ()->updateFromR (0); } void RObjectBrowserInternal::popupHelp () { RK_TRACE (APP); if (list_view->menuObject ()) RKHelpSearchWindow::mainHelpSearch ()->getFunctionHelp (list_view->menuObject ()->getShortName ()); } void RObjectBrowserInternal::popupEdit () { RK_TRACE (APP); if (list_view->menuObject ()) RKWorkplace::mainWorkplace ()->editObject (list_view->menuObject ()); } void RObjectBrowserInternal::popupCopy () { RK_TRACE (APP); bool ok; RObject *object = list_view->menuObject (); QString suggested_name = RObjectList::getGlobalEnv ()->validizeName (object->getShortName ()); QString name = KInputDialog::getText (i18n ("Copy object"), i18n ("Enter the name to copy to"), suggested_name, &ok, this); if (ok) { QString valid = RObjectList::getGlobalEnv ()->validizeName (name); if (valid != name) KMessageBox::sorry (this, i18n ("The name you specified was already in use or not valid. Renamed to %1", valid), i18n ("Invalid Name")); RKGlobals::rInterface ()->issueCommand (RObject::rQuote (valid) + " <- " + object->getFullName (), RCommand::App | RCommand::ObjectListUpdate); } } void RObjectBrowserInternal::popupCopyToGlobalEnv () { RK_TRACE (APP); RObject *object = list_view->menuObject (); QString name = object->getShortName (); QString valid = RObjectList::getGlobalEnv ()->validizeName (name); if (valid != name) KMessageBox::sorry (this, i18n ("An object named '%1' already exists in the GlobalEnv. Created the copy as '%2' instead.", name, valid), i18n ("Name already in use")); RKGlobals::rInterface ()->issueCommand (RObject::rQuote (valid) + " <- " + object->getFullName (), RCommand::App | RCommand::ObjectListUpdate); } void RObjectBrowserInternal::popupView () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->flushAllData (); RKWorkplace::mainWorkplace ()->newObjectViewer (list_view->menuObject ()); } void RObjectBrowserInternal::popupDelete () { RK_TRACE (APP); RKGlobals::tracker ()->removeObject (list_view->menuObject ()); } void RObjectBrowserInternal::popupUnload () { RK_TRACE (APP); RObject *object = list_view->menuObject (); RK_ASSERT (object); RK_ASSERT (object->isType (RObject::PackageEnv)); QStringList messages = RObjectList::getObjectList ()->detachPackages (QStringList (object->getShortName ())); if (!messages.isEmpty ()) KMessageBox::sorry (this, messages.join ("\n")); } void RObjectBrowserInternal::popupRename () { RK_TRACE (APP); bool ok; QString name = KInputDialog::getText (i18n ("Rename object"), i18n ("Enter the new name"), list_view->menuObject ()->getShortName (), &ok, this); if (ok) { QString valid = static_cast (list_view->menuObject ()->parentObject ())->validizeName (name); if (valid != name) KMessageBox::sorry (this, i18n ("The name you specified was already in use or not valid. Renamed to %1", valid), i18n ("Invalid Name")); RKGlobals::tracker ()->renameObject (list_view->menuObject (), valid); } } void RObjectBrowserInternal::contextMenuCallback (RObject *, bool *) { RK_TRACE (APP); RObject *object = list_view->menuObject (); if (!object) { RK_ASSERT (actions.size () == ActionCount); for (int i = 0; i < ActionCount; ++i) { actions[i]->setVisible (false); } actions[LoadUnloadPackages]->setVisible (true); return; } actions[Help]->setVisible (!(object->isType (RObject::ToplevelEnv) || object->isInGlobalEnv ())); actions[Edit]->setVisible (object->canEdit () && RKWorkplace::mainWorkplace ()->canEditObject (object)); actions[View]->setVisible (object->canRead ()); actions[Rename]->setVisible (object->canRename ()); actions[Copy]->setVisible (object->canRead () && (!object->isType (RObject::ToplevelEnv))); actions[CopyToGlobalEnv]->setVisible (object->canRead () && (!object->isInGlobalEnv()) && (!object->isType (RObject::ToplevelEnv))); actions[Delete]->setVisible (object->canRemove ()); actions[Unload]->setVisible (object->isType (RObject::PackageEnv)); actions[LoadUnloadPackages]->setVisible (object == RObjectList::getObjectList ()); } void RObjectBrowserInternal::doubleClicked (const QModelIndex& index) { RK_TRACE (APP); RObject *object = list_view->objectAtIndex (index); if (!object) return; if (object == RObjectList::getObjectList ()) return; if (object->canEdit () && RKWorkplace::mainWorkplace ()->canEditObject (object)) { RKWorkplace::mainWorkplace ()->editObject (object); } else { RKWorkplace::mainWorkplace ()->flushAllData (); RKWorkplace::mainWorkplace ()->newObjectViewer (object); } } //////////////////// RKObjectListViewSettingsWidget ////////////////////////// RKObjectListViewSettingsWidget::RKObjectListViewSettingsWidget (RKObjectListViewSettings *settings, QWidget *parent) : QWidget (parent) { RK_TRACE (APP); RKObjectListViewSettingsWidget::settings = settings; connect (settings, SIGNAL (settingsChanged ()), this, SLOT (settingsChanged ())); QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); QButtonGroup *group = new QButtonGroup (this); QHBoxLayout *hbox = new QHBoxLayout (); hbox->setContentsMargins (0, 0, 0, 0); group->addButton (all = new QRadioButton (i18n ("All"), this)); group->addButton (nonfunctions = new QRadioButton (i18n ("Non-Functions"), this)); group->addButton (functions = new QRadioButton (i18n ("Functions"), this)); hbox->addWidget (all); hbox->addWidget (nonfunctions); hbox->addWidget (functions); connect (all, SIGNAL(clicked(bool)), this, SLOT(modeChanged(bool))); connect (nonfunctions, SIGNAL(clicked(bool)), this, SLOT(modeChanged(bool))); connect (functions, SIGNAL(clicked(bool)), this, SLOT(modeChanged(bool))); layout->addLayout (hbox); all_envirs = new QCheckBox (i18n ("Show All Environments"), this); connect (all_envirs, SIGNAL (clicked(bool)), this, SLOT (boxChanged(bool))); layout->addWidget (all_envirs); hidden_objects = new QCheckBox (i18n ("Show Hidden Objects"), this); connect (hidden_objects, SIGNAL (clicked(bool)), this, SLOT (boxChanged(bool))); layout->addWidget (hidden_objects); settingsChanged (); } RKObjectListViewSettingsWidget::~RKObjectListViewSettingsWidget () { RK_TRACE (APP); } void RKObjectListViewSettingsWidget::settingsChanged () { RK_TRACE (APP); all_envirs->setChecked (settings->getSetting (RKObjectListViewSettings::ShowObjectsAllEnvironments)); hidden_objects->setChecked (settings->getSetting (RKObjectListViewSettings::ShowObjectsHidden)); bool functions_shown = settings->getSetting (RKObjectListViewSettings::ShowObjectsFunction); bool vars_shown = settings->getSetting (RKObjectListViewSettings::ShowObjectsVariable); bool containers_shown = settings->getSetting (RKObjectListViewSettings::ShowObjectsContainer); if (functions_shown && vars_shown && containers_shown) { all->setChecked (true); } else if (vars_shown && containers_shown) { nonfunctions->setChecked (true); } else if (functions_shown && (!(vars_shown || containers_shown))) { functions->setChecked (true); } else { all->setChecked (false); nonfunctions->setChecked (false); functions->setChecked (false); } } void RKObjectListViewSettingsWidget::modeChanged (bool) { RK_TRACE (APP); if (all->isChecked ()) { settings->setSetting (RKObjectListViewSettings::ShowObjectsFunction, true); settings->setSetting (RKObjectListViewSettings::ShowObjectsVariable, true); settings->setSetting (RKObjectListViewSettings::ShowObjectsContainer, true); } else if (functions->isChecked ()) { settings->setSetting (RKObjectListViewSettings::ShowObjectsFunction, true); settings->setSetting (RKObjectListViewSettings::ShowObjectsVariable, false); settings->setSetting (RKObjectListViewSettings::ShowObjectsContainer, false); } else if (nonfunctions->isChecked ()) { settings->setSetting (RKObjectListViewSettings::ShowObjectsFunction, false); settings->setSetting (RKObjectListViewSettings::ShowObjectsVariable, true); settings->setSetting (RKObjectListViewSettings::ShowObjectsContainer, true); } else { RK_ASSERT (false); } } void RKObjectListViewSettingsWidget::boxChanged (bool) { RK_TRACE (APP); if (sender () == all_envirs) { settings->setSetting (RKObjectListViewSettings::ShowObjectsAllEnvironments, all_envirs->isChecked ()); } else { settings->setSetting (RKObjectListViewSettings::ShowObjectsHidden, hidden_objects->isChecked ()); } } #include "robjectbrowser.moc" rkward-0.6.1/rkward/windows/rkwindowcatcher.h0000644000175000017500000002110112124345411020703 0ustar thomasthomas/*************************************************************************** rwindowcatcher.h - description ------------------- begin : Wed May 4 2005 copyright : (C) 2005 - 2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKWINDOWCATCHER_H #define RKWINDOWCATCHER_H //#define DISABLE_RKWINDOWCATCHER #ifndef DISABLE_RKWINDOWCATCHER #include /** This is a simple helper class helping in catching R X11 device windows. The start () and stop () functions are called from RInterface, and then this class takes care of handling those. The main difficulty to overcome in this context, is to find out, when an R X11 window is created, and what is its X Window id. The notes below are some thoughts on that matter. Probably mostly obsolete, now (the current approach is basically Plan C, and seems to work ok), but maybe Plans A or B or something similar will become necessary some day: Catch R X11 device windows - Plan A: - initialization function seems to be in_do_X11 - it might be possible to put a wrapper around this using R_setX11Routines - this wrapper could watch the list of devices (curDevice, numDevices), see also addDevice to find out how the list is kept internally - if a new device gets added grab its winId and capture - Plan B: - it looks like there's no way to get access to R_setX11Routines or at least the needed struct R_X11Routines. (?) - the level above that seems to be do_X11 - maybe we can modify the mapping from .Internal (X11) to do_X11 and insert wrapper from Plan A -> R_FunTab - proceed like in Plan A - less preferable as C-plugins might be able to call do_X11 directly (can they?) - Plan C: - modify at R level (override X11 ()) - notify app right before device is created - notify app right after device is created - least preferable solution as we can not be sure we catch every use. - but definitely most. This is dispatched via CurrentDevice ()->options("device"), and then evalued in R_GlobalEnv - remaining problem: how to get the window id given the device id? - http://tronche.com/gui/x/xlib/events/window-state-change/create.html#XCreateWindowEvent - for active / inactive: XPropertyEvent WM_NAME - we may catch this using KApplication::x11EventFilter - event filter should only be active during the wrapper (Plan A-C) - event filter should probably do some sanity checking - this should give us the window id corresponding to the x11-call @author Thomas Friedrichsmeier */ class RKWindowCatcher { public: /** ctor. Probably you'll only ever need one instance of RKWindowCatcher. */ RKWindowCatcher (); /** dtor */ ~RKWindowCatcher (); /** call this function to start looking out for new R X11 device windows. @param prev_cur_device the device number that was active before a new device window was (potentially) created */ void start (int prev_cur_device); /** end looking out for new R X11 windows. If a new window was in fact created, this is captured by creating an RKCaughtX11Window @param new_cur_device the new active device number, i.e. the device number of the created window */ void stop (int new_cur_device); /** called from the R backend when the device history needs to be updated @param params the serialized parameters as supplied from R */ void updateHistory (QStringList params); /** Kill an R device @param device_number R device number of the device to kil */ void killDevice (int device_number); private: int last_cur_device; }; #include "rkmdiwindow.h" #include "../rbackend/rcommandreceiver.h" #include class RKCaughtX11WindowPart; class KToggleAction; class KAction; class KSelectAction; class QXEmbedCopy; class QScrollArea; class KVBox; class RKProgressControl; class QX11EmbedContainer; class QWinHost; class KPassivePopup; /** An R X11 device window managed by rkward. */ class RKCaughtX11Window : public RKMDIWindow, public RCommandReceiver { Q_OBJECT public: /** ctor @param window_to_embed the Window id of the R X11 device window to embed @param device_number the device number corresponding to that window */ RKCaughtX11Window (WId window_to_embed, int device_number); /** dtor */ ~RKCaughtX11Window (); /** TODO? */ bool isModified () { return false; }; /** reimplemented from RKMDIWindow to switch to fixed size mode, and disable the dynamic_size_action */ void prepareToBeAttached (); /** see prepareToBeAttached (). Reenable the dynamic_size_action */ void prepareToBeDetached (); /** returns the window corresponding the to given R device number (or 0 if no such window exists) */ static RKCaughtX11Window* getWindow (int device_number) { return device_windows.value (device_number); }; void updateHistoryActions (int history_length, int position, const QStringList &labels); /** Set a status message to be shown in a popup inside the window. The message persists until the given R command has finished, or until this function is called with an empty string. This should be used, when the plot is currently out-of-date (e.g. when loading a plot from history), _not_ when the window is simply busy (e.g. when saving the current plot to history). */ void setStatusMessage (const QString& message, RCommand* command=0); /** static convencience wrapper around setStatusMessage (). Sets the message on the window corresponding to the given device number. * NOTE: If no device exists (or isn't known to the system), this function does nothing */ static void setStatusMessage (int dev_num, const QString &message, RCommand *command=0); public slots: /** Fixed size action was (potentially) toggled. Update to the new state */ void fixedSizeToggled (); /** Switch to fixed size mode, and set size1 (currently 500*500) */ void setFixedSize1 (); /** Switch to fixed size mode, and set size2 (currently 1000*1000) */ void setFixedSize2 (); /** Switch to fixed size mode, and set size3 (currently 2000*2000) */ void setFixedSize3 (); /** Switch to fixed size mode, and set user specified size (size read from a dialog) */ void setFixedSizeManual (); void activateDevice (); void copyDeviceToOutput (); void printDevice (); void copyDeviceToRObject (); void duplicateDevice (); /** history navigation */ void firstPlot (); void previousPlot (); void nextPlot (); void lastPlot (); void gotoPlot (int index); void forceAppendCurrentPlot (); void removeCurrentPlot (); void clearHistory (); void showPlotInfo (); /** reimplemented to keep window alive while saving history */ bool close (bool also_delete); void setKilledInR () { killed_in_r = true; }; private slots: void doEmbed (); private: void forceClose (); void reEmbed (); void rCommandDone (RCommand *command); friend class RKCaughtX11WindowPart; // needs access to the actions int device_number; bool killed_in_r; bool close_attempted; WId embedded; KVBox *xembed_container; QScrollArea *scroll_widget; KVBox *box_widget; RKProgressControl *error_dialog; static QHash device_windows; #ifdef Q_WS_WIN QWinHost *capture; #elif defined Q_WS_X11 QX11EmbedContainer *capture; #else // a dummy to make things compile for now QWidget *capture; #endif bool dynamic_size; KToggleAction *dynamic_size_action; KAction *plot_prev_action; KAction *plot_next_action; KAction *plot_first_action; KAction *plot_last_action; KAction *plot_force_append_action; KAction *plot_remove_action; KAction *plot_clear_history_action; KAction *plot_properties_action; KSelectAction *plot_list_action; KPassivePopup* status_popup; RCommand* status_change_command; int history_length; int history_position; }; /** Provides a KPart interface for RKCaughtX11Window. */ class RKCaughtX11WindowPart : public KParts::Part { public: /** constructor. @param window The RKCatehdX11Window for this part */ explicit RKCaughtX11WindowPart (RKCaughtX11Window *window); /** destructor */ ~RKCaughtX11WindowPart (); private: RKCaughtX11Window *window; }; #endif //DISABLE_RKWINDOWCATCHER #endif rkward-0.6.1/rkward/windows/rktoplevelwindowgui.rc0000644000175000017500000000310212124345411022007 0ustar thomasthomas &Window &Activate &Settings &Help rkward-0.6.1/rkward/windows/rktoolwindowbar.cpp0000644000175000017500000002346512124345411021306 0ustar thomasthomas/*************************************************************************** rktoolwindowbar - description ------------------- begin : Fri Oct 12 2007 copyright : (C) 2007, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* This code is based substantially on kate's katemdi! */ #include "rktoolwindowbar.h" #include #include #include #include #include #include #include #include "rkworkplace.h" #include "rkworkplaceview.h" #include "rkmdiwindow.h" #include "../rkward.h" #include "../misc/rkstandardicons.h" #include "../debug.h" #define DEFAULT_SPLITTER_SIZE 200 #define SPLITTER_MIN_SIZE 30 RKToolWindowBar::RKToolWindowBar (KMultiTabBarPosition position, QWidget *parent) : KMultiTabBar (position, parent), container (0) { RK_TRACE (APP); setStyle (KMultiTabBar::KDEV3ICON); last_known_size = SPLITTER_MIN_SIZE; } RKToolWindowBar::~RKToolWindowBar () { RK_TRACE (APP); } void RKToolWindowBar::restoreSize (const KConfigGroup &cg) { RK_TRACE (APP); last_known_size = cg.readEntry (QString ("view_size_%1").arg (position ()), DEFAULT_SPLITTER_SIZE); } void RKToolWindowBar::saveSize (KConfigGroup &cg) const { RK_TRACE (APP); cg.writeEntry (QString ("view_size_%1").arg (position ()), last_known_size); } int RKToolWindowBar::getSplitterSize () const { RK_TRACE (APP); int pos = splitter->indexOf (container); if (pos < 0) { RK_ASSERT (false); return 0; } return (splitter->sizes ()[pos]); } void RKToolWindowBar::setSplitterSize (int new_size) { RK_TRACE (APP); // HACK / WORKAROUND: reset the collapsed state of the container (if collapsed). Else we will not be able to open it again int index = splitter->indexOf (container); QList sizes = splitter->sizes (); if (sizes[index] == 0) { sizes[index] = last_known_size; splitter->setSizes (sizes); } if (splitter->orientation () == Qt::Horizontal) { container->resize (new_size, container->height ()); } else { container->resize (container->width (), new_size); } } void RKToolWindowBar::splitterMoved (int, int) { RK_TRACE (APP); int pos = getSplitterSize (); if (pos >= SPLITTER_MIN_SIZE) last_known_size = pos; if (!pos) { // collapsed. Hide it properly. for (QMap::const_iterator it = widget_to_id.constBegin (); it != widget_to_id.constEnd (); ++it) { if (isTabRaised (it.value ())) { hideWidget (it.key ()); break; } } } } void RKToolWindowBar::setSplitter (QSplitter *splitter) { RK_TRACE (APP); RK_ASSERT (!container); RKToolWindowBar::splitter = splitter; container = new KHBox (splitter); splitter->setContentsMargins (0, 0, 0, 0); container->layout ()->setContentsMargins (0, 0, 0, 0); container->layout ()->setSpacing (0); container->layout ()->setMargin (0); container->hide (); connect (splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int,int))); } void RKToolWindowBar::addWidget (RKMDIWindow *window) { RK_TRACE (APP); RK_ASSERT (window); if (window->tool_window_bar == this) return; // may happen while restoring windows RK_ASSERT (container); static int id_count = 0; int id = ++id_count; if (window->tool_window_bar) { window->tool_window_bar->removeWidget (window); } appendTab (window->windowIcon ().pixmap (QSize (16, 16)), id, window->shortCaption ()); window->tool_window_bar = this; widget_to_id.insert (window, id); connect (tab (id), SIGNAL (clicked(int)), this, SLOT (tabClicked(int))); tab (id)->installEventFilter (this); if (window->isAttached ()) { window->hide(); window->setParent (container); } show (); } void RKToolWindowBar::reclaimDetached (RKMDIWindow *window) { RK_TRACE (APP); window->hide(); window->setParent (container); } void RKToolWindowBar::removeWidget (RKMDIWindow *widget) { RK_TRACE (APP); RK_ASSERT (widget_to_id.contains (widget)); int id = widget_to_id[widget]; bool was_active_in_bar = isTabRaised (id); removeTab (id); widget_to_id.remove (widget); widget->tool_window_bar = 0; if (widget->isAttached ()) { widget->setParent (0); widget->hide (); } if (was_active_in_bar) { RK_ASSERT (widget->isAttached ()); container->hide (); widget->active = false; } if (widget_to_id.isEmpty ()) hide (); } void RKToolWindowBar::showWidget (RKMDIWindow *widget) { RK_TRACE (APP); RK_ASSERT (widget_to_id.contains (widget)); int id = widget_to_id[widget]; // close any others for (QMap::const_iterator it = widget_to_id.constBegin (); it != widget_to_id.constEnd (); ++it) { RKMDIWindow *cur = it.key (); if (cur != widget) { if (cur->isAttached ()) { cur->active = false; cur->hide (); } setTab (it.value (), false); } } widget->show (); if (widget->isAttached ()) { setTab (id, true); container->show (); setSplitterSize (last_known_size); } else { widget->topLevelWidget ()->show (); widget->topLevelWidget ()->raise (); } widget->active = true; } void RKToolWindowBar::hideWidget (RKMDIWindow *widget) { RK_TRACE (APP); RK_ASSERT (widget_to_id.contains (widget)); // prevent recursion if (!widget->active) return; int id = widget_to_id[widget]; bool was_active_in_bar = ((widget->parent () == container) && widget->isVisible ()); if (was_active_in_bar) { container->hide (); } RKWardMainWindow::getMain()->partManager()->setActivePart (0); widget->active = false; widget->hide (); setTab (id, false); RKWorkplace::mainWorkplace ()->view ()->setFocus (); } void RKToolWindowBar::tabClicked (int id) { RK_TRACE (APP); RKMDIWindow *widget = idToWidget (id); RK_ASSERT (widget); if (widget->isActive ()) { if (!widget->isAttached ()) widget->close (false); else hideWidget (widget); } else { widget->activate (true); } } RKMDIWindow* RKToolWindowBar::idToWidget (int id) const { RK_TRACE (APP); for (QMap::const_iterator it = widget_to_id.constBegin (); it != widget_to_id.constEnd (); ++it) { if (it.value () == id) { return (it.key ()); } } return 0; } bool RKToolWindowBar::eventFilter (QObject *obj, QEvent *ev) { if (ev->type() == QEvent::ContextMenu) { RK_TRACE (APP); QContextMenuEvent *e = (QContextMenuEvent *) ev; KMultiTabBarTab *bt = dynamic_cast(obj); if (bt) { id_of_popup = bt->id (); RKMDIWindow *widget = idToWidget (id_of_popup); RK_ASSERT (widget); if (widget) { KMenu menu (this); QAction *a = menu.addAction (RKStandardIcons::getIcon (widget->isAttached () ? RKStandardIcons::ActionDetachWindow : RKStandardIcons::ActionAttachWindow), widget->isAttached () ? i18n("Detach") : i18n("Attach")); connect (a, SIGNAL (triggered(bool)), this, SLOT (changeAttachment())); KSelectAction *sel = new KSelectAction (i18n ("Position"), &menu); sel->addAction (KIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveLeft)), i18n ("Left Sidebar")); sel->addAction (KIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveRight)), i18n ("Right Sidebar")); sel->addAction (KIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveUp)), i18n ("Top Sidebar")); sel->addAction (KIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveDown)), i18n ("Bottom Sidebar")); sel->addAction (KIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionDelete)), i18n ("Not shown in sidebar")); connect (sel, SIGNAL (triggered(int)), this, SLOT (moveToolWindow(int))); menu.addAction (sel); menu.exec (e->globalPos()); return true; } } } return false; } void RKToolWindowBar::contextMenuEvent (QContextMenuEvent* event) { RK_TRACE (APP); KMenu menu (this); foreach (RKToolWindowList::ToolWindowRepresentation rep, RKToolWindowList::registeredToolWindows ()) { QAction *a = menu.addAction (rep.window->windowIcon (), rep.window->shortCaption ()); a->setCheckable (true); a->setChecked (rep.window->tool_window_bar == this); a->setData (rep.id); } connect (&menu, SIGNAL (triggered(QAction*)), this, SLOT (addRemoveToolWindow(QAction*))); menu.exec (event->globalPos ()); event->accept (); } void RKToolWindowBar::changeAttachment () { RK_TRACE (APP); RKMDIWindow *window = idToWidget (id_of_popup); RK_ASSERT (window); // toggle attachment if (window->isAttached ()) RKWorkplace::mainWorkplace ()->detachWindow (window); else RKWorkplace::mainWorkplace ()->attachWindow (window); } void RKToolWindowBar::moveToolWindow (int target) { RK_TRACE (APP); RK_ASSERT (target >= RKToolWindowList::Left); RK_ASSERT (target <= RKToolWindowList::Bottom); if (target == position ()) return; RKMDIWindow *window = idToWidget (id_of_popup); RK_ASSERT (window); RKWorkplace::mainWorkplace ()->placeInToolWindowBar (window, target); } void RKToolWindowBar::addRemoveToolWindow (QAction *action) { RK_TRACE (APP); RK_ASSERT (action); RKMDIWindow *win = RKToolWindowList::findToolWindowById (action->data ().toString ()); if (action->isChecked ()) { RKWorkplace::mainWorkplace ()->placeInToolWindowBar (win, position ()); } else { RK_ASSERT (win->tool_window_bar == this); removeWidget (win); } } #include "rktoolwindowbar.moc" rkward-0.6.1/rkward/windows/rkdebugconsole.cpp0000644000175000017500000001431512124345411021057 0ustar thomasthomas/*************************************************************************** rkdebugconsole - description ------------------- begin : Wed Oct 19 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkdebugconsole.h" #include #include #include #include #include #include #include #include #include "../agents/rkdebughandler.h" #include "../misc/rkdummypart.h" #include "../misc/rkcommonfunctions.h" #include "../rkconsole.h" #include "../debug.h" RKDebugConsole* RKDebugConsole::_instance = 0; RKDebugConsole::RKDebugConsole (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, DebugConsoleWindow, tool_window, name) { RK_TRACE (APP); QVBoxLayout *main_layout = new QVBoxLayout (this); main_layout->setContentsMargins (0, 0, 0, 0); QHBoxLayout *upper_layout = new QHBoxLayout (); main_layout->addLayout (upper_layout); context_view = new QTextEdit (this); context_view->setReadOnly (true); context_view->setAcceptRichText (false); upper_layout->addWidget (context_view); QVBoxLayout *button_layout = new QVBoxLayout (); upper_layout->addLayout (button_layout); step_button = new QPushButton (i18n ("Next"), this); connect (step_button, SIGNAL (clicked()), this, SLOT (stepButtonClicked())); button_layout->addWidget (step_button); step_out_button = new QPushButton (i18n ("Step out"), this); connect (step_out_button, SIGNAL (clicked()), this, SLOT (stepOutButtonClicked())); RKCommonFunctions::setTips (i18n ("

    Continue until the caller of this function is reached (unless another debug statement is hit, earlier)

    " "

    Note: In some cases, the calling function will never be reached, because the call was the last step in the caller." "In these cases, the behavior is identical to 'Continue'.

    "), step_out_button); button_layout->addWidget (step_out_button); continue_button = new QPushButton (i18n ("Continue"), this); connect (continue_button, SIGNAL (clicked()), this, SLOT (continueButtonClicked())); button_layout->addWidget (continue_button); cancel_button = new QPushButton (i18n ("Cancel"), this); connect (cancel_button, SIGNAL (clicked()), this, SLOT (cancelButtonClicked())); button_layout->addWidget (cancel_button); button_layout->addStretch (); QHBoxLayout *lower_layout = new QHBoxLayout (); main_layout->addLayout (lower_layout); prompt_label = new QLabel (this); lower_layout->addWidget (prompt_label); reply_edit = new KHistoryComboBox (this); reply_edit->setSizePolicy (QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); connect (reply_edit, SIGNAL (returnPressed()), this, SLOT (sendReply())); lower_layout->addWidget (reply_edit); setFocusProxy (reply_edit); setFocusPolicy (Qt::StrongFocus); setPart (new RKDummyPart (this, this)); initializeActivationSignals (); connect (RKDebugHandler::instance (), SIGNAL (newDebugState()), this, SLOT (newDebugState())); newDebugState (); } RKDebugConsole::~RKDebugConsole () { RK_TRACE (APP); } void RKDebugConsole::newDebugState () { RK_TRACE (APP); bool enable = true; if (RKDebugHandler::instance ()->state () == RKDebugHandler::NotInDebugger) { context_view->setPlainText (i18n ("Not in a debugger context")); setEnabled (false); return; } else if (RKDebugHandler::instance ()->state () == RKDebugHandler::InDebugRun) { enable = false; reply_edit->setEnabled (false); } else { context_view->setPlainText (RKDebugHandler::instance ()->outputContext ()); prompt_label->setText (RKDebugHandler::instance ()->debugPrompt ()); reply_edit->setEnabled (true); // must come before focus QStringList ch = RKConsole::mainConsole ()->commandHistory (); QStringList ch_rev; // limit to 100 items (dropdown list!), and reverse to have most recent item first. for (int i = ch.size () - 1; i >= qMax (0, ch.size () - 101); --i) { ch_rev.append (ch[i]); } reply_edit->setMaxCount (ch_rev.size ()); reply_edit->setHistoryItems (ch_rev); activate (true); } setEnabled (true); step_button->setEnabled (enable); step_out_button->setEnabled (enable); continue_button->setEnabled (enable); cancel_button->setEnabled (enable); } void RKDebugConsole::sendReply () { RK_TRACE (APP); QString reply = reply_edit->currentText (); sendReply (reply); RKConsole::mainConsole ()->addCommandToHistory (reply); reply_edit->clear (); } void RKDebugConsole::stepOutButtonClicked () { RK_TRACE (APP); sendReply ("browserSetDebug(1)\ncont\n"); } void RKDebugConsole::stepButtonClicked () { RK_TRACE (APP); sendReply ("n\n"); } void RKDebugConsole::continueButtonClicked () { RK_TRACE (APP); sendReply ("cont\n"); } void RKDebugConsole::cancelButtonClicked () { RK_TRACE (APP); RKDebugHandler::instance ()->sendCancel (); } void RKDebugConsole::sendReply (const QString &reply) { RK_TRACE (APP); RKDebugHandler::instance ()->submitDebugString (reply); } bool RKDebugConsole::close (bool also_delete) { RK_TRACE (APP); if (RKDebugHandler::instance ()->state () != RKDebugHandler::NotInDebugger) { KMessageBox::sorry (this, i18n ("This window cannot be closed, while a debugger is active. If you have no idea what this means, and you want to get out, press the 'Cancel' button on the right hand side of this window.")); return false; } return RKMDIWindow::close (also_delete); } #include "rkdebugconsole.moc" rkward-0.6.1/rkward/windows/rkworkplaceview.h0000644000175000017500000000664212124345411020741 0ustar thomasthomas/*************************************************************************** rkworkplaceview - description ------------------- begin : Tue Sep 26 2006 copyright : (C) 2006, 2007, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKWORKPLACEVIEW_H #define RKWORKPLACEVIEW_H #include class RKMDIWindow; class KAction; class KActionCollection; /** This is mostly a KTabWidget with some extras such as updating the caption, a context menu, etc. */ class RKWorkplaceView : public KTabWidget { Q_OBJECT public: /** constructor @param parent parent QWidget */ explicit RKWorkplaceView (QWidget *parent); ~RKWorkplaceView (); /** add the given window to the view */ void addWindow (RKMDIWindow *widget); /** remove the given window to the view @param destroyed if the window is already destroyed, set this to true */ void removeWindow (RKMDIWindow *widget, bool destroyed=false); /** does this window exist in the view? */ bool hasWindow (RKMDIWindow *widget); /** activate the given window */ void setActivePage (RKMDIWindow *widget); /** @returns the currently active window */ RKMDIWindow *activePage (); /** reimplemented form QWidget::setCaption () to emit captionChanged () when the caption changes */ void setCaption (const QString &caption); /** initialize the window left/right actions */ void initActions (KActionCollection *ac, const char *id_left, const char *id_right); signals: /** a new page / window was activated @param widget the newly activated window */ void pageChanged (RKMDIWindow *widget); /** caption has changed @param new_caption the new caption */ void captionChanged (const QString &new_caption); private slots: /** (Attempts to) close the current tab */ void closeCurrentPage (); /** handle context menu requests */ void showContextMenu (const QPoint &pos); /** handle close request from context menu */ void contextMenuClosePage (); /** handle detach request from context menu */ void contextMenuDetachWindow (); /** Internal function to update caption and actions, when the current page has changed. */ void currentPageChanged (int page); /** called when the caption of a window changes. Updates the tab-label, and - if appropriate - the caption of this widget */ void childCaptionChanged (RKMDIWindow *widget); /** Active the page left of the current tab */ void pageLeft (); /** Active the page right of the current tab */ void pageRight (); /** Close a page given the correspoding widget */ void closePage (QWidget* page); /** Close a page given its index */ void closePage (int page); private: void updateActions (); KAction *action_page_left; KAction *action_page_right; }; #endif rkward-0.6.1/rkward/windows/rkcommandlog.h0000644000175000017500000000721212124345411020171 0ustar thomasthomas/*************************************************************************** rkcommandlog - description ------------------- begin : Sun Nov 3 2002 copyright : (C) 2002, 2004, 2005, 2006, 2007, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMMANDLOG_H #define RKCOMMANDLOG_H #include #include #include "rkmdiwindow.h" #include "../settings/rksettings.h" #include "../rbackend/rcommandreceiver.h" class RCommand; class ROutput; class RKCommandLogView; class RKCommandLogPart; /** \brief This widget shows all executed commands and their result @author Thomas Friedrichsmeier */ class RKCommandLog : public RKMDIWindow, public RCommandReceiver { Q_OBJECT public: /** Adds input to the log_view-window (i.e. commands issued) */ void addInput (RCommand *command); /** Adds output to the log_view-window (i.e. replies received) */ void newOutput (RCommand *command, ROutput *output_fragment); static RKCommandLog *getLog () { return rkcommand_log; }; RKCommandLogView *getView () { return log_view; }; protected: /** Command has finished. If the command has failed, it may be necessary to print some more information */ void rCommandDone (RCommand *command); RKCommandLog (QWidget *parent, bool tool_window, const char *name=0); ~RKCommandLog (); public slots: /** configures the log_view-window */ void configureLog (); /** clears the log_view-window */ void clearLog (); void runSelection (); void settingsChanged (RKSettings::SettingsPage page); private: void addInputNoCheck (RCommand *command); void addOutputNoCheck (RCommand *command, ROutput *output); void checkRaiseWindow (RCommand *command); /** internal helper function, called whenever a line/lines have been added. Check whether log is longer than maximum setting. Scroll to the bottom */ void linesAdded (); /** Used to keep track, which commands "input" has already been shown */ QList command_input_shown; /** On a given command, the log_view should not be raised more than once */ int last_raised_command; RKCommandLogView *log_view; friend class RKWardMainWindow; static RKCommandLog *rkcommand_log; }; /** Simply subclass of QTextEdit to override context menu handling */ class RKCommandLogView : public QTextEdit { Q_OBJECT public: RKCommandLogView (RKCommandLog *parent); ~RKCommandLogView (); public slots: void selectAll (); signals: void popupMenuRequest (const QPoint &pos); protected: void contextMenuEvent (QContextMenuEvent *event); }; #include class KAction; /** Provides a part interface for the RKCommandLog */ class RKCommandLogPart : public KParts::Part { Q_OBJECT public: explicit RKCommandLogPart (RKCommandLog *for_log); ~RKCommandLogPart (); void initActions (); public slots: void doPopupMenu (const QPoint &pos); private: RKCommandLog *log; QAction *run_selection; QAction *copy; }; #endif rkward-0.6.1/rkward/windows/rcontrolwindow.cpp0000644000175000017500000001246712124345411021151 0ustar thomasthomas/*************************************************************************** rcontrolwindow - description ------------------- begin : Wed Oct 12 2005 copyright : (C) 2005, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rcontrolwindow.h" #include #include #include #include #include #include #include "../settings/rksettings.h" #include "../misc/rkdummypart.h" #include "../rbackend/rinterface.h" #include "../rbackend/rcommand.h" #include "../rbackend/rcommandstack.h" #include "../rkglobals.h" #include "../rkward.h" #include "../debug.h" //static RControlWindow *RControlWindow::control_window = 0; RControlWindow::RControlWindow (QWidget *parent, bool tool_window, const char *name) : RKMDIWindow (parent, PendingJobsWindow, tool_window, name) { RK_TRACE (APP); setPart (new RKDummyPart (0, this)); initializeActivationSignals (); setFocusPolicy (Qt::ClickFocus); QVBoxLayout *main_vbox = new QVBoxLayout (this); QHBoxLayout *button_hbox = new QHBoxLayout (); button_hbox->setContentsMargins (0, 0, 0, 0); main_vbox->addLayout (button_hbox); QPushButton *configure_r_button = new QPushButton (i18n ("Configure R backend"), this); connect (configure_r_button, SIGNAL (clicked ()), this, SLOT (configureButtonClicked ())); button_hbox->addWidget (configure_r_button); button_hbox->addStretch (); pause_button = new QPushButton (i18n ("Pause execution"), this); connect (pause_button, SIGNAL (clicked ()), this, SLOT (pauseButtonClicked ())); button_hbox->addWidget (pause_button); button_hbox->addStretch (); cancel_button = new QPushButton (i18n ("Cancel selected commands"), this); connect (cancel_button, SIGNAL (clicked ()), this, SLOT (cancelButtonClicked ())); button_hbox->addWidget (cancel_button); commands_view = new QTreeView (this); commands_view->setSortingEnabled (false); commands_view->header ()->setMovable (false); commands_view->header ()->setStretchLastSection (false); commands_view->setSelectionMode (QAbstractItemView::ExtendedSelection); main_vbox->addWidget (commands_view); paused = false; } RControlWindow::~RControlWindow () { RK_TRACE (APP); if (commands_view->model ()) { commands_view->setModel (0); RCommandStackModel::getModel ()->removeListener (); } } void RControlWindow::showEvent (QShowEvent *e) { RK_TRACE (APP); if (!commands_view->model ()) { RCommandStackModel::getModel ()->addListener (); commands_view->setModel (RCommandStackModel::getModel ()); commands_view->header ()->setResizeMode (0, QHeaderView::Stretch); // can't do this in the ctor, as column 0 does not yet exist commands_view->expandAll (); } RKMDIWindow::showEvent (e); } void RControlWindow::hideEvent (QHideEvent *e) { RK_TRACE (APP); if (commands_view->model ()) { commands_view->setModel (0); RCommandStackModel::getModel ()->removeListener (); } RKMDIWindow::hideEvent (e); } void RControlWindow::cancelButtonClicked () { RK_TRACE (APP); RCommandStackModel::getModel ()->index (0, 0, QModelIndex ()); // side-effect of locking the mutex QModelIndexList list = commands_view->selectionModel ()->selectedIndexes (); bool some_not_cancelable = false; // find out all the RCommands selected (not the chains) for (QModelIndexList::const_iterator it = list.constBegin (); it != list.constEnd (); ++it) { if ((*it).column ()) continue; // only react once per row RCommandBase* coc = static_cast ((*it).internalPointer ()); RK_ASSERT (coc); RCommand* command = coc->commandPointer (); if (command) { if (!(command->type () & RCommand::Sync)) { RKGlobals::rInterface ()->cancelCommand (command); } else { some_not_cancelable = true; } } } if (some_not_cancelable) { KMessageBox::information (this, i18n ("Some of the commands you were trying to cancel are marked as \"sync\" (letter 'S' in the type column). Cancelling such commands could lead to loss of data. These commands have _not_ been cancelled."), i18n ("Some commands not cancelled"), "cancel_sync"); } } void RControlWindow::pauseButtonClicked () { RK_TRACE (APP); if (paused) { RKGlobals::rInterface ()->pauseProcessing (false); pause_button->setText (i18n ("Pause execution")); paused = false; } else { RKGlobals::rInterface ()->pauseProcessing (true); pause_button->setText (i18n ("Resume execution")); paused = true; } } void RControlWindow::configureButtonClicked () { RK_TRACE (APP); RKSettings::configureSettings (RKSettings::PageR, this); } #include "rcontrolwindow.moc" rkward-0.6.1/rkward/windows/rktoolwindowbar.h0000644000175000017500000000543512124345411020750 0ustar thomasthomas/*************************************************************************** rktoolwindowbar - description ------------------- begin : Fri Oct 12 2007 copyright : (C) 2007, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* This code is based substantially on kate's katemdi! */ #ifndef RKTOOLWINDOWBAR_H #define RKTOOLWINDOWBAR_H #include #include #include class QSplitter; class QObject; class QEvent; class QAction; class KHBox; class RKMDIWindow; /** This class represents one of the bar which tool windows can dock into (top, left, bottom, right). It contains heavy copying from Kate's katemdi SideBar class. I wish this was available as a library, but it isn't, yet. Some more would need to be copied for full functionality (session saving / restoring), but for now, I focussed on the bare essentials */ class RKToolWindowBar : public KMultiTabBar { Q_OBJECT public: RKToolWindowBar (KMultiTabBar::KMultiTabBarPosition position, QWidget *parent); ~RKToolWindowBar (); void setSplitter (QSplitter *splitter); void addWidget (RKMDIWindow *widget); void removeWidget (RKMDIWindow *widget); void showWidget (RKMDIWindow *widget); void hideWidget (RKMDIWindow *widget); void restoreSize (const KConfigGroup &cg); void saveSize (KConfigGroup &cg) const; private slots: void tabClicked (int id); void changeAttachment (); void moveToolWindow (int target); void addRemoveToolWindow (QAction* action); void splitterMoved (int, int); protected: /** handle RMB clicks on individual buttons */ bool eventFilter (QObject *obj, QEvent *ev); /** handle RMB clicks on the bar itself */ void contextMenuEvent (QContextMenuEvent *event); private: friend class RKWorkplace; void reclaimDetached (RKMDIWindow *window); int getSplitterSize () const; void setSplitterSize (int new_size); QMap widget_to_id; RKMDIWindow* idToWidget (int id) const; QSplitter* splitter; KHBox* container; int last_known_size; int id_of_popup; }; #endif rkward-0.6.1/rkward/windows/rkwindowcatcher.cpp0000644000175000017500000006642212124345411021255 0ustar thomasthomas/*************************************************************************** rwindowcatcher.cpp - description ------------------- begin : Wed May 4 2005 copyright : (C) 2005 - 2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkwindowcatcher.h" #ifndef DISABLE_RKWINDOWCATCHER #include #include #include #include #include #include #include "../rkwardapplication.h" #include "../settings/rksettingsmodulegraphics.h" #include "rkworkplace.h" #include "../misc/rkstandardicons.h" #include "../debug.h" RKWindowCatcher::RKWindowCatcher () { RK_TRACE (MISC); } RKWindowCatcher::~RKWindowCatcher () { RK_TRACE (MISC); } void RKWindowCatcher::start (int prev_cur_device) { RK_TRACE (MISC); RK_DEBUG (RBACKEND, DL_DEBUG, "Window Catcher activated"); RKWardApplication::getApp ()->startWindowCreationDetection (); last_cur_device = prev_cur_device; } void RKWindowCatcher::stop (int new_cur_device) { RK_TRACE (MISC); RK_DEBUG (RBACKEND, DL_DEBUG, "Window Catcher deactivated"); WId w = RKWardApplication::getApp ()->endWindowCreationDetection (); if (new_cur_device != last_cur_device) { if (w) { RKWorkplace::mainWorkplace ()->newX11Window (w, new_cur_device); #if defined Q_WS_X11 // All this syncing looks like a bloody hack? Absolutely. It appears to work around the occasional error "figure margins too large" from R, though. qApp->processEvents (); qApp->syncX (); qApp->processEvents (); // this appears to have the side-effect of forcing the captured window to sync with X, which is exactly, what we're trying to achieve. KWindowInfo wininfo = KWindowSystem::windowInfo (w, NET::WMName | NET::WMGeometry); #endif } else { #if defined Q_WS_MAC KMessageBox::information (0, i18n ("You have created a new graphics device window in R. Usually, RKWard tries to detect such windows, to take control of them, and add a menu-bar to them. However, this is not currently supported in this build of RKWard on Mac OS X. See http://p.sf.net/rkward/mac for more information."), i18n ("Could not embed R X11 window"), "embed_x11_device_not_supported"); #else KMessageBox::information (0, i18n ("You have created a new X11 device window in R. Usually, RKWard tries to detect such windows, to take control of them, and add a menu-bar to them. This time, however, RKWard failed to detect, which window was created, and so can not embed it.\nIf you created the window on a different screen or X11 display, that is to be expected. You might want to consider changing options(\"display\"), then.\nIf you can see the X11 window on the same screen as this message, then RKWard should do better. In this case, please contact us at rkward-devel@lists.sourceforge.net with details on your setup, so we can try to fix this in future versions of RKWard."), i18n ("Could not embed R X11 window"), "failure_to_detect_x11_device"); #endif } } last_cur_device = new_cur_device; } void RKWindowCatcher::updateHistory (QStringList params) { RK_TRACE (MISC); RK_ASSERT (params.count () >= 1); int history_length = params[0].toInt (); QStringList labels = params.mid (1, history_length); RK_ASSERT (((params.count () - history_length) % 2) == 1) for (int i = history_length + 1; i < (params.count () - 1); i += 2) { RKCaughtX11Window* window = RKCaughtX11Window::getWindow (params[i].toInt ()); if (window) { int position = params[i+1].toInt (); window->updateHistoryActions (history_length, position, labels); } else { RK_DEBUG (RBACKEND, DL_DEBUG, "Device %d is not managed, while trying to update history", params[i].toInt ()); } } } void RKWindowCatcher::killDevice (int device_number) { RK_TRACE (MISC); RKCaughtX11Window* window = RKCaughtX11Window::getWindow (device_number); if (window) { window->setKilledInR (); window->close (true); QApplication::syncX (); } } ///////////////////////////////// END RKWindowCatcher ////////////////////////////////// /**************************************************************************************/ //////////////////////////////// BEGIN RKCaughtX11Window ////////////////////////////// #include #include #ifdef Q_WS_WIN # include "../qwinhost/qwinhost.h" # include #elif defined Q_WS_X11 # include #endif #include #include #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "../core/robject.h" #include "../misc/rkprogresscontrol.h" #include "../misc/rksaveobjectchooser.h" #include "../plugin/rkcomponentcontext.h" // static QHash RKCaughtX11Window::device_windows; RKCaughtX11Window::RKCaughtX11Window (WId window_to_embed, int device_number) : RKMDIWindow (0, X11Window), RCommandReceiver () { RK_TRACE (MISC); capture = 0; killed_in_r = close_attempted = false; embedded = window_to_embed; RKCaughtX11Window::device_number = device_number; RK_ASSERT (!device_windows.contains (device_number)); device_windows.insert (device_number, this); error_dialog = new RKProgressControl (0, i18n ("An error occurred"), i18n ("An error occurred"), RKProgressControl::DetailedError); setPart (new RKCaughtX11WindowPart (this)); setMetaInfo (i18n ("Graphics Device Window"), "rkward://page/rkward_plot_history", RKSettings::PageX11); initializeActivationSignals (); setFocusPolicy (Qt::ClickFocus); updateHistoryActions (0, 0, QStringList ()); status_popup = new KPassivePopup (this); status_popup->setTimeout (0); disconnect (status_popup, SIGNAL (clicked()), status_popup, SLOT (hide())); // no auto-hiding, please QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); box_widget = new KVBox (this); layout->addWidget (box_widget); scroll_widget = new QScrollArea (this); scroll_widget->hide (); layout->addWidget (scroll_widget); xembed_container = new KVBox (box_widget); // QX11EmbedContainer can not be reparented (between the box_widget, and the scroll_widget) directly. Therefore we place it into a container, and reparent that instead #ifdef Q_WS_WIN // unfortunately, trying to get KWindowInfo as below hangs on windows (KDElibs 4.2.3) WINDOWINFO wininfo; wininfo.cbSize = sizeof (WINDOWINFO); GetWindowInfo (embedded, &wininfo); // clip off the window frame and menubar xembed_container->setContentsMargins (wininfo.rcWindow.left - wininfo.rcClient.left, wininfo.rcWindow.top - wininfo.rcClient.top, wininfo.rcClient.right - wininfo.rcWindow.right, wininfo.rcClient.bottom - wininfo.rcWindow.bottom); // set a fixed size until the window is shown xembed_container->setFixedSize (wininfo.rcClient.right - wininfo.rcClient.left, wininfo.rcClient.bottom - wininfo.rcClient.top); setGeometry (wininfo.rcClient.left, wininfo.rcClient.right, wininfo.rcClient.top, wininfo.rcClient.bottom); // see comment in X11 section move (wininfo.rcClient.left, wininfo.rcClient.top); // else the window frame may be off scree on top/left. #elif defined Q_WS_X11 KWindowInfo wininfo = KWindowSystem::windowInfo (embedded, NET::WMName | NET::WMGeometry); RK_ASSERT (wininfo.valid ()); // set a fixed size until the window is shown xembed_container->setFixedSize (wininfo.geometry ().width (), wininfo.geometry ().height ()); setGeometry (wininfo.geometry ()); // it's important to set a size, even while not visible. Else DetachedWindowContainer will assign a default size of 640*480, and then size upwards, if necessary. setCaption (wininfo.name ()); #endif dynamic_size = false; dynamic_size_action->setChecked (false); // somehow in Qt 4.4.3, when the RKCaughtWindow is reparented the first time, the QX11EmbedContainer may kill its client. Hence we delay the actual embedding until after the window was shown. // In some previous version of Qt, this was not an issue, but I did not track the versions. QTimer::singleShot (0, this, SLOT (doEmbed())); } void RKCaughtX11Window::doEmbed () { RK_TRACE (MISC); #ifdef Q_WS_WIN capture = new QWinHost (xembed_container); capture->setWindow (embedded); capture->setFocusPolicy (Qt::ClickFocus); capture->setAutoDestruct (true); connect (capture, SIGNAL (clientDestroyed()), this, SLOT (deleteLater()), Qt::QueuedConnection); connect (capture, SIGNAL (clientTitleChanged(const QString&)), this, SLOT (setCaption(const QString&)), Qt::QueuedConnection); setCaption (capture->getClientTitle ()); #elif defined Q_WS_X11 capture = new QX11EmbedContainer (xembed_container); capture->embedClient (embedded); connect (capture, SIGNAL (clientClosed ()), this, SLOT (deleteLater ())); RKWardApplication::getApp ()->registerNameWatcher (embedded, this); #endif // make xembed_container resizable, again, now that it actually has a content dynamic_size_action->setChecked (true); fixedSizeToggled (); // try to be helpful when the window is too large to fit on screen QRect dims = window ()->frameGeometry (); QRect avail = QApplication::desktop ()->availableGeometry (window ()); if ((dims.width () > avail.width ()) || (dims.height () > avail.height ())) { KMessageBox::information (this, i18n ("The current window appears too large to fit on the screen. If this happens regularly, you may want to adjust the default graphics window size in Settings->Configure RKWard->Onscreen Graphics."), i18n ("Large window"), "dont_ask_again_large_x11_window"); } } RKCaughtX11Window::~RKCaughtX11Window () { RK_TRACE (MISC); RK_ASSERT (device_windows.contains (device_number)); device_windows.remove (device_number); close (false); #ifdef Q_WS_X11 RKWardApplication::getApp ()->unregisterNameWatcher (embedded); #endif error_dialog->autoDeleteWhenDone (); delete status_popup; } void RKCaughtX11Window::forceClose () { killed_in_r = true; if (capture) { #ifdef Q_WS_X11 // HACK: Somehow (R 3.0.0alpha), the X11() window is surpisingly die-hard, if it is not close "the regular way". // So we expurge it, and leave the rest to the user. capture->discardClient (); qApp->processEvents (); #endif } RKMDIWindow::close (true); } bool RKCaughtX11Window::close (bool also_delete) { RK_TRACE (MISC); if (killed_in_r || RKGlobals::rInterface ()->backendIsDead ()) { return RKMDIWindow::close (also_delete); } QString status = i18n ("Closing device (saving history)"); if (!close_attempted) { RCommand* c = new RCommand ("dev.off (" + QString::number (device_number) + ')', RCommand::App, i18n ("Shutting down device number %1", device_number)); setStatusMessage (status, c); RKGlobals::rInterface ()->issueCommand (c); close_attempted = true; } else { if (KMessageBox::questionYesNo (this, i18n ("

    The graphics device is being closed, saving the last plot to the plot history. This may take a while, if the R backend is still busy. You can close the graphics device immediately, in case it is stuck. However, the last plot may be missing from the plot history, if you do this.

    ") #ifdef Q_WS_X11 + i18n ("

    Note: On X11, the embedded window may be expurged, and you will have to close it manually in this case.

    ") #endif , status, KGuiItem (i18n ("Close immediately")), KGuiItem (i18n ("Keep waiting"))) == KMessageBox::Yes) forceClose (); } return false; } void RKCaughtX11Window::reEmbed () { RK_TRACE (MISC); #ifdef Q_WS_X11 if (!capture) return; // somehow, since some version of Qt, the QX11EmbedContainer would loose its client while reparenting. This allows us to circumvent the problem. capture->discardClient (); capture->deleteLater (); RKWardApplication::getApp ()->unregisterNameWatcher (embedded); QTimer::singleShot (0, this, SLOT(doEmbed())); #endif } void RKCaughtX11Window::prepareToBeAttached () { RK_TRACE (MISC); dynamic_size_action->setChecked (false); fixedSizeToggled (); dynamic_size_action->setEnabled (false); reEmbed (); } void RKCaughtX11Window::prepareToBeDetached () { RK_TRACE (MISC); dynamic_size_action->setEnabled (true); reEmbed (); } void RKCaughtX11Window::fixedSizeToggled () { RK_TRACE (MISC); if (dynamic_size == dynamic_size_action->isChecked ()) return; dynamic_size = dynamic_size_action->isChecked (); if (dynamic_size_action->isChecked ()) { scroll_widget->takeWidget (); xembed_container->setParent (box_widget); xembed_container->show (); scroll_widget->hide (); box_widget->show (); xembed_container->setMinimumSize (5, 5); xembed_container->setMaximumSize (32767, 32767); } else { xembed_container->setFixedSize (xembed_container->size ()); scroll_widget->setWidget (xembed_container); box_widget->hide (); scroll_widget->show (); } } void RKCaughtX11Window::setFixedSize1 () { RK_TRACE (MISC); dynamic_size_action->setChecked (false); fixedSizeToggled (); // apparently KToggleAction::setChecked () does not invoke the slot! xembed_container->setFixedSize (500, 500); } void RKCaughtX11Window::setFixedSize2 () { RK_TRACE (MISC); dynamic_size_action->setChecked (false); fixedSizeToggled (); // see setFixedSize1 () above xembed_container->setFixedSize (1000, 1000); } void RKCaughtX11Window::setFixedSize3 () { RK_TRACE (MISC); dynamic_size_action->setChecked (false); fixedSizeToggled (); // see setFixedSize1 () above xembed_container->setFixedSize (2000, 2000); } void RKCaughtX11Window::setFixedSizeManual () { RK_TRACE (MISC); // TODO: not very pretty, yet KDialog *dialog = new KDialog (this); dialog->setButtons (KDialog::Ok|KDialog::Cancel); dialog->setCaption (i18n ("Specify fixed size")); dialog->setModal (true); KVBox *page = new KVBox (dialog); dialog->setMainWidget (page); new QLabel (i18n ("Width"), page); KIntSpinBox *width = new KIntSpinBox (5, 32767, 1, xembed_container->width (), page, 10); width->setEditFocus (true); new QLabel (i18n ("Height"), page); KIntSpinBox *height = new KIntSpinBox (5, 32767, 1, xembed_container->height (), page, 10); dialog->exec (); if (dialog->result () == QDialog::Accepted) { dynamic_size_action->setChecked (false); fixedSizeToggled (); // see setFixedSize1 () above xembed_container->setFixedSize (width->value (), height->value ()); } delete dialog; } void RKCaughtX11Window::activateDevice () { RK_TRACE (MISC); RKGlobals::rInterface ()->issueCommand ("dev.set (" + QString::number (device_number) + ")", RCommand::App, i18n ("Activate graphics device number %1", device_number), error_dialog); } void RKCaughtX11Window::copyDeviceToOutput () { RK_TRACE (MISC); RKGlobals::rInterface ()->issueCommand ("dev.set (" + QString::number (device_number) + ")\ndev.copy (device=rk.graph.on)\nrk.graph.off ()", RCommand::App | RCommand::CCOutput, i18n ("Copy contents of graphics device number %1 to output", device_number), error_dialog); } void RKCaughtX11Window::printDevice () { RK_TRACE (MISC); QString printer_device; if (RKSettingsModuleGraphics::kdePrintingEnabled ()) printer_device = "rk.printer.device"; RKGlobals::rInterface ()->issueCommand ("dev.set (" + QString::number (device_number) + ")\ndev.print (" + printer_device + ")", RCommand::App, i18n ("Print contents of graphics device number %1", device_number), error_dialog); } void RKCaughtX11Window::copyDeviceToRObject () { RK_TRACE (MISC); // TODO: not very pretty, yet KDialog *dialog = new KDialog (this); dialog->setButtons (KDialog::Ok|KDialog::Cancel); dialog->setCaption (i18n ("Specify R object")); dialog->setModal (true); KVBox *page = new KVBox (dialog); dialog->setMainWidget (page); new QLabel (i18n ("Specify the R object name, you want to save the graph to"), page); RKSaveObjectChooser *chooser = new RKSaveObjectChooser (page, "my.plot"); connect (chooser, SIGNAL (changed (bool)), dialog, SLOT (enableButtonOk (bool))); if (!chooser->isOk ()) dialog->enableButtonOk (false); dialog->exec (); if (dialog->result () == QDialog::Accepted) { RK_ASSERT (chooser->isOk ()); QString name = chooser->currentFullName (); RKGlobals::rInterface ()->issueCommand ("dev.set (" + QString::number (device_number) + ")\n" + name + " <- recordPlot ()", RCommand::App | RCommand::ObjectListUpdate, i18n ("Save contents of graphics device number %1 to object '%2'", device_number, name), error_dialog); } delete dialog; } void RKCaughtX11Window::duplicateDevice () { RK_TRACE (MISC); RKGlobals::rInterface ()->issueCommand ("rk.duplicate.device (" + QString::number (device_number) + ")", RCommand::App, i18n ("Duplicate graphics device number %1", device_number), error_dialog); } void RKCaughtX11Window::nextPlot () { RK_TRACE (MISC); RCommand* c = new RCommand ("rk.next.plot (" + QString::number (device_number) + ')', RCommand::App, i18n ("Load next plot in device number %1", device_number), error_dialog); setStatusMessage (i18n ("Loading plot from history"), c); RKGlobals::rInterface ()->issueCommand (c); } void RKCaughtX11Window::previousPlot () { RK_TRACE (MISC); RCommand* c = new RCommand ("rk.previous.plot (" + QString::number (device_number) + ')', RCommand::App, i18n ("Load previous plot in device number %1", device_number), error_dialog); setStatusMessage (i18n ("Loading plot from history"), c); RKGlobals::rInterface ()->issueCommand (c); } void RKCaughtX11Window::firstPlot () { RK_TRACE (MISC); RCommand* c = new RCommand ("rk.first.plot (" + QString::number (device_number) + ')', RCommand::App, i18n ("Load first plot in device number %1", device_number), error_dialog); setStatusMessage (i18n ("Loading plot from history"), c); RKGlobals::rInterface ()->issueCommand (c); } void RKCaughtX11Window::lastPlot () { RK_TRACE (MISC); RCommand* c = new RCommand ("rk.last.plot (" + QString::number (device_number) + ')', RCommand::App, i18n ("Load last plot in device number %1", device_number), error_dialog); setStatusMessage (i18n ("Loading plot from history"), c); RKGlobals::rInterface ()->issueCommand (c); } void RKCaughtX11Window::gotoPlot (int index) { RK_TRACE (MISC); RCommand* c = new RCommand ("rk.goto.plot (" + QString::number (device_number) + ", " + QString::number (index+1) + ')', RCommand::App, i18n ("Load plot %1 in device number %2", index, device_number), error_dialog); setStatusMessage (i18n ("Loading plot from history"), c); RKGlobals::rInterface ()->issueCommand (c); } void RKCaughtX11Window::forceAppendCurrentPlot () { RK_TRACE (MISC); RKGlobals::rInterface ()->issueCommand ("rk.force.append.plot (" + QString::number (device_number) + ')', RCommand::App, i18n ("Append this plot to history (device number %1)", device_number), error_dialog); } void RKCaughtX11Window::removeCurrentPlot () { RK_TRACE (MISC); RKGlobals::rInterface ()->issueCommand ("rk.removethis.plot (" + QString::number (device_number) + ')', RCommand::App, i18n ("Remove current plot from history (device number %1)", device_number), error_dialog); } void RKCaughtX11Window::clearHistory () { RK_TRACE (MISC); if (KMessageBox::warningContinueCancel (this, i18n ("This will clear the plot history for all device windows, not just this one. If this is not your intent, press cancel, below.")) != KMessageBox::Continue) return; RKGlobals::rInterface ()->issueCommand ("rk.clear.plot.history ()", RCommand::App, i18n ("Clear plot history"), error_dialog); } void RKCaughtX11Window::showPlotInfo () { RK_TRACE (MISC); RKGlobals::rInterface ()->issueCommand ("rk.show.plot.info (" + QString::number (device_number) + ")", RCommand::App, i18n ("Plot properties (device number %1)", device_number), error_dialog); } void RKCaughtX11Window::updateHistoryActions (int history_length, int position, const QStringList &labels) { RK_TRACE (MISC); RKCaughtX11Window::history_length = history_length; RKCaughtX11Window::history_position = position; plot_first_action->setEnabled ((history_length > 0) && (position > 1)); plot_prev_action->setEnabled ((history_length > 0) && (position > 1)); plot_next_action->setEnabled ((history_length > 0) && (position < history_length)); plot_last_action->setEnabled ((history_length > 0) && (position < history_length)); QStringList _labels = labels; if (position > history_length) _labels.append (i18n ("")); plot_list_action->setItems (_labels); plot_list_action->setCurrentItem (history_position - 1); plot_list_action->setEnabled (history_length > 0); plot_force_append_action->setEnabled ((history_length > 0) && (RKSettingsModuleGraphics::plotHistoryEnabled ())); plot_remove_action->setEnabled (history_length > 0); plot_clear_history_action->setEnabled (history_length > 0); plot_properties_action->setEnabled (RKSettingsModuleGraphics::plotHistoryEnabled ()); } void RKCaughtX11Window::setStatusMessage (const QString& message, RCommand *command) { RK_TRACE (MISC); status_change_command = command; if (command) command->addReceiver (this); if (!message.isEmpty ()) { status_popup->setView (QString (), message); status_popup->show (xembed_container->mapToGlobal (QPoint (20, 20))); } else { status_popup->hide (); } } // static void RKCaughtX11Window::setStatusMessage(int dev_num, const QString& message, RCommand* command) { RK_TRACE (MISC); RKCaughtX11Window *window = getWindow (dev_num); if (!window) return; window->setStatusMessage (message, command); } void RKCaughtX11Window::rCommandDone (RCommand *command) { RK_TRACE (MISC); if (command == status_change_command) { setStatusMessage (QString ()); status_popup->hide(); } RCommandReceiver::rCommandDone (command); } ///////////////////////////////// END RKCaughtX11Window /////////////////////////////// /**************************************************************************************/ //////////////////////////////// BEGIN RKCaughtX11WindowPart ////////////////////////// RKCaughtX11WindowPart::RKCaughtX11WindowPart (RKCaughtX11Window *window) : KParts::Part (0) { RK_TRACE (MISC); setComponentData (KGlobal::mainComponent ()); setWidget (window); RKCaughtX11WindowPart::window = window; setXMLFile ("rkcatchedx11windowpart.rc"); window->dynamic_size_action = new KToggleAction (i18n ("Draw area follows size of window"), window); connect (window->dynamic_size_action, SIGNAL (triggered()), window, SLOT (fixedSizeToggled())); actionCollection ()->addAction ("toggle_fixed_size", window->dynamic_size_action); QAction *action; action = actionCollection ()->addAction ("set_fixed_size_1", window, SLOT (setFixedSize1())); action->setText (i18n ("Set fixed size 500x500")); action = actionCollection ()->addAction ("set_fixed_size_2", window, SLOT (setFixedSize2())); action->setText (i18n ("Set fixed size 1000x1000")); action = actionCollection ()->addAction ("set_fixed_size_3", window, SLOT (setFixedSize3())); action->setText (i18n ("Set fixed size 2000x2000")); action = actionCollection ()->addAction ("set_fixed_size_manual", window, SLOT (setFixedSizeManual())); action->setText (i18n ("Set specified fixed size...")); action = actionCollection ()->addAction ("plot_prev", window, SLOT (previousPlot())); action->setText (i18n ("Previous plot")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveLeft)); window->plot_prev_action = (KAction*) action; action = actionCollection ()->addAction ("plot_first", window, SLOT (firstPlot())); action->setText (i18n ("First plot")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveFirst)); window->plot_first_action = (KAction*) action; action = actionCollection ()->addAction ("plot_next", window, SLOT (nextPlot())); action->setText (i18n ("Next plot")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveRight)); window->plot_next_action = (KAction*) action; action = actionCollection ()->addAction ("plot_last", window, SLOT (lastPlot())); action->setText (i18n ("Last plot")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionMoveLast)); window->plot_last_action = (KAction*) action; action = window->plot_list_action = new KSelectAction (i18n ("Go to plot"), 0); window->plot_list_action->setToolBarMode (KSelectAction::MenuMode); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionListPlots)); actionCollection ()->addAction ("plot_list", action); connect (action, SIGNAL (triggered(int)), window, SLOT (gotoPlot(int))); action = actionCollection ()->addAction ("plot_force_append", window, SLOT (forceAppendCurrentPlot())); action->setText (i18n ("Append this plot")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionSnapshot)); window->plot_force_append_action = (KAction*) action; action = actionCollection ()->addAction ("plot_remove", window, SLOT (removeCurrentPlot())); action->setText (i18n ("Remove this plot")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionRemovePlot)); window->plot_remove_action = (KAction*) action; action = actionCollection ()->addAction ("plot_clear_history", window, SLOT (clearHistory())); window->plot_clear_history_action = (KAction*) action; action->setText (i18n ("Clear history")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionClear)); action = actionCollection ()->addAction ("plot_properties", window, SLOT (showPlotInfo())); window->plot_properties_action = (KAction*) action; action->setText (i18n ("Plot properties")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionDocumentInfo)); action = actionCollection ()->addAction ("device_activate", window, SLOT (activateDevice())); action->setText (i18n ("Make active")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionFlagGreen)); action = actionCollection ()->addAction ("device_copy_to_output", window, SLOT (copyDeviceToOutput())); action->setText (i18n ("Copy to output")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowOutput)); action = actionCollection ()->addAction (KStandardAction::Print, "device_print", window, SLOT (printDevice())); action = actionCollection ()->addAction ("device_copy_to_r_object", window, SLOT (copyDeviceToRObject())); action->setText (i18n ("Store as R object...")); action = actionCollection ()->addAction ("device_duplicate", window, SLOT (duplicateDevice())); action->setText (i18n ("Duplicate")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionWindowDuplicate)); // initialize context for plugins RKContextMap *context = RKComponentMap::getContext ("x11"); if (!context) return; RKContextHandler *context_handler = context->makeContextHandler (this); insertChildClient (context_handler); RKComponentPropertyInt *devnum_property = new RKComponentPropertyInt (this, false, 0); devnum_property->setIntValue (window->device_number); context_handler->addChild ("devnum", devnum_property); } RKCaughtX11WindowPart::~RKCaughtX11WindowPart () { RK_TRACE (MISC); } #include "rkwindowcatcher.moc" #endif // DISABLE_RKWINDOWCATCHER rkward-0.6.1/rkward/windows/rcontrolwindow.h0000644000175000017500000000506712124345411020614 0ustar thomasthomas/*************************************************************************** rcontrolwindow - description ------------------- begin : Wed Oct 12 2005 copyright : (C) 2005, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RCONTROLWINDOW_H #define RCONTROLWINDOW_H #include #include #include "rkmdiwindow.h" class QPushButton; class RCommand; class RCommandChain; class RChainOrCommand; class RControlWindowListViewItem; /** \brief Interface to control R command execution This class provides a GUI interface to inspect, and manipulate the current RCommandStack, and to Pause/Resume the R engine. @author Thomas Friedrichsmeier */ class RControlWindow : public RKMDIWindow { Q_OBJECT public: /** constructor. @param parent parent QWidget, usually RKGlobals::rkApp () or similar */ RControlWindow (QWidget *parent, bool tool_window, const char *name=0); /** destructor */ ~RControlWindow (); /** reimplemented to start listening to the RCommandStackModel when showing. */ void showEvent (QShowEvent *e); /** when hidden, disconnect from the RCommandStackModel to save resources */ void hideEvent (QHideEvent *e); /** Static reference to the control window */ static RControlWindow* getControl () { return control_window; }; public slots: /** cancel button was clicked. Cancel selected commands (unless they are RCommand::Sync). */ void cancelButtonClicked (); /** pause button was clicked. Pause/Resume processing of the stack */ void pauseButtonClicked (); /** configure button was clicked. Invoke settings dialog */ void configureButtonClicked (); private: QTreeView *commands_view; QPushButton *cancel_button; QPushButton *pause_button; bool paused; friend class RKWardMainWindow; static RControlWindow *control_window; }; #endif rkward-0.6.1/rkward/windows/rkstandardactions.rc0000644000175000017500000000456512124345411021417 0ustar thomasthomas rkward-0.6.1/rkward/windows/rktoolwindowlist.cpp0000644000175000017500000000573712124345411021517 0ustar thomasthomas/*************************************************************************** rktoolwindowlist - description ------------------- begin : Thu Apr 07 2011 copyright : (C) 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rktoolwindowlist.h" #include "rkmdiwindow.h" #include "../debug.h" namespace RKToolWindowListPrivate { QList registered_tool_windows; }; QList& RKToolWindowList::registeredToolWindows () { return RKToolWindowListPrivate::registered_tool_windows; } void RKToolWindowList::registerToolWindow (RKMDIWindow *window, const QString &id, Placement default_placement, int default_shortcut) { RK_TRACE (APP); ToolWindowRepresentation tr; tr.window = window; tr.id = id; tr.default_placement = default_placement; #ifdef Q_WS_MAC // HACK: Workaround for shortcut conflict issue: http://www.mail-archive.com/rkward-devel@lists.sourceforge.net/msg01659.html if (default_shortcut & Qt::AltModifier) default_shortcut |= Qt::ControlModifier; #endif tr.default_shortcut = default_shortcut; RKToolWindowListPrivate::registered_tool_windows.append (tr); } RKMDIWindow* RKToolWindowList::findToolWindowById (const QString &id) { RK_TRACE (APP); for (int i = 0; i < RKToolWindowListPrivate::registered_tool_windows.size (); ++i) { if (RKToolWindowListPrivate::registered_tool_windows[i].id == id) return RKToolWindowListPrivate::registered_tool_windows[i].window; } return 0; } void RKToolWindowList::unregisterToolWindow (RKMDIWindow *window) { RK_TRACE (APP); for (int i = 0; i < RKToolWindowListPrivate::registered_tool_windows.size (); ++i) { if (RKToolWindowListPrivate::registered_tool_windows[i].window == window) { RKToolWindowListPrivate::registered_tool_windows.removeAt (i); return; } } RK_ASSERT (false); } QString RKToolWindowList::idOfWindow (RKMDIWindow *window) { RK_TRACE (APP); for (int i = 0; i < RKToolWindowListPrivate::registered_tool_windows.size (); ++i) { if (RKToolWindowListPrivate::registered_tool_windows[i].window == window) { return RKToolWindowListPrivate::registered_tool_windows[i].id; } } RK_ASSERT (false); return QString (); } rkward-0.6.1/rkward/windows/rkcommandeditorwindow.h0000644000175000017500000002761012124345411022132 0ustar thomasthomas/*************************************************************************** rkcommandeditorwindow - description ------------------- begin : Mon Aug 30 2004 copyright : (C) 2004, 2006, 2007, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMMANDEDITORWINDOW_H #define RKCOMMANDEDITORWINDOW_H #include #include #include #include #include #include #include #include #include #if KDE_IS_VERSION(4,5,0) # include # include #else # include # include #endif #include #include "../windows/rkmdiwindow.h" class QEvent; class QCloseEvent; class QFrame; class QLabel; class KAction; class QAction; class KActionMenu; class RKCommandEditorWindow; class KActionCollection; /** This class provides a KPart interface to RKCommandEditorWindow. The reason to use this, is so the required menus/menu-items can be merged in on the fly. @author Thomas Friedrichsmeier */ class RKCommandEditorWindowPart : public KParts::Part { protected: friend class RKCommandEditorWindow; RKCommandEditorWindowPart (QWidget *parent); ~RKCommandEditorWindowPart (); }; /** classes wishing to use RKFunctionArgHinter should derive from this, and implement provideContext () */ class RKScriptContextProvider { public: RKScriptContextProvider () {}; virtual ~RKScriptContextProvider () {}; /** to be implemented in subclasses. Provide some context, i.e. text *preceding* the cursor position (probably a line, but you may provide chunks in arbitrary size). If line_rev is 0, provide the line, the cursor is in. If line_rev is greater than 0, provide context before that. @param context Place the context here @returns a chunk of context. A null QString(), if no context was available. */ virtual QString provideContext (int line_rev) = 0; }; class RObject; /** function argument hinting for RKCommandEditorWindow and RKConsole */ class RKFunctionArgHinter : public QObject { Q_OBJECT public: RKFunctionArgHinter (RKScriptContextProvider *provider, KTextEditor::View* view); ~RKFunctionArgHinter (); /** Try to show an arg hint now */ void tryArgHint (); /** Hide the arg hint (if shown) */ void hideArgHint (); public slots: /** Internal worker function for tryArgHint () */ void tryArgHintNow (); void updateArgHintWindow (); protected: /** The (keypress) events of the view are filtered to determine, when to show / hide an argument hint */ bool eventFilter (QObject *, QEvent *e); private: RKScriptContextProvider *provider; KTextEditor::View *view; /** A timer to refresh the hint window periodically. This is a bit sorry, but it's really hard to find out, when the view has been moved, or gains/loses focus. While possible, this approach uses much less code. */ QTimer updater; bool active; QLabel *arghints_popup; }; /** code completion model for RKCommandEditorWindow */ #include #if KDE_VERSION_MAJOR != 4 # error Adjust the versioning hack below! #endif // Unfortunately, MOC is not smart enough to understand the KDE_IS_VERSION macro #if KDE_VERSION_MINOR >= 2 # include # if KDE_VERSION_MINOR >= 5 class RKCodeCompletionModel : public KTextEditor::CodeCompletionModel, public KTextEditor::CodeCompletionModelControllerInterface3 { Q_OBJECT Q_INTERFACES(KTextEditor::CodeCompletionModelControllerInterface3) public: KTextEditor::Range completionRange (KTextEditor::View *view, const KTextEditor::Cursor &position); QString filterString (KTextEditor::View *, const KTextEditor::Range &, const KTextEditor::Cursor &) { return QString (); }; # else class RKCodeCompletionModel : public KTextEditor::CodeCompletionModel, public KTextEditor::CodeCompletionModelControllerInterface { Q_OBJECT Q_INTERFACES(KTextEditor::CodeCompletionModelControllerInterface) public: KTextEditor::Range completionRange (KTextEditor::View *view, const KTextEditor::Cursor &position); QString filterString (KTextEditor::View *, const KTextEditor::SmartRange &, const KTextEditor::Cursor &) { return QString (); }; # endif #else class RKCodeCompletionModel : public KTextEditor::CodeCompletionModel { #endif public: RKCodeCompletionModel (RKCommandEditorWindow* parent); ~RKCodeCompletionModel (); void updateCompletionList (const QString& symbol); void completionInvoked (KTextEditor::View *, const KTextEditor::Range &, InvocationType); void executeCompletionItem (KTextEditor::Document *document, const KTextEditor::Range &word, int row) const; QVariant data (const QModelIndex& index, int role=Qt::DisplayRole) const; bool isEmpty () const { return names.isEmpty (); }; private: QList icons; QStringList names; QString current_symbol; RKCommandEditorWindow *command_editor; }; class QTimer; class RKJobSequence; /** \brief Provides an editor window for R-commands, as well as a text-editor window in general. While being called RKCommandEditorWindow, this class handles all sorts of text-files, both read/write and read-only. It is an MDI window that is added to the main window, based on KatePart. @author Pierre Ecochard */ class RKCommandEditorWindow : public RKMDIWindow, public RKScriptContextProvider { // we need the Q_OBJECT thing for some inherits ("RKCommandEditorWindow")-calls in rkward.cpp. Q_OBJECT public: /** constructor @param use_r_highlighting Initialize the view to use R syntax highlighting. Use, if you're going to edit an R syntax file */ RKCommandEditorWindow (QWidget *parent = 0, bool use_r_highlighting=true, bool use_codehinting=true); /** destructor */ ~RKCommandEditorWindow (); /** open given URL. @param use_r_highlighting Initialize the view to use R syntax highlighting. Use, if you're going to edit an R syntax file @param encoding encoding to use. If QString (), the default encoding is used. @param read_only Open the file in read-only mode @param delete_on_close File should be deleted when closing the window. Only respected with read_only=true. */ bool openURL (const KUrl url, const QString& encoding=QString (), bool use_r_highlighting=true, bool read_only=false, bool delete_on_close=false); /** returns, whether the document was modified since the last save */ bool isModified (); /** insert the given text into the document at the current cursor position. Additionally, focuses the view */ void insertText (const QString &text); /** set the current text (clear all previous text, and sets new text) */ void setText (const QString &text); /** @see restoreScrollPosition (). Note: Currently this saves/restored the cursor position, not necessarily the scroll position. */ void saveScrollPosition (); /** @see saveScrollPosition (). Note: Currently this saves/restored the cursor position, not necessarily the scroll position. */ void restoreScrollPosition (); /** copy current selection. Wrapper for use by external classes */ void copy (); /** reimplemented from RKMDIWindow to return full path of file (if any) */ QString fullCaption (); void setReadOnly (bool ro); /** Return current url */ KUrl url (); QString provideContext (int line_rev); QString currentCompletionWord () const; void highlightLine (int linenum); public slots: /** update Tab caption according to the current url. Display the filename-component of the URL, or - if not available - a more elaborate description of the url. Also appends a "[modified]" if appropriate */ void updateCaption (KTextEditor::Document* = 0); /** called whenever it might be appropriate to show a code completion box. The box is not shown immediately, but only after a timeout (if at all) */ void tryCompletionProxy (KTextEditor::Document*); /** show a code completion box if appropriate. Use tryCompletionProxy () instead, which will call this function after a timeout */ void tryCompletion (); void setPopupMenu (); void focusIn (KTextEditor::View *); /** Show help about the current word. */ void showHelp (); /** run the currently selected command(s) */ void runSelection (); /** run the current line */ void runLine (); /** run the entire script */ void runAll (); /** insert line break and run the (previous) line */ void enterAndSubmit (); void copyLinesToOutput (); /** selection has changed. Enable / disable actions accordingly */ void selectionChanged (KTextEditor::View* view); /** change to the directory of the current script */ void setWDToScript (); /** paste the given text at the current cursor position */ void paste (const QString &text); /** apply our customizations to the katepart GUI */ void fixupPartGUI (); QAction* fileSaveAction () { return file_save; }; QAction* fileSaveAsAction () { return file_save_as; }; protected: /** reimplemented from RKMDIWindow: give the editor window a chance to object to being closed (if unsaved) */ void closeEvent (QCloseEvent *e); private slots: /** mark current selection as a block */ void markBlock (); /** unmark a block */ void unmarkBlock (); /** run a block */ void runBlock (); void clearUnusedBlocks (); /** creates an autosave file */ void doAutoSave (); /** handler to control when autosaves should be created */ void autoSaveHandlerModifiedChanged (); /** handler to control when autosaves should be created */ void autoSaveHandlerTextChanged (); /** handle any errors during auto-saving */ void autoSaveHandlerJobFinished (RKJobSequence* seq); private: KTextEditor::Cursor saved_scroll_position; KTextEditor::Document *m_doc; KTextEditor::View *m_view; KTextEditor::CodeCompletionInterface *cc_iface; #if KDE_IS_VERSION(4,5,0) KTextEditor::MovingInterface *smart_iface; #else KTextEditor::SmartInterface *smart_iface; #endif RKFunctionArgHinter *hinter; RKCodeCompletionModel *completion_model; QTimer *completion_timer; void initializeActions (KActionCollection* ac); struct BlockRecord { #if KDE_IS_VERSION(4,5,0) KTextEditor::MovingRange* range; #else KTextEditor::SmartRange* range; #endif bool active; KTextEditor::Attribute::Ptr attribute; KAction* mark; KAction* unmark; KAction* run; }; QVector block_records; void initBlocks (); void addBlock (int index, const KTextEditor::Range& range); void removeBlock (int index, bool was_deleted=false); QAction *file_save, *file_save_as; KActionMenu* actionmenu_mark_block; KActionMenu* actionmenu_unmark_block; KActionMenu* actionmenu_run_block; KAction* action_run_all; KAction* action_run_selection; KAction* action_run_line; KAction* action_setwd_to_script; KAction* action_help_function; KUrl previous_autosave_url; QTimer* autosave_timer; KUrl delete_on_close; }; /** Simple class to provide HTML highlighting for arbitrary R code. */ class RKCommandHighlighter { public: enum HighlightingMode { RInteractiveSession, RScript }; static void copyLinesToOutput (KTextEditor::View *view, HighlightingMode mode); static void setHighlighting (KTextEditor::Document *doc, HighlightingMode mode); static QString commandToHTML (const QString r_command, HighlightingMode mode=RScript); private: static KTextEditor::Document* getDoc (); static KTextEditor::Document* _doc; }; #endif rkward-0.6.1/rkward/windows/rkmdiwindow.h0000644000175000017500000001445012124345411020054 0ustar thomasthomas/*************************************************************************** rkmdiwindow - description ------------------- begin : Tue Sep 26 2006 copyright : (C) 2006, 2007, 2008, 2009, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKMDIWINDOW_H #define RKMDIWINDOW_H #include #include #include #include "../settings/rksettings.h" class QEvent; class QPaintEvent; class RKWorkplace; class RKToolWindowBar; class RKMDIStandardActionClient : public KXMLGUIClient { public: RKMDIStandardActionClient (); ~RKMDIStandardActionClient (); }; /** Base class for rkward document mdi windows */ class RKMDIWindow : public QFrame { Q_OBJECT public: enum Type { DataEditorWindow=1 << 0, CommandEditorWindow=1 << 1, OutputWindow=1 << 2, HelpWindow=1 << 3, X11Window=1 << 4, ObjectWindow=1 << 5, ConsoleWindow=1 << 10, CommandLogWindow=1 << 11, WorkspaceBrowserWindow=1 << 12, SearchHelpWindow=1 << 13, PendingJobsWindow=1 << 14, FileBrowserWindow=1 << 15, DebugConsoleWindow=1 << 16, CallstackViewerWindow=1 << 17, DebugMessageWindow=1 << 18, DocumentWindow=1 << 29, ToolWindow=1 << 30, AnyType=DocumentWindow | ToolWindow }; enum State { Attached=1, Detached=2, AnyWindowState=Attached | Detached }; protected: /** constructor @param parent parent widget @param type Type of window (see RKMDIWindow::Type).*/ RKMDIWindow (QWidget *parent, int type, bool tool_window=false, const char *name=0); virtual ~RKMDIWindow (); public slots: /** Reimplemented from QWidget::setCaption () to emit the signal captionChanged () when the caption is changed. */ void setCaption (const QString &caption); public: /** @returns true, if the window's document was modified (and would need to be saved) */ virtual bool isModified () { return false; }; /** @returns A long / complete caption. Default implementation simply calls shortCaption () */ virtual QString fullCaption (); /** @returns A short caption (e.g. only the filename without the path). Default implementation simply calls QWidget::caption () */ virtual QString shortCaption (); /** @returns The corresponding KPart for this window */ KParts::Part *getPart () { return part; }; /** Is this window attached (or detached)? @returns true if attached, false if detached */ bool isAttached () const { return (state == Attached); }; /** Is this a tool window? */ bool isToolWindow () const { return (type & ToolWindow); }; /** Returns the type of this window */ bool isType (Type t) const { return (type & t); }; /** Activate (raise) this window, regardless of whether it is attached or detached @param with_focus Should the window also get keyboard focus? */ virtual void activate (bool with_focus=true); /** If your mdi window should perform any adjustments before being attached, reimplement this function. Default implementation does nothing, but raises an assert, if this is a tool window */ virtual void prepareToBeAttached (); /** If your mdi window should perform any adjustments before being detached, reimplement this function. Default implementation does nothing, but raises an assert, if this is a tool window */ virtual void prepareToBeDetached (); /** Tool windows will only hide themselves, and ignore the also_delete flag */ virtual bool close (bool also_delete); bool eventFilter (QObject *watched, QEvent *e); bool acceptsEventsFor (QObject *object); /** Whether the window is active. This seems to be more reliable than hasFocus () */ bool isActive (); /** Returns a pointer to an action collection suitable to place RKStandardAction in. This collection (and the corresponding KXMLGUIClient) is created on the fly. */ KActionCollection *standardActionCollection (); /** plugin-accessible properties of this object in the global context. Currently used only by RKEditorDataFrame to give information on the currently active data.frame. NOTE: ATM, you cannot set arbitrary properties. Only those supported in RKStandardComponent will have an effect. */ QString globalContextProperty (const QString& property) { return global_context_properties.value (property); }; signals: /** This signal is emitted, whenever the window caption was changed. @param RKMDIWindow* a pointer to this window */ void captionChanged (RKMDIWindow *); /** This signal is emitted, when the window was activated *with* focus */ void windowActivated (RKMDIWindow *); protected slots: void showWindowHelp (); void showWindowSettings (); protected: void setPart (KParts::Part *p) { part = p; }; void setMetaInfo (const QString& generic_window_name, const QString& help_url, RKSettings::SettingsPage settings_page=RKSettings::NoPage); void initializeActivationSignals (); void paintEvent (QPaintEvent *e); void windowActivationChange (bool); /** reimplemented from QWidget to emulate focus-follows-mouse behavior */ void enterEvent (QEvent *event); /** @see globalContextProperty() */ void setGlobalContextProperty (const QString& property, const QString& value) { global_context_properties.insert (property, value); }; friend class RKWorkplace; /** type of this window */ int type; private slots: void slotActivate (); private: friend class RKToolWindowBar; /** state of this window (attached / detached). This is usually set from the RKWorkplace */ KParts::Part *part; State state; RKToolWindowBar *tool_window_bar; bool active; RKMDIStandardActionClient *standard_client; /** @see globalContextProperty() */ QMap global_context_properties; QString generic_window_name; QString help_url; RKSettings::SettingsPage settings_page; }; #endif rkward-0.6.1/rkward/Info.plist0000644000175000017500000000226412124345414015626 0ustar thomasthomas CFBundleDevelopmentRegion English CFBundleExecutable rkward CFBundleGetInfoString CFBundleIconFile rkward.icns CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString CFBundleName CFBundlePackageType APPL CFBundleShortVersionString CFBundleSignature ???? CFBundleVersion CSResourcesFileMapped LSRequiresCarbon NSHumanReadableCopyright rkward-0.6.1/rkward/scriptbackends/0000755000175000017500000000000012124345416016653 5ustar thomasthomasrkward-0.6.1/rkward/scriptbackends/CMakeLists.txt0000644000175000017500000000160112124345416021411 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(scriptbackends_STAT_SRCS scriptbackend.cpp simplebackend.cpp qtscriptbackend.cpp rkcomponentscripting.cpp ) QT4_AUTOMOC(${scriptbackends_STAT_SRCS}) ADD_LIBRARY(scriptbackends STATIC ${scriptbackends_STAT_SRCS}) ########### install files ############### INSTALL(FILES common.js rkcomponentscripting.js DESTINATION ${DATA_INSTALL_DIR}/rkward/phpfiles ) #original Makefile.am contents follow: #INCLUDES = $(all_includes) #METASOURCES = AUTO #noinst_LIBRARIES = libscriptbackends.a #noinst_HEADERS = phpbackend.h scriptbackend.h simplebackend.h #libscriptbackends_a_SOURCES = phpbackend.cpp scriptbackend.cpp simplebackend.cpp #phpfilesdir = $(kde_datadir)/rkward/phpfiles #phpfiles_DATA = common.php php.ini # rkward-0.6.1/rkward/scriptbackends/simplebackend.h0000644000175000017500000000515712124345416021635 0ustar thomasthomas/*************************************************************************** simplebackend - description ------------------- begin : Thu May 10 2007 copyright : (C) 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SIMPLEBACKEND_H #define SIMPLEBACKEND_H #include "scriptbackend.h" #include /** @brief A very simple script backend This class provides a very simple alternative to the PHP backend. Right now it's basically just used as a hack to reduce the overhead of starting a PHP process for each color_chooser component (which is often embedded many times inside a single plugin). This class is very hackish and NOT sure to stay! It might be obsoleted by another scripting solution. @author Thomas Friedrichsmeier */ class SimpleBackend : public ScriptBackend { public: SimpleBackend (); ~SimpleBackend (); void setPreprocessTemplate (const QString &template_string) { preprocess_template = template_string; }; void setCalculateTemplate (const QString &template_string) { calculate_template = template_string; }; void setPrintoutTemplate (const QString &template_string) { printout_template = template_string; }; void setPreviewTemplate (const QString &template_string) { preview_template = template_string; }; bool initialize (RKComponentPropertyCode *code_property=0, bool add_headings=true); void destroy (); void preprocess (int flags); void calculate (int flags); void printout (int flags); void preview (int flags); void writeData (const QVariant &data); void tryNextFunction (); private: QString preprocess_template; QString calculate_template; QString printout_template; QString preview_template; QString current_template; int template_sep; int template_pos; QList current_values; void processCall (); void finishCall (const QString &conditions); }; #endif rkward-0.6.1/rkward/scriptbackends/rkcomponentscripting.js0000644000175000017500000001001012124345416023463 0ustar thomasthomas/*************************************************************************** rkcomponentscripting - description ------------------- begin : Thu Jun 17 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ // _rkward = Handler object set from RKWard function Component(id) { this._id = id; // this one is mostly for internal use this.absoluteId = function (id) { if (this._id == "") return (id); if (id) return (this._id + "." + id); return (this._id); } this.getValue = function (id) { return (_rkward.getValue (this.absoluteId (id))); } this.getString = function (id) { return (_rkward.getString (this.absoluteId (id))); } this.getBoolean = function (id) { return (_rkward.getBoolean (this.absoluteId (id))); } this.getList = function (id) { return (_rkward.getList (this.absoluteId (id))); } this.setValue = function (id, value) { return (_rkward.setValue (value, this.absoluteId (id))); } this.getChild = function (id) { return (new Component (this.absoluteId (id))); } this.addChangeCommand = function (id, command) { _rkward.addChangeCommand (this.absoluteId (id), command); } } makeComponent = function (id) { return (new Component (id)); } gui = new Component (""); function RObject(objectname) { this.objectname = objectname; // for internal use this.initialize = function () { info = _rkward.getObjectInfo (this.objectname); this._dimensions = info.shift (); this._classes = info.shift (); this._isDataFrame = info.shift (); this._isMatrix = info.shift (); this._isList = info.shift (); this._isFunction = info.shift (); this._isEnvironment = info.shift (); this._datatype = info.shift (); } this.initialize(); this.getName = function () { return (this.objectname); } this.exists = function () { return (typeof (this._dimensions) != "undefined"); } this.dimensions = function () { return (this._dimensions); } this.classes = function () { return (this._classes); } this.isClass = function (classname) { return (this._classes.indexOf(classname) != -1); } this.isDataFrame = function () { return (this._isDataFrame); } this.isMatrix = function () { return (this._isMatrix); } this.isList = function () { return (this._isList); } this.isFunction = function () { return (this._isFunction); } this.isEnvironment = function () { return (this._isEnvironment); } this.isDataNumeric = function () { return (this._datatype == "numeric"); } this.isDataFactor = function () { return (this._datatype == "factor"); } this.isDataCharacter = function () { return (this._datatype == "character"); } this.isDataLogical = function () { return (this._datatype == "logical"); } this.parent = function () { return (new RObject (_rkward.getObjectParent (this._name))); } this.child = function (childname) { return (new RObject (_rkward.getObjectChild (this._name, childname))); } } makeRObject = function (objectname) { return (new RObject (objectname)); } function RObjectArray(names) { this._objects = new Array (); objs = names.split ('\n'); while (objs.count > 0) { this._objects.push (new RObject (objs.shift ())); } } makeRObjectArray = function (objectnames) { return (new RObjectArray (objectnames)); } rkward-0.6.1/rkward/scriptbackends/scriptbackend.h0000644000175000017500000000646712124345416021655 0ustar thomasthomas/*************************************************************************** scriptbackend - description ------------------- begin : Sun Aug 15 2004 copyright : (C) 2004, 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SCRIPTBACKEND_H #define SCRIPTBACKEND_H #include #include #include #include "../plugin/rkstandardcomponent.h" class RKComponentPropertyCode; /** Abstract base class for scripting-language backends. Mostly pure virtual functions only + some handling to make sure the processing is asynchronous. @author Thomas Friedrichsmeier */ class ScriptBackend : public QObject { Q_OBJECT public: ScriptBackend (); ~ScriptBackend (); enum CallType { Preprocess = 0, Calculate = 1, Printout = 2, Preview = 4, Ignore = 5, User = 6 }; /** initialize backend @param code_property If you supply a pointer to an RKComponentPropertyCode, The backend will directly set values for this property in response to calls to preproces (), calculate (), printout (), and cleanup (). @param add_headings (Only meaningful, if code_property is not 0). If set to true, heading comments will be added to each section of the code (e.g. "## Do calculations") @returns true on successful initialization, false on errors */ virtual bool initialize (RKComponentPropertyCode *code_property=0, bool add_headings=true) = 0; virtual void destroy () = 0; virtual void preprocess (int flags) = 0; virtual void calculate (int flags) = 0; virtual void printout (int flags) = 0; virtual void preview (int flags) = 0; virtual bool isBusy () { return busy; }; virtual void writeData (const QVariant &data) = 0; signals: void commandDone (int); void idle (); void requestValue (const QString &, const int); void haveError (); protected: RKComponentPropertyCode *code_property; bool add_headings; bool busy; struct ScriptCommand { /// the command string QString command; /// flags attached to this command by the parent int flags; /// internal type (used to find out, if this is a preproces, calculate, printout, or cleanup call) int type; /// whether command has finished bool complete; }; QLinkedList command_stack; int current_flags; int current_type; /** Invalidate all previous calls of the given type */ void invalidateCalls (int type); /** call a function on the current template. */ void callFunction (const QString &function, int flags, int type); void commandFinished (const QString &output); virtual void tryNextFunction () = 0; }; #endif rkward-0.6.1/rkward/scriptbackends/rkcomponentscripting.cpp0000644000175000017500000001735212124345416023651 0ustar thomasthomas/*************************************************************************** rkcomponentscripting - description ------------------- begin : Thu Jun 17 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkcomponentscripting.h" #include #include #include #include "../plugin/rkcomponent.h" #include "../core/robjectlist.h" #include "../misc/rkcommonfunctions.h" #include "../debug.h" RKComponentScriptingProxy::RKComponentScriptingProxy (RKComponent *component) : QObject (component) { RK_TRACE (PHP); RK_ASSERT (component); RKComponentScriptingProxy::component = component; script = new Kross::Action (this, QString ()); script->setInterpreter ("qtscript"); script->addObject (this, "_rkward"); } RKComponentScriptingProxy::~RKComponentScriptingProxy () { RK_TRACE (PHP); } void RKComponentScriptingProxy::initialize (const QString& file, const QString& command) { RK_TRACE (PHP); QString _command = command; if (!file.isEmpty ()) { _command.prepend ("_rkward.include('" + file + "');\n"); _scriptfile = file; } QDir files_path (RKCommonFunctions::getRKWardDataDir () + "phpfiles/"); _command.prepend ("_rkward.include('" + files_path.absoluteFilePath ("rkcomponentscripting.js") + "');\n"); _command.prepend ("_rkward.include('" + files_path.absoluteFilePath ("common.js") + "');\n"); #if not KDE_IS_VERSION(4,3,0) _command.prepend ("_rk_eval = function (x) { eval (x); }\n"); #endif script->setCode (_command.toUtf8 ()); script->trigger (); handleScriptError (); } void RKComponentScriptingProxy::handleScriptError (const QString& current_file) { RK_TRACE (PHP); QString file = current_file; if (file.isEmpty ()) file = _scriptfile; if (script->hadError ()) { QString message = i18n ("There was an error while evaluating script code.\nFile: %1\nLine: %2\nMessage: %3.", file, script->errorLineNo(), script->errorMessage()); KMessageBox::detailedError (0, message, script->errorTrace ()); emit (haveError()); } } void RKComponentScriptingProxy::include (const QString& filename) { RK_TRACE (PHP); QString _filename = filename; if (QFileInfo (filename).isRelative ()) { KUrl script_path = KUrl (QUrl::fromLocalFile (_scriptfile)).upUrl (); script_path.addPath (filename); _filename = script_path.toLocalFile (); } QFile file (_filename); if (!file.open (QIODevice::ReadOnly | QIODevice::Text)) { evaluate (i18n ("error ('The file \"%1\" (needed by \"%2\") could not be found. Please check your installation.');\n", _filename, _scriptfile).toUtf8 ()); return; } evaluate (file.readAll()); handleScriptError (_filename); } void RKComponentScriptingProxy::evaluate (const QByteArray &code) { RK_TRACE (PHP); #if KDE_IS_VERSION(4,3,0) script->evaluate (code); #else script->callFunction ("_rk_eval", QVariantList() << QString (code)); #endif handleScriptError (); } void RKComponentScriptingProxy::addScriptableWidget (const QString& name, QWidget *widget) { RK_TRACE (PHP); script->addObject (widget, name); } void RKComponentScriptingProxy::addChangeCommand (const QString& changed_id, const QString& command) { RK_TRACE (PHP); QString remainder; RKComponentBase* base = component->lookupComponent (changed_id, &remainder); if (remainder.isEmpty ()) { component_commands.insert (base, command); if (base->isComponent()) { connect (static_cast (base), SIGNAL (componentChanged(RKComponent*)), this, SLOT (componentChanged(RKComponent*))); } else { connect (static_cast (base), SIGNAL (valueChanged(RKComponentPropertyBase*)), this, SLOT (propertyChanged(RKComponentPropertyBase*))); } } else { script->setError (QString ("error ('No such property %1 (failed portion was %2)');\n").arg (changed_id, remainder)); } } void RKComponentScriptingProxy::componentChanged (RKComponent* changed) { RK_TRACE (PHP); handleChange (changed); } void RKComponentScriptingProxy::propertyChanged (RKComponentPropertyBase* changed) { RK_TRACE (PHP); handleChange (changed); } void RKComponentScriptingProxy::handleChange (RKComponentBase* changed) { RK_TRACE (PHP); QString command = component_commands.value (changed); evaluate (command.toUtf8()); } QVariant RKComponentScriptingProxy::getValue (const QString &id) const { RK_TRACE (PHP); return (component->fetchValue (id, RKComponent::TraditionalValue)); } QVariant RKComponentScriptingProxy::getString (const QString &id) const { RK_TRACE (PHP); return (component->fetchValue (id, RKComponent::StringValue)); } QVariant RKComponentScriptingProxy::getBoolean (const QString &id) const { RK_TRACE (PHP); return (component->fetchValue (id, RKComponent::BooleanValue)); } QVariant RKComponentScriptingProxy::getList (const QString &id) const { RK_TRACE (PHP); return (component->fetchValue (id, RKComponent::StringlistValue)); } void RKComponentScriptingProxy::setValue (const QString &value, const QString &id) { RK_TRACE (PHP); QString modifier; RKComponentBase* resolved = component->lookupComponent (id, &modifier); if (resolved && modifier.isEmpty () && resolved->isProperty ()) { static_cast (resolved)->setValue (value); } else { script->setError (QString ("error ('No such property %1 (failed portion was %2)');\n").arg (id, modifier)); } } QVariantList RKComponentScriptingProxy::getObjectInfo (const QString &name) { RK_TRACE (PHP); RObject* object = RObjectList::getObjectList ()->findObject (name); if (object) { QVariantList ret; QVariantList dims; foreach (int dim, object->getDimensions ()) { dims.append (dim); } ret.append (QVariant (dims)); ret.append (QVariant (object->classNames ())); ret.append (object->isType (RObject::DataFrame)); ret.append (object->isType (RObject::Matrix)); ret.append (object->isType (RObject::List)); ret.append (object->isType (RObject::Function)); ret.append (object->isType (RObject::Environment)); if (object->getDataType () == RObject::DataNumeric) ret.append ("numeric"); else if (object->getDataType () == RObject::DataFactor) ret.append ("factor"); else if (object->getDataType () == RObject::DataCharacter) ret.append ("character"); else if (object->getDataType () == RObject::DataLogical) ret.append ("logical"); else ret.append ("unknown"); return (ret); } return (QVariantList ()); } QString RKComponentScriptingProxy::getObjectParent (const QString &name) { RK_TRACE (PHP); RObject* object = RObjectList::getObjectList ()->findObject (name); if (object) { if (object->parentObject ()) return (object->parentObject ()->getFullName ()); } return (QString ()); } QString RKComponentScriptingProxy::getObjectChild (const QString &name) { RK_TRACE (PHP); RObject* object = RObjectList::getObjectList ()->findObject (name); if (object) { if (object->isContainer ()) { RObject* child = static_cast (object)->findChildByName (name); if (child) return (child->getFullName ()); } } return (QString ()); } #include "rkcomponentscripting.moc" rkward-0.6.1/rkward/scriptbackends/common.js0000644000175000017500000000542212124345416020504 0ustar thomasthomas_script_output = ""; /* NOTE: for compatibility with Kross, we can't write this as 'function echo (text)...', somehow. */ echo = function (text) { _script_output += text; } printIndented = function (indentation, lines) { /** More complex than may seem necessary at first glance. The point is that the final line break in the input should *not* be replaced by line break + indentation. */ echo (indentation + lines.replace (/\n(.)/g, "\n" + indentation + "$1")); } printIndentedUnlessEmpty = function (indentation, lines, pre, post) { if (lines.length <= 0) return; if (typeof (pre) != 'undefined') echo (pre); printIndented (indentation, lines); if (typeof (post) != 'undefined') echo (post); } noquote = function (text) { var ret = new String (text); ret.noquote = 1; return (ret); } quote = function (text) { if (text.noquote) return text; return ("\"" + text.replace (/\"/g, "\\\"") + "\""); } makeHeaderCode = function (title, parameters) { echo ("rk.header(" + quote (title)); if (parameters.length) { echo (", parameters=list("); for (var p = 0; p < parameters.length; ++p) { if (p) { if (!(p % 2)) echo (",\n\t"); else echo (", "); } echo (quote(parameters[p])); } echo (")"); } echo (")\n"); } getValue = function (id) { return (_RK_backend.getValue (id)); } getString = function (id) { // getValue() sometimes returns numeric results (whenever the value is "0"). This variant always returns strings. return (_RK_backend.getString (id)); } getList = function (id) { // will try to return value as list, and produces a warning, if that fails. return (_RK_backend.getList (id)); } getBoolean = function (id) { // will try to return value as logical, and produces a warning, if that fails. return (_RK_backend.getBoolean (id)); } printValue = function (id) { echo (getValue (id)); } include = function (file) { _RK_backend.includeFile (file); } flushOutput = function () { var string = _script_output; _script_output = ""; return (string); } do_preprocess = function () { if (typeof (preprocess) == "undefined") return (""); preprocess (); return (flushOutput ()); } do_calculate = function () { if (typeof (calculate) == "undefined") return (""); calculate (); return (flushOutput ()); } do_printout = function () { if (typeof (printout) == "undefined") return (""); printout (); return (flushOutput ()); } do_preview = function () { if (typeof (preview) == "undefined") return (""); preview (); return (flushOutput ()); } // for compatibility with the converted PHP code trim = function (text) { var ret = text.replace (/^\s*/, "").replace (/\s*$/, ""); return (ret); } split = function (by, text) { return (text.split (by)); } function str_replace (needle, replacement, haystack) { return (haystack.split (needle).join (replacement)); } rkward-0.6.1/rkward/scriptbackends/qtscriptbackend.cpp0000644000175000017500000002070012124345416022537 0ustar thomasthomas/*************************************************************************** qtscriptbackend - description ------------------- begin : Mon Sep 28 2009 copyright : (C) 2009, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "qtscriptbackend.h" #include #include #include "klocale.h" #include "kmessagebox.h" #include "../misc/rkcommonfunctions.h" #include "../debug.h" QtScriptBackend::QtScriptBackend (const QString &filename) : ScriptBackend () { RK_TRACE (PHP); script_thread = 0; QtScriptBackend::filename = filename; dead = false; busy = true; } QtScriptBackend::~QtScriptBackend () { RK_TRACE (PHP); destroy (); if (script_thread && script_thread->isRunning ()) script_thread->terminate (); } bool QtScriptBackend::initialize (RKComponentPropertyCode *code_property, bool add_headings) { RK_TRACE (PHP); if (script_thread) { RK_DEBUG (PHP, DL_ERROR, "another template is already openend in this backend"); return false; } QDir files_path (RKCommonFunctions::getRKWardDataDir () + "phpfiles/"); QString common_js (files_path.absoluteFilePath ("common.js")); script_thread = new QtScriptBackendThread (common_js, filename, this); connect (script_thread, SIGNAL (error(const QString&)), this, SLOT (threadError(const QString&))); connect (script_thread, SIGNAL (commandDone(const QString&)), this, SLOT (commandDone(const QString&))); connect (script_thread, SIGNAL (needData(const QString&, const int)), this, SLOT (needData(const QString&, const int))); current_type = ScriptBackend::Ignore; script_thread->start (); QtScriptBackend::code_property = code_property; QtScriptBackend::add_headings = add_headings; return true; } void QtScriptBackend::destroy () { RK_TRACE (PHP); if (!dead) { if (script_thread) script_thread->goToSleep (false); dead = true; code_property = 0; if (script_thread) script_thread->kill (); QTimer::singleShot (10000, this, SLOT (deleteLater())); // don't wait for ever for the process to die, even if it's somewhat dangerous } busy = false; } void QtScriptBackend::tryNextFunction () { RK_TRACE (PHP); if (script_thread && (!busy) && (!command_stack.isEmpty ())) { /// clean up previous command if applicable if (command_stack.first ()->complete) { delete command_stack.takeFirst (); if (command_stack.isEmpty ()) { script_thread->goToSleep (true); return; } } RK_DEBUG (PHP, DL_DEBUG, "submitting QtScript code: %s", command_stack.first ()->command.toLatin1 ().data ()); if (script_thread) script_thread->goToSleep (false); script_thread->setCommand (command_stack.first ()->command); busy = true; command_stack.first ()->complete = true; current_flags = command_stack.first ()->flags; current_type = command_stack.first ()->type; } else { if (script_thread && command_stack.isEmpty ()) script_thread->goToSleep (true); } } void QtScriptBackend::writeData (const QVariant &data) { RK_TRACE (PHP); RK_DEBUG (PHP, DL_DEBUG, "submitting data: %s", qPrintable (data.toString ())); script_thread->setData (data); tryNextFunction (); } void QtScriptBackend::threadError (const QString &message) { RK_TRACE (PHP); if (dead) return; // we are already dead, so we've shown an error before. KMessageBox::error (0, i18n ("The QtScript-backend has reported an error:\n%1", message), i18n ("Scripting error")); emit (haveError ()); destroy (); } void QtScriptBackend::commandDone (const QString &result) { RK_TRACE (PHP); commandFinished (result); } void QtScriptBackend::needData (const QString &identifier, const int hint) { RK_TRACE (PHP); emit (requestValue (identifier, hint)); } ///////////////////////////////////////////////////////////////////////////////////////// #include QtScriptBackendThread::QtScriptBackendThread (const QString &commonfile, const QString &scriptfile, QtScriptBackend *parent) : QThread (parent) { RK_TRACE (PHP); _commonfile = commonfile; _scriptfile = scriptfile; killed = false; sleeping = false; } QtScriptBackendThread::~QtScriptBackendThread () { RK_TRACE (PHP); } void QtScriptBackendThread::goToSleep (bool sleep) { RK_TRACE (PHP); if (sleeping != sleep) { if (sleep) { sleep_mutex.lock (); // hold a mutex until it's time to wake up, again. Thread will then wait on this mutex. sleeping = true; } else { sleeping = false; sleep_mutex.unlock (); } } } void QtScriptBackendThread::setCommand (const QString &command) { RK_TRACE (PHP); mutex.lock (); RK_ASSERT (_command.isNull ()); if (command.isNull ()) _command = ""; else _command = command; mutex.unlock (); } void QtScriptBackendThread::setData (const QVariant &data) { RK_TRACE (PHP); mutex.lock (); RK_ASSERT (_data.isNull ()); if (data.isNull ()) _data = ""; else _data = data; mutex.unlock (); } QVariant QtScriptBackendThread::getValue (const QString &identifier, const int hint) { RK_TRACE (PHP); emit (needData (identifier, hint)); QVariant ret; while (1) { if (killed) return QVariant (); mutex.lock (); if (!_data.isNull ()) { ret = _data; _data.clear (); } mutex.unlock (); if (!ret.isNull ()) break; usleep (20); // getValue () may be called very often, and we expect an answer very soon, so we don't sleep too long. } return (ret); } QVariant QtScriptBackendThread::getValue (const QString &identifier) { return getValue (identifier, RKStandardComponent::TraditionalValue); } QVariant QtScriptBackendThread::getList (const QString &identifier) { return getValue (identifier, RKStandardComponent::StringlistValue); } QVariant QtScriptBackendThread::getString (const QString &identifier) { return getValue (identifier, RKStandardComponent::StringValue); } QVariant QtScriptBackendThread::getBoolean (const QString &identifier) { return getValue (identifier, RKStandardComponent::BooleanValue); } bool QtScriptBackendThread::scriptError () { RK_TRACE (PHP); if (!engine.hasUncaughtException ()) return false; QString message = i18n ("Script Error: %1\nBacktrace:\n%2", engine.uncaughtException ().toString (), engine.uncaughtExceptionBacktrace ().join ("\n")); engine.clearExceptions (); emit (error (message)); return true; } bool QtScriptBackendThread::includeFile (const QString &filename) { RK_TRACE (PHP); QString _filename = filename; if (QFileInfo (filename).isRelative ()) { KUrl script_path = KUrl (QUrl::fromLocalFile (_scriptfile)).upUrl (); script_path.addPath (filename); _filename = script_path.toLocalFile (); } QFile file (_filename); if (!file.open (QIODevice::ReadOnly | QIODevice::Text)) { emit (error (i18n ("The file \"%1\" (needed by \"%2\") could not be found. Please check your installation.", _filename, _scriptfile))); return false; } // evaluate in global context engine.currentContext ()->setActivationObject (engine.globalObject ()); QScriptValue result = engine.evaluate (file.readAll(), _filename); if (scriptError ()) return false; return true; } void QtScriptBackendThread::run () { RK_TRACE (PHP); QScriptValue backend_object = engine.newQObject (this); engine.globalObject ().setProperty ("_RK_backend", backend_object); if (!includeFile (_commonfile)) return; if (!includeFile (_scriptfile)) return; emit (commandDone ("startup complete")); QString command; while (1) { if (killed) return; if (sleeping) { sleep_mutex.lock (); sleep_mutex.unlock (); } mutex.lock (); if (!_command.isNull ()) { command = _command; _command.clear (); } mutex.unlock (); if (command.isNull ()) { msleep (1); continue; } // do it! QScriptValue result = engine.evaluate (command); if (scriptError ()) return; emit (commandDone (result.toString ())); command.clear (); } } #include "qtscriptbackend.moc" rkward-0.6.1/rkward/scriptbackends/rkcomponentscripting.h0000644000175000017500000000602112124345416023305 0ustar thomasthomas/*************************************************************************** rkcomponentscripting - description ------------------- begin : Thu Jun 17 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKCOMPONENTSCRIPTING_H #define RKCOMPONENTSCRIPTING_H #include #include #include class RKComponent; class RKComponentBase; class RKComponentPropertyBase; /** This class basically provides the API that is available to scripts running within rkward plugins. The slots are meant to be called from the script. NOTE: This contains some duplication of ScriptBackend and derived classes. Perhaps this can be merged, better. The key technical difference between this, and ScriptBackend, is that this operates in the main thread, while ScriptBackend is designed to operate in a separate thread, and may merge a bunch of changes into a single update. */ class RKComponentScriptingProxy : public QObject { Q_OBJECT public: RKComponentScriptingProxy (RKComponent *component); ~RKComponentScriptingProxy (); void initialize (const QString& file, const QString& command); void addScriptableWidget (const QString& name, QWidget *widget); public slots: void componentChanged (RKComponent* changed); void propertyChanged (RKComponentPropertyBase* changed); // these are meant to be called from the script void include (const QString& filename); void addChangeCommand (const QString& changed_id, const QString& command); QVariant getValue (const QString &id) const; QVariant getString (const QString &id) const; QVariant getBoolean (const QString &id) const; QVariant getList (const QString &id) const; void setValue (const QString &value, const QString &id); QVariantList getObjectInfo (const QString &name); QString getObjectParent (const QString &name); QString getObjectChild (const QString &name); signals: void haveError (); private: RKComponent* component; Kross::Action* script; QString _scriptfile; /** helper function for compatibility with KDE < 4.3 */ void evaluate (const QByteArray &code); void handleChange (RKComponentBase* changed); QHash component_commands; void handleScriptError (const QString& current_file=QString ()); }; #endif rkward-0.6.1/rkward/scriptbackends/simplebackend.cpp0000644000175000017500000001127012124345416022161 0ustar thomasthomas/*************************************************************************** simplebackend - description ------------------- begin : Thu May 10 2007 copyright : (C) 2007, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "simplebackend.h" #include "../debug.h" SimpleBackend::SimpleBackend () : ScriptBackend () { RK_TRACE (PHP); } SimpleBackend::~SimpleBackend () { RK_TRACE (PHP); } bool SimpleBackend::initialize (RKComponentPropertyCode *code_property, bool add_headings) { RK_TRACE (PHP); SimpleBackend::code_property = code_property; SimpleBackend::add_headings = add_headings; template_pos = 0; return true; } void SimpleBackend::destroy () { RK_TRACE (PHP); deleteLater (); } void SimpleBackend::preprocess (int flags) { RK_TRACE (PHP); callFunction (QString::null, flags, Preprocess); } void SimpleBackend::calculate (int flags) { RK_TRACE (PHP); callFunction (QString::null, flags, Calculate); } void SimpleBackend::printout (int flags) { RK_TRACE (PHP); callFunction (QString::null, flags, Printout); } void SimpleBackend::preview (int flags) { RK_TRACE (PHP); callFunction (QString::null, flags, Preview); } void SimpleBackend::writeData (const QVariant &data) { RK_TRACE (PHP); current_values.append (data); processCall (); } void SimpleBackend::tryNextFunction () { RK_TRACE (PHP); if ((!busy) && (!command_stack.isEmpty ())) { // clean up previous command if applicable if (command_stack.first ()->complete) { delete command_stack.first (); command_stack.pop_front (); if (!command_stack.count ()) return; } busy = true; command_stack.first ()->complete = true; current_flags = command_stack.first ()->flags; current_type = command_stack.first ()->type; current_values.clear (); template_pos = 0; if (current_type == Preprocess) current_template = preprocess_template; else if (current_type == Printout) current_template = printout_template; else if (current_type == Calculate) current_template = calculate_template; else if (current_type == Preview) current_template = preview_template; template_sep = current_template.indexOf ("!!!"); if (template_sep < 0) { commandFinished (""); return; } processCall (); } } void SimpleBackend::processCall () { RK_TRACE (PHP); int next_token = current_template.indexOf ("$$$", template_pos); if (next_token < 0) next_token = template_sep; if (next_token > template_sep) next_token = template_sep; if (next_token < template_sep) { int token_end = current_template.indexOf ("$$$", next_token + 3); RK_ASSERT (token_end >= 0); QString token = current_template.mid (next_token + 3, token_end - (next_token + 3)); template_pos = token_end + 3; emit (requestValue (token, RKStandardComponent::StringValue)); return; } // all values are fetched. Now generate the return string finishCall (current_template.mid (template_sep + 3)); } void SimpleBackend::finishCall (const QString &conditions) { RK_TRACE (PHP); QString conds = conditions; int repl = current_values.count(); for (int i = repl; i > 0; --i) { QString placeholder = "%" + QString::number (i); QString replacement = current_values[i-1].toString (); conds.replace (placeholder, replacement); } QString output; int pos = 3; int max = conds.length (); do { int cond_end = conds.indexOf ("!?!", pos); if (cond_end < 0) cond_end = max; QString condition = conds.mid (pos, cond_end - pos); int if_end = condition.indexOf ("!:!"); RK_ASSERT (if_end >= 0); QString if_part = condition.left (if_end); int if_mid = if_part.indexOf ("!=!"); RK_ASSERT (if_mid >= 0); QString if_compare = if_part.left (if_mid); QString if_against = if_part.mid (if_mid + 3); if ((if_compare.isEmpty() && if_against.isEmpty ()) || (if_compare == if_against)) { output = condition.mid (if_end + 3); break; } pos = cond_end + 3; } while (pos < max); // reached end of template commandFinished (output); } rkward-0.6.1/rkward/scriptbackends/qtscriptbackend.h0000644000175000017500000000741012124345416022207 0ustar thomasthomas/*************************************************************************** qtscriptbackend - description ------------------- begin : Mon Sep 28 2009 copyright : (C) 2009, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef QTSCRIPTBACKEND_H #define QTSCRIPTBACKEND_H #include "scriptbackend.h" class QtScriptBackendThread; /** This class allows to use QtScript as a scripting backend in RKWard. The script itself is run in a separate thread to ensure good performance even for complex scripts. This is especially important for spinboxes, where the value is changes many times in quick succession. Note that this is also the reason not to use Kross, which appears to be not thread safe. TODO: The code is currently based on the old PHPBackend. Once that is truely obsolete, there should be room for redesigning several aspects. */ class QtScriptBackend : public ScriptBackend { Q_OBJECT public: QtScriptBackend (const QString &filename); ~QtScriptBackend (); bool initialize (RKComponentPropertyCode *code_property=0, bool add_headings=true); void destroy (); void preprocess (int flags) { callFunction ("do_preprocess ();\n", flags, Preprocess); }; void calculate (int flags) { callFunction ("do_calculate ();\n", flags, Calculate); }; void printout (int flags) { callFunction ("do_printout ();\n", flags, Printout); }; void preview (int flags) { callFunction ("do_preview ();\n", flags, Preview); }; void writeData (const QVariant &data); public slots: void threadError (const QString &message); void commandDone (const QString &result); void needData (const QString &identifier, const int hint); private: void tryNextFunction (); QtScriptBackendThread *script_thread; bool dead; QString filename; }; #include #include #include class QtScriptBackendThread : public QThread { Q_OBJECT public: QtScriptBackendThread (const QString &commonfile, const QString &scriptfile, QtScriptBackend *parent); ~QtScriptBackendThread (); void setCommand (const QString &command); void setData (const QVariant &data); void kill () { killed = true; }; void goToSleep (bool sleep); signals: void commandDone (const QString &result); void needData (const QString &identifier, const int hint); void error (const QString &error); protected slots: QVariant getValue (const QString &identifier); QVariant getList (const QString &identifier); QVariant getString (const QString &identifier); QVariant getBoolean (const QString &identifier); bool includeFile (const QString &filename); protected: void run (); private: /** for any script error in the last evaluation. If there was an error, a message is generated, and this function return true (and the thread should be made to exit!) */ bool scriptError (); QVariant getValue (const QString &identifier, const int hint); QString _command; QVariant _data; QString _commonfile; QString _scriptfile; QScriptEngine engine; bool killed; QMutex mutex; QMutex sleep_mutex; bool sleeping; }; #endif rkward-0.6.1/rkward/scriptbackends/scriptbackend.cpp0000644000175000017500000000720712124345416022201 0ustar thomasthomas/*************************************************************************** scriptbackend - description ------------------- begin : Sun Aug 15 2004 copyright : (C) 2004, 2006, 2009, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "scriptbackend.h" #include #include "../plugin/rkcomponentproperties.h" #include "../debug.h" ScriptBackend::ScriptBackend () : QObject() { busy = false; current_type = Ignore; code_property = 0; } ScriptBackend::~ScriptBackend () { while (command_stack.count ()) { delete command_stack.takeFirst (); } } void ScriptBackend::callFunction (const QString &function, int flags, int type) { RK_TRACE (PHP); RK_DEBUG (PHP, DL_DEBUG, "callFunction %s", function.toLatin1 ().data ()); ScriptCommand *command = new ScriptCommand; command->command = function; command->flags = flags; command->type = type; command->complete = false; if (code_property) { if (type == Preprocess) { code_property->setPreprocess (QString::null); } else if (type == Calculate) { code_property->setCalculate (QString::null); } else if (type == Printout) { code_property->setPrintout (QString::null); } else if (type == Preview) { code_property->setPreview (QString::null); } invalidateCalls (type); } command_stack.append (command); tryNextFunction (); } void ScriptBackend::invalidateCalls (int type) { RK_TRACE (PHP); if (current_type == type) { current_type = Ignore; } QLinkedList::iterator it = command_stack.begin (); while (it != command_stack.end ()) { if ((*it)->type == type) { delete (*it); it = command_stack.erase (it); // it now points to next item } else { ++it; } } } void ScriptBackend::commandFinished (const QString &output) { RK_TRACE (PHP); QString _output = output; if (current_type != Ignore) { if (code_property) { if (_output.isNull ()) _output = ""; // must not be null for the code property! bool add_header = add_headings && (!_output.isEmpty ()); if (current_type == Preprocess) { if (add_header) code_property->setPreprocess (i18n ("## Prepare\n") + _output); else code_property->setPreprocess (_output); } else if (current_type == Calculate) { if (add_header) code_property->setCalculate (i18n ("## Compute\n") + _output); else code_property->setCalculate (_output); } else if (current_type == Printout) { if (add_header) code_property->setPrintout (i18n ("## Print result\n") + _output); else code_property->setPrintout (_output); } else if (current_type == Preview) { // no heading for the preview code (not shown in the code box) code_property->setPreview (_output); } else { emit (commandDone (current_flags)); } } else { emit (commandDone (current_flags)); } } busy = false; tryNextFunction (); if (!busy) { emit (idle ()); } } #include "scriptbackend.moc" rkward-0.6.1/rkward/wrapper/0000755000175000017500000000000012124345412015330 5ustar thomasthomasrkward-0.6.1/rkward/wrapper/CMakeLists.txt0000644000175000017500000000122412124345412020067 0ustar thomasthomasIF (WIN32) SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") ENDIF (WIN32) ADD_CUSTOM_COMMAND (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rkward.ico" COMMAND cmake -E copy "${CMAKE_CURRENT_SOURCE_DIR}/../icons/app-icon/rkward.ico" "${CMAKE_CURRENT_BINARY_DIR}/rkward.ico") ADD_EXECUTABLE (rkward rkward_startup_wrapper.cpp rkward_windows_icon.rc rkward.ico) add_definitions ("-DR_EXECUTABLE=\\\"${R_EXECUTABLE}\\\"") TARGET_LINK_LIBRARIES(rkward ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY}) IF (WIN32) # NOTE: On other platforms, currently in conflict with shell wrapper script INSTALL(TARGETS rkward DESTINATION ${BIN_INSTALL_DIR}) ENDIF (WIN32) rkward-0.6.1/rkward/wrapper/rkward_startup_wrapper.cpp0000644000175000017500000001605412124345412022656 0ustar thomasthomas/*************************************************************************** rkward_startup_wrapper - description ------------------- begin : Sun Mar 10 2013 copyright : (C) 2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /** This simple helper executable is responsible for reading basic configuration * settings, checking for some services and starting RKWard. These things used * to be done using a script, and there was nothing wrong with that, in principle. * However, the binary allows more flexibility, and more consistency across * platforms. */ #include #include #include #include #include #ifndef RKWARD_REL_INSTALL_PATH # define RKWARD_REL_INSTALL_PATH "" #endif #ifndef R_EXECUTABLE # define R_EXECUTABLE "" #endif QString findExeAtPath (const QString appname, const QString &path) { QDir dir (path); dir.makeAbsolute (); if (QFileInfo (dir.filePath (appname)).isExecutable ()) return dir.filePath (appname); if (QFileInfo (dir.filePath (appname + ".exe")).isExecutable ()) return dir.filePath (appname + ".exe"); if (QFileInfo (dir.filePath (appname + ".com")).isExecutable ()) return dir.filePath (appname + ".com"); if (QFileInfo (dir.filePath (appname + ".bat")).isExecutable ()) return dir.filePath (appname + ".bat"); return QString (); } QString findRKWardAtPath (const QString &path) { return findExeAtPath ("rkward.frontend", path); } int main (int argc, char *argv[]) { QApplication app (argc, argv); QStringList args = app.arguments (); if (!args.isEmpty ()) args.pop_front (); // The command itself QString kdeinit4_exe; QString rkward_frontend_exe; rkward_frontend_exe = findRKWardAtPath (app.applicationDirPath ()); // these two are for running directly from a build tree if (rkward_frontend_exe.isNull ()) rkward_frontend_exe = findRKWardAtPath (QDir (app.applicationDirPath ()).filePath ("..")); // these two are for running directly from a build tree if (rkward_frontend_exe.isNull ()) { // this is for the regular case: startup wrapper is not in the same dir as rkward.frontend QString kde4_config_exe; kde4_config_exe = findExeAtPath ("kde4-config", QDir::currentPath ()); if (kde4_config_exe.isNull ()) kde4_config_exe = findExeAtPath ("kde4-config", app.applicationDirPath ()); if (kde4_config_exe.isNull ()) kde4_config_exe = findExeAtPath ("kde4-config", QDir (app.applicationDirPath ()).filePath ("KDE/bin")); if (kde4_config_exe.isNull ()) { QMessageBox::critical (0, "Could not find KDE installation", "The KDE installation could not be found (kde4-config). When moving / copying RKWard, make sure to copy the whole application folder, or create a shorcut / link, instead."); exit (1); } QDir kde_dir (QFileInfo (kde4_config_exe).absolutePath ()); kde_dir.makeAbsolute (); #ifdef Q_WS_WIN kdeinit4_exe = findExeAtPath ("kdeinit4", kde_dir.path ()); #endif // important if RKWard is not in KDEPREFIX/bin but e.g. KDEPREFIX/lib/libexec qputenv ("RKWARD_ENSURE_PREFIX", kde_dir.path().toLocal8Bit ()); rkward_frontend_exe = findRKWardAtPath (kde_dir.absoluteFilePath ("bin")); if (rkward_frontend_exe.isNull ()) rkward_frontend_exe = findRKWardAtPath (kde_dir.absoluteFilePath ("../lib/libexec")); if (rkward_frontend_exe.isNull ()) rkward_frontend_exe = findRKWardAtPath (kde_dir.absoluteFilePath (RKWARD_REL_INSTALL_PATH)); if (rkward_frontend_exe.isNull ()) { QMessageBox::critical (0, "RKWard frontend binary missing", "RKWard frontend binary could not be found. When moving / copying RKWard, make sure to copy the whole application folder, or create a shorcut / link, instead."); exit (1); } } #ifdef Q_WS_WIN // Explicit initialization of KDE, in case Windows 7 asks for admin priviledges if (kdeinit4_exe.isNull ()) { kdeinit4_exe = findExeAtPath ("kdeinit4", QFileInfo (rkward_frontend_exe).absolutePath ()); if (!kdeinit4_exe.isNull ()) QProcess::execute (kdeinit4_exe, QStringList ()); } #endif bool usage = false; QString debugger_arg; QString r_exe_arg; for (int i=0; i < args.size (); ++i) { if (args[i] == "--debugger") { if ((i+1) < args.size ()) { debugger_arg = args.takeAt (i + 1); } else usage = true; args.removeAt (i); --i; } else if (args[i] == "--R") { if ((i+1) < args.size ()) { r_exe_arg = args.takeAt (i + 1); } else usage = true; args.removeAt (i); --i; } } if (usage) { QProcess::execute (rkward_frontend_exe, QStringList ("--help")); exit (1); } // Look for R: //- command line parameter //- Specified in cfg file next to rkward executable //- compile-time default QString r_exe = r_exe_arg; if (!r_exe.isNull ()) { if (!QFileInfo (r_exe).isExecutable ()) { QMessageBox::critical (0, "Specified R executable does not exist", QString ("The R executable specified on the command line (%1) does not exist or is not executable.").arg (r_exe)); exit (1); } } else { QFileInfo frontend_info (rkward_frontend_exe); QDir frontend_path = frontend_info.absoluteDir (); QFileInfo rkward_ini_file (frontend_path.absoluteFilePath ("rkward.ini")); if (rkward_ini_file.isReadable ()) { QSettings rkward_ini (rkward_ini_file.absoluteFilePath (), QSettings::IniFormat); r_exe = rkward_ini.value ("R executable").toString (); if (!r_exe.isNull ()) { if (QDir::isRelativePath (r_exe)) { r_exe = frontend_path.absoluteFilePath (r_exe); } if (!QFileInfo (r_exe).isExecutable ()) { QMessageBox::critical (0, "Specified R executable does not exist", QString ("The R executable specified in the rkward.ini file (%1) does not exist or is not executable.").arg (rkward_ini_file.absoluteFilePath ())); exit (1); } } } if (r_exe.isNull ()) { r_exe = R_EXECUTABLE; if (!QFileInfo (r_exe).isExecutable ()) { QMessageBox::critical (0, "Specified R executable does not exist", QString ("The R executable specified at compile time (%1) does not exist or is not executable. Probably the installation of R has moved. You can use the command line parameter '--R', or supply an rkward.ini file to specify the new location.").arg (r_exe)); exit (1); } } } QStringList call_args ("CMD"); if (!debugger_arg.isNull ()) call_args.append (debugger_arg); call_args.append (rkward_frontend_exe); call_args.append (args); return (QProcess::execute (r_exe, call_args)); } rkward-0.6.1/rkward/wrapper/rkward_windows_icon.rc0000644000175000017500000000007512124345412021734 0ustar thomasthomasDI_ICON1 ICON DISCARDABLE "rkward.ico" rkward-0.6.1/rkward/settings/0000755000175000017500000000000012124345411015507 5ustar thomasthomasrkward-0.6.1/rkward/settings/rksettingsmodule.cpp0000644000175000017500000000263112124345411021620 0ustar thomasthomas/*************************************************************************** rksettingsmodule - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmodule.h" #include "../rkward.h" #include "rksettings.h" //static RCommandChain* RKSettingsModule::chain = 0; RKSettingsModule::RKSettingsModule(RKSettings *gui, QWidget *parent) : QWidget (parent) { changed = false; RKSettingsModule::gui = gui; } RKSettingsModule::~RKSettingsModule() { } void RKSettingsModule::change () { changed = true; gui->enableApply (); } rkward-0.6.1/rkward/settings/rksettingsmoduleobjectbrowser.cpp0000644000175000017500000001705112124345411024415 0ustar thomasthomas/*************************************************************************** rksettingsmodule - description ------------------- begin : Fri Apr 22 2005 copyright : (C) 2005 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmoduleobjectbrowser.h" #include #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../misc/multistringselector.h" #include "rksettings.h" #include "../debug.h" // static bool RKSettingsModuleObjectBrowser::settings[RKObjectListViewSettings::SettingsCount]; QStringList RKSettingsModuleObjectBrowser::getstructure_blacklist; RKSettingsModuleObjectBrowser::RKSettingsModuleObjectBrowser (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); checkboxes = new QCheckBox*[RKObjectListViewSettings::SettingsCount]; QVBoxLayout *layout = new QVBoxLayout (this); layout->addWidget (new QLabel (i18n ("Which objects should be shown by default?"), this)); checkboxes[RKObjectListViewSettings::ShowObjectsHidden] = new QCheckBox (i18n ("Show hidden objects"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowObjectsHidden]); checkboxes[RKObjectListViewSettings::ShowObjectsAllEnvironments] = new QCheckBox (i18n ("Show all environments"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowObjectsAllEnvironments]); layout->addSpacing (2*RKGlobals::spacingHint ()); checkboxes[RKObjectListViewSettings::ShowObjectsContainer] = new QCheckBox (i18n ("Show objects with children"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowObjectsContainer]); checkboxes[RKObjectListViewSettings::ShowObjectsFunction] = new QCheckBox (i18n ("Show functions"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowObjectsFunction]); checkboxes[RKObjectListViewSettings::ShowObjectsVariable] = new QCheckBox (i18n ("Show variables"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowObjectsVariable]); layout->addSpacing (2*RKGlobals::spacingHint ()); layout->addWidget (new QLabel (i18n ("Which columns should be shown by default?"), this)); checkboxes[RKObjectListViewSettings::ShowFieldsLabel] = new QCheckBox (i18n ("Label field"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowFieldsLabel]); checkboxes[RKObjectListViewSettings::ShowFieldsType] = new QCheckBox (i18n ("Type field"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowFieldsType]); checkboxes[RKObjectListViewSettings::ShowFieldsClass] = new QCheckBox (i18n ("Class field"), this); layout->addWidget (checkboxes[RKObjectListViewSettings::ShowFieldsClass]); layout->addStretch (); for (int i = 0; i < RKObjectListViewSettings::SettingsCount; ++i) { checkboxes[i]->setChecked (settings[i]); connect (checkboxes[i], SIGNAL (stateChanged (int)), this, SLOT (boxChanged (int))); } blacklist_choser = new MultiStringSelector (i18n ("Never fetch the structure of these packages:"), this); blacklist_choser->setValues (getstructure_blacklist); connect (blacklist_choser, SIGNAL (listChanged ()), this, SLOT (listChanged ())); connect (blacklist_choser, SIGNAL (getNewStrings (QStringList*)), this, SLOT (addBlackList (QStringList*))); layout->addWidget (blacklist_choser); } RKSettingsModuleObjectBrowser::~RKSettingsModuleObjectBrowser () { RK_TRACE (SETTINGS); } //static bool RKSettingsModuleObjectBrowser::isSettingActive (RKObjectListViewSettings::Settings setting) { RK_TRACE (SETTINGS); return settings[setting]; } //static bool RKSettingsModuleObjectBrowser::isPackageBlacklisted (const QString &package_name) { RK_TRACE (SETTINGS); return getstructure_blacklist.contains (package_name); } void RKSettingsModuleObjectBrowser::addBlackList (QStringList *string_list) { RK_TRACE (SETTINGS); QString new_string = KInputDialog::getText (i18n ("Add exclusion"), i18n ("Add the name of the package that no structure should be fetched for"), QString::null, 0, this); (*string_list).append (new_string); } void RKSettingsModuleObjectBrowser::applyChanges () { RK_TRACE (SETTINGS); for (int i = 0; i < RKObjectListViewSettings::SettingsCount; ++i) { settings[i] = checkboxes[i]->isChecked (); } getstructure_blacklist = blacklist_choser->getValues(); } void RKSettingsModuleObjectBrowser::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } QString RKSettingsModuleObjectBrowser::caption () { RK_TRACE (SETTINGS); return (i18n ("Workspace")); } //static void RKSettingsModuleObjectBrowser::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Object Browser"); cg.writeEntry ("show hidden vars", settings[RKObjectListViewSettings::ShowObjectsHidden]); cg.writeEntry ("show all environments", settings[RKObjectListViewSettings::ShowObjectsAllEnvironments]); cg.writeEntry ("show container objects", settings[RKObjectListViewSettings::ShowObjectsContainer]); cg.writeEntry ("show function objects", settings[RKObjectListViewSettings::ShowObjectsFunction]); cg.writeEntry ("show variable objects", settings[RKObjectListViewSettings::ShowObjectsVariable]); cg.writeEntry ("show label field", settings[RKObjectListViewSettings::ShowFieldsLabel]); cg.writeEntry ("show type field", settings[RKObjectListViewSettings::ShowFieldsType]); cg.writeEntry ("show class field", settings[RKObjectListViewSettings::ShowFieldsClass]); cg.writeEntry ("package blacklist", getstructure_blacklist); } //static void RKSettingsModuleObjectBrowser::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Object Browser"); settings[RKObjectListViewSettings::ShowObjectsHidden] = cg.readEntry ("show hidden vars", false); settings[RKObjectListViewSettings::ShowObjectsAllEnvironments] = cg.readEntry ("show all environments", true); settings[RKObjectListViewSettings::ShowObjectsContainer] = cg.readEntry ("show container objects", true); settings[RKObjectListViewSettings::ShowObjectsFunction] = cg.readEntry ("show function objects", true); settings[RKObjectListViewSettings::ShowObjectsVariable] = cg.readEntry ("show variable objects", true); settings[RKObjectListViewSettings::ShowFieldsLabel] = cg.readEntry ("show label field", true); settings[RKObjectListViewSettings::ShowFieldsType] = cg.readEntry ("show type field", true); settings[RKObjectListViewSettings::ShowFieldsClass] = cg.readEntry ("show class field", true); getstructure_blacklist = cg.readEntry ("package blacklist", QStringList ("GO")); } void RKSettingsModuleObjectBrowser::boxChanged (int) { RK_TRACE (SETTINGS); change (); } void RKSettingsModuleObjectBrowser::listChanged () { RK_TRACE (SETTINGS); change (); } #include "rksettingsmoduleobjectbrowser.moc" rkward-0.6.1/rkward/settings/CMakeLists.txt0000644000175000017500000000145612124345411020255 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(settings_STAT_SRCS rksettings.cpp rksettingsmodule.cpp rksettingsmodulegeneral.cpp rksettingsmoduleoutput.cpp rksettingsmodulegraphics.cpp rksettingsmoduleplugins.cpp rksettingsmoduler.cpp rksettingsmodulewatch.cpp rksettingsmoduleobjectbrowser.cpp rksettingsmoduleconsole.cpp rksettingsmodulecommandeditor.cpp rksettingsmoduledebug.cpp ) QT4_AUTOMOC(${settings_STAT_SRCS}) IF (WIN32 OR USE_BINARY_PACKAGES) SET_PROPERTY ( SOURCE rksettingsmoduler.cpp APPEND PROPERTY COMPILE_DEFINITIONS USE_BINARY_PACKAGES=1 ) ENDIF (WIN32 OR USE_BINARY_PACKAGES) ADD_LIBRARY(settings STATIC ${settings_STAT_SRCS}) rkward-0.6.1/rkward/settings/rksettingsmodulewatch.h0000644000175000017500000000520312124345411022312 0ustar thomasthomas/*************************************************************************** rksettingsmodulewatch - description ------------------- begin : Thu Aug 26 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEWATCH_H #define RKSETTINGSMODULEWATCH_H #include "rksettingsmodule.h" class RCommand; class QCheckBox; class QGridLayout; class KIntSpinBox; /** Settings module for the RInterface-watch. Allows you to configure what kind of commands you would like to see/hide. @author Thomas Friedrichsmeier */ class RKSettingsModuleWatch : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleWatch (RKSettings *gui, QWidget *parent); ~RKSettingsModuleWatch (); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); void applyChanges (); void save (KConfig *config); void validateGUI (); static bool shouldShowInput (RCommand *command); static bool shouldShowOutput (RCommand *command); static bool shouldShowError (RCommand *command); static bool shouldRaiseWindow (RCommand *command); static uint maxLogLines () { return max_log_lines; }; QString caption (); public slots: void changedSetting (int); private: enum FilterType { ShowInput=1, ShowOutput=2, ShowError=4, RaiseWindow=8 }; static int plugin_filter; static int app_filter; static int sync_filter; static int user_filter; struct FilterBoxes { QCheckBox *input; QCheckBox *output; QCheckBox *error; QCheckBox *raise; }; FilterBoxes *plugin_filter_boxes; FilterBoxes *app_filter_boxes; FilterBoxes *sync_filter_boxes; FilterBoxes *user_filter_boxes; int getFilterSettings (FilterBoxes *boxes); FilterBoxes *addFilterSettings (QWidget *parent, QGridLayout *layout, int row, const QString &label, int state); static uint max_log_lines; KIntSpinBox *max_log_lines_spinner; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduleconsole.h0000644000175000017500000000641712124345411022656 0ustar thomasthomas/*************************************************************************** rksettingsmoduleconsole - description ------------------- begin : Sun Oct 16 2005 copyright : (C) 2005, 2006, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULECONSOLE_H #define RKSETTINGSMODULECONSOLE_H #include "rksettingsmodule.h" #include class QCheckBox; class QComboBox; class KIntSpinBox; /** Settings module for the console. Allows you to configure whether to store command history, command history length. Future extensions: color for warnings/errors, etc. @author Thomas Friedrichsmeier */ class RKSettingsModuleConsole : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleConsole (RKSettings *gui, QWidget *parent); ~RKSettingsModuleConsole (); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); void applyChanges (); void save (KConfig *config); static bool saveHistory () { return save_history; }; static uint maxHistoryLength () { return max_history_length; }; static uint maxConsoleLines () { return max_console_lines; }; static bool pipeUserCommandsThroughConsole () { return pipe_user_commands_through_console; }; enum PipedCommandsHistoryMode { DontAdd = 0, AddSingleLine = 1, AlwaysAdd = 2 }; static PipedCommandsHistoryMode addPipedCommandsToHistory () { return add_piped_commands_to_history; }; /** Given the button state, return whether the command history should be navigated context sensitive or insensitive @param current_state the current button state @returns true, if a the search should be context sensitive, false for a normal search */ static bool shouldDoHistoryContextSensitive (Qt::KeyboardModifiers current_state); static QStringList loadCommandHistory (); static void saveCommandHistory (const QStringList &list); QString caption (); QString helpURL () { return ("rkward://page/rkward_console#settings"); }; public slots: void changedSetting (int); private: static bool save_history; static uint max_history_length; static uint max_console_lines; static bool pipe_user_commands_through_console; static PipedCommandsHistoryMode add_piped_commands_to_history; static bool context_sensitive_history_by_default; QCheckBox *save_history_box; QCheckBox *reverse_context_mode_box; QCheckBox *pipe_user_commands_through_console_box; QComboBox *add_piped_commands_to_history_box; KIntSpinBox *max_history_length_spinner; KIntSpinBox *max_console_lines_spinner; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduleplugins.cpp0000644000175000017500000005434212124345411023230 0ustar thomasthomas/*************************************************************************** rksettingsmoduleplugins - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmoduleplugins.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../rkward.h" #include "../rkglobals.h" #include "../misc/multistringselector.h" #include "../misc/rkcommonfunctions.h" #include "../misc/rkspinbox.h" #include "../misc/xmlhelper.h" #include "../plugin/rkcomponentmap.h" #include "rksettingsmodulegeneral.h" #include "../debug.h" // static members QList RKSettingsModulePlugins::known_plugin_maps; RKSettingsModulePlugins::PluginPrefs RKSettingsModulePlugins::interface_pref; bool RKSettingsModulePlugins::show_code; int RKSettingsModulePlugins::code_size; RKSettingsModulePlugins::RKSettingsModulePlugins (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); QLabel *label = new QLabel (i18n ("Some plugins are available with both, a wizard-like interface and a traditional dialog interface. If both are available, which mode of presentation do you prefer?"), this); label->setWordWrap (true); main_vbox->addWidget (label); QGroupBox* button_box = new QGroupBox (this); QVBoxLayout* group_layout = new QVBoxLayout (button_box); button_group = new QButtonGroup (button_box); QAbstractButton* button; button = new QRadioButton (i18n ("Always prefer dialogs"), button_box); group_layout->addWidget (button); button_group->addButton (button, PreferDialog); button = new QRadioButton (i18n ("Prefer recommended interface"), button_box); group_layout->addWidget (button); button_group->addButton (button, PreferRecommended); button = new QRadioButton (i18n ("Always prefer wizards"), button_box); group_layout->addWidget (button); button_group->addButton (button, PreferWizard); if ((button = button_group->button (interface_pref))) button->setChecked (true); connect (button_group, SIGNAL (buttonClicked (int)), this, SLOT (settingChanged ())); main_vbox->addWidget (button_box); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); QGroupBox *code_frame = new QGroupBox (i18n ("R syntax display (in dialogs)"), this); group_layout = new QVBoxLayout (code_frame); show_code_box = new QCheckBox (i18n ("Code shown by default"), code_frame); show_code_box->setChecked (show_code); connect (show_code_box, SIGNAL (stateChanged (int)), this, SLOT (settingChanged ())); group_layout->addWidget (show_code_box); KHBox *code_size_hbox = new KHBox (code_frame); new QLabel (i18n ("Default height of code display (pixels)"), code_size_hbox); code_size_box = new RKSpinBox (code_size_hbox); code_size_box->setIntMode (20, 5000, code_size); connect (code_size_box, SIGNAL (valueChanged (int)), this, SLOT (settingChanged ())); group_layout->addWidget (code_size_hbox); main_vbox->addWidget (code_frame); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); map_choser = new RKMultiStringSelectorV2 (i18n ("Select .pluginmap file(s)"), this); map_model = new RKSettingsModulePluginsModel (this); map_model->init (known_plugin_maps); map_choser->setModel (map_model, 1); connect (map_choser, SIGNAL (insertNewStrings(int)), map_model, SLOT (insertNewStrings(int))); connect (map_choser, SIGNAL (swapRows(int,int)), map_model, SLOT (swapRows(int,int))); connect (map_choser, SIGNAL (listChanged ()), this, SLOT (settingChanged ())); main_vbox->addWidget (map_choser); } RKSettingsModulePlugins::~RKSettingsModulePlugins() { RK_TRACE (SETTINGS); } void RKSettingsModulePlugins::settingChanged () { RK_TRACE (SETTINGS); change (); } QString RKSettingsModulePlugins::caption () { RK_TRACE (SETTINGS); return (i18n ("Plugins")); } void RKSettingsModulePlugins::applyChanges () { RK_TRACE (SETTINGS); known_plugin_maps = map_model->pluginMaps (); interface_pref = static_cast (button_group->checkedId ()); show_code = show_code_box->isChecked (); code_size = code_size_box->intValue (); fixPluginMapLists (); RKWardMainWindow::getMain ()->initPlugins(); map_choser->setModel (0); // we don't want any extra change notification for this map_model->init (known_plugin_maps); map_choser->setModel (map_model, 1); } void RKSettingsModulePlugins::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModulePlugins::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Plugin Settings"); cg.deleteGroup ("Known Plugin maps"); // always start from scratch to remove cruft from pluginmaps KConfigGroup pmg = cg.group ("Known Plugin maps"); QStringList all_known_maps; for (int i = 0; i < known_plugin_maps.size (); ++i) { const PluginMapStoredInfo &inf = known_plugin_maps[i]; KConfigGroup ppmg = pmg.group (inf.filename); ppmg.writeEntry ("Active", inf.active); ppmg.writeEntry ("Broken", inf.broken_in_this_version); ppmg.writeEntry ("Quirky", inf.quirky_in_this_version); ppmg.writeEntry ("timestamp", inf.last_modified); ppmg.writeEntry ("id", inf.id); ppmg.writeEntry ("priority", inf.priority); all_known_maps.append (inf.filename); } // NOTE: The group list is always sorted alphabetically, which is why we need a separate list setting for saving info on order. cg.writeEntry ("All known plugin maps", all_known_maps); cg.writeEntry ("Interface Preferences", static_cast (interface_pref)); cg.writeEntry ("Code display default", show_code); cg.writeEntry ("Code display size", code_size); } void RKSettingsModulePlugins::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Plugin Settings"); if (RKSettingsModuleGeneral::storedConfigVersion () < RKSettingsModuleGeneral::RKWardConfig_0_6_1) { QStringList plugin_maps = cg.readEntry ("Plugin Maps", QStringList ()); QStringList kplugin_maps = cg.readEntry ("All known plugin maps", QStringList ()); for (int i = 0; i < kplugin_maps.size (); ++i) { PluginMapStoredInfo inf (kplugin_maps[i]); inf.active = plugin_maps.contains (kplugin_maps[i]); // state info will be properly initialized in fixPluginMapLists() known_plugin_maps.append (inf); } } else { KConfigGroup pmg = cg.group ("Known Plugin maps"); QStringList kplugin_maps = cg.readEntry ("All known plugin maps", QStringList ()); for (int i = 0; i < kplugin_maps.size (); ++i) { KConfigGroup ppmg = pmg.group (kplugin_maps[i]); PluginMapStoredInfo inf (kplugin_maps[i]); inf.active = ppmg.readEntry ("Active", false); // Pluginmaps which are broken with one version of RKWard may be alright with other versions. So reset flags, if version has changed. inf.broken_in_this_version = ppmg.readEntry ("Broken", false) && !RKSettingsModuleGeneral::rkwardVersionChanged (); inf.quirky_in_this_version = ppmg.readEntry ("Quirky", false) && !RKSettingsModuleGeneral::rkwardVersionChanged (); inf.last_modified = ppmg.readEntry ("timestamp", QDateTime ()); inf.id = ppmg.readEntry ("id"); inf.priority = ppmg.readEntry ("priority", (int) PriorityMedium); known_plugin_maps.append (inf); } } fixPluginMapLists (); // removes any maps which don't exist any more interface_pref = static_cast (cg.readEntry ("Interface Preferences", static_cast (PreferRecommended))); show_code = cg.readEntry ("Code display default", false); code_size = cg.readEntry ("Code display size", 250); if (RKSettingsModuleGeneral::storedConfigVersion () <= RKSettingsModuleGeneral::RKWardConfig_Pre0_5_7) { if (code_size == 40) code_size = 250; // previous default untouched. } } int findKnownPluginMap (const QString& filename, const RKSettingsModulePlugins::PluginMapList& haystack) { RK_TRACE (SETTINGS); int i; for (i = haystack.size () - 1; i >= 0; --i) { if (haystack[i].filename == filename) return i; } return i; } QString RKSettingsModulePlugins::findPluginMapById (const QString &id) { RK_TRACE (SETTINGS); for (int i = 0; i < known_plugin_maps.size (); ++i) { if (known_plugin_maps[i].id == id) return known_plugin_maps[i].filename; } // for "rkward::" namespace, try a little harded: if (id.startsWith ("rkward::")) { QFileInfo info (RKCommonFunctions::getRKWardDataDir () + "/" + id.mid (8)); if (info.isReadable ()) return info.absoluteFilePath (); } return QString (); } bool RKSettingsModulePlugins::markPluginMapAsBroken (const QString& map) { RK_TRACE (SETTINGS); int index = findKnownPluginMap (map, known_plugin_maps); if (index < 0) { RK_ASSERT (index >= 0); return false; } bool ret = !known_plugin_maps[index].broken_in_this_version; known_plugin_maps[index].broken_in_this_version = true; known_plugin_maps[index].active = false; return ret; } bool RKSettingsModulePlugins::markPluginMapAsQuirky (const QString& map) { RK_TRACE (SETTINGS); int index = findKnownPluginMap (map, known_plugin_maps); if (index < 0) { RK_ASSERT (index >= 0); return false; } bool ret = !known_plugin_maps[index].quirky_in_this_version; known_plugin_maps[index].quirky_in_this_version = true; return ret; } void RKSettingsModulePlugins::markPluginMapAsWorking (const QString& map) { RK_TRACE (SETTINGS); int index = findKnownPluginMap (map, known_plugin_maps); if (index < 0) { RK_ASSERT (index >= 0); return; } known_plugin_maps[index].quirky_in_this_version = false; known_plugin_maps[index].broken_in_this_version = false; } QStringList RKSettingsModulePlugins::pluginMaps () { RK_TRACE (SETTINGS); QStringList ret; for (int i = 0; i < known_plugin_maps.size (); ++i) { if (known_plugin_maps[i].active) ret.append (known_plugin_maps[i].filename); } return ret; } // static void RKSettingsModulePlugins::registerPluginMaps (const QStringList &maps, bool force_add, bool force_reload) { RK_TRACE (SETTINGS); QStringList added; foreach (const QString &map, maps) { if (map.isEmpty ()) continue; int index = findKnownPluginMap (map, known_plugin_maps); if (index >= 0) { if (known_plugin_maps[index].active) continue; if (!force_add) continue; } else { // not found PluginMapStoredInfo inf (map); known_plugin_maps.append (inf); index = known_plugin_maps.size () - 1; } added.append (map); } fixPluginMapLists (); // activate added (or forced) pluginmaps, *after* the list has been fixed (and info on priority has been read) for (int i = 0; i < known_plugin_maps.size (); ++i) { PluginMapStoredInfo &inf = known_plugin_maps[i]; int index = added.indexOf (inf.filename); if (index >= 0) { if (force_add || (inf.priority >= PriorityMedium)) inf.active = true; else (added.removeAt (index)); } } if (force_reload || (!added.isEmpty ())) { RKWardMainWindow::getMain ()->initPlugins (added); } } void RKSettingsModulePlugins::fixPluginMapLists () { RK_TRACE (SETTINGS); QFileInfo default_pluginmap (RKCommonFunctions::getRKWardDataDir () + "/all.pluginmap"); int default_pluginmap_index = -1; bool any_active_pluginmap = false; for (int i = 0; i < known_plugin_maps.size (); ++i) { PluginMapStoredInfo &inf = known_plugin_maps[i]; QFileInfo info (inf.filename); if (!info.isReadable ()) { known_plugin_maps.removeAt (i); --i; } else { if (inf.active) any_active_pluginmap = true; if ((default_pluginmap_index < 0) && (info == default_pluginmap)) default_pluginmap_index = i; if (info.lastModified () != inf.last_modified) { inf.broken_in_this_version = false; inf.quirky_in_this_version = false; inf.last_modified = info.lastModified (); inf.id.clear (); } } if (inf.id.isEmpty ()) { QDomElement de = XMLHelper::getStaticHelper ()->openXMLFile (inf.filename, DL_WARNING); inf.id = RKPluginMapFile::parseId (de); inf.priority = XMLHelper::getStaticHelper ()->getMultiChoiceAttribute (de, "priority", "hidden;low;medium;high", (int) PriorityMedium, DL_WARNING); } } // make sure the default plugin map is in the list (unless it is non-readable) if ((default_pluginmap_index < 0) && (default_pluginmap.isReadable ())) { PluginMapStoredInfo inf (default_pluginmap.absoluteFilePath ()); known_plugin_maps.prepend (inf); default_pluginmap_index = 0; } // if no other pluginmap is active, activate the default map if (!any_active_pluginmap && (default_pluginmap_index >= 0)) { known_plugin_maps[default_pluginmap_index].active = true; } } void RKSettingsModulePlugins::installPluginPack (const QString &archive_file) { RK_TRACE (SETTINGS); QString basename = baseNameOfPluginPack (archive_file); if (basename.isEmpty ()) return; // remove any old versions of the same plugin. Unfortunately, KNewStuff does not clean up when installing updates. QFileInfo archive_file_info (archive_file); QFileInfo base_file_info (basename); QDir base_dir = base_file_info.absoluteDir (); QString base_filename = base_file_info.fileName (); QStringList old_versions = base_dir.entryList (QDir::Files).filter (QRegExp ("^" + base_filename + "(-.*)?\\.(tar\\.gz|\\zip)$")); foreach (const QString old_version, old_versions) { if (old_version != archive_file_info.fileName ()) QFile::remove (base_dir.absoluteFilePath (old_version)); } // finally, remove the previous unpacked installation, if any, to make sure we have a clean install if (QDir().exists (basename)) KIO::del (KUrl::fromLocalFile (basename))->exec (); KArchive* archive; if (archive_file.endsWith (".zip", Qt::CaseInsensitive)) { archive = new KZip (archive_file); } else { archive = new KTar (archive_file); } if (!archive->open (QIODevice::ReadOnly)) { // TODO: show error message RK_ASSERT (false); return; } archive->directory ()->copyTo (basename, true); delete (archive); QStringList installed_maps = findPluginMapsRecursive (basename); registerPluginMaps (installed_maps, false, false); } void RKSettingsModulePlugins::uninstallPluginPack (const QString &archive_file) { RK_TRACE (SETTINGS); QString basename = baseNameOfPluginPack (archive_file); if (basename.isEmpty ()) return; // Well, calling exec is ugly, but so much simpler than handling this asynchronously... KIO::del (KUrl::fromLocalFile (basename))->exec (); } QString RKSettingsModulePlugins::baseNameOfPluginPack (const QString &archive_file) { RK_TRACE (SETTINGS); QFileInfo file_info (archive_file); QDir dir = file_info.absoluteDir (); QString name = file_info.fileName (); // strip file-type ending if (name.endsWith (".tar.gz", Qt::CaseInsensitive)) { name = name.left (name.length () - 7); } else if (name.endsWith (".zip", Qt::CaseInsensitive)) { name = name.left (name.length () - 4); } else { return QString (); } // strip version (if any) int where = name.indexOf ("-", 1); // must have at least one char of name before version string if (where > 0) name = name.left (where); return dir.absoluteFilePath (name); } QStringList RKSettingsModulePlugins::findPluginMapsRecursive (const QString &basedir) { RK_TRACE (SETTINGS); QDir dir (basedir); QStringList maps = dir.entryList (QDir::Files).filter (QRegExp (".*\\.pluginmap$")); QStringList ret; foreach (const QString &map, maps) ret.append (dir.absoluteFilePath (map)); QStringList subdirs = dir.entryList (QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot); foreach (const QString subdir, subdirs) { #if QT_VERSION >= 0x040500 ret.append (findPluginMapsRecursive (dir.absoluteFilePath (subdir))); #else QStringList subs = findPluginMapsRecursive (dir.absoluteFilePath (subdir)); foreach (const QString sub, subs) ret.append (sub); #endif } return ret; } RKSettingsModulePluginsModel::RKSettingsModulePluginsModel (RKSettingsModulePlugins* parent) : QAbstractTableModel (parent) { RK_TRACE (SETTINGS); } RKSettingsModulePluginsModel::~RKSettingsModulePluginsModel() { RK_TRACE (SETTINGS); foreach (const PluginMapMetaInfo &inf, plugin_map_dynamic_info) { delete (inf.about); } } void RKSettingsModulePluginsModel::init (const RKSettingsModulePlugins::PluginMapList& known_plugin_maps) { RK_TRACE (SETTINGS); plugin_maps = known_plugin_maps; emit (reset ()); } int RKSettingsModulePluginsModel::rowCount (const QModelIndex& parent) const { //RK_TRACE (SETTINGS); if (parent.isValid ()) return 0; return plugin_maps.size (); } #define COLUMN_CHECKED 0 #define COLUMN_FILENAME 1 #define COLUMN_STATUS 2 #define COLUMN_COUNT 3 int RKSettingsModulePluginsModel::columnCount (const QModelIndex& parent) const { // RK_TRACE (SETTINGS); if (parent.isValid ()) return 0; return COLUMN_COUNT; } QVariant RKSettingsModulePluginsModel::data (const QModelIndex& index, int role) const { // RK_TRACE (SETTINGS); if (!index.isValid ()) return QVariant (); int col = index.column (); const RKSettingsModulePlugins::PluginMapStoredInfo &inf = plugin_maps[index.row ()]; if (role == Qt::BackgroundRole) { if (inf.broken_in_this_version) return Qt::red; if (inf.quirky_in_this_version) return Qt::yellow; return (QVariant ()); } else if (role == Qt::ToolTipRole) { const PluginMapMetaInfo &meta = const_cast (this)->getPluginMapMetaInfo (inf.filename); QString desc = meta.about->toHtml (); if (!meta.dependencies.isEmpty ()) { desc.append ("" + i18n ("Dependencies") + ""); desc.append (RKComponentDependency::depsToHtml (meta.dependencies)); } return desc; } if (col == COLUMN_CHECKED) { if (role == Qt::CheckStateRole) { return (inf.active ? Qt::Checked : Qt::Unchecked); } } else if (col == COLUMN_FILENAME) { if (role == Qt::DisplayRole) return inf.filename; } else if (col == COLUMN_STATUS) { if (role == Qt::DisplayRole) { if (inf.broken_in_this_version) return i18n ("Broken"); QString status; if (RKComponentMap::getMap ()->isPluginMapLoaded (inf.filename)) status = i18n ("Loaded"); if (inf.quirky_in_this_version) { if (!status.isEmpty ()) status.append (", "); status.append (i18n ("Quirky")); } return status; } } return QVariant (); } Qt::ItemFlags RKSettingsModulePluginsModel::flags (const QModelIndex& index) const { // RK_TRACE (SETTINGS); Qt::ItemFlags flags = QAbstractItemModel::flags (index); if (index.isValid () && (index.column () == COLUMN_CHECKED)) flags |= Qt::ItemIsUserCheckable | Qt::ItemIsEditable; return flags; } QVariant RKSettingsModulePluginsModel::headerData (int section, Qt::Orientation orientation, int role) const { // RK_TRACE (SETTINGS); if ((role == Qt::DisplayRole) && (orientation == Qt::Horizontal)) { if (section == COLUMN_CHECKED) return i18n ("Active"); if (section == COLUMN_FILENAME) return i18n ("Filename"); if (section == COLUMN_STATUS) return i18n ("Status"); RK_ASSERT (false); } return QVariant (); } bool RKSettingsModulePluginsModel::setData (const QModelIndex& index, const QVariant& value, int role) { RK_TRACE (SETTINGS); if (role == Qt::CheckStateRole) { if (index.isValid () && (index.column () == COLUMN_CHECKED)) { plugin_maps[index.row ()].active = value.toBool (); emit (dataChanged (index, index)); return true; } } return QAbstractItemModel::setData (index, value, role); } void RKSettingsModulePluginsModel::insertNewStrings (int above_row) { RK_TRACE (SETTINGS); QStringList files = KFileDialog::getOpenFileNames (RKCommonFunctions::getRKWardDataDir (), "*.pluginmap", static_cast (QObject::parent ()), i18n ("Select .pluginmap-file")); // already known files are activated, but not added for (int i = files.size () -1; i >= 0; --i) { int pos = findKnownPluginMap (files[i], plugin_maps); if (pos >= 0) { if (!plugin_maps[pos].active) { plugin_maps[pos].active = true; emit (dataChanged (index (pos, 0), index (pos, COLUMN_COUNT - 1))); } files.removeAt (i); } } beginInsertRows (QModelIndex (), above_row, files.size ()); for (int i = files.size () - 1; i >= 0; --i) { RKSettingsModulePlugins::PluginMapStoredInfo inf (files[i]); inf.active = true; plugin_maps.insert (above_row, inf); } endInsertRows (); } void RKSettingsModulePluginsModel::swapRows (int rowa, int rowb) { RK_TRACE (SETTINGS); RK_ASSERT ((rowa >= 0) && (rowa < rowCount ()) && (rowb >= 0) && (rowb < rowCount ())); RKSettingsModulePlugins::PluginMapStoredInfo inf = plugin_maps[rowa]; plugin_maps[rowa] = plugin_maps[rowb]; plugin_maps[rowb] = inf; } bool RKSettingsModulePluginsModel::removeRows (int row, int count, const QModelIndex& parent) { RK_TRACE (SETTINGS); RK_ASSERT (!parent.isValid ()); if ((row < 0) || (count < 1) || (row + count > rowCount ())) return false; for (int i = row + count - 1; i >= row; --i) { plugin_maps.removeAt (i); } return true; } const RKSettingsModulePluginsModel::PluginMapMetaInfo& RKSettingsModulePluginsModel::getPluginMapMetaInfo (const QString& pluginmapfile) { RK_TRACE (SETTINGS); if (!plugin_map_dynamic_info.contains (pluginmapfile)) { // TODO PluginMapMetaInfo inf; XMLHelper *xml = XMLHelper::getStaticHelper (); QDomElement doc_elem = xml->openXMLFile (pluginmapfile, DL_WARNING); inf.about = new RKComponentAboutData (xml->getChildElement (doc_elem, "about", DL_INFO)); inf.dependencies = RKComponentDependency::parseDependencies (xml->getChildElement (doc_elem, "dependencies", DL_INFO)); plugin_map_dynamic_info.insert (pluginmapfile, inf); } return (plugin_map_dynamic_info[pluginmapfile]); } #include "rksettingsmoduleplugins.moc" rkward-0.6.1/rkward/settings/rksettingsmodulecommandeditor.h0000644000175000017500000000605212124345411024034 0ustar thomasthomas/*************************************************************************** rksettingsmodulecommandeditor - description ------------------- begin : Tue Oct 23 2007 copyright : (C) 2007, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULECOMMANDEDITOR_H #define RKSETTINGSMODULECOMMANDEDITOR_H #include "rksettingsmodule.h" class RKSpinBox; class QCheckBox; class QLineEdit; class QGroupBox; /** configuration for the Command Editor windows @author Thomas Friedrichsmeier */ class RKSettingsModuleCommandEditor : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleCommandEditor (RKSettings *gui, QWidget *parent); ~RKSettingsModuleCommandEditor (); void applyChanges (); void save (KConfig *config); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); /// min number of character to try code completion static int completionMinChars () { return completion_min_chars; }; static int completionTimeout () { return completion_timeout; }; static bool completionEnabled () { return completion_enabled; }; static bool argHintingEnabled () { return arghinting_enabled; }; static bool autosaveEnabled () { return autosave_enabled; }; static bool autosaveKeep () { return autosave_keep; }; static int autosaveInterval () { return autosave_interval; }; static QString autosaveSuffix () { return ".rkward_autosave"; }; static int maxNumRecentFiles () { return num_recent_files; }; static QString scriptFileFilter () { return script_file_filter; }; static bool matchesScriptFileFilter (const QString &filename); public slots: void settingChanged (); private: static int completion_min_chars; static int completion_timeout; static bool completion_enabled; static bool arghinting_enabled; RKSpinBox* completion_min_chars_box; RKSpinBox* completion_timeout_box; QCheckBox* completion_enabled_box; QCheckBox* arghinting_enabled_box; static bool autosave_enabled; static bool autosave_keep; static int autosave_interval; QGroupBox* autosave_enabled_box; QCheckBox* autosave_keep_box; RKSpinBox* autosave_interval_box; RKSpinBox* num_recent_files_box; QLineEdit* script_file_filter_box; static int num_recent_files; static QString script_file_filter; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduleobjectbrowser.h0000644000175000017500000000520112124345411024054 0ustar thomasthomas/*************************************************************************** rksettingsmodule - description ------------------- begin : Fri Apr 22 2005 copyright : (C) 2005 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEOBJECTBROWSER_H #define RKSETTINGSMODULEOBJECTBROWSER_H #include "rksettingsmodule.h" #include "../misc/rkobjectlistview.h" class QCheckBox; class MultiStringSelector; /** Configuration module for instances of RObjectListView @see RKSettingsModule @author Thomas Friedrichsmeier */ class RKSettingsModuleObjectBrowser : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleObjectBrowser (RKSettings *gui, QWidget *parent); ~RKSettingsModuleObjectBrowser (); /** applies current settings in this RKSettingsModule. This will only be called, if hasChanges () is true */ void applyChanges (); /** saves current changes to the given KConfig @param config probably always RKGlobals::rkApp ()->config. But passing this as an argument is both more flexible and saves #including files.*/ void save (KConfig *config); /** @returns the caption ("Workspace Browser") */ QString caption (); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); static bool isSettingActive (RKObjectListViewSettings::Settings setting); static bool isPackageBlacklisted (const QString &package_name); QString helpURL () { return ("rkward://page/rkward_workspace_browser#settings"); }; public slots: /** called when a checkbox has been changed. Signals change to RKSettings dialog to enable apply button */ void boxChanged (int); void listChanged (); void addBlackList (QStringList *string_list); private: MultiStringSelector *blacklist_choser; static QStringList getstructure_blacklist; QCheckBox **checkboxes; static bool settings[RKObjectListViewSettings::SettingsCount]; }; #endif rkward-0.6.1/rkward/settings/rksettingsmodule.h0000644000175000017500000000414012124345411021262 0ustar thomasthomas/*************************************************************************** rksettingsmodule - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004, 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULE_H #define RKSETTINGSMODULE_H #include #include class KConfig; class RKSettings; class RCommandChain; /** Base class for settings modules. Provides some pure virtual calls. @author Thomas Friedrichsmeier */ class RKSettingsModule : public QWidget { public: RKSettingsModule (RKSettings *gui, QWidget *parent); virtual ~RKSettingsModule (); bool hasChanges () { return changed; }; virtual void applyChanges () = 0; virtual void save (KConfig *config) = 0; virtual QString caption () = 0; /** Some settings modules execute R commands on "apply". If an RCommandChain is specified for the RKSettings-dialog, those commands should be inserted into this chain. It's safe to use this unconditionally, as if there is no chain, this will return 0, which corresponds to using the top-level chain */ RCommandChain *commandChain () { return chain; }; virtual QString helpURL () { return QString (); }; protected: void change (); bool changed; private: RKSettings *gui; friend class RKSettings; static RCommandChain *chain; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduledebug.cpp0000644000175000017500000001247012124345411022631 0ustar thomasthomas/*************************************************************************** rksettingsmoduledebug description ------------------- begin : Tue Oct 23 2007 copyright : (C) 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmoduledebug.h" #include #include #include #include #include #include #include #include #include #include #include "../misc/rkspinbox.h" #include "../rkglobals.h" #include "../debug.h" QTemporaryFile* RKSettingsModuleDebug::debug_file = 0; RKSettingsModuleDebug::RKSettingsModuleDebug (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout* main_vbox = new QVBoxLayout (this); QLabel* label = new QLabel (i18n ("These settings are for debugging purposes, only. It is safe to leave them untouched. Also, these settings will only apply to the current session, and will not be saved."), this); label->setWordWrap (true); main_vbox->addWidget (label); main_vbox->addSpacing (2 * RKGlobals::spacingHint ()); label = new QLabel (i18n ("Debug level"), this); debug_level_box = new RKSpinBox (this); debug_level_box->setIntMode (DL_TRACE, DL_FATAL, DL_FATAL - RK_Debug_Level); connect (debug_level_box, SIGNAL (valueChanged(int)), this, SLOT (settingChanged(int))); main_vbox->addWidget (label); main_vbox->addWidget (debug_level_box); debug_flags_group = new QButtonGroup (this); debug_flags_group->setExclusive (false); QGroupBox* group = new QGroupBox (i18n ("Debug flags"), this); QVBoxLayout* box_layout = new QVBoxLayout (group); debug_flags_group->addButton (new QCheckBox ("APP", group), APP); debug_flags_group->addButton (new QCheckBox ("PLUGIN", group), PLUGIN); debug_flags_group->addButton (new QCheckBox ("OBJECTS", group), OBJECTS); debug_flags_group->addButton (new QCheckBox ("EDITOR", group), EDITOR); debug_flags_group->addButton (new QCheckBox ("SETTINGS", group), SETTINGS); debug_flags_group->addButton (new QCheckBox ("PHP", group), PHP); debug_flags_group->addButton (new QCheckBox ("RBACKEND", group), RBACKEND); debug_flags_group->addButton (new QCheckBox ("COMMANDEDITOR", group), COMMANDEDITOR); debug_flags_group->addButton (new QCheckBox ("MISC", group), MISC); debug_flags_group->addButton (new QCheckBox ("DIALOGS", group), DIALOGS); debug_flags_group->addButton (new QCheckBox ("OUTPUT", group), OUTPUT); debug_flags_group->addButton (new QCheckBox ("XML", group), XML); QList buttons = debug_flags_group->buttons (); for (QList::const_iterator it = buttons.constBegin (); it != buttons.constEnd (); ++it) { box_layout->addWidget (*it); (*it)->setChecked (RK_Debug_Flags & debug_flags_group->id (*it)); } connect (debug_flags_group, SIGNAL (buttonClicked(int)), this, SLOT (settingChanged(int))); main_vbox->addWidget (group); label = new QLabel (i18n ("Command timeout"), this); command_timeout_box = new RKSpinBox (this); command_timeout_box->setIntMode (0, 10000, RK_Debug_CommandStep); connect (command_timeout_box, SIGNAL (valueChanged(int)), this, SLOT (settingChanged(int))); main_vbox->addWidget (label); main_vbox->addWidget (command_timeout_box); main_vbox->addStretch (); if (debug_file) { label = new QLabel (i18n ("Note: Debug output is written to %1", debug_file->fileName ())); main_vbox->addWidget (label); main_vbox->addStretch (); } } RKSettingsModuleDebug::~RKSettingsModuleDebug () { RK_TRACE (SETTINGS); } void RKSettingsModuleDebug::settingChanged (int) { RK_TRACE (SETTINGS); change (); } QString RKSettingsModuleDebug::caption () { RK_TRACE (SETTINGS); return (i18n ("Debug")); } void RKSettingsModuleDebug::applyChanges () { RK_TRACE (SETTINGS); RK_Debug_Level = DL_FATAL - debug_level_box->intValue (); RK_Debug_CommandStep = command_timeout_box->intValue (); int flags = 0; QList buttons = debug_flags_group->buttons (); for (QList::const_iterator it = buttons.constBegin (); it != buttons.constEnd (); ++it) { if ((*it)->isChecked ()) flags |= debug_flags_group->id (*it); } RK_Debug_Flags = flags; } void RKSettingsModuleDebug::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleDebug::saveSettings (KConfig *) { RK_TRACE (SETTINGS); // left empty on purpose } void RKSettingsModuleDebug::loadSettings (KConfig *) { RK_TRACE (SETTINGS); // left empty on purpose } #include "rksettingsmoduledebug.moc" rkward-0.6.1/rkward/settings/rksettingsmodulegeneral.h0000644000175000017500000001274412124345411022631 0ustar thomasthomas/*************************************************************************** rksettingsmodulegeneral - description ------------------- begin : Fri Jul 30 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEGENERALFILES_H #define RKSETTINGSMODULEGENERALFILES_H #include "rksettingsmodule.h" #include "../dialogs/startupdialog.h" class GetFileNameWidget; class QComboBox; class QCheckBox; class QButtonGroup; class RKSpinBox; /** @author Thomas Friedrichsmeier */ class RKSettingsModuleGeneral : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleGeneral (RKSettings *gui, QWidget *parent); ~RKSettingsModuleGeneral (); enum WorkplaceSaveMode { // don't change the int values of this enum, or you'll ruin users saved settings. Append new values at the end SaveWorkplaceWithWorkspace=0, SaveWorkplaceWithSession=1, DontSaveWorkplace=2 }; enum InitialDirectory { // don't change the int values of this enum, or you'll ruin users saved settings. Append new values at the end CurrentDirectory=0, RKWardDirectory=1, UserHomeDirectory=2, LastUsedDirectory=3, CustomDirectory=4 }; enum RKMDIFocusPolicy { // don't change the int values of this enum, or you'll ruin users saved settings. Append new values at the end RKMDIClickFocus=0, RKMDIFocusFollowsMouse=1 }; void applyChanges (); void save (KConfig *config); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); /// returns the directory-name where the logfiles should reside static QString &filesPath () { return files_path; }; static StartupDialog::Result startupAction () { return startup_action; }; static bool showHelpOnStartup () { return show_help_on_startup; }; static void setStartupAction (StartupDialog::Result action) { startup_action = action; }; static WorkplaceSaveMode workplaceSaveMode () { return workplace_save_mode; }; /** retrieve the saved workplace description. Meaningful only is workplaceSaveMode () == SaveWorkplaceWithSession */ static QString getSavedWorkplace (KConfig *config); /** set the saved workplace description. Meaningful only is workplaceSaveMode () == SaveWorkplaceWithSession */ static void setSavedWorkplace (const QString &description, KConfig *config); static bool cdToWorkspaceOnLoad () { return cd_to_workspace_dir_on_load; }; static unsigned long warnLargeObjectThreshold () { return warn_size_object_edit; }; static RKMDIFocusPolicy mdiFocusPolicy () { return mdi_focus_policy; } static QString workspaceFilenameFilter () { return ("*.RData *.RDA"); }; static QString initialWorkingDirectory (); enum RKWardConfigVersion { RKWardConfig_Pre0_5_7, RKWardConfig_0_5_7, RKWardConfig_0_6_1, RKWardConfig_Next, /**< add new configuration versions above / before this entry */ RKWardConfig_Latest = RKWardConfig_Next - 1 }; /** Which version did an existing config file appear to have? * @return RKWardConfig_Pre0_5_7, if no config file could be read. See anyExistingConfig() * @note Not all versions of RKWard have a config file version of their own, not even necessarily when new entries were added. Only when not-quite-compatible changes are needed, new config versions will be added. */ static RKWardConfigVersion storedConfigVersion () { return stored_config_version; }; /** Did a config file already exist? */ static bool anyExistingConfig () { return config_exists; }; /** Returns true, if the runtime version of RKWard has changed since the previous session. */ static bool rkwardVersionChanged () { return rkward_version_changed; }; public slots: void settingChanged (); private: GetFileNameWidget *files_choser; QComboBox *startup_action_choser; QButtonGroup *workplace_save_chooser; QCheckBox *cd_to_workspace_dir_on_load_box; QCheckBox *show_help_on_startup_box; RKSpinBox *warn_size_object_edit_box; QComboBox *mdi_focus_policy_chooser; QComboBox *initial_dir_chooser; GetFileNameWidget *initial_dir_custom_chooser; static StartupDialog::Result startup_action; static QString files_path; /** since changing the files_path can not easily be done while in an active session, the setting should only take effect on the next start. This string stores a changed setting, while keeping the old one intact as long as RKWard is running */ static QString new_files_path; static WorkplaceSaveMode workplace_save_mode; static bool cd_to_workspace_dir_on_load; static bool show_help_on_startup; static int warn_size_object_edit; static RKMDIFocusPolicy mdi_focus_policy; static RKWardConfigVersion stored_config_version; static bool config_exists; static InitialDirectory initial_dir; static QString initial_dir_specification; static bool rkward_version_changed; }; #endif rkward-0.6.1/rkward/settings/rksettingsmodulewatch.cpp0000644000175000017500000002235412124345411022653 0ustar thomasthomas/*************************************************************************** rksettingsmodulewatch - description ------------------- begin : Thu Aug 26 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmodulewatch.h" #include #include #include #include #include #include #include #include #include "../rbackend/rcommand.h" #include "rksettings.h" #include "../rkglobals.h" #include "../debug.h" //static int RKSettingsModuleWatch::plugin_filter; int RKSettingsModuleWatch::app_filter; int RKSettingsModuleWatch::sync_filter; int RKSettingsModuleWatch::user_filter; uint RKSettingsModuleWatch::max_log_lines; //static bool RKSettingsModuleWatch::shouldShowInput (RCommand *command) { RK_TRACE (SETTINGS); if (command->type () & RCommand::EmptyCommand) return false; if (command->type () & RCommand::Sync) { return (sync_filter & ShowInput); } else if (command->type () & RCommand::User) { return (user_filter & ShowInput); } else if (command->type () & RCommand::Plugin) { return (plugin_filter & ShowInput); } else if (command->type () & RCommand::App) { return (app_filter & ShowInput); } RK_ASSERT (false); return true; } //static bool RKSettingsModuleWatch::shouldShowOutput (RCommand *command) { RK_TRACE (SETTINGS); if (command->type () & RCommand::EmptyCommand) return false; if (!shouldShowInput (command)) return false; if (command->type () & RCommand::Sync) { return (sync_filter & ShowOutput); } else if (command->type () & RCommand::User) { return (user_filter & ShowOutput); } else if (command->type () & RCommand::Plugin) { return (plugin_filter & ShowOutput); } else if (command->type () & RCommand::App) { return (app_filter & ShowOutput); } RK_ASSERT (false); return true; } //static bool RKSettingsModuleWatch::shouldShowError (RCommand *command) { RK_TRACE (SETTINGS); if (command->type () & RCommand::Sync) { return (sync_filter & ShowError); } else if (command->type () & RCommand::User) { return (user_filter & ShowError); } else if (command->type () & RCommand::Plugin) { return (plugin_filter & ShowError); } else if (command->type () & RCommand::App) { return (app_filter & ShowError); } RK_ASSERT (false); return true; } bool RKSettingsModuleWatch::shouldRaiseWindow (RCommand *command) { RK_TRACE (SETTINGS); if (command->type () & RCommand::Sync) { return (sync_filter & RaiseWindow); } else if (command->type () & RCommand::User) { return (user_filter & RaiseWindow); } else if (command->type () & RCommand::Plugin) { return (plugin_filter & RaiseWindow); } else if (command->type () & RCommand::App) { return (app_filter & RaiseWindow); } RK_ASSERT (false); return true; } RKSettingsModuleWatch::RKSettingsModuleWatch (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *vbox = new QVBoxLayout (this); QLabel *label = new QLabel (i18n ("For now, settings only apply to new commands. All previous commands remain visible/invisible."), this); label->setWordWrap (true); vbox->addWidget (label); vbox->addSpacing (10); QGridLayout *grid = new QGridLayout (); vbox->addLayout (grid); label = new QLabel (i18n ("always show command"), this); label->setWordWrap (true); grid->addWidget (label, 0, 1); label = new QLabel (i18n ("always show result"), this); label->setWordWrap (true); grid->addWidget (label, 0, 2); label = new QLabel (i18n ("show errors"), this); label->setWordWrap (true); grid->addWidget (label, 0, 3); label = new QLabel (i18n ("show/raise window"), this); label->setWordWrap (true); grid->addWidget (label, 0, 4); user_filter_boxes = addFilterSettings (this, grid, 1, i18n ("User commands"), user_filter); plugin_filter_boxes = addFilterSettings (this, grid, 2, i18n ("Plugin generated commands"), plugin_filter); app_filter_boxes = addFilterSettings (this, grid, 3, i18n ("Application commands"), app_filter); sync_filter_boxes = addFilterSettings (this, grid, 4, i18n ("Synchronization commands"), sync_filter); vbox->addSpacing (2*RKGlobals::spacingHint ()); vbox->addWidget (new QLabel (i18n ("Maximum number of paragraphs/lines to display in the Command Log"), this)); max_log_lines_spinner = new KIntSpinBox (0, 10000, 10, max_log_lines, this); max_log_lines_spinner->setSpecialValueText (i18n ("Unlimited")); connect (max_log_lines_spinner, SIGNAL (valueChanged (int)), this, SLOT (changedSetting (int))); vbox->addWidget (max_log_lines_spinner); vbox->addStretch (); validateGUI (); } RKSettingsModuleWatch::~RKSettingsModuleWatch () { RK_TRACE (SETTINGS); delete user_filter_boxes; delete plugin_filter_boxes; delete app_filter_boxes; delete sync_filter_boxes; } int RKSettingsModuleWatch::getFilterSettings (FilterBoxes *boxes) { RK_TRACE (SETTINGS); int ret=0; if (boxes->input->isChecked ()) ret |= ShowInput; if (boxes->output->isChecked ()) ret |= ShowOutput; if (boxes->error->isChecked ()) ret |= ShowError; if (boxes->raise->isChecked ()) ret |= RaiseWindow; return ret; } RKSettingsModuleWatch::FilterBoxes *RKSettingsModuleWatch::addFilterSettings (QWidget *parent, QGridLayout *layout, int row, const QString &label, int state) { RK_TRACE (SETTINGS); FilterBoxes *filter_boxes = new FilterBoxes; layout->addWidget (new QLabel (label, parent), row, 0); filter_boxes->input = new QCheckBox (parent); filter_boxes->input->setChecked (state & ShowInput); connect (filter_boxes->input, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); layout->addWidget (filter_boxes->input, row, 1); filter_boxes->output = new QCheckBox (parent); filter_boxes->output->setChecked (state & ShowOutput); connect (filter_boxes->output, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); layout->addWidget (filter_boxes->output, row, 2); filter_boxes->error = new QCheckBox (parent); filter_boxes->error->setChecked (state & ShowError); connect (filter_boxes->error, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); layout->addWidget (filter_boxes->error, row, 3); filter_boxes->raise = new QCheckBox (parent); filter_boxes->raise->setChecked (state & RaiseWindow); connect (filter_boxes->raise, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); layout->addWidget (filter_boxes->raise, row, 4); return filter_boxes; } void RKSettingsModuleWatch::changedSetting (int) { RK_TRACE (SETTINGS); validateGUI (); change (); } void RKSettingsModuleWatch::validateGUI () { RK_TRACE (SETTINGS); user_filter_boxes->output->setEnabled (user_filter_boxes->input->isChecked ()); plugin_filter_boxes->output->setEnabled (plugin_filter_boxes->input->isChecked ()); app_filter_boxes->output->setEnabled (app_filter_boxes->input->isChecked ()); sync_filter_boxes->output->setEnabled (sync_filter_boxes->input->isChecked ()); } //static void RKSettingsModuleWatch::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("RInterface Watch Settings"); cg.writeEntry ("user command filter", user_filter); cg.writeEntry ("plugin command filter", plugin_filter); cg.writeEntry ("app command filter", app_filter); cg.writeEntry ("sync command filter", sync_filter); cg.writeEntry ("max log lines", max_log_lines); } //static void RKSettingsModuleWatch::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("RInterface Watch Settings"); user_filter = cg.readEntry ("user command filter", static_cast (ShowInput | ShowOutput | ShowError | RaiseWindow)); plugin_filter = cg.readEntry ("plugin command filter", static_cast (ShowInput | ShowError)); app_filter = cg.readEntry ("app command filter", static_cast (ShowInput | ShowError)); sync_filter = cg.readEntry ("sync command filter", static_cast (ShowError)); max_log_lines = cg.readEntry ("max log lines", 1000); } void RKSettingsModuleWatch::applyChanges () { RK_TRACE (SETTINGS); user_filter = getFilterSettings (user_filter_boxes); plugin_filter = getFilterSettings (plugin_filter_boxes); app_filter = getFilterSettings (app_filter_boxes); sync_filter = getFilterSettings (sync_filter_boxes); max_log_lines = max_log_lines_spinner->value (); } void RKSettingsModuleWatch::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } QString RKSettingsModuleWatch::caption () { RK_TRACE (SETTINGS); return (i18n ("Command log")); } #include "rksettingsmodulewatch.moc" rkward-0.6.1/rkward/settings/rksettingsmodulegeneral.cpp0000644000175000017500000003303012124345411023153 0ustar thomasthomas/*************************************************************************** rksettingsmodulegeneral - description ------------------- begin : Fri Jul 30 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmodulegeneral.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../misc/getfilenamewidget.h" #include "../misc/rkspinbox.h" #include "../misc/rkcommonfunctions.h" #include "../rkglobals.h" #include "../version.h" #include "../debug.h" // static members QString RKSettingsModuleGeneral::files_path; QString RKSettingsModuleGeneral::new_files_path; StartupDialog::Result RKSettingsModuleGeneral::startup_action; RKSettingsModuleGeneral::WorkplaceSaveMode RKSettingsModuleGeneral::workplace_save_mode; bool RKSettingsModuleGeneral::cd_to_workspace_dir_on_load; bool RKSettingsModuleGeneral::show_help_on_startup; int RKSettingsModuleGeneral::warn_size_object_edit; RKSettingsModuleGeneral::RKMDIFocusPolicy RKSettingsModuleGeneral::mdi_focus_policy; RKSettingsModuleGeneral::RKWardConfigVersion RKSettingsModuleGeneral::stored_config_version; bool RKSettingsModuleGeneral::config_exists; RKSettingsModuleGeneral::InitialDirectory RKSettingsModuleGeneral::initial_dir; QString RKSettingsModuleGeneral::initial_dir_specification; bool RKSettingsModuleGeneral::rkward_version_changed; RKSettingsModuleGeneral::RKSettingsModuleGeneral (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); QLabel *label = new QLabel (i18n ("Settings marked with (*) do not take effect until you restart RKWard"), this); label->setWordWrap (true); main_vbox->addWidget (label); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); files_choser = new GetFileNameWidget (this, GetFileNameWidget::ExistingDirectory, true, i18n ("Directory where rkward may store files (*)"), QString::null, new_files_path); connect (files_choser, SIGNAL (locationChanged ()), this, SLOT (settingChanged ())); main_vbox->addWidget (files_choser); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); main_vbox->addWidget (new QLabel (i18n ("Startup Action (*)"), this)); startup_action_choser = new QComboBox (this); startup_action_choser->setEditable (false); startup_action_choser->addItem (i18n ("Start with an empty workspace"), (int) StartupDialog::EmptyWorkspace); startup_action_choser->addItem (i18n ("Load .RData-file from current directory, if available (R option '--restore')"), (int) StartupDialog::RestoreFromWD); startup_action_choser->addItem (i18n ("Start with an empty table"), (int) StartupDialog::EmptyTable); startup_action_choser->addItem (i18n ("Ask for a file to open"), (int) StartupDialog::ChoseFile); startup_action_choser->addItem (i18n ("Show selection dialog (default)"), (int) StartupDialog::NoSavedSetting); startup_action_choser->setCurrentIndex (startup_action_choser->findData (startup_action)); connect (startup_action_choser, SIGNAL (activated (int)), this, SLOT (settingChanged())); main_vbox->addWidget (startup_action_choser); show_help_on_startup_box = new QCheckBox (i18n ("Show RKWard Help on Startup"), this); show_help_on_startup_box->setChecked (show_help_on_startup); connect (show_help_on_startup_box, SIGNAL (stateChanged (int)), this, SLOT (settingChanged())); main_vbox->addWidget (show_help_on_startup_box); QGroupBox* group_box = new QGroupBox (i18n ("Intial working directory (*)"), this); QHBoxLayout *hlayout = new QHBoxLayout (group_box); initial_dir_chooser = new QComboBox (group_box); initial_dir_chooser->setEditable (false); initial_dir_chooser->addItem (i18n ("Do not change current directory on startup"), (int) CurrentDirectory); initial_dir_chooser->addItem (i18n ("RKWard files directory (as specified, above)"), (int) RKWardDirectory); initial_dir_chooser->addItem (i18n ("User home directory"), (int) UserHomeDirectory); initial_dir_chooser->addItem (i18n ("Last used directory"), (int) LastUsedDirectory); initial_dir_chooser->addItem (i18n ("The following directory (please specify):"), (int) CustomDirectory); initial_dir_chooser->setCurrentIndex (initial_dir_chooser->findData ((int) initial_dir)); connect (initial_dir_chooser, SIGNAL (activated(int)), this, SLOT (settingChanged())); hlayout->addWidget (initial_dir_chooser); initial_dir_custom_chooser = new GetFileNameWidget (group_box, GetFileNameWidget::ExistingDirectory, true, QString(), i18n ("Initial working directory"), initial_dir_specification); initial_dir_custom_chooser->setEnabled (initial_dir == CustomDirectory); connect (initial_dir_custom_chooser, SIGNAL (locationChanged()), this, SLOT (settingChanged())); hlayout->addWidget (initial_dir_custom_chooser); RKCommonFunctions::setTips (i18n ("

    The initial working directory to use. Note that if you are loading a workspace on startup, and you have configured RKWard to change to the directory of loaded workspaces, that directory will take precedence.

    "), group_box, initial_dir_chooser, initial_dir_custom_chooser); main_vbox->addWidget (group_box); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); label = new QLabel (i18n ("The workplace layout (i.e. which script-, data-, help-windows are open) may be saved (and loaded) per R workspace, or independent of the R workspace. Which do you prefer?"), this); label->setWordWrap (true); main_vbox->addWidget (label); workplace_save_chooser = new QButtonGroup (this); group_box = new QGroupBox (this); QVBoxLayout *group_layout = new QVBoxLayout(group_box); QAbstractButton* button; button = new QRadioButton (i18n ("Save/restore with R workspace, when saving/loading R workspace"), group_box); group_layout->addWidget (button); workplace_save_chooser->addButton (button, SaveWorkplaceWithWorkspace); button = new QRadioButton (i18n ("Save/restore independent of R workspace (save at end of RKWard session, restore at next start)"), group_box); group_layout->addWidget (button); workplace_save_chooser->addButton (button, SaveWorkplaceWithSession); button = new QRadioButton (i18n ("Do not save/restore workplace layout"), group_box); group_layout->addWidget (button); workplace_save_chooser->addButton (button, DontSaveWorkplace); if ((button = workplace_save_chooser->button (workplace_save_mode))) button->setChecked (true); connect (workplace_save_chooser, SIGNAL (buttonClicked (int)), this, SLOT (settingChanged())); main_vbox->addWidget (group_box); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); cd_to_workspace_dir_on_load_box = new QCheckBox (i18n ("When loading a workspace, change to the corresponding directory."), this); cd_to_workspace_dir_on_load_box->setChecked (cd_to_workspace_dir_on_load); connect (cd_to_workspace_dir_on_load_box, SIGNAL (stateChanged (int)), this, SLOT (settingChanged())); main_vbox->addWidget (cd_to_workspace_dir_on_load_box); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); label = new QLabel (i18n ("Warn when editing objects with more than this number of fields (0 for no limit):"), this); warn_size_object_edit_box = new RKSpinBox (this); warn_size_object_edit_box->setIntMode (0, INT_MAX, warn_size_object_edit); warn_size_object_edit_box->setSpecialValueText (i18n ("No limit")); connect (warn_size_object_edit_box, SIGNAL (valueChanged (int)), this, SLOT (settingChanged())); main_vbox->addWidget (label); main_vbox->addWidget (warn_size_object_edit_box); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); label = new QLabel (i18n ("MDI window focus behavior"), this); mdi_focus_policy_chooser = new QComboBox (this); mdi_focus_policy_chooser->setEditable (false); mdi_focus_policy_chooser->insertItem (RKMDIClickFocus, i18n ("Click to focus")); mdi_focus_policy_chooser->insertItem (RKMDIFocusFollowsMouse, i18n ("Focus follows mouse")); mdi_focus_policy_chooser->setCurrentIndex (mdi_focus_policy); connect (mdi_focus_policy_chooser, SIGNAL (activated (int)), this, SLOT (settingChanged())); main_vbox->addWidget (label); main_vbox->addWidget (mdi_focus_policy_chooser); main_vbox->addStretch (); } RKSettingsModuleGeneral::~RKSettingsModuleGeneral() { RK_TRACE (SETTINGS); } QString RKSettingsModuleGeneral::initialWorkingDirectory () { if (initial_dir == CurrentDirectory) return QString (); if (initial_dir == RKWardDirectory) return filesPath (); if (initial_dir == UserHomeDirectory) return QDir::homePath (); return initial_dir_specification; } void RKSettingsModuleGeneral::settingChanged () { RK_TRACE (SETTINGS); int dummy = initial_dir_chooser->itemData (initial_dir_chooser->currentIndex ()).toInt (); initial_dir_custom_chooser->setEnabled (dummy == CustomDirectory); change (); } QString RKSettingsModuleGeneral::caption () { RK_TRACE (SETTINGS); return (i18n ("General")); } void RKSettingsModuleGeneral::applyChanges () { RK_TRACE (SETTINGS); new_files_path = files_choser->getLocation (); startup_action = static_cast (startup_action_choser->itemData (startup_action_choser->currentIndex ()).toInt ()); show_help_on_startup = show_help_on_startup_box->isChecked (); workplace_save_mode = static_cast (workplace_save_chooser->checkedId ()); cd_to_workspace_dir_on_load = cd_to_workspace_dir_on_load_box->isChecked (); warn_size_object_edit = warn_size_object_edit_box->intValue (); mdi_focus_policy = static_cast (mdi_focus_policy_chooser->currentIndex ()); initial_dir = static_cast (initial_dir_chooser->itemData (initial_dir_chooser->currentIndex ()).toInt ()); initial_dir_specification = initial_dir_custom_chooser->getLocation (); } void RKSettingsModuleGeneral::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleGeneral::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg; cg = config->group ("Logfiles"); cg.writeEntry ("logfile dir", new_files_path); cg = config->group ("General"); cg.writeEntry ("startup action", (int) startup_action); cg.writeEntry ("show help on startup", show_help_on_startup); cg.writeEntry ("initial dir mode", (int) initial_dir); cg.writeEntry ("initial dir spec", (initial_dir == LastUsedDirectory) ? QDir::currentPath() : initial_dir_specification); cg = config->group ("Workplace"); cg.writeEntry ("save mode", (int) workplace_save_mode); cg.writeEntry ("cd to workspace on load", cd_to_workspace_dir_on_load); cg = config->group ("Editor"); cg.writeEntry ("large object warning limit", warn_size_object_edit); cg = config->group ("MDI"); cg.writeEntry ("focus policy", (int) mdi_focus_policy); cg = config->group ("Internal"); cg.writeEntry ("config file version", (int) RKWardConfig_Latest); cg.writeEntry ("previous runtime version", QString (RKWARD_VERSION)); } void RKSettingsModuleGeneral::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); config_exists = config->hasGroup ("General"); // one of the very oldest groups in the config KConfigGroup cg; cg = config->group ("Logfiles"); files_path = new_files_path = cg.readEntry ("logfile dir", QDir ().homePath () + "/.rkward/"); cg = config->group ("General"); startup_action = (StartupDialog::Result) cg.readEntry ("startup action", (int) StartupDialog::NoSavedSetting); show_help_on_startup = cg.readEntry ("show help on startup", true); initial_dir = (InitialDirectory) cg.readEntry ("initial dir mode", #ifndef Q_WS_WIN (int) CurrentDirectory #else (int) RKWardDirectory #endif ); initial_dir_specification = cg.readEntry ("initial dir spec", QString ()); cg = config->group ("Workplace"); workplace_save_mode = (WorkplaceSaveMode) cg.readEntry ("save mode", (int) SaveWorkplaceWithWorkspace); cd_to_workspace_dir_on_load = cg.readEntry ("cd to workspace on load", true); cg = config->group ("Editor"); warn_size_object_edit = cg.readEntry ("large object warning limit", 250000); cg = config->group ("MDI"); mdi_focus_policy = (RKMDIFocusPolicy) cg.readEntry ("focus policy", (int) RKMDIClickFocus); cg = config->group ("Internal"); stored_config_version = (RKWardConfigVersion) cg.readEntry ("config file version", (int) RKWardConfig_Pre0_5_7); rkward_version_changed = (cg.readEntry ("previous runtime version", QString ()) != RKWARD_VERSION); } QString RKSettingsModuleGeneral::getSavedWorkplace (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Workplace"); return (cg.readEntry ("last saved layout", QString ())); } void RKSettingsModuleGeneral::setSavedWorkplace (const QString &description, KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Workplace"); cg.writeEntry ("last saved layout", description); } #include "rksettingsmodulegeneral.moc" rkward-0.6.1/rkward/settings/rksettingsmoduleoutput.h0000644000175000017500000000677312124345411022561 0ustar thomasthomas/*************************************************************************** rksettingsmoduleoutput - description ------------------- begin : Fri Jul 30 2004 copyright : (C) 2004, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEOUTPUT_H #define RKSETTINGSMODULEOUTPUT_H #include "rksettingsmodule.h" #include class QCheckBox; class QGroupBox; class QComboBox; class KIntSpinBox; class RCommand; /** Allows to configure which types of commands should be "carbon copied" to the output window. Like the RKSettingsModules classes, this class encapsulates both, the setting itself, and a widget to configure the settings. @author Thomas Friedrichsmeier */ class RKCarbonCopySettings : public QWidget { Q_OBJECT public: RKCarbonCopySettings (QWidget* parent); ~RKCarbonCopySettings (); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); static bool shouldCarbonCopyCommand (const RCommand *command); static bool includeOutputInCarbonCopy () { return (cc_globally_enabled && cc_command_output); }; public slots: void applyChanges (); signals: void changed (); private slots: void settingChanged (); private: // There can be multiple instances of this widget, which need to be kept in sync. static QList instances; void update (); QGroupBox *cc_globally_enabled_box; QCheckBox *cc_console_commands_box; QCheckBox *cc_script_commands_box; QCheckBox *cc_app_plugin_commands_box; QCheckBox *cc_command_output_box; static bool cc_globally_enabled; static bool cc_console_commands; static bool cc_script_commands; static bool cc_app_plugin_commands; static bool cc_command_output; }; /** @author Thomas Friedrichsmeier */ class RKSettingsModuleOutput : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleOutput (RKSettings *gui, QWidget *parent); ~RKSettingsModuleOutput (); void applyChanges (); void save (KConfig *config); /** generate the commands needed to set the R run time options */ static QStringList makeRRunTimeOptionCommands (); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); static bool autoShow () { return auto_show; }; static bool autoRaise () { return auto_raise; }; public slots: void boxChanged (); private: QCheckBox *auto_show_box; QCheckBox *auto_raise_box; QComboBox *graphics_type_box; KIntSpinBox *graphics_width_box; KIntSpinBox *graphics_height_box; KIntSpinBox *graphics_jpg_quality_box; RKCarbonCopySettings *cc_settings; static bool auto_show; static bool auto_raise; static QString graphics_type; static int graphics_width; static int graphics_height; static int graphics_jpg_quality; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduleoutput.cpp0000644000175000017500000002674012124345411023110 0ustar thomasthomas/*************************************************************************** rksettingsmoduleoutput - description ------------------- begin : Fri Jul 30 2004 copyright : (C) 2004, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmoduleoutput.h" #include #include #include #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "../debug.h" // static members bool RKCarbonCopySettings::cc_globally_enabled; bool RKCarbonCopySettings::cc_console_commands; bool RKCarbonCopySettings::cc_script_commands; bool RKCarbonCopySettings::cc_app_plugin_commands; bool RKCarbonCopySettings::cc_command_output; QList RKCarbonCopySettings::instances; RKCarbonCopySettings::RKCarbonCopySettings (QWidget* parent) : QWidget (parent) { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); cc_globally_enabled_box = new QGroupBox (i18n ("Carbon copy commands to output"), this); cc_globally_enabled_box->setCheckable (true); connect (cc_globally_enabled_box, SIGNAL (clicked(bool)), this, SLOT (settingChanged())); main_vbox->addWidget (cc_globally_enabled_box); QVBoxLayout *group_layout = new QVBoxLayout (cc_globally_enabled_box); cc_console_commands_box = new QCheckBox (i18n ("Commands entered in the console"), cc_globally_enabled_box); connect (cc_console_commands_box, SIGNAL (clicked(bool)), this, SLOT (settingChanged())); group_layout->addWidget (cc_console_commands_box); cc_script_commands_box = new QCheckBox (i18n ("Commands run via the 'Run' menu"), cc_globally_enabled_box); connect (cc_script_commands_box, SIGNAL (clicked(bool)), this, SLOT (settingChanged())); group_layout->addWidget (cc_script_commands_box); cc_app_plugin_commands_box = new QCheckBox (i18n ("Commands originating from dialogs and plugins"), cc_globally_enabled_box); connect (cc_app_plugin_commands_box, SIGNAL (clicked(bool)), this, SLOT (settingChanged())); group_layout->addWidget (cc_app_plugin_commands_box); cc_command_output_box = new QCheckBox (i18n ("Also carbon copy the command output"), cc_globally_enabled_box); connect (cc_command_output_box, SIGNAL (clicked(bool)), this, SLOT (settingChanged())); group_layout->addWidget (cc_command_output_box); update (); instances.append (this); } RKCarbonCopySettings::~RKCarbonCopySettings () { RK_TRACE (SETTINGS); instances.removeAll (this); } void RKCarbonCopySettings::update() { RK_TRACE (SETTINGS); cc_globally_enabled_box->setChecked (cc_globally_enabled); cc_console_commands_box->setChecked (cc_console_commands); cc_script_commands_box->setChecked (cc_script_commands); cc_app_plugin_commands_box->setChecked (cc_app_plugin_commands); cc_command_output_box->setChecked (cc_command_output); } void RKCarbonCopySettings::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Carbon Copy Settings"); cg.writeEntry ("CC enabled", cc_globally_enabled); cg.writeEntry ("CC console commands", cc_console_commands); cg.writeEntry ("CC script commands", cc_script_commands); cg.writeEntry ("CC app/plugin commands", cc_app_plugin_commands); cg.writeEntry ("CC command output", cc_command_output); } void RKCarbonCopySettings::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Carbon Copy Settings"); cc_globally_enabled = cg.readEntry ("CC enabled", false); cc_console_commands = cg.readEntry ("CC console commands", true); cc_script_commands = cg.readEntry ("CC script commands", false); cc_app_plugin_commands = cg.readEntry ("CC app/plugin commands", false); cc_command_output = cg.readEntry ("CC command output", true); } bool RKCarbonCopySettings::shouldCarbonCopyCommand (const RCommand *command) { RK_TRACE (SETTINGS); if (!cc_globally_enabled) return false; if (command->type () & (RCommand::Silent | RCommand::Sync)) return false; if (command->type () & RCommand::Console) return cc_console_commands; if (command->type () & RCommand::User) return cc_script_commands; if (command->type () & (RCommand::App | RCommand::Plugin)) return cc_app_plugin_commands; return false; } void RKCarbonCopySettings::settingChanged () { RK_TRACE (SETTINGS); emit (changed ()); } void RKCarbonCopySettings::applyChanges() { RK_TRACE (SETTINGS); cc_globally_enabled = cc_globally_enabled_box->isChecked (); cc_console_commands = cc_console_commands_box->isChecked (); cc_script_commands = cc_script_commands_box->isChecked (); cc_app_plugin_commands = cc_app_plugin_commands_box->isChecked (); cc_command_output = cc_command_output_box->isChecked (); foreach (RKCarbonCopySettings *sibling, instances) { if (sibling != this) sibling->update (); } } // static members bool RKSettingsModuleOutput::auto_show; bool RKSettingsModuleOutput::auto_raise; QString RKSettingsModuleOutput::graphics_type; int RKSettingsModuleOutput::graphics_width; int RKSettingsModuleOutput::graphics_height; int RKSettingsModuleOutput::graphics_jpg_quality; RKSettingsModuleOutput::RKSettingsModuleOutput (RKSettings *gui, QWidget *parent) : RKSettingsModule(gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); QGroupBox *group = new QGroupBox (i18n ("Output Window options"), this); QVBoxLayout* group_layout = new QVBoxLayout (group); group_layout->addWidget (auto_show_box = new QCheckBox (i18n ("show window on new output"), group)); auto_show_box->setChecked (auto_show); connect (auto_show_box, SIGNAL (stateChanged (int)), this, SLOT (boxChanged())); group_layout->addWidget (auto_raise_box = new QCheckBox (i18n ("raise window on new output"), group)); auto_raise_box->setChecked (auto_raise); auto_raise_box->setEnabled (auto_show); connect (auto_raise_box, SIGNAL (stateChanged (int)), this, SLOT (boxChanged())); main_vbox->addWidget (group); group = new QGroupBox (i18n ("Graphics"), this); group_layout = new QVBoxLayout (group); QHBoxLayout *h_layout = new QHBoxLayout (); group_layout->addLayout (h_layout); h_layout->addWidget (new QLabel (i18n ("File format"), group)); h_layout->addWidget (graphics_type_box = new QComboBox (group)); graphics_type_box->addItem (i18n (""), QString ("NULL")); graphics_type_box->addItem (i18n ("PNG"), QString ("\"PNG\"")); graphics_type_box->addItem (i18n ("SVG"), QString ("\"SVG\"")); graphics_type_box->addItem (i18n ("JPG"), QString ("\"JPG\"")); graphics_type_box->setCurrentIndex (graphics_type_box->findData (graphics_type)); graphics_type_box->setEditable (false); connect (graphics_type_box, SIGNAL (currentIndexChanged (int)), this, SLOT (boxChanged())); h_layout->addSpacing (2*RKGlobals::spacingHint ()); h_layout->addWidget (new QLabel (i18n ("JPG quality"), group)); h_layout->addWidget (graphics_jpg_quality_box = new KIntSpinBox (1, 100, 1, graphics_jpg_quality, group)); graphics_jpg_quality_box->setEnabled (graphics_type == "\"JPG\""); connect (graphics_jpg_quality_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged())); h_layout->addStretch (); h_layout = new QHBoxLayout (); group_layout->addLayout (h_layout); h_layout->addWidget (new QLabel (i18n ("Width:"), group)); h_layout->addWidget (graphics_width_box = new KIntSpinBox (1, INT_MAX, 1, graphics_width, group)); h_layout->addSpacing (2*RKGlobals::spacingHint ()); h_layout->addWidget (new QLabel (i18n ("Height:"), group)); h_layout->addWidget (graphics_height_box = new KIntSpinBox (1, INT_MAX, 1, graphics_height, group)); h_layout->addStretch (); connect (graphics_width_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged())); connect (graphics_height_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged())); main_vbox->addWidget (group); cc_settings = new RKCarbonCopySettings (this); connect (cc_settings, SIGNAL (changed()), this, SLOT (boxChanged())); main_vbox->addWidget (cc_settings); main_vbox->addStretch (); } RKSettingsModuleOutput::~RKSettingsModuleOutput() { RK_TRACE (SETTINGS); } void RKSettingsModuleOutput::boxChanged () { RK_TRACE (SETTINGS); change (); auto_raise_box->setEnabled (auto_show_box->isChecked ()); graphics_jpg_quality_box->setEnabled (graphics_type_box->itemData (graphics_type_box->currentIndex ()).toString () == "\"JPG\""); } QString RKSettingsModuleOutput::caption () { RK_TRACE (SETTINGS); return (i18n ("Output")); } void RKSettingsModuleOutput::applyChanges () { RK_TRACE (SETTINGS); auto_show = auto_show_box->isChecked (); auto_raise = auto_raise_box->isChecked (); graphics_type = graphics_type_box->itemData (graphics_type_box->currentIndex ()).toString (); graphics_width = graphics_width_box->value (); graphics_height = graphics_height_box->value (); graphics_jpg_quality = graphics_jpg_quality_box->value (); QStringList commands = makeRRunTimeOptionCommands (); for (QStringList::const_iterator it = commands.begin (); it != commands.end (); ++it) { RKGlobals::rInterface ()->issueCommand (*it, RCommand::App, QString::null, 0, 0, commandChain ()); } cc_settings->applyChanges (); } void RKSettingsModuleOutput::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleOutput::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Output Window"); cg.writeEntry ("auto_show", auto_show); cg.writeEntry ("auto_raise", auto_raise); cg.writeEntry ("graphics_type", graphics_type); cg.writeEntry ("graphics_width", graphics_width); cg.writeEntry ("graphics_height", graphics_height); cg.writeEntry ("graphics_jpg_quality", graphics_jpg_quality); RKCarbonCopySettings::saveSettings (config); } void RKSettingsModuleOutput::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Output Window"); auto_show = cg.readEntry ("auto_show", true); auto_raise = cg.readEntry ("auto_raise", true); graphics_type = cg.readEntry ("graphics_type", "NULL"); graphics_width = cg.readEntry ("graphics_width", 480); graphics_height = cg.readEntry ("graphics_height", 480); graphics_jpg_quality = cg.readEntry ("graphics_jpg_quality", 75); RKCarbonCopySettings::loadSettings (config); } //static QStringList RKSettingsModuleOutput::makeRRunTimeOptionCommands () { QStringList list; // output format options QString command = "options (\"rk.graphics.type\"=" + graphics_type; command.append (", \"rk.graphics.width\"=" + QString::number (graphics_width)); command.append (", \"rk.graphics.height\"=" + QString::number (graphics_height)); if (graphics_type == "\"JPG\"") command.append (", \"rk.graphics.jpg.quality\"=" + QString::number (graphics_jpg_quality)); list.append (command + ")\n"); return (list); } #include "rksettingsmoduleoutput.moc" rkward-0.6.1/rkward/settings/rksettingsmoduledebug.h0000644000175000017500000000364112124345411022276 0ustar thomasthomas/*************************************************************************** rksettingsmoduledebug - description ------------------- begin : Tue Oct 23 2007 copyright : (C) 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEDEBUG_H #define RKSETTINGSMODULEDEBUG_H #include "rksettingsmodule.h" class RKSpinBox; class QButtonGroup; class QTemporaryFile; /** configuration for the Command Editor windows @author Thomas Friedrichsmeier */ class RKSettingsModuleDebug : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleDebug (RKSettings *gui, QWidget *parent); ~RKSettingsModuleDebug (); void applyChanges (); void save (KConfig *config); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); // static members are declared in debug.h and defined in main.cpp public slots: void settingChanged (int); public: // public for internal reason, only! Do not mess with this! static QTemporaryFile* debug_file; private: RKSpinBox* command_timeout_box; RKSpinBox* debug_level_box; QButtonGroup* debug_flags_group; }; #endif rkward-0.6.1/rkward/settings/rksettingsmodulegraphics.cpp0000644000175000017500000001623412124345411023345 0ustar thomasthomas/*************************************************************************** rksettingsmodulegraphics - description ------------------- begin : Mon Sep 13 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmodulegraphics.h" #include #include #include #include #include #include #include #include #include #include "../rkglobals.h" #include "../rbackend/rinterface.h" #include "../misc/rkspinbox.h" #include "../debug.h" // static members double RKSettingsModuleGraphics::graphics_width; double RKSettingsModuleGraphics::graphics_height; bool RKSettingsModuleGraphics::graphics_hist_enable; int RKSettingsModuleGraphics::graphics_hist_max_length; int RKSettingsModuleGraphics::graphics_hist_max_plotsize; bool RKSettingsModuleGraphics::options_kde_printing; RKSettingsModuleGraphics::RKSettingsModuleGraphics (RKSettings *gui, QWidget *parent) : RKSettingsModule(gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); QGroupBox *group = new QGroupBox (i18n ("Default window size"), this); QVBoxLayout* group_layout = new QVBoxLayout (group); group_layout->addWidget (new QLabel (i18n ("Default width (inches):"), group)); group_layout->addWidget (graphics_width_box = new RKSpinBox (group)); graphics_width_box->setRealMode (1, 100.0, graphics_width, 1, 3); group_layout->addSpacing (2*RKGlobals::spacingHint ()); group_layout->addWidget (new QLabel (i18n ("Default height (inches)"), group)); group_layout->addWidget (graphics_height_box = new RKSpinBox (group)); graphics_height_box->setRealMode (1, 100.0, graphics_height, 1, 3); connect (graphics_width_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged ())); connect (graphics_height_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged ())); main_vbox->addWidget (group); kde_printing_box = new QCheckBox (i18n ("Use KDE printer dialog for printing devices (if available)"), this); kde_printing_box->setChecked (options_kde_printing); connect (kde_printing_box, SIGNAL (stateChanged(int)), this, SLOT (boxChanged())); main_vbox->addWidget (kde_printing_box); graphics_hist_box = new QGroupBox (i18n ("Screen device history"), this); graphics_hist_box->setCheckable (true); graphics_hist_box->setChecked (graphics_hist_enable); group_layout = new QVBoxLayout (graphics_hist_box); connect (graphics_hist_box, SIGNAL (toggled (bool)), this, SLOT (boxChanged ())); QHBoxLayout *h_layout = new QHBoxLayout (); group_layout->addLayout (h_layout); h_layout->addWidget (new QLabel (i18n ("Maximum number of recorded plots:"), graphics_hist_box)); h_layout->addWidget (graphics_hist_max_length_box = new KIntSpinBox (1, 200, 1, graphics_hist_max_length, graphics_hist_box)); h_layout = new QHBoxLayout (); group_layout->addLayout (h_layout); h_layout->addWidget (new QLabel (i18n ("Maximum size of a single recorded plot (in KB):"), graphics_hist_box)); h_layout->addWidget (graphics_hist_max_plotsize_box = new KIntSpinBox (4, 20000, 4, graphics_hist_max_plotsize, graphics_hist_box)); connect (graphics_hist_max_length_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged ())); connect (graphics_hist_max_plotsize_box, SIGNAL (valueChanged (int)), this, SLOT (boxChanged ())); main_vbox->addWidget (graphics_hist_box); main_vbox->addStretch (); } RKSettingsModuleGraphics::~RKSettingsModuleGraphics() { RK_TRACE (SETTINGS); } void RKSettingsModuleGraphics::boxChanged () { RK_TRACE (SETTINGS); change (); } QString RKSettingsModuleGraphics::caption () { RK_TRACE (SETTINGS); return (i18n ("Onscreen Graphics")); } void RKSettingsModuleGraphics::applyChanges () { RK_TRACE (SETTINGS); graphics_width = graphics_width_box->realValue (); graphics_height = graphics_height_box->realValue (); graphics_hist_enable = graphics_hist_box->isChecked (); graphics_hist_max_length = graphics_hist_max_length_box->value (); graphics_hist_max_plotsize = graphics_hist_max_plotsize_box->value (); options_kde_printing = kde_printing_box->isChecked (); QStringList commands = makeRRunTimeOptionCommands (); for (QStringList::const_iterator it = commands.begin (); it != commands.end (); ++it) { RKGlobals::rInterface ()->issueCommand (*it, RCommand::App, QString::null, 0, 0, commandChain ()); } } void RKSettingsModuleGraphics::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleGraphics::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Graphics Device Windows"); cg.writeEntry ("graphics_width", graphics_width); cg.writeEntry ("graphics_height", graphics_height); cg.writeEntry ("graphics_hist_enable", graphics_hist_enable); cg.writeEntry ("graphics_hist_max_length", graphics_hist_max_length); cg.writeEntry ("graphics_hist_max_plotsize", graphics_hist_max_plotsize); cg.writeEntry ("kde printing", options_kde_printing); } void RKSettingsModuleGraphics::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Graphics Device Windows"); graphics_width = cg.readEntry ("graphics_width", 7.0); graphics_height = cg.readEntry ("graphics_height", 7.0); graphics_hist_enable = cg.readEntry ("graphics_hist_enable", true); graphics_hist_max_length = cg.readEntry ("graphics_hist_max_length", 20); graphics_hist_max_plotsize = cg.readEntry ("graphics_hist_max_plotsize", 1024); options_kde_printing = cg.readEntry ("kde printing", true); } //static QStringList RKSettingsModuleGraphics::makeRRunTimeOptionCommands () { QStringList list; #ifdef Q_WS_X11 QString command = "X11.options"; command.append ("(\"width\"=" + QString::number (graphics_width)); command.append (", \"height\"=" + QString::number (graphics_height) + ")\n"); #else QString command = "options"; command.append ("(\"rk.screendevice.width\"=" + QString::number (graphics_width)); command.append (", \"rk.screendevice.height\"=" + QString::number (graphics_height) + ")\n"); #endif list.append (command); list.append ("options (\"rk.graphics.hist.max.plotsize\"=" + QString::number (graphics_hist_max_plotsize) + ")\n"); list.append ("rk.toggle.plot.history (" + QString (graphics_hist_enable?"TRUE":"FALSE") + ")\n"); list.append ("rk.verify.plot.hist.limits (" + QString::number (graphics_hist_max_length) + ")\n"); return (list); } #include "rksettingsmodulegraphics.moc" rkward-0.6.1/rkward/settings/rksettingsmodulegraphics.h0000644000175000017500000000471612124345411023014 0ustar thomasthomas/*************************************************************************** rksettingsmodulegraphics - description ------------------- begin : Mon Sep 13 2010 copyright : (C) 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEGRAPHICS_H #define RKSETTINGSMODULEGRAPHICS_H #include "rksettingsmodule.h" #include class QGroupBox; class RKSpinBox; class KIntSpinBox; class QCheckBox; /** @author Thomas Friedrichsmeier */ class RKSettingsModuleGraphics : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleGraphics (RKSettings *gui, QWidget *parent); ~RKSettingsModuleGraphics (); void applyChanges (); void save (KConfig *config); /** generate the commands needed to set the R run time options */ static QStringList makeRRunTimeOptionCommands (); /** Configured to (attempt to) use KDE printing dialog? */ static bool kdePrintingEnabled () { return options_kde_printing; }; static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); QString helpURL () { return ("rkward://page/rkward_plot_history#scd_settings"); }; static bool plotHistoryEnabled () { return graphics_hist_enable; }; public slots: void boxChanged (); private: QGroupBox *graphics_hist_box; KIntSpinBox *graphics_hist_max_length_box; KIntSpinBox *graphics_hist_max_plotsize_box; RKSpinBox *graphics_height_box; RKSpinBox *graphics_width_box; QCheckBox *kde_printing_box; static bool graphics_hist_enable; static int graphics_hist_max_length; static int graphics_hist_max_plotsize; static double graphics_height; static double graphics_width; static bool options_kde_printing; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduleplugins.h0000644000175000017500000001371712124345411022676 0ustar thomasthomas/*************************************************************************** rksettingsmoduleplugins - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULEPLUGINS_H #define RKSETTINGSMODULEPLUGINS_H #include "rksettingsmodule.h" #include "../plugin/rkcomponentmeta.h" #include #include #include class RKMultiStringSelectorV2; class RKSettingsModulePluginsModel; class QButtonGroup; class QCheckBox; class RKSpinBox; /** The settings-module for plugin specific settings @author Thomas Friedrichsmeier */ class RKSettingsModulePlugins : public RKSettingsModule { Q_OBJECT public: RKSettingsModulePlugins (RKSettings *gui, QWidget *parent); ~RKSettingsModulePlugins (); void applyChanges (); void save (KConfig *config); enum PluginPrefs { PreferDialog=0, PreferRecommended=1, PreferWizard=2 }; static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); /** @returns a list of active plugin maps */ static QStringList pluginMaps (); static PluginPrefs getInterfacePreference () { return interface_pref; }; static bool showCodeByDefault () { return show_code; }; static int defaultCodeHeight () { return code_size; }; /** register a list of available plugin-maps (which may or may not already be known). New maps are activated, automatically. * @param maps Plugin maps (filenames) to add * @param force_add If true, maps are added, even if they are not "new", and had previously been disabled by the user * @param force_reload If true, plugin maps are always reloaded, even if no maps were added */ static void registerPluginMaps (const QStringList &maps, bool force_add, bool force_reload); /** Looks for the given id among known plugin maps */ static QString findPluginMapById (const QString &id); /** marks given map as broken (in this version), and deactivates it. @Returns false is the map was already known to be broken, true otherwise. */ static bool markPluginMapAsBroken (const QString &map); /** marks given map as quirky (in this version). @Returns false is the map was already known to be quirky, true otherwise. */ static bool markPluginMapAsQuirky (const QString &map); /** Clears the broken or quirky flags. E.g. after the map was loaded, successfully */ static void markPluginMapAsWorking (const QString &map); /** Helper struct used by RKSettingsModulePlugins to keep track of plugin map files. */ struct PluginMapStoredInfo { PluginMapStoredInfo (const QString &_filename) : filename (_filename), active (false), broken_in_this_version (false), quirky_in_this_version (false) {}; QString filename; bool active; bool broken_in_this_version; bool quirky_in_this_version; int priority; QString id; QDateTime last_modified; }; typedef QList PluginMapList; public slots: void settingChanged (); private: enum PluginMapPriority { PriorityHidden = 0, PriorityLow, PriorityMedium, PriorityHigh }; RKMultiStringSelectorV2 *map_choser; RKSettingsModulePluginsModel *map_model; QButtonGroup *button_group; QCheckBox *show_code_box; RKSpinBox *code_size_box; /** plugin maps which are not necessarily active, but have been encountered, before. @see plugin_maps */ static PluginMapList known_plugin_maps; static PluginPrefs interface_pref; static bool show_code; static int code_size; /* TODO: These are currently unused (leftovers of GHNS-based plugin installation), but might still be of interest */ static void installPluginPack (const QString &archive_file); static void uninstallPluginPack (const QString &archive_file); static QString baseNameOfPluginPack (const QString &archive_file); static QStringList findPluginMapsRecursive (const QString &basedir); static void fixPluginMapLists (); }; class RKSettingsModulePluginsModel : public QAbstractTableModel { Q_OBJECT public: RKSettingsModulePluginsModel (RKSettingsModulePlugins* parent); virtual ~RKSettingsModulePluginsModel (); /** (re-)initialize the model */ void init (const RKSettingsModulePlugins::PluginMapList &known_plugin_maps); RKSettingsModulePlugins::PluginMapList pluginMaps () { return plugin_maps; }; public slots: void swapRows (int rowa, int rowb); void insertNewStrings (int above_row); private: RKSettingsModulePlugins::PluginMapList plugin_maps; struct PluginMapMetaInfo { RKComponentAboutData *about; QList dependencies; }; QHash plugin_map_dynamic_info; const PluginMapMetaInfo &getPluginMapMetaInfo (const QString &pluginmapfile); // reimplemented model functions int rowCount (const QModelIndex &parent = QModelIndex()) const; int columnCount (const QModelIndex &parent = QModelIndex()) const; QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; bool setData (const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); bool removeRows (int row, int count, const QModelIndex& parent = QModelIndex ()); Qt::ItemFlags flags (const QModelIndex &index) const; }; #endif rkward-0.6.1/rkward/settings/rksettingsmoduleconsole.cpp0000644000175000017500000001712612124345411023210 0ustar thomasthomas/*************************************************************************** rksettingsmoduleconsole - description ------------------- begin : Sun Oct 16 2005 copyright : (C) 2005, 2006, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmoduleconsole.h" #include #include #include #include #include #include #include #include #include #include #include #include "../rbackend/rcommand.h" #include "../rkglobals.h" #include "../debug.h" // static bool RKSettingsModuleConsole::save_history; uint RKSettingsModuleConsole::max_history_length; uint RKSettingsModuleConsole::max_console_lines; bool RKSettingsModuleConsole::pipe_user_commands_through_console; RKSettingsModuleConsole::PipedCommandsHistoryMode RKSettingsModuleConsole::add_piped_commands_to_history; bool RKSettingsModuleConsole::context_sensitive_history_by_default; RKSettingsModuleConsole::RKSettingsModuleConsole (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *vbox = new QVBoxLayout (this); save_history_box = new QCheckBox (i18n ("Load/Save command history"), this); save_history_box->setChecked (save_history); connect (save_history_box, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); vbox->addWidget (save_history_box); vbox->addWidget (new QLabel (i18n ("Maximum length of command history"), this)); max_history_length_spinner = new KIntSpinBox (0, 10000, 10, max_history_length, this); max_history_length_spinner->setSpecialValueText (i18n ("Unlimited")); connect (max_history_length_spinner, SIGNAL (valueChanged (int)), this, SLOT (changedSetting (int))); vbox->addWidget (max_history_length_spinner); vbox->addWidget (new QLabel (i18n ("Maximum number of paragraphs/lines to display in the console"), this)); max_console_lines_spinner = new KIntSpinBox (0, 10000, 10, max_console_lines, this); max_console_lines_spinner->setSpecialValueText (i18n ("Unlimited")); connect (max_console_lines_spinner, SIGNAL (valueChanged (int)), this, SLOT (changedSetting (int))); vbox->addWidget (max_console_lines_spinner); vbox->addSpacing (2*RKGlobals::spacingHint ()); pipe_user_commands_through_console_box = new QCheckBox (i18n ("Run commands from script editor through console"), this); pipe_user_commands_through_console_box->setChecked (pipe_user_commands_through_console); connect (pipe_user_commands_through_console_box, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); vbox->addWidget (pipe_user_commands_through_console_box); vbox->addWidget (new QLabel (i18n ("Also add those commands to console history"), this)); add_piped_commands_to_history_box = new QComboBox (this); add_piped_commands_to_history_box->insertItem ((int) DontAdd, i18n ("Do not add")); add_piped_commands_to_history_box->insertItem ((int) AddSingleLine, i18n ("Add only if single line")); add_piped_commands_to_history_box->insertItem ((int) AlwaysAdd, i18n ("Add all commands")); add_piped_commands_to_history_box->setCurrentIndex ((int) add_piped_commands_to_history); connect (add_piped_commands_to_history_box, SIGNAL (currentIndexChanged (int)), this, SLOT (changedSetting (int))); add_piped_commands_to_history_box->setEnabled (pipe_user_commands_through_console_box->isChecked ()); vbox->addWidget (add_piped_commands_to_history_box); vbox->addSpacing (2*RKGlobals::spacingHint ()); reverse_context_mode_box = new QCheckBox (i18n ("Command history is context sensitive by default"), this); connect (reverse_context_mode_box, SIGNAL (stateChanged (int)), this, SLOT (changedSetting (int))); reverse_context_mode_box->setChecked (context_sensitive_history_by_default); vbox->addWidget (reverse_context_mode_box); vbox->addStretch (); } RKSettingsModuleConsole::~RKSettingsModuleConsole () { RK_TRACE (SETTINGS); } void RKSettingsModuleConsole::changedSetting (int) { RK_TRACE (SETTINGS); change (); add_piped_commands_to_history_box->setEnabled (pipe_user_commands_through_console_box->isChecked ()); } //static bool RKSettingsModuleConsole::shouldDoHistoryContextSensitive (Qt::KeyboardModifiers current_state) { RK_TRACE (SETTINGS); if (current_state & Qt::ShiftModifier) return (!context_sensitive_history_by_default); return context_sensitive_history_by_default; } //static void RKSettingsModuleConsole::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Console Settings"); cg.writeEntry ("save history", save_history); cg.writeEntry ("max history length", max_history_length); cg.writeEntry ("max console lines", max_console_lines); cg.writeEntry ("pipe user commands through console", pipe_user_commands_through_console); cg.writeEntry ("add piped commands to history", (int) add_piped_commands_to_history); cg.writeEntry ("command history defaults to context sensitive", context_sensitive_history_by_default); } //static void RKSettingsModuleConsole::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Console Settings"); save_history = cg.readEntry ("save history", true); max_history_length = cg.readEntry ("max history length", 100); max_console_lines = cg.readEntry ("max console lines", 500); pipe_user_commands_through_console = cg.readEntry ("pipe user commands through console", true); add_piped_commands_to_history = (PipedCommandsHistoryMode) cg.readEntry ("add piped commands to history", (int) AddSingleLine); context_sensitive_history_by_default = cg.readEntry ("command history defaults to context sensitive", false); } //static QStringList RKSettingsModuleConsole::loadCommandHistory () { RK_TRACE (SETTINGS); KConfigGroup cg = KGlobal::config ()->group ("Console Settings"); return cg.readEntry ("history", QStringList ()); } //static void RKSettingsModuleConsole::saveCommandHistory (const QStringList &list) { RK_TRACE (SETTINGS); KConfigGroup cg = KGlobal::config ()->group ("Console Settings"); if (save_history) { cg.writeEntry ("history", list); } cg.sync (); } void RKSettingsModuleConsole::applyChanges () { RK_TRACE (SETTINGS); save_history = save_history_box->isChecked (); max_history_length = max_history_length_spinner->value (); max_console_lines = max_console_lines_spinner->value (); pipe_user_commands_through_console = pipe_user_commands_through_console_box->isChecked (); add_piped_commands_to_history = (PipedCommandsHistoryMode) add_piped_commands_to_history_box->currentIndex (); context_sensitive_history_by_default = reverse_context_mode_box->isChecked (); } void RKSettingsModuleConsole::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } QString RKSettingsModuleConsole::caption () { RK_TRACE (SETTINGS); return (i18n ("Console")); } #include "rksettingsmoduleconsole.moc" rkward-0.6.1/rkward/settings/rksettingsmoduler.h0000644000175000017500000001127412124345411021452 0ustar thomasthomas/*************************************************************************** rksettingsmoduler - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004, 2007, 2009, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGSMODULER_H #define RKSETTINGSMODULER_H #include "rksettingsmodule.h" #include #include class QCheckBox; class QComboBox; class QLineEdit; class MultiStringSelector; class KIntSpinBox; class QTextEdit; /** Configure the R-backend @author Thomas Friedrichsmeier */ class RKSettingsModuleR : public RKSettingsModule { Q_OBJECT public: RKSettingsModuleR (RKSettings *gui, QWidget *parent); ~RKSettingsModuleR (); void applyChanges (); void save (KConfig *config); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); QString caption (); /** generate the commands needed to set the R run time options */ static QStringList makeRRunTimeOptionCommands (); /** retrieve the (probable) base url of help pages. May change across R sessions */ static QString helpBaseUrl () { return help_base_url; }; static int getDefaultWidth () { return options_width; }; public slots: void settingChanged (); private: QLineEdit *outdec_input; KIntSpinBox *width_input; QComboBox *warn_input; KIntSpinBox *warningslength_input; KIntSpinBox *maxprint_input; QComboBox *keepsource_input; QComboBox *keepsourcepkgs_input; KIntSpinBox *expressions_input; KIntSpinBox *digits_input; QComboBox *checkbounds_input; QComboBox *editor_input; QComboBox *pager_input; QTextEdit *further_input; QCheckBox *internet2_input; static QString options_outdec; static int options_width; static int options_warn; static int options_warningslength; static int options_maxprint; static bool options_keepsource; static bool options_keepsourcepkgs; static int options_expressions; static int options_digits; static bool options_checkbounds; static QString options_editor; static QString options_pager; static QString options_further; static bool options_internet2; // constants static QString builtin_editor; // session constants friend class RInterface; static QString help_base_url; }; #include "../rbackend/rcommandreceiver.h" /** Configure packages and library paths @author Thomas Friedrichsmeier */ class RKSettingsModuleRPackages : public RKSettingsModule, public RCommandReceiver { Q_OBJECT public: RKSettingsModuleRPackages (RKSettings *gui, QWidget *parent); ~RKSettingsModuleRPackages (); void applyChanges (); void save (KConfig *config); static void saveSettings (KConfig *config); static void loadSettings (KConfig *config); /** generate the commands needed to set the R run time options */ static QStringList makeRRunTimeOptionCommands (); static bool archivePackages () { return archive_packages; } static QString pkgTypeOption (); static void addLibraryLocation (const QString& new_loc, RCommandChain *chain); static QStringList libraryLocations () { return (liblocs + defaultliblocs); }; /** returns the list of packages which are essential to rkward. This is hard-coded. */ static QStringList essentialPackages () { return essential_packages.split ("\n"); }; QString caption (); public slots: void settingChanged (); void addLibLoc (QStringList *string_list); void addRepository (QStringList *string_list); void selectCRANMirror (); protected: void rCommandDone (RCommand *command); private: static QString libLocsCommand (); MultiStringSelector *libloc_selector; QCheckBox *archive_packages_box; QCheckBox *source_packages_box; MultiStringSelector *repository_selector; QLineEdit* cran_mirror_input; static QString cran_mirror_url; static QStringList liblocs; static bool archive_packages; static bool source_packages; static QStringList package_repositories; friend class RInterface; static QStringList defaultliblocs; static QString essential_packages; }; #endif rkward-0.6.1/rkward/settings/rksettings.h0000644000175000017500000000571112124345411020061 0ustar thomasthomas/*************************************************************************** rksettings - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004, 2007 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKSETTINGS_H #define RKSETTINGS_H #include #include class RKSettingsModule; class KConfig; class RKWardMainWindow; class RKSettingsTracker; class RCommandChain; /** The main settings-dialog. Contains subsections (tabs) for different modules. Use configureSettings () to invoke or raise the settings dialog @author Thomas Friedrichsmeier */ class RKSettings : public KPageDialog { Q_OBJECT public: enum SettingsPage { NoPage=0, PagePlugins, PageR, PageRPackages, PageGeneral, PageOutput, PageX11, PageWatch, PageConsole, PageCommandEditor, PageObjectBrowser, PageDebug, NumPages = PageDebug + 1 }; static void configureSettings (SettingsPage page=NoPage, QWidget *parent=0, RCommandChain *chain=0); static void loadSettings (KConfig *config); static void saveSettings (KConfig *config); void enableApply (); static RKSettingsTracker* tracker () { return settings_tracker; }; public slots: void pageChange (KPageWidgetItem *current, KPageWidgetItem *before); protected: void slotButtonClicked (int button); protected: RKSettings (QWidget *parent = 0); ~RKSettings (); private: void applyAll (); void initModules (); void raisePage (SettingsPage page); static void dialogClosed (); typedef QMap ModuleMap; ModuleMap modules; KPageWidgetItem *pages[NumPages]; static RKSettings *settings_dialog; friend class RKWardMainWindow; static RKSettingsTracker *settings_tracker; }; /** This class represents a very simple QObject. It's only purpose is to emit signals when certain settings have changed. Classes that need to update themselves on certain changed settings should connect to those signals. */ class RKSettingsTracker : public QObject { Q_OBJECT public: RKSettingsTracker (QObject *parent); ~RKSettingsTracker (); void signalSettingsChange (RKSettings::SettingsPage page); signals: void settingsChanged (RKSettings::SettingsPage); }; #endif rkward-0.6.1/rkward/settings/rksettings.cpp0000644000175000017500000001565412124345411020423 0ustar thomasthomas/*************************************************************************** rksettings - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettings.h" #include #include #include #include #include #include "../windows/rkworkplace.h" // modules #include "rksettingsmoduleplugins.h" #include "rksettingsmoduler.h" #include "rksettingsmodulegeneral.h" #include "rksettingsmoduleoutput.h" #include "rksettingsmodulegraphics.h" #include "rksettingsmodulewatch.h" #include "rksettingsmoduleobjectbrowser.h" #include "rksettingsmoduleconsole.h" #include "rksettingsmodulecommandeditor.h" #include "rksettingsmoduledebug.h" #include "../debug.h" //static RKSettings *RKSettings::settings_dialog = 0; RKSettingsTracker *RKSettings::settings_tracker = 0; //static void RKSettings::configureSettings (SettingsPage page, QWidget *parent, RCommandChain *chain) { RK_TRACE (SETTINGS); RKSettingsModule::chain = chain; if (!settings_dialog) { settings_dialog = new RKSettings (parent); } settings_dialog->raisePage (page); settings_dialog->show (); settings_dialog->raise (); } //static void RKSettings::dialogClosed () { RK_TRACE (SETTINGS); settings_dialog = 0; } RKSettings::RKSettings (QWidget *parent) : KPageDialog (parent) { RK_TRACE (SETTINGS); setFaceType (KPageDialog::Tree); setCaption (i18n ("Settings")); setButtons (KDialog::Ok | KDialog::Apply | KDialog::Cancel | KDialog::Help); enableButtonApply (false); setAttribute (Qt::WA_DeleteOnClose, true); initModules (); connect (this, SIGNAL (currentPageChanged(KPageWidgetItem*, KPageWidgetItem*)), this, SLOT (pageChange(KPageWidgetItem*, KPageWidgetItem*))); pageChange (currentPage (), currentPage ()); // init } RKSettings::~RKSettings() { RK_TRACE (SETTINGS); ModuleMap::const_iterator it; for (it = modules.constBegin (); it != modules.constEnd (); ++it) { delete *it; } modules.clear (); dialogClosed (); } void RKSettings::initModules () { RK_TRACE (SETTINGS); modules.insert (PagePlugins, new RKSettingsModulePlugins (this, 0)); modules.insert (PageR, new RKSettingsModuleR (this, 0)); modules.insert (PageRPackages, new RKSettingsModuleRPackages (this, 0)); modules.insert (PageGeneral, new RKSettingsModuleGeneral (this, 0)); modules.insert (PageOutput, new RKSettingsModuleOutput (this, 0)); modules.insert (PageX11, new RKSettingsModuleGraphics (this, 0)); modules.insert (PageWatch, new RKSettingsModuleWatch (this, 0)); modules.insert (PageConsole, new RKSettingsModuleConsole (this, 0)); modules.insert (PageCommandEditor, new RKSettingsModuleCommandEditor (this, 0)); modules.insert (PageObjectBrowser, new RKSettingsModuleObjectBrowser (this, 0)); modules.insert (PageDebug, new RKSettingsModuleDebug (this, 0)); ModuleMap::const_iterator it; for (it = modules.constBegin (); it != modules.constEnd (); ++it) { pages[it.key ()-1] = addPage (it.value (), it.value ()->caption ()); } } void RKSettings::raisePage (SettingsPage page) { RK_TRACE (SETTINGS); if (page != NoPage) { setCurrentPage (pages[(int) page - 1]); } } void RKSettings::pageChange (KPageWidgetItem *current, KPageWidgetItem *) { RK_TRACE (SETTINGS); RKSettingsModule *new_module = dynamic_cast (current->widget ()); bool has_help; if (!new_module) { RK_ASSERT (false); has_help = false; } else { has_help = !(new_module->helpURL ().isEmpty ()); } enableButton (KDialog::Help, has_help); } void RKSettings::slotButtonClicked (int button) { RK_TRACE (SETTINGS); if (button == KDialog::Apply) { applyAll (); } else if (button == KDialog::Ok) { applyAll (); accept (); close (); } else if (button == KDialog::Cancel) { reject (); } else if (button == KDialog::Help) { RKSettingsModule *current_module = dynamic_cast (currentPage ()->widget ()); if (!current_module) { RK_ASSERT (false); return; } RKWorkplace::mainWorkplace ()->openHelpWindow (current_module->helpURL ()); } else { RK_ASSERT (false); } } void RKSettings::applyAll () { RK_TRACE (SETTINGS); ModuleMap::const_iterator it; for (it = modules.constBegin (); it != modules.constEnd (); ++it) { if (it.value ()->hasChanges ()) { it.value ()->applyChanges (); it.value ()->changed = false; it.value ()->save (KGlobal::config ().data ()); tracker ()->signalSettingsChange (it.key ()); } } enableButtonApply (false); } void RKSettings::enableApply () { RK_TRACE (SETTINGS); enableButtonApply (true); } void RKSettings::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); RKSettingsModuleGeneral::loadSettings(config); // alway load this first, as it contains the base path for rkward files RKSettingsModulePlugins::loadSettings(config); RKSettingsModuleR::loadSettings(config); RKSettingsModuleRPackages::loadSettings(config); RKSettingsModuleOutput::loadSettings(config); RKSettingsModuleGraphics::loadSettings(config); RKSettingsModuleWatch::loadSettings(config); RKSettingsModuleConsole::loadSettings(config); RKSettingsModuleCommandEditor::loadSettings(config); RKSettingsModuleObjectBrowser::loadSettings(config); } void RKSettings::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); RKSettingsModuleGeneral::saveSettings(config); RKSettingsModulePlugins::saveSettings(config); RKSettingsModuleR::saveSettings(config); RKSettingsModuleRPackages::saveSettings(config); RKSettingsModuleOutput::saveSettings(config); RKSettingsModuleGraphics::saveSettings(config); RKSettingsModuleWatch::saveSettings(config); RKSettingsModuleConsole::saveSettings(config); RKSettingsModuleCommandEditor::saveSettings(config); RKSettingsModuleObjectBrowser::saveSettings(config); } //############ END RKSettings ################## //############ BEGIN RKSettingsTracker ############ RKSettingsTracker::RKSettingsTracker (QObject *parent) : QObject (parent) { RK_TRACE (SETTINGS); } RKSettingsTracker::~RKSettingsTracker () { RK_TRACE (SETTINGS); } void RKSettingsTracker::signalSettingsChange (RKSettings::SettingsPage page) { RK_TRACE (SETTINGS); emit (settingsChanged (page)); } #include "rksettings.moc" rkward-0.6.1/rkward/settings/rksettingsmodulecommandeditor.cpp0000644000175000017500000002314412124345411024370 0ustar thomasthomas/*************************************************************************** rksettingsmodulecommandeditor - description ------------------- begin : Tue Oct 23 2007 copyright : (C) 2007, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmodulecommandeditor.h" #include #include #include #include #include #include #include #include #include #include "../misc/rkspinbox.h" #include "../misc/rkcommonfunctions.h" #include "../rkglobals.h" #include "../debug.h" // static members int RKSettingsModuleCommandEditor::completion_min_chars; int RKSettingsModuleCommandEditor::completion_timeout; bool RKSettingsModuleCommandEditor::completion_enabled; bool RKSettingsModuleCommandEditor::arghinting_enabled; bool RKSettingsModuleCommandEditor::autosave_enabled; bool RKSettingsModuleCommandEditor::autosave_keep; int RKSettingsModuleCommandEditor::autosave_interval; int RKSettingsModuleCommandEditor::num_recent_files; QString RKSettingsModuleCommandEditor::script_file_filter; RKSettingsModuleCommandEditor::RKSettingsModuleCommandEditor (RKSettings *gui, QWidget *parent) : RKSettingsModule (gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout* main_vbox = new QVBoxLayout (this); QLabel *label = new QLabel (i18n ("Settings marked with (*) do not take effect until you restart RKWard"), this); label->setWordWrap (true); main_vbox->addWidget (label); main_vbox->addSpacing (2 * RKGlobals::spacingHint ()); QGroupBox* group = new QGroupBox (i18n ("Code Completion"), this); QVBoxLayout* box_layout = new QVBoxLayout (group); completion_enabled_box = new QCheckBox (i18n ("Enable code completion"), group); completion_enabled_box->setChecked (completion_enabled); connect (completion_enabled_box, SIGNAL (stateChanged(int)), this, SLOT (settingChanged())); box_layout->addWidget (completion_enabled_box); box_layout->addSpacing (RKGlobals::spacingHint ()); label = new QLabel (i18n ("Minimum number of characters before completion is attempted"), group); label->setWordWrap (true); completion_min_chars_box = new RKSpinBox (group); completion_min_chars_box->setIntMode (1, INT_MAX, completion_min_chars); completion_min_chars_box->setEnabled (completion_enabled); connect (completion_min_chars_box, SIGNAL (valueChanged(int)), this, SLOT (settingChanged())); box_layout->addWidget (label); box_layout->addWidget (completion_min_chars_box); main_vbox->addSpacing (RKGlobals::spacingHint ()); label = new QLabel (i18n ("Timeout (milliseconds) before completion is attempted"), group); label->setWordWrap (true); completion_timeout_box = new RKSpinBox (group); completion_timeout_box->setIntMode (0, INT_MAX, completion_timeout); completion_timeout_box->setEnabled (completion_enabled); connect (completion_timeout_box, SIGNAL (valueChanged(int)), this, SLOT (settingChanged())); box_layout->addWidget (label); box_layout->addWidget (completion_timeout_box); main_vbox->addWidget (group); arghinting_enabled_box = new QCheckBox (i18n ("Enable function argument hinting"), group); arghinting_enabled_box->setChecked (arghinting_enabled); connect (arghinting_enabled_box, SIGNAL (stateChanged(int)), this, SLOT (settingChanged())); main_vbox->addWidget (arghinting_enabled_box); main_vbox->addSpacing (2 * RKGlobals::spacingHint ()); group = autosave_enabled_box = new QGroupBox (i18n ("Autosaves"), this); autosave_enabled_box->setCheckable (true); autosave_enabled_box->setChecked (autosave_enabled); connect (autosave_enabled_box, SIGNAL (toggled(bool)), this, SLOT (settingChanged())); box_layout = new QVBoxLayout (group); label = new QLabel (i18n ("Autosave interval (minutes)"), group); autosave_interval_box = new RKSpinBox (group); autosave_interval_box->setIntMode (1, INT_MAX, autosave_interval); connect (autosave_interval_box, SIGNAL (valueChanged(int)), this, SLOT (settingChanged())); box_layout->addWidget (label); box_layout->addWidget (autosave_interval_box); box_layout->addSpacing (RKGlobals::spacingHint ()); autosave_keep_box = new QCheckBox (i18n ("Keep autosave file after manual save"), group); autosave_keep_box->setChecked (autosave_keep); connect (autosave_keep_box, SIGNAL (stateChanged(int)), this, SLOT (settingChanged())); box_layout->addWidget (autosave_keep_box); main_vbox->addWidget (group); main_vbox->addSpacing (2 * RKGlobals::spacingHint ()); group = new QGroupBox (i18n ("Opening script files"), this); box_layout = new QVBoxLayout (group); label = new QLabel (i18n ("Number of scripts in recent file lists (*)"), group); num_recent_files_box = new RKSpinBox (group); num_recent_files_box->setIntMode (1, INT_MAX, num_recent_files); RKCommonFunctions::setTips (i18n ("

    The number of recent files to remember (in the Open Recent R Script File menu).

    ") + RKCommonFunctions::noteSettingsTakesEffectAfterRestart (), num_recent_files_box, label); connect (num_recent_files_box, SIGNAL (valueChanged(int)), this, SLOT (settingChanged())); box_layout->addWidget (label); box_layout->addWidget (num_recent_files_box); box_layout->addSpacing (RKGlobals::spacingHint ()); label = new QLabel (i18n ("R script file filters (separated by spaces)"), group); script_file_filter_box = new QLineEdit (group); script_file_filter_box->setText (script_file_filter); RKCommonFunctions::setTips (i18n ("

    A list of filters (file name extensions) that should be treated as R script files. Most importantly, files matching one of these filters will always be opened with R syntax highlighting.

    Filters are case insensitive.

    "), script_file_filter_box, label); connect (script_file_filter_box, SIGNAL (textChanged(QString)), this, SLOT (settingChanged())); box_layout->addWidget (label); box_layout->addWidget (script_file_filter_box); box_layout->addSpacing (RKGlobals::spacingHint ()); main_vbox->addWidget (group); main_vbox->addStretch (); } RKSettingsModuleCommandEditor::~RKSettingsModuleCommandEditor () { RK_TRACE (SETTINGS); } void RKSettingsModuleCommandEditor::settingChanged () { RK_TRACE (SETTINGS); change (); completion_timeout_box->setEnabled (completion_enabled_box->isChecked ()); completion_min_chars_box->setEnabled (completion_enabled_box->isChecked ()); } QString RKSettingsModuleCommandEditor::caption () { RK_TRACE (SETTINGS); return (i18n ("Script editor")); } void RKSettingsModuleCommandEditor::applyChanges () { RK_TRACE (SETTINGS); completion_enabled = completion_enabled_box->isChecked (); completion_min_chars = completion_min_chars_box->intValue (); completion_timeout = completion_timeout_box->intValue (); arghinting_enabled = arghinting_enabled_box->isChecked (); autosave_enabled = autosave_enabled_box->isChecked (); autosave_keep = autosave_keep_box->isChecked (); autosave_interval = autosave_interval_box->intValue (); num_recent_files = num_recent_files_box->intValue (); script_file_filter = script_file_filter_box->text (); } void RKSettingsModuleCommandEditor::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleCommandEditor::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Command Editor Windows"); cg.writeEntry ("Completion enabled", completion_enabled); cg.writeEntry ("Completion min chars", completion_min_chars); cg.writeEntry ("Completion timeout", completion_timeout); cg.writeEntry ("Argument hinting enabled", arghinting_enabled); cg.writeEntry ("Autosave enabled", autosave_enabled); cg.writeEntry ("Autosave keep saves", autosave_keep); cg.writeEntry ("Autosave interval", autosave_interval); cg.writeEntry ("Max number of recent files", num_recent_files); cg.writeEntry ("Script file filter", script_file_filter); } void RKSettingsModuleCommandEditor::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("Command Editor Windows"); completion_enabled = cg.readEntry ("Completion enabled", true); completion_min_chars = cg.readEntry ("Completion min chars", 2); completion_timeout = cg.readEntry ("Completion timeout", 500); arghinting_enabled = cg.readEntry ("Argument hinting enabled", true); autosave_enabled = cg.readEntry ("Autosave enabled", true); autosave_keep = cg.readEntry ("Autosave keep saves", false); autosave_interval = cg.readEntry ("Autosave interval", 5); num_recent_files = cg.readEntry ("Max number of recent files", 10); script_file_filter = cg.readEntry ("Script file filter", "*.R *.S *.q *.Rhistory"); } // static bool RKSettingsModuleCommandEditor::matchesScriptFileFilter (const QString &filename) { RK_TRACE (SETTINGS); const QStringList exts = script_file_filter.split (' '); foreach (const QString ext, exts) { QRegExp reg (ext, Qt::CaseInsensitive, QRegExp::Wildcard); if (reg.exactMatch (filename)) return true; } return false; } #include "rksettingsmodulecommandeditor.moc" rkward-0.6.1/rkward/settings/rksettingsmoduler.cpp0000644000175000017500000005716712124345411022020 0ustar thomasthomas/*************************************************************************** rksettingsmoduler - description ------------------- begin : Wed Jul 28 2004 copyright : (C) 2004-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rksettingsmoduler.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "rksettingsmodulegeneral.h" #include "../core/robject.h" #include "../misc/multistringselector.h" #include "../misc/rkprogresscontrol.h" #include "../misc/rkcommonfunctions.h" #include "../rbackend/rinterface.h" #include "../rkglobals.h" #include "../debug.h" // static members QString RKSettingsModuleR::options_outdec; int RKSettingsModuleR::options_width; int RKSettingsModuleR::options_warn; int RKSettingsModuleR::options_warningslength; int RKSettingsModuleR::options_maxprint; bool RKSettingsModuleR::options_keepsource; bool RKSettingsModuleR::options_keepsourcepkgs; int RKSettingsModuleR::options_expressions; int RKSettingsModuleR::options_digits; bool RKSettingsModuleR::options_checkbounds; QString RKSettingsModuleR::options_editor; QString RKSettingsModuleR::options_pager; QString RKSettingsModuleR::options_further; bool RKSettingsModuleR::options_internet2; // static constants QString RKSettingsModuleR::builtin_editor = ""; // session constants QString RKSettingsModuleR::help_base_url; RKSettingsModuleR::RKSettingsModuleR (RKSettings *gui, QWidget *parent) : RKSettingsModule(gui, parent) { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); QLabel *label = new QLabel (i18n ("The following settings mostly affect R behavior in the console. It is generally safe to keep these unchanged."), this); label->setWordWrap (true); main_vbox->addWidget (label); QGridLayout *grid = new QGridLayout (); main_vbox->addLayout (grid); int row = -1; // options (warn) grid->addWidget (new QLabel (i18n ("Display warnings"), this), ++row, 0); warn_input = new QComboBox (this); warn_input->setEditable (false); warn_input->insertItem (0, i18n ("Suppress warnings")); // do not change the order of options! See also: applyChanges () warn_input->insertItem (1, i18n ("Print warnings later (default)")); warn_input->insertItem (2, i18n ("Print warnings immediately")); warn_input->insertItem (3, i18n ("Convert warnings to errors")); warn_input->setCurrentIndex (options_warn + 1); connect (warn_input, SIGNAL (activated (int)), this, SLOT (settingChanged())); grid->addWidget (warn_input, row, 1); // options (OutDec) grid->addWidget (new QLabel (i18n ("Decimal character (only for printing)"), this), ++row, 0); outdec_input = new QLineEdit (options_outdec, this); outdec_input->setMaxLength (1); connect (outdec_input, SIGNAL (textChanged (const QString &)), this, SLOT (settingChanged())); grid->addWidget (outdec_input, row, 1); // options (width) grid->addWidget (new QLabel (i18n ("Output width (characters)"), this), ++row, 0); width_input = new KIntSpinBox (10, 10000, 1, options_width, this); connect (width_input, SIGNAL (valueChanged (int)), this, SLOT (settingChanged())); grid->addWidget (width_input, row, 1); // options (max.print) grid->addWidget (new QLabel (i18n ("Maximum number of elements shown in print"), this), ++row, 0); maxprint_input = new KIntSpinBox (100, INT_MAX, 1, options_maxprint, this); connect (maxprint_input, SIGNAL (valueChanged (int)), this, SLOT (settingChanged())); grid->addWidget (maxprint_input, row, 1); // options (warnings.length) grid->addWidget (new QLabel (i18n ("Maximum length of warnings/errors to print"), this), ++row, 0); warningslength_input = new KIntSpinBox (100, 8192, 1, options_warningslength, this); connect (warningslength_input, SIGNAL (valueChanged (int)), this, SLOT (settingChanged())); grid->addWidget (warningslength_input, row, 1); // options (keep.source) grid->addWidget (new QLabel (i18n ("Keep comments in functions"), this), ++row, 0); keepsource_input = new QComboBox (this); keepsource_input->setEditable (false); keepsource_input->addItem (i18n ("TRUE (default)"), true); keepsource_input->addItem (i18n ("FALSE"), false); keepsource_input->setCurrentIndex (options_keepsource ? 0 : 1); connect (keepsource_input, SIGNAL (activated (int)), this, SLOT (settingChanged())); grid->addWidget (keepsource_input, row, 1); // options (keep.source.pkgs) grid->addWidget (new QLabel (i18n ("Keep comments in packages"), this), ++row, 0); keepsourcepkgs_input = new QComboBox (this); keepsourcepkgs_input->setEditable (false); keepsourcepkgs_input->addItem (i18n ("TRUE"), true); keepsourcepkgs_input->addItem (i18n ("FALSE (default)"), false); keepsourcepkgs_input->setCurrentIndex (options_keepsourcepkgs ? 0 : 1); connect (keepsourcepkgs_input, SIGNAL (activated (int)), this, SLOT (settingChanged())); grid->addWidget (keepsourcepkgs_input, row, 1); // options (expressions) grid->addWidget (new QLabel (i18n ("Maximum level of nested expressions"), this), ++row, 0); expressions_input = new KIntSpinBox (25, 500000, 1, options_expressions, this); connect (expressions_input, SIGNAL (valueChanged (int)), this, SLOT (settingChanged())); grid->addWidget (expressions_input, row, 1); // options (digits) grid->addWidget (new QLabel (i18n ("Default decimal precision in print ()"), this), ++row, 0); digits_input = new KIntSpinBox (1, 22, 1, options_digits, this); connect (digits_input, SIGNAL (valueChanged (int)), this, SLOT (settingChanged())); grid->addWidget (digits_input, row, 1); // options (check.bounds) grid->addWidget (new QLabel (i18n ("Check vector bounds (warn)"), this), ++row, 0); checkbounds_input = new QComboBox (this); checkbounds_input->setEditable (false); checkbounds_input->addItem (i18n ("TRUE"), true); checkbounds_input->addItem (i18n ("FALSE (default)"), false); checkbounds_input->setCurrentIndex (options_checkbounds ? 0 : 1); connect (checkbounds_input, SIGNAL (activated (int)), this, SLOT (settingChanged())); grid->addWidget (checkbounds_input, row, 1); grid->addWidget (new QLabel (i18n ("Editor command"), this), ++row, 0); editor_input = new QComboBox (this); editor_input->setEditable (true); editor_input->addItem (builtin_editor); if (options_editor != builtin_editor) { editor_input->addItem (options_editor); editor_input->setCurrentIndex (1); } connect (editor_input, SIGNAL (editTextChanged (const QString &)), this, SLOT (settingChanged())); grid->addWidget (editor_input, row, 1); grid->addWidget (new QLabel (i18n ("Pager command"), this), ++row, 0); pager_input = new QComboBox (this); pager_input->setEditable (true); pager_input->addItem (builtin_editor); if (options_pager != builtin_editor) { pager_input->addItem (options_pager); pager_input->setCurrentIndex (1); } connect (pager_input, SIGNAL (editTextChanged (const QString &)), this, SLOT (settingChanged())); grid->addWidget (pager_input, row, 1); #ifdef Q_WS_WIN grid->addWidget (label = new QLabel (i18n ("Use Internet Explorer functions for internet access"), this), ++row, 0); internet2_input = new QCheckBox (this); internet2_input->setChecked (options_internet2); connect (internet2_input, SIGNAL (stateChanged(int)), this, SLOT (settingChanged())); grid->addWidget (internet2_input, row, 1); RKCommonFunctions::setTips (i18n ("

    Use Internet Explorer functions for accessing the internet from R. " "Enabling this option may help in case of problems with accessing the internet from R (e.g. for " "installing packages).

    "), internet2_input, label); #endif grid->addWidget (new QLabel (i18n ("Further (option) commands to run in each session"), this), ++row, 0, 1, 2); further_input = new QTextEdit (this); further_input->setWordWrapMode (QTextOption::NoWrap); further_input->setAcceptRichText (false); further_input->setPlainText (options_further); connect (further_input, SIGNAL (textChanged()), this, SLOT (settingChanged())); grid->addWidget (further_input, ++row, 0, 1, 2); main_vbox->addStretch (); } RKSettingsModuleR::~RKSettingsModuleR() { RK_TRACE (SETTINGS); } void RKSettingsModuleR::settingChanged () { RK_TRACE (SETTINGS); change (); } QString RKSettingsModuleR::caption () { RK_TRACE (SETTINGS); return (i18n ("R-Backend")); } void RKSettingsModuleR::applyChanges () { RK_TRACE (SETTINGS); options_outdec = outdec_input->text (); options_width = width_input->value (); options_warn = warn_input->currentIndex () - 1; options_warningslength = warningslength_input->value (); options_maxprint = maxprint_input->value (); options_keepsource = keepsource_input->itemData (keepsource_input->currentIndex ()).toBool (); options_keepsourcepkgs = keepsourcepkgs_input->itemData (keepsourcepkgs_input->currentIndex ()).toBool (); options_expressions = expressions_input->value (); options_digits = digits_input->value (); options_checkbounds = checkbounds_input->itemData (checkbounds_input->currentIndex ()).toBool (); options_editor = editor_input->currentText (); options_pager = pager_input->currentText (); options_further = further_input->toPlainText (); #ifdef Q_WS_WIN options_internet2 = internet2_input->isChecked (); #endif // apply run time options in R QStringList commands = makeRRunTimeOptionCommands (); for (QStringList::const_iterator it = commands.begin (); it != commands.end (); ++it) { RKGlobals::rInterface ()->issueCommand (*it, RCommand::App, QString::null, 0, 0, commandChain ()); } } //static QStringList RKSettingsModuleR::makeRRunTimeOptionCommands () { QStringList list; QString tf; list.append ("options (OutDec=\"" + options_outdec.left (1) + "\")\n"); list.append ("options (width=" + QString::number (options_width) + ")\n"); list.append ("options (warn=" + QString::number (options_warn) + ")\n"); list.append ("options (max.print=" + QString::number (options_maxprint) + ")\n"); list.append ("options (warnings.length=" + QString::number (options_warningslength) + ")\n"); if (options_keepsource) tf = "TRUE"; else tf = "FALSE"; list.append ("options (keep.source=" + tf + ")\n"); if (options_keepsourcepkgs) tf = "TRUE"; else tf = "FALSE"; list.append ("options (keep.source.pkgs=" + tf + ")\n"); list.append ("options (expressions=" + QString::number (options_expressions) + ")\n"); list.append ("options (digits=" + QString::number (options_digits) + ")\n"); if (options_checkbounds) tf = "TRUE"; else tf = "FALSE"; list.append ("options (checkbounds=" + tf + ")\n"); if (options_editor == builtin_editor) list.append ("options (editor=rk.edit.files)\n"); else list.append ("options (editor=\"" + options_editor + "\")\n"); if (options_pager == builtin_editor) list.append ("options (pager=rk.show.files)\n"); else list.append ("options (pager=\"" + options_pager + "\")\n"); if (!options_further.isEmpty ()) list.append (options_further + "\n"); #ifdef Q_WS_WIN list.append (QString ("setInternet2 (") + (options_internet2 ? "TRUE)\n" : "FALSE)\n")); #endif #warning TODO make the following options configurable list.append ("options (device=\"rk.screen.device\")\n"); // register as interactive list.append ("try (deviceIsInteractive(name=\"rk.screen.device\"))\n"); list.append ("options (help_type=\"html\")\n"); // for R 2.10.0 and above list.append ("try ({options (htmlhelp=TRUE); options (chmhelp=FALSE)})\n"); // COMPAT: for R 2.9.x and below list.append ("options (browser=rk.show.html)\n"); return list; } void RKSettingsModuleR::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleR::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("R Settings"); cg.writeEntry ("OutDec", options_outdec); cg.writeEntry ("width", options_width); cg.writeEntry ("warn", options_warn); cg.writeEntry ("maxprint", options_maxprint); cg.writeEntry ("warnings.length", options_warningslength); cg.writeEntry ("keep.source", options_keepsource); cg.writeEntry ("keep.source.pkgs", options_keepsourcepkgs); cg.writeEntry ("expressions", options_expressions); cg.writeEntry ("digits", options_digits); cg.writeEntry ("check.bounds", options_checkbounds); cg.writeEntry ("editor", options_editor); cg.writeEntry ("pager", options_pager); cg.writeEntry ("further init commands", options_further); #ifdef Q_WS_WIN cg.writeEntry ("internet2", options_internet2); #endif } void RKSettingsModuleR::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("R Settings"); options_outdec = cg.readEntry ("OutDec", "."); options_width = cg.readEntry ("width", 80); options_warn = cg.readEntry ("warn", 0); options_maxprint = cg.readEntry ("max.print", 99999); options_warningslength = cg.readEntry ("warnings.length", 1000); options_keepsource = cg.readEntry ("keep.source", true); options_keepsourcepkgs = cg.readEntry ("keep.source.pkgs", false); options_expressions = cg.readEntry ("expressions", 5000); options_digits = cg.readEntry ("digits", 7); options_checkbounds = cg.readEntry ("check.bounds", false); options_editor = cg.readEntry ("editor", builtin_editor); options_pager = cg.readEntry ("pager", builtin_editor); options_further = cg.readEntry ("further init commands", QString ()); #ifdef Q_WS_WIN options_internet2 = cg.readEntry ("internet2", false); #endif } //################################################# //############### RKSettingsModuleRPackages ################ //################################################# // static members QStringList RKSettingsModuleRPackages::liblocs; QStringList RKSettingsModuleRPackages::defaultliblocs; bool RKSettingsModuleRPackages::archive_packages; bool RKSettingsModuleRPackages::source_packages; QStringList RKSettingsModuleRPackages::package_repositories; QString RKSettingsModuleRPackages::essential_packages = QString ("base\nmethods\nutils\ngrDevices\ngraphics\nrkward"); QString RKSettingsModuleRPackages::cran_mirror_url; RKSettingsModuleRPackages::RKSettingsModuleRPackages (RKSettings *gui, QWidget *parent) : RKSettingsModule(gui, parent), RCommandReceiver () { RK_TRACE (SETTINGS); QVBoxLayout *main_vbox = new QVBoxLayout (this); main_vbox->addSpacing (2*RKGlobals::spacingHint ()); main_vbox->addWidget (new QLabel (i18n ("CRAN download mirror (leave empty to be prompted once each session):"), this)); QHBoxLayout* hbox = new QHBoxLayout (); main_vbox->addLayout (hbox); cran_mirror_input = new QLineEdit (cran_mirror_url, this); if (cran_mirror_url == "@CRAN@") cran_mirror_input->clear (); connect (cran_mirror_input, SIGNAL (textChanged(const QString&)), this, SLOT (settingChanged())); hbox->addWidget (cran_mirror_input); QPushButton* cran_mirror_button = new QPushButton (i18n ("Select mirror"), this); connect (cran_mirror_button, SIGNAL (clicked()), this, SLOT (selectCRANMirror())); hbox->addWidget (cran_mirror_button); repository_selector = new MultiStringSelector (i18n ("Additional package repositories (where libraries are downloaded from)"), this); repository_selector->setValues (package_repositories); connect (repository_selector, SIGNAL (listChanged ()), this, SLOT (settingChanged ())); connect (repository_selector, SIGNAL (getNewStrings (QStringList*)), this, SLOT (addRepository (QStringList*))); main_vbox->addWidget (repository_selector); archive_packages_box = new QCheckBox (i18n ("Archive downloaded packages"), this); archive_packages_box->setChecked (archive_packages); connect (archive_packages_box, SIGNAL (stateChanged (int)), this, SLOT (settingChanged())); main_vbox->addWidget (archive_packages_box); #if defined Q_WS_WIN || defined Q_WS_MAC source_packages_box = new QCheckBox (i18n ("Build packages from source"), this); source_packages_box->setChecked (source_packages); #else source_packages_box = new QCheckBox (i18n ("Build packages from source (not configurable on this platform)"), this); source_packages_box->setChecked (true); source_packages_box->setEnabled (false); #endif RKCommonFunctions::setTips (QString ("

    %1

    ").arg (i18n ("Installing packages from pre-compiled binaries (if available) is generally faster, and does not require an installation of development tools and libraries. On the other hand, building packages from source provides best compatibility. On Mac OS X and Linux, building packages from source is currently recommended.")), source_packages_box); connect (source_packages_box, SIGNAL (stateChanged (int)), this, SLOT (settingChanged())); main_vbox->addWidget (source_packages_box); main_vbox->addStretch (); libloc_selector = new MultiStringSelector (i18n ("R Library locations (where libraries get installed to, locally)"), this); libloc_selector->setValues (liblocs); connect (libloc_selector, SIGNAL (listChanged ()), this, SLOT (settingChanged ())); connect (libloc_selector, SIGNAL (getNewStrings (QStringList*)), this, SLOT (addLibLoc (QStringList*))); main_vbox->addWidget (libloc_selector); QLabel *label = new QLabel (i18n ("Note: The startup defaults will always be used in addition to the locations you specify in this list"), this); main_vbox->addWidget (label); main_vbox->addStretch (); } RKSettingsModuleRPackages::~RKSettingsModuleRPackages () { RK_TRACE (SETTINGS); } void RKSettingsModuleRPackages::addLibraryLocation (const QString& new_loc, RCommandChain *chain) { RK_TRACE (SETTINGS); if (!libraryLocations ().contains (new_loc)) liblocs.prepend (new_loc); // update the backend in any case. User might have changed liblocs, there. RKGlobals::rInterface ()->issueCommand (".libPaths (unique (c (" + RObject::rQuote (new_loc) + ", .libPaths ())))", RCommand::App | RCommand::Sync, QString (), 0, 0, chain); } void RKSettingsModuleRPackages::settingChanged () { RK_TRACE (SETTINGS); change (); } void RKSettingsModuleRPackages::addLibLoc (QStringList *string_list) { RK_TRACE (SETTINGS); QString new_string = KFileDialog::getExistingDirectory (KUrl (), this, i18n ("Add R Library Directory")); if (!new_string.isEmpty ()) { (*string_list).append (new_string); } } void RKSettingsModuleRPackages::addRepository (QStringList *string_list) { RK_TRACE (SETTINGS); QString new_string = KInputDialog::getText (i18n ("Add repository"), i18n ("Add URL of new repository"), QString::null, 0, this); (*string_list).append (new_string); } QString RKSettingsModuleRPackages::caption () { RK_TRACE (SETTINGS); return (i18n ("R-Packages")); } #define SELECT_CRAN_MIRROR_COMMAND 123 void RKSettingsModuleRPackages::selectCRANMirror () { RK_TRACE (SETTINGS); QString title = i18n ("Select CRAN mirror"); RCommand* command = new RCommand ("rk.select.CRAN.mirror()\n", RCommand::App | RCommand::GetStringVector, title, this, SELECT_CRAN_MIRROR_COMMAND); RKProgressControl* control = new RKProgressControl (this, title, title, RKProgressControl::CancellableProgress); control->addRCommand (command, true); RKGlobals::rInterface ()->issueCommand (command); control->doModal (true); } void RKSettingsModuleRPackages::rCommandDone (RCommand *command) { RK_TRACE (SETTINGS); if (command->getFlags () == SELECT_CRAN_MIRROR_COMMAND) { if (command->succeeded ()) { RK_ASSERT (command->getDataLength () >= 1); cran_mirror_input->setText (command->stringVector ().value (0)); } } else { RK_ASSERT (false); } } QString RKSettingsModuleRPackages::libLocsCommand () { RK_TRACE (SETTINGS); QString command = ".libPaths (unique (c ("; bool first = true; QStringList ll = libraryLocations (); foreach (const QString libloc, ll) { if (first) first = false; else command.append (", "); command.append (RObject::rQuote (libloc)); } command.append (")))"); return command; } //static QString RKSettingsModuleRPackages::pkgTypeOption () { QString ret; #if defined Q_WS_WIN || defined Q_WS_MAC ret.append ("options (pkgType=\""); if (source_packages) ret.append ("source"); # if defined Q_WS_WIN else ret.append ("win.binary"); # else else ret.append ("mac.binary.leopard"); # endif ret.append ("\")\n"); #endif return ret; } //static QStringList RKSettingsModuleRPackages::makeRRunTimeOptionCommands () { RK_TRACE (SETTINGS); QStringList list; // package repositories QString command = "options (repos=c (CRAN=" + RObject::rQuote (cran_mirror_url); for (QStringList::const_iterator it = package_repositories.begin (); it != package_repositories.end (); ++it) { command.append (", " + RObject::rQuote (*it)); } list.append (command + "))\n"); #if defined Q_WS_WIN || defined Q_WS_MAC list.append (pkgTypeOption ()); #endif // library locations list.append (libLocsCommand ()); return list; } void RKSettingsModuleRPackages::applyChanges () { RK_TRACE (SETTINGS); cran_mirror_url = cran_mirror_input->text (); if (cran_mirror_url.isEmpty ()) cran_mirror_url = "@CRAN@"; archive_packages = archive_packages_box->isChecked (); source_packages = source_packages_box->isChecked (); package_repositories = repository_selector->getValues (); liblocs = libloc_selector->getValues (); // apply options in R QStringList commands = makeRRunTimeOptionCommands (); for (QStringList::const_iterator it = commands.begin (); it != commands.end (); ++it) { RKGlobals::rInterface ()->issueCommand (*it, RCommand::App, QString::null, 0, 0, commandChain ()); } } void RKSettingsModuleRPackages::save (KConfig *config) { RK_TRACE (SETTINGS); saveSettings (config); } void RKSettingsModuleRPackages::saveSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("R Settings"); cg.writeEntry ("CRAN mirror url", cran_mirror_url); cg.writeEntry ("archive packages", archive_packages); cg.writeEntry ("source_packages", source_packages); cg.writeEntry ("Repositories", package_repositories); cg.writeEntry ("LibraryLocations", liblocs); } void RKSettingsModuleRPackages::loadSettings (KConfig *config) { RK_TRACE (SETTINGS); KConfigGroup cg = config->group ("R Settings"); cran_mirror_url = cg.readEntry ("CRAN mirror url", "@CRAN@"); const QString rkward_repo ("http://rkward.sf.net/R/"); package_repositories = cg.readEntry ("Repositories", QStringList (rkward_repo)); if (RKSettingsModuleGeneral::storedConfigVersion () <= RKSettingsModuleGeneral::RKWardConfig_Pre0_5_7) { package_repositories.removeAll ("@CRAN@"); // COMPAT: Cran mirror was part of this list before 0.5.3 package_repositories.append (rkward_repo); } liblocs = cg.readEntry ("LibraryLocations", QStringList ()); archive_packages = cg.readEntry ("archive packages", false); #if defined Q_WS_WIN || defined Q_WS_MAC # if defined USE_BINARY_PACKAGES # define USE_SOURCE_PACKAGES false # else # define USE_SOURCE_PACKAGES true #endif source_packages = cg.readEntry ("source packages", USE_SOURCE_PACKAGES); if (USE_SOURCE_PACKAGES && (RKSettingsModuleGeneral::storedConfigVersion () < RKSettingsModuleGeneral::RKWardConfig_0_6_1)) { // revert default on MacOSX, even if a previous stored setting exists source_packages = true; } #else source_packages = true; #endif } #include "rksettingsmoduler.moc" rkward-0.6.1/rkward/resource.ver.in0000644000175000017500000000002312124345416016621 0ustar thomasthomas@RKVERSION_NUMBER@ rkward-0.6.1/rkward/rkwardapplication.cpp0000644000175000017500000001464312124345411020101 0ustar thomasthomas/*************************************************************************** rkwardapplication - description ------------------- begin : Sun Nov 26 2006 copyright : (C) 2006, 2007, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkwardapplication.h" #include "windows/rkmdiwindow.h" #ifdef Q_WS_WIN # include #elif defined Q_WS_MAC # warning "Graph window capturing is not supported on Mac OS native, yet. Consider using X11." #else # include # include # include # include # include //static Atom wm_name_property; #endif //Q_WS_WIN #include #include "debug.h" #warning TODO: We could really use the detection logic from windows for x11, too. It seems much easier. #ifdef Q_WS_WIN #include namespace RKWardApplicationPrivate { QList toplevel_windows; BOOL CALLBACK EnumWindowsCallback (HWND hwnd, LPARAM) { toplevel_windows.append (hwnd); return true; } void updateToplevelWindowList () { RK_TRACE (APP); toplevel_windows.clear (); EnumWindows (EnumWindowsCallback, 0); }; } #endif //Q_WS_WIN //static RKWardApplication *RKWardApplication::rkapp = 0; RKWardApplication::RKWardApplication () : KApplication () { //RK_TRACE (APP); // would be called before initialization of debug-level RK_ASSERT (!rkapp); // Don't complain when linking rkward://-pages from Rd pages KAuthorized::allowUrlAction ("redirect", KUrl ("http://"), KUrl ("rkward://")); // Don't complain when trying to open help pages KAuthorized::allowUrlAction ("redirect", KUrl ("rkward://"), KUrl ("help:")); rkapp = this; detect_x11_creations = false; #ifdef Q_WS_X11 wm_name_property = XInternAtom (QX11Info::display (), "WM_NAME", true); #endif //Q_WS_X11 } RKWardApplication::~RKWardApplication () { RK_TRACE (APP); } RKWardApplication *RKWardApplication::getApp () { RK_TRACE (APP); RK_ASSERT (rkapp == KApplication::kApplication ()); return rkapp; } void RKWardApplication::startWindowCreationDetection () { RK_TRACE (APP); RK_ASSERT (!detect_x11_creations); created_window = 0; detect_x11_creations = true; #ifdef Q_WS_WIN RKWardApplicationPrivate::updateToplevelWindowList (); #elif defined Q_WS_X11 XSelectInput (QX11Info::display (), QX11Info::appRootWindow (), SubstructureNotifyMask); syncX (); // this is to make sure we don't miss out on the window creation (if it happens very early). Testing shows, we really need this. #endif } WId RKWardApplication::endWindowCreationDetection () { RK_TRACE (APP); RK_ASSERT (detect_x11_creations); #ifdef Q_WS_WIN QList old_windows = RKWardApplicationPrivate::toplevel_windows; RKWardApplicationPrivate::updateToplevelWindowList (); QList candidate_windows = RKWardApplicationPrivate::toplevel_windows; detect_x11_creations = false; // remove all windows that existed before the call to startWindowCreationDetection for (int i = 0; i < old_windows.size (); ++i) { candidate_windows.removeAll (old_windows[i]); } // ideally we have a single candidate remaining, now, but sometimes, additional // invisible windows are created somehow (probably by R's graphapp) for (int i = 0; i < candidate_windows.size (); ++i) { HWND hwnd = candidate_windows[i]; if ((!IsWindow(hwnd)) || (!IsWindowVisible(hwnd))) { candidate_windows.removeAt (i); --i; } } // we could do some more checking, e.g. based on whether the window belongs to our // own process, and whether it appears to be of a sane size, but for now, we keep // things simple. if (candidate_windows.size ()) { RK_ASSERT (candidate_windows.size () < 2); return candidate_windows[0]; } return 0; #elif defined Q_WS_X11 if (!created_window) { // we did not see the window, yet? Maybe the event simply hasn't been processed, yet. syncX (); processEvents (); } detect_x11_creations = false; XSelectInput (QX11Info::display (), QX11Info::appRootWindow (), NoEventMask); return created_window; #else return 0; #endif } #ifdef Q_WS_X11 void RKWardApplication::registerNameWatcher (WId watched, RKMDIWindow *watcher) { RK_TRACE (APP); RK_ASSERT (!name_watchers_list.contains (watched)); XSelectInput (QX11Info::display (), watched, PropertyChangeMask); name_watchers_list.insert (watched, watcher); } void RKWardApplication::unregisterNameWatcher (WId watched) { RK_TRACE (APP); RK_ASSERT (name_watchers_list.contains (watched)); XSelectInput (QX11Info::display (), watched, NoEventMask); name_watchers_list.remove (watched); } bool RKWardApplication::x11EventFilter (XEvent *e) { if (detect_x11_creations) { if (e->type == CreateNotify) { if (e->xcreatewindow.parent == QX11Info::appRootWindow ()) { KWindowInfo info = KWindowInfo (e->xcreatewindow.window, NET::WMName | NET::WMWindowType); // at this point, we used to check, whether this window has some name or another. This heuristic allowed to sieve out helper windows of the window manager. However, since R 2.8.0, sometimes the window is mapped, before it has been given a name. // Now we rely on the fact (we hope it *is* a fact), that the device window is always the first one created. if ((info.windowType (0xFFFF) != 0) && (!created_window)) { created_window = e->xcreatewindow.window; return true; } } else { RK_ASSERT (false); } } } if (e->type == PropertyNotify) { if (e->xproperty.atom == wm_name_property) { if (name_watchers_list.contains (e->xproperty.window)) { KWindowInfo wininfo = KWindowInfo (e->xproperty.window, NET::WMName); name_watchers_list[e->xproperty.window]->setCaption (wininfo.name ()); return true; } } } return KApplication::x11EventFilter (e); } #endif // Q_WS_X11 rkward-0.6.1/rkward/dataeditor/0000755000175000017500000000000012124345410015766 5ustar thomasthomasrkward-0.6.1/rkward/dataeditor/CMakeLists.txt0000644000175000017500000000225012124345410020525 0ustar thomasthomasINCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### SET(dataeditor_STAT_SRCS twintable.cpp twintablemember.cpp rkeditor.cpp rkeditordataframe.cpp rkvareditmodel.cpp rktextmatrix.cpp ) QT4_AUTOMOC(${dataeditor_STAT_SRCS}) ADD_LIBRARY(dataeditor STATIC ${dataeditor_STAT_SRCS}) ########### install files ############### INSTALL(FILES rkeditordataframepart.rc DESTINATION ${DATA_INSTALL_DIR}/rkward ) #original Makefile.am contents follow: #INCLUDES = $(all_includes) #METASOURCES = AUTO #noinst_LIBRARIES = libdataeditor.a #libdataeditor_a_SOURCES = twintable.cpp twintablemember.cpp rkdrag.cpp \ # rkeditor.cpp rkeditordataframe.cpp twintabledatamember.cpp twintablemetamember.cpp \ # celleditor.cpp editlabelsdialog.cpp editformatdialog.cpp rkeditordataframepart.cpp #noinst_HEADERS = rkdrag.h twintable.h twintablemember.h rkeditor.h \ # rkeditordataframe.h twintabledatamember.h twintablemetamember.h celleditor.h \ # editlabelsdialog.h editformatdialog.h rkeditordataframepart.h # #rcdir = $(kde_datadir)/rkward #rc_DATA = rkeditordataframepart.rc rkward-0.6.1/rkward/dataeditor/rkeditordataframepart.rc0000644000175000017500000000241212124345410022672 0ustar thomasthomas &Edit rkward-0.6.1/rkward/dataeditor/rkvareditmodel.h0000644000175000017500000002335312124345410021161 0ustar thomasthomas/*************************************************************************** rkvareditmodel - description ------------------- begin : Mon Nov 05 2007 copyright : (C) 2007, 2010, 2011 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKVAREDITMODEL #define RKVAREDITMODEL #include #include #include #include "rktextmatrix.h" #include "../core/rkvariable.h" #include "../core/rkmodificationtracker.h" class RKVarEditMetaModel; class RCommandChain; class RKEditor; class RKRowNames; /** Base class for RKVarEditModel and RKVarEditMetaModel. Defines a common interface for copy and paste operations. Models might reimplement these functions for more efficiency. @author Thomas Friedrichsmeier */ class RKVarEditModelBase : public QAbstractTableModel { public: RKVarEditModelBase (QObject *parent) : QAbstractTableModel (parent) {}; virtual ~RKVarEditModelBase () {}; virtual RKTextMatrix getTextMatrix (const QItemSelectionRange& range) const = 0; virtual void blankRange (const QItemSelectionRange& range) = 0; virtual void setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to = QItemSelectionRange ()) = 0; virtual int trueRows () const = 0; virtual int trueCols () const = 0; int firstRealColumn () const { return var_col_offset; }; int var_col_offset; }; /** This class represents a collection of RKVariables of uniform length (typically a data.frame) suitable for editing in a model/view editor such as QTableView. Probably it will only ever support editing a single RKVariable, though, as it is not possible to ensure uniform length outside of a data.frame. For a data.frame use RKVarEditDataFrameModel . Since the real data storage is in RKVariable, it is ok (and recommended) to create separate models for separate editors/viewers, even if the objects in question are the same. */ class RKVarEditModel : public RKVarEditModelBase, public RObjectListener { Q_OBJECT public: RKVarEditModel (QObject *parent); ~RKVarEditModel (); /** set the editor that is using this model. This is useful to find out, e.g. which window should be raised, when calling "Edit" on an object represented in this data-model. Also, the editor will be notified, if all objects in the model have been removed. */ void setEditor (RKEditor* editor) { myeditor = editor; }; /** see setEditor () */ RKEditor* getEditor () const { return myeditor; }; /** Add an object to the model at the given index. Calls this only once, unless from an RKVarEditDataFrameModel. You should add at least one object, **before** you add this model to any view. @param index position to insert at, or -1 to append the item @param object the objects to insert */ void addObject (int index, RKVariable* object); /** Return a pointer to the meta model. The meta model is created the first time this function is called. */ RKVarEditMetaModel* getMetaModel (); // QAbstractTableModel implementations bool insertRows (int row, int count, const QModelIndex& parent = QModelIndex()); bool removeRows (int row, int count, const QModelIndex& parent = QModelIndex()); int rowCount (const QModelIndex& parent = QModelIndex()) const; int columnCount (const QModelIndex& parent = QModelIndex()) const; QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) const; Qt::ItemFlags flags (const QModelIndex& index) const; bool setData (const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; RKTextMatrix getTextMatrix (const QItemSelectionRange& range) const; void blankRange (const QItemSelectionRange& range); void setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to = QItemSelectionRange ()); int trueCols () const { return objects.size (); }; int trueRows () const { return (objects.isEmpty () ? 0 : objects[0]->getLength ()); }; void lockHeader (bool lock) { header_locked = lock; }; virtual void restoreObject (RObject* object, RCommandChain* chain); void objectMetaChanged (RObject* changed); void objectDataChanged (RObject* object, const RObject::ChangeSet *changes); RKVariable* getObject (int index) const; signals: void modelDepleted (); void hasDuplicates (const QStringList& dupes); private slots: void checkDuplicatesNow (); void doResetNow (); private: bool reset_scheduled; void scheduleReset (); protected: friend class RKVarEditMetaModel; QList objects; RKRowNames *rownames; /** very simple convenience function to return the number of true cols + trailing cols */ int apparentCols () const { return (trueCols () + trailing_cols); }; /** very simple convenience function to return the number of true rows + trailing rows */ int apparentRows () const { return (trueRows () + trailing_rows); }; /** Receives notifications of object removals. Takes care of removing the object from the list. */ void objectRemoved (RObject* object); /** insert new columns at index. Default implementation does nothing. To be implemented in subclasses */ virtual void doInsertColumns (int index, int count); virtual void doInsertRowsInBackend (int row, int count); virtual void doRemoveRowsInBackend (int row, int count); /** Check whether there are any duplicate names in the model. Actual check is delayed until the next iteration of the event loop. If a duplicate is found, hasDuplicates(const QStringList&) is emitted. */ void checkDuplicates (); bool duplicate_check_triggered; int trailing_rows; int trailing_cols; int edit_blocks; bool header_locked; RKVarEditMetaModel* meta_model; RKEditor* myeditor; }; /** Represents the meta information portion belonging to an RKVarEditModel. Implemented in a separate class for technical reasons, only (so this info can be displayed in a separate QTableView). This model mostly acts as a slave of an RKVarEditModel. You will not need to call any functions directly except from the RKVarEditModel, or an item view. */ class RKVarEditMetaModel : public RKVarEditModelBase { Q_OBJECT public: enum Rows { NameRow=0, LabelRow, TypeRow, FormatRow, LevelsRow, RowCount = LevelsRow + 1 }; // QAbstractTableModel implementations int rowCount (const QModelIndex& parent = QModelIndex()) const; int columnCount (const QModelIndex& parent = QModelIndex()) const; QVariant data (const QModelIndex& index, int role = Qt::DisplayRole) const; Qt::ItemFlags flags (const QModelIndex& index) const; bool setData (const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; RKTextMatrix getTextMatrix (const QItemSelectionRange& range) const; void blankRange (const QItemSelectionRange& range); void setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to = QItemSelectionRange ()); int trueCols () const { return data_model->trueCols (); }; int trueRows () const { return RowCount; }; RObject::ValueLabels getValueLabels (int column) const; void setValueLabels (int column, const RObject::ValueLabels& labels); RKVariable* getObject (int index) const { return data_model->getObject (index); }; RKVarEditModel* getDataModel () const { return data_model; }; protected: friend class RKVarEditModel; RKVarEditMetaModel (RKVarEditModel* data_model); ~RKVarEditMetaModel (); void beginAddDataObject (int index); void endAddDataObject (); void beginRemoveDataObject (int index); void endRemoveDataObject (); void objectMetaChanged (int atcolumn); RKVarEditModel* data_model; }; class RKVarEditDataFrameModel : public RKVarEditModel { Q_OBJECT public: RKVarEditDataFrameModel (RContainerObject* dataframe, QObject* parent); /** ctor that constructs a new empty data frame */ RKVarEditDataFrameModel (const QString& validized_name, RContainerObject* parent_object, RCommandChain* chain, int initial_cols, QObject* parent); ~RKVarEditDataFrameModel (); bool insertColumns (int column, int count, const QModelIndex& parent = QModelIndex()); bool removeColumns (int column, int count, const QModelIndex& parent = QModelIndex()); RContainerObject* getObject () const { return dataframe; }; void restoreObject (RObject* object, RCommandChain* chain); signals: void modelObjectDestroyed (); protected: void doInsertColumns (int index, int count); /** reimplemented from RKVarEditModel to listen for the dataframe object as well */ void objectRemoved (RObject* object); /** receives notifications of new objects added to this data.frame */ void childAdded (int index, RObject* parent); /** receives notifications of object position changes inside this data.frame */ void childMoved (int old_index, int new_index, RObject* parent); void doInsertRowsInBackend (int row, int count); void doRemoveRowsInBackend (int row, int count); RContainerObject* dataframe; void init (RContainerObject* dataframe); void pushTable (RCommandChain* sync_chain); }; #endif rkward-0.6.1/rkward/dataeditor/rktextmatrix.h0000644000175000017500000000575112124345410020715 0ustar thomasthomas/*************************************************************************** rktextmatrix - description ------------------- begin : Thu Nov 08 2007 copyright : (C) 2007, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKTEXTMATRIX_H #define RKTEXTMATRIX_H #include /** This class is meant to assist paste operations in tables. Most importantly, it provides methods to map to and from text/tab-separated-values format, and it does not hickup in case of ragged length data. @author Thomas Friedrichsmeier */ class RKTextMatrix { public: RKTextMatrix (); /** copy constructor. Since we're mostly just copying a QList (which is implicitely shared) and two ints, this is pretty fast. */ RKTextMatrix (const RKTextMatrix& copy); ~RKTextMatrix (); static RKTextMatrix matrixFromClipboard (); static RKTextMatrix matrixFromSeparatedValues (const QString& text, const QRegExp& tab=QRegExp ("\t"), const QChar& brk='\n'); QString toTabSeparatedValues () const; void copyToClipboard () const; void setText (int row, int col, const QString& text); /** set an entire column at once. This takes a copy of the data, so you will still have to delete it when done. TODO: convert to using QStringList */ void setColumn (int column, const QString* textarray, int length); /** set an entire row at once. */ void appendRow (const QStringList& row); QString getText (int row, int col) const; /** get the contents of an entire column at once. It's your responsibility to delete the data when done. The returned list has length numRows() */ QStringList getColumn (int col) const; /** get the contents of an entire row at once */ QStringList getRow (int row) const; /** Return a transformed matrix. Not optimized for performance! @param reverse_h Reverse order of columns @param reverse_v Reverse order of rows @param transpose Switch rows against columns */ RKTextMatrix transformed (bool reverse_h, bool reverse_v, bool transpose) const; void clear (); bool isEmpty () const; int numColumns () const { return colcount; } int numRows () const { return rows.size (); } private: QList rows; inline void upsize (int newmaxrow, int newmaxcol); int colcount; }; #endif rkward-0.6.1/rkward/dataeditor/rktextmatrix.cpp0000644000175000017500000001333712124345410021247 0ustar thomasthomas/*************************************************************************** rktextmatrix - description ------------------- begin : Thu Nov 08 2007 copyright : (C) 2007, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rktextmatrix.h" #include #include #include #include "../debug.h" RKTextMatrix::RKTextMatrix () { RK_TRACE (EDITOR); clear (); } RKTextMatrix::RKTextMatrix (const RKTextMatrix& copy) { RK_TRACE (EDITOR); colcount = copy.colcount; rows = copy.rows; } RKTextMatrix::~RKTextMatrix () { RK_TRACE (EDITOR); } // static RKTextMatrix RKTextMatrix::matrixFromClipboard () { RK_TRACE (EDITOR); const QMimeData* data = QApplication::clipboard ()->mimeData (); // actually, we don't care, whether tsv or plain gets pasted - it's both // treated the same. We should however encourage external senders to // provided the two in order. if (data->hasFormat ("text/tab-separated-values")) { RK_DEBUG (EDITOR, DL_DEBUG, "paste tsv"); return (matrixFromSeparatedValues (QString::fromLocal8Bit (data->data ("text/tab-separated-values")))); } else if (data->hasText ()) { RK_DEBUG (EDITOR, DL_DEBUG, "paste plain text"); return (matrixFromSeparatedValues (data->text ())); } return RKTextMatrix (); } // static RKTextMatrix RKTextMatrix::matrixFromSeparatedValues (const QString& text, const QRegExp& tab, const QChar& brk) { RK_TRACE (EDITOR); RKTextMatrix ret; if (text.isEmpty ()) return ret; QStringList textrows = text.split (brk); if (textrows.last ().isEmpty ()) textrows.removeLast (); // some apps append a trailing line break for (int i = 0; i < textrows.size (); ++i) { QStringList split = textrows[i].split (tab); ret.appendRow (split); } return ret; } QString RKTextMatrix::toTabSeparatedValues () const { RK_TRACE (EDITOR); QString ret; for (int row = 0; row < rows.size (); ++row) { if (row) ret.append ('\n'); ret.append (rows[row].join (QChar ('\t'))); } return ret; } void RKTextMatrix::copyToClipboard () const { RK_TRACE (EDITOR); QString text = toTabSeparatedValues (); QMimeData* data = new QMimeData (); data->setText (text); data->setData ("text/tab-separated-values", text.toLocal8Bit ()); QApplication::clipboard()->setMimeData (data); } RKTextMatrix RKTextMatrix::transformed (bool reverse_h, bool reverse_v, bool transpose) const { RK_TRACE (EDITOR); RKTextMatrix ret; if (isEmpty ()) return ret; // empty matrices would violate some assumptions of the following code const int maxrow = rows.size () - 1; // for easier typing const int maxcol = rows[0].size () - 1; if (transpose) ret.upsize (maxcol, maxrow); // set dimensions from the start to save a few cycles else ret.upsize (maxrow, maxcol); for (int row=0; row <= maxrow; ++row) { for (int col=0; col <= maxcol; ++col) { int dest_row = row; if (reverse_v) dest_row = maxrow - row; int dest_col = col; if (reverse_h) dest_col = maxcol - col; if (transpose) { int dummy = dest_row; dest_row = dest_col; dest_col = dummy; } ret.setText (dest_row, dest_col, rows[row][col]); } } return ret; } void RKTextMatrix::setText (int row, int col, const QString& text) { // RK_TRACE (EDITOR); upsize (row, col); rows[row][col] = text; } void RKTextMatrix::setColumn (int column, const QString* textarray, int length) { RK_TRACE (EDITOR); upsize (length - 1, column); for (int i = 0; i < length; ++i) { rows[i][column] = textarray[i]; } } void RKTextMatrix::appendRow (const QStringList& row) { RK_TRACE (EDITOR); QStringList _row = row; while (colcount > _row.size ()) _row.append (QString ()); rows.append (_row); upsize (rows.size ()-1, row.size ()-1); } QString RKTextMatrix::getText (int row, int col) const { // RK_TRACE (EDITOR); if (row > rows.size ()) return QString (); if (col > colcount) return QString (); return (rows[row][col]); } QStringList RKTextMatrix::getColumn (int col) const { RK_TRACE (EDITOR); if (col > colcount) { return QStringList (); } QStringList ret; #if QT_VERSION >= 0x040700 ret.reserve (rows.size ()); #endif for (int i = 0; i < rows.size (); ++i) { ret.append (rows[i][col]); } return ret; } QStringList RKTextMatrix::getRow (int row) const { RK_TRACE (EDITOR); if (row >= rows.size ()) return (QStringList ()); RK_ASSERT (rows[row].size () == colcount); return (rows[row]); } void RKTextMatrix::clear () { RK_TRACE (EDITOR); rows.clear (); colcount = 0; } bool RKTextMatrix::isEmpty () const { RK_TRACE (EDITOR); if (rows.isEmpty() || (colcount == 0)) return true; return false; } void RKTextMatrix::upsize (int newmaxrow, int newmaxcol) { // RK_TRACE (EDITOR); while (newmaxrow >= rows.size ()) { QStringList list; for (int i = 0; i < colcount; ++i) list.append (QString ()); rows.append(list); } if (newmaxcol >= colcount) { for (int i = 0; i < rows.size (); ++i) { while (newmaxcol >= rows[i].size ()) rows[i].append (QString()); } colcount = newmaxcol + 1; } } rkward-0.6.1/rkward/dataeditor/twintablemember.h0000644000175000017500000000503512124345410021323 0ustar thomasthomas/*************************************************************************** twintablemember.h - description ------------------- begin : Tue Oct 29 2002 copyright : (C) 2002, 2006, 2007, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef TWINTABLEMEMBER_H #define TWINTABLEMEMBER_H #include #include #include class TwinTable; class CellEditor; class RKVarEditModelBase; #include "../misc/rktableview.h" #include "rkeditor.h" /** One of the tables used in a TwinTable. @author Thomas Friedrichsmeier */ class TwinTableMember : public RKTableView { Q_OBJECT public: TwinTableMember (QWidget *parent); ~TwinTableMember (); TwinTableMember *getTwin () { return twin; }; /** ends editing. Actually it's just a simple wrapper around QTable::endEdit () */ void stopEditing (); void copy (); void paste (RKEditor::PasteMode mode); void setRKModel (RKVarEditModelBase* model); int trueRows () const; // re-implemented from RKTableView int trueColumns () const; // re-implemented from RKTableView public slots: /** blanks out the currently selected cells (or the currently active cell, if there is no selection) */ void blankSelected (); signals: void contextMenuRequest (int row, int col, const QPoint& pos); protected: TwinTableMember *twin; bool updating_twin; /** reimplemented from QTableView to also adjust the twin */ void scrollContentsBy (int dx, int dy); RKVarEditModelBase* mymodel; bool rw; friend class TwinTable; void setTwin (TwinTableMember *new_twin); protected slots: void handleContextMenuRequest (const QPoint& pos); void updateColWidth (int section, int old_w, int new_w); void tableSelectionChanged (const QItemSelection& selected, const QItemSelection& deselected); }; #endif rkward-0.6.1/rkward/dataeditor/twintablemember.cpp0000644000175000017500000001342512124345410021660 0ustar thomasthomas/*************************************************************************** twintablemember.cpp - description ------------------- begin : Tue Oct 29 2002 copyright : (C) 2002, 2006, 2007, 2009, 2010, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "twintablemember.h" #include #include #include #include "twintable.h" #include "rktextmatrix.h" #include "rkvareditmodel.h" #include "../debug.h" TwinTableMember::TwinTableMember (QWidget *parent) : RKTableView (parent){ RK_TRACE (EDITOR); rw = true; setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOn); setSelectionMode (QAbstractItemView::ContiguousSelection); verticalHeader ()->setContextMenuPolicy (Qt::CustomContextMenu); connect (verticalHeader (), SIGNAL (customContextMenuRequested(const QPoint&)), this, SLOT (handleContextMenuRequest(const QPoint&))); horizontalHeader ()->setContextMenuPolicy (Qt::CustomContextMenu); connect (horizontalHeader (), SIGNAL (customContextMenuRequested(const QPoint&)), this, SLOT (handleContextMenuRequest(const QPoint&))); setContextMenuPolicy (Qt::CustomContextMenu); connect (this, SIGNAL (customContextMenuRequested(const QPoint&)), this, SLOT (handleContextMenuRequest(const QPoint&))); updating_twin = false; connect (this, SIGNAL (blankSelectionRequest()), this, SLOT (blankSelected())); } TwinTableMember::~TwinTableMember(){ RK_TRACE (EDITOR); } void TwinTableMember::setRKModel (RKVarEditModelBase* model) { RK_TRACE (EDITOR); mymodel = model; setModel (model); // now we should also have a selectionModel() (but not before) connect (selectionModel (), SIGNAL (selectionChanged(const QItemSelection&,const QItemSelection&)), this, SLOT (tableSelectionChanged(const QItemSelection&,const QItemSelection&))); } void TwinTableMember::setTwin (TwinTableMember * new_twin) { RK_TRACE (EDITOR); twin = new_twin; // probably we only need this one way (metaview->dataview), but why not be safe, when it's so easy connect (twin->horizontalHeader (), SIGNAL (sectionResized(int,int,int)), this, SLOT (updateColWidth(int,int,int))); } void TwinTableMember::tableSelectionChanged (const QItemSelection& selected, const QItemSelection&) { RK_TRACE (EDITOR); RK_ASSERT (twin); if (!selected.isEmpty ()) twin->clearSelection (); } int TwinTableMember::trueColumns () const { return mymodel->trueCols (); } int TwinTableMember::trueRows () const { return mymodel->trueRows(); } void TwinTableMember::stopEditing () { RK_TRACE (EDITOR); // I wonder why Qt 4.3 doe not provide a function like this... if (state () != QAbstractItemView::EditingState) return; QModelIndex current = currentIndex (); setCurrentIndex (QModelIndex ()); setCurrentIndex (current); } void TwinTableMember::copy () { RK_TRACE (EDITOR); QItemSelectionRange range = getSelectionBoundaries (); if (range.isValid ()) { RKTextMatrix mat = mymodel->getTextMatrix (range); mat.copyToClipboard (); } } void TwinTableMember::blankSelected () { RK_TRACE (EDITOR); if (!rw) return; QItemSelectionRange range = getSelectionBoundaries (); if (range.isValid ()) mymodel->blankRange (range); } void TwinTableMember::paste (RKEditor::PasteMode mode) { RK_TRACE (EDITOR); if (!rw) return; RKTextMatrix pasted = RKTextMatrix::matrixFromClipboard (); QItemSelectionRange selrange = getSelectionBoundaries (); QItemSelectionRange limrange; if (mode == RKEditor::PasteToSelection) { limrange = selrange; } else if (mode == RKEditor::PasteToTable) { limrange = QItemSelectionRange (mymodel->index (0, 0), mymodel->index (mymodel->trueRows () - 1, mymodel->trueCols () - 1)); } // else: range not set means not confined = PasteAnywhere mymodel->setTextMatrix (selrange.topLeft (), pasted, limrange); } void TwinTableMember::scrollContentsBy (int dx, int dy) { RK_TRACE (EDITOR); if (updating_twin) return; updating_twin = true; RK_ASSERT (twin); QTableView::scrollContentsBy (dx, dy); twin->horizontalScrollBar ()->setValue (horizontalScrollBar ()->value ()); updating_twin = false; } void TwinTableMember::updateColWidth (int section, int, int new_w) { RK_TRACE (EDITOR); if (updating_twin) return; updating_twin = true; setColumnWidth (section, new_w); twin->setColumnWidth (section, new_w); updating_twin = false; } void TwinTableMember::handleContextMenuRequest (const QPoint& pos) { RK_TRACE (EDITOR); if (sender () == horizontalHeader ()) { int col = horizontalHeader ()->logicalIndexAt (pos); if (col >= 0) emit (contextMenuRequest (-1, col, horizontalHeader ()->mapToGlobal (pos))); } else if (sender () == verticalHeader ()) { int row = verticalHeader ()->logicalIndexAt (pos); if (row >= 0) emit (contextMenuRequest (row, -1, verticalHeader ()->mapToGlobal (pos))); } else { RK_ASSERT (sender () == this); int col = columnAt (pos.x ()); int row = rowAt (pos.y ()); if ((row < 0) || (col < 0)) { row = col = -2; // to differentiate from the headers, above } emit (contextMenuRequest (row, col, mapToGlobal (pos))); } } #include "twintablemember.moc" rkward-0.6.1/rkward/dataeditor/rkvareditmodel.cpp0000644000175000017500000007521312124345410021516 0ustar thomasthomas/*************************************************************************** rkvareditmodel - description ------------------- begin : Mon Nov 05 2007 copyright : (C) 2007, 2010, 2011, 2012 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkvareditmodel.h" #include #include #include #include #include "../core/rcontainerobject.h" #include "../core/rkmodificationtracker.h" #include "../core/rkrownames.h" #include "../rbackend/rinterface.h" #include "../rkglobals.h" #include "../debug.h" RKVarEditModel::RKVarEditModel (QObject *parent) : RKVarEditModelBase (parent), RObjectListener (RObjectListener::DataModel) { RK_TRACE (EDITOR); meta_model = 0; trailing_rows = trailing_cols = 0; var_col_offset = 0; edit_blocks = 0; rownames = 0; header_locked = false; duplicate_check_triggered = false; reset_scheduled = false; addNotificationType (RObjectListener::ObjectRemoved); addNotificationType (RObjectListener::MetaChanged); addNotificationType (RObjectListener::DataChanged); } RKVarEditModel::~RKVarEditModel () { RK_TRACE (EDITOR); for (int i = objects.size () - 1; i >= 0; --i) stopListenForObject (objects[i]); } RKVariable* RKVarEditModel::getObject (int index) const { RK_TRACE (EDITOR); if (index >= trueCols ()) { RK_ASSERT (false); return 0; } return objects[index]; } void RKVarEditModel::addObject (int index, RKVariable* object) { RK_TRACE (EDITOR); RK_ASSERT (object); if ((index < 0) || (index >= objects.size ())) index = objects.size (); beginInsertColumns (QModelIndex (), index, index); if (meta_model) meta_model->beginAddDataObject (index); if (object->isPending () && (!object->getLength ())) object->setLength (trueRows ()); // probably we just created it ourselves listenForObject (object); objects.insert (index, object); if (meta_model) meta_model->endAddDataObject (); endInsertColumns (); checkDuplicates (); } void RKVarEditModel::objectRemoved (RObject* object) { RK_TRACE (EDITOR); int index = objects.indexOf (static_cast (object)); // no check for isVariable needed. we only need to look up, if we have this object, and where. if (index < var_col_offset) { if (index < 0) return; // e.g. the data.frame object // the rownames object should only be deleted, when the whole data.frame is gone) RK_ASSERT (objects.size () <= var_col_offset); } beginRemoveColumns (QModelIndex (), index, index); if (meta_model) meta_model->beginRemoveDataObject (index); stopListenForObject (objects.takeAt (index)); if (meta_model) meta_model->endRemoveDataObject (); endRemoveColumns (); if (objects.size () <= var_col_offset) emit (modelDepleted ()); // editor may or may want to auto-destruct } void RKVarEditModel::checkDuplicates () { RK_TRACE (EDITOR); if (duplicate_check_triggered) return; duplicate_check_triggered = true; QTimer::singleShot (0, this, SLOT (checkDuplicatesNow())); } void RKVarEditModel::checkDuplicatesNow () { RK_TRACE (EDITOR); duplicate_check_triggered = false; QStringList dupes; for (int i = var_col_offset; i < objects.size (); ++i) { QString name = objects[i]->getShortName (); for (int j = i+1; j < objects.size (); ++j) { if (objects[j]->getShortName () == name) { if (objects[i]->getFullName () == objects[j]->getFullName ()) { dupes.append (objects[i]->getFullName ()); j = objects.size (); // break } } } } if (!dupes.isEmpty ()) emit (hasDuplicates (dupes)); } void RKVarEditModel::objectMetaChanged (RObject* changed) { RK_TRACE (EDITOR); int cindex = objects.indexOf (static_cast (changed)); // no check for isVariable needed. we only need to look up, if we have this object, and where. if (cindex < 0) return; // none of our buisiness if (meta_model) meta_model->objectMetaChanged (cindex); } void RKVarEditModel::scheduleReset () { RK_TRACE (EDITOR); if (!reset_scheduled) { reset_scheduled = true; QTimer::singleShot (0, this, SLOT (doResetNow())); #if QT_VERSION >= 0x040600 beginResetModel (); #endif } } void RKVarEditModel::doResetNow () { RK_TRACE (EDITOR); RK_ASSERT (reset_scheduled); reset_scheduled = false; #if QT_VERSION >= 0x040600 endResetModel (); #else reset (); #endif } void RKVarEditModel::objectDataChanged (RObject* object, const RObject::ChangeSet *changes) { RK_TRACE (EDITOR); int cindex = objects.indexOf (static_cast (object)); // no check for isVariable needed. we only need to look up, if we have this object, and where. if (cindex < 0) return; // none of our buisiness RK_ASSERT (changes); if (changes->full_reset) { scheduleReset (); return; } emit (dataChanged (index (changes->from_index, cindex), index (changes->to_index, cindex))); } void RKVarEditModel::doInsertColumns (int, int) { RK_TRACE (EDITOR); RK_ASSERT (false); // should be implemented in a subclass, or never called } RKVarEditMetaModel* RKVarEditModel::getMetaModel () { RK_TRACE (EDITOR); if (!meta_model) meta_model = new RKVarEditMetaModel (this); return meta_model; } bool RKVarEditModel::insertRows (int row, int count, const QModelIndex& parent) { RK_TRACE (EDITOR); if (edit_blocks || parent.isValid () || objects.isEmpty () || (row > apparentRows ())) { RK_ASSERT (false); return false; } if (row > trueRows ()) row = trueRows (); int lastrow = row+count - 1; RK_ASSERT (row >= 0); RK_ASSERT (lastrow >= row); beginInsertRows (QModelIndex (), row, row+count-1); doInsertRowsInBackend (row, count); for (int i=0; i < objects.size (); ++i) { // TODO: this does not emit any data change notifications to other editors objects[i]->insertRows (row, count); } endInsertRows (); return true; } bool RKVarEditModel::removeRows (int row, int count, const QModelIndex& parent) { RK_TRACE (EDITOR); int lastrow = row+count - 1; if (edit_blocks || parent.isValid () || objects.isEmpty () || (lastrow >= (apparentRows ()))) { RK_ASSERT (false); return false; } if (lastrow >= objects[0]->getLength ()) lastrow = objects[0]->getLength () - 1; RK_ASSERT (row >= 0); RK_ASSERT (lastrow >= row); beginRemoveRows (QModelIndex (), row, lastrow); doRemoveRowsInBackend (row, lastrow - row + 1); for (int i=0; i < objects.size (); ++i) { // TODO: this does not emit any data change notifications to other editors objects[i]->removeRows (row, lastrow); } endRemoveRows (); return true; } void RKVarEditModel::doInsertRowsInBackend (int, int) { RK_TRACE (EDITOR); // TODO: implement RK_ASSERT (false); } void RKVarEditModel::doRemoveRowsInBackend (int, int) { RK_TRACE (EDITOR); // TODO: implement RK_ASSERT (false); } int RKVarEditModel::rowCount (const QModelIndex& parent) const { RK_TRACE (EDITOR); if (parent.isValid ()) return 0; if (objects.isEmpty ()) { RK_ASSERT (false); return 0; } return (apparentRows ()); } int RKVarEditModel::columnCount (const QModelIndex& parent) const { RK_TRACE (EDITOR); if (parent.isValid ()) return 0; return (apparentCols ()); } QVariant RKVarEditModel::data (const QModelIndex& index, int role) const { RK_TRACE (EDITOR); if (!index.isValid ()) return QVariant (); int row = index.row (); int col = index.column (); if ((col >= apparentCols ()) || (row >= apparentRows ())) { RK_ASSERT (false); return QVariant (); } if (col < var_col_offset) { // TODO: make this look more like a normal header if (role == Qt::ForegroundRole) return (Qt::blue); } // on a trailing row / col if ((col >= objects.size ()) || (row >= objects[0]->getLength ())) { if (role == Qt::BackgroundRole) return (Qt::gray); if (role == Qt::ToolTipRole) { if (col >= objects.size ()) return (i18n ("Type on these fields to add new columns")); else return (i18n ("Type on these fields to add new rows")); } return QVariant (); } // a normal cell RKVariable *var = objects[col]; RK_ASSERT (var); if (role == Qt::DisplayRole) return var->getText (row, true); if (role == Qt::EditRole) return var->getText (row, false); RKVariable::Status status = var->cellStatus (row); if ((role == Qt::BackgroundRole)) { if (status == RKVariable::ValueInvalid) return (Qt::red); } else if (role == Qt::ToolTipRole) { if (status == RKVariable::ValueInvalid) return (i18n ("This value is not allowed, here")); } if ((role == Qt::ForegroundRole) && (status == RKVariable::ValueUnknown)) return (Qt::lightGray); if (role == Qt::TextAlignmentRole) { if (var->getAlignment () == RKVariable::AlignCellLeft) return ((int) Qt::AlignLeft | Qt::AlignVCenter); else return ((int) Qt::AlignRight | Qt::AlignVCenter); } return QVariant (); } Qt::ItemFlags RKVarEditModel::flags (const QModelIndex& index) const { RK_TRACE (EDITOR); Qt::ItemFlags flags = 0; if (!index.isValid ()) return flags; int row = index.row (); int col = index.column (); if ((col >= apparentCols ()) || (row >= apparentRows ())) { RK_ASSERT (false); return flags; } if ((col < var_col_offset) && header_locked) return flags; if (!edit_blocks) flags |= Qt::ItemIsEditable | Qt::ItemIsEnabled; if ((col < objects.size ()) && (row < objects[0]->getLength ())) flags |= Qt::ItemIsSelectable; return flags; } bool RKVarEditModel::setData (const QModelIndex& index, const QVariant& value, int role) { RK_TRACE (EDITOR); if (!index.isValid ()) return false; int row = index.row (); int col = index.column (); if (edit_blocks || (role != Qt::EditRole) || (col >= apparentCols ()) || (row >= apparentRows ())) { RK_ASSERT (false); return false; } if (col >= objects.size ()) { // trailing col // somebody should add a column for us doInsertColumns (objects.size (), 1); if (col >= objects.size ()) { // apparently, no column has been added in the above signal return false; } } if (row >= objects[0]->getLength ()) { // trailing row insertRows (objects[0]->getLength (), 1); } // edit of normal cells RKVariable* var = objects[col]; RK_ASSERT (var); var->setText (row, value.toString ()); return true; } QVariant RKVarEditModel::headerData (int section, Qt::Orientation orientation, int role) const { RK_TRACE (EDITOR); if (orientation == Qt::Horizontal) { if (role == Qt::DisplayRole) { if (section >= objects.size ()) return i18n ("#New Variable#"); if (section < var_col_offset) return i18n ("Row names"); return (QString::number (section - var_col_offset + 1)); } else if (role == Qt::BackgroundRole) { if ((section < objects.size ()) && objects[section]->hasInvalidFields ()) return QVariant (Qt::red); } else if ((role == Qt::ToolTipRole) || (role == Qt::StatusTipRole)) { if ((section < objects.size ()) && objects[section]->hasInvalidFields ()) return i18n ("This column contains one or more invalid fields"); } } else { if ((role == Qt::DisplayRole) && (section < rownames->getLength ())) { return rownames->getText (section); } } return QVariant (); } RKTextMatrix RKVarEditModel::getTextMatrix (const QItemSelectionRange& range) const { RK_TRACE (EDITOR); if ((!range.isValid ()) || objects.isEmpty ()) return RKTextMatrix (); // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); RKTextMatrix ret; int tcol = 0; for (int col = left; col <= right; ++col) { QString* data = objects[col]->getCharacter (top, bottom); RK_ASSERT (data); ret.setColumn (tcol, data, bottom - top + 1); delete [] data; ++tcol; } return ret; } void RKVarEditModel::blankRange (const QItemSelectionRange& range) { RK_TRACE (EDITOR); if ((!range.isValid ()) || objects.isEmpty ()) return; // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); for (int col = left; col <= right; ++col) { RKVariable* var = objects[col]; for (int row = top; row <= bottom; ++row) { var->setText (row, QString ()); } } } void RKVarEditModel::setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to) { RK_TRACE (EDITOR); // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. Single cells will be set using setData() if ((!offset.isValid ()) || text.isEmpty ()) return; int top = offset.row (); int left = offset.column (); int bottom = top + text.numRows () - 1; int right = left + text.numColumns () - 1; if (confine_to.isValid ()) { if (confine_to.top () > top) return; // can't confine top-left. Should have been set by caller if (confine_to.left () > left) return; bottom = qMin (confine_to.bottom (), bottom); right = qMin (confine_to.right (), right); } // TODO: some models might not support column addition. if (right >= trueCols ()) doInsertColumns (objects.size (), right - trueCols () + 1); RK_ASSERT (right < trueCols ()); int current_rows = objects[0]->getLength (); if (bottom >= current_rows) insertRows (current_rows, bottom - current_rows + 1); int tcol = 0; for (int col = left; col <= right; ++col) { RKVariable* var = objects[col]; int trow = 0; for (int row = top; row <= bottom; ++row) { var->setText (row, text.getText (trow, tcol)); ++trow; } ++tcol; } } void RKVarEditModel::restoreObject (RObject* object, RCommandChain* chain) { RK_TRACE (EDITOR); RK_ASSERT (objects.contains (static_cast (object))); static_cast (object)->restore (chain); } /////////////////// RKVarEditMetaModel //////////////////////// RKVarEditMetaModel::RKVarEditMetaModel (RKVarEditModel* data_model) : RKVarEditModelBase (data_model) { RK_TRACE (EDITOR); RK_ASSERT (data_model); RKVarEditMetaModel::data_model = data_model; } RKVarEditMetaModel::~RKVarEditMetaModel () { RK_TRACE (EDITOR); } void RKVarEditMetaModel::beginAddDataObject (int index) { RK_TRACE (EDITOR); beginInsertColumns (QModelIndex (), index, index); } void RKVarEditMetaModel::endAddDataObject () { RK_TRACE (EDITOR); endInsertColumns (); } void RKVarEditMetaModel::beginRemoveDataObject (int index) { RK_TRACE (EDITOR); beginRemoveColumns (QModelIndex (), index, index); } void RKVarEditMetaModel::endRemoveDataObject () { RK_TRACE (EDITOR); endRemoveColumns (); } void RKVarEditMetaModel::objectMetaChanged (int atcolumn) { RK_TRACE (EDITOR); emit (dataChanged (index (0, atcolumn), index (RowCount - 1, atcolumn))); emit (headerDataChanged (Qt::Horizontal, atcolumn, atcolumn)); } int RKVarEditMetaModel::rowCount (const QModelIndex& parent) const { RK_TRACE (EDITOR); if (parent.isValid ()) return 0; return RowCount; } int RKVarEditMetaModel::columnCount (const QModelIndex& parent) const { RK_TRACE (EDITOR); return (data_model->columnCount (parent)); } QVariant RKVarEditMetaModel::data (const QModelIndex& index, int role) const { RK_TRACE (EDITOR); if (!index.isValid ()) return QVariant (); int row = index.row (); int col = index.column (); if ((col >= data_model->apparentCols ()) || (row >= RowCount)) { RK_ASSERT (false); return QVariant (); } if (col < var_col_offset) { if (role == Qt::BackgroundRole) return (Qt::lightGray); return QVariant (); } // on a trailing col if (col >= data_model->objects.size ()) { if (role == Qt::BackgroundRole) return (Qt::gray); if (role == Qt::ToolTipRole) return (i18n ("Type on these fields to add new columns")); return QVariant (); } if ((role == Qt::DisplayRole) || (role == Qt::EditRole)) { RKVariable *var = data_model->objects[col]; RK_ASSERT (var); if (row == NameRow) return var->getShortName (); if (row == LabelRow) return var->getLabel (); if (row == TypeRow) { if (role == Qt::EditRole) return QString::number (var->getDataType ()); return RObject::typeToText (var->getDataType ()); } if (row == FormatRow) return var->getFormattingOptionsString (); if (row == LevelsRow) return var->getValueLabelString (); } if ((role == Qt::FontRole) && (row == NameRow)) { QFont font; font.setBold (true); return (font); } return QVariant (); } Qt::ItemFlags RKVarEditMetaModel::flags (const QModelIndex& index) const { RK_TRACE (EDITOR); Qt::ItemFlags flags = 0; if (!index.isValid ()) return flags; int row = index.row (); int col = index.column (); if ((col >= data_model->apparentCols ()) || (row >= RowCount)) { RK_ASSERT (false); return flags; } if (col < var_col_offset) return flags; if (!data_model->edit_blocks) flags |= Qt::ItemIsEditable | Qt::ItemIsEnabled; if ((col < data_model->objects.size ()) && (row < RowCount)) flags |= Qt::ItemIsSelectable; return flags; } bool RKVarEditMetaModel::setData (const QModelIndex& index, const QVariant& value, int role) { RK_TRACE (EDITOR); if (!index.isValid ()) return false; int row = index.row (); int col = index.column (); if (data_model->edit_blocks || (role != Qt::EditRole) || (col >= data_model->apparentCols ()) || (row >= RowCount)) { RK_ASSERT (false); return false; } if (col < var_col_offset) { RK_ASSERT (false); return false; } if (col >= data_model->objects.size ()) { // trailing col // somebody should add a column for us data_model->doInsertColumns (data_model->objects.size (), 1); if (col >= data_model->objects.size ()) { // apparently, no column has been added in the above signal return false; } } // edit of normal cells RKVariable* var = data_model->objects[col]; RK_ASSERT (var); if (row == NameRow) { if (var->getShortName () != value.toString ()) { if (!var->canRename ()) return false; if (var->parentObject ()->isContainer ()) { RKGlobals::tracker ()->renameObject (var, static_cast (var->parentObject ())->validizeName (value.toString ())); } else return false; } } else if (row == LabelRow) { var->setLabel (value.toString (), true); } else if (row == TypeRow) { var->setVarType ((RObject::RDataType) value.toInt ()); } else if (row == FormatRow) { var->setFormattingOptionsString (value.toString ()); } else if (row == LevelsRow) { if (value.toString () != var->getValueLabelString ()) { var->setValueLabelString (value.toString ()); } } return true; } RObject::ValueLabels RKVarEditMetaModel::getValueLabels (int column) const { RK_TRACE (EDITOR); if (column >= trueCols ()) return RObject::ValueLabels (); return (getObject (column)->getValueLabels ()); } void RKVarEditMetaModel::setValueLabels (int column, const RObject::ValueLabels& labels) { RK_TRACE (EDITOR); if (column >= data_model->apparentCols ()) { RK_ASSERT (false); return; } if (column >= trueCols ()) { data_model->doInsertColumns (trueCols (), 1); } RKVariable* var = getObject (column); RK_ASSERT (var); var->setValueLabels (labels); } QVariant RKVarEditMetaModel::headerData (int section, Qt::Orientation orientation, int role) const { RK_TRACE (EDITOR); if (orientation == Qt::Horizontal) { return data_model->headerData (section, orientation, role); } if (role == Qt::DisplayRole) { if (section == NameRow) return (i18n ("Name")); if (section == LabelRow) return (i18n ("Label")); if (section == TypeRow) return (i18n ("Type")); if (section == FormatRow) return (i18n ("Format")); if (section == LevelsRow) return (i18n ("Levels")); } if (role == Qt::ToolTipRole) { if (section == NameRow) return (i18n ("Edit these fields to rename variables.")); if (section == LabelRow) return (i18n ("A descriptive label for each column (optional).")); if (section == TypeRow) return (i18n ("Type of data.")); if (section == FormatRow) return (i18n ("Double click on these fields to customize data display.")); if (section == LevelsRow) return (i18n ("Double click on these fields to edit factor levels.")); } return QVariant (); } RKTextMatrix RKVarEditMetaModel::getTextMatrix (const QItemSelectionRange& range) const { RK_TRACE (EDITOR); if ((!range.isValid ()) || data_model->objects.isEmpty ()) return RKTextMatrix (); // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); RKTextMatrix ret; int tcol = 0; for (int col = left; col <= right; ++col) { int trow = 0; for (int row = top; row <= bottom; ++row) { QVariant celldata = data (index (row, col), Qt::EditRole); if (!celldata.isValid ()) { RK_ASSERT (false); break; } ret.setText (trow, tcol, celldata.toString ()); ++trow; } ++tcol; } return ret; } void RKVarEditMetaModel::blankRange (const QItemSelectionRange& range) { RK_TRACE (EDITOR); if ((!range.isValid ()) || data_model->objects.isEmpty ()) return; // NOTE: of course, when the range is small, this is terribly inefficient. On the other hand, it doesn't really matter, then, either. QItemSelectionRange erange = range.intersected (QItemSelectionRange (index (0, 0), index (trueRows () - 1, trueCols () - 1))); int top = erange.top (); int bottom = erange.bottom (); int left = erange.left (); int right = erange.right (); for (int col = left; col <= right; ++col) { RKVariable* var = data_model->objects[col]; var->lockSyncing (true); for (int row = top; row <= bottom; ++row) { setData (createIndex (row, col), QString (), Qt::EditRole); } var->lockSyncing (false); } } void RKVarEditMetaModel::setTextMatrix (const QModelIndex& offset, const RKTextMatrix& text, const QItemSelectionRange& confine_to) { RK_TRACE (EDITOR); if ((!offset.isValid ()) || text.isEmpty ()) return; int top = offset.row (); int left = offset.column (); int bottom = top + text.numRows () - 1; int right = left + text.numColumns () - 1; if (confine_to.isValid ()) { if (confine_to.top () > top) return; // can't confine top-left. Should have been set by caller if (confine_to.left () > left) return; bottom = qMin (confine_to.bottom (), bottom); right = qMin (confine_to.right (), right); } // TODO: some models might not support column addition. if (right >= trueCols ()) data_model->doInsertColumns (trueCols (), right - trueCols () + 1); RK_ASSERT (right < data_model->objects.size ()); bottom = qMin (bottom, trueRows () - 1); int tcol = 0; for (int col = left; col <= right; ++col) { int trow = 0; RKVariable* var = data_model->objects[col]; var->lockSyncing (true); for (int row = top; row <= bottom; ++row) { setData (index (row, col), text.getText (trow, tcol), Qt::EditRole); ++trow; } var->lockSyncing (false); ++tcol; } } /////////////////// RKVarEditDataFrameModel //////////////////////// RKVarEditDataFrameModel::RKVarEditDataFrameModel (RContainerObject* dataframe, QObject* parent) : RKVarEditModel (parent) { RK_TRACE (EDITOR); init (dataframe); } RKVarEditDataFrameModel::RKVarEditDataFrameModel (const QString& validized_name, RContainerObject* parent_object, RCommandChain* chain, int initial_cols, QObject* parent) : RKVarEditModel (parent) { RK_TRACE (EDITOR); RObject *object = parent_object->createPendingChild (validized_name, -1, true, true); RK_ASSERT (object->isDataFrame ()); RContainerObject* df = static_cast (object); // initialize the new object for (int i = 0; i < initial_cols; ++i) { RObject* child = df->createPendingChild (df->validizeName (QString ()), -1, false, false); RK_ASSERT (child->isVariable ()); // let's start with one (empty) row, to avoid confusion static_cast (child)->setLength (1); } init (df); // creates the pending object in the backend pushTable (chain); } void RKVarEditDataFrameModel::init (RContainerObject* dataframe) { RK_TRACE (EDITOR); RKVarEditDataFrameModel::dataframe = dataframe; trailing_rows = 1; trailing_cols = 1; addNotificationType (RObjectListener::ChildAdded); addNotificationType (RObjectListener::ChildMoved); listenForObject (dataframe); for (int i = 0; i < dataframe->numChildren (); ++i) { RObject* obj = dataframe->findChildByIndex (i); RK_ASSERT (obj); RK_ASSERT (obj->isVariable ()); addObject (i, static_cast (obj)); } rownames = dataframe->rowNames (); addObject (0, rownames); getMetaModel ()->var_col_offset = var_col_offset = 1; } RKVarEditDataFrameModel::~RKVarEditDataFrameModel () { RK_TRACE (EDITOR); if (dataframe) stopListenForObject (dataframe); } bool RKVarEditDataFrameModel::insertColumns (int column, int count, const QModelIndex& parent) { RK_TRACE (EDITOR); if (parent.isValid ()) { RK_ASSERT (false); return false; } if (column > trueCols ()) column = trueCols (); if (column < var_col_offset) column = var_col_offset; for (int col = column; col < (column + count); ++col) { RObject *obj = dataframe->createPendingChild (dataframe->validizeName (QString ()), col-var_col_offset); RK_ASSERT (obj->isVariable ()); // addObject (col, obj); // the object will be added via RKModificationTracker::addObject -> this::childAdded. That will also take care of calling beginInsertColumns()/endInsertColumns() RKGlobals::rInterface ()->issueCommand (new RCommand (".rk.data.frame.insert.column (" + dataframe->getFullName () + ", \"" + obj->getShortName () + "\", " + QString::number (col+1-var_col_offset) + ")", RCommand::App | RCommand::Sync)); } return true; } bool RKVarEditDataFrameModel::removeColumns (int column, int count, const QModelIndex& parent) { RK_TRACE (EDITOR); if (parent.isValid ()) { RK_ASSERT (false); return false; } if (column < var_col_offset) { RK_ASSERT (false); return false; } while ((column + count) > objects.size ()) --count; for (int i = column + count - 1; i >= column; --i) { // we start at the end so that the index remains valid RKGlobals::tracker ()->removeObject (objects[i]); // the comment in insertColumns, above: The object will be removed from our list in objectRemoved(). } return true; } void RKVarEditDataFrameModel::doInsertRowsInBackend (int row, int count) { RK_TRACE (EDITOR); // TODO: most of the time we're only adding one row at a time, still we should have a function to add multiple rows at once. for (int i = row; i < row + count; ++i) { RKGlobals::rInterface ()->issueCommand (new RCommand (".rk.data.frame.insert.row (" + dataframe->getFullName () + ", " + QString::number (i+1) + ')', RCommand::App | RCommand::Sync)); } } void RKVarEditDataFrameModel::doRemoveRowsInBackend (int row, int count) { RK_TRACE (EDITOR); for (int i = row + count - 1; i >= row; --i) { RKGlobals::rInterface ()->issueCommand (new RCommand (".rk.data.frame.delete.row (" + dataframe->getFullName () + ", " + QString::number (i+1) + ')', RCommand::App | RCommand::Sync)); } } void RKVarEditDataFrameModel::objectRemoved (RObject* object) { RK_TRACE (EDITOR); if (object == dataframe) { while (!objects.isEmpty ()) RKVarEditModel::objectRemoved (objects.last()); // NOTE: The rownames object (index position 0) must always go away last! stopListenForObject (dataframe); dataframe = 0; } RKVarEditModel::objectRemoved (object); // if the dataframe is gone, the editor will most certainly want to auto-destruct. // since the model will be taken down as well, this has to come last in the function. if (!dataframe) emit (modelObjectDestroyed ()); } void RKVarEditDataFrameModel::childAdded (int index, RObject* parent) { RK_TRACE (EDITOR); if (parent == dataframe) { RObject* child = dataframe->findChildByIndex (index); RK_ASSERT (child); if (child->isVariable ()) addObject (index + var_col_offset, static_cast (child)); else RK_ASSERT (false); } } void RKVarEditDataFrameModel::childMoved (int old_index, int new_index, RObject* parent) { RK_TRACE (EDITOR); if (parent == dataframe) { RObject *child = dataframe->findChildByIndex (new_index); // it's at the new position, already RK_ASSERT (objects.size () > (old_index + var_col_offset)); RK_ASSERT (child == objects[old_index + var_col_offset]); // if an object has changed position, there should be at least two objects left. Hence, the objectRemoved-call will never lead to editor destruction RK_ASSERT (objects.size () >= (var_col_offset + 2)); objectRemoved (child); RK_ASSERT (child->isVariable ()); addObject (new_index + var_col_offset, static_cast (child)); } else { // even though we are listening for the child objects as well, we should see move notifications // only for children of the parent. RK_ASSERT (false); } } void RKVarEditDataFrameModel::doInsertColumns (int index, int count) { RK_TRACE (EDITOR); insertColumns (index, count); } void RKVarEditDataFrameModel::pushTable (RCommandChain *sync_chain) { RK_TRACE (EDITOR); // first push real data QString command = dataframe->getFullName (); command.append (" <- data.frame ("); RK_ASSERT (objects.size ()); RKVariable* child = objects[0]; QString na_vector = "=as.numeric (rep (NA, " + QString::number (child->getLength ()) + "))"; for (int col=var_col_offset; col < objects.size (); ++col) { if (col > var_col_offset) command.append (", "); command.append (objects[col]->getShortName () + na_vector); } command.append (")"); // push all children RKGlobals::rInterface ()->issueCommand (new RCommand (command, RCommand::Sync), sync_chain); for (int col=0; col < objects.size (); ++col) { objects[col]->restore (sync_chain); } // now store the meta-data dataframe->writeMetaData (sync_chain); RKGlobals::rInterface ()->issueCommand (new RCommand (QString (), RCommand::Sync | RCommand::EmptyCommand | RCommand::ObjectListUpdate), sync_chain); } void RKVarEditDataFrameModel::restoreObject (RObject* object, RCommandChain* chain) { RK_TRACE (EDITOR); if (object == dataframe) { pushTable (chain); } else { RKVarEditModel::restoreObject (object, chain); } } #include "rkvareditmodel.moc" rkward-0.6.1/rkward/dataeditor/rkeditor.h0000644000175000017500000000402312124345410017761 0ustar thomasthomas/*************************************************************************** rkeditor - description ------------------- begin : Fri Aug 20 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKEDITOR_H #define RKEDITOR_H #include #include "../core/robject.h" #include #include "../windows/rkmdiwindow.h" class RCommandChain; class RKDrag; /** Use as a base class for all widgets that can be used to display and edit RObjects of whatever type. // TODO: not sure we really need this any longer @author Thomas Friedrichsmeier */ class RKEditor : public RKMDIWindow { Q_OBJECT protected: RKEditor (QWidget *parent); virtual ~RKEditor (); public: /// flushes all pending edit operations and syncs the data to R. Implement in the child classes virtual void flushChanges () = 0; /// returns the object that is being edited in this editor RObject *getObject () { return object; }; enum PasteMode {PasteEverywhere, PasteToTable, PasteToSelection}; /** Tells the editor to restore the given object in the R-workspace from its copy of the data */ virtual void restoreObject (RObject *object) = 0; bool isModified () { return false; }; protected: RObject *object; }; #endif rkward-0.6.1/rkward/dataeditor/rkeditor.cpp0000644000175000017500000000244212124345410020317 0ustar thomasthomas/*************************************************************************** rkeditor - description ------------------- begin : Fri Aug 20 2004 copyright : (C) 2004 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkeditor.h" #include "../debug.h" RKEditor::RKEditor (QWidget *parent) : RKMDIWindow (parent, RKMDIWindow::DataEditorWindow) { RK_TRACE (EDITOR); } RKEditor::~RKEditor () { RK_TRACE (EDITOR); // getObject ()->setObjectOpened (this, false); } #include "rkeditor.moc" rkward-0.6.1/rkward/dataeditor/twintable.cpp0000644000175000017500000003702412124345410020471 0ustar thomasthomas/*************************************************************************** twintable.cpp - description ------------------- begin : Tue Oct 29 2002 copyright : (C) 2002, 2006, 2007, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "twintable.h" #include #include #include #include #include #include #include #include #include #include #include #include "twintablemember.h" #include "rkvareditmodel.h" #include "../core/rcontainerobject.h" #include "../misc/rkstandardicons.h" #include "../rkward.h" #include "../debug.h" TwinTable::TwinTable (QWidget *parent) : RKEditor (parent), RObjectListener (RObjectListener::Other), KXMLGUIClient () { RK_TRACE (EDITOR); main_object = 0; QVBoxLayout *layout = new QVBoxLayout(this); layout->setContentsMargins (0, 0, 0, 0); QSplitter *splitter = new QSplitter(this); splitter->setOrientation(Qt::Vertical); metaview = new TwinTableMember (splitter); splitter->setStretchFactor (splitter->indexOf (metaview), 0); metaview->verticalHeader ()->setResizeMode (QHeaderView::Fixed); metaview->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff); dataview = new TwinTableMember (splitter); splitter->setStretchFactor (splitter->indexOf (dataview), 1); dataview->verticalHeader ()->setResizeMode (QHeaderView::Fixed); dataview->horizontalHeader ()->hide (); dataview->setAlternatingRowColors (true); layout->addWidget (splitter); // these are to keep the two tables in sync metaview->setTwin (dataview); dataview->setTwin (metaview); // pressing the columns in the metaview-header should select columns in the dataview disconnect (metaview->horizontalHeader (), SIGNAL (sectionClicked(int))); connect (metaview->horizontalHeader (), SIGNAL (sectionClicked(int)), this, SLOT (metaHeaderClicked(int))); disconnect (metaview->horizontalHeader (), SIGNAL (sectionPressed(int))); connect (metaview->horizontalHeader (), SIGNAL (sectionPressed(int)), this, SLOT (metaHeaderPressed(int))); disconnect (metaview->horizontalHeader (), SIGNAL (sectionEntered(int))); connect (metaview->horizontalHeader (), SIGNAL (sectionEntered(int)), this, SLOT (metaHeaderEntered(int))); meta_header_anchor_section = -1; // catch header context menu requests connect (dataview, SIGNAL (contextMenuRequest(int,int,const QPoint&)), this, SLOT (contextMenu(int,int,const QPoint&))); connect (metaview, SIGNAL (contextMenuRequest(int,int,const QPoint&)), this, SLOT (contextMenu(int,int,const QPoint&))); context_menu_table = 0; context_menu_row = context_menu_column = -2; setXMLFile ("rkeditordataframepart.rc"); initActions (); setFocusPolicy (Qt::StrongFocus); } TwinTable::~TwinTable() { RK_TRACE (EDITOR); RK_ASSERT (main_object); stopListenForObject (main_object); // TODO: are the models auto-destructed? } void TwinTable::initActions () { RK_TRACE (EDITOR); editCut = actionCollection ()->addAction (KStandardAction::Cut, "cut", this, SLOT(cut())); editCut->setStatusTip (i18n("Cuts the selected section and puts it to the clipboard")); editCopy = actionCollection ()->addAction (KStandardAction::Copy, "copy", this, SLOT(copy())); editCopy->setStatusTip (i18n("Copies the selected section to the clipboard")); // editor->editActions ()->addAction (editCopy); // this is a read-only action, not an "edit" action editPaste = actionCollection ()->addAction (KStandardAction::Paste, "paste", this, SLOT(paste())); editPaste->setStatusTip (i18n("Pastes the clipboard contents to current position")); editPasteToTable = actionCollection ()->addAction ("paste_to_table", this, SLOT(pasteToTable())); editPasteToTable->setText (i18n("Paste inside table")); editPasteToTable->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionPasteInsideTable)); editPasteToTable->setStatusTip (i18n("Pastes the clipboard contents to current position, but not beyond the table's boundaries")); editPasteToSelection = actionCollection ()->addAction ("paste_to_selection", this, SLOT(pasteToSelection())); editPasteToSelection->setText (i18n("Paste inside selection")); editPasteToSelection->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionPasteInsideSelection)); editPasteToSelection->setStatusTip (i18n("Pastes the clipboard contents to current position, but not beyond the boundaries of the current selection")); // header menus action_insert_col_left = actionCollection ()->addAction ("insert_col_left", this, SLOT (insertColumn())); action_insert_col_left->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionInsertVar)); action_delete_col = actionCollection ()->addAction ("delete_col", this, SLOT (deleteColumn())); action_delete_col->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionDeleteVar)); action_insert_row_above = actionCollection ()->addAction ("insert_row_above", this, SLOT (insertRow())); action_insert_row_above->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionInsertRow)); action_delete_row = actionCollection ()->addAction ("delete_row", this, SLOT (deleteRow())); action_delete_row->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionDeleteRow)); action_delete_rows = actionCollection ()->addAction ("delete_rows", this, SLOT (deleteSelectedRows())); action_delete_rows->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionDeleteRow)); // global actions action_enable_editing = actionCollection ()->addAction ("enable_editing", this, SLOT (enableEditing(bool))); action_enable_editing->setText ("Enable editing"); action_enable_editing->setCheckable (true); action_show_rownames = actionCollection ()->addAction ("show_rownames", this, SLOT (showRownames(bool))); action_show_rownames->setText ("Show / Edit row names"); action_show_rownames->setCheckable (true); // add all edit-actions to a group, so they can be enabled/disabled easily edit_actions = new QActionGroup (this); edit_actions->addAction (editCut); edit_actions->addAction (editPaste); edit_actions->addAction (editPasteToTable); edit_actions->addAction (editPasteToSelection); edit_actions->addAction (action_insert_col_left); edit_actions->addAction (action_delete_col); edit_actions->addAction (action_insert_row_above); edit_actions->addAction (action_delete_row); edit_actions->addAction (action_delete_rows); enableEditing (true); } void TwinTable::initTable (RKVarEditModel* model, RObject* object) { RK_TRACE (EDITOR); datamodel = model; main_object = object; dataview->setRKModel (model); metaview->setRKModel (model->getMetaModel ()); model->setEditor (this); dataview->setRKItemDelegate (new RKItemDelegate (this, datamodel)); metaview->setRKItemDelegate (new RKItemDelegate (this, datamodel->getMetaModel ())); metaview->setMinimumHeight (metaview->horizontalHeader ()->height ()); metaview->setMaximumHeight (metaview->rowHeight (0) * 5 + metaview->horizontalHeader ()->height () + 5); dataview->verticalHeader ()->setFixedWidth (metaview->verticalHeader ()->width ()); showRownames (false); // init caption addNotificationType (RObjectListener::MetaChanged); listenForObject (object); objectMetaChanged (object); connect (model, SIGNAL (hasDuplicates(const QStringList&)), this, SLOT (containsDuplicates(const QStringList&))); } void TwinTable::containsDuplicates (const QStringList& dupes) { RK_TRACE (EDITOR); if (!rw) return; KMessageBox::informationList (this, i18n ("The editor '%1' contains the following duplicate columns. Editing this table may not be safe, and has been disabled. You may re-enable editing if you know what you are doing, but you are strongly advised to fix the table, and/or backup your data, first.", windowTitle ()), dupes, i18n ("Duplicate columns detected")); enableEditing (false); } void TwinTable::objectMetaChanged (RObject* changed) { RK_TRACE (EDITOR); RK_ASSERT (changed == main_object); QString caption = main_object->getShortName (); if (!rw) caption += i18n (" [read-only]"); setCaption (caption); } void TwinTable::metaHeaderPressed (int section) { RK_TRACE (EDITOR); if (meta_header_anchor_section < 0) { meta_header_anchor_section = section; dataview->selectColumn (section); } dataview->setFocus (); } void TwinTable::metaHeaderClicked (int) { RK_TRACE (EDITOR); RK_ASSERT (meta_header_anchor_section >= 0); meta_header_anchor_section = -1; dataview->setFocus (); } void TwinTable::metaHeaderEntered (int section) { RK_TRACE (EDITOR); if (meta_header_anchor_section >= 0) { dataview->selectionModel ()->select (QItemSelection (datamodel->index (0, qMin (meta_header_anchor_section, section)), datamodel->index (0, qMax (meta_header_anchor_section, section))), QItemSelectionModel::Columns | QItemSelectionModel::Select); dataview->setFocus (); } } // TODO: handle situation when several entire cols are selected! void TwinTable::contextMenu (int row, int col, const QPoint& pos) { RK_TRACE (EDITOR); RK_ASSERT (context_menu_table == 0); context_menu_row = row; context_menu_column = col; QString container_name; if (sender () == metaview) { context_menu_table = metaview; if (row == -1) { // header action_insert_col_left->setEnabled (rw && (col >= datamodel->firstRealColumn ())); action_insert_col_left->setText (i18n ("Insert new variable left")); // TODO: show name action_delete_col->setEnabled (rw && (col >= datamodel->firstRealColumn ()) && (col < datamodel->trueCols ())); action_delete_col->setText (i18n ("Delete this variable")); // TODO: show name container_name = "top_header_menu"; } } else if (sender () == dataview) { context_menu_table = dataview; if (col == -1) { if (row >= 0) { RK_ASSERT (row <= datamodel->trueRows ()); action_insert_row_above->setText (i18n ("Insert new case above (at %1)", row + 1)); QItemSelectionRange sel = dataview->getSelectionBoundaries (); if (sel.isValid () && rw) { int top = sel.top (); int bottom = sel.bottom (); if (bottom >= datamodel->trueRows ()) bottom = datamodel->trueRows () - 1; action_delete_rows->setEnabled (top > bottom); if (top > bottom) bottom = top; action_delete_rows->setText (i18n ("Delete marked rows (%1-%2)", (top+1), (bottom+1))); } else { action_delete_rows->setEnabled (false); } action_delete_row->setEnabled (rw && (row < datamodel->trueRows ())); action_delete_row->setText (i18n ("Delete this row (%1)", (row+1))); container_name = "left_header_menu"; } } } else { RK_ASSERT (sender () == this); } if (container_name.isEmpty ()) { // none of the headers container_name = "general_context_menu"; } RK_ASSERT (factory ()); QMenu* menu = dynamic_cast (factory ()->container (container_name, this)); if (menu) { menu->exec (pos); } else { RK_ASSERT (false); // but may happen, if ui.rc-file was not found } context_menu_table = 0; context_menu_row = context_menu_column = -2; } void TwinTable::deleteColumn () { RK_TRACE (EDITOR); RK_ASSERT (rw); if (context_menu_table != metaview) { RK_ASSERT (false); return; } RK_ASSERT (context_menu_column >= datamodel->firstRealColumn ()); flushEdit (); datamodel->removeColumns (context_menu_column, 1); } void TwinTable::insertColumn () { RK_TRACE (EDITOR); RK_ASSERT (rw); if (context_menu_table != metaview) { RK_ASSERT (false); return; } RK_ASSERT (context_menu_column >= datamodel->firstRealColumn ()); flushEdit (); datamodel->insertColumns (context_menu_column, 1); } void TwinTable::deleteRow () { RK_TRACE (EDITOR); RK_ASSERT (rw); if (context_menu_table != dataview) { RK_ASSERT (false); return; } RK_ASSERT (context_menu_row > 0); flushEdit (); datamodel->removeRows (context_menu_row, 1); } void TwinTable::deleteSelectedRows () { RK_TRACE (EDITOR); RK_ASSERT (rw); if (context_menu_table != dataview) { RK_ASSERT (false); return; } QItemSelectionRange sel = dataview->getSelectionBoundaries (); if (sel.isValid ()) { int top = sel.top (); int bottom = sel.bottom (); if (bottom >= datamodel->trueRows ()) bottom = datamodel->trueRows () - 1; if (top > bottom) top = bottom; datamodel->removeRows (top, bottom - top + 1); } else { RK_ASSERT (false); } } void TwinTable::insertRow () { RK_TRACE (EDITOR); RK_ASSERT (rw); if (context_menu_table != dataview) { RK_ASSERT (false); return; } RK_ASSERT (context_menu_row > 0); flushEdit (); datamodel->insertRows (context_menu_row, 1); } void TwinTable::copy () { RK_TRACE (EDITOR); flushEdit (); TwinTableMember *table = activeTable (); if (!table) return; table->copy (); } void TwinTable::paste (RKEditor::PasteMode paste_mode) { RK_TRACE (EDITOR); if (!rw) return; flushEdit (); TwinTableMember *table = activeTable (); if (!table) return; RKWardMainWindow::getMain ()->slotSetStatusBarText (i18n ("Inserting clipboard contents...")); table->paste (paste_mode); RKWardMainWindow::getMain ()->slotSetStatusReady (); } void TwinTable::paste() { RK_TRACE (EDITOR); paste (PasteEverywhere); } void TwinTable::pasteToTable() { RK_TRACE (EDITOR); paste (PasteToTable); } void TwinTable::pasteToSelection() { RK_TRACE (EDITOR); paste (PasteToSelection); } TwinTableMember *TwinTable::activeTable () { RK_TRACE (EDITOR); if (metaview->hasFocus ()) { return metaview; } else if (dataview->hasFocus ()) { return dataview; } else { return 0; } } void TwinTable::clearSelected () { RK_TRACE (EDITOR); if (!rw) return; TwinTableMember *table = activeTable (); if (!table) return; table->blankSelected (); } void TwinTable::cut () { RK_TRACE (EDITOR); copy(); clearSelected (); } void TwinTable::flushEdit () { RK_TRACE (EDITOR); // flush pending edit operations metaview->stopEditing (); dataview->stopEditing (); } void TwinTable::enableEditing (bool on) { RK_TRACE (EDITOR); flushEdit (); rw = on; metaview->rw = rw; dataview->rw = rw; QPalette palette = metaview->palette (); if (on) palette.setColor (QPalette::Base, QApplication::palette ().color (QPalette::Active, QPalette::Base)); else palette.setColor (QPalette::Base, QApplication::palette ().color (QPalette::Disabled, QPalette::Base)); metaview->setPalette (palette); dataview->setPalette (palette); QAbstractItemView::EditTriggers triggers = QAbstractItemView::NoEditTriggers; if (rw) triggers = QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed | QAbstractItemView::AnyKeyPressed; metaview->setEditTriggers (triggers); dataview->setEditTriggers (triggers); edit_actions->setEnabled (rw); action_enable_editing->setChecked (rw); if (main_object) objectMetaChanged (main_object); // update_caption; } void TwinTable::showRownames (bool show) { RK_TRACE (EDITOR); RK_ASSERT (show == action_show_rownames->isChecked ()); metaview->setColumnHidden (0, !show); dataview->setColumnHidden (0, !show); datamodel->lockHeader (!show); } #include "twintable.moc" rkward-0.6.1/rkward/dataeditor/rkeditordataframe.cpp0000644000175000017500000001033412124345410022163 0ustar thomasthomas/*************************************************************************** rkeditordataframe - description ------------------- begin : Fri Aug 20 2004 copyright : (C) 2004, 2006, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "rkeditordataframe.h" #include #include #include "../rbackend/rinterface.h" #include "../rkglobals.h" #include "twintable.h" #include "twintablemember.h" #include "rkvareditmodel.h" #include "../core/robject.h" #include "../core/robjectlist.h" #include "../core/renvironmentobject.h" #include "../core/rcontainerobject.h" #include "../misc/rkdummypart.h" #include "../windows/rkworkplace.h" #include "../debug.h" #define LOAD_COMPLETE_COMMAND 1 // warning! numbers above GET_DATA_OFFSET are used to determine, which row, the data should go to! #define GET_DATA_OFFSET 10 RKEditorDataFrame::RKEditorDataFrame (RContainerObject* object, QWidget *parent) : TwinTable (parent) { RK_TRACE (EDITOR); commonInit (); RK_ASSERT (!object->isPending ()); RKEditor::object = object; RK_ASSERT (object->isDataFrame ()); setGlobalContextProperty ("current_object", object->getFullName()); RKVarEditDataFrameModel* model = new RKVarEditDataFrameModel (object, this); initTable (model, object); connect (model, SIGNAL (modelObjectDestroyed()), this, SLOT (detachModel())); waitForLoad (); } RKEditorDataFrame::RKEditorDataFrame (const QString& new_object_name, QWidget* parent) : TwinTable (parent) { RK_TRACE (EDITOR); commonInit (); QString valid = RObjectList::getGlobalEnv ()->validizeName (new_object_name); if (valid != new_object_name) KMessageBox::sorry (this, i18n ("The name you specified was already in use or not valid. Renamed to %1", valid), i18n ("Invalid Name")); RKVarEditDataFrameModel* model = new RKVarEditDataFrameModel (valid, RObjectList::getGlobalEnv (), open_chain, 5, this); RKEditor::object = model->getObject (); RK_ASSERT (object->isDataFrame ()); setGlobalContextProperty ("current_object", object->getFullName()); initTable (model, object); connect (model, SIGNAL (modelObjectDestroyed()), this, SLOT (deleteLater())); RKGlobals::rInterface ()->closeChain (open_chain); } void RKEditorDataFrame::commonInit () { RK_TRACE (EDITOR); setPart (new RKDummyPart (this, this)); getPart ()->insertChildClient (this); initializeActivationSignals (); open_chain = RKGlobals::rInterface ()->startChain (0); } RKEditorDataFrame::~RKEditorDataFrame () { RK_TRACE (EDITOR); } void RKEditorDataFrame::detachModel () { RK_TRACE (EDITOR); dataview->setRKModel (0); metaview->setRKModel (0); deleteLater (); } void RKEditorDataFrame::flushChanges () { RK_TRACE (EDITOR); flushEdit (); } void RKEditorDataFrame::waitForLoad () { RK_TRACE (EDITOR); flushEdit (); enableEditing (false); RCommand *command = new RCommand (QString (), RCommand::EmptyCommand | RCommand::Sync | RCommand::GetStringVector, QString (), this, LOAD_COMPLETE_COMMAND); RKGlobals::rInterface ()->issueCommand (command, open_chain); } void RKEditorDataFrame::rCommandDone (RCommand *command) { RK_TRACE (EDITOR); if (command->getFlags () == LOAD_COMPLETE_COMMAND) { RKGlobals::rInterface ()->closeChain (open_chain); open_chain = 0; enableEditing (true); } } void RKEditorDataFrame::restoreObject (RObject *object) { RK_TRACE (EDITOR); #warning TODO: this interface should be moved to the model for good. datamodel->restoreObject (object, 0); } #include "rkeditordataframe.moc" rkward-0.6.1/rkward/dataeditor/rkeditordataframe.h0000644000175000017500000000432112124345410021627 0ustar thomasthomas/*************************************************************************** rkeditordataframe - description ------------------- begin : Fri Aug 20 2004 copyright : (C) 2004, 2006 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef RKEDITORDATAFRAME_H #define RKEDITORDATAFRAME_H #include "rkeditor.h" #include "twintable.h" #include "../rbackend/rcommandreceiver.h" class TwinTable; class RCommand; class RKVariable; /** An RKEditor for data.frames. @author Thomas Friedrichsmeier */ class RKEditorDataFrame : public TwinTable, public RCommandReceiver { Q_OBJECT public: /** constructor. @param object an existing R object @param parent parent widget */ RKEditorDataFrame (RContainerObject* object, QWidget *parent); /** This constructor creates a new (empty) data.frame with the given name and then opens it for editing. @param new_object_name name of the new data.frame @param parent parent widget */ RKEditorDataFrame (const QString& new_object_name, QWidget *parent); /** destructor */ ~RKEditorDataFrame (); void flushChanges (); /** Tells the editor to restore the given object in the R-workspace from its copy of the data */ void restoreObject (RObject *object); private slots: void detachModel (); private: /// syncs the whole table. void pushTable (RCommandChain *sync_chain); void commonInit (); RCommandChain *open_chain; void waitForLoad (); protected: void rCommandDone (RCommand *command); }; #endif rkward-0.6.1/rkward/dataeditor/twintable.h0000644000175000017500000001110512124345410020126 0ustar thomasthomas/*************************************************************************** twintable.h - description ------------------- begin : Tue Oct 29 2002 copyright : (C) 2002, 2006, 2007, 2010 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef TWINTABLE_H #define TWINTABLE_H #include "rkeditor.h" #include #include #include #include "../core/rkmodificationtracker.h" class TwinTableMember; class RKVarEditModel; class QActionGroup; class KAction; /** *@author Thomas Friedrichsmeier */ class TwinTable : public RKEditor, public RObjectListener, public KXMLGUIClient { Q_OBJECT public: TwinTable (QWidget *parent=0); ~TwinTable (); /** Pastes clipboard content to the current table */ void paste (RKEditor::PasteMode paste_mode); /** Clear the currently selected cells */ void clearSelected (); /** Flushes pending edit-operations */ void flushEdit (); void initTable (RKVarEditModel* model, RObject* object); RKVarEditModel* datamodel; QActionGroup* editActions () const { return edit_actions; }; public slots: void metaHeaderPressed (int section); void metaHeaderEntered (int section); void metaHeaderClicked (int section); void enableEditing (bool on); void showRownames (bool show); /** put the marked cells into the clipboard and remove them from the table */ void cut(); /** Copy selection in the current table to clipboard */ void copy(); /** paste the clipboard into the table, expanding the table as necessary */ void paste(); /** paste the clipboard into the table, but not beyond table boundaries */ void pasteToTable(); /** paste the clipboard into the table, but not beyond selection boundaries */ void pasteToSelection(); /** connected to RKVarEditModel::hasDuplicates() */ void containsDuplicates (const QStringList& dupes); private: int meta_header_anchor_section; /** read-write */ bool rw; /** If currently in one of the context menus, this holds, which table the mouse was pressed over (or 0) */ TwinTableMember* context_menu_table; /** Only valid, if context_menu_table != 0. Row of current context menu event. -1 for header row. -2 for no cell. */ int context_menu_row; /** Only valid, if context_menu_table != 0. Column of current context menu event. -1 for header column. -2 for no cell. */ int context_menu_column; protected: /** Returns the active Table (of the two members), 0 if no table active */ TwinTableMember *activeTable (); TwinTableMember* metaview; TwinTableMember* dataview; KAction* action_insert_col_left; KAction* action_delete_col; KAction* action_insert_row_above; KAction* action_delete_row; KAction* action_delete_rows; KAction* action_enable_editing; KAction* action_show_rownames; KAction* editCut; KAction* editCopy; KAction* editPaste; KAction* editPasteToSelection; KAction* editPasteToTable; QActionGroup* edit_actions; /** receives object meta change notifications. This updates the caption */ void objectMetaChanged (RObject* changed); void initActions (); RObject* main_object; private slots: /** inserts a new column (NOTE the action connected to this signal carries the info, where the column is to be inserted) */ void insertColumn (); /** inserts a new row in the dataview (NOTE the action connected to this signal carries the info, where the column is to be inserted) */ void insertRow (); /** deletes the current row (in the dataview) */ void deleteRow (); /** deletes all marked rows (in the dataview) */ void deleteSelectedRows (); /** deletes the column at the current header_pos. Actually it does not really delete the column, but requests object-removal from the model, which will pass the request to RKModifcationTracker */ void deleteColumn (); /** handle context menu requests from the two members */ void contextMenu (int row, int col, const QPoint& pos); }; #endif rkward-0.6.1/rkward/rkward.cpp0000644000175000017500000011215412124345412015652 0ustar thomasthomas/*************************************************************************** rkward.cpp - description ------------------- begin : Tue Oct 29 20:06:08 CET 2002 copyright : (C) 2002-2013 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ // include files for QT #include #include #include #include #include #include #include #include #include #include // include files for KDE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // application specific includes #include "rkward.h" #include "core/rkmodificationtracker.h" #include "plugin/rkcomponentmap.h" #include "settings/rksettings.h" #include "settings/rksettingsmoduleplugins.h" #include "settings/rksettingsmodulegeneral.h" #include "settings/rksettingsmoduleoutput.h" #include "settings/rksettingsmodulecommandeditor.h" #include "rbackend/rinterface.h" #include "core/robjectlist.h" #include "core/renvironmentobject.h" #include "misc/rkstandardicons.h" #include "misc/rkcommonfunctions.h" #include "misc/rkxmlguisyncer.h" #include "rkglobals.h" #include "dialogs/startupdialog.h" #include "dialogs/rkloadlibsdialog.h" #include "dialogs/rkimportdialog.h" #include "dialogs/rkrecoverdialog.h" #include "agents/rksaveagent.h" #include "agents/rkloadagent.h" #include "agents/rkquitagent.h" #include "windows/robjectbrowser.h" #include "windows/rcontrolwindow.h" #include "windows/rkhtmlwindow.h" #include "windows/rkworkplaceview.h" #include "windows/rkworkplace.h" #include "windows/rkcommandlog.h" #include "windows/rkhelpsearchwindow.h" #include "windows/rktoplevelwindowgui.h" #include "windows/rkfilebrowser.h" #include "windows/rktoolwindowlist.h" #include "windows/rkdebugconsole.h" #include "windows/rkcallstackviewer.h" #include "windows/rkdebugmessagewindow.h" #include "rkconsole.h" #include "debug.h" #include "version.h" #include "agents/showedittextfileagent.h" // TODO: see below: needed purely for linking! #include "dialogs/rkreadlinedialog.h" // TODO: see below: needed purely for linking! #include "dialogs/rkselectlistdialog.h" // TODO: see below: needed purely for linking! #include "windows/detachedwindowcontainer.h" // TODO: see below: needed purely for linking! #include "dataeditor/rkeditordataframe.h" // TODO: see below: needed purely for linking! #include "agents/rkeditobjectagent.h" // TODO: see below: needed purely for linking! #include "agents/rkprintagent.h" // TODO: see below: needed purely for linking! // This nevers gets called. It's needed to trick ld into linking correctly. Nothing else. void bogusCalls () { ShowEditTextFileAgent::showEditFiles (0); // TODO: AAAAAAAARGGGH!!!! It won't link without this bogus line!!! RKReadLineDialog::readLine (0, QString(), QString(), 0, 0); // TODO: see above RKSelectListDialog::doSelect (0, QString(), QStringList(), QStringList(), false); // TODO: see above new RKEditorDataFrame (0, 0); DetachedWindowContainer (0); new RKWorkplaceView (0); new RKEditObjectAgent (QStringList (), 0); RKPrintAgent::printPostscript (QString (), false); } /** Main window **/ //static RKWardMainWindow *RKWardMainWindow::rkward_mainwin = 0; RKWardMainWindow::RKWardMainWindow (RKWardStartupOptions *options) : KParts::MainWindow ((QWidget *)0, (Qt::WindowFlags) KDE_DEFAULT_WINDOWFLAGS) { RK_TRACE (APP); RK_ASSERT (rkward_mainwin == 0); gui_rebuild_locked = true; rkward_mainwin = this; RKGlobals::rinter = 0; RKSettings::settings_tracker = new RKSettingsTracker (this); /////////////////////////////////////////////////////////////////// // call inits to invoke all other construction parts RKStandardIcons::initIcons (); initActions(); initStatusBar(); new RKWorkplace (this); RKWorkplace::mainWorkplace ()->initActions (actionCollection (), "left_window", "right_window"); setCentralWidget (RKWorkplace::mainWorkplace ()); connect (RKWorkplace::mainWorkplace ()->view (), SIGNAL (captionChanged (const QString &)), this, SLOT (setCaption (const QString &))); connect (RKWorkplace::mainWorkplace (), SIGNAL (workspaceUrlChanged(const KUrl&)), this, SLOT (addWorkspaceUrl(const KUrl&))); part_manager = new KParts::PartManager (this); // When the manager says the active part changes, // the builder updates (recreates) the GUI connect (partManager (), SIGNAL (activePartChanged (KParts::Part *)), this, SLOT (partChanged (KParts::Part *))); readOptions(); RKGlobals::mtracker = new RKModificationTracker (this); initToolViewsAndR (); /////////////////////////////////////////////////////////////////// // build the interface setHelpMenuEnabled (false); setXMLFile ("rkwardui.rc"); insertChildClient (toplevel_actions = new RKTopLevelWindowGUI (this)); createShellGUI (true); RKXMLGUISyncer::self ()->watchXMLGUIClientUIrc (this); proxy_import->setMenu (dynamic_cast(guiFactory ()->container ("import", this))); proxy_export->setMenu (dynamic_cast(guiFactory ()->container ("export", this))); RKComponentMap::initialize (); startup_options = options; // stuff which should wait until the event loop is running QTimer::singleShot (0, this, SLOT (doPostInit ())); } RKWardMainWindow::~RKWardMainWindow() { RK_TRACE (APP); // these would not be strictly necessary, as we're exiting the app, anyway. delete RObjectList::getObjectList (); delete RObjectBrowser::mainBrowser (); delete RKCommandLog::getLog (); delete RKConsole::mainConsole (); delete RKHelpSearchWindow::mainHelpSearch (); delete RKGlobals::tracker (); delete RKGlobals::rInterface (); delete RControlWindow::getControl (); } void RKWardMainWindow::closeEvent (QCloseEvent *e) { RK_TRACE (APP); if (RKQuitAgent::quittingInProgress ()) { KParts::MainWindow::closeEvent (e); return; } e->ignore (); if (doQueryQuit ()) { emit (aboutToQuitRKWard()); new RKQuitAgent (this); } } void RKWardMainWindow::doPostInit () { RK_TRACE (APP); // Check installation first QFile resource_ver (RKCommonFunctions::getRKWardDataDir () + "resource.ver"); if (!(resource_ver.open (QIODevice::ReadOnly) && (resource_ver.read (100).trimmed () == RKWARD_VERSION))) { KMessageBox::error (this, i18n ("

    RKWard either could not find its resource files at all, or only an old version of those files. The most likely cause is that the last installation failed to place the files in the correct place. This can lead to all sorts of problems, from single missing features to complete failure to function.

    You should quit RKWard, now, and fix your installation. For help with that, see http://p.sf.net/rkward/compiling.

    "), i18n ("Broken installation"), KMessageBox::Notify | KMessageBox::AllowLink); } // startup options will be deleted from the R thread (TODO correct this!), so we need to copy the initial_url here, or run into race conditions KUrl open_url = startup_options ? startup_options->initial_url : KUrl (); QString evaluate_code = startup_options ? startup_options->evaluate : QString (); delete startup_options; startup_options = 0; initPlugins (); gui_rebuild_locked = false; show (); #ifdef Q_WS_WIN // detect and disable the buggy "native" file dialogs KConfigGroup cg = KGlobal::config ().data ()->group ("KFileDialog Settings"); if (cg.readEntry ("Native", true)) { int res = KMessageBox::questionYesNo (this, i18n ("Your installation of KDE is configured to use \"native\" file dialogs. This is known to cause issues in some cases, and we recommend to disable \"native\" file dialogs.\nShould \"native\" file dialogs be disabled in RKWard?"), i18n ("Potential problem with your configuration"), KGuiItem (i18n ("Yes, disable")), KGuiItem (i18n ("No, use \"native\" file dialogs")), "windows_native_kfiledialog"); if (res != KMessageBox::No) { cg.writeEntry ("Native", false); cg.sync (); } } #endif KUrl recover_url = RKRecoverDialog::checkRecoverCrashedWorkspace (); if (!recover_url.isEmpty ()) open_url = recover_url; if (!open_url.isEmpty () && (open_url.isRelative ())) { // make sure local urls are absolute, as we may be changing wd before loading open_url = KUrl::fromLocalFile (QDir::current ().absoluteFilePath (open_url.toLocalFile ())); } QString cd_to = RKSettingsModuleGeneral::initialWorkingDirectory (); if (!cd_to.isEmpty ()) { RKGlobals::rInterface ()->issueCommand ("setwd (" + RObject::rQuote (cd_to) + ")\n", RCommand::App); } if (!open_url.isEmpty()) { openWorkspace (open_url); } else { StartupDialog::StartupDialogResult result = StartupDialog::getStartupAction (this, fileOpenRecentWorkspace); if (!result.open_url.isEmpty ()) { openWorkspace (result.open_url); } else { if (result.result == StartupDialog::ChoseFile) { fileOpenNoSave (KUrl()); } else if (result.result == StartupDialog::EmptyTable) { RKWorkplace::mainWorkplace ()->editNewDataFrame (i18n ("my.data")); } } } if (RKSettingsModuleGeneral::workplaceSaveMode () == RKSettingsModuleGeneral::SaveWorkplaceWithSession) { RKWorkplace::mainWorkplace ()->restoreWorkplace (RKSettingsModuleGeneral::getSavedWorkplace (KGlobal::config ().data ()).split ('\n')); } if (RKSettingsModuleGeneral::showHelpOnStartup ()) { toplevel_actions->showRKWardHelp (); } if (!evaluate_code.isEmpty ()) RKConsole::pipeUserCommand (evaluate_code); setCaption (QString ()); // our version of setCaption takes care of creating a correct caption, so we do not need to provide it here } void RKWardMainWindow::initPlugins (const QStringList &automatically_added) { RK_TRACE (APP); slotSetStatusBarText(i18n("Setting up plugins...")); QStringList all_maps = RKSettingsModulePlugins::pluginMaps (); if (all_maps.isEmpty()) { KMessageBox::information (0, i18n ("Plugins are needed: you may manage these through \"Settings->Configure RKWard\".\n"), i18n ("No active plugin maps")); return; } factory ()->removeClient (RKComponentMap::getMap ()); RKComponentMap::clearAll (); QStringList completely_broken_maps; QStringList completely_broken_maps_details; QStringList somewhat_broken_maps; QStringList somewhat_broken_maps_details; for (int i = 0; i < all_maps.size (); ++i) { const QString &map = all_maps[i]; RKPluginMapParseResult result = RKComponentMap::addPluginMap (map); if (!result.valid_plugins) { RKSettingsModulePlugins::markPluginMapAsBroken (map); completely_broken_maps.append (map); completely_broken_maps_details.append (result.detailed_problems); } else if (!result.detailed_problems.isEmpty ()) { if (RKSettingsModulePlugins::markPluginMapAsQuirky (map)) { somewhat_broken_maps.append (map); somewhat_broken_maps_details.append (result.detailed_problems); } } else { RKSettingsModulePlugins::markPluginMapAsWorking (map); } } factory ()->addClient (RKComponentMap::getMap ()); if (!automatically_added.isEmpty ()) { // NOTE: When plugins are added from R, these must be fully initialized *before* showing any dialog, which is modal, i.e. has an event loop. Otherwise, subsequent calls e.g. to rk.call.plugin() could sneak in front of this. // This is the reason for handling notification about automatically_added plugins, here. KMessageBox::informationList (RKWardMainWindow::getMain (), i18n ("New RKWard plugin packs (listed below) have been found, and have been activated, automatically. To de-activate selected plugin packs, use Settings->Configure RKWard->Plugins."), automatically_added, i18n ("New plugins found"), "new_plugins_found"); } if (!completely_broken_maps.isEmpty ()) { QString maplist = "
    • " + completely_broken_maps.join ("
    • \n
    • ") + "
    "; KMessageBox::detailedError (0, QString ("

    %1

    %2

    ").arg (i18n ("The following RKWard pluginmap files could not be loaded, and have been disabled. This could be because they are broken, not compatible with this version of RKWard, or not meant for direct loading (see the 'Details' for more information). They have been disabled.")).arg (maplist), completely_broken_maps_details.join ("\n"), i18n ("Failed to load some plugin maps")); } if (!somewhat_broken_maps.isEmpty ()) { QString maplist = "
    • " + somewhat_broken_maps.join ("
    • \n
    • ") + "
    "; KMessageBox::detailedError (0, QString ("

    %1

    %2

    %3

    ").arg (i18n ("Some errors were encountered while loading the following RKWard pluginmap files. This could be because individual plugins are broken or not compatible with this version of RKWard (see the 'Details' for more information). Other plugins were loaded, successfully, however.")).arg (maplist).arg (i18n ("Note: You will not be warned about these pluginmap files again, until you upgrade RKWard, or remove and re-add them in Settings->Configure RKWard->Plugins.")), somewhat_broken_maps_details.join ("\n"), i18n ("Failed to load some plugin maps")); } slotSetStatusReady (); } void RKWardMainWindow::startR () { RK_TRACE (APP); RK_ASSERT (!RKGlobals::rInterface ()); // make sure our general purpose files directory exists bool ok = QDir ().mkpath (RKSettingsModuleGeneral::filesPath()); RK_ASSERT (ok); RKGlobals::rinter = new RInterface (); new RObjectList (); RObjectBrowser::mainBrowser ()->unlock (); } void RKWardMainWindow::slotConfigure () { RK_TRACE (APP); RKSettings::configureSettings (RKSettings::NoPage, this); } void RKWardMainWindow::slotCancelAllCommands () { RK_TRACE (APP); RK_ASSERT (RKGlobals::rInterface ()); RKGlobals::rInterface ()->cancelAll (); } void RKWardMainWindow::configureCarbonCopy () { RK_TRACE (APP); KDialog *dialog = new KDialog (); dialog->setCaption (i18n ("Carbon Copy Settings")); RKCarbonCopySettings *settings = new RKCarbonCopySettings (dialog); dialog->setMainWidget (settings); dialog->setButtons (KDialog::Ok | KDialog::Apply | KDialog::Cancel); dialog->setAttribute (Qt::WA_DeleteOnClose); connect (dialog, SIGNAL (okClicked()), settings, SLOT (applyChanges ())); connect (dialog, SIGNAL (applyClicked()), settings, SLOT (applyChanges ())); dialog->show (); } void RKWardMainWindow::initToolViewsAndR () { RK_TRACE (APP); RObjectBrowser::object_browser = new RObjectBrowser (0, true); RObjectBrowser::mainBrowser ()->setCaption (i18n ("Workspace")); RKToolWindowList::registerToolWindow (RObjectBrowser::mainBrowser (), "workspace", RKToolWindowList::Left, Qt::AltModifier + Qt::Key_1); RKCommandLog::rkcommand_log = new RKCommandLog (0, true); RKToolWindowList::registerToolWindow (RKCommandLog::rkcommand_log, "commandlog", RKToolWindowList::Bottom, Qt::AltModifier + Qt::Key_3); startR (); RKFileBrowser::main_browser = new RKFileBrowser (0, true); RKFileBrowser::main_browser->setCaption (i18n ("Files")); RKToolWindowList::registerToolWindow (RKFileBrowser::main_browser, "filebrowser", RKToolWindowList::Left, Qt::AltModifier + Qt::Key_2); RControlWindow::control_window = new RControlWindow (0, true); RControlWindow::getControl ()->setCaption (i18n ("Pending Jobs")); RKToolWindowList::registerToolWindow (RControlWindow::getControl (), "pendingjobs", RKToolWindowList::Nowhere, Qt::AltModifier + Qt::Key_4); RKConsole *console = new RKConsole (0, true); RKConsole::setMainConsole (console); RKToolWindowList::registerToolWindow (console, "console", RKToolWindowList::Bottom, Qt::AltModifier + Qt::Key_5); RKHelpSearchWindow *help_search = new RKHelpSearchWindow (0, true); RKHelpSearchWindow::main_help_search = help_search; RKToolWindowList::registerToolWindow (help_search, "helpsearch", RKToolWindowList::Bottom, Qt::AltModifier + Qt::Key_6); RKCallstackViewer::_instance = new RKCallstackViewer (0, true); RKCallstackViewer::instance ()->setCaption (i18n ("Debugger Frames")); RKToolWindowList::registerToolWindow (RKCallstackViewer::instance (), "debugframes", RKToolWindowList::Right, Qt::AltModifier + Qt::Key_8); // HACK: Creating this _after_ the callstackviewer is important, so the debug console will end up the active window when entering a debug context RKDebugConsole::_instance = new RKDebugConsole (0, true); RKDebugConsole::instance ()->setCaption (i18n ("Debugger Console")); RKToolWindowList::registerToolWindow (RKDebugConsole::instance (), "debugconsole", RKToolWindowList::Nowhere, Qt::AltModifier + Qt::Key_7); RKDebugMessageWindow::_instance = new RKDebugMessageWindow (0, true); RKDebugMessageWindow::instance ()->setCaption (i18n ("RKWard Debug Messages")); RKToolWindowList::registerToolWindow (RKDebugMessageWindow::instance (), "rkdebugmessages", RKToolWindowList::Nowhere, 0); RKWorkplace::mainWorkplace ()->placeToolWindows (); } void RKWardMainWindow::initActions() { RK_TRACE (APP); KAction *action; // TODO: is there a way to insert actions between standard actions without having to give all standard actions custom ids? new_data_frame = actionCollection ()->addAction ("new_data_frame", this, SLOT (slotNewDataFrame ())); new_data_frame->setText (i18n ("Dataset")); new_data_frame->setIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowDataFrameEditor)); new_data_frame->setStatusTip (i18n ("Creates new empty dataset and opens it for editing")); new_command_editor = actionCollection ()->addAction (KStandardAction::New, "new_command_editor", this, SLOT(slotNewCommandEditor())); new_command_editor->setText (i18n ("Script File")); new_command_editor->setIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowCommandEditor)); fileOpen = actionCollection ()->addAction (KStandardAction::Open, "file_openy", this, SLOT(slotOpenCommandEditor())); fileOpen->setText (i18n ("Open R Script File...")); fileOpenRecent = static_cast (actionCollection ()->addAction (KStandardAction::OpenRecent, "file_open_recenty", this, SLOT(slotOpenCommandEditor (const KUrl&)))); fileOpenRecent->setText (i18n ("Open Recent R Script File")); #ifdef Q_WS_WIN // TODO: find the cause and fix it! http://sourceforge.net/tracker/?func=detail&aid=2848341&group_id=50231&atid=459007 # warning TODO: import data dialog is disabled on windows due to bug in kdelibs #else action = actionCollection ()->addAction ("import_data", this, SLOT (importData())); action->setText (i18n ("Import Data")); action->setStatusTip (i18n ("Import data from a variety of file formats")); #endif fileOpenWorkspace = actionCollection ()->addAction (KStandardAction::Open, "file_openx", this, SLOT(slotFileOpenWorkspace())); fileOpenWorkspace->setText (i18n ("Open Workspace...")); fileOpenWorkspace->setShortcut (Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_O); fileOpenWorkspace->setStatusTip (i18n ("Opens an existing document")); fileOpenRecentWorkspace = static_cast (actionCollection ()->addAction (KStandardAction::OpenRecent, "file_open_recentx", this, SLOT(slotFileOpenRecentWorkspace(const KUrl&)))); fileOpenRecentWorkspace->setText (i18n ("Open Recent Workspace")); fileOpenRecentWorkspace->setStatusTip (i18n ("Opens a recently used file")); fileSaveWorkspace = actionCollection ()->addAction (KStandardAction::Save, "file_savex", this, SLOT(slotFileSaveWorkspace())); fileSaveWorkspace->setText (i18n ("Save Workspace")); fileSaveWorkspace->setShortcut (Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_S); fileSaveWorkspace->setStatusTip (i18n ("Saves the actual document")); fileSaveWorkspaceAs = actionCollection ()->addAction (KStandardAction::SaveAs, "file_save_asx", this, SLOT(slotFileSaveWorkspaceAs())); fileSaveWorkspaceAs->setText (i18n ("Save Workspace As")); fileSaveWorkspaceAs->setStatusTip (i18n ("Saves the actual document as...")); fileQuit = actionCollection ()->addAction (KStandardAction::Quit, "file_quitx", this, SLOT(close())); fileQuit->setStatusTip (i18n ("Quits the application")); interrupt_all_commands = actionCollection ()->addAction ("cancel_all_commands", this, SLOT (slotCancelAllCommands())); interrupt_all_commands->setText (i18n ("Interrupt all commands")); interrupt_all_commands->setShortcut (Qt::ShiftModifier + Qt::Key_Escape); interrupt_all_commands->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionInterrupt)); interrupt_all_commands->setEnabled (false); // enabled from within setRStatus() action = actionCollection ()->addAction ("carbon_copy", this, SLOT (configureCarbonCopy ())); action->setText (i18n ("CC commands to output...")); // These two currently do the same thing action = actionCollection ()->addAction ("load_unload_libs", this, SLOT (slotFileLoadLibs())); action->setText (i18n ("Manage R packages...")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionConfigurePackages)); action = actionCollection ()->addAction ("configure_packages", this, SLOT (slotFileLoadLibs())); action->setText (i18n ("Manage R packages...")); action->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionConfigurePackages)); setStandardToolBarMenuEnabled (true); createStandardStatusBarAction (); close_all_editors = actionCollection ()->addAction ("close_all_editors", this, SLOT (slotCloseAllEditors())); close_all_editors->setText (i18n ("Close All Data")); close_all_editors->setStatusTip (i18n ("Closes all open data editors")); action = actionCollection ()->addAction (KStandardAction::Close, "window_close", this, SLOT (slotCloseWindow())); window_close_all = actionCollection ()->addAction ("window_close_all", this, SLOT (slotCloseAllWindows())); window_close_all->setText (i18n ("Close All")); window_detach = actionCollection ()->addAction ("window_detach", this, SLOT (slotDetachWindow())); window_detach->setIcon (RKStandardIcons::getIcon (RKStandardIcons::ActionDetachWindow)); window_detach->setText (i18n ("Detach")); configure = actionCollection ()->addAction (KStandardAction::Preferences, "options_configure", this, SLOT (slotConfigure())); edit_menu_dummy = actionCollection ()->addAction ("edit_menu_dummy", this); edit_menu_dummy->setText (i18n ("[No actions available for current view]")); edit_menu_dummy->setEnabled (false); view_menu_dummy = actionCollection ()->addAction ("view_menu_dummy", this); view_menu_dummy->setText (edit_menu_dummy->text ()); view_menu_dummy->setEnabled (false); // collections for the toolbar: KActionMenu* open_any_action = new KActionMenu (KIcon ("document-open-folder"), i18n ("Open..."), this); open_any_action->setDelayed (false); actionCollection ()->addAction ("open_any", open_any_action); open_any_action->addAction (fileOpenWorkspace); open_any_action->addAction (fileOpenRecentWorkspace); open_any_action->addSeparator (); open_any_action->addAction (fileOpen); open_any_action->addAction (fileOpenRecent); open_any_action->addSeparator (); proxy_import = new KAction (i18n ("Import"), this); open_any_action->addAction (proxy_import); KActionMenu* new_any_action = new KActionMenu (KIcon ("document-new"), i18n ("Create..."), this); new_any_action->setDelayed (false); actionCollection ()->addAction ("new_any", new_any_action); new_any_action->addAction (new_data_frame); new_any_action->addAction (new_command_editor); save_any_action = new KActionMenu (KIcon ("document-save"), i18n ("Save..."), this); save_any_action->setDelayed (false); actionCollection ()->addAction ("save_any", save_any_action); proxy_export = new KAction (i18n ("Export"), this); save_any_action->addAction (fileSaveWorkspace); save_any_action->addAction (fileSaveWorkspaceAs); save_any_action->addSeparator (); // TODO: A way to add R-script-save actions, dynamically, would be nice save_actions_plug_point = save_any_action->addSeparator (); save_any_action->addAction (proxy_export); } /* // debug code: prints out all current actions void printActionsRecursive (QAction* action, const QString &prefix) { if (action->menu ()) { foreach (QAction *a, action->menu ()->actions ()) printActionsRecursive (a, prefix + action->text () + "->"); } else { qDebug ("%s", qPrintable (prefix + action->text ())); } } */ void updateEmptyMenuIndicator (QAction* indicator, const QMenu *menu) { if (!menu) { indicator->setVisible (false); return; } // NOTE: QMenu::isEmpty () does not work, here QList actions = menu->actions (); for (int i = 0; i < actions.size (); ++i) { if (actions[i] == indicator) continue; if (actions[i]->isSeparator ()) continue; if (actions[i]->isVisible ()) { indicator->setVisible (false); return; } } indicator->setVisible (true); } void RKWardMainWindow::partChanged (KParts::Part *part) { RK_TRACE (APP); if (gui_rebuild_locked) return; createGUI (part); if (!guiFactory ()) { RK_ASSERT (false); return; } updateEmptyMenuIndicator (edit_menu_dummy, dynamic_cast(guiFactory ()->container ("edit", this))); updateEmptyMenuIndicator (view_menu_dummy, dynamic_cast(guiFactory ()->container ("view", this))); // plug save file actions into the toolbar collections RK_ASSERT (save_any_action); for (int i = 0; i < plugged_save_actions.size (); ++i) { QAction* a = plugged_save_actions[i].data (); if (a) save_any_action->removeAction (a); } plugged_save_actions.clear (); RKMDIWindow *w = RKWorkplace::mainWorkplace ()->activeWindow (RKMDIWindow::Attached); if (w && (w->isType (RKMDIWindow::CommandEditorWindow))) { QAction *a = static_cast(w)->fileSaveAction (); if (a) plugged_save_actions.append (a); a = static_cast(w)->fileSaveAsAction (); if (a) plugged_save_actions.append (a); } for (int i = 0; i < plugged_save_actions.size (); ++i) { save_any_action->insertAction (save_actions_plug_point, plugged_save_actions[i]); } /* // debug code: prints out all current actions foreach (QAction *action, menuBar ()->actions ()) printActionsRecursive (action, QString ()); */ } void RKWardMainWindow::lockGUIRebuild (bool lock) { RK_TRACE (APP); if (lock) { RK_ASSERT (!gui_rebuild_locked); gui_rebuild_locked = true; } else { gui_rebuild_locked = false; partChanged (part_manager->activePart ()); } } void RKWardMainWindow::initStatusBar () { RK_TRACE (APP); statusbar_ready = new QLabel (i18n ("Ready."), statusBar ()); statusBar ()->addWidget (statusbar_ready); statusbar_cwd = new KSqueezedTextLabel (statusBar ()); statusbar_cwd->setAlignment (Qt::AlignRight); statusbar_cwd->setToolTip (i18n ("Current working directory")); statusBar ()->addWidget (statusbar_cwd, 10); updateCWD (); KHBox *box = new KHBox (statusBar ()); box->setSpacing (0); statusbar_r_status = new QLabel (" R ", box); statusbar_r_status->setFixedHeight (statusBar ()->fontMetrics ().height () + 2); QToolButton* dummy = new QToolButton (box); dummy->setDefaultAction (interrupt_all_commands); dummy->setFixedHeight (statusbar_r_status->height ()); dummy->setAutoRaise (true); statusBar ()->addPermanentWidget (box, 0); setRStatus (Starting); } void RKWardMainWindow::openWorkspace (const KUrl &url) { RK_TRACE (APP); if (url.isEmpty ()) return; new RKLoadAgent (url, false); } void RKWardMainWindow::saveOptions () { RK_TRACE (APP); KConfig *config = KGlobal::config ().data (); saveMainWindowSettings (config->group ("main window options")); KConfigGroup cg = config->group ("General Options"); // TODO: WORKAROUND. See corresponding line in readOptions () cg.writeEntry("Geometry", size ()); fileOpenRecentWorkspace->saveEntries (config->group ("Recent Files")); fileOpenRecent->saveEntries (config->group ("Recent Command Files")); RKSettings::saveSettings (config); config->sync (); } void RKWardMainWindow::readOptions () { RK_TRACE (APP); // first make sure to give the global defaults a chance, if needed. // TODO: Why don't the toolbars honor the global style automatically? QList tool_bars = toolBars (); for (int i=0; i < tool_bars.size (); ++i) { tool_bars[i]->setToolButtonStyle (KToolBar::toolButtonStyleSetting ()); } KConfig *config = KGlobal::config ().data (); applyMainWindowSettings (config->group ("main window options"), true); // TODO: WORKAROUND: Actually applyMainWindowSettings could/should do this, but apparently this just does not work for maximized windows. Therefore we use our own version instead. // KDE4: still needed? KConfigGroup cg = config->group ("General Options"); QSize size = cg.readEntry ("Geometry", QSize ()); if (size.isEmpty ()) { size = QApplication::desktop ()->availableGeometry ().size (); } resize (size); RKSettings::loadSettings (config); RK_ASSERT (config == KGlobal::config ().data ()); // not messing with config groups // initialize the recent file list fileOpenRecentWorkspace->loadEntries (config->group ("Recent Files")); fileOpenRecent->setMaxItems (RKSettingsModuleCommandEditor::maxNumRecentFiles ()); fileOpenRecent->loadEntries (config->group ("Recent Command Files")); } bool RKWardMainWindow::doQueryQuit () { RK_TRACE (APP); slotSetStatusBarText (i18n ("Exiting...")); saveOptions (); if (RKSettingsModuleGeneral::workplaceSaveMode () == RKSettingsModuleGeneral::SaveWorkplaceWithSession) { RKSettingsModuleGeneral::setSavedWorkplace (RKWorkplace::mainWorkplace ()->makeWorkplaceDescription ().join ("\n"), KGlobal::config ().data ()); } // if (!RObjectList::getGlobalEnv ()->isEmpty ()) { int res; res = KMessageBox::questionYesNoCancel (this, i18n ("Quitting RKWard: Do you want to save the workspace?"), i18n ("Save Workspace?"), KStandardGuiItem::save (), KStandardGuiItem::discard (), KGuiItem (i18n ("Don't quit"))); if (res == KMessageBox::Yes) { new RKSaveAgent (RKWorkplace::mainWorkplace ()->workspaceURL (), false, RKSaveAgent::DoNothing); } else if (res == KMessageBox::Cancel) { slotSetStatusReady (); return false; } // } RKWorkplace::RKWorkplaceObjectList map = RKWorkplace::mainWorkplace ()->getObjectList (); for (RKWorkplace::RKWorkplaceObjectList::const_iterator it = map.constBegin (); it != map.constEnd (); ++it) { lockGUIRebuild (true); if (!(*it)->close (true)) { if (!(*it)->isType (RKMDIWindow::X11Window)) { // X11 windows have a delayed close // If a child refuses to close, we return false. slotSetStatusReady (); lockGUIRebuild (false); return false; } } lockGUIRebuild (false); } return true; } void RKWardMainWindow::slotNewDataFrame () { RK_TRACE (APP); bool ok; QString name = KInputDialog::getText (i18n ("New dataset"), i18n ("Enter name for the new dataset"), "my.data", &ok, this); if (ok) RKWorkplace::mainWorkplace ()->editNewDataFrame (name); } void RKWardMainWindow::fileOpenNoSave (const KUrl &url) { RK_TRACE (APP); slotCloseAllEditors (); slotSetStatusBarText(i18n("Opening workspace...")); KUrl lurl = url; if (lurl.isEmpty ()) { #ifdef Q_WS_WIN // getOpenUrl(KUrl("kfiledialog:///"), ...) causes a hang on windows (KDElibs 4.2.3). # warning Track this bug down and/or report it lurl = KFileDialog::getOpenUrl (KUrl (), i18n("%1|R Workspace Files (%1)\n*|All files", RKSettingsModuleGeneral::workspaceFilenameFilter ()), this, i18n("Select workspace to open...")); #else lurl = KFileDialog::getOpenUrl (KUrl ("kfiledialog:///"), i18n("%1|R Workspace Files (%1)\n*|All files", RKSettingsModuleGeneral::workspaceFilenameFilter ()), this, i18n("Select workspace to open...")); #endif } if (!lurl.isEmpty ()) { openWorkspace (lurl); } slotSetStatusReady (); } void RKWardMainWindow::fileOpenAskSave (const KUrl &url) { RK_TRACE (APP); if (RObjectList::getObjectList ()->isEmpty ()) { fileOpenNoSave (url); return; } int res; res = KMessageBox::questionYesNoCancel (this, i18n ("Do you want to save the current workspace?"), i18n ("Save Workspace?")); if (res == KMessageBox::No) { fileOpenNoSave (url); } else if (res == KMessageBox::Yes) { new RKSaveAgent (RKWorkplace::mainWorkplace ()->workspaceURL (), false, RKSaveAgent::Load, url); } // else: cancel. Don't do anything } void RKWardMainWindow::slotFileOpenWorkspace () { RK_TRACE (APP); fileOpenAskSave (KUrl ()); } void RKWardMainWindow::slotFileOpenRecentWorkspace(const KUrl& url) { RK_TRACE (APP); fileOpenAskSave (url); } void RKWardMainWindow::slotFileLoadLibs () { RK_TRACE (APP); RKLoadLibsDialog *dial = new RKLoadLibsDialog (this, 0); dial->show (); } void RKWardMainWindow::slotFileSaveWorkspace () { RK_TRACE (APP); new RKSaveAgent (RKWorkplace::mainWorkplace ()->workspaceURL ()); } void RKWardMainWindow::slotFileSaveWorkspaceAs () { RK_TRACE (APP); new RKSaveAgent (RKWorkplace::mainWorkplace ()->workspaceURL (), true); } void RKWardMainWindow::addWorkspaceUrl (const KUrl &url) { RK_TRACE (APP); if (!url.isEmpty ()) fileOpenRecentWorkspace->addUrl (url); setCaption (QString::null); // trigger update of caption } void RKWardMainWindow::updateCWD () { RK_TRACE (APP); statusbar_cwd->setText (QDir::currentPath ()); } void RKWardMainWindow::slotSetStatusBarText (const QString &text) { RK_TRACE (APP); //KDE4: still needed? QString ntext = text.trimmed (); ntext.replace ("", ""); // WORKAROUND: what the ?!? is going on? The KTHMLPart seems to post such messages. if (ntext.isEmpty ()) { statusBar ()->clearMessage (); } else { statusBar ()->showMessage (ntext); } } void RKWardMainWindow::slotCloseWindow () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->closeActiveWindow (); } void RKWardMainWindow::slotCloseAllWindows () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->closeAll (); } void RKWardMainWindow::slotCloseAllEditors () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->closeAll (RKMDIWindow::DataEditorWindow); } void RKWardMainWindow::slotDetachWindow () { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->detachWindow (RKWorkplace::mainWorkplace ()->activeWindow (RKMDIWindow::Attached)); } void RKWardMainWindow::setRStatus (RStatus status) { RK_TRACE (APP); QColor status_color; if (status == Busy) { status_color = QColor (255, 0, 0); statusbar_r_status->setToolTip (i18n ("The R engine is busy.")); interrupt_all_commands->setEnabled (true); } else if (status == Idle) { status_color = QColor (0, 255, 0); statusbar_r_status->setToolTip (i18n ("The R engine is idle.")); interrupt_all_commands->setEnabled (false); } else { status_color = QColor (255, 255, 0); statusbar_r_status->setToolTip (i18n ("The R engine is being initialized.")); } QPalette palette = statusbar_r_status->palette (); palette.setBrush (statusbar_r_status->backgroundRole(), QBrush (status_color)); statusbar_r_status->setAutoFillBackground (true); statusbar_r_status->setPalette (palette); } void RKWardMainWindow::importData () { RK_TRACE (APP); new RKImportDialog ("import", this); } void RKWardMainWindow::slotNewCommandEditor () { RK_TRACE (APP); slotOpenCommandEditor (KUrl ()); } void RKWardMainWindow::addScriptUrl (const KUrl& url) { RK_TRACE (APP); if (!url.isEmpty ()) fileOpenRecent->addUrl (url); } void RKWardMainWindow::slotOpenCommandEditor (const KUrl &url, const QString &encoding) { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->openScriptEditor (url, encoding); } void RKWardMainWindow::slotOpenCommandEditor () { RK_TRACE (APP); KEncodingFileDialog::Result res; KUrl::List::const_iterator it; #ifdef Q_WS_WIN // getOpenUrls(KUrl("kfiledialog:///"), ...) causes a hang on windows (KDElibs 4.2.3). # warning Track this bug down and/or report it res = KEncodingFileDialog::getOpenUrlsAndEncoding (QString (), QString (), QString ("%1|R Script Files (%1)\n*|All Files (*)").arg (RKSettingsModuleCommandEditor::scriptFileFilter ()), this, i18n ("Open script file(s)")); #else res = KEncodingFileDialog::getOpenUrlsAndEncoding (QString (), "kfiledialog:///", QString ("%1|R Script Files (%1)\n*|All Files (*)").arg (RKSettingsModuleCommandEditor::scriptFileFilter ()), this, i18n ("Open script file(s)")); #endif for (it = res.URLs.begin() ; it != res.URLs.end() ; ++it) { slotOpenCommandEditor (*it, res.encoding); } }; void RKWardMainWindow::openHTML (const KUrl &url) { RK_TRACE (APP); RKWorkplace::mainWorkplace ()->openHelpWindow (url); } void RKWardMainWindow::setCaption (const QString &) { RK_TRACE (APP); QString wcaption = RKWorkplace::mainWorkplace ()->workspaceURL ().fileName (); if (wcaption.isEmpty ()) wcaption = RKWorkplace::mainWorkplace ()->workspaceURL ().prettyUrl (); if (wcaption.isEmpty ()) wcaption = i18n ("[Unnamed Workspace]"); RKMDIWindow *window = RKWorkplace::mainWorkplace ()->view ()->activePage (); if (window) wcaption.append (" - " + window->fullCaption ()); KParts::MainWindow::setCaption (wcaption); } #include "rkward.moc" rkward-0.6.1/rkward/rkward.desktop0000644000175000017500000000063612124345416016546 0ustar thomasthomas# KDE Config File [Desktop Entry] Name=RKWard Comment=GUI for the R-project Comment[pl]=Graficzny interfejs dla projektu R Comment[fr]=Interface graphique pour R Comment[uk]=Графічний інтерфейс мови програмування R Icon=rkward Exec=rkward -caption "%c" %i Terminal=false Type=Application DocPath=rkward/index.html Categories=Science;Math;NumericalAnalysis # vi: encoding=utf-8 rkward-0.6.1/rkward/SetVersionNumber.cmake0000644000175000017500000000106712124345416020134 0ustar thomasthomas# the IF condition enables manual setting of the version number string # which allows for different versioning needed for MacPorts IF(NOT RKVERSION_NUMBER) # set version number INCLUDE(${CMAKE_SOURCE_DIR}/VERSION.cmake) ENDIF(NOT RKVERSION_NUMBER) # replace placeholders with version number in several files CONFIGURE_FILE( version.h.in ${CMAKE_SOURCE_DIR}/rkward/version.h @ONLY) CONFIGURE_FILE( ver.R.in ${CMAKE_SOURCE_DIR}/rkward/rbackend/rpackages/rkward/R/ver.R @ONLY) CONFIGURE_FILE( resource.ver.in ${CMAKE_SOURCE_DIR}/rkward/resource.ver @ONLY) rkward-0.6.1/rkward/robjectviewer.cpp0000644000175000017500000002210712124345416017234 0ustar thomasthomas/*************************************************************************** robjectviewer - description ------------------- begin : Tue Aug 24 2004 copyright : (C) 2004, 2007, 2009 by Thomas Friedrichsmeier email : tfry@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "robjectviewer.h" #include #include #include #include #include #include #include #include #include #include "rbackend/rinterface.h" #include "rkglobals.h" #include "core/robject.h" #include "misc/rkdummypart.h" #include "debug.h" RObjectViewer::RObjectViewer (QWidget *parent, RObject *object, ViewerPage initial_page) : RKMDIWindow (parent, RKMDIWindow::ObjectWindow, false), RObjectListener (RObjectListener::ObjectView) { RK_TRACE (APP); RK_ASSERT (object); _object = object; addNotificationType (RObjectListener::ObjectRemoved); addNotificationType (RObjectListener::MetaChanged); addNotificationType (RObjectListener::DataChanged); listenForObject (_object); QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 0, 0, 0); description_label = new QLabel (this); description_label->setWordWrap (true); layout->addWidget (description_label); status_label = new QLabel (this); status_label->hide (); layout->addWidget (status_label); tabs = new QTabWidget (this); tabs->insertTab (SummaryPage, summary_widget = new RObjectSummaryWidget (tabs, object), i18n ("summary (x)")); tabs->insertTab (PrintPage, print_widget = new RObjectPrintWidget (tabs, object), i18n ("print (x)")); tabs->insertTab (StructurePage, structure_widget = new RObjectStructureWidget (tabs, object), i18n ("str (x)")); layout->addWidget (tabs); tabs->setFocusPolicy (Qt::StrongFocus); setPart (new RKDummyPart (this, tabs)); initializeActivationSignals (); tabs->setCurrentIndex (initial_page); currentTabChanged (initial_page); connect (tabs, SIGNAL (currentChanged(int)), this, SLOT (currentTabChanged (int))); initDescription (false); } RObjectViewer::~RObjectViewer () { RK_TRACE (APP); if (_object) stopListenForObject (_object); } void RObjectViewer::objectRemoved (RObject *object) { RK_TRACE (APP); if (object == _object) { summary_widget->objectKilled (); print_widget->objectKilled (); structure_widget->objectKilled (); QString reason = i18n ("Object was deleted!"); summary_widget->invalidate (reason); print_widget->invalidate (reason); structure_widget->invalidate (reason); QPalette palette = status_label->palette (); palette.setColor (status_label->foregroundRole (), Qt::red); status_label->setPalette (palette); status_label->setText (reason); status_label->show (); stopListenForObject (_object); _object = 0; } else { RK_ASSERT (false); } } void RObjectViewer::objectMetaChanged (RObject* object) { RK_TRACE (APP); if (object == _object) { initDescription (true); } else { RK_ASSERT (false); } } void RObjectViewer::objectDataChanged (RObject* object, const RObject::ChangeSet*) { RK_TRACE (APP); if (object == _object) { initDescription (true); } else { RK_ASSERT (false); } } void RObjectViewer::initDescription (bool notify) { RK_TRACE (APP); if (!_object) return; setCaption (i18n("Object Viewer: %1", _object->getShortName ())); // make the description use less height. Trying to specify s, here, is no good idea (see https://sourceforge.net/tracker/?func=detail&atid=459007&aid=2859182&group_id=50231) description_label->setText (_object->getObjectDescription ().replace ("
    ", "    ")); if (notify) { QString reason = i18n ("The object was changed. You may want to click \"Update\""); summary_widget->invalidate (reason); print_widget->invalidate (reason); structure_widget->invalidate (reason); } } void RObjectViewer::currentTabChanged (int new_current) { RK_TRACE (APP); if (new_current == SummaryPage) { summary_widget->initialize (); } else if (new_current == PrintPage) { print_widget->initialize (); } else if (new_current == StructurePage) { structure_widget->initialize (); } else { RK_ASSERT (false); } } ///////////////// RObjectViewerWidget ///////////////////// RObjectViewerWidget::RObjectViewerWidget (QWidget* parent, RObject* object) : QWidget (parent), RCommandReceiver () { RK_TRACE (APP); _object = object; QVBoxLayout* main_layout = new QVBoxLayout (this); main_layout->setContentsMargins (0, 0, 0, 0); QHBoxLayout* status_layout = new QHBoxLayout (); main_layout->addLayout (status_layout); status_label = new QLabel (this); status_layout->addWidget (status_label); status_layout->addStretch (); update_button = new QPushButton (i18n ("Update"), this); connect (update_button, SIGNAL (clicked ()), this, SLOT (update ())); status_layout->addWidget (update_button); cancel_button = new QPushButton (i18n ("Cancel"), this); connect (cancel_button, SIGNAL (clicked ()), this, SLOT (cancel ())); status_layout->addWidget (cancel_button); area = new QTextEdit (this); area->setReadOnly (true); area->setLineWrapMode (QTextEdit::NoWrap); main_layout->addWidget (area); initialized = false; } RObjectViewerWidget::~RObjectViewerWidget () { RK_TRACE (APP); } void RObjectViewerWidget::invalidate (const QString& reason) { RK_TRACE (APP); if (outstanding_commands.isEmpty ()) { QPalette palette = status_label->palette (); palette.setColor (status_label->foregroundRole (), Qt::red); status_label->setPalette (palette); status_label->setText (reason); update_button->setEnabled (_object != 0); cancel_button->setEnabled (false); } } void RObjectViewerWidget::initialize () { RK_TRACE (APP); if (initialized) return; update (); initialized = true; } void RObjectViewerWidget::update () { RK_TRACE (APP); RK_ASSERT (outstanding_commands.isEmpty ()); RK_ASSERT (_object); setText (i18n ("Fetching information. Please wait.")); update_button->setEnabled (false); cancel_button->setEnabled (true); } void RObjectViewerWidget::cancel () { RK_TRACE (APP); cancelOutstandingCommands (); setText (i18n ("Click \"Update\" to fetch information")); cancel_button->setEnabled (false); update_button->setEnabled (_object != 0); } void RObjectViewerWidget::setText (const QString& text) { RK_TRACE (APP); area->setPlainText (QString ()); QFont font = KGlobalSettings::fixedFont (); area->setCurrentFont (font); area->insertPlainText (text); } void RObjectViewerWidget::ready () { RK_TRACE (APP); QPalette palette = status_label->palette (); palette.setColor (status_label->foregroundRole (), Qt::black); status_label->setPalette (palette); status_label->setText (i18n ("Ready")); cancel_button->setEnabled (false); update_button->setEnabled (_object != 0); } void RObjectViewerWidget::rCommandDone (RCommand* command) { RK_TRACE (APP); if (command->wasCanceled ()) { cancel (); } else { setText (command->fullOutput ()); ready (); } } ////////////////// summary widget ///////////////// void RObjectSummaryWidget::update () { RK_TRACE (APP); if (!_object) { RK_ASSERT (false); return; } RObjectViewerWidget::update (); RCommand *command = new RCommand ("print(summary(" + _object->getFullName () + "))", RCommand::App, QString (), this); RKGlobals::rInterface ()->issueCommand (command, 0); } ////////////////// print widget ///////////////// void RObjectPrintWidget::update () { RK_TRACE (APP); if (!_object) { RK_ASSERT (false); return; } RObjectViewerWidget::update (); // make sure to print as wide as possible RCommand* command = new RCommand ("local({\n" "\trk.temp.width.save <- getOption(\"width\")\n" "\toptions(width=10000)\n" "\ton.exit(options(width=rk.temp.width.save))\n" "\tprint(" + _object->getFullName () + ")\n" "})", RCommand::App, QString (), this); RKGlobals::rInterface ()->issueCommand (command, 0); } ////////////////// structure widget ///////////////// void RObjectStructureWidget::update () { RK_TRACE (APP); if (!_object) { RK_ASSERT (false); return; } RObjectViewerWidget::update (); RCommand *command = new RCommand ("str(" + _object->getFullName () + ")", RCommand::App, QString (), this); RKGlobals::rInterface ()->issueCommand (command, 0); } #include "robjectviewer.moc" rkward-0.6.1/INSTALL0000644000175000017500000000711712124345420013414 0ustar thomasthomasRequirements =================== RKWard requires: - KDE-libraries and headers (>= 4.0) (http://www.kde.org) - Qt-libraries and headers (>= 4.3) (http://www.trolltech.com) - R and headers (http://www.r-project.org) - CMake (http://cmake.org) Compilation =================== IMPORTANT: You will need to have the R shared library installed. This is typically located in a place like /usr/lib/R/lib/libR.so. Unfortunately, some distributions do not yet ship their R binary with the shared library. In those (rare) cases, you'll have to compile and install R on your own with the option --enable-R-shlib. The recommended way to build from source is: > mkdir build; cd build > cmake path_to_rkward_sources [options] # see below > make > sudo make install CMake options (configuring) =================== The cmake command offers a number of parameters to control the build process. Some commonly needed are: -DCMAKE_INSTALL_PREFIX set the installation base directory. Generally -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` should be correct. -DCMAKE_BUILD_TYPE type of build. Useful settings include -DCMAKE_BUILD_TYPE=Release and -DCMAKE_BUILD_TYPE=debugfull In some cases you may want to set the following options: -DR_EXECUTABLE path to the R executable. You may want to set this, if you have multiple versions of R installed, or R is not in your path. Example: -DR_EXECUTABLE=/usr/bin/R -DR_LIBDIR directory where R packages should be installed. Generally, this option is only of interest to packagers. -DR_HOME R home directory. Almost certainly this option is not needed. -DR_INCLUDEDIR path to R include files. Almost certainly this option is not needed. -DNO_R_XML When packaging RKWard for binary distribution, it may be necessary to exclude the R syntax highlighting defintion "r.xml" from installation, as it may already be provided other packages. In this case, you can use: -DNO_R_XML=1 -DUSE_BINARY_PACKAGES Currently only interpreted on Mac OS: If RKWard should default to installing binary R packages (if available) use -DUSE_BINARY_PACKAGE=1. Otherwise, RKWard will default to building R packages from source. Further generic options are listed on http://www.cmake.org/Wiki/CMake_Useful_Variables . Installation ================== As a last step, you _have to_ run 'make install'. Otherwise RKWard will be missing important menu-options, may behave strangely, or may not run at all. As root run: > make install Make sure you have set the correct path in cmake (the -DCMAKE_INSTALL_PREFIX option). Running ================== For now it's recommended to run RKWard from the command-line for debug-output. For the few available command-line options see > rkward --help If an error occurs directly after starting, this will typically indicate a problem in your installation. In this case, please make sure, you have followed all above instructions diligently. Automated tests ================== A series of automated functionality tests can be run unsing 'make plugintests' *after* completing the installation. Unfortunately, these tests are rather prone to false alarms, and thus end users are not currently encouraged to run the tests. However, esp. developers, and packagers patching the sources should run 'make plugintests' after doing their changes. For failed tests, please take some time trying to understand, exactly how the test failed. Often it's just a harmless difference in rounding or formatting of output. If you see a genuine test failure, unrelated to your patches, please report this to rkward-devel AT lists DOT sourceforge DOT net, including details on your installed versions of KDE, R, and RKWard. rkward-0.6.1/VERSION.cmake0000644000175000017500000000017012124351116014501 0ustar thomasthomas# DO NOT CHANGE THIS FILE MANUALLY! # It will be overwritten by scripts/set_dist_version.sh SET(RKVERSION_NUMBER 0.6.1)