Development/EasyHacks/Completed

From The Document Foundation Wiki
Jump to: navigation, search

Completed Easy Hacks from Bugzilla

(click link for further details) Failed to load RSS feed from https://bugs.documentfoundation.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&field0-0-0=short_desc&field0-0-1=status_whiteboard&list_id=17497&query_format=advanced&type0-0-0=anywordssubstr&type0-0-1=anywordssubstr&value0-0-0=EasyHack&value0-0-1=EasyHack&title=Bug%20List&ctype=atom: HTTP request timed out. Open this query in Bugzilla

Old Wiki Easy Hacks

Gnome-document-open-recent.svg

This page was marked as inactive and is retained for historical reference.
Since we migrated Easy Hacks to bugzilla, completed Easy Hacks are just closed bugs there. This is just a historic reference from the early times, where Easy Hacks were in the Wiki only (which was then overwhelmed by our own success and did not scale to the amount of Easy Hacks we are working on in parallel.)


Contents

Add editor settings line to each source file

Background: Both vi and Emacs can read editor config from individual files. Would be cool to add that to most of the source files. Task is to write a script that does it, not actually send a patch.

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

[ ... all the file's content ... ]

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Skills: Write a Perl/Python script that adds stuff to files of a certain type.

Completed: Script by Jesse Adelman, ran by spaetz, pushed by meeks(?) (and others?), 2010-10-14T20:01:18

Pretty print the configure help options with AS_HELP_STRING

Background: The "inner" configure.in (rawbuild/configure.in or clone/bootstrap/configure.in) has a lot of options, and sometimes tangled indentation when using ./configure --help. AS_HELP_STRING is a autoconf macro to make it easy to get nice indentation in the help output.

Skills: autoconf syntax

Completed: arranna, 2010-11-03T14:19:02

Remove ineffectual emacs modeline remnants

If you find emacs modeline comments (e.g. /* -*- Mode: C++; ... -*- */) in the middle of a file (i.e. not at the very top) - elide it.

UPDATE: patch sent by spaetz on Oct 29 2010. Committed.

Completed: spaetz, 2010-10-29T06:45:51


Simple LibreOffice Lint tool to detect silly errors

Background: There are a number of gotchas that are common in the LibreOffice source code, and it would be great (while fixing these) to ensure that they do not happen again. As an example running:

bin/g grep 'String( RTL_CONSTASCII_STRINGPARAM' | grep \.cxx

Should show you lots of cases where the 'String' constructor is broken (it is ok for ByteString) - we need to fix all of these to use the correct (RTL_CONSTASCII_USTRINGPARAM) macro instead - but it would be great to have a trivial lint tool to run the grep, and parse the output we can run forever more when merging new patches.

Caolan solved this specific issue another way in the code

Skills: perl or python, basic C++ / common-sense

Use new SAL_N_ELEMENTS macro

Background: In many places in the code a fixed array size is hard-coded. This is both buggy and unnecessary - it is easy to calculate this at compiletime with a macro: eg.

char *string_array[] = { "hello", "world" };
for (int i = 0; i < 2; i++) // broken style
for (int i = 0; i < sizeof(string_array)/sizeof(string_array[0]); i++) // old style
for (int i = 0; i < SAL_N_ELEMENTS(string_array); i++) // best style

We should grep for all uses of 'sizeof' - and replace suitable 'old style' ones with the new macro to clean them up. Please note that this may require including sal/macros.h in a file that uses this - since it is not commonly included (sadly).

Skills: grep 'sizeof.*\[' simple code editing, compilation

Remove unhelpful File.hxx macros

Background: sal/inc/osl/file.hxx includes several #defines that are not namespaced eg. #define OpenFlag_Read osl_File_OpenFlag_Read. These should be replaced with their equivalents across the codebase, and the defines removed.

Skills: grep, simple code editing

Completed: Andy Holder, 2010-12-13


Remove bogus macros that expand to empty string

Background: There are several macros defined in the solar.h file that expand to empty string. Two such examples are __EXPORT and __FAR_DATA. Both are used throughout the code base but they don't add any value. Let's remove them. Perhaps __READONLY_DATA can be replaced with plain const too. Skills: grep, simple editing

Use RTL_CONSTASCII_USTRINGPARAM macro

Background: In many places in the code a OUString object is created from a string literal. An optimization available is to pass in the length of the string, which can be computed at compile time with RTL_CONSTASCII_USTRINGPARAM.

rtl::OUString aFoo(rtl::OUString::createFromAscii("foo")); //suboptimal
rtl::OUString aFoo = rtl::OUString::createFromAscii("foo"); //suboptimal
rtl::OUString aFoo(RTL_CONSTASCII_USTRINGPARAM("foo")); //best style and faster.

rtl::OUString aFoo(rtl::OUString::createFromAscii(pPointer)); //not a string literal, leave it alone
rtl::OUString aFoo(RTL_CONSTASCII_USTRINGPARAM(pPointer)); //wrong, not a string literal

Skills: grep 'createFromAscii' simple code editing, compilation

Completed: Multiple People, 2011-01-04


Replace suitable equalsAscii calls with equalsAsciiL

Background: In many places in the code a OUString object is compared against a string literal. An optimization available is to pass in the length of the string, which can be computed at compile time with RTL_CONSTASCII_STRINGPARAM. As a side note, equalsAsciiL compares in reverse order.

if (sFoo.equalsAscii("XXXXX")) //suboptimal
if (sFoo.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("XXXXX"))); //optimal

if (sFoo.equalsAscii(pPointer)) //not a string literal, leave it alone
if (sFoo.equalsAscii(RTL_CONSTASCII_STRINGPARAM("XXXXX"))); //wrong, you missed a trailing 'L'

Skills: grep 'equalsAscii' simple code editing, compilation - `grep 'equalsAscii\s*(\s*".*"\s*)' * -R`

Completed: Thomas Arnhold, 2011-01-28


Remove double line spacing

Background: For unknown reasons, some modules use double line spacing (ie. every other line is a newline) - making the code hard to read, and this is simply bad practice and perhaps the result of some failed unix/windows conversion. An example is:filter/source/xmlfilteradaptor/genericfilter.cxx (Fixed). It would be great to fix this, and/or find any other instances of this problem and fix these. Clearly, it is fine to have blank lines in normal source files, this applies only to these (perhaps very few) instances of mis-conversion where the majority of the file is erroneously double line spaced.

Skills: simple editing, search for the problem.

A list of suspicious files can be found here.

Completed: several people, 2011-02-08


change make test to make check all over the place

Background: Align !LibreOffice makefile targets with FLOSS conventions.

Skills: grep, Makefile reading

Completed: 2011-02-09


remove obsolete gjc aot compilation

Background: It used to make sense to use gcj to do ahead of time compilation, however this unfortunately (given the state of gcj) introduces some bugs, and it is no longer used. It would be great to rip the --enablegcj-aot option from configure.in, the JAVAAOTCOMPILER from set_soenv.in and from its usages in the build.

Skills: shell, autotools, make

Completed: 2011-02-12


Remove xine backend

Background: Under Unix the video/audio backend is gstreamer. There is an unused prototype xine one in avmedia/source/xine/ which can be removed. Search for xine in avmedia/prj/build.lst as well to remove the xine dir from the list of dirs to build

Skills: none

Completed: Julien Nabet, 2011-02-12

Migrate module descriptions to our wiki

Background: We need to extract and complete the module overview that was created by external volunteers, and then imported to the Oracle wiki. We should take this version before Sun edits, and migrate the module descriptions to the new code structure on this page

Skills: cut/paste of wiki markup, good taste

Completed: Christoph Herzog, 2011-02-15

Remove effectively-unused SVX_LIGHT macro

Background: There once was a conditional compile mode called SVX_LIGHT, with preprocessor macros of that name mostly in the svx module. This is long since dead and unused, and the #ifdef SVX_LIGHT / #endif pairs can be elided - please don't kill the code bracketed by this, only the #ifdef / #endif pair!

Skills: ability to identify and remove matching #ifdef / #endif pairs

Completed : Xavier Alt, 2011-03-22

Strip include guards in idl files

Background: the idl files have an include mecanism similar to the one use in C++. A lot of idl files have #ifndef's around each include... which doesn't make sense as long as there is an #ifndef for each file (as this is the case). The task is to remove all those include guards to make to idl files easier to read. TextColumns.idl is a good example of those horrible things. The strip-guards script could be used to perform the task though it will probably need to be improved.

Skills: Perl, simple C++ programming

Completed : Julien Nabet, 2011-04-02

expunge duplicate enumerations in vcl

Background: VCL used to have a separate 'psprint' module (namespace psp) to implement printing. This was merged with vcl, but lots of the enumerations duplicated between the two remain, along with mapping functions between them; see vcl/inc/vcl/fontmanager.hxx cf. font enumerations in vcl/inc/vcl/vclenum.hxx and vcl/inc/sft.hxx and duplicate mapping functions like ToFontFamily. It would be good to dung all of these out keeping the original vcl/ (ie. not psp::) enumerations.

Skills: reading, cleanup, compiling.

Completed: by Christina Rossmanith on 2011-04-11


remove all the bogus comments lying around

Background: Almost no-one believed that revision control works, so we see things like:

/* -----------------------------04.12.00 16:26--------------------------------

and

#include <svx/svxdlg.hxx> //CHINA001

and

// --> OD 2008-01-08 #newlistlevelattrs#

Skills: identifying bogus comments, and removing them.

Hints: Bash line:

git grep -nE " #[^i][0-9]+#" | ( while read f; do file=$(echo "$f" | cut -d':' -f1) ; line=$(echo "$f" | cut -d':' -f2) ; emacs "+"$line > -fh "$file"; done )

References:

Completed: Júlio Hoffimann 2011-04-14

VBA support add support for Worksheets.Copy

Background: Libreoffice's vba compatability Worksheet object is missing ( amongst other methods/properties ) the 'Copy' method. ( see tdf#34763 for associated issue ) It should be quite easy to add support for this method. You just need to update the existing idl (oovbaapi/ooo/vba/excel/XWorksheets.idl ) and provide the associated implementation in sc/source/ui/vba/vbaworksheets.[ch]xx. Required signature and some basic info about the Copy method is available from http://msdn.microsoft.com/en-us/library/bb212205%28v=office.12%29.aspx

Skills: Building, C++, some UNO, knowledge of Libreoffice uno API, some knowledge of VBA/Excel api

Completed: Markus Mohrhard, 18/04/2011

Add visibility markup to all component_get* functions

Background: We're in transition from one build system to another. In the old one we typically filtered out symbols we didn't want to export with a mix of visibility markup and map files. In the new one we solely use visibility markup. But we keep forgetting to convert some vital functions over to the new markup mechanism, causing loads of pain and suffering. So we should just move them all over in one fell swoop.

Bottom line is that: component_getFactory and component_getImplementationEnvironment need to be annotated with SAL_DLLPUBLIC_EXPORT, e.g. see this commit for an example commit template to follow.


Skills: grep

Completed: Julien Nabet 21/04/2011

remove cruft from perl scripts

Background: Our perl installer script: solenv/bin/make_installer.pl has lots of legacy features that can be removed - eg. sending mails about its progress: solenv/bin/modules/installer/mail.pm needs removing - we don't want to send mail people during the build.

Skills: perl Completed: Samuel Cantrell 2011-06-13


remove non-compiled / dead code

Background: There is tons of this lying around in the code. Apparently some developers don't believe in revision control. In calc, much un-used code is just commented out like this:

//UNUSED2008-05          if (nCount==1)
//UNUSED2008-05              return 0;                               // leer

all of this needs removing.

cppcheck can help you to identify such areas.

Skills: ability to identify and remove large sections of commented out / compiled out code

Completed: Júlio Hoffimann 2011-07-18

Slightly more interesting hacks

Remove libegg fluff

Background: The systray icon: sfx2/source/appl/shutdowniconunx.cxx currently uses a cut/pasted 'libegg' that is included in the LibreOffice toplevel. Instead it should switch to using the GtkStatusIcon API, which is very similar, more capable, and reduces our library count by one. We should then remove libegg. Extra bonus points for checking that we do indeed have the required gtk+ version inside the module at run-time.

Skills: build, simple C++, GNOME

Completed: Christopher Backhouse - 2010-12-06

don't ship 150 duplicate placeholder icons

Background: Currently, we ship tons of 'broken-icon' icons - duplicated many times in each icon theme. These are just designed to show visibly in the UI if they are used in error. This is a pointless waste of memory, disk, mirror bandwidth etc. Instead - we should have a single missing icon icon. We should hack the icon loading to fall back to this, checkout: vcl/source/gdi/impimagetree.cxx - instrument the methods there, define a name for that icon, and hard-code a fallback here.

Then we need to remove all the duplicate missing icon images from the default_images tree; ace_dent can help with that piece.

Skills: build, simple C++

Completed: Joachim Trémouroux - 2010-11-23

Copy configure options

Background: There is currently configure options which is only in build/configure.in. Those options shall be also in bootstrap/configure.in so that it would be possible to drop the build repository out of building process. See current configure options in bootstrap/configure.in.

Skills: text editor, autoconf syntax, patience

Obsolete / Complete: 2011-02-07

un-screw-up accessible icon code-paths & shrink theme files

Background: Whomever added the accessibility icon theming code created a limited solution of un-necessary complexity. Then real theming was introduced. We should remove the un-necessary !BmpColorMode code paths. We should also remove the redundant high-contrast icons from all the themes (retaining the discrete high-contrast theme itself of course) - that means moving all the lch_ and sch_ variants in default_images/res/commandimagelist (and similar icons) into a new directory in ooo_custom_images - and stripping all mention of them from the .src and .hrc files. Any coding effort can be supported by ace_dent, who has experience of preparing icon themes.

Benefit analysis: Saves ~10MB from the installed size. Removes ~3,300 files per icon theme, that will translate to faster loading times. Simplifies and shrinks code and will further aid optimizing icon themes.

Done by: Joseph Powers, Sebastian Spaeth, & Caolán McNamara (who was nice enough to fix our bugs)

Completed: 2010-11-22

build with strict-aliasing

Background: GCC compiler developers believe we can get performance benefits from gcc's -fstrict-aliasing flag. Finishing the work already started on this and merging it would be useful (see i#101100). This entails identifying and fixing sites that generate related warnings.

Completed: 2010-01-17 (Note, only for gcc > 4.5.1 and non stlport)

Hacks for the new visual formula editor

Blinking caret for the new visual formula editor

Background: The caret in the visual formula editor is currently drawn as a solid line, it would be great if it could blink like a normal caret does in a textbox. You'll need to add a timer to SmGraphicsWindow and modify SmGraphicsWindow::Paint. Notice, that you should mainly touch code that runs when IsInlineEditEnabled() is true.

Skills: Building, C++

Completed: luked, 2010-11-15T18:46:22

Draw solid line under current line in the new visual formula editor

Background: The line in which the caret is placed in the editor should be underlined, to emphasize exactly where the caret is placed (kind of like MathType). For this the SmCaretDrawingVisitor should be modified. Notice that finding the topmost node if a line is not trivial, see SmCursor::FindTopMostNodeInLine.

Skills: Building, C++

Completed: luked, 2010-11-17T22:07:24

Don't draw caret when visual formula editor looses focus

Background: Currently the visual formula editor keeps drawing the caret, even when it has lost focus. This is not pretty, it should be fixable in SmGraphicsWindow, by repainting when focus is lost, and not drawing caret when the editor doesn't have focus. Notice, that you should mainly touch code that runs when IsInlineEditEnabled() is true.

Skills: Building, C++

  • Patch sent to mailing list - Luked

Completed: Luked, 2010-11-02T21:18:44

Remove VOS library

Background: The VOS library has been obsolete for many years, but still lingers on in the codebase. Patches are in patches/dev300/vosremoval-* to remove it altogether, simplifying the code and speeding start-up. These need re-applying and building and some QA doing to test them. One fewer library means less seeking / reading at startup, and less obsolete code lying around.

Skills: build, C++

Completed: Norbert Thiebaud, 2010-10-24T08:57:30

Change Sheet copy process

Background: Currently the right click select Move/Copy sheet dialog allows for coping whole sheets. On exit the "new" sheet is named with _#, where _# is a underscore and number added by LibO to the original sheet name. The dialog needs to either have, or open based on the "Copy" box, text entry boxes added based on the number of sheets highlighted for copy. The text box could be pre-populated with the suggested name as the current "Rename sheet" dialog has.

Skills: C++, building, debugging

Completed: jooste, 2010-12-15T22:07:30

Leftover data after an Undo operation

Background: There is a currently a bug that leaves unwarranted data in cells during an undo operation. The undo record is likely getting incorrectly stored during the paste, which causes the undo to do the wrong thing. See Error when trying to cancel a paste when pasting multiple columns into cells (qa.openoffice.org) for more information and a simple test case.

Skills: C++, building, debugging

Completed: jooste, 2010-12-21T20:15:00

fix --help parameters

Background: The soffice binary should accept a -help argument, yet it apparently does not (code in desktop/). Possibly this is an artifact of the unix quickstarter, since soffice.bin -help does work. It would be lovely to make --help style arguments work as well.

Skills: build, C++

Completed: 2011-01-04

accelerate Perl installer builder

Background: For now we use solenv/bin/make_installer.pl, with Perl modules in solenv/bin/modules/installer, to do handle the production of an installer or data to go into packages. Unfortunately it is slow even on a fast machine.

  • Substituted spawning of processes for find and chmod with built-in perl routines

Skills: Perl, building

Improve Autocorrect capitalize first word in sentence

Background: We have an autocorrect feature to auto-capitalize the first word in a sentence.We should add a rule that protocol strings like http: don't get capitalized. i.e http: turning into Http: is ugly.

The code for this is (I think) editeng/source/misc/svxacorr.cxx SvxAutoCorrect::FnCptlSttSntnc. A list of protocols to auto-white list could be got with looping from INET_PROT_NOT_VALID to INET_PROT_END into INetURLObject::GetScheme of tools/inc/urlobj.hxx

(beuss 2011-02-21)

Skills: C++

Improve Autocorrect TWo initial capitals

Background: We have an autocorrect feature to fix two initial capitals, i.e TWo gets autocorrected to Two. We have a whitelist per-language for word that should not be fixed, e.g. MHz. But we should have an extra test to not fix the two-initial capitals if the word is considered correctly spelled by the spellchecking dictionary. There's nothing more annoying than having a correctly spelled word auto-corrected into an incorrectly spelled word.

So, see editeng/source/misc/svxacorr.cxx SvxAutoCorrect::FnCptlSttWrd. It currently only uses the !FindInWrdSttExceptList test. Grep for SvxGetSpellChecker() and "xSpellAlt = xSpeller->spell( aWord, eLang, aEmptySeq );" for getting and using the spellchecker in editeng.

Skills: C++


Remove F_PI definition from solar.h

Background: There are two different definitions of the Pi value in the code. The one defined in solar.h needs to be removed as it leads to precision errors. The task consist in removing the definitions from https://opengrok.libreoffice.org/xref/libs-gui/tools/inc/tools/solar.h and use the ones from https://opengrok.libreoffice.org/xref/libs-gui/basegfx/inc/basegfx/numeric/ftools.hxx everywhere. Other F_PI* and F_2PI constants are also defined in ftools.hxx. They could be removed.

Skills: building, simple C++ programming

Completed: Michael Lefevre, 2011/03/15

Improve git pre-commit hook

Background: When you commit a new file to the repositories, a git hook is executed that checks for various patterns we do not want to see in the repository, like tabs instead of spaces at the beginning of lines, etc. One of them is a check for trailing whitespace (see the 'bootstrap' repo, file git-hooks/pre-commit, function check_and_fix_whitespace()). This one should be limited to (c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|mk|MK|pmk|pl|pm|sdi|sh|src|tab|xcu|xml) only - instead of running the diff against everything, it should go file by file, using "git diff-index --cached --name-only $against", similarly to the check for the leading tabs.

Completed: Norbert Thiebaud, 2011/06/22

Easy Programming tasks

De-Java-ise flat XML export

Background: LibreOffice provides a way to turn an ODF (.zip) file to and from a flat XML file. This of course involves base64 encoding embedded binaries like images (etc.) but is fairly trivial, and of course this makes it possible to use XSLT filters. Unfortunately, this is written in Java, and as such causes deployment and performance problems. It would be great to re-write the flat-xml export / import to be just plain C - currently they are written as almost no-op XSLT filters (in filter/source/odfflatxml/) - and the XSLT framework is in (filter/source/xsltfilter) it would be great to convert some of the latter's .java files to C++, and special case flat XML import/export.

Completed: Peter Jentsch, 2011-01-10

Count characters without whitespace in the Writer statistics

Background: It seems useful (eg. for translators) to show also the number of characters without counting whitespace (spaces, tabs, and carriage returns) in the statistics page (in addition to what is already there). More info in tdf#30550. It is quite easy to achieve, because the functionality is already there, it is just necessary to not include whitespace to the count.

Completed: cbosdo, 2010-10-27T12:40:35

List all the contributors on a web page

Background: All the contributors need to be automatically thanked on some web page. Not only developers, but also localizing, QA and helping people. The idea here is to collect some data from git repos, wiki history, mailing lists, forums (others?) and present them nicely. Extracting from git is easy, but some automated way needs to be set up for the wiki, and the exact data to show needs to be determined for the forums / mailing-lists. For git, gitdm and the configuration scripts here can be used.

Skills: scripts

Assigned: I am working on this (spaetz)

Add a contributor page

The current contributor credit list is very hard to find. In the Help menu, select About... and in the about dialog, type CTRL-S-D-T to watch the credits fly by. The code is in libs-core/sfx2/.../about.cxx. This easter egg is pretty hard to discover and the display flickers a lot. One task would be to add a "contributor" button to that dialog and have a window pop up that presents the contributors in a nicer layout or so.

It would be like the Help->License info one - cf. sfx2/source/appl/appserv.cxx - that would load an ODF document containing the output of http://libreoffice.org/credits.html - so that we can ship that with the binaries. We could whack that in readlicense_oo - cf. LICENSE.odt and add a build of d.lst goodness, and some scp2 to get it into the install.

Skills: Building, C++, creativity, design skills(?) Result: Help -> Credits uses Spaetz' nice work.

Remove obsolete BmpColorMode enum

Background: The vcl/inc/vcl/bitmap.hxx BmpColorMode enumeration was primarily used for rendering high-contrast icons manually. These code paths are now removed, but there are still some vestigal uses. These should be removed, and the associated IMAGE_DRAW_MONOCHROME_* enumerations also expunged from the code.

Skills: C++, building

Completed: mordocai, 2011-2-1

Remove obsolete Hyperlink Bar

Background: There is a toolbar for inserting hyperlinks that's rarely used, but continues to occupy the precious menu space (View - Toolbar - Hyperlink Bar). This toolbar has been carried over from the ancient StarOffice time, and its design clearly shows its age. Let's remove this toolbar and all code associated with this cruft.

The Hyperlink Bar is implemented in the SvxHyperlinkDlg class. It's a good idea to remove this class as well as other classes used only by SvxHyperlinkDlg (such as HyperCombo and HyperFixedText).

Note that, this class is instantiated indirectly via SvxHyperlinkDlgWrapper class, which should be removed also upon removal of SvxHyperlinkDlg. Each application modules (sc, sw, and sd) contain reference to SvxHyperlinkDlgWrapper in order to register this dialog when loading the application. All of there references need to be removed as well.

Internally, each menu item corresponds with a "command", which is identified in two ways. One is by a numeric ID which is typically defined as a macro, and the other is by a UNO command name, prefixed by ".uno:". The Hyperlink Bar menu item is associated with the numerical ID SID_HYPERLINK_INSERT, and also with the UNO command .uno:InsertHyperlink. Use this knowledge when looking for the code to remove throughout the code base.

Also note that there is at least one place where this command is referenced by its hard-coded numerical value. The internal value of SID_HYPERLINK_INSERT is 10360, so, look out for some odd places where this command may be referenced by the hard-coded value of 10360.

Modules to look in are:

  • officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu - command definition
  • sc - calc
  • sd - impress and draw
  • sw - writer
  • svx - implementation for the Hyperlink Bar.
  • framework (and probably sfx2?) - misc framework stuff.
  • helpcontent2 - on-line help

Skills: C++, build, code analysis

Completed by: Alfonso Eusebio - 11/Feb/2011

add slide thumbnails to HTML export

Background: for a long time we've had a nice slide-gallery feature for HTML export lurking around in patches/test/sd-export-html-thumbnails.diff [1] - it needs resurrecting, applying, testing, whatever polish we can give it, and including.

Skills: building, simple C++, ability to grok HTML.

Completed by: Julien Nabet - 25/Mar/2011


Improve order of filters in the Open dialog

The order of filters in the Open dialog is more or less arbitrary, and it would make sense to order them better; eg. group the MS filters together, and sort them by the version (probably leading by the newer formats), etc.

Skills: C++, build, code analysis

Completed by: Matus Kukan - 2011-04-06

Programming Tasks

Export OLE objects as PDF / graphics

Background: It is not currently possible to export eg. a chart by itself as a PDF or PNG - but this would be a nice feature. We need to add a context menu to OLE2 object frames, to allow this please see tdf#30944 for a few sketchy code pointers to the UI side. Some bug fixes remain here, pwrt. expansion to calc and elsewhere.

Skills: building, C++, code reading, patience

Easy to solve bugs

Leave / return cursor to original position after Find & Replace All

Background: An oft requested improvement (since 2002!) for OpenOffice.org. After executing a "replace all", the cursor should be left where it was before before the "replace all", rather than at the position of the last replacement. More info at i#8288.

Completed: mattias, 2010-12-02T00:49:00

Calc

Removal of duplicated template classes in Calc filter code

Background: Calc filter code contains several template classes that should be replaced with boost equivalent, because having own template classes when boost has perfectly usable alternatives unnecessarily increase the learning curve for new hackers.

The following classes should be replaced with boost's equivalent:

  • ScfNoCopy -> boost::noncopyable (done)
  • ScfNoInstance -> boost::noncopyable (done)
  • ScfRef -> boost::intrusive_ptr or boost::shared_ptr (done)
  • ScfRefMap -> boost::ptr_map or std::map (done)
  • ScfDelList -> boost::ptr_list (?) (done)

which are all declared in sc/source/filter/inc/ftools.hxx.

Skills: building, hacking in C++, boost, smart pointers

Completed: Nigel Hawkins hfinished removal of ScfNoCopy, ScfNoInstance, ScfRef, and ScfDelList, and Kohei Yoshida did most of ScfRefMap.

Allow one autofilter per sheet, not per document

Background: Calc only allows one automatic autofilter per document. Let's say you have auto-filter on Sheet1. As soon as you enter another auto-filter on Sheet2, the first filter on Sheet1 disappears. The workaround is to manually define range via Data > Range before setting the autofilter, but that's not optimal from usability's POV. Calc should allow one automatic autofilter per sheet. This also affects interoperability with Excel, since Excel allows one autofilter per sheet.

Code pointers: ScDocShell::GetDBData() needs to be modified to allow multiple anonymous DB ranges for handling unnamed ranges. Let's first allow one anonymous DB range per sheet which makes handling of importing and exporting with Excel documents easier. Once that's in place, we can probably use that new functionality in the Excel import and export to map Excel's builtin ranges to the new multi-anonymous ranges.

Skills: building, debugging, medium C++, ability to read and understand C++ code.

References:

Completed: by Markus Mohrhard on 2011-03-30