diff options
157 files changed, 2643 insertions, 3499 deletions
diff --git a/automation/source/testtool/objtest.cxx b/automation/source/testtool/objtest.cxx index e08dd7c5faeb..63d8291b2310 100644 --- a/automation/source/testtool/objtest.cxx +++ b/automation/source/testtool/objtest.cxx @@ -2695,7 +2695,8 @@ void TestToolObj::DebugFindNoErrors( sal_Bool bDebugFindNoErrors ) SbxVariable* TestToolObj::Find( const String& aStr, SbxClassType aType) { - if ( BasicRuntimeAccess::IsRunInit() ) // wegen Find im "Global" Befehl des Basic + if ( BasicRuntimeAccess::IsRunInit() + || ( aStr == String( RTL_CONSTASCII_USTRINGPARAM( "ThisComponent" ) ) ) ) // wegen Find im "Global" Befehl des Basic return NULL; SbxVariableRef Old = SbxObject::Find(aStr, aType ); diff --git a/bin/lo-commit-stat b/bin/lo-commit-stat index 51029fff25cd..8c53ec96fc85 100755 --- a/bin/lo-commit-stat +++ b/bin/lo-commit-stat @@ -67,9 +67,9 @@ sub standardize_summary($) return $line; } -sub load_git_log($$$$) +sub load_git_log($$$$$) { - my ($pdata, $repo_dir, $piece, $git_command) = @_; + my ($pdata, $repo_dir, $piece, $branch_name, $git_command) = @_; my $cmd = "cd $repo_dir; $git_command"; my $commit_id; @@ -77,6 +77,13 @@ sub load_git_log($$$$) print STDERR "Analyzing log from the git repo: $piece...\n"; + my $repo_branch_name = get_branch_name($repo_dir); + if ( $branch_name ne $repo_branch_name ) { + die "Error: mismatch of branches:\n" . + " main repo is on the branch: $branch_name\n" . + " $piece repo is on the branch: $repo_branch_name\n"; + } + open (GIT, "$cmd 2>&1|") || die "Can't run $cmd: $!"; %{$pdata->{$piece}} = (); @@ -144,9 +151,9 @@ sub get_repo_name($) die "Error: can't find repo name in \"$$repo_dir/.git/config\"\n"; } -sub load_data($$$$) +sub load_data($$$$$) { - my ($pdata, $top_dir, $piece, $git_command) = @_; + my ($pdata, $top_dir, $piece, $branch_name, $git_command) = @_; if (defined $piece) { my $piece_dir; @@ -155,11 +162,11 @@ sub load_data($$$$) } else { $piece_dir = "$top_dir/clone/$piece"; } - load_git_log($pdata, $piece_dir, $piece, $git_command); + load_git_log($pdata, $piece_dir, $piece, $branch_name, $git_command); } else { - load_git_log($pdata, $top_dir, $main_repo, $git_command); + load_git_log($pdata, $top_dir, $main_repo, $branch_name, $git_command); foreach my $piece (@pieces) { - load_git_log($pdata, "$top_dir/clone/$piece", $piece, $git_command); + load_git_log($pdata, "$top_dir/clone/$piece", $piece, $branch_name, $git_command); } } } @@ -171,8 +178,6 @@ sub get_branch_name($) my $branch; my $cmd = "cd $top_dir && git branch"; - print STDERR "Analyzing git branch: "; - open (GIT, "$cmd 2>&1|") || die "Can't run $cmd: $!"; while (my $line = <GIT>) { @@ -184,19 +189,16 @@ sub get_branch_name($) } close GIT; - - die "Error: did not detect git branch name\n" unless defined ($branch); - - print STDERR "$branch\n"; + + die "Error: did not detect git branch name in $top_dir\n" unless defined ($branch); return $branch; } -sub open_log_file($$$) +sub open_log_file($$$$) { - my ($log_prefix, $log_suffix, $top_dir) = @_; + my ($log_prefix, $log_suffix, $top_dir, $branch_name) = @_; - my $branch_name = get_branch_name($top_dir); my $logfilename = "$log_prefix-$branch_name-$log_suffix.log"; if (-f $logfilename) { @@ -214,12 +216,12 @@ sub open_log_file($$$) return $log; } -sub print_summary_in_stat($$$$$$$$) +sub print_summary_in_stat($$$$$$$$$) { - my ($summary, $pprint_filters, $ppiece_title, $pflags, $pbugs, $pauthors, $prefix, $log) = @_; + my ($summary, $pprint_filters, $print_mode, $ppiece_title, $pflags, $pbugs, $pauthors, $prefix, $log) = @_; return if ( $summary eq "" ); - + # do we want to print this summary at all? my $print; if (%{$pprint_filters}) { @@ -232,7 +234,7 @@ sub print_summary_in_stat($$$$$$$$) return unless (defined $print); # print piece title if not done yet - if (defined ${$ppiece_title}) { + if ( defined ${$ppiece_title} && $print_mode ne "bugnumbers" ) { printf $log "${$ppiece_title}\n"; ${$ppiece_title} = undef; } @@ -240,7 +242,11 @@ sub print_summary_in_stat($$$$$$$$) # finally print the summary line my $bugs = ""; if ( %{$pbugs} ) { - $bugs = " (" . join (", ", keys %{$pbugs}) . ")"; + if ( $print_mode eq "bugnumbers" ) { + $bugs = join ("\n", keys %{$pbugs}) . "\n"; + } else { + $bugs = " (" . join (", ", keys %{$pbugs}) . ")"; + } } my $authors = ""; @@ -248,12 +254,16 @@ sub print_summary_in_stat($$$$$$$$) $authors = " [" . join (", ", keys %{$pauthors}) . "]"; } - printf $log $prefix . $summary . $bugs . $authors . "\n"; + if ( $print_mode eq "bugnumbers" ) { + printf $log $bugs; + } else { + printf $log $prefix . $summary . $bugs . $authors . "\n"; + } } -sub print_stat($$$) +sub print_stat($$$$) { - my ($pdata, $pprint_filters, $log) = @_; + my ($pdata, $pprint_filters, $print_mode, $log) = @_; foreach my $piece ( sort { $a cmp $b } keys %{$pdata}) { # check if this piece has any entries at all @@ -266,7 +276,7 @@ sub print_stat($$$) foreach my $id ( sort { $pdata->{$piece}{$a}{'summary'} cmp $pdata->{$piece}{$b}{'summary'} } keys %{$pdata->{$piece}}) { my $summary = $pdata->{$piece}{$id}{'summary'}; if ($summary ne $old_summary) { - print_summary_in_stat($old_summary, $pprint_filters, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + print_summary_in_stat($old_summary, $pprint_filters, $print_mode, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); $old_summary = $summary; %authors = (); %bugs = (); @@ -286,7 +296,7 @@ sub print_stat($$$) $flags{$flag} = 1; } } - print_summary_in_stat($old_summary, $pprint_filters, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); + print_summary_in_stat($old_summary, $pprint_filters, $print_mode, \$piece_title, \%flags, \%bugs, \%authors, " + ", $log); } } } @@ -308,6 +318,7 @@ sub usage() " commit-log-<branch>-<log-name-suffix>.log; the branch name\n" . " is detected automatically\n" . " --bugs print just bug fixes\n" . + " --bug-numbers print just fixed bug numbers\n" . " --rev-list use \"git rev-list\" instead of \"git log\"; useful to check\n" . " differences between branches\n" . " topdir directory with the libreoffice/bootstrap clone; the piece repos\n" . @@ -333,9 +344,11 @@ my $log_prefix = "commit-log"; my $log_suffix; my $log; my $git_command = "git log"; +my $branch_name; my @git_args; my %data; my %print_filters = (); +my $print_mode = "normal"; foreach my $arg (@ARGV) { if ($arg eq '--help') { @@ -350,6 +363,10 @@ foreach my $arg (@ARGV) { } elsif ($arg eq '--bugs') { $print_filters{'bug'} = 1; $log_prefix = "bugfixes" + } elsif ($arg eq '--bug-numbers') { + $print_filters{'bug'} = 1; + $log_prefix = "bugnumbers"; + $print_mode = "bugnumbers"; } elsif ($arg eq '--rev-list') { $git_command = "git rev-list --pretty=medium" } else { @@ -369,8 +386,10 @@ $git_command .= " " . join ' ', @git_args if (@git_args); (defined $log_suffix) || die "Error: define log suffix using --log-suffix=<string>\n"; -load_data(\%data, $top_dir,$piece, $git_command); +$branch_name = get_branch_name($top_dir); + +load_data(\%data, $top_dir, $piece, $branch_name, $git_command); -$log = open_log_file($log_prefix, $log_suffix, $top_dir); -print_stat(\%data, \%print_filters, $log); +$log = open_log_file($log_prefix, $log_suffix, $top_dir, $branch_name); +print_stat(\%data, \%print_filters, $print_mode, $log); close $log; diff --git a/comphelper/source/officeinstdir/officeinstallationdirectories.cxx b/comphelper/source/officeinstdir/officeinstallationdirectories.cxx index de636191b1aa..caff6185defb 100644 --- a/comphelper/source/officeinstdir/officeinstallationdirectories.cxx +++ b/comphelper/source/officeinstdir/officeinstallationdirectories.cxx @@ -162,9 +162,9 @@ OfficeInstallationDirectories::makeRelocatableURL( const rtl::OUString& URL ) if ( nIndex != -1 ) { return rtl::OUString( - URL.replaceAt( nIndex, - m_pOfficeBrandDir->getLength(), - m_aOfficeBrandDirMacro ) ); + aCanonicalURL.replaceAt( nIndex, + m_pOfficeBrandDir->getLength(), + m_aOfficeBrandDirMacro ) ); } else { @@ -172,9 +172,9 @@ OfficeInstallationDirectories::makeRelocatableURL( const rtl::OUString& URL ) if ( nIndex != -1 ) { return rtl::OUString( - URL.replaceAt( nIndex, - m_pOfficeBaseDir->getLength(), - m_aOfficeBaseDirMacro ) ); + aCanonicalURL.replaceAt( nIndex, + m_pOfficeBaseDir->getLength(), + m_aOfficeBaseDirMacro ) ); } else { @@ -182,9 +182,9 @@ OfficeInstallationDirectories::makeRelocatableURL( const rtl::OUString& URL ) if ( nIndex != -1 ) { return rtl::OUString( - URL.replaceAt( nIndex, - m_pUserDir->getLength(), - m_aUserDirMacro ) ); + aCanonicalURL.replaceAt( nIndex, + m_pUserDir->getLength(), + m_aUserDirMacro ) ); } } } diff --git a/configure.in b/configure.in index 8624333bf2e2..895d43be5451 100755 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ dnl configure.in serves as input for the GNU autoconf package dnl in order to create a configure script. -AC_INIT([LibreOffice], [3.3],,, [http://documentfoundation.org/]) +AC_INIT([LibreOffice], [3.4],,, [http://documentfoundation.org/]) AC_PREREQ(2.50) echo "$@" >config.parms @@ -472,6 +472,11 @@ AC_ARG_ENABLE(extra-font, [Add extra font content.]), ,) +AC_ARG_ENABLE(lomenubar, + AS_HELP_STRING([--enable-lomenubar], + [Enable global menu support.]), +,) + dnl =================================================================== dnl Optional Packages (--with/without-) dnl =================================================================== @@ -1176,15 +1181,6 @@ AC_ARG_WITH(lang, ], ,) -AC_ARG_WITH(poor-help-localizations, - AS_HELP_STRING([--with-poor-help-localizations], - [Use this option to specify which languages have unusable help localizations. - Separate multiple languages with space.]) - [ - Usage: --with-poor-help-localizations="af be" - ], -,) - AC_ARG_WITH(intro-bitmap, [ --with-intro-bitmap Prefer the specified intro bitmap over the the default one. @@ -1212,7 +1208,7 @@ AC_ARG_WITH(install-dirname, [Specify the directory name of the core LibO install dir. The final installation path is defined by <libdir>/<install-dirname>. The default value is "libreoffice" and the default installation - patch is /usr/lib/libreoffice. + path is /usr/lib/libreoffice. FIXME: It affects only the installation by "make install" and not the generated installation sets.]) @@ -7449,6 +7445,19 @@ AC_SUBST(WITH_EXTRA_FONT) AC_SUBST(OOOP_FONTS_PACK) dnl =================================================================== +dnl Test whether to build global menu support +dnl =================================================================== +AC_MSG_CHECKING([whether to build global menu support]) +if test "z$enable_lomenubar" = "z" -o "z$enable_lomenubar" = "zno" ; then + AC_MSG_RESULT([no]) + ENABLE_LOMENUBAR="FALSE" +else + AC_MSG_RESULT([yes]) + ENABLE_LOMENUBAR="TRUE" +fi +AC_SUBST(ENABLE_LOMENUBAR) + +dnl =================================================================== dnl Test whether to enable ActiveX embedding dnl =================================================================== if test "$_os" = "WINNT"; then @@ -7758,14 +7767,14 @@ dnl =================================================================== GIT_REPO_NAMES="artwork base calc components extensions extras filters help impress libs-core libs-extern libs-extern-sys libs-gui postprocess sdk testing ure writer" AC_MSG_CHECKING([which languages to be built]) # get list of all languages -# generate shell variable from completelangiso= from solenv/inc/postset.mk +# generate shell variable from completelangiso= from solenv/inc/langlist.mk # the sed command does the following: # + if a line ends with a backslash, append the next line to it # + adds " on the beginning of the value (after =) # + adds " at the end of the value # + removes en-US; we want to put it on the beginning # + prints just the section starting with 'completelangiso=' and ending with the " at the end of line -[eval $(sed -e :a -e '/\\$/N; s/\\\n//; ta' -n -e 's/=/="/;s/\([^\\]\)$/\1"/;s/en-US//;/^completelangiso/p' solenv/inc/postset.mk)] +[eval $(sed -e :a -e '/\\$/N; s/\\\n//; ta' -n -e 's/=/="/;s/\([^\\]\)$/\1"/;s/en-US//;/^completelangiso/p' solenv/inc/langlist.mk)] ALL_LANGS="en-US $completelangiso" # check the configured localizations WITH_LANG="$with_lang" @@ -7788,15 +7797,6 @@ AC_SUBST(ALL_LANGS) AC_SUBST(WITH_LANG) AC_SUBST(GIT_REPO_NAMES) -AC_MSG_CHECKING([which languages have poor help localizations]) -WITH_POOR_HELP_LOCALIZATIONS="$with_poor_help_localizations" -if test -z "$WITH_POOR_HELP_LOCALIZATIONS"; then - AC_MSG_RESULT([none]) -else - AC_MSG_RESULT([$WITH_POOR_HELP_LOCALIZATIONS]) -fi -AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS) - AC_MSG_CHECKING([for another 'intro' bitmap]) INTRO_BITMAP= if test -z "$with_intro_bitmap" -o "$with_intro_bitmap" = "no" ; then diff --git a/default_images/sw/res/page-bottom-shadow-mask.png b/default_images/sw/res/page-bottom-shadow-mask.png Binary files differdeleted file mode 100644 index fd19f034bb0f..000000000000 --- a/default_images/sw/res/page-bottom-shadow-mask.png +++ /dev/null diff --git a/default_images/sw/res/page-bottomright-shadow-mask.png b/default_images/sw/res/page-bottomright-shadow-mask.png Binary files differdeleted file mode 100644 index 94f32290092a..000000000000 --- a/default_images/sw/res/page-bottomright-shadow-mask.png +++ /dev/null diff --git a/default_images/sw/res/page-right-shadow-mask.png b/default_images/sw/res/page-right-shadow-mask.png Binary files differdeleted file mode 100644 index 784e00f37afc..000000000000 --- a/default_images/sw/res/page-right-shadow-mask.png +++ /dev/null diff --git a/default_images/sw/res/page-shadow-mask.png b/default_images/sw/res/page-shadow-mask.png Binary files differnew file mode 100644 index 000000000000..5ffb7d934f09 --- /dev/null +++ b/default_images/sw/res/page-shadow-mask.png diff --git a/desktop/win32/source/setup/Resource.h b/desktop/win32/source/setup/Resource.h index 600056d0a8ee..600056d0a8ee 100755..100644 --- a/desktop/win32/source/setup/Resource.h +++ b/desktop/win32/source/setup/Resource.h diff --git a/desktop/win32/source/setup/makefile.mk b/desktop/win32/source/setup/makefile.mk index f0c6e0e955fd..f0c6e0e955fd 100755..100644 --- a/desktop/win32/source/setup/makefile.mk +++ b/desktop/win32/source/setup/makefile.mk diff --git a/desktop/win32/source/setup/rcfooter.txt b/desktop/win32/source/setup/rcfooter.txt index 3237729437f5..3237729437f5 100755..100644 --- a/desktop/win32/source/setup/rcfooter.txt +++ b/desktop/win32/source/setup/rcfooter.txt diff --git a/desktop/win32/source/setup/rcheader.txt b/desktop/win32/source/setup/rcheader.txt index 9a59ad7f6477..9a59ad7f6477 100755..100644 --- a/desktop/win32/source/setup/rcheader.txt +++ b/desktop/win32/source/setup/rcheader.txt diff --git a/desktop/win32/source/setup/rctmpl.txt b/desktop/win32/source/setup/rctmpl.txt index 59f454f70c16..59f454f70c16 100755..100644 --- a/desktop/win32/source/setup/rctmpl.txt +++ b/desktop/win32/source/setup/rctmpl.txt diff --git a/desktop/win32/source/setup/setup.cpp b/desktop/win32/source/setup/setup.cpp index 35335f9c5435..52746837646c 100755..100644 --- a/desktop/win32/source/setup/setup.cpp +++ b/desktop/win32/source/setup/setup.cpp @@ -87,8 +87,8 @@ #define RUNTIME_X64_NAME TEXT( "redist\\vcredist_x64.exe" ) #define RUNTIME_X86_NAME TEXT( "redist\\vcredist_x86.exe" ) -#define PRODUCTCODE_X86 TEXT( "{E503B4BF-F7BB-3D5F-8BC8-F694B1CFF942}" ) -#define PRODUCTCODE_X64 TEXT( "{350AA351-21FA-3270-8B7A-835434E766AD}" ) +#define PRODUCTCODE_X86 TEXT( "{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}" ) +#define PRODUCTCODE_X64 TEXT( "{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}" ) #define MSIAPI_DllGetVersion "DllGetVersion" #define ADVAPI32API_CheckTokenMembership "CheckTokenMembership" @@ -835,10 +835,10 @@ boolean SetupAppX::LaunchInstaller( LPCTSTR pParam ) PROCESS_INFORMATION aPI; Log( TEXT( " Will install using <%s>\r\n" ), sMsiPath ); - Log( TEXT( " Prameters are: %s\r\n" ), pParam ); + Log( TEXT( " Parameters are: %s\r\n" ), pParam ); OutputDebugStringFormat( TEXT( " Will install using <%s>\r\n" ), sMsiPath ); - OutputDebugStringFormat( TEXT( " Prameters are: %s\r\n" ), pParam ); + OutputDebugStringFormat( TEXT( " Parameters are: %s\r\n" ), pParam ); ZeroMemory( (void*)&aPI, sizeof( PROCESS_INFORMATION ) ); ZeroMemory( (void*)&aSUI, sizeof( STARTUPINFO ) ); diff --git a/desktop/win32/source/setup/setup.ulf b/desktop/win32/source/setup/setup.ulf index 85d43f43aa55..85d43f43aa55 100755..100644 --- a/desktop/win32/source/setup/setup.ulf +++ b/desktop/win32/source/setup/setup.ulf diff --git a/distro-configs/LibreOfficeLinux.conf b/distro-configs/LibreOfficeLinux.conf index 4a5960795ef5..3a0ba885b044 100644 --- a/distro-configs/LibreOfficeLinux.conf +++ b/distro-configs/LibreOfficeLinux.conf @@ -35,6 +35,9 @@ --enable-ext-presenter-minimizer --enable-ext-presenter-console --enable-ext-pdfimport +--enable-ext-scripting-beanshell +--enable-ext-scripting-javascript +--enable-ext-scripting-python --enable-epm --enable-cairo --enable-binfilter diff --git a/distro-configs/LibreOfficeMacOSX.conf b/distro-configs/LibreOfficeMacOSX.conf index 207a715eee10..28f49fa3838c 100644 --- a/distro-configs/LibreOfficeMacOSX.conf +++ b/distro-configs/LibreOfficeMacOSX.conf @@ -9,4 +9,7 @@ --enable-ext-pdfimport --enable-ext-wiki-publisher --enable-ext-report-builder +--enable-ext-scripting-beanshell +--enable-ext-scripting-javascript +--enable-ext-scripting-python --with-extension-integration diff --git a/distro-configs/LibreOfficeWin32.conf b/distro-configs/LibreOfficeWin32.conf index 050bb7caa088..257ce7097d9a 100644 --- a/distro-configs/LibreOfficeWin32.conf +++ b/distro-configs/LibreOfficeWin32.conf @@ -7,3 +7,6 @@ --with-java-target-version=1.5 --disable-xrender-link --disable-activex-component +--enable-ext-scripting-beanshell +--enable-ext-scripting-javascript +--enable-ext-scripting-python diff --git a/distro-configs/LibreOfficeWin64.conf b/distro-configs/LibreOfficeWin64.conf index 1a9ce954f2ab..889237f03326 100644 --- a/distro-configs/LibreOfficeWin64.conf +++ b/distro-configs/LibreOfficeWin64.conf @@ -4,3 +4,6 @@ --enable-cl-x64 --disable-xrender-link --disable-activex-component +--enable-ext-scripting-beanshell +--enable-ext-scripting-javascript +--enable-ext-scripting-python diff --git a/distro-configs/OxygenOfficeLinux.conf b/distro-configs/OxygenOfficeLinux.conf index f63faba2d506..d2050eb0009d 100644 --- a/distro-configs/OxygenOfficeLinux.conf +++ b/distro-configs/OxygenOfficeLinux.conf @@ -21,7 +21,7 @@ --enable-extra-template --enable-extra-sample --enable-extra-font ---with-lang=en-US hu de fr it tr ka fi pl nl pt-BR es ja zh-CN sv cs-CZ ko sl +--with-lang=en-US hu de fr it tr ka fi pl nl pt-BR es ja zh-CN sv cs ko sl --enable-opengl --enable-dbus --enable-gnome-vfs diff --git a/distro-configs/OxygenOfficeWin32.conf b/distro-configs/OxygenOfficeWin32.conf index 9f2429713eee..45927e0dd351 100644 --- a/distro-configs/OxygenOfficeWin32.conf +++ b/distro-configs/OxygenOfficeWin32.conf @@ -10,7 +10,7 @@ --enable-extra-template --enable-extra-sample --enable-extra-font ---with-lang=hu de fr it tr ka fi pl nl pt-BR es ja zh-CN sv cs-CZ ko sl +--with-lang=hu de fr it tr ka fi pl nl pt-BR es ja zh-CN sv cs ko sl --with-extension-integration --enable-ext-wiki-publisher --enable-ext-report-builder diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index f6af728d0e66..1a4052799b6e 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -934,7 +934,7 @@ sal_Bool ImpEditEngine::CreateLines( sal_uInt16 nPara, sal_uInt32 nStartPosY ) long nCurPos = nTmpWidth+nStartX; // consider scaling if ( aStatus.DoStretch() && ( nStretchX != 100 ) ) - nCurPos = nCurPos*100/nStretchX; + nCurPos = nCurPos*100/std::max(static_cast<sal_Int32>(nStretchX), static_cast<sal_Int32>(1)); short nAllSpaceBeforeText = static_cast< short >(rLRItem.GetTxtLeft()/* + rLRItem.GetTxtLeft()*/ + nSpaceBeforeAndMinLabelWidth); aCurrentTab.aTabStop = pNode->GetContentAttribs().FindTabStop( nCurPos - nAllSpaceBeforeText /*rLRItem.GetTxtLeft()*/, aEditDoc.GetDefTab() ); @@ -1308,6 +1308,13 @@ sal_Bool ImpEditEngine::CreateLines( sal_uInt16 nPara, sal_uInt32 nStartPosY ) pLine->SetHeight( nMinHeight, nTxtHeight ); } } + else if ( rLSItem.GetLineSpaceRule() == SVX_LINE_SPACE_FIX ) + { + sal_uInt16 nFixHeight = GetYValue( rLSItem.GetLineHeight() ); + sal_uInt16 nTxtHeight = pLine->GetHeight(); + pLine->SetMaxAscent( (sal_uInt16)(pLine->GetMaxAscent() + ( nFixHeight - nTxtHeight ) ) ); + pLine->SetHeight( nFixHeight, nTxtHeight ); + } else if ( rLSItem.GetInterLineSpaceRule() == SVX_INTER_LINE_SPACE_PROP ) { if ( nPara || IsFixedCellHeight() || pLine->GetStartPortion() ) // Not the very first line @@ -1636,6 +1643,14 @@ void ImpEditEngine::CreateAndInsertEmptyLine( ParaPortion* pParaPortion, sal_uIn pTmpLine->SetHeight( nMinHeight, nTxtHeight ); } } + else if ( rLSItem.GetLineSpaceRule() == SVX_LINE_SPACE_FIX ) + { + sal_uInt16 nFixHeight = rLSItem.GetLineHeight(); + sal_uInt16 nTxtHeight = pTmpLine->GetHeight(); + + pTmpLine->SetMaxAscent( (sal_uInt16)(pTmpLine->GetMaxAscent() + ( nFixHeight - nTxtHeight ) ) ); + pTmpLine->SetHeight( nFixHeight, nTxtHeight ); + } else if ( rLSItem.GetInterLineSpaceRule() == SVX_INTER_LINE_SPACE_PROP ) { sal_uInt16 nPara = GetParaPortions().GetPos( pParaPortion ); diff --git a/extensions/source/plugin/inc/plugin/unx/plugcon.hxx b/extensions/source/plugin/inc/plugin/unx/plugcon.hxx index 2b8bf4f7a89d..cada23a0f448 100644 --- a/extensions/source/plugin/inc/plugin/unx/plugcon.hxx +++ b/extensions/source/plugin/inc/plugin/unx/plugcon.hxx @@ -98,7 +98,7 @@ extern "C" { # endif #endif -#ifndef _NPAPI_H_ +#if ! defined ( _NPAPI_H_) && ! defined (npapi_h_) extern "C" { #include <npsdk/npupp.h> } diff --git a/filter/source/config/tools/merge/FCFGMerge.cfg b/filter/source/config/tools/merge/FCFGMerge.cfg new file mode 100644 index 000000000000..7e71e9c12309 --- /dev/null +++ b/filter/source/config/tools/merge/FCFGMerge.cfg @@ -0,0 +1,125 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2008 by Sun Microsystems, Inc. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# $RCSfile: FCFGMerge.cfg,v $ +# +# $Revision: 1.5 $ +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +#************************************************ +# Specify the verbose mode of this tool. +# 1 = show errors only +# 2 = show errors/warnings (default) +# 3 = show errors/warnings and some generic infos +# 4 = show anything (including detailed infos) +# +# [OPTIONAL] +#************************************************ + +loglevel = 2 + +#************************************************ +# This extension is used for all XML files. It doesnt +# matter if its used for reading fragments or writing +# XML packages. +# Must be given without any additional signes like "." +# or "*."! +# +# [REQUIRED] +#************************************************ + +extension_xcu=xcu + +#************************************************ +# This extension is used for all Package files. It doesnt +# matter if its used for reading such files or writing +# it. +# Must be given without any additional signes like "." +# or "*."! +# +# [REQUIRED] +#************************************************ + +extension_pkg=pkg + +#************************************************ +# These values are used to generate a correct XML +# header. +# Note: The property "xmlpackage" must be specified +# via command line. There exists more then one +# possible value. +# +# [REQUIRED] +#************************************************ + +xmlversion = 1.0 +xmlencoding = UTF-8 +xmlpath = org.openoffice.TypeDetection +#xmlpackage = + +#************************************************ +# These values are used to name the configuration +# sets inside the generated XCM file for different +# item groups like e.g. types, filters etcpp. +# +# [REQUIRED] +#************************************************ + +setname_types = Types +setname_filters = Filters +setname_frameloaders = FrameLoaders +setname_contenthandlers = ContentHandlers + +subdir_types = types +subdir_filters = filters +subdir_frameloaders = frameloaders +subdir_contenthandlers = contenthandlers + +#************************************************ +# This delimiter is used to split every +# item list of the package configuration files +# (which are temp. created by the make proccess) +# into its tokens. +# +# [REQUIRED] +#************************************************ +delimiter=, + +#************************************************ +# Enable/disable removing of leading/trailing withespaces +# during splitting stringlists. +# +# [REQUIRED] +#************************************************ +trim=true + +#************************************************ +# Enable/disable removing of leading/trailing "-signs +# during splitting stringlists. +# +# [REQUIRED] +#************************************************ +decode=false diff --git a/filter/source/graphicfilter/eps/eps.cxx b/filter/source/graphicfilter/eps/eps.cxx index c3c1a913baca..854bb3a99bfc 100644 --- a/filter/source/graphicfilter/eps/eps.cxx +++ b/filter/source/graphicfilter/eps/eps.cxx @@ -295,7 +295,11 @@ sal_Bool PSWriter::WritePS( const Graphic& rGraphic, SvStream& rTargetStream, Fi // default values for the dialog options mnLevel = 2; mbGrayScale = sal_False; +#ifdef UNX // don't compress by default on unix as ghostscript is unable to read LZW compressed eps + mbCompression = sal_False; +#else mbCompression = sal_True; +#endif mnTextMode = 0; // default0 : export glyph outlines // try to get the dialog selection @@ -312,12 +316,20 @@ sal_Bool PSWriter::WritePS( const Graphic& rGraphic, SvStream& rTargetStream, Fi String aVersionStr( RTL_CONSTASCII_USTRINGPARAM( "Version" ) ); String aColorStr( RTL_CONSTASCII_USTRINGPARAM( "ColorFormat" ) ); String aComprStr( RTL_CONSTASCII_USTRINGPARAM( "CompressionMode" ) ); +#ifdef UNX // don't put binary tiff preview ahead of postscript code by default on unix as ghostscript is unable to read it + mnPreview = pFilterConfigItem->ReadInt32( aPreviewStr, 0 ); +#else mnPreview = pFilterConfigItem->ReadInt32( aPreviewStr, 1 ); +#endif mnLevel = pFilterConfigItem->ReadInt32( aVersionStr, 2 ); if ( mnLevel != 1 ) mnLevel = 2; mbGrayScale = pFilterConfigItem->ReadInt32( aColorStr, 1 ) == 2; +#ifdef UNX // don't compress by default on unix as ghostscript is unable to read LZW compressed eps + mbCompression = pFilterConfigItem->ReadInt32( aComprStr, 0 ) != 0; +#else mbCompression = pFilterConfigItem->ReadInt32( aComprStr, 1 ) == 1; +#endif String sTextMode( RTL_CONSTASCII_USTRINGPARAM( "TextMode" ) ); mnTextMode = pFilterConfigItem->ReadInt32( sTextMode, 0 ); if ( mnTextMode > 2 ) diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 014569241fc8..d9bf8632abe9 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -4046,18 +4046,25 @@ bool SvxMSDffManager::ReadObjText(SvStream& rSt, SdrObject* pObj) const sal_uInt16 nLen = (sal_uInt16)aHd.nRecLen; if(nLen) { + sal_uInt32 nMask; sal_uInt16 nVal1, nVal2, nVal3; sal_uInt16 nDefaultTab = 2540; // PPT def: 1 Inch //rOutliner.GetDefTab(); sal_uInt16 nMostrightTab = 0; SfxItemSet aSet(rOutliner.GetEmptyItemSet()); SvxTabStopItem aTabItem(0, 0, SVX_TAB_ADJUST_DEFAULT, EE_PARA_TABS); - rSt >> nVal1; - rSt >> nVal2; + rSt >> nMask; nLen -= 4; + if(nLen && (nMask & 0x0002)) + { + // number of indent levels + rSt >> nVal3; + nLen -= 2; + } + // Allg. TAB verstellt auf Wert in nVal3 - if(nLen && (nVal1 & 0x0001)) + if(nLen && (nMask & 0x0001)) { rSt >> nVal3; nLen -= 2; @@ -4065,7 +4072,7 @@ bool SvxMSDffManager::ReadObjText(SvStream& rSt, SdrObject* pObj) const } // Weitere, frei gesetzte TABs - if(nLen && (nVal1 & 0x0004)) + if(nLen && (nMask & 0x0004)) { rSt >> nVal1; nLen -= 2; diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index 8e7b3d232010..474d11863c94 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -4499,6 +4499,10 @@ PPTTextRulerInterpreter::PPTTextRulerInterpreter( sal_uInt32 nFileOfs, SdrPowerP sal_Int16 nTCount; sal_Int32 i; rIn >> mpImplRuler->nFlags; + + // number of indent levels, unused now + if ( mpImplRuler->nFlags & 2 ) + rIn >> nTCount; if ( mpImplRuler->nFlags & 1 ) rIn >> mpImplRuler->nDefaultTab; if ( mpImplRuler->nFlags & 4 ) @@ -4521,6 +4525,17 @@ PPTTextRulerInterpreter::PPTTextRulerInterpreter( sal_uInt32 nFileOfs, SdrPowerP rIn >> mpImplRuler->nTextOfs[ i ]; if ( mpImplRuler->nFlags & ( 256 << i ) ) rIn >> mpImplRuler->nBulletOfs[ i ]; + if( mpImplRuler->nBulletOfs[ i ] > 0x7fff) { + // workaround + // when bullet offset is > 0x7fff, the paragraph should look like + // * first line text + // second line text + // + // we add to bullet para indent 0xffff - bullet offset. it looks like + // best we can do for now + mpImplRuler->nTextOfs[ i ] += 0xffff - mpImplRuler->nBulletOfs[ i ]; + mpImplRuler->nBulletOfs[ i ] = 0; + } } } rIn.Seek( nOldPos ); @@ -4827,7 +4842,7 @@ void PPTStyleTextPropReader::ReadParaProps( SvStream& rIn, SdrPowerPointImport& { rIn >> aSet.mpArry[ PPT_ParaAttr_BulletHeight ]; if ( ! ( ( nMask & ( 1 << PPT_ParaAttr_BuHardHeight ) ) - && ( nBulFlg && ( 1 << PPT_ParaAttr_BuHardHeight ) ) ) ) + && ( nBulFlg & ( 1 << PPT_ParaAttr_BuHardHeight ) ) ) ) aSet.mnAttrSet ^= 0x40; } if ( nMask & 0x0020 ) // buColor @@ -6094,9 +6109,11 @@ void PPTParagraphObj::ApplyTo( SfxItemSet& rSet, boost::optional< sal_Int16 >& } rSet.Put( SdrTextFixedCellHeightItem( sal_True ), SDRATTR_TEXT_USEFIXEDCELLHEIGHT ); SvxLineSpacingItem aItem( 200, EE_PARA_SBL ); - if ( nVal2 <= 0 ) + if ( nVal2 <= 0 ) { aItem.SetLineHeight( (sal_uInt16)( rManager.ScalePoint( -nVal2 ) / 8 ) ); - else + aItem.GetLineSpaceRule() = SVX_LINE_SPACE_FIX; + aItem.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF; + } else { sal_uInt8 nPropLineSpace = (sal_uInt8)nVal2; aItem.SetPropLineSpace( nPropLineSpace ); diff --git a/framework/source/lomenubar/FrameHelper.cxx b/framework/source/lomenubar/FrameHelper.cxx index f1891793fa7a..7b749648d34c 100644 --- a/framework/source/lomenubar/FrameHelper.cxx +++ b/framework/source/lomenubar/FrameHelper.cxx @@ -26,6 +26,8 @@ #include "MenuItemInfo.hxx" #include "MenuItemStatusListener.hxx" +#include <boost/foreach.hpp> + #include <com/sun/star/awt/KeyEvent.hpp> #include <com/sun/star/awt/SystemDependentXWindow.hpp> #include <com/sun/star/awt/XSystemDependentWindowPeer.hpp> @@ -113,6 +115,62 @@ using com::sun::star::ui::XModuleUIConfigurationManagerSupplier; using com::sun::star::util::URL; using com::sun::star::util::XURLTransformer; + +namespace +{ + static Sequence<Any> lcl_initArgs(const OUString& sModuleName, const Reference<XFrame> xFrame) + { + // These are the arguments needed for the XPopupMenuController + Sequence<Any> aResult(2); + PropertyValue item; + + item.Name = OUString(RTL_CONSTASCII_USTRINGPARAM("ModuleName")); + item.Value <<= sModuleName; + aResult[0] <<= item; + + item.Name = OUString(RTL_CONSTASCII_USTRINGPARAM("Frame")); + item.Value <<= xFrame; + aResult[1] <<= item; + return aResult; + }; + + struct DispatchConnection + { + Reference<XDispatch> m_xDispatch; + URL m_aUrl; + DispatchConnection(Reference<XDispatch> xDispatch, URL aUrl) + : m_xDispatch(xDispatch), m_aUrl(aUrl) + {} + }; +} + +namespace framework { namespace lomenubar +{ + class DispatchRegistry + { + private: + ::std::vector<DispatchConnection> m_vDispatchConnections; + const Reference<XStatusListener> m_xStatusListener; + public: + DispatchRegistry(const Reference<XStatusListener> xStatusListener) + : m_xStatusListener(xStatusListener) + {} + ~DispatchRegistry() + { + BOOST_FOREACH(const DispatchConnection& rConnection, m_vDispatchConnections) + { + rConnection.m_xDispatch->removeStatusListener(m_xStatusListener, rConnection.m_aUrl); + } + } + void Connect(Reference<XDispatch> xDispatch, URL aURL) + { + const DispatchConnection connection(xDispatch, aURL); + m_vDispatchConnections.push_back(connection); + xDispatch->addStatusListener(m_xStatusListener, aURL); + } + }; +}} + // ------------------------ Item callbacks --------------------------- // Item activated. It distpatches the command associated to a given menu item. void @@ -131,9 +189,9 @@ item_about_to_show (DbusmenuMenuitem *item, gpointer user_data) FrameHelper *helper = (FrameHelper*)user_data; Reference < XFrame > xFrame = helper->getFrame (); Reference< XPropertySet > frameProps (xFrame, UNO_QUERY); - Reference < XLayoutManager > xLayoutManager(frameProps->getPropertyValue(OUString::createFromAscii("LayoutManager")), + Reference < XLayoutManager > xLayoutManager(frameProps->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("LayoutManager"))), UNO_QUERY); - Reference < XUIElement > menuBar(xLayoutManager->getElement (OUString::createFromAscii("private:resource/menubar/menubar")), + Reference < XUIElement > menuBar(xLayoutManager->getElement (OUString(RTL_CONSTASCII_USTRINGPARAM("private:resource/menubar/menubar"))), UNO_QUERY); Reference < XPropertySet > menuPropSet (menuBar, UNO_QUERY); @@ -142,7 +200,7 @@ item_about_to_show (DbusmenuMenuitem *item, gpointer user_data) return FALSE; } - Reference < XMenu > xMenu(menuPropSet->getPropertyValue(OUString::createFromAscii("XMenuBar")), + Reference < XMenu > xMenu(menuPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("XMenuBar"))), UNO_QUERY); if (!xMenu.is()) { @@ -198,31 +256,30 @@ destroy_menu_item_info (gpointer data) FrameHelper::FrameHelper(const Reference< XMultiServiceFactory >& rServiceManager, const Reference< XFrame >& xFrame, DbusmenuServer* server) + : m_xStatusListener(new MenuItemStatusListener(this)) + , m_pDispatchRegistry(new framework::lomenubar::DispatchRegistry(m_xStatusListener)) + , m_xMSF(rServiceManager) + , m_xTrans(m_xMSF->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.URLTransformer" ))), UNO_QUERY) + , m_xMM(m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.ModuleManager"))),UNO_QUERY) + , m_xPCF(m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.PopupMenuControllerFactory"))), UNO_QUERY) + , m_xFrame(xFrame) + , m_xdp(xFrame, UNO_QUERY) + , m_args(lcl_initArgs(m_xMM->identify(xFrame), xFrame)) + , m_server(server) + , m_root(NULL) + , m_watcher_set(FALSE) + , m_blockDetach(FALSE) { - m_xMSF = rServiceManager; - this->m_xFrame = xFrame; - this->m_server = server; //Get xUICommands database (to retrieve labels, see FrameJob::getLabelFromCommandURL ()) - Reference < XNameAccess > xNameAccess (m_xMSF->createInstance(OUString::createFromAscii("com.sun.star.frame.UICommandDescription")), + Reference < XNameAccess > xNameAccess (m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.UICommandDescription"))), UNO_QUERY); - m_xMM = Reference < XModuleManager> (m_xMSF->createInstance(OUString::createFromAscii("com.sun.star.frame.ModuleManager")), - UNO_QUERY); xNameAccess->getByName(m_xMM->identify(xFrame)) >>= m_xUICommands; - m_xdp = Reference < XDispatchProvider > (xFrame, UNO_QUERY); - m_xTrans = Reference < XURLTransformer > (m_xMSF->createInstance( rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )), UNO_QUERY); - - m_xSL = (XStatusListener*)new MenuItemStatusListener (this); // This initializes the shortcut database getAcceleratorConfigurations (xFrame->getController()->getModel (), m_xMM); - // This information is needed for the dynamic submenus - m_xPCF = Reference < XMultiComponentFactory > (m_xMSF->createInstance(OUString::createFromAscii("com.sun.star.frame.PopupMenuControllerFactory")), - UNO_QUERY); - - // This is a hash table that maps Command URLs to MenuItemInfo classes // to cache command information m_commandsInfo = g_hash_table_new_full (g_str_hash, @@ -230,24 +287,6 @@ FrameHelper::FrameHelper(const Reference< XMultiServiceFactory >& rServiceManag g_free, destroy_menu_item_info); - // These are the arguments needed for the XPopupMenuController - m_args = Sequence < Any > (2); - PropertyValue item; - - item.Name = OUString::createFromAscii("ModuleName"); - item.Value <<= m_xMM->identify (xFrame); - m_args[0] <<= item; - - item.Name = OUString::createFromAscii("Frame"); - item.Value <<= xFrame; - m_args[1] <<= item; - - m_root = NULL; - m_watcher_set = FALSE; - - //This variable prevents the helper from being disconnected from the frame - //for special cases of component dettaching like print preview - m_blockDetach = FALSE; } void SAL_CALL @@ -256,6 +295,7 @@ FrameHelper::disposing (const EventObject& /*aEvent*/ ) throw (RuntimeException) FrameHelper::~FrameHelper() { + ::boost::scoped_ptr< ::framework::lomenubar::DispatchRegistry>().swap(m_pDispatchRegistry); if (m_server) g_object_unref (m_server); @@ -291,12 +331,6 @@ FrameHelper::getFrame () return m_xFrame; } -XStatusListener* -FrameHelper::getStatusListener () -{ - return m_xSL; -} - GHashTable* FrameHelper::getCommandsInfo () { @@ -343,9 +377,9 @@ FrameHelper::frameAction(const FrameActionEvent& action) throw (RuntimeException m_xFrame->removeFrameActionListener (this); Reference< XPropertySet > frameProps (m_xFrame, UNO_QUERY); - Reference < XLayoutManager > xLayoutManager(frameProps->getPropertyValue(OUString::createFromAscii("LayoutManager")), + Reference < XLayoutManager > xLayoutManager(frameProps->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("LayoutManager"))), UNO_QUERY); - xLayoutManager->showElement (OUString::createFromAscii("private:resource/menubar/menubar")); + xLayoutManager->showElement (OUString(RTL_CONSTASCII_USTRINGPARAM("private:resource/menubar/menubar"))); unsigned long xid = getXID(); @@ -447,7 +481,7 @@ FrameHelper::rebuildMenu (Reference < XMenu > xMenu, continue; // We drop the WindowList, doesn't work properly and it's useless anyhow - if (oUCommand.equals (OUString::createFromAscii (".uno:WindowList"))) + if (oUCommand.equals (OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:WindowList")))) continue; //We set the default properties (in case it was not visible or a separator) @@ -540,9 +574,9 @@ FrameHelper::rebuildMenu (Reference < XMenu > xMenu, commandURL.Complete = oUCommand; m_xTrans->parseStrict (commandURL); - Reference < XDispatch > xDispatch = m_xdp->queryDispatch (commandURL, OUString(), 0); - if (xDispatch.is()) - xDispatch->addStatusListener (m_xSL, commandURL); + Reference < XDispatch > xDispatch = m_xdp->queryDispatch (commandURL, OUString(), 0); + if(xDispatch.is()) + m_pDispatchRegistry->Connect(xDispatch, commandURL); Reference < XPopupMenu > subPopMenu (xMenu->getPopupMenu (id), UNO_QUERY); @@ -551,7 +585,7 @@ FrameHelper::rebuildMenu (Reference < XMenu > xMenu, if (isSpecialSubmenu (oUCommand)) { Reference < XPropertySet > xMSFProps (m_xMSF, UNO_QUERY); - Reference <XComponentContext> xContext (xMSFProps->getPropertyValue (OUString::createFromAscii ("DefaultContext")), + Reference <XComponentContext> xContext (xMSFProps->getPropertyValue (OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext"))), UNO_QUERY); Reference < XPopupMenuController > xRFC (m_xPCF->createInstanceWithArgumentsAndContext(oUCommand, @@ -559,7 +593,7 @@ FrameHelper::rebuildMenu (Reference < XMenu > xMenu, xContext), UNO_QUERY); - Reference < XPopupMenu > xPO (m_xMSF->createInstance(OUString::createFromAscii ("stardiv.Toolkit.VCLXPopupMenu")), + Reference < XPopupMenu > xPO (m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("stardiv.Toolkit.VCLXPopupMenu"))), UNO_QUERY); if (xRFC.is () && xPO.is ()) @@ -636,16 +670,16 @@ FrameHelper::rebuildMenuFromRoot () { Reference < XFrame > xFrame = getFrame (); Reference < XPropertySet > frameProps (xFrame, UNO_QUERY); - Reference < XLayoutManager > xLayoutManager (frameProps->getPropertyValue(OUString::createFromAscii("LayoutManager")), + Reference < XLayoutManager > xLayoutManager (frameProps->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("LayoutManager"))), UNO_QUERY); - Reference < XUIElement > menuBar (xLayoutManager->getElement (OUString::createFromAscii("private:resource/menubar/menubar")), + Reference < XUIElement > menuBar (xLayoutManager->getElement (OUString(RTL_CONSTASCII_USTRINGPARAM("private:resource/menubar/menubar"))), UNO_QUERY); Reference < XPropertySet > menuPropSet (menuBar, UNO_QUERY); if (!menuPropSet.is ()) return; - Reference < XMenu > xMenu (menuPropSet->getPropertyValue(OUString::createFromAscii("XMenuBar")), + Reference < XMenu > xMenu (menuPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("XMenuBar"))), UNO_QUERY); if (!xMenu.is ()) return; @@ -680,15 +714,13 @@ FrameHelper::isSpecialSubmenu (OUString command) void FrameHelper::dispatchCommand (OUString command) { - OUString target = OUString::createFromAscii (""); + OUString target = OUString(RTL_CONSTASCII_USTRINGPARAM("")); Reference < XDispatchHelper > xdh (m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.DispatchHelper"))), UNO_QUERY); - //g_debug ("%s", OUStringToOString (command, RTL_TEXTENCODING_ASCII_US).getStr()); - // This is a special case, we don't want the helper to be disconnected from the frame // when PrintPreview dettaches. See the frameAction method. - if (command.equals (OUString::createFromAscii (".uno:PrintPreview"))) + if (command.equals (OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:PrintPreview")))) { m_blockDetach = TRUE; } @@ -696,18 +728,18 @@ FrameHelper::dispatchCommand (OUString command) // This is a special case for the recentfilelist if (command.matchAsciiL ("vnd.sun.star.popup:RecentFileList", 33, 0)) { - target = OUString::createFromAscii ("_default"); + target = OUString(RTL_CONSTASCII_USTRINGPARAM("_default")); Reference < XPropertySet > xMSFProps (m_xMSF, UNO_QUERY); - Reference <XComponentContext> xContext (xMSFProps->getPropertyValue (OUString::createFromAscii ("DefaultContext")), + Reference <XComponentContext> xContext (xMSFProps->getPropertyValue (OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext"))), UNO_QUERY); - Reference < XPopupMenuController > xRFC (m_xPCF->createInstanceWithArgumentsAndContext(OUString::createFromAscii (".uno:RecentFileList"), + Reference < XPopupMenuController > xRFC (m_xPCF->createInstanceWithArgumentsAndContext(OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:RecentFileList")), m_args, xContext), UNO_QUERY); Reference < XMenuListener > xML (xRFC, UNO_QUERY); - Reference < XPopupMenu > xPO (m_xMSF->createInstance(OUString::createFromAscii ("stardiv.Toolkit.VCLXPopupMenu")), + Reference < XPopupMenu > xPO (m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("stardiv.Toolkit.VCLXPopupMenu"))), UNO_QUERY); if (xRFC.is () && xPO.is ()) @@ -736,7 +768,7 @@ FrameHelper::dispatchCommand (OUString command) } if (command.matchAsciiL ("private:factory/", 16, 0)) - target = OUString::createFromAscii ("_blank"); + target = OUString(RTL_CONSTASCII_USTRINGPARAM("_blank")); xdh->executeDispatch (Reference < XDispatchProvider > (m_xFrame, UNO_QUERY), command, @@ -757,14 +789,14 @@ FrameHelper::getAcceleratorConfigurations (Reference < XModel > xModel, this->m_docAccelConf = docAccelConf; //Get module shurtcut database - Reference< XModuleUIConfigurationManagerSupplier > modUISupplier(m_xMSF->createInstance(OUString::createFromAscii("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")), + Reference< XModuleUIConfigurationManagerSupplier > modUISupplier(m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ui.ModuleUIConfigurationManagerSupplier"))), UNO_QUERY); Reference< XUIConfigurationManager > modUIManager = modUISupplier->getUIConfigurationManager(xModuleManager->identify(m_xFrame)); Reference< XAcceleratorConfiguration > modAccelConf(modUIManager->getShortCutManager(), UNO_QUERY); this->m_modAccelConf = modAccelConf; //Get global shortcut database - Reference< XAcceleratorConfiguration > globAccelConf(m_xMSF->createInstance(OUString::createFromAscii("com.sun.star.ui.GlobalAcceleratorConfiguration")), + Reference< XAcceleratorConfiguration > globAccelConf(m_xMSF->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ui.GlobalAcceleratorConfiguration"))), UNO_QUERY); this->m_globAccelConf = globAccelConf; } @@ -821,7 +853,7 @@ FrameHelper::findShortcutForCommand (OUString command) {} //NOTE: For some reason this item does not return its shortcut. Setting manually: - if (command.equals (OUString::createFromAscii (".uno:HelpIndex"))) + if (command.equals (OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:HelpIndex")))) { kev.KeyCode = awt::Key::F1; } diff --git a/framework/source/lomenubar/FrameHelper.hxx b/framework/source/lomenubar/FrameHelper.hxx index a976bace269e..9264f26d2654 100644 --- a/framework/source/lomenubar/FrameHelper.hxx +++ b/framework/source/lomenubar/FrameHelper.hxx @@ -24,24 +24,28 @@ #ifndef __FRAME_HELPER_HXX__ #define __FRAME_HELPER_HXX__ +#include <vector> + +#include <boost/scoped_ptr.hpp> + #include <com/sun/star/awt/KeyEvent.hpp> #include <com/sun/star/awt/XMenu.hpp> #include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/frame/XFrame.hpp> -#include <com/sun/star/frame/XFramesSupplier.hpp> -#include <com/sun/star/frame/FrameSearchFlag.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/frame/XFrameActionListener.hpp> -#include <com/sun/star/frame/XStatusListener.hpp> +#include <com/sun/star/container/XNameAccess.hpp> #include <com/sun/star/frame/FrameAction.hpp> +#include <com/sun/star/frame/FrameSearchFlag.hpp> #include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/frame/XModuleManager.hpp> +#include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/frame/XFrameActionListener.hpp> +#include <com/sun/star/frame/XFramesSupplier.hpp> #include <com/sun/star/frame/XModel.hpp> -#include <cppuhelper/implbase1.hxx> +#include <com/sun/star/frame/XModuleManager.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> #include <com/sun/star/lang/EventObject.hpp> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/util/XURLTransformer.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/ui/XAcceleratorConfiguration.hpp> +#include <com/sun/star/util/XURLTransformer.hpp> +#include <cppuhelper/implbase1.hxx> //#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wignored-qualifiers" @@ -73,6 +77,12 @@ using com::sun::star::util::XURLTransformer; using com::sun::star::ui::XAcceleratorConfiguration; using rtl::OUString; + +namespace framework { namespace lomenubar +{ + class DispatchRegistry; +}} + /* This class is a helper in charge of closing the dbusmenu server when a frame is closed, * and also allows the menuitem callbacks to dispatch commands. */ @@ -80,23 +90,25 @@ using rtl::OUString; class FrameHelper : public cppu::WeakImplHelper1 < XFrameActionListener > { private: - Reference < XFrame > m_xFrame; - Reference < XMultiServiceFactory > m_xMSF; + const Reference < XStatusListener > m_xStatusListener; + ::boost::scoped_ptr< ::framework::lomenubar::DispatchRegistry> m_pDispatchRegistry; + const Reference < XMultiServiceFactory > m_xMSF; + const Reference < XURLTransformer > m_xTrans; + const Reference < XModuleManager> m_xMM; + const Reference < XMultiComponentFactory > m_xPCF; + const Reference < XFrame > m_xFrame; + const Reference < XDispatchProvider > m_xdp; + const Sequence < Any > m_args; Reference < XNameAccess > m_xUICommands; DbusmenuServer *m_server; DbusmenuMenuitem *m_root; gboolean m_watcher_set; guint m_watcher; - XStatusListener *m_xSL; - Reference < XURLTransformer > m_xTrans; - Reference < XDispatchProvider > m_xdp; GHashTable *m_commandsInfo; + //This variable prevents the helper from being disconnected from the frame + //for special cases of component dettaching like print preview gboolean m_blockDetach; - //These object/methods are used to recreate dynamic popupmenus - Reference < XMultiComponentFactory > m_xPCF; - Reference < XModuleManager> m_xMM; - Sequence < Any > m_args; gboolean isSpecialSubmenu (OUString command); @@ -131,7 +143,6 @@ class FrameHelper : public cppu::WeakImplHelper1 < XFrameActionListener > Reference < XFrame > getFrame (); unsigned long getXID (); GHashTable* getCommandsInfo (); - XStatusListener* getStatusListener (); ::rtl::OUString getLabelFromCommandURL (::rtl::OUString); //Menu Related actions diff --git a/framework/source/lomenubar/HACKING b/framework/source/lomenubar/HACKING new file mode 100644 index 000000000000..49d016f32c41 --- /dev/null +++ b/framework/source/lomenubar/HACKING @@ -0,0 +1,99 @@ +LibreOffice DbusMenu Integration Source Code +============================================ +There are three main classes, DesktopJob, FrameJob and FrameHelper implemented +in their respective .cxx/.h files: + +- src/DesktopJob.cxx +- src/DesktopJob.h + +- src/FrameJob.cxx +- src/FrameJob.h + +- src/FrameHelper.cxx +- src/FrameHelper.h + +The first two classes are Jobs executed synchronously on two events, the events +that trigger these jobs are defined in data/Jobs.xcu. Further explanation on +each class can be found below. + +The FrameHelper class performs most of the tasks regarding communication between + +The src/export.cxx code is the entry point for the resulting shared object +that conforms this extension. It exports the information needed to register and +access all the interfaces implemented by the two jobs exported. + +GLib Integration +---------------- +This extension assumes the presence of the GLib mainloop in the application, +it is not recommended its installation on LibreOffice deployments that do not +provide integration with the glib mainloop. + +g_type_init() is called in DesktopJob for safety. + +DesktopJob +---------- +This class is a XJob that is instantiated and executed on LibreOffice startup +just once during the lifetime of the process. + +This class does nothing but trying to acquire the "org.libreoffice.dbusmenu" +busname. Once the executed method returns the object instance is destroyed. + +FrameJob & FrameHelper +---------------------- +This class is a XJob that is instantiated and executed every time a document is +created or loaded. It watches for the presence of the +com.canonical.AppMenu.Registrar well-known D-Bus name. + +Afterwards it creates an instance of the FrameHelper class. FrameHelper is an +XFrameActionListener that subscribes to the XFrame that represents the current +Window. The lifetime of this FrameHelper is bound to the life of the current +document being viewed/edited. + +FrameHelper creates the initial structure of Dbusmenu menuitems, and the +dbusmenu server. If FrameHelper is destroyed, the frame is unregistered and +the server shutdown. It also stops watching com.canonical.AppMenu.Registrar +presence. + +Listening for menu changes - MenuItemInfo & MenuItemStatusListener +------------------------------------------------------------------ +FrameHelper subscribes creates a cache in the commandsInfo GHashTable property. +This cache maps each command URL with a MenuItemInfo object that stores the +current information for a given menu item. + +To listen for menu changes and update the cache, FrameHelper creates an instance +of MenuItemStatusListener per each command url. This listeners update the data +for the respective MenuItemInfo associated to the command URL it is listening +for. The source code for these two classes can be found in the following +respective files: + +- src/MenuItemInfo.h +- src/MenuItemInfo.cxx + +- src/MenuItemStatusListener.h +- src/MenuItemStatusListener.cxx + +Special Popup Menus +------------------- +This is the set of special popup menus: +- .uno:CharFontName +- .uno:FontHeight +- .uno:ObjectMenue +- .uno:InsertPageHeader +- .uno:InsertPageFooter +- .uno:ChangeControlType +- .uno:AvailableToolbars +- .uno:ScriptOrganizer +- .uno:RecentFileList +- .uno:AddDirect +- .uno:AutoPilotMenu + +These menus cannot be introspected as they are created dinamically when the user +clicks on the menu. Therefor they are treated differently, see the usage of +isSpecialSubmenu in the rebuildMenu method from the FrameHelper class. + +In the case of the recent file list, the command URLs provided by this +workaround are not enough to open the document. A workaround for this is present +in the FrameHelper::dispatchCommand method. + +For further reference on this type of submenus follow this link: +http://wiki.services.openoffice.org/wiki/Framework/Tutorial/Popup_Menu_Controller diff --git a/framework/source/lomenubar/Jobs.xcu b/framework/source/lomenubar/Jobs.xcu new file mode 100644 index 000000000000..de2bb6087691 --- /dev/null +++ b/framework/source/lomenubar/Jobs.xcu @@ -0,0 +1,34 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<oor:component-data oor:name="Jobs" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <node oor:name="Jobs"> + <node oor:name="AppMenuDesktopJob" oor:op="replace"> + <prop oor:name="Service"> + <value>org.libreoffice.comp.framework.lomenubar.DesktopJob</value> + </prop> + </node> + <node oor:name="AppMenuFrameJob" oor:op="replace"> + <prop oor:name="Service"> + <value>org.libreoffice.comp.framework.lomenubar.FrameJob</value> + </prop> + </node> + </node> + <node oor:name="Events"> + <node oor:name="OnStartApp" oor:op="replace"> + <node oor:name="JobList"> + <node oor:name="AppMenuDesktopJob" oor:op="replace"/> + </node> + </node> + <node oor:name="onDocumentOpened" oor:op="replace"> + <node oor:name="JobList"> + <node oor:name="AppMenuFrameJob" oor:op="replace"/> + </node> + </node> + <!--node oor:name="OnNew" oor:op="replace"> + <node oor:name="JobList"> + <node oor:name="AppMenuFrameJob" oor:op="replace"/> + </node> + </node--> + + </node> +</oor:component-data> diff --git a/framework/source/lomenubar/MenuItemStatusListener.cxx b/framework/source/lomenubar/MenuItemStatusListener.cxx index f5e216dad4a1..6b7f7384f906 100644 --- a/framework/source/lomenubar/MenuItemStatusListener.cxx +++ b/framework/source/lomenubar/MenuItemStatusListener.cxx @@ -6,9 +6,9 @@ using com::sun::star::frame::status::Visibility; MenuItemStatusListener::MenuItemStatusListener (FrameHelper *helper) + : m_helper(helper) { - if (!helper) throw ("FrameHelper cannot be NULL"); - this->m_helper = helper; + OSL_ENSURE(m_helper, "FrameHelper cannot be NULL"); } void SAL_CALL diff --git a/framework/source/lomenubar/MenuItemStatusListener.hxx b/framework/source/lomenubar/MenuItemStatusListener.hxx index df0353739cd7..7fdab64ad23c 100644 --- a/framework/source/lomenubar/MenuItemStatusListener.hxx +++ b/framework/source/lomenubar/MenuItemStatusListener.hxx @@ -19,7 +19,7 @@ class MenuItemStatusListener : public cppu::WeakImplHelper1 < XStatusListener > { private: guint16 m_id; - FrameHelper *m_helper; + FrameHelper* const m_helper; public: MenuItemStatusListener (FrameHelper *helper); diff --git a/framework/source/lomenubar/README b/framework/source/lomenubar/README new file mode 100644 index 000000000000..45176349b094 --- /dev/null +++ b/framework/source/lomenubar/README @@ -0,0 +1,15 @@ +LibreOffice Global Menubar Extension for DBusMenu +================================================= + +This library is an extension for LibreOffice that exports the Menubar structure, +actions and shortcuts through the DBusMenu D-Bus interface. If there is a +present DbusMenu client (The Unity panel or the Appmenu applet for GNOME Panel +for instance), LibreOffice will had its menu structure. + +For more information, visit the official website: +http://launchpad.net/lo-menubar + +Known Issues +------------ +- The menubar is shown briefly before it is hidden. +- The LibreOffice Start Center does not hide/export its menu structure. diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx index 83dd81b406cf..f04faa5846cf 100644 --- a/i18nutil/source/utility/unicode.cxx +++ b/i18nutil/source/utility/unicode.cxx @@ -31,6 +31,11 @@ #include <i18nutil/unicode.hxx> #include "unicode_data.h" +// Workaround for glibc braindamage: +// glibc 2.4's langinfo.h does "#define CURRENCY_SYMBOL __CURRENCY_SYMBOL" +// which (obviously) breaks UnicodeType::CURRENCY_SYMBOL +#undef CURRENCY_SYMBOL + using namespace ::com::sun::star::i18n; static ScriptTypeList defaultTypeList[] = { diff --git a/instsetoo_native/inc_broffice/windows/msi_templates/Binary/Banner.bmp b/instsetoo_native/inc_broffice/windows/msi_templates/Binary/Banner.bmp Binary files differdeleted file mode 100644 index 84840f36a3b4..000000000000 --- a/instsetoo_native/inc_broffice/windows/msi_templates/Binary/Banner.bmp +++ /dev/null diff --git a/instsetoo_native/inc_broffice/windows/msi_templates/Binary/Image.bmp b/instsetoo_native/inc_broffice/windows/msi_templates/Binary/Image.bmp Binary files differdeleted file mode 100644 index 75dc163eb719..000000000000 --- a/instsetoo_native/inc_broffice/windows/msi_templates/Binary/Image.bmp +++ /dev/null diff --git a/instsetoo_native/util/makefile.mk b/instsetoo_native/util/makefile.mk index 470d562e8f2d..d4fa58a1698b 100644 --- a/instsetoo_native/util/makefile.mk +++ b/instsetoo_native/util/makefile.mk @@ -76,6 +76,10 @@ LOCALPYFILES= \ $(BIN)$/mailmerge.py .ENDIF +help_exist:=$(shell @find $(L10N_MODULE)/source/ -type d -name "helpcontent2" | sed -e "s|/helpcontent2||" -e "s|^.*/||" ) en-US + +allhelplangiso:=$(foreach,i,$(alllangiso) $(foreach,j,$(help_exist) $(eq,$i,$j $i $(NULL)))) + xxxx: echo $(PERL) -w $(SOLARENV)$/bin$/gen_update_info.pl --buildid $(BUILD) --arch "$(RTL_ARCH)" --os "$(RTL_OS)" --lstfile $(PRJ)$/util$/openoffice.lst --product LibreOffice --languages $(subst,$(@:s/_/ /:1)_, $(@:b)) $(PRJ)$/util$/update.xml @@ -129,9 +133,9 @@ ooolanguagepack : $(foreach,i,$(alllangiso) ooolanguagepack_$i) ooodevlanguagepack: $(foreach,i,$(alllangiso) ooodevlanguagepack_$i) -ooohelppack : $(foreach,i,$(alllangiso) ooohelppack_$i) +ooohelppack : $(foreach,i,$(allhelplangiso) ooohelppack_$i) -ooodevhelppack: $(foreach,i,$(alllangiso) ooodevhelppack_$i) +ooodevhelppack: $(foreach,i,$(allhelplangiso) ooodevhelppack_$i) sdkoo: $(foreach,i,$(alllangiso) sdkoo_$i) @@ -153,7 +157,7 @@ oxygenofficewithjre: $(foreach,i,$(alllangiso) oxygenofficewithjre_$i) oxygenofficelanguagepack : $(foreach,i,$(alllangiso) oxygenofficelanguagepack_$i) -oxygenofficehelppack : $(foreach,i,$(alllangiso) oxygenofficehelppack_$i) +oxygenofficehelppack : $(foreach,i,$(allhelplangiso) oxygenofficehelppack_$i) MSIOFFICETEMPLATESOURCE=$(PRJ)$/inc_openoffice$/windows$/msi_templates MSILANGPACKTEMPLATESOURCE=$(PRJ)$/inc_ooolangpack$/windows$/msi_templates @@ -192,9 +196,9 @@ $(foreach,i,$(alllangiso) ooolanguagepack_$i) : $(ADDDEPS) $(foreach,i,$(alllangiso) ooodevlanguagepack_$i) : $(ADDDEPS) -$(foreach,i,$(alllangiso) ooohelppack_$i) : $(ADDDEPS) +$(foreach,i,$(allhelplangiso) ooohelppack_$i) : $(ADDDEPS) -$(foreach,i,$(alllangiso) ooodevhelppack_$i) : $(ADDDEPS) +$(foreach,i,$(allhelplangiso) ooodevhelppack_$i) : $(ADDDEPS) $(foreach,i,$(alllangiso) sdkoo_$i) : $(ADDDEPS) @@ -216,7 +220,7 @@ $(foreach,i,$(alllangiso) oxygenofficewithjre_$i) : $(ADDDEPS) $(foreach,i,$(alllangiso) oxygenofficelanguagepack_$i) : $(ADDDEPS) -$(foreach,i,$(alllangiso) oxygenofficehelppack_$i) : $(ADDDEPS) +$(foreach,i,$(allhelplangiso) oxygenofficehelppack_$i) : $(ADDDEPS) .IF "$(MAKETARGETS)"!="" $(MAKETARGETS) : $(ADDDEPS) @@ -252,11 +256,11 @@ $(foreach,i,$(alllangiso) ooodevlanguagepack_$i) : $$@{$(PKGFORMAT:^".")} ooodevlanguagepack_%{$(PKGFORMAT:^".")} : $(PERL) -w $(SOLARENV)$/bin$/make_installer.pl -f $(PRJ)$/util$/openoffice.lst -l $(subst,$(@:s/_/ /:1)_, $(@:b)) -p LibreOffice_Dev -u $(OUT) -buildid $(BUILD) -msitemplate $(MSILANGPACKTEMPLATEDIR) -msilanguage $(COMMONMISC)$/win_ulffiles -languagepack -format $(@:e:s/.//) $(VERBOSESWITCH) -$(foreach,i,$(alllangiso) ooohelppack_$i) : $$@{$(PKGFORMAT:^".")} +$(foreach,i,$(allhelplangiso) ooohelppack_$i) : $$@{$(PKGFORMAT:^".")} ooohelppack_%{$(PKGFORMAT:^".")} : $(PERL) -w $(SOLARENV)$/bin$/make_installer.pl -f $(PRJ)$/util$/openoffice.lst -l $(subst,$(@:s/_/ /:1)_, $(@:b)) -p LibreOffice -u $(OUT) -buildid $(BUILD) -msitemplate $(MSIHELPPACKTEMPLATEDIR) -msilanguage $(COMMONMISC)$/win_ulffiles -helppack -format $(@:e:s/.//) $(VERBOSESWITCH) -$(foreach,i,$(alllangiso) ooodevhelppack_$i) : $$@{$(PKGFORMAT:^".")} +$(foreach,i,$(allhelplangiso) ooodevhelppack_$i) : $$@{$(PKGFORMAT:^".")} ooodevhelppack_%{$(PKGFORMAT:^".")} : $(PERL) -w $(SOLARENV)$/bin$/make_installer.pl -f $(PRJ)$/util$/openoffice.lst -l $(subst,$(@:s/_/ /:1)_, $(@:b)) -p LibreOffice_Dev -u $(OUT) -buildid $(BUILD) -msitemplate $(MSIHELPPACKTEMPLATEDIR) -msilanguage $(COMMONMISC)$/win_ulffiles -helppack -format $(@:e:s/.//) $(VERBOSESWITCH) @@ -322,13 +326,13 @@ $(foreach,i,$(alllangiso) oxygenofficelanguagepack_$i) : $$@{$(PKGFORMAT:^".")} oxygenofficelanguagepack_%{$(PKGFORMAT:^".")} : $(PERL) -w $(SOLARENV)$/bin$/make_installer.pl -f $(PRJ)$/util$/openoffice.lst -l $(subst,$(@:s/_/ /:1)_, $(@:b)) -p OxygenOffice -u $(OUT) -buildid $(BUILD) -msitemplate $(MSILANGPACKTEMPLATEDIR) -msilanguage $(COMMONMISC)$/win_ulffiles -languagepack -format $(@:e:s/.//) $(VERBOSESWITCH) -$(foreach,i,$(alllangiso) oxygenofficehelppack_$i) : $$@{$(PKGFORMAT:^".")} +$(foreach,i,$(allhelplangiso) oxygenofficehelppack_$i) : $$@{$(PKGFORMAT:^".")} oxygenofficehelppack_%{$(PKGFORMAT:^".")} : $(PERL) -w $(SOLARENV)$/bin$/make_installer.pl -f $(PRJ)$/util$/openoffice.lst -l $(subst,$(@:s/_/ /:1)_, $(@:b)) -p OxygenOffice -u $(OUT) -buildid $(BUILD) -msitemplate $(MSIHELPPACKTEMPLATEDIR) -msilanguage $(COMMONMISC)$/win_ulffiles -helppack -format $(@:e:s/.//) $(VERBOSESWITCH) .ELSE # "$(alllangiso)"!="" openoffice: - @echo cannot pack nothing... + @echo cannot pack anything... .ENDIF # "$(alllangiso)"!="" diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst index d318d584a5c2..5124ddebdca9 100644 --- a/instsetoo_native/util/openoffice.lst +++ b/instsetoo_native/util/openoffice.lst @@ -53,11 +53,11 @@ LibreOffice variables { PRODUCTNAME LibreOffice - PRODUCTNAME_BR BrOffice + PRODUCTNAME_BR LibreOffice PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 POSTVERSIONEXTENSION POSTVERSIONEXTENSIONUNIX BRANDPACKAGEVERSION 3 @@ -92,8 +92,8 @@ LibreOffice PATCHCODEFILE ooo_patchcodes.txt DOWNLOADBANNER ooobanner.bmp DOWNLOADBITMAP ooobitmap.bmp - DOWNLOADBANNER_BR brobanner.bmp - DOWNLOADBITMAP_BR brobitmap.bmp + DOWNLOADBANNER_BR ooobanner.bmp + DOWNLOADBITMAP_BR ooobitmap.bmp DOWNLOADSETUPICO ooosetup.ico RELATIVE_PATHES_IN_DDF 1 STARTCENTER_ADDFEATURE_URL http://extensions.libreoffice.org/ @@ -121,11 +121,11 @@ LibreOffice_wJRE variables { PRODUCTNAME LibreOffice - PRODUCTNAME_BR BrOffice + PRODUCTNAME_BR LibreOffice PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 POSTVERSIONEXTENSION POSTVERSIONEXTENSIONUNIX BRANDPACKAGEVERSION 3 @@ -189,7 +189,7 @@ LibreOffice_Dev PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 BASISROOTNAME LibO-dev UNIXBASISROOTNAME lo-dev POSTVERSIONEXTENSION @@ -266,7 +266,7 @@ URE PRODUCTEXTENSION BRANDPACKAGEVERSION 3 LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 LICENSENAME LGPL SETSTATICPATH 1 NOVERSIONINDIRNAME 1 @@ -301,11 +301,11 @@ LibreOffice_SDK variables { PRODUCTNAME LibreOffice - PRODUCTNAME_BR BrOffice + PRODUCTNAME_BR LibreOffice PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 POSTVERSIONEXTENSION SDK POSTVERSIONEXTENSIONUNIX sdk BRANDPACKAGEVERSION 3 @@ -351,7 +351,7 @@ LibreOffice_Dev_SDK PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 BASISROOTNAME LibO-dev UNIXBASISROOTNAME lo-dev POSTVERSIONEXTENSION SDK @@ -404,7 +404,7 @@ OxygenOffice PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 POSTVERSIONEXTENSION POSTVERSIONEXTENSIONUNIX BRANDPACKAGEVERSION 3 @@ -473,7 +473,7 @@ OxygenOffice_wJRE PRODUCTVERSION 3.4 PRODUCTEXTENSION LONG_PRODUCTEXTENSION - SHORT_PRODUCTEXTENSION beta3 + SHORT_PRODUCTEXTENSION beta4 POSTVERSIONEXTENSION POSTVERSIONEXTENSIONUNIX BRANDPACKAGEVERSION 3 diff --git a/libwpd/libwpd.corruptedprefix.patch b/libwpd/libwpd.corruptedprefix.patch deleted file mode 100644 index 9d5288d0515d..000000000000 --- a/libwpd/libwpd.corruptedprefix.patch +++ /dev/null @@ -1,107 +0,0 @@ ---- misc/libwpd-0.9.1/src/lib/WP6PrefixDataPacket.cpp 2010-08-26 13:35:21.000000000 +0200 -+++ misc/build/libwpd-0.9.1/src/lib/WP6PrefixDataPacket.cpp 2011-04-01 18:25:41.328379372 +0200 -@@ -46,45 +46,67 @@ - } - - WP6PrefixDataPacket * WP6PrefixDataPacket::constructPrefixDataPacket(WPXInputStream * input, WPXEncryption *encryption, WP6PrefixIndice *prefixIndice) --{ -- switch (prefixIndice->getType()) -+{ -+ WP6PrefixDataPacket *tmpPacket = 0; -+ try -+ { -+ switch (prefixIndice->getType()) -+ { -+ case WP6_INDEX_HEADER_INITIAL_FONT: -+ tmpPacket = new WP6DefaultInitialFontPacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_GENERAL_WORDPERFECT_TEXT: -+ tmpPacket = new WP6GeneralTextPacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_DESIRED_FONT_DESCRIPTOR_POOL: -+ tmpPacket = new WP6FontDescriptorPacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_FILL_STYLE: -+ tmpPacket = new WP6FillStylePacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_EXTENDED_DOCUMENT_SUMMARY: -+ tmpPacket = new WP6ExtendedDocumentSummaryPacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_OUTLINE_STYLE: -+ tmpPacket = new WP6OutlineStylePacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_GRAPHICS_FILENAME: -+ tmpPacket = new WP6GraphicsFilenamePacket(input, encryption, prefixIndice->getID(), prefixIndice->getFlags(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_GRAPHICS_CACHED_FILE_DATA: -+ tmpPacket = new WP6GraphicsCachedFileDataPacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_GRAPHICS_BOX_STYLE: -+ tmpPacket = new WP6GraphicsBoxStylePacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_TABLE_STYLE: -+ tmpPacket = new WP6TableStylePacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ case WP6_INDEX_HEADER_COMMENT_ANNOTATION: -+ tmpPacket = new WP6CommentAnnotationPacket(input, encryption, prefixIndice->getID(), -+ prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -+ break; -+ default: -+ break;; -+ } -+ } -+ catch (FileException) - { -- case WP6_INDEX_HEADER_INITIAL_FONT: -- return new WP6DefaultInitialFontPacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_GENERAL_WORDPERFECT_TEXT: -- return new WP6GeneralTextPacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_DESIRED_FONT_DESCRIPTOR_POOL: -- return new WP6FontDescriptorPacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_FILL_STYLE: -- return new WP6FillStylePacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_EXTENDED_DOCUMENT_SUMMARY: -- return new WP6ExtendedDocumentSummaryPacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_OUTLINE_STYLE: -- return new WP6OutlineStylePacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_GRAPHICS_FILENAME: -- return new WP6GraphicsFilenamePacket(input, encryption, prefixIndice->getID(), prefixIndice->getFlags(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_GRAPHICS_CACHED_FILE_DATA: -- return new WP6GraphicsCachedFileDataPacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_GRAPHICS_BOX_STYLE: -- return new WP6GraphicsBoxStylePacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_TABLE_STYLE: -- return new WP6TableStylePacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- case WP6_INDEX_HEADER_COMMENT_ANNOTATION: -- return new WP6CommentAnnotationPacket(input, encryption, prefixIndice->getID(), -- prefixIndice->getDataOffset(), prefixIndice->getDataSize()); -- default: -- return 0; -+ if (tmpPacket) -+ delete tmpPacket; -+ tmpPacket = 0; - } -+ return tmpPacket; - } - - void WP6PrefixDataPacket::_read(WPXInputStream *input, WPXEncryption *encryption, uint32_t dataOffset, uint32_t dataSize) diff --git a/libwpd/libwpd.gcc460.patch b/libwpd/libwpd.gcc460.patch deleted file mode 100644 index e5e41a0ddf06..000000000000 --- a/libwpd/libwpd.gcc460.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- misc/libwpd-0.9.1/src/lib/WP5GraphicsInformationPacket.h 2011-01-24 09:50:48.131106590 +0000 -+++ misc/build/libwpd-0.9.1/src/lib/WP5GraphicsInformationPacket.h 2011-01-24 09:51:17.676174074 +0000 -@@ -37,7 +37,7 @@ - ~WP5GraphicsInformationPacket(); - void _readContents(WPXInputStream *input, WPXEncryption *encryption, uint32_t dataSize); - const std::vector<WPXBinaryData *> &getImages() const { return m_images; } -- const WPXBinaryData *getImage( unsigned long imageIndex ) const { if (imageIndex < m_images.size()) return m_images[imageIndex]; return NULL; } -+ const WPXBinaryData *getImage( unsigned long imageIndex ) const { if (imageIndex < m_images.size()) return m_images[imageIndex]; return 0; } - - private: - std::vector<WPXBinaryData *> m_images; diff --git a/libwpd/libwpd.warnings.patch b/libwpd/libwpd.warnings.patch deleted file mode 100644 index ebc86dc93ca5..000000000000 --- a/libwpd/libwpd.warnings.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- misc/libwpd-0.9.1/src/lib/libwpd_internal.cpp -+++ misc/build/libwpd-0.9.1/src/lib/libwpd_internal.cpp -@@ -998,21 +998,25 @@ _WPXColumnProperties::_WPXColumnProperties() - // HACK: this function is really cheesey - int _extractNumericValueFromRoman(const char romanChar) - { -+ int retValue = 0; - switch (romanChar) - { - case 'I': - case 'i': -- return 1; -+ retValue = 1; -+ break; - case 'V': - case 'v': -- return 5; -+ retValue = 5; -+ break; - case 'X': - case 'x': -- return 10; -+ retValue = 10; -+ break; - default: - throw ParseException(); - } -- return 1; -+ return retValue; - } - - // _extractDisplayReferenceNumberFromBuf: given a nuWP6_DEFAULT_FONT_SIZEmber string in UCS2 represented diff --git a/libwpd/makefile.mk b/libwpd/makefile.mk index 6ecbbfaddacd..a8b17ffa625f 100644 --- a/libwpd/makefile.mk +++ b/libwpd/makefile.mk @@ -41,11 +41,8 @@ TARGET=wpd @echo "Using system libwpd..." .ENDIF -TARFILE_NAME=libwpd-0.9.1 -TARFILE_MD5=5ff846847dab351604ad859e2fd4ed3c -PATCH_FILES=libwpd.gcc460.patch \ - libwpd.corruptedprefix.patch \ - libwpd.warnings.patch +TARFILE_NAME=libwpd-0.9.2 +TARFILE_MD5=8d265a592619166f29c4672ea54812b7 BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS) BUILD_DIR=src$/lib diff --git a/libwps/libwps-0.1.1.diff b/libwps/libwps-0.1.1.diff deleted file mode 100644 index 6977cf33ceec..000000000000 --- a/libwps/libwps-0.1.1.diff +++ /dev/null @@ -1,93 +0,0 @@ -*** misc/libwps-0.1.1/src/lib/WPSListener.h Thu Nov 29 20:58:57 2007 ---- misc/build/libwps-0.1.1/src/lib/WPSListener.h Sun Dec 2 20:54:35 2007 -*************** -*** 39,45 **** - virtual ~WPSListener(); - - bool isUndoOn() { return m_isUndoOn; } -! void setUndoOn(bool isUndoOn) { m_isUndoOn = isUndoOn; } - - std::list<WPSPageSpan> &m_pageList; - ---- 39,45 ---- - virtual ~WPSListener(); - - bool isUndoOn() { return m_isUndoOn; } -! void setUndoOn(bool undoOn) { m_isUndoOn = undoOn; } - - std::list<WPSPageSpan> &m_pageList; - -*** misc/libwps-0.1.1/src/lib/WPSContentListener.cpp Thu Nov 29 20:58:57 2007 ---- misc/build/libwps-0.1.1/src/lib/WPSContentListener.cpp Sun Dec 2 21:09:11 2007 -*************** -*** 36,62 **** - #define LIBWPS_MAX std::max - #endif - -- namespace { -- -- WPXString doubleToString(const double value) -- { -- WPXString tempString; -- tempString.sprintf("%.4f", value); -- std::string decimalPoint(localeconv()->decimal_point); -- if ((decimalPoint.size() == 0) || (decimalPoint == ".")) -- return tempString; -- std::string stringValue(tempString.cstr()); -- if (!stringValue.empty()) -- { -- std::string::size_type pos; -- while ((pos = stringValue.find(decimalPoint)) != std::string::npos) -- stringValue.replace(pos,decimalPoint.size(),"."); -- } -- return WPXString(stringValue.c_str()); -- } -- -- } // namespace -- - _WPSContentParsingState::_WPSContentParsingState() : - m_textAttributeBits(0), - m_fontSize(12.0f/*WP6_DEFAULT_FONT_SIZE*/), // FIXME ME!!!!!!!!!!!!!!!!!!! HELP WP6_DEFAULT_FONT_SIZE ---- 36,41 ---- -*************** -*** 578,585 **** - _closePageSpan(); - } - -- const float WPS_DEFAULT_SUPER_SUB_SCRIPT = 58.0f; -- - void WPSContentListener::_openSpan() - { - if (!m_ps->m_isParagraphOpened && !m_ps->m_isListElementOpened) ---- 557,562 ---- -*************** -*** 622,639 **** - } - - WPXPropertyList propList; -! if (attributeBits & WPS_SUPERSCRIPT_BIT) { -! WPXString sSuperScript("super "); -! sSuperScript.append(doubleToString(WPS_DEFAULT_SUPER_SUB_SCRIPT)); -! sSuperScript.append("%"); -! propList.insert("style:text-position", sSuperScript); -! } -! else if (attributeBits & WPS_SUBSCRIPT_BIT) { -! WPXString sSubScript("sub "); -! sSubScript.append(doubleToString(WPS_DEFAULT_SUPER_SUB_SCRIPT)); -! sSubScript.append("%"); -! propList.insert("style:text-position", sSubScript); -! } - if (attributeBits & WPS_ITALICS_BIT) - propList.insert("fo:font-style", "italic"); - if (attributeBits & WPS_BOLD_BIT) ---- 599,608 ---- - } - - WPXPropertyList propList; -! if (m_ps->m_textAttributeBits & WPS_SUPERSCRIPT_BIT) -! propList.insert("style:text-position", "super 58%"); -! else if (m_ps->m_textAttributeBits & WPS_SUBSCRIPT_BIT) -! propList.insert("style:text-position", "sub 58%"); - if (attributeBits & WPS_ITALICS_BIT) - propList.insert("fo:font-style", "italic"); - if (attributeBits & WPS_BOLD_BIT) diff --git a/libwps/libwps-0.2.0.patch b/libwps/libwps-0.2.0.patch deleted file mode 100644 index 6af2989b70af..000000000000 --- a/libwps/libwps-0.2.0.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up misc/build/libwps-0.2.0/src/lib/libwps_internal.h.old misc/build/libwps-0.2.0/src/lib/libwps_internal.h ---- misc/build/libwps-0.2.0/src/lib/libwps_internal.h.old 2010-11-17 20:47:23.288507198 +0100 -+++ misc/build/libwps-0.2.0/src/lib/libwps_internal.h 2010-11-17 20:47:26.596839807 +0100 -@@ -23,6 +23,7 @@ - #define LIBWPS_INTERNAL_H - #ifdef DEBUG - #include <bitset> -+#include <stdio.h> - #endif - #include <libwpd-stream/libwpd-stream.h> - #include <libwpd/libwpd.h> diff --git a/libwps/libwps-0.2.1-warnings.patch b/libwps/libwps-0.2.1-warnings.patch new file mode 100644 index 000000000000..fffffd52ee80 --- /dev/null +++ b/libwps/libwps-0.2.1-warnings.patch @@ -0,0 +1,60 @@ +--- misc/libwps-0.2.1/src/lib/WPS8.cpp 2011-04-05 11:25:15.000000000 +0200 ++++ misc/build/libwps-0.2.1/src/lib/WPS8.cpp 2011-05-03 15:02:21.107349347 +0200 +@@ -136,7 +136,7 @@ + input->seek(pos->second.offset, WPX_SEEK_SET); + n_streams = readU32(input); + +- if (n_streams > 100) WPS_DEBUG_MSG(("Probably garbled STRS: count = %u\n",n_streams)); ++ if (n_streams > 100) { WPS_DEBUG_MSG(("Probably garbled STRS: count = %u\n",n_streams)); } + + /* skip mysterious header*/ + input->seek(8, WPX_SEEK_CUR); +@@ -155,7 +155,7 @@ + last_pos += offset; + } + offset = readU32(input); +- if (offset) WPS_DEBUG_MSG(("Offset table is not 0-terminated!\n")); ++ if (offset) { WPS_DEBUG_MSG(("Offset table is not 0-terminated!\n")); } + + for (unsigned i=0; i < n_streams; i++) { + uint16_t len; +@@ -325,7 +325,7 @@ + * + */ + +-void WPS8Parser::readText(WPXInputStream * input, WPS8ContentListener *listener) ++void WPS8Parser::readText(WPXInputStream * /* input */, WPS8ContentListener * /* listener */) + { + #if (0) + WPS_DEBUG_MSG(("WPS8Parser::readText()\n")); +@@ -1356,7 +1356,7 @@ + id += 4; + t_rem -= 4; + +- if (t_count < 0 && t_count > 20) break; /* obviously wrong */ ++ if (t_count > 20) break; /* obviously wrong */ + } else break; /* wrong format */ + } + +--- misc/libwps-0.2.1/src/lib/WPSContentListener.cpp 2011-04-04 21:56:29.000000000 +0200 ++++ misc/build/libwps-0.2.1/src/lib/WPSContentListener.cpp 2011-05-03 15:02:21.837414573 +0200 +@@ -621,7 +621,7 @@ + _closeParagraph(); + } + +-const uint16_t WPSContentListener::getSpec() const ++uint16_t WPSContentListener::getSpec() const + { + return m_ps->m_spec; + } +--- misc/libwps-0.2.1/src/lib/WPSContentListener.h 2011-04-04 21:30:56.000000000 +0200 ++++ misc/build/libwps-0.2.1/src/lib/WPSContentListener.h 2011-05-03 15:02:23.334548336 +0200 +@@ -154,7 +154,7 @@ + + void insertEOL(); + +- const uint16_t getSpec() const; ++ uint16_t getSpec() const; + protected: + WPSContentListener(std::list<WPSPageSpan> &pageList, WPXDocumentInterface *documentInterface); + virtual ~WPSContentListener(); diff --git a/libwps/libwps-0.2.1.patch b/libwps/libwps-0.2.1.patch new file mode 100644 index 000000000000..a70812dd568a --- /dev/null +++ b/libwps/libwps-0.2.1.patch @@ -0,0 +1,28 @@ +--- misc/libwps-0.2.1/src/lib/libwps_internal.cpp 2011-04-04 21:53:42.000000000 +0200 ++++ misc/build/libwps-0.2.1/src/lib/libwps_internal.cpp 2011-05-03 14:50:56.146147538 +0200 +@@ -79,18 +79,15 @@ + {0x419,"ru-RU"} + }; + +-static int _ltcomp(const void *k1, const void *k2) +-{ +- int r = (int)((ssize_t)k1) - ((_lange*)k2)->id; +- return r; +-} +- + std::string getLangFromLCID(uint32_t lcid) + { +- _lange *c = (_lange*) bsearch((const void*)lcid,s_lang_table, +- sizeof(s_lang_table)/sizeof(_lange), +- sizeof(_lange),_ltcomp); +- if (c) return c->name; ++ unsigned i = 0; ++ ++ for (i=0; i < sizeof(s_lang_table)/sizeof(s_lang_table[0]); i++) ++ { ++ if (s_lang_table[i].id == lcid) ++ return s_lang_table[i].name; ++ } + return "-none-"; + } + diff --git a/libwps/makefile.mk b/libwps/makefile.mk index 3f9667bf008f..edb36cd08f5b 100644 --- a/libwps/makefile.mk +++ b/libwps/makefile.mk @@ -49,12 +49,12 @@ INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd-stream .ENDIF -TARFILE_NAME=libwps-0.2.0 -TARFILE_MD5=9e436bff44c60dc8b97cba0c7fc11a5c +TARFILE_NAME=libwps-0.2.1 +TARFILE_MD5=83d4029aebf290c0a9a8fee9c99638d3 BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS) BUILD_DIR=src/lib -PATCH_FILES=libwps-0.2.0.patch +PATCH_FILES=libwps-0.2.1.patch libwps-0.2.1-warnings.patch # --- Targets ------------------------------------------------------ diff --git a/np_sdk/mozsrc/npapi.h b/np_sdk/mozsrc/npapi.h index ef2b21a6223f..8c55f6cb0fbc 100644 --- a/np_sdk/mozsrc/npapi.h +++ b/np_sdk/mozsrc/npapi.h @@ -42,8 +42,9 @@ * Netscape client plug-in API spec */ -#ifndef _NPAPI_H_ +#if !defined(_NPAPI_H_) && !defined(npapi_h_) #define _NPAPI_H_ +#define npapi_h_ #ifdef __OS2__ #pragma pack(1) diff --git a/ooo.lst.in b/ooo.lst.in index 0c43f1fda28c..94d69c21d5ea 100644 --- a/ooo.lst.in +++ b/ooo.lst.in @@ -74,8 +74,8 @@ debc62758716a169df9f62e6ab2bc634-zlib-1.2.3.tar.gz 0f63ee487fda8f21fafa767b3c447ac9-ixion-0.2.0.tar.gz 71474203939fafbe271e1263e61d083e-nss-3.12.8-with-nspr-4.8.6.tar.gz 5ba6a61a2f66dfd5fee8cdd4cd262a37-libwpg-0.2.0.tar.bz2 -5ff846847dab351604ad859e2fd4ed3c-libwpd-0.9.1.tar.bz2 -9e436bff44c60dc8b97cba0c7fc11a5c-libwps-0.2.0.tar.bz2 +8d265a592619166f29c4672ea54812b7-libwpd-0.9.2.tar.bz2 +83d4029aebf290c0a9a8fee9c99638d3-libwps-0.2.1.tar.bz2 7a0dcb3fe1e8c7229ab4fb868b7325e6-mdds_0.5.2.tar.bz2 f02578f5218f217a9f20e9c30e119c6a-boost_1_44_0.tar.bz2 9ed97fce60a9a65852402248a6659492-hunspell-1.3.1.tar.gz diff --git a/oox/prj/build.lst b/oox/prj/build.lst index 8ff9e5eda5ae..07c4e0eb06fb 100644 --- a/oox/prj/build.lst +++ b/oox/prj/build.lst @@ -1,4 +1,4 @@ -oox oox : cppu cppuhelper comphelper filter sal offapi sax basegfx svx xmlscript tools vcl BOOST:boost OPENSSL:openssl LIBXSLT:libxslt NULL +oox oox : cppu cppuhelper comphelper filter sal offapi sax basegfx svx xmlscript tools vcl unotools BOOST:boost OPENSSL:openssl LIBXSLT:libxslt NULL oox oox usr1 - all oox_mkout NULL oox oox\prj get - all oox_prj NULL oox oox\source\token nmake - all oox_token NULL diff --git a/post_download.in b/post_download.in index 3c542b8dd723..c55a749a47be 100755 --- a/post_download.in +++ b/post_download.in @@ -1,4 +1,4 @@ -AC_INIT([LibreOffice], [3.3],,, [http://documentfoundation.org/]) +AC_INIT([LibreOffice], [3.4],,, [http://documentfoundation.org/]) AC_PREREQ(2.50) echo "********************************************************************" diff --git a/sal/osl/unx/diagnose.c b/sal/osl/unx/diagnose.c index 5425810ae408..043d68aa5c00 100644 --- a/sal/osl/unx/diagnose.c +++ b/sal/osl/unx/diagnose.c @@ -255,8 +255,9 @@ sal_Bool SAL_CALL osl_assertFailedLine ( /* output message buffer */ OSL_DIAGNOSE_OUTPUTMESSAGE(f, szMessage); - /* output backtrace */ - osl_diagnose_backtrace_Impl(f); + /* if SAL backtrace for assertions is disabled, skip here */ + if ( !getenv("DISABLE_SAL_BACKTRACE") ) + osl_diagnose_backtrace_Impl(f); /* release lock and leave */ pthread_mutex_unlock(&g_mutex); diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk index 59d6617ae470..62c0ac0eb9a8 100644 --- a/sc/Library_sc.mk +++ b/sc/Library_sc.mk @@ -131,7 +131,6 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ sc/source/core/data/pivot2 \ sc/source/core/data/poolhelp \ sc/source/core/data/postit \ - sc/source/core/data/scdpoutputimpl \ sc/source/core/data/segmenttree \ sc/source/core/data/sheetevents \ sc/source/core/data/sortparam \ diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 901bc3615ac2..19496d0f3f15 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -528,8 +528,8 @@ public: SC_DLLPUBLIC sal_Bool SetCodeName( SCTAB nTab, const String& rName ); SC_DLLPUBLIC sal_Bool GetTable( const String& rName, SCTAB& rTab ) const; - void SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData); - ScDBData* GetAnonymousDBData(SCTAB nTab); + SC_DLLPUBLIC void SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData); + SC_DLLPUBLIC ScDBData* GetAnonymousDBData(SCTAB nTab); SC_DLLPUBLIC inline SCTAB GetTableCount() const { return nMaxTableNumber; } SvNumberFormatterIndexTable* GetFormatExchangeList() const { return pFormatExchangeList; } @@ -1238,7 +1238,7 @@ public: SC_DLLPUBLIC sal_Bool ApplyFlagsTab( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, sal_Int16 nFlags ); - sal_Bool RemoveFlagsTab( SCCOL nStartCol, SCROW nStartRow, + SC_DLLPUBLIC sal_Bool RemoveFlagsTab( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, sal_Int16 nFlags ); diff --git a/sc/inc/dpcachetable.hxx b/sc/inc/dpcachetable.hxx index 73b3d5e12727..9c6353d0b51a 100644 --- a/sc/inc/dpcachetable.hxx +++ b/sc/inc/dpcachetable.hxx @@ -58,6 +58,13 @@ struct ScQueryParam; class SC_DLLPUBLIC ScDPCacheTable { + struct RowFlag + { + bool mbShowByFilter:1; + bool mbShowByPage:1; + bool isActive() const; + RowFlag(); + }; public: /** individual filter item used in SingleFilter and GroupFilter. */ struct FilterItem @@ -121,7 +128,7 @@ public: Criterion(); }; - ScDPCacheTable(ScDPCache* pCache); + ScDPCacheTable(const ScDPCache* pCache); ~ScDPCacheTable(); sal_Int32 getRowSize() const; @@ -169,15 +176,13 @@ public: SCROW getOrder(long nDim, SCROW nIndex) const; void clear(); bool empty() const; - void setCache(ScDPCache* p); + void setCache(const ScDPCache* p); bool hasCache() const; private: ScDPCacheTable(); ScDPCacheTable(const ScDPCacheTable&); - ScDPCache* getCache(); - /** * Check if a given row meets all specified criteria. * @@ -190,11 +195,10 @@ private: /** unique field entires for each field (column). */ ::std::vector< ::std::vector<SCROW> > maFieldEntries; - /** used to track visibility of rows. The first row below the header row - has the index of 0. */ - ::std::vector<bool> maRowsVisible; + /** Row flags. The first row below the header row has the index of 0. */ + ::std::vector<RowFlag> maRowFlags; - ScDPCache* mpCache; + const ScDPCache* mpCache; }; #endif diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx index 59230d833491..30ca8406d11e 100644 --- a/sc/inc/dpobject.hxx +++ b/sc/inc/dpobject.hxx @@ -39,6 +39,7 @@ #include <boost/ptr_container/ptr_list.hpp> #include <boost/ptr_container/ptr_vector.hpp> +#include <boost/ptr_container/ptr_map.hpp> #include <boost/shared_ptr.hpp> namespace com { namespace sun { namespace star { namespace sheet { @@ -117,7 +118,6 @@ private: SC_DLLPRIVATE void CreateObjects(); SC_DLLPRIVATE void CreateOutput(); sal_Bool bRefresh; - long mnCacheId; public: ScDPObject(ScDocument* pD); @@ -257,13 +257,62 @@ public: class ScDPCollection { -private: - typedef ::boost::ptr_vector<ScDPObject> TablesType; +public: - ScDocument* pDoc; - TablesType maTables; + /** + * Stores and manages all caches from internal sheets. + */ + class SheetCaches + { + typedef ::boost::ptr_map<ScRange, ScDPCache> CachesType; + CachesType maCaches; + ScDocument* mpDoc; + public: + SheetCaches(ScDocument* pDoc); + const ScDPCache* getCache(const ScRange& rRange); + void removeCache(const ScRange& rRange); + }; + + /** + * Data caches for range name based source data. + */ + class NameCaches + { + typedef ::boost::ptr_map<rtl::OUString, ScDPCache> CachesType; + CachesType maCaches; + ScDocument* mpDoc; + public: + NameCaches(ScDocument* pDoc); + const ScDPCache* getCache(const ::rtl::OUString& rName, const ScRange& rRange); + void removeCache(const ::rtl::OUString& rName); + }; + + /** + * Defines connection type to external data source. Used as a key to look + * up database cache. + */ + struct DBType + { + sal_Int32 mnSdbType; + ::rtl::OUString maDBName; + ::rtl::OUString maCommand; + DBType(sal_Int32 nSdbType, const ::rtl::OUString& rDBName, const ::rtl::OUString& rCommand); + }; + + /** + * Data caches for external database sources. + */ + class DBCaches + { + typedef ::boost::ptr_map<DBType, ScDPCache> CachesType; + CachesType maCaches; + ScDocument* mpDoc; + public: + DBCaches(ScDocument* pDoc); + const ScDPCache* getCache(sal_Int32 nSdbType, const ::rtl::OUString& rDBName, const ::rtl::OUString& rCommand); + void removeCache(sal_Int32 nSdbType, const ::rtl::OUString& rDBName, const ::rtl::OUString& rCommand); + }; -public: ScDPCollection(ScDocument* pDocument); ScDPCollection(const ScDPCollection& r); ~ScDPCollection(); @@ -296,8 +345,22 @@ public: SC_DLLPUBLIC bool InsertNewTable(ScDPObject* pDPObj); bool HasDPTable(SCCOL nCol, SCROW nRow, SCTAB nTab) const; + + SheetCaches& GetSheetCaches(); + NameCaches& GetNameCaches(); + DBCaches& GetDBCaches(); + +private: + typedef ::boost::ptr_vector<ScDPObject> TablesType; + + ScDocument* pDoc; + TablesType maTables; + SheetCaches maSheetCaches; + NameCaches maNameCaches; + DBCaches maDBCaches; }; +bool operator<(const ScDPCollection::DBType& left, const ScDPCollection::DBType& right); #endif diff --git a/sc/inc/dpoutput.hxx b/sc/inc/dpoutput.hxx index 99ca1ed82754..d1d07e2c42cb 100644 --- a/sc/inc/dpoutput.hxx +++ b/sc/inc/dpoutput.hxx @@ -81,7 +81,7 @@ private: com::sun::star::uno::Reference< com::sun::star::sheet::XDimensionsSupplier> xSource; ScAddress aStartPos; - sal_Bool bDoFilter; + bool bDoFilter; ScDPOutLevelData* pColFields; ScDPOutLevelData* pRowFields; ScDPOutLevelData* pPageFields; @@ -91,7 +91,7 @@ private: com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< com::sun::star::sheet::DataResult> > aData; - sal_Bool bResultsError; + bool bResultsError; bool mbHasDataLayout; String aDataDescription; @@ -103,8 +103,8 @@ private: sal_uInt32 nSingleNumFmt; // Output geometry related parameters - sal_Bool bSizesValid; - sal_Bool bSizeOverflow; + bool bSizesValid; + bool bSizeOverflow; long nColCount; long nRowCount; long nHeaderSize; @@ -136,7 +136,7 @@ public: ScDPOutput( ScDocument* pD, const com::sun::star::uno::Reference< com::sun::star::sheet::XDimensionsSupplier>& xSrc, - const ScAddress& rPos, sal_Bool bFilter ); + const ScAddress& rPos, bool bFilter ); ~ScDPOutput(); void SetPosition( const ScAddress& rPos ); diff --git a/sc/inc/dpsdbtab.hxx b/sc/inc/dpsdbtab.hxx index b86d0869e404..87c3ccd1ec5c 100644 --- a/sc/inc/dpsdbtab.hxx +++ b/sc/inc/dpsdbtab.hxx @@ -41,8 +41,8 @@ class ScDocument; struct ScImportSourceDesc { - String aDBName; - String aObject; + ::rtl::OUString aDBName; + ::rtl::OUString aObject; sal_uInt16 nType; // enum DataImportMode bool bNative; ScDocument* mpDoc; @@ -56,7 +56,8 @@ struct ScImportSourceDesc bNative == rOther.bNative && mpDoc == rOther.mpDoc; } - ScDPCache* CreateCache() const; + sal_Int32 GetCommandType() const; + const ScDPCache* CreateCache() const; }; /** diff --git a/sc/inc/dpshttab.hxx b/sc/inc/dpshttab.hxx index 9215ef107dfb..505a2758ae78 100644 --- a/sc/inc/dpshttab.hxx +++ b/sc/inc/dpshttab.hxx @@ -78,7 +78,7 @@ public: const ScQueryParam& GetQueryParam() const; bool operator== ( const ScSheetSourceDesc& rOther ) const; - SC_DLLPUBLIC ScDPCache* CreateCache() const; + SC_DLLPUBLIC const ScDPCache* CreateCache() const; /** * Check the sanity of the data source range. @@ -111,7 +111,7 @@ private: ScDPCacheTable aCacheTable; public: - ScSheetDPData(ScDocument* pD, const ScSheetSourceDesc& rDesc, ScDPCache* pCache); + ScSheetDPData(ScDocument* pD, const ScSheetSourceDesc& rDesc, const ScDPCache* pCache); virtual ~ScSheetDPData(); virtual long GetColumnCount(); diff --git a/sc/inc/dptabdat.hxx b/sc/inc/dptabdat.hxx index 7b3dde760246..31d32fe25706 100644 --- a/sc/inc/dptabdat.hxx +++ b/sc/inc/dptabdat.hxx @@ -39,6 +39,7 @@ #include <set> #include <boost/unordered_set.hpp> #include <boost/unordered_map.hpp> +#include <boost/noncopyable.hpp> namespace com { namespace sun { namespace star { namespace sheet { struct DataPilotFieldFilter; @@ -91,7 +92,7 @@ class ScDocument; * Base class that abstracts different data source types of a datapilot * table. */ -class SC_DLLPUBLIC ScDPTableData +class SC_DLLPUBLIC ScDPTableData : public ::boost::noncopyable { // cached data for GetDatePart long nLastDateVal; diff --git a/sc/inc/dptablecache.hxx b/sc/inc/dptablecache.hxx index c1ee4238193c..4bfb14dad727 100644 --- a/sc/inc/dptablecache.hxx +++ b/sc/inc/dptablecache.hxx @@ -48,7 +48,6 @@ struct ScQueryParam; */ class SC_DLLPUBLIC ScDPCache { - friend class ScDPCacheTable; public: typedef ::boost::ptr_vector<ScDPItemData> DataListType; private: @@ -58,20 +57,41 @@ private: ScDocument* mpDoc; long mnColumnCount; - DataGridType maTableDataValues; // Data Pilot Table's index - value map - RowGridType maSourceData; // Data Pilot Table's source data - RowGridType maGlobalOrder; // Sorted members index - mutable RowGridType maIndexOrder; // Index the sorted numbers - DataListType maLabelNames; // Source label data - std::vector<bool> mbEmptyRow; //If empty row? + /** + * This container stores only the unique instances of item data in each + * column. Duplicates are not allowed. + */ + DataGridType maTableDataValues; + + /** + * This container stores indices within maTableDataValues pointing to the + * data. The order of data are exactly as they appear in the original + * data source. + */ + RowGridType maSourceData; + + /** + * This container stores indices within maTableDataValues. The order of + * indices in each column represents ascending order of the actual data. + */ + RowGridType maGlobalOrder; + + /** + * This container stores the ranks of each unique data represented by + * their index. + */ + mutable RowGridType maIndexOrder; + + DataListType maLabelNames; // Stores dimension names. + std::vector<bool> mbEmptyRow; // Keeps track of empty rows. mutable ScDPItemDataPool maAdditionalData; public: - SCROW GetIdByItemData( long nDim, String sItemData ) const; + SCROW GetIdByItemData( long nDim, const String& sItemData ) const; SCROW GetIdByItemData( long nDim, const ScDPItemData& rData ) const; - SCROW GetAdditionalItemID ( String sItemData ) const; + SCROW GetAdditionalItemID ( const String& sItemData ) const; SCROW GetAdditionalItemID( const ScDPItemData& rData ) const; SCCOL GetDimensionIndex( String sName) const; @@ -81,6 +101,7 @@ public: bool IsDateDimension( long nDim ) const ; sal_uLong GetDimNumType( SCCOL nDim) const; SCROW GetDimMemberCount( SCCOL nDim ) const; + SCROW GetOrder( long nDim, SCROW nIndex ) const; SCROW GetSortedItemDataId( SCCOL nDim, SCROW nOrder ) const; const DataListType& GetDimMemberValues( SCCOL nDim ) const; @@ -93,7 +114,7 @@ public: bool IsEmptyMember( SCROW nRow, sal_uInt16 nColumn ) const; bool IsRowEmpty( SCROW nRow ) const; bool IsValid() const; - bool ValidQuery( SCROW nRow, const ScQueryParam& rQueryParam, bool* pSpecial ); + bool ValidQuery( SCROW nRow, const ScQueryParam& rQueryParam, bool* pSpecial ) const; ScDocument* GetDoc() const;//ms-cache-core long GetColumnCount() const; @@ -103,12 +124,11 @@ public: bool operator== ( const ScDPCache& r ) const; ScDPCache(ScDocument* pDoc); - virtual ~ScDPCache(); + ~ScDPCache(); private: - SCROW GetOrder( long nDim, SCROW nIndex ) const; void AddLabel( ScDPItemData* pData); - bool AddData( long nDim, ScDPItemData* itemData ); + bool AddData(long nDim, ScDPItemData* pData); }; #endif diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 531528436ae5..35558d1a75a3 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -231,6 +231,7 @@ public: void testCSV(); void testMatrix(); void testDataPilot(); + void testDataPilotFilters(); void testSheetCopy(); void testExternalRef(); void testDataArea(); @@ -270,6 +271,7 @@ public: CPPUNIT_TEST(testCSV); CPPUNIT_TEST(testMatrix); CPPUNIT_TEST(testDataPilot); + CPPUNIT_TEST(testDataPilotFilters); CPPUNIT_TEST(testSheetCopy); CPPUNIT_TEST(testExternalRef); CPPUNIT_TEST(testDataArea); @@ -302,6 +304,28 @@ Test::Test() //of retaining references to the root ServiceFactory as its passed around comphelper::setProcessServiceFactory(xSM); +#if 0 + // TODO: attempt to explicitly set UI locale to en-US, to get the unit + // test to work under non-English build environment. But this causes + // runtime exception.... + uno::Reference<lang::XMultiServiceFactory> theConfigProvider = + uno::Reference<lang::XMultiServiceFactory> ( + xSM->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationProvider"))), uno::UNO_QUERY_THROW); + + uno::Sequence<uno::Any> theArgs(1); + OUString aLocalePath(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Linguistic/General")); + theArgs[0] <<= aLocalePath; + uno::Reference<beans::XPropertySet> xProp( + theConfigProvider->createInstanceWithArguments( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationUpdateAccess")), theArgs), uno::UNO_QUERY_THROW); + + OUString aLang(RTL_CONSTASCII_USTRINGPARAM("en-US")); + uno::Any aAny; + aAny <<= aLang; + xProp->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("UILocale")), aAny); +#endif + // initialise UCB-Broker uno::Sequence<uno::Any> aUcbInitSequence(2); aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local")); @@ -669,89 +693,66 @@ void Test::testMatrix() } } -void Test::testDataPilot() -{ - m_pDoc->InsertTab(0, OUString(RTL_CONSTASCII_USTRINGPARAM("Data"))); - m_pDoc->InsertTab(1, OUString(RTL_CONSTASCII_USTRINGPARAM("Table"))); - - // Dimension definition - struct { - const char* pName; sheet::DataPilotFieldOrientation eOrient; - } aFields[] = { - { "Name", sheet::DataPilotFieldOrientation_ROW }, - { "Group", sheet::DataPilotFieldOrientation_COLUMN }, - { "Score", sheet::DataPilotFieldOrientation_DATA } - }; - - // Raw data - struct { - const char* pName; const char* pGroup; int nScore; - } aData[] = { - { "Andy", "A", 30 }, - { "Bruce", "A", 20 }, - { "Charlie", "B", 45 }, - { "David", "B", 12 }, - { "Edward", "C", 8 }, - { "Frank", "C", 15 }, - }; - - // Expected output table content. 0 = empty cell - const char* aOutputCheck[][5] = { - { "Sum - Score", "Group", 0, 0, 0 }, - { "Name", "A", "B", "C", "Total Result" }, - { "Andy", "30", 0, 0, "30" }, - { "Bruce", "20", 0, 0, "20" }, - { "Charlie", 0, "45", 0, "45" }, - { "David", 0, "12", 0, "12" }, - { "Edward", 0, 0, "8", "8" }, - { "Frank", 0, 0, "15", "15" }, - { "Total Result", "50", "57", "23", "130" } - }; - - sal_uInt32 nFieldCount = SAL_N_ELEMENTS(aFields); - sal_uInt32 nDataCount = SAL_N_ELEMENTS(aData); - - // Insert field names in row 0. - for (sal_uInt32 i = 0; i < nFieldCount; ++i) - m_pDoc->SetString(static_cast<SCCOL>(i), 0, 0, OUString(aFields[i].pName, strlen(aFields[i].pName), RTL_TEXTENCODING_UTF8)); - - // Insert data into row 1 and downward. - for (sal_uInt32 i = 0; i < nDataCount; ++i) - { - SCROW nRow = static_cast<SCROW>(i) + 1; - m_pDoc->SetString(0, nRow, 0, OUString(aData[i].pName, strlen(aData[i].pName), RTL_TEXTENCODING_UTF8)); - m_pDoc->SetString(1, nRow, 0, OUString(aData[i].pGroup, strlen(aData[i].pGroup), RTL_TEXTENCODING_UTF8)); - m_pDoc->SetValue(2, nRow, 0, aData[i].nScore); - } - - SCROW nRow1 = 0, nRow2 = 0; - SCCOL nCol1 = 0, nCol2 = 0; - m_pDoc->GetDataArea(0, nCol1, nRow1, nCol2, nRow2, true, false); - CPPUNIT_ASSERT_MESSAGE("Data is expected to start from (col=0,row=0).", nCol1 == 0 && nRow1 == 0); - CPPUNIT_ASSERT_MESSAGE("Unexpected data range.", - nCol2 == static_cast<SCCOL>(nFieldCount - 1) && nRow2 == static_cast<SCROW>(nDataCount)); +namespace { - SheetPrinter printer(nRow2 - nRow1 + 1, nCol2 - nCol1 + 1); - for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) +template<int _Size> +bool checkDPTableOutput(ScDocument* pDoc, const ScRange& aOutRange, const char* aOutputCheck[][_Size], const char* pCaption) +{ + const ScAddress& s = aOutRange.aStart; + const ScAddress& e = aOutRange.aEnd; + SheetPrinter printer(e.Row() - s.Row() + 1, e.Col() - s.Col() + 1); + SCROW nOutRowSize = e.Row() - s.Row() + 1; + SCCOL nOutColSize = e.Col() - s.Col() + 1; + for (SCROW nRow = 0; nRow < nOutRowSize; ++nRow) { - for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) + for (SCCOL nCol = 0; nCol < nOutColSize; ++nCol) { - String aVal; - m_pDoc->GetString(nCol, nRow, 0, aVal); + OUString aVal; + pDoc->GetString(nCol + s.Col(), nRow + s.Row(), s.Tab(), aVal); printer.set(nRow, nCol, aVal); + const char* p = aOutputCheck[nRow][nCol]; + if (p) + { + OUString aCheckVal = OUString::createFromAscii(p); + bool bEqual = aCheckVal.equals(aVal); + if (!bEqual) + { + cerr << "Expected: " << aCheckVal << " Actual: " << aVal << endl; + return false; + } + } + else if (!aVal.isEmpty()) + { + cerr << "Empty cell expected" << endl; + return false; + } } } - printer.print("Data sheet content"); - printer.clear(); + printer.print(pCaption); + return true; +} + +struct DPFieldDef +{ + const char* pName; + sheet::DataPilotFieldOrientation eOrient; +}; - ScSheetSourceDesc aSheetDesc(m_pDoc); - aSheetDesc.SetSourceRange(ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0)); - ScDPObject* pDPObj = new ScDPObject(m_pDoc); +ScDPObject* createDPFromRange( + ScDocument* pDoc, const ScRange& rRange, DPFieldDef aFields[], size_t nFieldCount, + bool bFilterButton) +{ + SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row(); + SCCOL nCol1 = rRange.aStart.Col(); + + ScSheetSourceDesc aSheetDesc(pDoc); + aSheetDesc.SetSourceRange(rRange); + ScDPObject* pDPObj = new ScDPObject(pDoc); pDPObj->SetSheetDesc(aSheetDesc); pDPObj->SetOutRange(ScAddress(0, 0, 1)); ScPivotParam aParam; pDPObj->FillOldParam(aParam); - for (sal_uInt32 i = 0; i < nFieldCount; ++i) + for (size_t i = 0; i < nFieldCount; ++i) { vector<ScDPLabelData::Member> aMembers; pDPObj->GetMembers(i, 0, aMembers); @@ -763,7 +764,7 @@ void Test::testDataPilot() aSaveData.SetRepeatIfEmpty(false); aSaveData.SetColumnGrand(true); aSaveData.SetRowGrand(true); - aSaveData.SetFilterButton(false); + aSaveData.SetFilterButton(bFilterButton); aSaveData.SetDrillDown(true); // Check the sanity of the source range. @@ -774,7 +775,7 @@ void Test::testDataPilot() CPPUNIT_ASSERT_MESSAGE("source range contains no data!", nRow2 - nRow1 > 1); // Set the dimension information. - for (sal_uInt32 i = 0; i < nFieldCount; ++i) + for (size_t i = 0; i < nFieldCount; ++i) { OUString aDimName(aFields[i].pName, strlen(aFields[i].pName), RTL_TEXTENCODING_UTF8); ScDPSaveDimension* pDim = aSaveData.GetDimensionByName(aDimName); @@ -812,7 +813,7 @@ void Test::testDataPilot() { SCCOL nCol = nCol1 + static_cast<SCCOL>(i); String aVal; - m_pDoc->GetString(nCol, nRow, 0, aVal); + pDoc->GetString(nCol, nRow, 0, aVal); // This call is just to populate the member list for each dimension. ScDPSaveMember* pMem = pDim->GetMemberByName(aVal); pMem->SetShowDetails(true); @@ -827,12 +828,81 @@ void Test::testDataPilot() pDPObj->SetSaveData(aSaveData); pDPObj->SetAlive(true); + pDPObj->InvalidateData(); + + return pDPObj; +} + +} + +void Test::testDataPilot() +{ + m_pDoc->InsertTab(0, OUString(RTL_CONSTASCII_USTRINGPARAM("Data"))); + m_pDoc->InsertTab(1, OUString(RTL_CONSTASCII_USTRINGPARAM("Table"))); + + // Dimension definition + DPFieldDef aFields[] = { + { "Name", sheet::DataPilotFieldOrientation_ROW }, + { "Group", sheet::DataPilotFieldOrientation_COLUMN }, + { "Score", sheet::DataPilotFieldOrientation_DATA } + }; + + // Raw data + struct { + const char* pName; const char* pGroup; int nScore; + } aData[] = { + { "Andy", "A", 30 }, + { "Bruce", "A", 20 }, + { "Charlie", "B", 45 }, + { "David", "B", 12 }, + { "Edward", "C", 8 }, + { "Frank", "C", 15 }, + }; + + size_t nFieldCount = SAL_N_ELEMENTS(aFields); + size_t nDataCount = SAL_N_ELEMENTS(aData); + + // Insert field names in row 0. + for (size_t i = 0; i < nFieldCount; ++i) + m_pDoc->SetString(static_cast<SCCOL>(i), 0, 0, OUString(aFields[i].pName, strlen(aFields[i].pName), RTL_TEXTENCODING_UTF8)); + + // Insert data into row 1 and downward. + for (size_t i = 0; i < nDataCount; ++i) + { + SCROW nRow = static_cast<SCROW>(i) + 1; + m_pDoc->SetString(0, nRow, 0, OUString(aData[i].pName, strlen(aData[i].pName), RTL_TEXTENCODING_UTF8)); + m_pDoc->SetString(1, nRow, 0, OUString(aData[i].pGroup, strlen(aData[i].pGroup), RTL_TEXTENCODING_UTF8)); + m_pDoc->SetValue(2, nRow, 0, aData[i].nScore); + } + + SCROW nRow1 = 0, nRow2 = 0; + SCCOL nCol1 = 0, nCol2 = 0; + m_pDoc->GetDataArea(0, nCol1, nRow1, nCol2, nRow2, true, false); + CPPUNIT_ASSERT_MESSAGE("Data is expected to start from (col=0,row=0).", nCol1 == 0 && nRow1 == 0); + CPPUNIT_ASSERT_MESSAGE("Unexpected data range.", + nCol2 == static_cast<SCCOL>(nFieldCount - 1) && nRow2 == static_cast<SCROW>(nDataCount)); + + SheetPrinter printer(nRow2 - nRow1 + 1, nCol2 - nCol1 + 1); + for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) + { + for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) + { + String aVal; + m_pDoc->GetString(nCol, nRow, 0, aVal); + printer.set(nRow, nCol, aVal); + } + } + printer.print("Data sheet content"); + printer.clear(); + + ScDPObject* pDPObj = createDPFromRange( + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, false); + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); bool bSuccess = pDPs->InsertNewTable(pDPObj); CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); CPPUNIT_ASSERT_MESSAGE("there should be only one data pilot table.", pDPs->GetCount() == 1); - pDPObj->InvalidateData(); pDPObj->SetName(pDPs->CreateNewName()); bool bOverFlow = false; @@ -841,41 +911,261 @@ void Test::testDataPilot() pDPObj->Output(aOutRange.aStart); aOutRange = pDPObj->GetOutRange(); - const ScAddress& s = aOutRange.aStart; - const ScAddress& e = aOutRange.aEnd; - printer.resize(e.Row() - s.Row() + 1, e.Col() - s.Col() + 1); - SCROW nOutRowSize = SAL_N_ELEMENTS(aOutputCheck); - SCCOL nOutColSize = SAL_N_ELEMENTS(aOutputCheck[0]); - CPPUNIT_ASSERT_MESSAGE("Row size of the table output is not as expected.", - nOutRowSize == (e.Row()-s.Row()+1)); - CPPUNIT_ASSERT_MESSAGE("Column size of the table output is not as expected.", - nOutColSize == (e.Col()-s.Col()+1)); - for (SCROW nRow = 0; nRow < nOutRowSize; ++nRow) { - for (SCCOL nCol = 0; nCol < nOutColSize; ++nCol) + // Expected output table content. 0 = empty cell + const char* aOutputCheck[][5] = { + { "Sum - Score", "Group", 0, 0, 0 }, + { "Name", "A", "B", "C", "Total Result" }, + { "Andy", "30", 0, 0, "30" }, + { "Bruce", "20", 0, 0, "20" }, + { "Charlie", 0, "45", 0, "45" }, + { "David", 0, "12", 0, "12" }, + { "Edward", 0, 0, "8", "8" }, + { "Frank", 0, 0, "15", "15" }, + { "Total Result", "50", "57", "23", "130" } + }; + + bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + + // Update the cell values. + double aData2[] = { 100, 200, 300, 400, 500, 600 }; + for (size_t i = 0; i < SAL_N_ELEMENTS(aData2); ++i) + { + SCROW nRow = i + 1; + m_pDoc->SetValue(2, nRow, 0, aData2[i]); + } + + printer.resize(nRow2 - nRow1 + 1, nCol2 - nCol1 + 1); + for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) + { + for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) { String aVal; - m_pDoc->GetString(nCol + s.Col(), nRow + s.Row(), s.Tab(), aVal); + m_pDoc->GetString(nCol, nRow, 0, aVal); printer.set(nRow, nCol, aVal); - const char* p = aOutputCheck[nRow][nCol]; - if (p) - { - OUString aCheckVal = OUString::createFromAscii(p); - bool bEqual = aCheckVal.equals(aVal); - if (!bEqual) - { - cerr << "Expected: " << aCheckVal << " Actual: " << aVal << endl; - CPPUNIT_ASSERT_MESSAGE("Unexpected cell content.", false); - } - } - else - CPPUNIT_ASSERT_MESSAGE("Empty cell expected.", aVal.Len() == 0); } } - printer.print("DataPilot table output"); + printer.print("Data sheet content (modified)"); printer.clear(); - // Now, delete the datapilot object. + // Now, create a copy of the datapilot object for the updated table, but + // don't clear the cache which should force the copy to use the old data + // from the cache. + ScDPObject* pDPObj2 = new ScDPObject(*pDPObj); + pDPs->FreeTable(pDPObj); + pDPs->InsertNewTable(pDPObj2); + + aOutRange = pDPObj2->GetOutRange(); + pDPObj2->ClearSource(); + pDPObj2->Output(aOutRange.aStart); + { + // Expected output table content. 0 = empty cell + const char* aOutputCheck[][5] = { + { "Sum - Score", "Group", 0, 0, 0 }, + { "Name", "A", "B", "C", "Total Result" }, + { "Andy", "30", 0, 0, "30" }, + { "Bruce", "20", 0, 0, "20" }, + { "Charlie", 0, "45", 0, "45" }, + { "David", 0, "12", 0, "12" }, + { "Edward", 0, 0, "8", "8" }, + { "Frank", 0, 0, "15", "15" }, + { "Total Result", "50", "57", "23", "130" } + }; + + bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (from old cache)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + + // This time clear the cache to refresh the data from the source range. + CPPUNIT_ASSERT_MESSAGE("This datapilot should be based on sheet data.", pDPObj2->IsSheetData()); + ScDPCollection::SheetCaches& rCaches = pDPs->GetSheetCaches(); + const ScSheetSourceDesc* pDesc = pDPObj2->GetSheetDesc(); + rCaches.removeCache(pDesc->GetSourceRange()); + pDPObj2->ClearSource(); + pDPObj2->Output(aOutRange.aStart); + + { + // Expected output table content. 0 = empty cell + const char* aOutputCheck[][5] = { + { "Sum - Score", "Group", 0, 0, 0 }, + { "Name", "A", "B", "C", "Total Result" }, + { "Andy", "100", 0, 0, "100" }, + { "Bruce", "200", 0, 0, "200" }, + { "Charlie", 0, "300", 0, "300" }, + { "David", 0, "400", 0, "400" }, + { "Edward", 0, 0, "500", "500" }, + { "Frank", 0, 0, "600", "600" }, + { "Total Result", "300", "700", "1100", "2100" } + }; + + bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (refreshed)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + + pDPs->FreeTable(pDPObj2); + CPPUNIT_ASSERT_MESSAGE("There shouldn't be any data pilot table stored with the document.", + pDPs->GetCount() == 0); + + m_pDoc->DeleteTab(1); + m_pDoc->DeleteTab(0); +} + +void Test::testDataPilotFilters() +{ + m_pDoc->InsertTab(0, OUString(RTL_CONSTASCII_USTRINGPARAM("Data"))); + m_pDoc->InsertTab(1, OUString(RTL_CONSTASCII_USTRINGPARAM("Table"))); + + // Dimension definition + DPFieldDef aFields[] = { + { "Name", sheet::DataPilotFieldOrientation_HIDDEN }, + { "Group1", sheet::DataPilotFieldOrientation_HIDDEN }, + { "Group2", sheet::DataPilotFieldOrientation_PAGE }, + { "Val1", sheet::DataPilotFieldOrientation_DATA }, + { "Val2", sheet::DataPilotFieldOrientation_DATA } + }; + + // Raw data + const char* aData[][5] = { + { "A", "1", "A", "1", "10" }, + { "B", "1", "A", "1", "10" }, + { "C", "1", "B", "1", "10" }, + { "D", "1", "B", "1", "10" }, + { "E", "2", "A", "1", "10" }, + { "F", "2", "A", "1", "10" }, + { "G", "2", "B", "1", "10" }, + { "H", "2", "B", "1", "10" } + }; + + size_t nFieldCount = SAL_N_ELEMENTS(aFields); + size_t nDataCount = SAL_N_ELEMENTS(aData); + + // Insert field names in row 0. + for (size_t i = 0; i < nFieldCount; ++i) + m_pDoc->SetString(static_cast<SCCOL>(i), 0, 0, OUString(aFields[i].pName, strlen(aFields[i].pName), RTL_TEXTENCODING_UTF8)); + + // Insert data into row 1 and downward. + for (size_t i = 0; i < nDataCount; ++i) + { + SCROW nRow = static_cast<SCROW>(i) + 1; + for (size_t j = 0; j < nFieldCount; ++j) + { + SCCOL nCol = static_cast<SCCOL>(j); + m_pDoc->SetString( + nCol, nRow, 0, OUString(aData[i][j], strlen(aData[i][j]), RTL_TEXTENCODING_UTF8)); + } + } + + SCROW nRow1 = 0, nRow2 = 0; + SCCOL nCol1 = 0, nCol2 = 0; + m_pDoc->GetDataArea(0, nCol1, nRow1, nCol2, nRow2, true, false); + CPPUNIT_ASSERT_MESSAGE("Data is expected to start from (col=0,row=0).", nCol1 == 0 && nRow1 == 0); + CPPUNIT_ASSERT_MESSAGE("Unexpected data range.", + nCol2 == static_cast<SCCOL>(nFieldCount - 1) && nRow2 == static_cast<SCROW>(nDataCount)); + + SheetPrinter printer(nRow2 - nRow1 + 1, nCol2 - nCol1 + 1); + for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) + { + for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) + { + String aVal; + m_pDoc->GetString(nCol, nRow, 0, aVal); + printer.set(nRow, nCol, aVal); + } + } + printer.print("Data sheet content"); + printer.clear(); + + ScDPObject* pDPObj = createDPFromRange( + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, true); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); + bool bSuccess = pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); + CPPUNIT_ASSERT_MESSAGE("there should be only one data pilot table.", + pDPs->GetCount() == 1); + pDPObj->SetName(pDPs->CreateNewName()); + + bool bOverFlow = false; + ScRange aOutRange = pDPObj->GetNewOutputRange(bOverFlow); + CPPUNIT_ASSERT_MESSAGE("Table overflow!?", !bOverFlow); + + pDPObj->Output(aOutRange.aStart); + aOutRange = pDPObj->GetOutRange(); + { + // Expected output table content. 0 = empty cell + const char* aOutputCheck[][2] = { + { "Filter", 0 }, + { "Group2", "- all -" }, + { 0, 0 }, + { "Data", 0 }, + { "Sum - Val1", "8" }, + { "Sum - Val2", "80" }, + { "Total Sum - Val1", "8" }, + { "Total Sum - Val2", "80" } + }; + + bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (unfiltered)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + + // Set current page of 'Group2' to 'A'. + ScDPSaveData aSaveData(*pDPObj->GetSaveData()); + ScDPSaveDimension* pDim = aSaveData.GetDimensionByName( + OUString(RTL_CONSTASCII_USTRINGPARAM("Group2"))); + CPPUNIT_ASSERT_MESSAGE("Dimension not found", pDim); + OUString aPage(RTL_CONSTASCII_USTRINGPARAM("A")); + pDim->SetCurrentPage(&aPage); + pDPObj->SetSaveData(aSaveData); + pDPObj->Output(aOutRange.aStart); + aOutRange = pDPObj->GetOutRange(); + { + // Expected output table content. 0 = empty cell + const char* aOutputCheck[][2] = { + { "Filter", 0 }, + { "Group2", "A" }, + { 0, 0 }, + { "Data", 0 }, + { "Sum - Val1", "4" }, + { "Sum - Val2", "40" }, + { "Total Sum - Val1", "4" }, + { "Total Sum - Val2", "40" } + }; + + bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by page)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + + // Set query filter. + ScSheetSourceDesc aDesc(*pDPObj->GetSheetDesc()); + ScQueryParam aQueryParam(aDesc.GetQueryParam()); + CPPUNIT_ASSERT_MESSAGE("There should be at least one query entry.", aQueryParam.GetEntryCount() > 0); + ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + rEntry.bDoQuery = true; + rEntry.nField = 1; // Group1 + rEntry.nVal = 1; + aDesc.SetQueryParam(aQueryParam); + pDPObj->SetSheetDesc(aDesc); + pDPObj->Output(aOutRange.aStart); + aOutRange = pDPObj->GetOutRange(); + { + // Expected output table content. 0 = empty cell + const char* aOutputCheck[][2] = { + { "Filter", 0 }, + { "Group2", "A" }, + { 0, 0 }, + { "Data", 0 }, + { "Sum - Val1", "2" }, + { "Sum - Val2", "20" }, + { "Total Sum - Val1", "2" }, + { "Total Sum - Val2", "20" } + }; + + bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by query)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + pDPs->FreeTable(pDPObj); CPPUNIT_ASSERT_MESSAGE("There shouldn't be any data pilot table stored with the document.", pDPs->GetCount() == 0); diff --git a/sc/source/core/data/dpcachetable.cxx b/sc/source/core/data/dpcachetable.cxx index 67b55e7f0155..b177acff7be7 100644 --- a/sc/source/core/data/dpcachetable.cxx +++ b/sc/source/core/data/dpcachetable.cxx @@ -73,6 +73,17 @@ static sal_Bool lcl_HasQueryEntry( const ScQueryParam& rParam ) // ---------------------------------------------------------------------------- +bool ScDPCacheTable::RowFlag::isActive() const +{ + return mbShowByFilter && mbShowByPage; +} + +ScDPCacheTable::RowFlag::RowFlag() : + mbShowByFilter(true), + mbShowByPage(true) +{ +} + ScDPCacheTable::FilterItem::FilterItem() : mfValue(0.0), mbHasValue(false) @@ -158,14 +169,13 @@ ScDPCacheTable::Criterion::Criterion() : // ---------------------------------------------------------------------------- -ScDPCacheTable::ScDPCacheTable(ScDPCache* pCache) : +ScDPCacheTable::ScDPCacheTable(const ScDPCache* pCache) : mpCache(pCache) { } ScDPCacheTable::~ScDPCacheTable() { - delete mpCache; } sal_Int32 ScDPCacheTable::getRowSize() const @@ -181,13 +191,13 @@ sal_Int32 ScDPCacheTable::getColSize() const void ScDPCacheTable::fillTable( const ScQueryParam& rQuery, bool* pSpecial, bool bIgnoreEmptyRows, bool bRepeatIfEmpty) { - const SCROW nRowCount = getRowSize(); - const SCCOL nColCount = (SCCOL) getColSize(); - if ( nRowCount <= 0 || nColCount <= 0) + const SCROW nRowCount = getRowSize(); + const SCCOL nColCount = (SCCOL) getColSize(); + if ( nRowCount <= 0 || nColCount <= 0) return; - maRowsVisible.clear(); - maRowsVisible.reserve(nRowCount); + maRowFlags.clear(); + maRowFlags.reserve(nRowCount); // Initialize field entries container. maFieldEntries.clear(); @@ -199,7 +209,7 @@ void ScDPCacheTable::fillTable( SCROW nMemCount = getCache()->GetDimMemberCount( nCol ); if ( nMemCount ) { - std::vector< SCROW > pAdded( nMemCount, -1 ); + std::vector<SCROW> aAdded( nMemCount, -1 ); for (SCROW nRow = 0; nRow < nRowCount; ++nRow ) { @@ -207,24 +217,27 @@ void ScDPCacheTable::fillTable( SCROW nOrder = getOrder( nCol, nIndex ); if ( nCol == 0 ) - maRowsVisible.push_back(false); + { + maRowFlags.push_back(RowFlag()); + maRowFlags.back().mbShowByFilter = false; + } if ( lcl_HasQueryEntry(rQuery) && !getCache()->ValidQuery( nRow , rQuery, pSpecial ) ) continue; if ( bIgnoreEmptyRows && getCache()->IsRowEmpty( nRow ) ) continue; - // Insert a new row into cache table. + if ( nCol == 0 ) - maRowsVisible.back() = true; + maRowFlags.back().mbShowByFilter = true; - pAdded[nOrder] = nIndex; + aAdded[nOrder] = nIndex; } maFieldEntries.push_back( vector<SCROW>() ); for ( SCROW nRow = 0; nRow < nMemCount; nRow++ ) { - if ( pAdded[nRow] != -1 ) - maFieldEntries.back().push_back( pAdded[nRow] ); + if ( aAdded[nRow] != -1 ) + maFieldEntries.back().push_back( aAdded[nRow] ); } } } @@ -237,8 +250,8 @@ void ScDPCacheTable::fillTable() if ( nRowCount <= 0 || nColCount <= 0) return; - maRowsVisible.clear(); - maRowsVisible.reserve(nRowCount); + maRowFlags.clear(); + maRowFlags.reserve(nRowCount); // Initialize field entries container. @@ -259,8 +272,10 @@ void ScDPCacheTable::fillTable() SCROW nOrder = getOrder( nCol, nIndex ); if ( nCol == 0 ) - maRowsVisible.push_back(true); - + { + maRowFlags.push_back(RowFlag()); + maRowFlags.back().mbShowByFilter = true; + } pAdded[nOrder] = nIndex; } @@ -276,24 +291,24 @@ void ScDPCacheTable::fillTable() bool ScDPCacheTable::isRowActive(sal_Int32 nRow) const { - if (nRow < 0 || static_cast<size_t>(nRow) >= maRowsVisible.size()) + if (nRow < 0 || static_cast<size_t>(nRow) >= maRowFlags.size()) // row index out of bound return false; - return maRowsVisible[nRow]; + return maRowFlags[nRow].isActive(); } void ScDPCacheTable::filterByPageDimension(const vector<Criterion>& rCriteria, const boost::unordered_set<sal_Int32>& rRepeatIfEmptyDims) { sal_Int32 nRowSize = getRowSize(); - if (nRowSize != static_cast<sal_Int32>(maRowsVisible.size())) + if (nRowSize != static_cast<sal_Int32>(maRowFlags.size())) { // sizes of the two tables differ! return; } for (sal_Int32 nRow = 0; nRow < nRowSize; ++nRow) - maRowsVisible[nRow] = isRowQualified(nRow, rCriteria, rRepeatIfEmptyDims); + maRowFlags[nRow].mbShowByPage = isRowQualified(nRow, rCriteria, rRepeatIfEmptyDims); } const ScDPItemData* ScDPCacheTable::getCell(SCCOL nCol, SCROW nRow, bool bRepeatIfEmpty) const @@ -359,7 +374,7 @@ void ScDPCacheTable::filterTable(const vector<Criterion>& rCriteria, Sequence< S for (sal_Int32 nRow = 0; nRow < nRowSize; ++nRow) { - if (!maRowsVisible[nRow]) + if (!maRowFlags[nRow].isActive()) // This row is filtered out. continue; @@ -401,8 +416,7 @@ SCROW ScDPCacheTable::getOrder(long nDim, SCROW nIndex) const void ScDPCacheTable::clear() { maFieldEntries.clear(); - maRowsVisible.clear(); - delete mpCache; + maRowFlags.clear(); mpCache = NULL; } @@ -411,9 +425,8 @@ bool ScDPCacheTable::empty() const return mpCache == NULL || maFieldEntries.empty(); } -void ScDPCacheTable::setCache(ScDPCache* p) +void ScDPCacheTable::setCache(const ScDPCache* p) { - delete mpCache; mpCache = p; } @@ -448,9 +461,4 @@ const ScDPCache* ScDPCacheTable::getCache() const return mpCache; } -ScDPCache* ScDPCacheTable::getCache() -{ - return mpCache; -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index 97e2f0db1bbc..9589fe838f7a 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -54,6 +54,7 @@ #include "dpglobal.hxx" #include "globstr.hrc" #include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/sdb/XCompletedExecution.hpp> #include <com/sun/star/sheet/GeneralFunction.hpp> #include <com/sun/star/sheet/DataPilotFieldFilter.hpp> #include <com/sun/star/sheet/DataPilotFieldOrientation.hpp> @@ -70,13 +71,15 @@ #include <com/sun/star/sheet/XDrillDownDataSupplier.hpp> #include <comphelper/processfactory.hxx> +#include <comphelper/types.hxx> #include <sal/macros.h> #include <tools/debug.hxx> #include <tools/diagnose_ex.h> #include <svl/zforlist.hxx> // IsNumberFormat +#include <vcl/msgbox.hxx> #include <vector> -#include <stdio.h> +#include <memory> using namespace com::sun::star; using ::std::vector; @@ -95,6 +98,13 @@ using ::com::sun::star::sheet::XDimensionsSupplier; using ::com::sun::star::beans::XPropertySet; using ::rtl::OUString; +#define SC_SERVICE_ROWSET "com.sun.star.sdb.RowSet" +#define SC_SERVICE_INTHANDLER "com.sun.star.task.InteractionHandler" + +#define SC_DBPROP_DATASOURCENAME "DataSourceName" +#define SC_DBPROP_COMMAND "Command" +#define SC_DBPROP_COMMANDTYPE "CommandType" + // ----------------------------------------------------------------------- #define SCDPSOURCE_SERVICE "com.sun.star.sheet.DataPilotSource" @@ -417,7 +427,7 @@ ScDPTableData* ScDPObject::GetTableData() OSL_FAIL("no source descriptor"); pSheetDesc = new ScSheetSourceDesc(pDoc); // dummy defaults } - ScDPCache* pCache = pSheetDesc->CreateCache(); + const ScDPCache* pCache = pSheetDesc->CreateCache(); if (pCache) pData.reset(new ScSheetDPData(pDoc, *pSheetDesc, pCache)); } @@ -1843,17 +1853,20 @@ sal_Bool ScDPObject::FillOldParam(ScPivotParam& rParam) const rParam.nTab = aOutRange.aStart.Tab(); // ppLabelArr / nLabels is not changed - SCCOL nColAdd = pSheetDesc->GetSourceRange().aStart.Col(); + SCCOL nSrcColOffset = 0; + if (IsSheetData()) + // source data column offset is only for internal sheet source. + nSrcColOffset = pSheetDesc->GetSourceRange().aStart.Col(); bool bAddData = ( lcl_GetDataGetOrientation( xSource ) == sheet::DataPilotFieldOrientation_HIDDEN ); lcl_FillOldFields( - rParam.maPageFields, xSource, sheet::DataPilotFieldOrientation_PAGE, nColAdd, false); + rParam.maPageFields, xSource, sheet::DataPilotFieldOrientation_PAGE, nSrcColOffset, false); lcl_FillOldFields( - rParam.maColFields, xSource, sheet::DataPilotFieldOrientation_COLUMN, nColAdd, bAddData); + rParam.maColFields, xSource, sheet::DataPilotFieldOrientation_COLUMN, nSrcColOffset, bAddData); lcl_FillOldFields( - rParam.maRowFields, xSource, sheet::DataPilotFieldOrientation_ROW, nColAdd, false); + rParam.maRowFields, xSource, sheet::DataPilotFieldOrientation_ROW, nSrcColOffset, false); lcl_FillOldFields( - rParam.maDataFields, xSource, sheet::DataPilotFieldOrientation_DATA, nColAdd, false); + rParam.maDataFields, xSource, sheet::DataPilotFieldOrientation_DATA, nSrcColOffset, false); uno::Reference<beans::XPropertySet> xProp( xSource, uno::UNO_QUERY ); if (xProp.is()) @@ -2383,15 +2396,148 @@ uno::Reference<sheet::XDimensionsSupplier> ScDPObject::CreateSource( const ScDPS return xRet; } -// ---------------------------------------------------------------------------- +ScDPCollection::SheetCaches::SheetCaches(ScDocument* pDoc) : mpDoc(pDoc) {} + +const ScDPCache* ScDPCollection::SheetCaches::getCache(const ScRange& rRange) +{ + CachesType::const_iterator itr = maCaches.find(rRange); + if (itr != maCaches.end()) + // already cached. + return itr->second; + + ::std::auto_ptr<ScDPCache> pCache(new ScDPCache(mpDoc)); + pCache->InitFromDoc(mpDoc, rRange); + const ScDPCache* p = pCache.get(); + maCaches.insert(rRange, pCache); + return p; +} + +void ScDPCollection::SheetCaches::removeCache(const ScRange& rRange) +{ + CachesType::iterator itr = maCaches.find(rRange); + if (itr != maCaches.end()) + maCaches.erase(itr); +} + +ScDPCollection::NameCaches::NameCaches(ScDocument* pDoc) : mpDoc(pDoc) {} + +const ScDPCache* ScDPCollection::NameCaches::getCache(const OUString& rName, const ScRange& rRange) +{ + CachesType::const_iterator itr = maCaches.find(rName); + if (itr != maCaches.end()) + // already cached. + return itr->second; + + ::std::auto_ptr<ScDPCache> pCache(new ScDPCache(mpDoc)); + pCache->InitFromDoc(mpDoc, rRange); + const ScDPCache* p = pCache.get(); + maCaches.insert(rName, pCache); + return p; +} + +void ScDPCollection::NameCaches::removeCache(const OUString& rName) +{ + CachesType::iterator itr = maCaches.find(rName); + if (itr != maCaches.end()) + maCaches.erase(itr); +} + +ScDPCollection::DBType::DBType(sal_Int32 nSdbType, const OUString& rDBName, const OUString& rCommand) : + mnSdbType(nSdbType), maDBName(rDBName), maCommand(rCommand) {} + +ScDPCollection::DBCaches::DBCaches(ScDocument* pDoc) : mpDoc(pDoc) {} + +const ScDPCache* ScDPCollection::DBCaches::getCache(sal_Int32 nSdbType, const OUString& rDBName, const OUString& rCommand) +{ + DBType aType(nSdbType, rDBName, rCommand); + CachesType::const_iterator itr = maCaches.find(aType); + if (itr != maCaches.end()) + // already cached. + return itr->second; + + uno::Reference<sdbc::XRowSet> xRowSet ; + try + { + xRowSet = uno::Reference<sdbc::XRowSet>( + comphelper::getProcessServiceFactory()->createInstance( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SC_SERVICE_ROWSET )) ), + uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xRowProp( xRowSet, uno::UNO_QUERY ); + DBG_ASSERT( xRowProp.is(), "can't get RowSet" ); + if ( xRowProp.is() ) + { + // + // set source parameters + // + uno::Any aAny; + aAny <<= rDBName; + xRowProp->setPropertyValue( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_DBPROP_DATASOURCENAME)), aAny ); + + aAny <<= rCommand; + xRowProp->setPropertyValue( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_DBPROP_COMMAND)), aAny ); + + aAny <<= nSdbType; + xRowProp->setPropertyValue( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_DBPROP_COMMANDTYPE)), aAny ); + + uno::Reference<sdb::XCompletedExecution> xExecute( xRowSet, uno::UNO_QUERY ); + if ( xExecute.is() ) + { + uno::Reference<task::XInteractionHandler> xHandler( + comphelper::getProcessServiceFactory()->createInstance( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SC_SERVICE_INTHANDLER )) ), + uno::UNO_QUERY); + xExecute->executeWithCompletion( xHandler ); + } + else + xRowSet->execute(); + } + } + catch ( sdbc::SQLException& rError ) + { + //! store error message + InfoBox aInfoBox( 0, String(rError.Message) ); + aInfoBox.Execute(); + return NULL; + } + catch ( uno::Exception& ) + { + OSL_FAIL("Unexpected exception in database"); + return NULL; + } + + ::std::auto_ptr<ScDPCache> pCache(new ScDPCache(mpDoc)); + SvNumberFormatter aFormat(mpDoc->GetServiceManager(), ScGlobal::eLnge); + pCache->InitFromDataBase(xRowSet, *aFormat.GetNullDate()); + ::comphelper::disposeComponent(xRowSet); + const ScDPCache* p = pCache.get(); + maCaches.insert(aType, pCache); + return p; +} + +void ScDPCollection::DBCaches::removeCache(sal_Int32 nSdbType, const OUString& rDBName, const OUString& rCommand) +{ + DBType aType(nSdbType, rDBName, rCommand); + CachesType::iterator itr = maCaches.find(aType); + if (itr != maCaches.end()) + maCaches.erase(itr); +} ScDPCollection::ScDPCollection(ScDocument* pDocument) : - pDoc( pDocument ) + pDoc( pDocument ), + maSheetCaches(pDocument), + maNameCaches(pDocument), + maDBCaches(pDocument) { } ScDPCollection::ScDPCollection(const ScDPCollection& r) : - pDoc(r.pDoc) + pDoc(r.pDoc), + maSheetCaches(r.pDoc), + maNameCaches(r.pDoc), + maDBCaches(r.pDoc) { } @@ -2584,4 +2730,30 @@ bool ScDPCollection::HasDPTable(SCCOL nCol, SCROW nRow, SCTAB nTab) const return pMergeAttr->HasDPTable(); } +ScDPCollection::SheetCaches& ScDPCollection::GetSheetCaches() +{ + return maSheetCaches; +} + +ScDPCollection::NameCaches& ScDPCollection::GetNameCaches() +{ + return maNameCaches; +} + +ScDPCollection::DBCaches& ScDPCollection::GetDBCaches() +{ + return maDBCaches; +} + +bool operator<(const ScDPCollection::DBType& left, const ScDPCollection::DBType& right) +{ + if (left.mnSdbType != right.mnSdbType) + return left.mnSdbType < right.mnSdbType; + + if (!left.maDBName.equals(right.maDBName)) + return left.maDBName < right.maDBName; + + return left.maCommand < right.maCommand; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx index c0455819285c..8351c2f3dd28 100644 --- a/sc/source/core/data/dpoutput.cxx +++ b/sc/source/core/data/dpoutput.cxx @@ -56,7 +56,6 @@ #include "scresid.hxx" #include "unonames.hxx" #include "sc.hrc" -#include "scdpoutputimpl.hxx" #include "dpglobal.hxx" #include <com/sun/star/beans/XPropertySet.hpp> @@ -83,15 +82,16 @@ using ::rtl::OUString; #define DP_PROP_POSITION "Position" #define DP_PROP_USEDHIERARCHY "UsedHierarchy" #define DP_PROP_ISDATALAYOUT "IsDataLayoutDimension" -#define DP_PROP_NUMBERFORMAT "NumberFormat" #define DP_PROP_FILTER "Filter" #define DP_PROP_COLUMNGRAND "ColumnGrand" #define DP_PROP_ROWGRAND "RowGrand" #define DP_PROP_SUBTOTALS "SubTotals" -// ----------------------------------------------------------------------- +#define SC_DP_FRAME_INNER_BOLD 20 +#define SC_DP_FRAME_OUTER_BOLD 40 + +#define SC_DP_FRAME_COLOR Color(0,0,0) //( 0x20, 0x40, 0x68 ) -//! dynamic!!! #define SC_DPOUT_MAXLEVELS 256 struct ScDPOutLevelData @@ -121,7 +121,187 @@ struct ScDPOutLevelData //! bug (73840) in uno::Sequence - copy and then assign doesn't work! }; -// ----------------------------------------------------------------------- +namespace { + +bool lcl_compareColfuc ( SCCOL i, SCCOL j) { return (i<j); } +bool lcl_compareRowfuc ( SCROW i, SCROW j) { return (i<j); } + +class ScDPOutputImpl +{ + ScDocument* mpDoc; + sal_uInt16 mnTab; + ::std::vector< bool > mbNeedLineCols; + ::std::vector< SCCOL > mnCols; + + ::std::vector< bool > mbNeedLineRows; + ::std::vector< SCROW > mnRows; + + SCCOL mnTabStartCol; + SCROW mnTabStartRow; + SCCOL mnMemberStartCol; + SCROW mnMemberStartRow; + + SCCOL mnDataStartCol; + SCROW mnDataStartRow; + SCCOL mnTabEndCol; + SCROW mnTabEndRow; + +public: + ScDPOutputImpl( ScDocument* pDoc, sal_uInt16 nTab, + SCCOL nTabStartCol, + SCROW nTabStartRow, + SCCOL nMemberStartCol, + SCROW nMemberStartRow, + SCCOL nDataStartCol, + SCROW nDataStartRow, + SCCOL nTabEndCol, + SCROW nTabEndRow ); + bool AddRow( SCROW nRow ); + bool AddCol( SCCOL nCol ); + + void OutputDataArea(); + void OutputBlockFrame ( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, bool bHori = false ); + +}; + +void ScDPOutputImpl::OutputDataArea() +{ + AddRow( mnDataStartRow ); + AddCol( mnDataStartCol ); + + mnCols.push_back( mnTabEndCol+1); //set last row bottom + mnRows.push_back( mnTabEndRow+1); //set last col bottom + + bool bAllRows = ( ( mnTabEndRow - mnDataStartRow + 2 ) == (SCROW) mnRows.size() ); + + std::sort( mnCols.begin(), mnCols.end(), lcl_compareColfuc ); + std::sort( mnRows.begin(), mnRows.end(), lcl_compareRowfuc ); + + for( SCCOL nCol = 0; nCol < (SCCOL)mnCols.size()-1; nCol ++ ) + { + if ( !bAllRows ) + { + if ( nCol < (SCCOL)mnCols.size()-2) + { + for ( SCROW i = nCol%2; i < (SCROW)mnRows.size()-2; i +=2 ) + OutputBlockFrame( mnCols[nCol], mnRows[i], mnCols[nCol+1]-1, mnRows[i+1]-1 ); + if ( mnRows.size()>=2 ) + OutputBlockFrame( mnCols[nCol], mnRows[mnRows.size()-2], mnCols[nCol+1]-1, mnRows[mnRows.size()-1]-1 ); + } + else + { + for ( SCROW i = 0 ; i < (SCROW)mnRows.size()-1; i++ ) + OutputBlockFrame( mnCols[nCol], mnRows[i], mnCols[nCol+1]-1, mnRows[i+1]-1 ); + } + } + else + OutputBlockFrame( mnCols[nCol], mnRows.front(), mnCols[nCol+1]-1, mnRows.back()-1, bAllRows ); + } + //out put rows area outer framer + if ( mnTabStartCol != mnDataStartCol ) + { + if ( mnTabStartRow != mnDataStartRow ) + OutputBlockFrame( mnTabStartCol, mnTabStartRow, mnDataStartCol-1, mnDataStartRow-1 ); + OutputBlockFrame( mnTabStartCol, mnDataStartRow, mnDataStartCol-1, mnTabEndRow ); + } + //out put cols area outer framer + OutputBlockFrame( mnDataStartCol, mnTabStartRow, mnTabEndCol, mnDataStartRow-1 ); +} + +ScDPOutputImpl::ScDPOutputImpl( ScDocument* pDoc, sal_uInt16 nTab, + SCCOL nTabStartCol, + SCROW nTabStartRow, + SCCOL nMemberStartCol, + SCROW nMemberStartRow, + SCCOL nDataStartCol, + SCROW nDataStartRow, + SCCOL nTabEndCol, + SCROW nTabEndRow ): + mpDoc( pDoc ), + mnTab( nTab ), + mnTabStartCol( nTabStartCol ), + mnTabStartRow( nTabStartRow ), + mnMemberStartCol( nMemberStartCol), + mnMemberStartRow( nMemberStartRow), + mnDataStartCol ( nDataStartCol ), + mnDataStartRow ( nDataStartRow ), + mnTabEndCol( nTabEndCol ), + mnTabEndRow( nTabEndRow ) +{ + mbNeedLineCols.resize( nTabEndCol-nDataStartCol+1, false ); + mbNeedLineRows.resize( nTabEndRow-nDataStartRow+1, false ); + +} + +bool ScDPOutputImpl::AddRow( SCROW nRow ) +{ + if ( !mbNeedLineRows[ nRow - mnDataStartRow ] ) + { + mbNeedLineRows[ nRow - mnDataStartRow ] = true; + mnRows.push_back( nRow ); + return true; + } + else + return false; +} + +bool ScDPOutputImpl::AddCol( SCCOL nCol ) +{ + + if ( !mbNeedLineCols[ nCol - mnDataStartCol ] ) + { + mbNeedLineCols[ nCol - mnDataStartCol ] = true; + mnCols.push_back( nCol ); + return true; + } + else + return false; +} + +void ScDPOutputImpl::OutputBlockFrame ( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, bool bHori ) +{ + Color color = SC_DP_FRAME_COLOR; + ::editeng::SvxBorderLine aLine( &color, SC_DP_FRAME_INNER_BOLD ); + ::editeng::SvxBorderLine aOutLine( &color, SC_DP_FRAME_OUTER_BOLD ); + + SvxBoxItem aBox( ATTR_BORDER ); + + if ( nStartCol == mnTabStartCol ) + aBox.SetLine(&aOutLine, BOX_LINE_LEFT); + else + aBox.SetLine(&aLine, BOX_LINE_LEFT); + + if ( nStartRow == mnTabStartRow ) + aBox.SetLine(&aOutLine, BOX_LINE_TOP); + else + aBox.SetLine(&aLine, BOX_LINE_TOP); + + if ( nEndCol == mnTabEndCol ) //bottom row + aBox.SetLine(&aOutLine, BOX_LINE_RIGHT); + else + aBox.SetLine(&aLine, BOX_LINE_RIGHT); + + if ( nEndRow == mnTabEndRow ) //bottom + aBox.SetLine(&aOutLine, BOX_LINE_BOTTOM); + else + aBox.SetLine(&aLine, BOX_LINE_BOTTOM); + + + SvxBoxInfoItem aBoxInfo( ATTR_BORDER_INNER ); + aBoxInfo.SetValid(VALID_VERT,false ); + if ( bHori ) + { + aBoxInfo.SetValid(VALID_HORI,sal_True); + aBoxInfo.SetLine( &aLine, BOXINFO_LINE_HORI ); + } + else + aBoxInfo.SetValid(VALID_HORI,false ); + + aBoxInfo.SetValid(VALID_DISTANCE,false); + + mpDoc->ApplyFrameAreaTab( ScRange( nStartCol, nStartRow, mnTab, nEndCol, nEndRow , mnTab ), &aBox, &aBoxInfo ); + +} void lcl_SetStyleById( ScDocument* pDoc, SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, @@ -214,7 +394,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, aDataNames[nDataCount] = String( xDimName->getName() ); long nFormat = ScUnoHelpFunctions::GetLongProperty( xDimProp, - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(DP_PROP_NUMBERFORMAT)) ); + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_NUMFMT)) ); nDataFormats[nDataCount] = nFormat; if ( nFormat != 0 ) bAnySet = sal_True; @@ -280,7 +460,7 @@ sal_uInt32 lcl_GetFirstNumberFormat( const uno::Reference<container::XIndexAcces { long nFormat = ScUnoHelpFunctions::GetLongProperty( xDimProp, - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(DP_PROP_NUMBERFORMAT)) ); + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_NUMFMT)) ); return nFormat; // use format from first found data dimension } @@ -349,8 +529,10 @@ uno::Sequence<sheet::MemberResult> lcl_GetSelectedPageAsResult( const uno::Refer return aRet; } +} + ScDPOutput::ScDPOutput( ScDocument* pD, const uno::Reference<sheet::XDimensionsSupplier>& xSrc, - const ScAddress& rPos, sal_Bool bFilter ) : + const ScAddress& rPos, bool bFilter ) : pDoc( pD ), xSource( xSrc ), aStartPos( rPos ), @@ -526,7 +708,7 @@ ScDPOutput::ScDPOutput( ScDocument* pD, const uno::Reference<sheet::XDimensionsS } catch (uno::RuntimeException&) { - bResultsError = sal_True; + bResultsError = true; } } @@ -618,7 +800,7 @@ void ScDPOutput::HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab, if ( nFlags & sheet::MemberResultFlags::SUBTOTAL ) { - OutputImpl outputimp( pDoc, nTab, + ScDPOutputImpl outputimp( pDoc, nTab, nTabStartCol, nTabStartRow, nMemberStartCol, nMemberStartRow, nDataStartCol, nDataStartRow, nTabEndCol, nTabEndRow ); //! limit frames to horizontal or vertical? @@ -695,7 +877,7 @@ void ScDPOutput::CalcSizes() if ( aStartPos.Col() + nRowFieldCount + nColCount - 1 > MAXCOL || aStartPos.Row() + nPageSize + nHeaderSize + nColFieldCount + nRowCount > MAXROW ) { - bSizeOverflow = sal_True; + bSizeOverflow = true; } nTabStartCol = aStartPos.Col(); @@ -715,7 +897,7 @@ void ScDPOutput::CalcSizes() nTabEndRow = nDataStartRow + (SCROW)nRowCount - 1; else nTabEndRow = nDataStartRow; // single row will remain empty - bSizesValid = sal_True; + bSizesValid = true; } } @@ -838,7 +1020,7 @@ void ScDPOutput::Output() STR_PIVOT_STYLE_INNER ); // output column headers: - OutputImpl outputimp( pDoc, nTab, + ScDPOutputImpl outputimp( pDoc, nTab, nTabStartCol, nTabStartRow, nMemberStartCol, nMemberStartRow, nDataStartCol, nDataStartRow, nTabEndCol, nTabEndRow ); for (nField=0; nField<nColFieldCount; nField++) diff --git a/sc/source/core/data/dpsdbtab.cxx b/sc/source/core/data/dpsdbtab.cxx index 7eeb4b93e284..72c0f06911b1 100644 --- a/sc/source/core/data/dpsdbtab.cxx +++ b/sc/source/core/data/dpsdbtab.cxx @@ -33,23 +33,6 @@ // INCLUDE -------------------------------------------------------------- -#include <tools/debug.hxx> -#include <vcl/msgbox.hxx> -#include <svl/zforlist.hxx> -#include <comphelper/processfactory.hxx> -#include <comphelper/types.hxx> - -#include <com/sun/star/sheet/DataImportMode.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/sdb/CommandType.hpp> -#include <com/sun/star/sdb/XCompletedExecution.hpp> -#include <com/sun/star/sdbc/DataType.hpp> -#include <com/sun/star/sdbc/XRow.hpp> -#include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/sheet/DataPilotFieldFilter.hpp> - #include "dpsdbtab.hxx" #include "collect.hxx" #include "global.hxx" @@ -59,100 +42,41 @@ #include "document.hxx" #include "dpobject.hxx" +#include <com/sun/star/sheet/DataImportMode.hpp> +#include <com/sun/star/sdb/CommandType.hpp> + using namespace com::sun::star; using ::std::vector; using ::com::sun::star::uno::Sequence; -using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::UNO_QUERY; -#define SC_SERVICE_ROWSET "com.sun.star.sdb.RowSet" -#define SC_SERVICE_INTHANDLER "com.sun.star.task.InteractionHandler" - -//! move to a header file? -#define SC_DBPROP_DATASOURCENAME "DataSourceName" -#define SC_DBPROP_COMMAND "Command" -#define SC_DBPROP_COMMANDTYPE "CommandType" - -ScDPCache* ScImportSourceDesc::CreateCache() const +sal_Int32 ScImportSourceDesc::GetCommandType() const { - if (!mpDoc) - return NULL; - sal_Int32 nSdbType = -1; switch ( nType ) { - case sheet::DataImportMode_SQL: nSdbType = sdb::CommandType::COMMAND; break; - case sheet::DataImportMode_TABLE: nSdbType = sdb::CommandType::TABLE; break; - case sheet::DataImportMode_QUERY: nSdbType = sdb::CommandType::QUERY; break; - default: - return NULL; + case sheet::DataImportMode_SQL: nSdbType = sdb::CommandType::COMMAND; break; + case sheet::DataImportMode_TABLE: nSdbType = sdb::CommandType::TABLE; break; + case sheet::DataImportMode_QUERY: nSdbType = sdb::CommandType::QUERY; break; + default: + ; } + return nSdbType; +} - ScDPCache* pCache = new ScDPCache(mpDoc); - - uno::Reference<sdbc::XRowSet> xRowSet ; - try - { - xRowSet = uno::Reference<sdbc::XRowSet>( - comphelper::getProcessServiceFactory()->createInstance( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SC_SERVICE_ROWSET )) ), - uno::UNO_QUERY); - uno::Reference<beans::XPropertySet> xRowProp( xRowSet, uno::UNO_QUERY ); - DBG_ASSERT( xRowProp.is(), "can't get RowSet" ); - if ( xRowProp.is() ) - { - // - // set source parameters - // - uno::Any aAny; - aAny <<= rtl::OUString( aDBName ); - xRowProp->setPropertyValue( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_DBPROP_DATASOURCENAME)), aAny ); - - aAny <<= rtl::OUString( aObject ); - xRowProp->setPropertyValue( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_DBPROP_COMMAND)), aAny ); - - aAny <<= nSdbType; - xRowProp->setPropertyValue( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_DBPROP_COMMANDTYPE)), aAny ); - - uno::Reference<sdb::XCompletedExecution> xExecute( xRowSet, uno::UNO_QUERY ); - if ( xExecute.is() ) - { - uno::Reference<task::XInteractionHandler> xHandler( - comphelper::getProcessServiceFactory()->createInstance( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SC_SERVICE_INTHANDLER )) ), - uno::UNO_QUERY); - xExecute->executeWithCompletion( xHandler ); - } - else - xRowSet->execute(); - SvNumberFormatter aFormat(mpDoc->GetServiceManager(), ScGlobal::eLnge); - pCache->InitFromDataBase( xRowSet, *aFormat.GetNullDate() ); - } - } - catch ( sdbc::SQLException& rError ) - { - //! store error message - delete pCache; - pCache = NULL; - InfoBox aInfoBox( 0, String(rError.Message) ); - aInfoBox.Execute(); - } - catch ( uno::Exception& ) - { - delete pCache; - pCache = NULL; - OSL_FAIL("Unexpected exception in database"); - } +const ScDPCache* ScImportSourceDesc::CreateCache() const +{ + if (!mpDoc) + return NULL; + sal_Int32 nSdbType = GetCommandType(); + if (nSdbType < 0) + return NULL; - ::comphelper::disposeComponent( xRowSet ); - return pCache; + ScDPCollection::DBCaches& rCaches = mpDoc->GetDPCollection()->GetDBCaches(); + return rCaches.getCache(nSdbType, aDBName, aObject); } ScDatabaseDPData::ScDatabaseDPData(ScDocument* pDoc, const ScImportSourceDesc& rImport) : diff --git a/sc/source/core/data/dpshttab.cxx b/sc/source/core/data/dpshttab.cxx index e4aca9a45253..cfad761377bc 100644 --- a/sc/source/core/data/dpshttab.cxx +++ b/sc/source/core/data/dpshttab.cxx @@ -60,7 +60,7 @@ using ::std::vector; // ----------------------------------------------------------------------- -ScSheetDPData::ScSheetDPData(ScDocument* pD, const ScSheetSourceDesc& rDesc, ScDPCache* pCache) : +ScSheetDPData::ScSheetDPData(ScDocument* pD, const ScSheetSourceDesc& rDesc, const ScDPCache* pCache) : ScDPTableData(pD), aQuery ( rDesc.GetQueryParam() ), pSpecial(NULL), @@ -307,7 +307,7 @@ bool ScSheetSourceDesc::operator== (const ScSheetSourceDesc& rOther) const maQueryParam == rOther.maQueryParam; } -ScDPCache* ScSheetSourceDesc::CreateCache() const +const ScDPCache* ScSheetSourceDesc::CreateCache() const { if (!mpDoc) return NULL; @@ -319,9 +319,17 @@ ScDPCache* ScSheetSourceDesc::CreateCache() const return NULL; } - ScDPCache* pCache = new ScDPCache(mpDoc); - pCache->InitFromDoc(mpDoc, GetSourceRange()); - return pCache; + // All cache instances are managed centrally by ScDPCollection. + ScDPCollection* pDPs = mpDoc->GetDPCollection(); + if (HasRangeName()) + { + // Name-based data source. + ScDPCollection::NameCaches& rCaches = pDPs->GetNameCaches(); + return rCaches.getCache(GetRangeName(), GetSourceRange()); + } + + ScDPCollection::SheetCaches& rCaches = pDPs->GetSheetCaches(); + return rCaches.getCache(GetSourceRange()); } long ScSheetSourceDesc::GetCacheId() const diff --git a/sc/source/core/data/dptablecache.cxx b/sc/source/core/data/dptablecache.cxx index 008cdfcf3935..35782e05bab7 100644 --- a/sc/source/core/data/dptablecache.cxx +++ b/sc/source/core/data/dptablecache.cxx @@ -48,6 +48,8 @@ #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> +#include <memory> + const double D_TIMEFACTOR = 86400.0; using namespace ::com::sun::star; @@ -57,26 +59,37 @@ using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::UNO_QUERY; using ::com::sun::star::uno::UNO_QUERY_THROW; using ::std::vector; +using ::std::auto_ptr; namespace { -bool lcl_isDate( sal_uLong nNumType ) +bool isDate( sal_uLong nNumType ) { return ((nNumType & NUMBERFORMAT_DATE) != 0) ? 1 : 0; } -bool lcl_Search( const ScDPCache::DataListType& list, const ::std::vector<SCROW>& rOrder, const ScDPItemData& item, SCROW& rIndex) +/** + * Search for an item in the data array. If it's in the array, return its + * index to the caller. + * + * @param rArray dimension array + * @param rOrder global order (what's this?) + * @param item item to search for + * @param rIndex the index of the found item in the global order. + * + * @return true if the item is found, or false otherwise. + */ +bool hasItemInDimension(const ScDPCache::DataListType& rArray, const ::std::vector<SCROW>& rOrder, const ScDPItemData& item, SCROW& rIndex) { - rIndex = list.size(); + rIndex = rArray.size(); bool bFound = false; SCROW nLo = 0; - SCROW nHi = list.size() - 1; - SCROW nIndex; + SCROW nHi = rArray.size() - 1; long nCompare; while (nLo <= nHi) { - nIndex = (nLo + nHi) / 2; - nCompare = ScDPItemData::Compare( list[rOrder[nIndex]], item ); + SCROW nIndex = (nLo + nHi) / 2; + nCompare = ScDPItemData::Compare( rArray[rOrder[nIndex]], item ); if (nCompare < 0) nLo = nIndex + 1; else @@ -173,7 +186,7 @@ ScDPItemData* lcl_GetItemValue( ScDPItemData::ScDPItemData(const String& rS, double fV, bool bHV, const sal_uLong nNumFormatP, bool bData) : nNumFormat( nNumFormatP ), aString(rS), fValue(fV), - mbFlag( (MK_VAL*!!bHV) | (MK_DATA*!!bData) | (MK_ERR*!!false) | (MK_DATE*!!lcl_isDate( nNumFormat ) ) ) + mbFlag( (MK_VAL*!!bHV) | (MK_DATA*!!bData) | (MK_ERR*!!false) | (MK_DATE*!!isDate( nNumFormat ) ) ) { } @@ -203,7 +216,7 @@ ScDPItemData::ScDPItemData(ScDocument* pDoc, SCROW nRow, sal_uInt16 nCol, sal_uI fValue = fVal; mbFlag |= MK_VAL|MK_DATA; nNumFormat = pDoc->GetNumberFormat( ScAddress( nCol, nRow, nDocTab ) ); - lcl_isDate( nFormat ) ? ( mbFlag |= MK_DATE ) : (mbFlag &= ~MK_DATE); + isDate( nFormat ) ? ( mbFlag |= MK_DATE ) : (mbFlag &= ~MK_DATE); } else if ( pDoc->HasData( nCol,nRow, nDocTab ) ) SetString ( aDocStr ); @@ -473,15 +486,12 @@ bool ScDPCache::InitFromDoc(ScDocument* pDoc, const ScRange& rRange) maIndexOrder.push_back(new vector<SCROW>()); } //check valid - for ( SCROW nRow = nStartRow; nRow <= nEndRow; nRow ++ ) + + for (sal_uInt16 nCol = nStartCol; nCol <= nEndCol; ++nCol) { - for ( sal_uInt16 nCol = nStartCol; nCol <= nEndCol; nCol++ ) - { - if ( nRow == nStartRow ) - AddLabel( new ScDPItemData( pDoc, nRow, nCol, nDocTab ) ); - else - AddData( nCol - nStartCol, new ScDPItemData( pDoc, nRow, nCol, nDocTab ) ); - } + AddLabel(new ScDPItemData(pDoc, nStartRow, nCol, nDocTab)); + for (SCROW nRow = nStartRow + 1; nRow <= nEndRow; ++nRow) + AddData(nCol - nStartCol, new ScDPItemData(pDoc, nRow, nCol, nDocTab)); } return true; } @@ -489,7 +499,7 @@ bool ScDPCache::InitFromDoc(ScDocument* pDoc, const ScRange& rRange) bool ScDPCache::InitFromDataBase (const Reference<sdbc::XRowSet>& xRowSet, const Date& rNullDate) { if (!xRowSet.is()) - // Dont' even waste time to go any further. + // Don't even waste time to go any further. return false; try { @@ -565,7 +575,7 @@ sal_uLong ScDPCache::GetDimNumType( SCCOL nDim) const return GetNumType(maTableDataValues[nDim][0].nNumFormat); } -bool ScDPCache::ValidQuery( SCROW nRow, const ScQueryParam &rParam, bool *pSpecial) +bool ScDPCache::ValidQuery( SCROW nRow, const ScQueryParam &rParam, bool *pSpecial) const { if (!rParam.GetEntry(0).bDoQuery) return true; @@ -787,23 +797,23 @@ bool ScDPCache::IsEmptyMember( SCROW nRow, sal_uInt16 nColumn ) const return !GetItemDataById( nColumn, GetItemDataId( nColumn, nRow, false ) )->IsHasData(); } -bool ScDPCache::AddData(long nDim, ScDPItemData* pitemData) +bool ScDPCache::AddData(long nDim, ScDPItemData* pData) { DBG_ASSERT( IsValid(), " IsValid() == false " ); DBG_ASSERT( nDim < mnColumnCount && nDim >=0 , "dimension out of bound" ); - SCROW nIndex = 0; - bool bInserted = false; + // Wrap this instance with scoped pointer to ensure proper deletion. + auto_ptr<ScDPItemData> p(pData); + pData->SetDate(isDate(GetNumType(pData->nNumFormat))); - pitemData->SetDate( lcl_isDate( GetNumType( pitemData->nNumFormat ) ) ); - - if ( !lcl_Search( maTableDataValues[nDim], maGlobalOrder[nDim], *pitemData, nIndex ) ) + SCROW nIndex = 0; + if (!hasItemInDimension(maTableDataValues[nDim], maGlobalOrder[nDim], *pData, nIndex)) { - maTableDataValues[nDim].push_back( pitemData ); + // This item doesn't exist in the dimension array yet. + maTableDataValues[nDim].push_back(p); maGlobalOrder[nDim].insert( maGlobalOrder[nDim].begin()+nIndex, maTableDataValues[nDim].size()-1 ); DBG_ASSERT( (size_t) maGlobalOrder[nDim][nIndex] == maTableDataValues[nDim].size()-1 ,"ScDPTableDataCache::AddData "); maSourceData[nDim].push_back( maTableDataValues[nDim].size()-1 ); - bInserted = true; } else maSourceData[nDim].push_back( maGlobalOrder[nDim][nIndex] ); @@ -813,12 +823,9 @@ bool ScDPCache::AddData(long nDim, ScDPItemData* pitemData) while ( mbEmptyRow.size() <= nCurRow ) mbEmptyRow.push_back( true ); - if ( pitemData->IsHasData() ) + if ( pData->IsHasData() ) mbEmptyRow[ nCurRow ] = false; - if ( !bInserted ) - delete pitemData; - return true; } @@ -928,10 +935,26 @@ sal_uLong ScDPCache::GetNumberFormat( long nDim ) const { if ( nDim >= mnColumnCount ) return 0; - if ( maTableDataValues[nDim].size()==0 ) + + if (maTableDataValues[nDim].empty()) return 0; - else - return maTableDataValues[nDim][0].nNumFormat; + + // TODO: This is very ugly, but the best we can do right now. Check the + // first 10 dimension members, and take the first non-zero number format, + // else return the default number format (of 0). For the long-term, we + // need to redo this cache structure to properly indicate empty cells, and + // skip them when trying to determine the representative number format for + // a dimension. + size_t nCount = maTableDataValues[nDim].size(); + if (nCount > 10) + nCount = 10; + for (size_t i = 0; i < nCount; ++i) + { + sal_uLong n = maTableDataValues[nDim][i].nNumFormat; + if (n) + return n; + } + return 0; } bool ScDPCache::IsDateDimension( long nDim ) const @@ -967,7 +990,7 @@ SCCOL ScDPCache::GetDimensionIndex(String sName) const return -1; } -SCROW ScDPCache::GetIdByItemData(long nDim, String sItemData ) const +SCROW ScDPCache::GetIdByItemData(long nDim, const String& sItemData ) const { if ( nDim < mnColumnCount && nDim >=0 ) { @@ -995,7 +1018,7 @@ SCROW ScDPCache::GetIdByItemData( long nDim, const ScDPItemData& rData ) const return GetRowCount() + maAdditionalData.getDataId(rData); } -SCROW ScDPCache::GetAdditionalItemID ( String sItemData ) const +SCROW ScDPCache::GetAdditionalItemID ( const String& sItemData ) const { ScDPItemData rData ( sItemData ); return GetAdditionalItemID( rData ); diff --git a/sc/source/core/data/scdpoutputimpl.cxx b/sc/source/core/data/scdpoutputimpl.cxx deleted file mode 100644 index ce2201ef872c..000000000000 --- a/sc/source/core/data/scdpoutputimpl.cxx +++ /dev/null @@ -1,184 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright IBM Corporation 2009. - * Copyright 2009 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sc.hxx" - -// INCLUDE --------------------------------------------------------------- -#include "scdpoutputimpl.hxx" -#include "scitems.hxx" -#include <editeng/boxitem.hxx> -// ----------------------------------------------------------------------- - -namespace -{ - bool lcl_compareColfuc ( SCCOL i, SCCOL j) { return (i<j); } - bool lcl_compareRowfuc ( SCROW i, SCROW j) { return (i<j); } -} - - -void OutputImpl::OutputDataArea() -{ - AddRow( mnDataStartRow ); - AddCol( mnDataStartCol ); - - mnCols.push_back( mnTabEndCol+1); //set last row bottom - mnRows.push_back( mnTabEndRow+1); //set last col bottom - - sal_Bool bAllRows = ( ( mnTabEndRow - mnDataStartRow + 2 ) == (SCROW) mnRows.size() ); - - std::sort( mnCols.begin(), mnCols.end(), lcl_compareColfuc ); - std::sort( mnRows.begin(), mnRows.end(), lcl_compareRowfuc ); - - for( SCCOL nCol = 0; nCol < (SCCOL)mnCols.size()-1; nCol ++ ) - { - if ( !bAllRows ) - { - if ( nCol < (SCCOL)mnCols.size()-2) - { - for ( SCROW i = nCol%2; i < (SCROW)mnRows.size()-2; i +=2 ) - OutputBlockFrame( mnCols[nCol], mnRows[i], mnCols[nCol+1]-1, mnRows[i+1]-1 ); - if ( mnRows.size()>=2 ) - OutputBlockFrame( mnCols[nCol], mnRows[mnRows.size()-2], mnCols[nCol+1]-1, mnRows[mnRows.size()-1]-1 ); - } - else - { - for ( SCROW i = 0 ; i < (SCROW)mnRows.size()-1; i++ ) - OutputBlockFrame( mnCols[nCol], mnRows[i], mnCols[nCol+1]-1, mnRows[i+1]-1 ); - } - } - else - OutputBlockFrame( mnCols[nCol], mnRows.front(), mnCols[nCol+1]-1, mnRows.back()-1, bAllRows ); - } - //out put rows area outer framer - if ( mnTabStartCol != mnDataStartCol ) - { - if ( mnTabStartRow != mnDataStartRow ) - OutputBlockFrame( mnTabStartCol, mnTabStartRow, mnDataStartCol-1, mnDataStartRow-1 ); - OutputBlockFrame( mnTabStartCol, mnDataStartRow, mnDataStartCol-1, mnTabEndRow ); - } - //out put cols area outer framer - OutputBlockFrame( mnDataStartCol, mnTabStartRow, mnTabEndCol, mnDataStartRow-1 ); -} - -OutputImpl::OutputImpl( ScDocument* pDoc, sal_uInt16 nTab, - SCCOL nTabStartCol, - SCROW nTabStartRow, - SCCOL nMemberStartCol, - SCROW nMemberStartRow, - SCCOL nDataStartCol, - SCROW nDataStartRow, - SCCOL nTabEndCol, - SCROW nTabEndRow ): - mpDoc( pDoc ), - mnTab( nTab ), - mnTabStartCol( nTabStartCol ), - mnTabStartRow( nTabStartRow ), - mnMemberStartCol( nMemberStartCol), - mnMemberStartRow( nMemberStartRow), - mnDataStartCol ( nDataStartCol ), - mnDataStartRow ( nDataStartRow ), - mnTabEndCol( nTabEndCol ), - mnTabEndRow( nTabEndRow ) -{ - mbNeedLineCols.resize( nTabEndCol-nDataStartCol+1, false ); - mbNeedLineRows.resize( nTabEndRow-nDataStartRow+1, false ); - -} - -sal_Bool OutputImpl::AddRow( SCROW nRow ) -{ - if ( !mbNeedLineRows[ nRow - mnDataStartRow ] ) - { - mbNeedLineRows[ nRow - mnDataStartRow ] = true; - mnRows.push_back( nRow ); - return sal_True; - } - else - return false; -} - -sal_Bool OutputImpl::AddCol( SCCOL nCol ) -{ - - if ( !mbNeedLineCols[ nCol - mnDataStartCol ] ) - { - mbNeedLineCols[ nCol - mnDataStartCol ] = true; - mnCols.push_back( nCol ); - return sal_True; - } - else - return false; -} - -void OutputImpl::OutputBlockFrame ( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_Bool bHori ) -{ - Color color = SC_DP_FRAME_COLOR; - ::editeng::SvxBorderLine aLine( &color, SC_DP_FRAME_INNER_BOLD ); - ::editeng::SvxBorderLine aOutLine( &color, SC_DP_FRAME_OUTER_BOLD ); - - SvxBoxItem aBox( ATTR_BORDER ); - - if ( nStartCol == mnTabStartCol ) - aBox.SetLine(&aOutLine, BOX_LINE_LEFT); - else - aBox.SetLine(&aLine, BOX_LINE_LEFT); - - if ( nStartRow == mnTabStartRow ) - aBox.SetLine(&aOutLine, BOX_LINE_TOP); - else - aBox.SetLine(&aLine, BOX_LINE_TOP); - - if ( nEndCol == mnTabEndCol ) //bottom row - aBox.SetLine(&aOutLine, BOX_LINE_RIGHT); - else - aBox.SetLine(&aLine, BOX_LINE_RIGHT); - - if ( nEndRow == mnTabEndRow ) //bottom - aBox.SetLine(&aOutLine, BOX_LINE_BOTTOM); - else - aBox.SetLine(&aLine, BOX_LINE_BOTTOM); - - - SvxBoxInfoItem aBoxInfo( ATTR_BORDER_INNER ); - aBoxInfo.SetValid(VALID_VERT,false ); - if ( bHori ) - { - aBoxInfo.SetValid(VALID_HORI,sal_True); - aBoxInfo.SetLine( &aLine, BOXINFO_LINE_HORI ); - } - else - aBoxInfo.SetValid(VALID_HORI,false ); - - aBoxInfo.SetValid(VALID_DISTANCE,false); - - mpDoc->ApplyFrameAreaTab( ScRange( nStartCol, nStartRow, mnTab, nEndCol, nEndRow , mnTab ), &aBox, &aBoxInfo ); - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/scdpoutputimpl.hxx b/sc/source/core/data/scdpoutputimpl.hxx deleted file mode 100644 index 35a0a65a06fc..000000000000 --- a/sc/source/core/data/scdpoutputimpl.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright IBM Corporation 2009. - * Copyright 2009 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef SCDPOUTPUTIMPL_HXX -#define SCDPOUTPUTIMPL_HXX - -#include "document.hxx" - -#define SC_DP_FRAME_INNER_BOLD 20 -#define SC_DP_FRAME_OUTER_BOLD 40 - -#define SC_DP_FRAME_COLOR Color(0,0,0) //( 0x20, 0x40, 0x68 ) - -class OutputImpl -{ - ScDocument* mpDoc; - sal_uInt16 mnTab; - ::std::vector< bool > mbNeedLineCols; - ::std::vector< SCCOL > mnCols; - - ::std::vector< bool > mbNeedLineRows; - ::std::vector< SCROW > mnRows; - - SCCOL mnTabStartCol; - SCROW mnTabStartRow; - SCCOL mnMemberStartCol; - SCROW mnMemberStartRow; - - SCCOL mnDataStartCol; - SCROW mnDataStartRow; - SCCOL mnTabEndCol; - SCROW mnTabEndRow; - -public: - OutputImpl( ScDocument* pDoc, sal_uInt16 nTab, - SCCOL nTabStartCol, - SCROW nTabStartRow, - SCCOL nMemberStartCol, - SCROW nMemberStartRow, - SCCOL nDataStartCol, - SCROW nDataStartRow, - SCCOL nTabEndCol, - SCROW nTabEndRow ); - sal_Bool AddRow( SCROW nRow ); - sal_Bool AddCol( SCCOL nCol ); - - void OutputDataArea(); - void OutputBlockFrame ( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_Bool bHori = false ); - -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/excel/excimp8.cxx b/sc/source/filter/excel/excimp8.cxx index 43f1da0844c1..a1bbe57dbc0c 100644 --- a/sc/source/filter/excel/excimp8.cxx +++ b/sc/source/filter/excel/excimp8.cxx @@ -82,6 +82,7 @@ #include "attrib.hxx" #include "conditio.hxx" #include "dbcolect.hxx" +#include "globalnames.hxx" #include "editutil.hxx" #include "markdata.hxx" #include "rangenam.hxx" @@ -468,8 +469,6 @@ void ImportExcel8::FilterMode( void ) // then the latter is true.. if( !pExcRoot->pAutoFilterBuffer ) return; - pExcRoot->pAutoFilterBuffer->IncrementActiveAF(); - XclImpAutoFilterData* pData = pExcRoot->pAutoFilterBuffer->GetByTab( GetCurrScTab() ); if( pData ) pData->SetAutoOrAdvanced(); @@ -498,15 +497,14 @@ void ImportExcel8::AutoFilter( void ) -XclImpAutoFilterData::XclImpAutoFilterData( RootData* pRoot, const ScRange& rRange, const String& rName ) : +XclImpAutoFilterData::XclImpAutoFilterData( RootData* pRoot, const ScRange& rRange ) : ExcRoot( pRoot ), pCurrDBData(NULL), nFirstEmpty( 0 ), bActive( false ), bHasConflict( false ), bCriteria( false ), - bAutoOrAdvanced(false), - aFilterName(rName) + bAutoOrAdvanced(false) { aParam.nCol1 = rRange.aStart.Col(); aParam.nRow1 = rRange.aStart.Row(); @@ -750,9 +748,9 @@ void XclImpAutoFilterData::SetExtractPos( const ScAddress& rAddr ) aParam.bDestPers = sal_True; } -void XclImpAutoFilterData::Apply( const sal_Bool bUseUnNamed ) +void XclImpAutoFilterData::Apply() { - CreateScDBData(bUseUnNamed); + CreateScDBData(); if( bActive ) { @@ -774,35 +772,27 @@ void XclImpAutoFilterData::Apply( const sal_Bool bUseUnNamed ) } } -void XclImpAutoFilterData::CreateScDBData( const sal_Bool bUseUnNamed ) +void XclImpAutoFilterData::CreateScDBData() { // Create the ScDBData() object if the AutoFilter is activated // or if we need to create the Advanced Filter. if( bActive || bCriteria) { - ScDBCollection& rColl = pExcRoot->pIR->GetDatabaseRanges(); - pCurrDBData = rColl.GetDBAtArea( Tab(), StartCol(), StartRow(), EndCol(), EndRow() ); - if( !pCurrDBData ) + ScDocument* pDoc = pExcRoot->pIR->GetDocPtr(); + String aNewName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_DB_LOCAL_NONAME)); + pCurrDBData = new ScDBData(aNewName , Tab(), + StartCol(),StartRow(), EndCol(),EndRow() ); + if(bCriteria) { - AmendAFName(bUseUnNamed); - - pCurrDBData = new ScDBData( aFilterName, Tab(), StartCol(), StartRow(), EndCol(), EndRow() ); - - if( pCurrDBData ) - { - if(bCriteria) - { - EnableRemoveFilter(); + EnableRemoveFilter(); - pCurrDBData->SetQueryParam( aParam ); - pCurrDBData->SetAdvancedQuerySource(&aCriteriaRange); - } - else - pCurrDBData->SetAdvancedQuerySource(NULL); - rColl.Insert( pCurrDBData ); - } + pCurrDBData->SetQueryParam( aParam ); + pCurrDBData->SetAdvancedQuerySource(&aCriteriaRange); } + else + pCurrDBData->SetAdvancedQuerySource(NULL); + pDoc->SetAnonymousDBData(Tab(), pCurrDBData); } } @@ -822,18 +812,7 @@ void XclImpAutoFilterData::EnableRemoveFilter() // inside the advanced range } -void XclImpAutoFilterData::AmendAFName(const sal_Bool bUseUnNamed) -{ - // If-and-only-if we have one AF filter then - // use the Calc "unnamed" range name. Calc - // only supports one in total while Excel - // supports one per sheet. - if( bUseUnNamed && bAutoOrAdvanced ) - aFilterName = ScGlobal::GetRscString(STR_DB_NONAME); -} - -XclImpAutoFilterBuffer::XclImpAutoFilterBuffer() : - nAFActiveCount( 0 ) +XclImpAutoFilterBuffer::XclImpAutoFilterBuffer() { } @@ -843,11 +822,10 @@ XclImpAutoFilterBuffer::~XclImpAutoFilterBuffer() delete pData; } -void XclImpAutoFilterBuffer::Insert( RootData* pRoot, const ScRange& rRange, - const String& rName ) +void XclImpAutoFilterBuffer::Insert( RootData* pRoot, const ScRange& rRange) { if( !GetByTab( rRange.aStart.Tab() ) ) - Append( new XclImpAutoFilterData( pRoot, rRange, rName ) ); + Append( new XclImpAutoFilterData( pRoot, rRange) ); } void XclImpAutoFilterBuffer::AddAdvancedRange( const ScRange& rRange ) @@ -867,7 +845,7 @@ void XclImpAutoFilterBuffer::AddExtractPos( const ScRange& rRange ) void XclImpAutoFilterBuffer::Apply() { for( XclImpAutoFilterData* pData = _First(); pData; pData = _Next() ) - pData->Apply(UseUnNamed()); + pData->Apply(); } XclImpAutoFilterData* XclImpAutoFilterBuffer::GetByTab( SCTAB nTab ) diff --git a/sc/source/filter/excel/excrecds.cxx b/sc/source/filter/excel/excrecds.cxx index ec4c425c1621..d3671b4d1cbe 100644 --- a/sc/source/filter/excel/excrecds.cxx +++ b/sc/source/filter/excel/excrecds.cxx @@ -856,31 +856,18 @@ ExcAutoFilterRecs::ExcAutoFilterRecs( const XclExpRoot& rRoot, SCTAB nTab ) : pFilterInfo( NULL ) , mbAutoFilter (false) { - ScDBCollection& rDBColl = GetDatabaseRanges(); XclExpNameManager& rNameMgr = GetNameManager(); - // search for first DB-range with filter - sal_uInt16 nIndex = 0; sal_Bool bFound = false; sal_Bool bAdvanced = false; - ScDBData* pData = NULL; + ScDBData* pData = rRoot.GetDoc().GetAnonymousDBData(nTab); ScRange aAdvRange; - while( (nIndex < rDBColl.GetCount()) && !bFound ) + if (pData) { - pData = rDBColl[ nIndex ]; - if( pData ) - { - ScRange aRange; - pData->GetArea( aRange ); - bAdvanced = pData->GetAdvancedQuerySource( aAdvRange ); - bFound = (aRange.aStart.Tab() == nTab) && - (pData->HasQueryParam() || pData->HasAutoFilter() || bAdvanced); - } - if( !bFound ) - nIndex++; + bAdvanced = pData->GetAdvancedQuerySource( aAdvRange ); + bFound = (pData->HasQueryParam() || pData->HasAutoFilter() || bAdvanced); } - - if( pData && bFound ) + if( bFound ) { ScQueryParam aParam; pData->GetQueryParam( aParam ); diff --git a/sc/source/filter/excel/xeformula.cxx b/sc/source/filter/excel/xeformula.cxx index 7acec465c4ac..dab35e4ba7b8 100644 --- a/sc/source/filter/excel/xeformula.cxx +++ b/sc/source/filter/excel/xeformula.cxx @@ -418,7 +418,6 @@ private: void ProcessExternalRangeRef( const XclExpScToken& rTokData ); void ProcessDefinedName( const XclExpScToken& rTokData ); void ProcessExternalName( const XclExpScToken& rTokData ); - void ProcessDatabaseArea( const XclExpScToken& rTokData ); // token vector ----------------------------------------------------------- @@ -1184,7 +1183,6 @@ XclExpScToken XclExpFmlaCompImpl::Factor( XclExpScToken aTokData ) case ocBad: ProcessBad( aTokData ); break; case ocOpen: ProcessParentheses( aTokData ); break; case ocName: ProcessDefinedName( aTokData ); break; - case ocDBArea: ProcessDatabaseArea( aTokData ); break; case ocFalse: case ocTrue: ProcessBoolean( aTokData ); break; case ocDde: ProcessDdeLink( aTokData ); break; @@ -2138,12 +2136,6 @@ void XclExpFmlaCompImpl::ProcessExternalName( const XclExpScToken& rTokData ) AppendErrorToken( EXC_ERR_NAME, rTokData.mnSpaces ); } -void XclExpFmlaCompImpl::ProcessDatabaseArea( const XclExpScToken& rTokData ) -{ - sal_uInt16 nNameIdx = GetNameManager().InsertDBRange( rTokData.mpScToken->GetIndex() ); - AppendNameToken( nNameIdx, rTokData.mnSpaces ); -} - // token vector --------------------------------------------------------------- void XclExpFmlaCompImpl::PushOperandPos( sal_uInt16 nTokPos ) diff --git a/sc/source/filter/excel/xename.cxx b/sc/source/filter/excel/xename.cxx index 846e6229aa10..69377c5d06f4 100644 --- a/sc/source/filter/excel/xename.cxx +++ b/sc/source/filter/excel/xename.cxx @@ -38,6 +38,7 @@ #include "dbcolect.hxx" #include "xehelper.hxx" #include "xelink.hxx" +#include "globalnames.hxx" // for filter manager #include "excrecds.hxx" @@ -138,11 +139,10 @@ public: /** Inserts the Calc name with the passed index and returns the Excel NAME index. */ sal_uInt16 InsertName( SCTAB nTab, sal_uInt16 nScNameIdx ); - /** Inserts the Calc database range with the passed index and returns the Excel NAME index. */ - sal_uInt16 InsertDBRange( sal_uInt16 nScDBRangeIdx ); /** Inserts a new built-in defined name. */ sal_uInt16 InsertBuiltInName( sal_Unicode cBuiltIn, XclTokenArrayRef xTokArr, SCTAB nScTab ); + sal_uInt16 InsertBuiltInName( sal_Unicode cBuiltIn, XclTokenArrayRef xTokArr, const ScRange& aRange ); /** Inserts a new defined name. Sets another unused name, if rName already exists. */ sal_uInt16 InsertUniqueName( const String& rName, XclTokenArrayRef xTokArr, SCTAB nScTab ); /** Returns index of an existing name, or creates a name without definition. */ @@ -179,10 +179,6 @@ private: */ sal_uInt16 FindNamedExpIndex( SCTAB nTab, sal_uInt16 nScIdx ); - /** - * Find the index of a NAME record from Calc's database range index. - */ - sal_uInt16 FindDBNameIdx( sal_uInt16 nScIdx ) const; /** Returns the index of an existing built-in NAME record with the passed definition, otherwise 0. */ sal_uInt16 FindBuiltInNameIdx( const String& rName, const XclTokenArray& rTokArr, bool bDBRange ) const; @@ -203,8 +199,6 @@ private: void CreateBuiltInNames(); /** Creates NAME records for all user-defined names in the document. */ void CreateUserNames(); - /** Creates NAME records for all database ranges in the document. */ - void CreateDatabaseNames(); private: /** @@ -214,8 +208,6 @@ private: */ NamedExpIndexMap maNamedExpMap; XclExpNameList maNameList; /// List of NAME records. - XclExpIndexMap maDBRangeMap; /// Maps Calc database ranges to Excel NAME records. - String maUnnamedDBName; /// Name of the hidden unnamed database range. size_t mnFirstUserIdx; /// List index of first user-defined NAME record. }; @@ -254,9 +246,11 @@ XclExpName::XclExpName( const XclExpRoot& rRoot, sal_Unicode cBuiltIn ) : { String aName( XclTools::GetXclBuiltInDefName( EXC_BUILTIN_FILTERDATABASE ) ); mxName = XclExpStringHelper::CreateString( rRoot, aName, EXC_STR_8BITLENGTH ); + maOrigName = XclTools::GetXclBuiltInDefName( cBuiltIn ); } else { + maOrigName = XclTools::GetBuiltInDefNameXml( cBuiltIn ) ; mxName = XclExpStringHelper::CreateString( rRoot, cBuiltIn, EXC_STR_8BITLENGTH ); ::set_flag( mnFlags, EXC_NAME_BUILTIN ); } @@ -336,10 +330,6 @@ void XclExpName::Save( XclExpStream& rStrm ) void XclExpName::SaveXml( XclExpXmlStream& rStrm ) { - // For some reason, AutoFilter creates exportable names where maOrigName=="" - if( maOrigName.Len() == 0 ) - return; - sax_fastparser::FSHelperPtr& rWorkbook = rStrm.GetCurrentStream(); rWorkbook->startElement( XML_definedName, // OOXTODO: XML_comment, "", @@ -383,7 +373,6 @@ void XclExpName::WriteBody( XclExpStream& rStrm ) XclExpNameManagerImpl::XclExpNameManagerImpl( const XclExpRoot& rRoot ) : XclExpRoot( rRoot ), - maUnnamedDBName( ScGlobal::GetRscString( STR_DB_NONAME ) ), mnFirstUserIdx( 0 ) { } @@ -393,7 +382,6 @@ void XclExpNameManagerImpl::Initialize() CreateBuiltInNames(); mnFirstUserIdx = maNameList.GetSize(); CreateUserNames(); - CreateDatabaseNames(); } sal_uInt16 XclExpNameManagerImpl::InsertName( SCTAB nTab, sal_uInt16 nScNameIdx ) @@ -413,13 +401,15 @@ sal_uInt16 XclExpNameManagerImpl::InsertName( SCTAB nTab, sal_uInt16 nScNameIdx return nNameIdx; } -sal_uInt16 XclExpNameManagerImpl::InsertDBRange( sal_uInt16 nScDBRangeIdx ) +sal_uInt16 XclExpNameManagerImpl::InsertBuiltInName( sal_Unicode cBuiltIn, XclTokenArrayRef xTokArr, const ScRange& aRange ) { - sal_uInt16 nNameIdx = FindDBNameIdx( nScDBRangeIdx ); - if( nNameIdx == 0 ) - if( const ScDBData* pDBData = GetDatabaseRanges().FindIndex( nScDBRangeIdx ) ) - nNameIdx = CreateName( *pDBData ); - return nNameIdx; + XclExpNameRef xName( new XclExpName( GetRoot(), cBuiltIn ) ); + xName->SetTokenArray( xTokArr ); + xName->SetLocalTab( aRange.aStart.Tab() ); + String sSymbol; + aRange.Format( sSymbol, SCR_ABS_3D, GetDocPtr(), ScAddress::Details( ::formula::FormulaGrammar::CONV_XL_A1 ) ); + xName->SetSymbol( sSymbol ); + return Append( xName ); } sal_uInt16 XclExpNameManagerImpl::InsertBuiltInName( sal_Unicode cBuiltIn, XclTokenArrayRef xTokArr, SCTAB nScTab ) @@ -515,18 +505,12 @@ sal_uInt16 XclExpNameManagerImpl::FindNamedExpIndex( SCTAB nTab, sal_uInt16 nScI return (itr == maNamedExpMap.end()) ? 0 : itr->second; } -sal_uInt16 XclExpNameManagerImpl::FindDBNameIdx( sal_uInt16 nScIdx ) const -{ - XclExpIndexMap::const_iterator aIt = maDBRangeMap.find( nScIdx ); - return (aIt == maDBRangeMap.end()) ? 0 : aIt->second; -} - sal_uInt16 XclExpNameManagerImpl::FindBuiltInNameIdx( const String& rName, const XclTokenArray& rTokArr, bool bDBRange ) const { /* Get built-in index from the name. Special case: the database range 'unnamed' will be mapped to Excel's built-in '_FilterDatabase' name. */ - sal_Unicode cBuiltIn = (bDBRange && (rName == maUnnamedDBName)) ? + sal_Unicode cBuiltIn = (bDBRange && (rName == String(RTL_CONSTASCII_USTRINGPARAM(STR_DB_LOCAL_NONAME)))) ? EXC_BUILTIN_FILTERDATABASE : XclTools::GetBuiltInDefNameIndex( rName ); if( cBuiltIn < EXC_BUILTIN_UNKNOWN ) @@ -622,29 +606,6 @@ sal_uInt16 XclExpNameManagerImpl::CreateName( SCTAB nTab, const ScRangeData& rRa return nNameIdx; } -sal_uInt16 XclExpNameManagerImpl::CreateName( const ScDBData& rDBData ) -{ - // get name and source range, and create the definition formula - const String& rName = rDBData.GetName(); - ScRange aRange; - rDBData.GetArea( aRange ); - XclTokenArrayRef xTokArr = GetFormulaCompiler().CreateFormula( EXC_FMLATYPE_NAME, aRange ); - - // try to use an existing built-in name - sal_uInt16 nNameIdx = FindBuiltInNameIdx( rName, *xTokArr, true ); - if( nNameIdx == 0 ) - { - // insert a new name into the list - XclExpNameRef xName( new XclExpName( GetRoot(), GetUnusedName( rName ) ) ); - xName->SetTokenArray( xTokArr ); - nNameIdx = Append( xName ); - } - - // store the index of the NAME record in the lookup map - maDBRangeMap[ rDBData.GetIndex() ] = nNameIdx; - return nNameIdx; -} - void XclExpNameManagerImpl::CreateBuiltInNames() { ScDocument& rDoc = GetDoc(); @@ -718,19 +679,6 @@ void XclExpNameManagerImpl::CreateUserNames() } } -void XclExpNameManagerImpl::CreateDatabaseNames() -{ - const ScDBCollection& rDBRanges = GetDatabaseRanges(); - for( sal_uInt16 nDBIdx = 0, nDBCount = rDBRanges.GetCount(); nDBIdx < nDBCount; ++nDBIdx ) - { - const ScDBData* pDBData = rDBRanges[ nDBIdx ]; - DBG_ASSERT( pDBData, "XclExpNameManagerImpl::CreateDatabaseNames - missing database range" ); - // skip hidden "unnamed" range - if( pDBData && (pDBData->GetName() != maUnnamedDBName) && !FindDBNameIdx( pDBData->GetIndex() ) ) - CreateName( *pDBData ); - } -} - // ---------------------------------------------------------------------------- XclExpNameManager::XclExpNameManager( const XclExpRoot& rRoot ) : @@ -753,15 +701,10 @@ sal_uInt16 XclExpNameManager::InsertName( SCTAB nTab, sal_uInt16 nScNameIdx ) return mxImpl->InsertName( nTab, nScNameIdx ); } -sal_uInt16 XclExpNameManager::InsertDBRange( sal_uInt16 nScDBRangeIdx ) -{ - return mxImpl->InsertDBRange( nScDBRangeIdx ); -} - sal_uInt16 XclExpNameManager::InsertBuiltInName( sal_Unicode cBuiltIn, const ScRange& rRange ) { XclTokenArrayRef xTokArr = GetFormulaCompiler().CreateFormula( EXC_FMLATYPE_NAME, rRange ); - return mxImpl->InsertBuiltInName( cBuiltIn, xTokArr, rRange.aStart.Tab() ); + return mxImpl->InsertBuiltInName( cBuiltIn, xTokArr, rRange ); } sal_uInt16 XclExpNameManager::InsertBuiltInName( sal_Unicode cBuiltIn, const ScRangeList& rRangeList ) diff --git a/sc/source/filter/excel/xepivot.cxx b/sc/source/filter/excel/xepivot.cxx index 8139a25b8b08..be8557eac430 100644 --- a/sc/source/filter/excel/xepivot.cxx +++ b/sc/source/filter/excel/xepivot.cxx @@ -538,7 +538,7 @@ void XclExpPCField::InsertNumDateGroupItems( const ScDPObject& rDPObj, const ScD if( const ScSheetSourceDesc* pSrcDesc = rDPObj.GetSheetDesc() ) { // get the string collection with original source elements - ScDPCache* pCache = pSrcDesc->CreateCache(); + const ScDPCache* pCache = pSrcDesc->CreateCache(); if (!pCache) return; diff --git a/sc/source/filter/excel/xiname.cxx b/sc/source/filter/excel/xiname.cxx index eeba8e356f9b..15bf618d8530 100644 --- a/sc/source/filter/excel/xiname.cxx +++ b/sc/source/filter/excel/xiname.cxx @@ -186,7 +186,7 @@ XclImpName::XclImpName( XclImpStream& rStrm, sal_uInt16 nXclNameIdx ) : switch( mcBuiltIn ) { case EXC_BUILTIN_FILTERDATABASE: - GetFilterManager().Insert( &GetOldRoot(), aRange, maScName ); + GetFilterManager().Insert( &GetOldRoot(), aRange); break; case EXC_BUILTIN_CRITERIA: GetFilterManager().AddAdvancedRange( aRange ); diff --git a/sc/source/filter/excel/xipivot.cxx b/sc/source/filter/excel/xipivot.cxx index 0bb694d2b29e..a26b132f198d 100644 --- a/sc/source/filter/excel/xipivot.cxx +++ b/sc/source/filter/excel/xipivot.cxx @@ -1010,8 +1010,12 @@ void XclImpPTField::ConvertPageField( ScDPSaveData& rSaveData ) const DBG_ASSERT( maFieldInfo.mnAxes & EXC_SXVD_AXIS_PAGE, "XclImpPTField::ConvertPageField - no page field" ); if( ScDPSaveDimension* pSaveDim = ConvertRCPField( rSaveData ) ) { - const rtl::OUString aName = *GetItemName( maPageInfo.mnSelItem ); - pSaveDim->SetCurrentPage( &aName ); + const String* pName = GetItemName( maPageInfo.mnSelItem ); + if (pName) + { + const OUString aName(*pName); + pSaveDim->SetCurrentPage(&aName); + } } } diff --git a/sc/source/filter/excel/xltools.cxx b/sc/source/filter/excel/xltools.cxx index 062413de46f8..aba8b38fc340 100644 --- a/sc/source/filter/excel/xltools.cxx +++ b/sc/source/filter/excel/xltools.cxx @@ -469,6 +469,8 @@ String XclTools::GetXclFontName( const String& rFontName ) const String XclTools::maDefNamePrefix( RTL_CONSTASCII_USTRINGPARAM( "Excel_BuiltIn_" ) ); +const String XclTools::maDefNamePrefixXml ( RTL_CONSTASCII_USTRINGPARAM( "_xlnm." ) ); + static const sal_Char* const ppcDefNames[] = { "Consolidate_Area", @@ -504,6 +506,11 @@ String XclTools::GetBuiltInDefName( sal_Unicode cBuiltIn ) return String( maDefNamePrefix ).Append( GetXclBuiltInDefName( cBuiltIn ) ); } +String XclTools::GetBuiltInDefNameXml( sal_Unicode cBuiltIn ) +{ + return String( maDefNamePrefixXml ).Append( GetXclBuiltInDefName( cBuiltIn ) ); +} + sal_Unicode XclTools::GetBuiltInDefNameIndex( const String& rDefName ) { xub_StrLen nPrefixLen = maDefNamePrefix.Len(); diff --git a/sc/source/filter/inc/excimp8.hxx b/sc/source/filter/inc/excimp8.hxx index 65adb65b16e6..923bec596d88 100644 --- a/sc/source/filter/inc/excimp8.hxx +++ b/sc/source/filter/inc/excimp8.hxx @@ -103,7 +103,6 @@ private: sal_Bool bCriteria; sal_Bool bAutoOrAdvanced; ScRange aCriteriaRange; - String aFilterName; void CreateFromDouble( String& rStr, double fVal ); void SetCellAttribs(); @@ -114,8 +113,7 @@ protected: public: XclImpAutoFilterData( RootData* pRoot, - const ScRange& rRange, - const String& rName ); + const ScRange& rRange); inline bool IsActive() const { return bActive; } inline bool IsFiltered() const { return bAutoOrAdvanced; } @@ -131,8 +129,8 @@ public: void SetAdvancedRange( const ScRange* pRange ); void SetExtractPos( const ScAddress& rAddr ); inline void SetAutoOrAdvanced() { bAutoOrAdvanced = sal_True; } - void Apply( const sal_Bool bUseUnNamed = false ); - void CreateScDBData( const sal_Bool bUseUnNamed ); + void Apply(); + void CreateScDBData(); void EnableRemoveFilter(); }; @@ -142,8 +140,6 @@ class XclImpAutoFilterBuffer : private List private: using List::Insert; - sal_uInt16 nAFActiveCount; - inline XclImpAutoFilterData* _First() { return (XclImpAutoFilterData*) List::First(); } inline XclImpAutoFilterData* _Next() { return (XclImpAutoFilterData*) List::Next(); } @@ -154,15 +150,12 @@ public: XclImpAutoFilterBuffer(); virtual ~XclImpAutoFilterBuffer(); - void Insert( RootData* pRoot, const ScRange& rRange, - const String& rName ); + void Insert( RootData* pRoot, const ScRange& rRange); void AddAdvancedRange( const ScRange& rRange ); void AddExtractPos( const ScRange& rRange ); void Apply(); XclImpAutoFilterData* GetByTab( SCTAB nTab ); - inline void IncrementActiveAF() { nAFActiveCount++; } - inline sal_Bool UseUnNamed() { return nAFActiveCount == 1; } }; #endif diff --git a/sc/source/filter/inc/xltools.hxx b/sc/source/filter/inc/xltools.hxx index bfe284f198da..e9e306e2f1c6 100644 --- a/sc/source/filter/inc/xltools.hxx +++ b/sc/source/filter/inc/xltools.hxx @@ -187,6 +187,10 @@ public: @descr Adds a prefix to the representation returned by GetXclBuiltInDefName(). @param cBuiltIn Excel index of the built-in name. */ static String GetBuiltInDefName( sal_Unicode cBuiltIn ); + /** Returns the Excel built-in name with OOXML prefix + @descr Adds the "_xlnm." prefix to the representation returned by GetXclBuiltInDefName() + @param cBuiltIn Excel index of the built in name.*/ + static String GetBuiltInDefNameXml( sal_Unicode cBuiltIn ); /** Returns the Excel built-in name index of the passed defined name from Calc. @descr Ignores any characters following a valid representation of a built-in name. @param pcBuiltIn (out-param) If not 0, the index of the built-in name will be returned here. @@ -245,6 +249,7 @@ public: // ------------------------------------------------------------------------ private: static const String maDefNamePrefix; /// Prefix for built-in defined names. + static const String maDefNamePrefixXml; /// Prefix for built-in defined names for OOX static const String maStyleNamePrefix1; /// Prefix for built-in cell style names. static const String maStyleNamePrefix2; /// Prefix for built-in cell style names from OOX filter. static const String maCFStyleNamePrefix1; /// Prefix for cond. formatting style names. diff --git a/sc/source/filter/xml/XMLExportDataPilot.cxx b/sc/source/filter/xml/XMLExportDataPilot.cxx index 968c37f0e1b5..d0071a9428b2 100644 --- a/sc/source/filter/xml/XMLExportDataPilot.cxx +++ b/sc/source/filter/xml/XMLExportDataPilot.cxx @@ -858,24 +858,24 @@ void ScXMLExportDataPilot::WriteDataPilots(const uno::Reference <sheet::XSpreads case sheet::DataImportMode_NONE : break; case sheet::DataImportMode_QUERY : { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATABASE_NAME, rtl::OUString(pImpSource->aDBName)); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_QUERY_NAME, rtl::OUString(pImpSource->aObject)); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATABASE_NAME, pImpSource->aDBName); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_QUERY_NAME, pImpSource->aObject); SvXMLElementExport aElemID(rExport, XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_QUERY, sal_True, sal_True); rExport.CheckAttrList(); } break; case sheet::DataImportMode_TABLE : { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATABASE_NAME, rtl::OUString(pImpSource->aDBName)); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TABLE_NAME, rtl::OUString(pImpSource->aObject)); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATABASE_NAME, pImpSource->aDBName); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TABLE_NAME, pImpSource->aObject); SvXMLElementExport aElemID(rExport, XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_TABLE, sal_True, sal_True); rExport.CheckAttrList(); } break; case sheet::DataImportMode_SQL : { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATABASE_NAME, rtl::OUString(pImpSource->aDBName)); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SQL_STATEMENT, rtl::OUString(pImpSource->aObject)); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATABASE_NAME, pImpSource->aDBName); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SQL_STATEMENT, pImpSource->aObject); if (!pImpSource->bNative) rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_PARSE_SQL_STATEMENT, XML_TRUE); SvXMLElementExport aElemID(rExport, XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_SQL, sal_True, sal_True); diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 06214774a91e..a7755b840bca 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -1089,7 +1089,7 @@ void ScXMLTableRowCellContext::EndElement() pCellObj->SetFormulaWithGrammar( pOUFormula->first, pOUFormula->second, eGrammar); if (bFormulaTextResult && pOUTextValue && pOUTextValue->getLength()) pCellObj->SetFormulaResultString( *pOUTextValue); - else if (fValue != 0.0) + else pCellObj->SetFormulaResultDouble( fValue); } } diff --git a/sc/source/ui/attrdlg/scabstdlg.cxx b/sc/source/ui/attrdlg/scabstdlg.cxx index 7ab625e03f61..db85484e6228 100644 --- a/sc/source/ui/attrdlg/scabstdlg.cxx +++ b/sc/source/ui/attrdlg/scabstdlg.cxx @@ -48,7 +48,8 @@ ScAbstractDialogFactory* ScAbstractDialogFactory::Create() OUStringBuffer aStrBuf; aStrBuf.appendAscii( SVLIBRARY("scui") ); - if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, aStrBuf.makeStringAndClear() ) ) + if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, aStrBuf.makeStringAndClear(), + SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY ) ) fp = ( ScAbstractDialogFactory* (__LOADONCALLAPI*)() ) aDialogLibrary.getFunctionSymbol( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateDialogFactory")) ); if ( fp ) diff --git a/sc/source/ui/cctrl/dpcontrol.cxx b/sc/source/ui/cctrl/dpcontrol.cxx index 2a5d415410dc..380cdf9cfeef 100644 --- a/sc/source/ui/cctrl/dpcontrol.cxx +++ b/sc/source/ui/cctrl/dpcontrol.cxx @@ -1032,6 +1032,7 @@ ScDPFieldPopupWindow::ScDPFieldPopupWindow(Window* pParent, ScDocument* pDoc) : maChkToggleAll.SetPosSizePixel(aPos, aSize); maChkToggleAll.SetFont(getLabelFont()); maChkToggleAll.SetText(ScRscStrLoader(RID_POPUP_FILTER, STR_BTN_TOGGLE_ALL).GetString()); + maChkToggleAll.SetTextColor(rStyle.GetMenuTextColor()); maChkToggleAll.SetControlBackground(rStyle.GetMenuColor()); maChkToggleAll.SetClickHdl( LINK(this, ScDPFieldPopupWindow, TriStateHdl) ); maChkToggleAll.Show(); diff --git a/sc/source/ui/dbgui/dapidata.cxx b/sc/source/ui/dbgui/dapidata.cxx index 63d11e1141ae..c73d701a6eb9 100644 --- a/sc/source/ui/dbgui/dapidata.cxx +++ b/sc/source/ui/dbgui/dapidata.cxx @@ -130,7 +130,7 @@ void ScDataPilotDatabaseDlg::GetValues( ScImportSourceDesc& rDesc ) rDesc.aDBName = aLbDatabase.GetSelectEntry(); rDesc.aObject = aCbObject.GetText(); - if ( !rDesc.aDBName.Len() || !rDesc.aObject.Len() ) + if (rDesc.aDBName.isEmpty() || rDesc.aObject.isEmpty()) rDesc.nType = sheet::DataImportMode_NONE; else if ( nSelect == DP_TYPELIST_TABLE ) rDesc.nType = sheet::DataImportMode_TABLE; diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index e9376dd15668..c9d600f34d9c 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -4344,17 +4344,14 @@ sal_Bool ScDocFunc::MergeCells( const ScCellMergeOption& rOption, sal_Bool bCont for( aPos.SetRow( nStartRow ); !bHasNotes && (aPos.Row() <= nEndRow); aPos.IncRow() ) bHasNotes = ((aPos.Col() != nStartCol) || (aPos.Row() != nStartRow)) && (pDoc->GetNote( aPos ) != 0); - if (bNeedContents || bHasNotes || rOption.mbCenter) + if (!pUndoDoc) { - if (!pUndoDoc) - { - pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); - pUndoDoc->InitUndo(pDoc, nTab1, nTab2); - } - // note captions are collected by drawing undo - pDoc->CopyToDocument( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, - IDF_ALL|IDF_NOCAPTIONS, false, pUndoDoc ); + pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); + pUndoDoc->InitUndo(pDoc, nTab1, nTab2); } + // note captions are collected by drawing undo + pDoc->CopyToDocument( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, + IDF_ALL|IDF_NOCAPTIONS, false, pUndoDoc ); if( bHasNotes ) pDoc->BeginDrawUndo(); } diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx index 6fabe3684d6c..060969fc2c63 100644 --- a/sc/source/ui/docshell/impex.cxx +++ b/sc/source/ui/docshell/impex.cxx @@ -2086,7 +2086,7 @@ ScFormatFilterPlugin &ScFormatFilter::Get() ::rtl::OUString sFilterLib(RTL_CONSTASCII_USTRINGPARAM(SVLIBRARY("scfilt"))); static ::osl::Module aModule; - bool bLoaded = aModule.loadRelative(&thisModule, sFilterLib); + bool bLoaded = aModule.loadRelative(&thisModule, sFilterLib, SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY); if (!bLoaded) bLoaded = aModule.load(sFilterLib); if (bLoaded) diff --git a/sc/source/ui/vba/vbaworksheet.cxx b/sc/source/ui/vba/vbaworksheet.cxx index 87fb2e9a07e3..4152fb0fd412 100644 --- a/sc/source/ui/vba/vbaworksheet.cxx +++ b/sc/source/ui/vba/vbaworksheet.cxx @@ -108,6 +108,8 @@ #include "vbasheetobjects.hxx" #include "viewuno.hxx" +#include "attrib.hxx" + #define STANDARDWIDTH 2267 #define STANDARDHEIGHT 427 #define DOESNOTEXIST -1 @@ -444,38 +446,39 @@ ScVbaWorksheet::setEnableSelection( sal_Int32 nSelection ) throw (uno::RuntimeEx } -uno::Reference< beans::XPropertySet > ScVbaWorksheet::getFirstDBRangeProperties() throw (uno::RuntimeException) -{ - uno::Reference< beans::XPropertySet > xModelProps( mxModel, uno::UNO_QUERY_THROW ); - uno::Reference< container::XIndexAccess > xDBRangesIA( xModelProps->getPropertyValue( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DatabaseRanges" ) ) ), uno::UNO_QUERY_THROW ); - - for( sal_Int32 nIndex = 0, nCount = xDBRangesIA->getCount(); nIndex < nCount; ++nIndex ) - { - uno::Reference< sheet::XCellRangeReferrer > xDBRange( xDBRangesIA->getByIndex( nIndex ), uno::UNO_QUERY_THROW ); - // check if the database area is on this sheet - uno::Reference< sheet::XCellRangeAddressable > xRangeAddr( xDBRange->getReferredCells(), uno::UNO_QUERY_THROW ); - if( getSheetID() == xRangeAddr->getRangeAddress().Sheet ) - return uno::Reference< beans::XPropertySet >( xDBRange, uno::UNO_QUERY_THROW ); - } - return uno::Reference< beans::XPropertySet >(); -} - sal_Bool SAL_CALL ScVbaWorksheet::getAutoFilterMode() throw (uno::RuntimeException) { - uno::Reference< beans::XPropertySet > xDBRangeProps = getFirstDBRangeProperties(); - sal_Bool bAutoFilterMode = false; - return - xDBRangeProps.is() && - (xDBRangeProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AutoFilter" ) ) ) >>= bAutoFilterMode) && - bAutoFilterMode; + uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW ); + ScDocument* pDoc = excel::getDocShell( xModel )->GetDocument(); + ScDBData* pDBData = pDoc->GetAnonymousDBData(getSheetID()); + if (pDBData) + return pDBData->HasAutoFilter(); + return false; } void SAL_CALL ScVbaWorksheet::setAutoFilterMode( sal_Bool bAutoFilterMode ) throw (uno::RuntimeException) { - uno::Reference< beans::XPropertySet > xDBRangeProps = getFirstDBRangeProperties(); - if( xDBRangeProps.is() ) - xDBRangeProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AutoFilter" ) ), uno::Any( bAutoFilterMode ) ); + uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW ); + ScDocShell* pDocShell = excel::getDocShell( xModel ); + ScDocument* pDoc = pDocShell->GetDocument(); + ScDBData* pDBData = pDoc->GetAnonymousDBData(getSheetID()); + if (pDBData) + { + pDBData->SetAutoFilter(bAutoFilterMode); + ScRange aRange; + pDBData->GetArea(aRange); + if (bAutoFilterMode && pDoc) + pDoc->ApplyFlagsTab( aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aStart.Row(), + aRange.aStart.Tab(), SC_MF_AUTO ); + else if (!bAutoFilterMode && pDoc) + pDoc->RemoveFlagsTab(aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aStart.Row(), + aRange.aStart.Tab(), SC_MF_AUTO ); + ScRange aPaintRange(aRange.aStart, aRange.aEnd); + aPaintRange.aEnd.SetRow(aPaintRange.aStart.Row()); + pDocShell->PostPaint(aPaintRange, PAINT_GRID); + } } uno::Reference< excel::XRange > diff --git a/sc/source/ui/vba/vbaworksheet.hxx b/sc/source/ui/vba/vbaworksheet.hxx index 2736083a8561..95c933e0b7c0 100644 --- a/sc/source/ui/vba/vbaworksheet.hxx +++ b/sc/source/ui/vba/vbaworksheet.hxx @@ -72,8 +72,6 @@ class ScVbaWorksheet : public WorksheetImpl_BASE css::uno::Reference< css::container::XNameAccess > getFormControls(); css::uno::Any getControlShape( const rtl::OUString& sName ); - css::uno::Reference< css::beans::XPropertySet > getFirstDBRangeProperties() throw (css::uno::RuntimeException); - protected: ScVbaWorksheet( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext ); diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index d2e185d05b47..e8e5baafb1f7 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -72,6 +72,8 @@ #include "dbdocfun.hxx" #include "dpoutput.hxx" #include "dptabsrc.hxx" +#include "dpshttab.hxx" +#include "dpsdbtab.hxx" #include "editable.hxx" #include "docpool.hxx" #include "patattr.hxx" @@ -697,13 +699,47 @@ void ScDBFunc::RecalcPivotTable() ScDocShell* pDocSh = GetViewData()->GetDocShell(); ScDocument* pDoc = GetViewData()->GetDocument(); - // old pivot not used any more - + ScDPCollection* pDPs = pDoc->GetDPCollection(); ScDPObject* pDPObj = pDoc->GetDPAtCursor( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); - if ( pDPObj ) + if (pDPs && pDPObj) { + // Remove existing data cache for the data that this datapilot uses, + // to force re-build data cache. + if (pDPObj->IsSheetData()) + { + // data source is internal sheet. + const ScSheetSourceDesc* pDesc = pDPObj->GetSheetDesc(); + if (!pDesc) + { + ErrorMessage(STR_PIVOT_NOTFOUND); + return; + } + if (pDesc->HasRangeName()) + { + ScDPCollection::NameCaches& rCaches = pDPs->GetNameCaches(); + rCaches.removeCache(pDesc->GetRangeName()); + } + else + { + ScDPCollection::SheetCaches& rCaches = pDPs->GetSheetCaches(); + rCaches.removeCache(pDesc->GetSourceRange()); + } + } + else if (pDPObj->IsImportData()) + { + // data source is external database. + const ScImportSourceDesc* pDesc = pDPObj->GetImportSourceDesc(); + if (!pDesc) + { + ErrorMessage(STR_PIVOT_NOTFOUND); + return; + } + ScDPCollection::DBCaches& rCaches = pDPs->GetDBCaches(); + rCaches.removeCache(pDesc->GetCommandType(), pDesc->aDBName, pDesc->aObject); + } + ScDBDocFunc aFunc( *pDocSh ); aFunc.DataPilotUpdate( pDPObj, pDPObj, true, false ); CursorPosChanged(); // shells may be switched diff --git a/scp2/source/writer/module_writer.scp b/scp2/source/writer/module_writer.scp index 3071059f282b..e66214bbc71c 100644 --- a/scp2/source/writer/module_writer.scp +++ b/scp2/source/writer/module_writer.scp @@ -51,6 +51,7 @@ Module gid_Module_Prg_Wrt_Bin gid_File_Lib_Wpft, gid_File_Lib_Msworks, gid_File_Lib_T602Filter, + gid_File_Lib_Writerfilter, gid_File_Lib_Wlwp, gid_File_Share_Config_Sofficecfg_Writer_Menubar_Xml, gid_File_Share_Config_Sofficecfg_Writerweb_Menubar_Xml, diff --git a/sd/source/filter/eppt/epptso.cxx b/sd/source/filter/eppt/epptso.cxx index 0466af7e6418..5b904608da9c 100644 --- a/sd/source/filter/eppt/epptso.cxx +++ b/sd/source/filter/eppt/epptso.cxx @@ -772,7 +772,7 @@ void PPTWriter::ImplWriteParagraphs( SvStream& rOut, TextObj& rTextObj ) } else { - if ( pPortion && pPortion->mnCharHeight > (sal_uInt16)( ((double)-nLineSpacing) * 0.001 * 72.0 / 2.54 ) ) // 1/100mm to point + if ( !pPara->mbFixedLineSpacing && pPortion && pPortion->mnCharHeight > (sal_uInt16)( ((double)-nLineSpacing) * 0.001 * 72.0 / 2.54 ) ) // 1/100mm to point nLineSpacing = nNormalSpacing; else nLineSpacing = (sal_Int16)( (double)nLineSpacing / 4.40972 ); diff --git a/sd/source/filter/eppt/pptx-text.cxx b/sd/source/filter/eppt/pptx-text.cxx index abc9755be9af..9b2ca2925bc2 100644 --- a/sd/source/filter/eppt/pptx-text.cxx +++ b/sd/source/filter/eppt/pptx-text.cxx @@ -1118,11 +1118,15 @@ void ParagraphObj::ImplGetParagraphValues( PPTExBulletProvider& rBuProv, sal_Boo = *( (::com::sun::star::style::LineSpacing*)mAny.getValue() ); switch ( aLineSpacing.Mode ) { + case ::com::sun::star::style::LineSpacingMode::FIX : + mnLineSpacing = (sal_Int16)(-( aLineSpacing.Height ) ); + mbFixedLineSpacing = sal_True; + break; case ::com::sun::star::style::LineSpacingMode::MINIMUM : case ::com::sun::star::style::LineSpacingMode::LEADING : - case ::com::sun::star::style::LineSpacingMode::FIX : mnLineSpacing = (sal_Int16)(-( aLineSpacing.Height ) ); - break; + mbFixedLineSpacing = sal_False; + break; case ::com::sun::star::style::LineSpacingMode::PROP : default: diff --git a/sd/source/filter/ppt/propread.cxx b/sd/source/filter/ppt/propread.cxx index 150acf381c4d..961c779a95a0 100644 --- a/sd/source/filter/ppt/propread.cxx +++ b/sd/source/filter/ppt/propread.cxx @@ -503,8 +503,12 @@ void Section::Read( SvStorageStream *pStrm ) break; case VT_LPWSTR : + { *pStrm >> nTemp; - nPropSize += ( nTemp << 1 ) + 4; + // looks like these are aligned to 4 bytes + sal_uInt32 nLength = nPropOfs + nSecOfs + nPropSize + ( nTemp << 1 ) + 4; + nPropSize += ( nTemp << 1 ) + 4 + (nLength % 4); + } break; case VT_BLOB_OBJECT : @@ -540,6 +544,9 @@ void Section::Read( SvStorageStream *pStrm ) break; } pStrm->Seek( nPropOfs + nSecOfs ); + // make sure we don't overflow the section size + if( nPropSize > nSecSize - nSecOfs ) + nPropSize = nSecSize - nSecOfs; sal_uInt8* pBuf = new sal_uInt8[ nPropSize ]; pStrm->Read( pBuf, nPropSize ); AddProperty( nPropId, pBuf, nPropSize ); diff --git a/sd/source/filter/sdfilter.cxx b/sd/source/filter/sdfilter.cxx index c92ccfb06351..56b13fe9247c 100644 --- a/sd/source/filter/sdfilter.cxx +++ b/sd/source/filter/sdfilter.cxx @@ -93,7 +93,8 @@ extern "C" { static void SAL_CALL thisModule() {} } ::osl::Module* SdFilter::OpenLibrary( const ::rtl::OUString& rLibraryName ) const { std::auto_ptr< osl::Module > mod(new osl::Module); - return mod->loadRelative(&thisModule, ImplGetFullLibraryName(rLibraryName)) + return mod->loadRelative(&thisModule, ImplGetFullLibraryName(rLibraryName), + SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY) ? mod.release() : 0; } diff --git a/sd/source/ui/dlg/paragr.cxx b/sd/source/ui/dlg/paragr.cxx index 75b21600b07b..36751843fb0f 100644 --- a/sd/source/ui/dlg/paragr.cxx +++ b/sd/source/ui/dlg/paragr.cxx @@ -192,4 +192,18 @@ SdParagraphDlg::SdParagraphDlg( Window* pParent, const SfxItemSet* pAttr ) AddTabPage( RID_SVXPAGE_TABULATOR ); } +void SdParagraphDlg::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) +{ + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + switch( nId ) + { + case RID_SVXPAGE_STD_PARAGRAPH: + aSet.Put(SfxUInt32Item(SID_SVXSTDPARAGRAPHTABPAGE_ABSLINEDIST, MM50/2)); + rPage.PageCreated(aSet); + break; + default: + break; + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/dlg/sdabstdlg.cxx b/sd/source/ui/dlg/sdabstdlg.cxx index e9497cc3ea26..e7e504bd5456 100644 --- a/sd/source/ui/dlg/sdabstdlg.cxx +++ b/sd/source/ui/dlg/sdabstdlg.cxx @@ -43,7 +43,8 @@ SdAbstractDialogFactory* SdAbstractDialogFactory::Create() { SdFuncPtrCreateDialogFactory fp = 0; static ::osl::Module aDialogLibrary; - if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, String( RTL_CONSTASCII_USTRINGPARAM( DLL_NAME ) ) ) ) + if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, String( RTL_CONSTASCII_USTRINGPARAM( DLL_NAME ) ), + SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY ) ) fp = ( SdAbstractDialogFactory* (__LOADONCALLAPI*)() ) aDialogLibrary.getFunctionSymbol( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateDialogFactory")) ); if ( fp ) diff --git a/sd/source/ui/inc/paragr.hxx b/sd/source/ui/inc/paragr.hxx index af801492672d..89d77c7b9d54 100644 --- a/sd/source/ui/inc/paragr.hxx +++ b/sd/source/ui/inc/paragr.hxx @@ -44,6 +44,8 @@ class SdParagraphDlg : public SfxTabDialog private: const SfxItemSet& rOutAttrs; + virtual void PageCreated( sal_uInt16 nId, SfxTabPage &rPage ); + public: SdParagraphDlg( Window* pParent, const SfxItemSet* pAttr ); ~SdParagraphDlg() {}; diff --git a/sd/source/ui/slideshow/slideshowviewimpl.cxx b/sd/source/ui/slideshow/slideshowviewimpl.cxx index 0d0673d84414..1566e81c92e3 100644 --- a/sd/source/ui/slideshow/slideshowviewimpl.cxx +++ b/sd/source/ui/slideshow/slideshowviewimpl.cxx @@ -353,11 +353,7 @@ geometry::AffineMatrix2D SAL_CALL SlideShowView::getTransformation( ) throw (Ru return geometry::AffineMatrix2D (1,0,0,0,1,0); } - // Reduce available width by one, as the slides might actually - // render one pixel wider and higher as aPageSize below specifies - // (when shapes of page size have visible border lines) - const Size aWindowSize( rTmpSize.Width()-1, - rTmpSize.Height()-1 ); + const Size aWindowSize( mrOutputWindow.GetSizePixel() ); Size aOutputSize( aWindowSize ); if( meAnimationMode != ANIMATIONMODE_SHOW ) @@ -384,6 +380,12 @@ geometry::AffineMatrix2D SAL_CALL SlideShowView::getTransformation( ) throw (Ru Point aOutputOffset( ( aWindowSize.Width() - aOutputSize.Width() ) >> 1, ( aWindowSize.Height() - aOutputSize.Height() ) >> 1 ); + // Reduce available width by one, as the slides might actually + // render one pixel wider and higher as aPageSize below specifies + // (when shapes of page size have visible border lines) + aOutputSize.Width() --; + aOutputSize.Height() --; + maPresentationArea = Rectangle( aOutputOffset, aOutputSize ); mrOutputWindow.SetPresentationArea( maPresentationArea ); diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 9d3cc6f343f7..b9f86d91fb88 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -1942,7 +1942,9 @@ void SAL_CALL SdXImpressDocument::render( sal_Int32 nRenderer, const uno::Any& r // if necessary, the master page interactions will be exported first sal_Bool bIsBackgroundObjectsVisible = sal_False; // #i39428# IsBackgroundObjectsVisible not available for Draw const rtl::OUString sIsBackgroundObjectsVisible( RTL_CONSTASCII_USTRINGPARAM( "IsBackgroundObjectsVisible" ) ); - if ( mbImpressDoc && ( xPagePropSet->getPropertyValue( sIsBackgroundObjectsVisible ) >>= bIsBackgroundObjectsVisible ) && bIsBackgroundObjectsVisible ) + if ( xPagePropSet->getPropertySetInfo( )->hasPropertyByName( sIsBackgroundObjectsVisible ) ) + xPagePropSet->getPropertyValue( sIsBackgroundObjectsVisible ) >>= bIsBackgroundObjectsVisible; + if ( mbImpressDoc && bIsBackgroundObjectsVisible ) { uno::Reference< drawing::XMasterPageTarget > xMasterPageTarget( xPage, uno::UNO_QUERY ); if ( xMasterPageTarget.is() ) @@ -1981,82 +1983,93 @@ void SAL_CALL SdXImpressDocument::render( sal_Int32 nRenderer, const uno::Any& r const rtl::OUString sSpeed ( RTL_CONSTASCII_USTRINGPARAM( "Speed" ) ); sal_Int32 nTime = 800; presentation::AnimationSpeed aAs; - aAny = xPagePropSet->getPropertyValue( sSpeed ); - if ( aAny >>= aAs ) + if ( xPagePropSet->getPropertySetInfo( )->hasPropertyByName( sSpeed ) ) { - switch( aAs ) + aAny = xPagePropSet->getPropertyValue( sSpeed ); + if ( aAny >>= aAs ) { - case presentation::AnimationSpeed_SLOW : nTime = 1500; break; - case presentation::AnimationSpeed_FAST : nTime = 300; break; - default: - case presentation::AnimationSpeed_MEDIUM : nTime = 800; + switch( aAs ) + { + case presentation::AnimationSpeed_SLOW : nTime = 1500; break; + case presentation::AnimationSpeed_FAST : nTime = 300; break; + default: + case presentation::AnimationSpeed_MEDIUM : nTime = 800; + } } } presentation::FadeEffect eFe; - aAny = xPagePropSet->getPropertyValue( sEffect ); vcl::PDFWriter::PageTransition eType = vcl::PDFWriter::Regular; - if ( aAny >>= eFe ) + if ( xPagePropSet->getPropertySetInfo( )->hasPropertyByName( sEffect ) ) { - switch( eFe ) + aAny = xPagePropSet->getPropertyValue( sEffect ); + if ( aAny >>= eFe ) { - case presentation::FadeEffect_HORIZONTAL_LINES : - case presentation::FadeEffect_HORIZONTAL_CHECKERBOARD : - case presentation::FadeEffect_HORIZONTAL_STRIPES : eType = vcl::PDFWriter::BlindsHorizontal; break; - - case presentation::FadeEffect_VERTICAL_LINES : - case presentation::FadeEffect_VERTICAL_CHECKERBOARD : - case presentation::FadeEffect_VERTICAL_STRIPES : eType = vcl::PDFWriter::BlindsVertical; break; - - case presentation::FadeEffect_UNCOVER_TO_RIGHT : - case presentation::FadeEffect_UNCOVER_TO_UPPERRIGHT : - case presentation::FadeEffect_ROLL_FROM_LEFT : - case presentation::FadeEffect_FADE_FROM_UPPERLEFT : - case presentation::FadeEffect_MOVE_FROM_UPPERLEFT : - case presentation::FadeEffect_FADE_FROM_LEFT : - case presentation::FadeEffect_MOVE_FROM_LEFT : eType = vcl::PDFWriter::WipeLeftToRight; break; - - case presentation::FadeEffect_UNCOVER_TO_BOTTOM : - case presentation::FadeEffect_UNCOVER_TO_LOWERRIGHT : - case presentation::FadeEffect_ROLL_FROM_TOP : - case presentation::FadeEffect_FADE_FROM_UPPERRIGHT : - case presentation::FadeEffect_MOVE_FROM_UPPERRIGHT : - case presentation::FadeEffect_FADE_FROM_TOP : - case presentation::FadeEffect_MOVE_FROM_TOP : eType = vcl::PDFWriter::WipeTopToBottom; break; - - case presentation::FadeEffect_UNCOVER_TO_LEFT : - case presentation::FadeEffect_UNCOVER_TO_LOWERLEFT : - case presentation::FadeEffect_ROLL_FROM_RIGHT : - - case presentation::FadeEffect_FADE_FROM_LOWERRIGHT : - case presentation::FadeEffect_MOVE_FROM_LOWERRIGHT : - case presentation::FadeEffect_FADE_FROM_RIGHT : - case presentation::FadeEffect_MOVE_FROM_RIGHT : eType = vcl::PDFWriter::WipeRightToLeft; break; - - case presentation::FadeEffect_UNCOVER_TO_TOP : - case presentation::FadeEffect_UNCOVER_TO_UPPERLEFT : - case presentation::FadeEffect_ROLL_FROM_BOTTOM : - case presentation::FadeEffect_FADE_FROM_LOWERLEFT : - case presentation::FadeEffect_MOVE_FROM_LOWERLEFT : - case presentation::FadeEffect_FADE_FROM_BOTTOM : - case presentation::FadeEffect_MOVE_FROM_BOTTOM : eType = vcl::PDFWriter::WipeBottomToTop; break; - - case presentation::FadeEffect_OPEN_VERTICAL : eType = vcl::PDFWriter::SplitHorizontalInward; break; - case presentation::FadeEffect_CLOSE_HORIZONTAL : eType = vcl::PDFWriter::SplitHorizontalOutward; break; - - case presentation::FadeEffect_OPEN_HORIZONTAL : eType = vcl::PDFWriter::SplitVerticalInward; break; - case presentation::FadeEffect_CLOSE_VERTICAL : eType = vcl::PDFWriter::SplitVerticalOutward; break; - - case presentation::FadeEffect_FADE_TO_CENTER : eType = vcl::PDFWriter::BoxInward; break; - case presentation::FadeEffect_FADE_FROM_CENTER : eType = vcl::PDFWriter::BoxOutward; break; - - case presentation::FadeEffect_NONE : eType = vcl::PDFWriter::Regular; break; - - case presentation::FadeEffect_RANDOM : - case presentation::FadeEffect_DISSOLVE : - default: eType = vcl::PDFWriter::Dissolve; break; + switch( eFe ) + { + case presentation::FadeEffect_HORIZONTAL_LINES : + case presentation::FadeEffect_HORIZONTAL_CHECKERBOARD : + case presentation::FadeEffect_HORIZONTAL_STRIPES : eType = vcl::PDFWriter::BlindsHorizontal; break; + + case presentation::FadeEffect_VERTICAL_LINES : + case presentation::FadeEffect_VERTICAL_CHECKERBOARD : + case presentation::FadeEffect_VERTICAL_STRIPES : eType = vcl::PDFWriter::BlindsVertical; break; + + case presentation::FadeEffect_UNCOVER_TO_RIGHT : + case presentation::FadeEffect_UNCOVER_TO_UPPERRIGHT : + case presentation::FadeEffect_ROLL_FROM_LEFT : + case presentation::FadeEffect_FADE_FROM_UPPERLEFT : + case presentation::FadeEffect_MOVE_FROM_UPPERLEFT : + case presentation::FadeEffect_FADE_FROM_LEFT : + case presentation::FadeEffect_MOVE_FROM_LEFT : eType = vcl::PDFWriter::WipeLeftToRight; break; + + case presentation::FadeEffect_UNCOVER_TO_BOTTOM : + case presentation::FadeEffect_UNCOVER_TO_LOWERRIGHT : + case presentation::FadeEffect_ROLL_FROM_TOP : + case presentation::FadeEffect_FADE_FROM_UPPERRIGHT : + case presentation::FadeEffect_MOVE_FROM_UPPERRIGHT : + case presentation::FadeEffect_FADE_FROM_TOP : + case presentation::FadeEffect_MOVE_FROM_TOP : eType = vcl::PDFWriter::WipeTopToBottom; break; + + case presentation::FadeEffect_UNCOVER_TO_LEFT : + case presentation::FadeEffect_UNCOVER_TO_LOWERLEFT : + case presentation::FadeEffect_ROLL_FROM_RIGHT : + + case presentation::FadeEffect_FADE_FROM_LOWERRIGHT : + case presentation::FadeEffect_MOVE_FROM_LOWERRIGHT : + case presentation::FadeEffect_FADE_FROM_RIGHT : + case presentation::FadeEffect_MOVE_FROM_RIGHT : eType = vcl::PDFWriter::WipeRightToLeft; break; + + case presentation::FadeEffect_UNCOVER_TO_TOP : + case presentation::FadeEffect_UNCOVER_TO_UPPERLEFT : + case presentation::FadeEffect_ROLL_FROM_BOTTOM : + case presentation::FadeEffect_FADE_FROM_LOWERLEFT : + case presentation::FadeEffect_MOVE_FROM_LOWERLEFT : + case presentation::FadeEffect_FADE_FROM_BOTTOM : + case presentation::FadeEffect_MOVE_FROM_BOTTOM : eType = vcl::PDFWriter::WipeBottomToTop; break; + + case presentation::FadeEffect_OPEN_VERTICAL : eType = vcl::PDFWriter::SplitHorizontalInward; break; + case presentation::FadeEffect_CLOSE_HORIZONTAL : eType = vcl::PDFWriter::SplitHorizontalOutward; break; + + case presentation::FadeEffect_OPEN_HORIZONTAL : eType = vcl::PDFWriter::SplitVerticalInward; break; + case presentation::FadeEffect_CLOSE_VERTICAL : eType = vcl::PDFWriter::SplitVerticalOutward; break; + + case presentation::FadeEffect_FADE_TO_CENTER : eType = vcl::PDFWriter::BoxInward; break; + case presentation::FadeEffect_FADE_FROM_CENTER : eType = vcl::PDFWriter::BoxOutward; break; + + case presentation::FadeEffect_NONE : eType = vcl::PDFWriter::Regular; break; + + case presentation::FadeEffect_RANDOM : + case presentation::FadeEffect_DISSOLVE : + default: eType = vcl::PDFWriter::Dissolve; break; + } } } - pPDFExtOutDevData->SetPageTransition( eType, nTime, -1 ); + + if ( xPagePropSet->getPropertySetInfo( )->hasPropertyByName( sEffect ) || + xPagePropSet->getPropertySetInfo( )->hasPropertyByName( sSpeed ) ) + { + pPDFExtOutDevData->SetPageTransition( eType, nTime, -1 ); + } } } } @@ -2103,7 +2116,7 @@ void SAL_CALL SdXImpressDocument::render( sal_Int32 nRenderer, const uno::Any& r } //<--- #i56629, #i40318 } - catch( uno::Exception& ) + catch( uno::Exception& e ) { } diff --git a/set_soenv.in b/set_soenv.in index 01865ded5f8a..a1bd947380de 100755 --- a/set_soenv.in +++ b/set_soenv.in @@ -70,10 +70,11 @@ my ( $BIG_SVX, $COM, $ARCH, $CPU, $CPUNAME, $CVER, $GLIBC, $GUI, $GUIBASE, my ( $USR, $ETC, $BIN, $LIB, $LIB64, $INC, $INCLUDE, $DEV, $OPT, $LOCAL, $SOLENV, $SOLVER, $CONFIG, $DEFIMGS, $USR_BIN, $USR_LIB, $USR_LOCAL, $USR_CCS, $JAVA_BIN, $JAVA_LIB, $JAVA_INCLUDE, $SOLARENVINC, $USR_DT, $USR_OPENWIN, $XLIB, $XINC, - $CYGWIN_PATH, $language, $dict, $ASM_PATH, $NSIS_PATH, $PERL_PATH, $CL_X64 ); + $CYGWIN_PATH, $language, @languages, $ASM_PATH, $NSIS_PATH, $PERL_PATH, $CL_X64 ); # Environment variables. my ( $oldPATH, $SRC_ROOT, $SO_HOME, $JAVA_HOME, $JDK, $JAVAFLAGS, $OOO_SHELL, + $L10N_MODULE, $WITH_POOR_HELP_LOCALIZATIONS, $UPD, $WORK_STAMP, $gb_REPOS, $BUILD_TYPE, $SOLARSRC, $DEVROOT, $SOLARVER, $SOLARVERSION, $WORKDIR, $OUTDIR, $SOLARENV, $SOLARDEFIMG, $STAR_INIROOT, $STAR_INIROOTOLD, $STAR_STANDLST, $STAR_SSCOMMON, $STAR_SSOLARINI, @@ -1062,6 +1063,23 @@ $CLASSPATH = '$JAVA_HOME'.$ds.'jre'.$LIB.$ds."rt.jar".$wps.'.'; # see above for why the change $XCLASSPATH = '$JAVA_HOME'.$ds.'jre'.$LIB.$ds."rt.jar".$wps.'.'; +# Location of the translations module +$L10N_MODULE = PathFormat($SRC_ROOT."/translations"); + +# Check for poor help localizations, i.e. no help translation at all... +opendir(DIR,$L10N_MODULE . "/source"); +@languages = readdir(DIR); +closedir(DIR); +$WITH_POOR_HELP_LOCALIZATIONS = ""; + +foreach $language (@languages) +{ + if ( ($language ne ".") && ($language ne "..") && (! -d $L10N_MODULE . "/source/" . $language . "/helpcontent2") ) + { + $WITH_POOR_HELP_LOCALIZATIONS = $WITH_POOR_HELP_LOCALIZATIONS . " " . $language; + } +} + # Location used by the linker to create libraries. if ($platform =~ m/solaris/) { $SOLAREXTRALIB = $L.$par_dir.$LIB. @@ -1555,6 +1573,7 @@ CreateFileHeader( *OUT, $UPD, $platform, "sh/bash/ksh", "#" ); ToFile( "SRC_ROOT", $SRC_ROOT, "e" ); ToFile( "OOO_SHELL", $OOO_SHELL, "e" ); ToFile( "JAVA_HOME", $JAVA_HOME, "e" ); +ToFile( "L10N_MODULE", $L10N_MODULE, "e" ); ToFile( "ANT_HOME", PathFormat("@ANT_HOME@"), "e" ); ToFile( "ANT_LIB", PathFormat("@ANT_LIB@"), "e" ); ToFile( "ANT", PathFormat("@ANT@"), "e" ); @@ -1574,7 +1593,7 @@ ToFile( "INTRO_BITMAP", "@INTRO_BITMAP@", "e" ); ToFile( "ABOUT_BITMAP", "@ABOUT_BITMAP@", "e" ); ToFile( "OOO_VENDOR", "@OOO_VENDOR@", "e" ); ToFile( "OOODMAKEMODE", "YES", "e" ); -ToFile( "WITH_POOR_HELP_LOCALIZATIONS", "@WITH_POOR_HELP_LOCALIZATIONS@", "e" ); +ToFile( "WITH_POOR_HELP_LOCALIZATIONS", $WITH_POOR_HELP_LOCALIZATIONS, "e" ); ToFile( "CALL_CDECL", $CALL_CDECL, "e" ); ToFile( "COMMON_OUTDIR", $COMMON_OUTDIR, "e" ); @@ -1939,6 +1958,7 @@ ToFile( "DB_LIB", "@DB_LIB@", "e" ); ToFile( "DB_CPPLIB", "@DB_CPPLIB@", "e" ); ToFile( "DB_INCLUDES", "@DB_INCLUDES@", "e" ); ToFile( "ENABLE_MYSQLC", "@ENABLE_MYSQLC@", "e" ); +ToFile( "ENABLE_LOMENUBAR", "@ENABLE_LOMENUBAR@", "e" ); ToFile( "SYSTEM_MYSQL", "@SYSTEM_MYSQL@", "e" ); ToFile( "SYSTEM_MYSQL_CPPCONN","@SYSTEM_MYSQL_CPPCONN@","e" ); ToFile( "MYSQL_INC", "@MYSQL_INC@", "e" ); diff --git a/setup_native/source/mac/ooo/DS_Store b/setup_native/source/mac/ooo/DS_Store Binary files differindex af137c0e6c41..4f65b8132b00 100644 --- a/setup_native/source/mac/ooo/DS_Store +++ b/setup_native/source/mac/ooo/DS_Store diff --git a/setup_native/source/mac/ooo/DS_Store_Langpack b/setup_native/source/mac/ooo/DS_Store_Langpack Binary files differindex 21b08ffb18cc..3a8ad71a5660 100644 --- a/setup_native/source/mac/ooo/DS_Store_Langpack +++ b/setup_native/source/mac/ooo/DS_Store_Langpack diff --git a/setup_native/source/packinfo/spellchecker_selection.txt b/setup_native/source/packinfo/spellchecker_selection.txt index f5344b9860ef..34ea3b29e4a3 100644 --- a/setup_native/source/packinfo/spellchecker_selection.txt +++ b/setup_native/source/packinfo/spellchecker_selection.txt @@ -8,47 +8,107 @@ # shall be included into the language pack, the keyword "EMPTY" can # be used as first entry. -af = "af,en-US" -ar = "EMPTY,en-US" -ca = "ca,es,en-US,fr" -cs = "cs,en-US" -da = "da,de-DE,en-US" -de = "de-DE,de-AT,de-CH,en-US,fr,it" -en-US = "en-US,es,fr" -en-GB = "en-US,es,fr" -es = "es,en-US,fr,pt" -et = "et,en-US" -fr = "fr,en-US,es" -gl = "gl,en-US,pt,es" -he = "he,en-US" -hu = "hu,de-DE,en-US" -hr = "hr,de-DE,en-US" -it = "it,de-DE,en-US,fr" -ja = "EMPTY,en-US" -ko = "EMPTY,en-US" -ku = "ku-TR,en-US" -lt = "lt,en-US" -nb = "no,en-US,fr,de-DE,es" -ne = "ne,en-US" -nl = "nl,en-US,fr,de-DE" -nn = "no,en-US,fr,de-DE,es" -oc = "oc,fr,en-US" -pl = "pl,de-DE,en-US,ru" -pt-BR = "pt,en-US,es" -pt = "pt,en-US,es" -ro = "ro,en-US,de-DE,hu" -ru = "ru,de-DE,en-US" -sk = "sk,en-US" -sl = "sl,en-US" -sv = "sv,de-DE,en-US" -sr = "sr,en-US" -# ! Note the package 'sr' also holds the dictionaries for 'sh' ! -sh = "sr,en-US" -sw = "sw,en-US" -th = "th,en-US" -uk = "uk,ru,en-US" -vi = "vi,en-US,fr" -zh-TW = "EMPTY,en-US" -zh-CN = "EMPTY,en-US" -zu = "zu,en-US" - +af = "EMPTY" +ar = "EMPTY" +as = "EMPTY" +ast = "EMPTY" +be = "EMPTY" +bg = "EMPTY" +bn = "EMPTY" +bo = "EMPTY" +br = "EMPTY" +brx = "EMPTY" +bs = "EMPTY" +ca = "EMPTY" +ca-XV = "EMPTY" +cs = "EMPTY" +cy = "EMPTY" +da = "EMPTY" +de = "EMPTY" +dgo = "EMPTY" +dz = "EMPTY" +el = "EMPTY" +en-GB = "EMPTY" +en-US = "en,af,br,ca,cs,da,de-AT,de-CH,de-DE,es,et,fr,gl,he,hr,hu,it,ku-TR,lt,ne,nl,no,oc,pl,pt,ro,ru,sk,sl,sr,sv,sw,th,uk,vi,zu" +en-ZA = "EMPTY" +eo = "EMPTY" +es = "EMPTY" +et = "EMPTY" +eu = "EMPTY" +fa = "EMPTY" +fi = "EMPTY" +fr = "EMPTY" +ga = "EMPTY" +gl = "EMPTY" +gu = "EMPTY" +he = "EMPTY" +hi = "EMPTY" +hr = "EMPTY" +hu = "EMPTY" +id = "EMPTY" +is = "EMPTY" +it = "EMPTY" +ja = "EMPTY" +ka = "EMPTY" +kk = "EMPTY" +km = "EMPTY" +kn = "EMPTY" +ko = "EMPTY" +kok = "EMPTY" +ks = "EMPTY" +ku = "EMPTY" +lo = "EMPTY" +lt = "EMPTY" +lv = "EMPTY" +mai = "EMPTY" +mk = "EMPTY" +ml = "EMPTY" +mn = "EMPTY" +mni = "EMPTY" +mr = "EMPTY" +my = "EMPTY" +nb = "EMPTY" +ne = "EMPTY" +nl = "EMPTY" +nn = "EMPTY" +nr = "EMPTY" +nso = "EMPTY" +oc = "EMPTY" +om = "EMPTY" +or = "EMPTY" +pa-IN = "EMPTY" +pl = "EMPTY" +pt = "EMPTY" +pt-BR = "EMPTY" +ro = "EMPTY" +ru = "EMPTY" +rw = "EMPTY" +sa-IN = "EMPTY" +sat = "EMPTY" +sd = "EMPTY" +sh = "EMPTY" +si = "EMPTY" +sk = "EMPTY" +sl = "EMPTY" +sq = "EMPTY" +sr = "EMPTY" +ss = "EMPTY" +st = "EMPTY" +sv = "EMPTY" +sw-TZ = "EMPTY" +ta = "EMPTY" +te = "EMPTY" +tg = "EMPTY" +th = "EMPTY" +tn = "EMPTY" +tr = "EMPTY" +ts = "EMPTY" +ug = "EMPTY" +uk = "EMPTY" +uz = "EMPTY" +ve = "EMPTY" +vi = "EMPTY" +xh = "EMPTY" +zh-CN = "EMPTY" +zh-TW = "EMPTY" +zu = "EMPTY" diff --git a/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx b/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx index 45fbed4819d2..5220b1ed6d0c 100644 --- a/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx +++ b/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx @@ -81,6 +81,14 @@ void Registrar::RegisterForMsWord() const RegistrationContextInformation::Writer); RegisterForMsOfficeApplication( + m_ContextInformation.GetMOOXWordDocumentFileExtension(), + m_ContextInformation.GetMOOXWordDocumentDisplayName(), + m_ContextInformation.GetWordDocumentDefaultIconEntry(), + m_ContextInformation.GetWordDocumentDefaultShellCommand(), + m_ContextInformation.ShellNewCommandDisplayName(), + RegistrationContextInformation::Writer); + + RegisterForMsOfficeApplication( m_ContextInformation.GetWordTemplateFileExtension(), m_ContextInformation.GetWordTemplateDisplayName(), m_ContextInformation.GetWordTemplateDefaultIconEntry(), @@ -114,6 +122,14 @@ void Registrar::UnregisterForMsWord() const try { UnregisterForMsOfficeApplication( + m_ContextInformation.GetMOOXWordDocumentFileExtension()); + } + catch(RegistryKeyNotFoundException&) + {} + + try + { + UnregisterForMsOfficeApplication( m_ContextInformation.GetWordTemplateFileExtension()); } catch(RegistryKeyNotFoundException&) @@ -192,6 +208,14 @@ void Registrar::RegisterForMsExcel() const RegistrationContextInformation::Calc); RegisterForMsOfficeApplication( + m_ContextInformation.GetMOOXExcelSheetFileExtension(), + m_ContextInformation.GetMOOXExcelSheetDisplayName(), + m_ContextInformation.GetExcelSheetDefaultIconEntry(), + m_ContextInformation.GetExcelSheetDefaultShellCommand(), + m_ContextInformation.ShellNewCommandDisplayName(), + RegistrationContextInformation::Calc); + + RegisterForMsOfficeApplication( m_ContextInformation.GetExcelTemplateFileExtension(), m_ContextInformation.GetExcelTemplateDisplayName(), m_ContextInformation.GetExcelTemplateDefaultIconEntry(), @@ -217,6 +241,22 @@ void Registrar::UnregisterForMsExcel() const try { UnregisterForMsOfficeApplication( + m_ContextInformation.GetMOOXExcelSheetFileExtension()); + } + catch(RegistryKeyNotFoundException&) + {} + + try + { + UnregisterForMsOfficeApplication( + m_ContextInformation.GetMOOXPowerPointDocumentFileExtension()); + } + catch(RegistryKeyNotFoundException&) + {} + + try + { + UnregisterForMsOfficeApplication( m_ContextInformation.GetExcelTemplateFileExtension()); } catch(RegistryKeyNotFoundException&) @@ -244,6 +284,14 @@ void Registrar::RegisterForMsPowerPoint() const RegistrationContextInformation::Impress); RegisterForMsOfficeApplication( + m_ContextInformation.GetMOOXPowerPointDocumentFileExtension(), + m_ContextInformation.GetMOOXPowerPointDocumentDisplayName(), + m_ContextInformation.GetPowerPointDocumentDefaultIconEntry(), + m_ContextInformation.GetPowerPointDocumentDefaultShellCommand(), + m_ContextInformation.ShellNewCommandDisplayName(), + RegistrationContextInformation::Impress); + + RegisterForMsOfficeApplication( m_ContextInformation.GetPowerPointShowFileExtension(), m_ContextInformation.GetPowerPointShowDisplayName(), m_ContextInformation.GetPowerPointShowDefaultIconEntry(), diff --git a/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.cxx b/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.cxx index f07c35a4d988..2f04d319dd80 100644 --- a/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.cxx +++ b/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.cxx @@ -53,6 +53,18 @@ std::wstring RegistrationContextInformation::GetWordDocumentDefaultShellCommand( return std::wstring(TEXT("open")); } +std::wstring RegistrationContextInformation::GetMOOXWordDocumentDisplayName() const +{ + std::wstring str; + str = TEXT("Microsoft Word 2007 Document"); + return str; +} + +std::wstring RegistrationContextInformation::GetMOOXWordDocumentFileExtension() const +{ + return std::wstring(TEXT(".docx")); +} + std::wstring RegistrationContextInformation::GetWordTemplateDisplayName() const { std::wstring str; @@ -125,6 +137,18 @@ std::wstring RegistrationContextInformation::GetExcelSheetDefaultShellCommand() return std::wstring(TEXT("open")); } +std::wstring RegistrationContextInformation::GetMOOXExcelSheetDisplayName() const +{ + std::wstring str; + str = TEXT("Microsoft Excel 2007 Spreadsheet"); + return str; +} + +std::wstring RegistrationContextInformation::GetMOOXExcelSheetFileExtension() const +{ + return std::wstring(TEXT(".xlsx")); +} + std::wstring RegistrationContextInformation::GetExcelTemplateDisplayName() const { std::wstring str; @@ -173,6 +197,18 @@ std::wstring RegistrationContextInformation::GetPowerPointDocumentDefaultShellCo return std::wstring(TEXT("open")); } +std::wstring RegistrationContextInformation::GetMOOXPowerPointDocumentDisplayName() const +{ + std::wstring str; + str = TEXT("Microsoft PowerPoint 2007 Presentation"); + return str; +} + +std::wstring RegistrationContextInformation::GetMOOXPowerPointDocumentFileExtension() const +{ + return std::wstring(TEXT(".pptx")); +} + std::wstring RegistrationContextInformation::GetPowerPointTemplateDisplayName() const { std::wstring str; diff --git a/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.hxx b/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.hxx index 91a42e6b58d7..d3297b14775c 100644 --- a/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.hxx +++ b/setup_native/source/win32/customactions/reg4msdoc/registrationcontextinformation.hxx @@ -47,6 +47,14 @@ public: std::wstring GetWordDocumentDefaultIconEntry() const; std::wstring GetWordDocumentDefaultShellCommand() const; + /** MOOX Word document information + The icon index is the index of the icon + in soffice.exe to be associated with + word document files + */ + std::wstring GetMOOXWordDocumentDisplayName() const; + std::wstring GetMOOXWordDocumentFileExtension() const; + /** Word template information The icon index is the index of the icon in soffice.exe to be associated with @@ -77,6 +85,9 @@ public: std::wstring GetExcelSheetDefaultIconEntry() const; std::wstring GetExcelSheetDefaultShellCommand() const; + std::wstring GetMOOXExcelSheetDisplayName() const; + std::wstring GetMOOXExcelSheetFileExtension() const; + /** Excel template information The icon index is the index of the icon in soffice.exe to be associated with @@ -97,6 +108,9 @@ public: std::wstring GetPowerPointDocumentDefaultIconEntry() const; std::wstring GetPowerPointDocumentDefaultShellCommand() const; + std::wstring GetMOOXPowerPointDocumentDisplayName() const; + std::wstring GetMOOXPowerPointDocumentFileExtension() const; + /** PowerPoint template information The icon index is the index of the icon in soffice.exe to be associated with diff --git a/setup_native/source/win32/nsis/brobanner.bmp b/setup_native/source/win32/nsis/brobanner.bmp Binary files differdeleted file mode 100644 index 0a2961accbda..000000000000 --- a/setup_native/source/win32/nsis/brobanner.bmp +++ /dev/null diff --git a/setup_native/source/win32/nsis/brobanner.svg b/setup_native/source/win32/nsis/brobanner.svg deleted file mode 100644 index 041386d7cea9..000000000000 --- a/setup_native/source/win32/nsis/brobanner.svg +++ /dev/null @@ -1,667 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="103" - height="58" - id="svg3229" - sodipodi:version="0.32" - inkscape:version="0.46" - sodipodi:docname="Installation (banner_OOorg_standard).svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - version="1.0"> - <defs - id="defs3231"> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective3237" /> - <inkscape:perspective - id="perspective2777" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4800" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective3742" /> - <inkscape:perspective - id="perspective3744" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2870" /> - <inkscape:perspective - id="perspective2500" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2531" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2854" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective4034" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective3939" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective3852" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 21.26 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="62.360001 : 21.26 : 1" - inkscape:persp3d-origin="31.18 : 14.173333 : 1" - id="perspective3771" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective59" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective3532" /> - <inkscape:perspective - id="perspective2543" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2818" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2521" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4715" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4717" /> - <inkscape:perspective - id="perspective4719" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4721" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4723" - inkscape:persp3d-origin="31.18 : 14.173333 : 1" - inkscape:vp_z="62.360001 : 21.26 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 21.26 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4725" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4727" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4729" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4731" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4733" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4735" /> - <inkscape:perspective - id="perspective4737" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4739" /> - <inkscape:perspective - id="perspective4741" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4743" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4211" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 12.41 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="391.03 : 12.41 : 1" - inkscape:persp3d-origin="195.515 : 8.2733332 : 1" - id="perspective3301" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 12.41 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="399.49701 : 12.41 : 1" - inkscape:persp3d-origin="199.7485 : 8.2733332 : 1" - id="perspective3226" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="393.207 : 18.512501 : 1" - inkscape:persp3d-origin="196.6035 : 12.341667 : 1" - id="perspective3158" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="393.207 : 18.512501 : 1" - inkscape:persp3d-origin="196.6035 : 12.341667 : 1" - id="perspective3146" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2625" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2623" /> - <inkscape:perspective - id="perspective2621" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2619" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2617" - inkscape:persp3d-origin="31.18 : 14.173333 : 1" - inkscape:vp_z="62.360001 : 21.26 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 21.26 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2615" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2613" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2611" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2609" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2607" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2753" /> - <inkscape:perspective - id="perspective2604" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2602" /> - <inkscape:perspective - id="perspective2600" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2598" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="401.944 : 18.512501 : 1" - inkscape:persp3d-origin="200.972 : 12.341667 : 1" - id="perspective2645" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="385.51999 : 18.512501 : 1" - inkscape:persp3d-origin="192.75999 : 12.341667 : 1" - id="perspective2633" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 48.070499 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="212.035 : 48.070499 : 1" - inkscape:persp3d-origin="106.0175 : 32.047 : 1" - id="perspective2474" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 48.070499 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="212.035 : 48.070499 : 1" - inkscape:persp3d-origin="106.0175 : 32.047 : 1" - id="perspective2426" /> - <inkscape:perspective - id="perspective2592" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="7.8135634" - inkscape:cx="47.884284" - inkscape:cy="27.859947" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1264" - inkscape:window-height="750" - inkscape:window-x="0" - inkscape:window-y="14" - showguides="true" - inkscape:guide-bbox="true"> - <sodipodi:guide - orientation="0,1" - position="6.203125,39.566406" - id="guide2462" /> - <sodipodi:guide - orientation="1,0" - position="6.4960938,39.835938" - id="guide2464" /> - <sodipodi:guide - orientation="0,1" - position="7.8046875,17.640625" - id="guide2466" /> - <sodipodi:guide - orientation="1,0" - position="98.285156,17.5" - id="guide2468" /> - </sodipodi:namedview> - <metadata - id="metadata3234"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Camada 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-565.64286,-466.2193)"> - <text - transform="scale(1.0168078,0.98347)" - font-size="103.091" - id="text43" - style="font-size:48.89245605px;font-family:Vegur-Regular" - x="1429.27" - y="552.60571" /> - <text - transform="scale(0.9979479,1.0020563)" - font-size="103.091" - id="text3748" - style="font-size:91.03964996px;font-family:Vegur-Regular" - x="1305.9132" - y="429.15198" /> - <g - id="g2905" - inkscape:export-filename="C:\Users\Marcelo\Desktop\Trabalhos\LibreOffice\Finais\Telas\Installation (banner_OOorg_standard).png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/banner_OOorg_standard.bmp.png" - y="466.2193" - x="565.64288" - height="58" - width="103" - id="rect12423" - style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - <g - transform="matrix(0.1694148,0,0,0.1694148,607.63264,451.4171)" - id="g2870"> - <g - id="g4513" - transform="translate(-397.1353,-52.392239)"> - <g - style="fill:#000000" - transform="matrix(1.1041871,0,0,1.1275051,240.59949,350.39632)" - id="g3252"> - <path - style="fill:#000000" - d="M 17.816,4.488 L 10.744,4.488 L 10.744,24.48 L 7.004,24.48 L 7.004,4.488 L 0,4.488 L 0,1.428 L 17.816,1.428 L 17.816,4.488 z" - id="path3254" /> - <path - style="fill:#000000" - d="M 23.604186,10.37 C 24.930186,8.568 26.596186,7.616 28.840186,7.616 C 32.274186,7.616 34.246186,9.792 34.246186,13.532 L 34.246186,24.48 L 30.506186,24.48 L 30.506186,15.368 C 30.506186,12.206 30.098186,10.506 27.514186,10.506 C 25.168186,10.506 23.536186,12.648 23.536186,15.708 L 23.536186,24.48 L 19.796186,24.48 L 19.796186,2.9698466e-14 L 23.536186,2.9698466e-14 L 23.536186,10.37 L 23.604186,10.37 z" - id="path3256" /> - <path - style="fill:#000000" - d="M 46.298814,21.931 C 47.896814,21.931 49.324814,21.591 50.718814,20.979 L 51.092814,23.801 C 49.392814,24.583 47.828814,24.821 45.618814,24.821 C 40.790814,24.821 37.389814,22.067 37.389814,16.593 C 37.389814,11.323 40.925814,7.617 45.651814,7.617 C 49.901814,7.617 52.315814,11.051 52.315814,14.893 C 52.315814,15.743 52.281814,16.525 52.179814,17.239 L 41.232814,17.239 C 41.436814,20.196 43.135814,21.931 46.298814,21.931 z M 48.677814,14.484 C 48.575814,12.274 47.759814,10.506 45.345814,10.506 C 43.101814,10.506 41.775814,12.036 41.401814,14.484 L 48.677814,14.484 z" - id="path3258" /> - <path - style="fill:#000000" - d="M 70.02901,1.258 C 78.35901,1.258 83.22101,5.134 83.22101,12.546 C 83.22101,20.774 76.18301,24.65 69.58701,24.65 C 67.30901,24.65 64.96301,24.548 62.92301,24.344 L 62.92301,1.632 C 65.23501,1.394 68.05701,1.258 70.02901,1.258 z M 66.66301,21.522 C 67.68301,21.59 68.87301,21.624 69.92701,21.624 C 74.85701,21.624 79.07301,18.904 79.07301,12.954 C 79.07301,7.344 75.60501,4.284 69.96101,4.284 C 68.87301,4.284 67.51301,4.318 66.66301,4.42 L 66.66301,21.522 z" - id="path3260" /> - <path - style="fill:#000000" - d="M 101.66244,16.218 C 101.66244,21.42 98.194443,24.82 93.468443,24.82 C 88.742443,24.82 85.274443,21.42 85.274443,16.218 C 85.274443,11.016 88.742443,7.616 93.468443,7.616 C 98.194443,7.616 101.66244,11.016 101.66244,16.218 z M 97.651443,16.218 C 97.651443,12.546 96.087443,10.506 93.469443,10.506 C 90.851443,10.506 89.287443,12.546 89.287443,16.218 C 89.287443,19.89 90.851443,21.93 93.469443,21.93 C 96.087443,21.93 97.651443,19.891 97.651443,16.218 z" - id="path3262" /> - <path - style="fill:#000000" - d="M 113.02567,21.931 C 114.35167,21.931 115.88167,21.591 117.13967,21.047 L 117.51367,23.869 C 116.32367,24.447 114.48767,24.821 112.20967,24.821 C 107.17767,24.821 103.91367,21.523 103.91367,16.593 C 103.91367,10.915 107.75567,7.617 112.92367,7.617 C 115.06567,7.617 116.83367,8.093 117.68367,8.603 L 117.30967,11.425 C 116.25567,10.915 114.86167,10.507 113.29767,10.507 C 110.10167,10.507 107.92567,12.377 107.92567,16.151 C 107.92567,19.958 109.89767,21.931 113.02567,21.931 z" - id="path3264" /> - <path - style="fill:#000000" - d="M 131.29089,22.066 C 129.96489,23.868 128.26489,24.82 126.05489,24.82 C 122.62089,24.82 120.64889,22.644 120.64889,18.904 L 120.64889,7.956 L 124.38889,7.956 L 124.38889,17.068 C 124.38889,20.23 124.76289,21.93 127.38089,21.93 C 129.69289,21.93 131.35889,19.822 131.35889,16.728 L 131.35889,7.956 L 135.09889,7.956 L 135.09889,24.48 L 131.46089,24.48 L 131.35889,22.066 L 131.29089,22.066 z" - id="path3266" /> - <path - style="fill:#000000" - d="M 152.78142,11.05 C 154.09704,8.432 156.01986,7.616 157.97641,7.616 C 161.14737,7.616 162.96899,9.588 162.96899,13.226 L 162.96899,24.48 L 159.25829,24.48 L 159.25829,14.382 C 159.25829,11.628 158.48241,10.506 156.6608,10.506 C 154.46811,10.506 153.08503,12.614 153.08503,16.388 L 153.08503,24.48 L 149.37432,24.48 L 149.37432,14.382 C 149.37432,11.628 148.59845,10.506 146.77683,10.506 C 144.58414,10.506 143.20106,12.75 143.20106,16.388 L 143.20106,24.48 L 139.49036,24.48 L 139.49036,7.956 L 143.09986,7.956 L 143.20106,10.37 L 143.26853,10.37 C 144.34801,8.636 145.86602,7.616 148.09244,7.616 C 150.2514,7.616 152.03928,8.568 152.68022,11.05 L 152.78142,11.05 z" - id="path3268" /> - <path - style="fill:#000000" - d="M 175.00552,21.931 C 176.60352,21.931 178.03152,21.591 179.42552,20.979 L 179.79952,23.801 C 178.09952,24.583 176.53552,24.821 174.32552,24.821 C 169.49752,24.821 166.09652,22.067 166.09652,16.593 C 166.09652,11.323 169.63252,7.617 174.35852,7.617 C 178.60852,7.617 181.02252,11.051 181.02252,14.893 C 181.02252,15.743 180.98852,16.525 180.88652,17.239 L 169.93852,17.239 C 170.14452,20.196 171.84352,21.931 175.00552,21.931 z M 177.38552,14.484 C 177.28352,12.274 176.46752,10.506 174.05352,10.506 C 171.80952,10.506 170.48352,12.036 170.10952,14.484 L 177.38552,14.484 z" - id="path3270" /> - <path - style="fill:#000000" - d="M 188.24105,10.37 C 189.56705,8.568 191.23305,7.616 193.47705,7.616 C 196.91105,7.616 198.88305,9.792 198.88305,13.532 L 198.88305,24.48 L 195.14305,24.48 L 195.14305,15.368 C 195.14305,12.206 194.73505,10.506 192.15105,10.506 C 189.80505,10.506 188.17305,12.648 188.17305,15.708 L 188.17305,24.48 L 184.43305,24.48 L 184.43305,7.956 L 188.07105,7.956 L 188.17305,10.37 L 188.24105,10.37 L 188.24105,10.37 z" - id="path3272" /> - <path - style="fill:#000000" - d="M 212.15806,10.846 L 208.07806,10.846 L 208.07806,19.584 C 208.07806,21.454 209.03006,21.93 210.35606,21.93 C 211.07006,21.93 211.51206,21.862 212.22606,21.624 L 212.60006,24.378 C 211.61406,24.684 210.45806,24.82 208.96206,24.82 C 206.27606,24.82 204.33806,23.528 204.33806,20.502 L 204.33806,10.846 L 201.65206,10.846 L 201.65206,7.956 L 204.33806,7.956 L 204.33806,4.216 L 208.07806,4.216 L 208.07806,7.956 L 212.15806,7.956 L 212.15806,10.846 z" - id="path3274" /> - <path - style="fill:#000000" - d="M 223.13443,24.48 L 223.13443,1.428 L 235.98743,1.428 L 235.98743,4.488 L 226.87543,4.488 L 226.87543,11.39 L 234.83143,11.39 L 234.83143,14.416 L 226.87543,14.416 L 226.87543,24.48 L 223.13443,24.48 z" - id="path3276" /> - <path - style="fill:#000000" - d="M 254.15374,16.218 C 254.15374,21.42 250.68474,24.82 245.95974,24.82 C 241.23274,24.82 237.76574,21.42 237.76574,16.218 C 237.76574,11.016 241.23374,7.616 245.95974,7.616 C 250.68574,7.616 254.15374,11.016 254.15374,16.218 z M 250.14174,16.218 C 250.14174,12.546 248.57874,10.506 245.95974,10.506 C 243.34074,10.506 241.77774,12.546 241.77774,16.218 C 241.77774,19.89 243.34074,21.93 245.95974,21.93 C 248.57874,21.93 250.14174,19.891 250.14174,16.218 z" - id="path3278" /> - <path - style="fill:#000000" - d="M 267.8887,22.063898 C 266.58161,23.867273 264.90584,24.82 262.72735,24.82 C 259.34231,24.82 257.39843,22.642339 257.39843,18.899485 L 257.39843,7.9431301 L 261.08511,7.9431301 L 261.08511,17.062084 C 261.08511,20.226497 261.45378,21.927794 264.03445,21.927794 C 266.31348,21.927794 267.95573,19.818186 267.95573,16.721824 L 267.95573,7.9431301 L 271.6424,7.9431301 L 271.6424,24.479741 L 268.05628,24.479741 L 267.95474,22.063898 L 267.8887,22.063898 z" - id="path3280" /> - <path - style="fill:#000000" - d="M 279.95412,10.358155 C 281.26762,8.5546424 282.91792,7.6018432 285.13978,7.6018432 C 288.54242,7.6018432 290.49485,9.7796698 290.49485,13.522809 L 290.49485,24.48 L 286.79109,24.48 L 286.79109,15.36035 C 286.79109,12.195697 286.38692,10.494269 283.82727,10.494269 C 281.5024,10.494269 279.88578,12.638067 279.88578,15.700636 L 279.88578,24.48 L 276.18101,24.48 L 276.18101,7.9421286 L 279.78572,7.9421286 L 279.88677,10.358155 L 279.95412,10.358155 L 279.95412,10.358155 z" - id="path3282" /> - <path - style="fill:#000000" - d="M 300.95303,24.82 C 296.42828,24.82 293.70502,21.383151 293.70502,16.517117 C 293.70502,11.344829 296.73353,7.6017268 301.1572,7.6017268 C 303.47212,7.6017268 305.03642,8.452432 306.36352,10.187871 L 306.43157,10.187871 L 306.43157,-0.02059181 L 310.17368,-0.02059181 L 310.17368,24.479718 L 306.53265,24.479718 L 306.43057,22.233856 L 306.36251,22.233856 C 304.96736,23.936267 303.29998,24.82 300.95303,24.82 z M 302.10999,10.494124 C 299.14953,10.494124 297.72035,12.774014 297.72035,16.244891 C 297.72035,19.681741 299.2166,21.927603 302.17704,21.927603 C 304.79722,21.927603 306.43157,19.919938 306.43157,16.891428 L 306.43157,15.530299 C 306.43157,12.331648 304.59305,10.494124 302.10999,10.494124 z" - id="path3284" /> - <path - style="fill:#000000" - d="M 327.13912,13.293431 L 327.13912,24.478977 L 323.48917,24.478977 L 323.38686,22.160023 L 323.31866,22.160023 C 322.3638,23.865136 320.76099,24.82 318.57845,24.82 C 315.81617,24.82 313.3608,22.739761 313.3608,19.465942 C 313.3608,15.407772 317.31566,13.804965 320.99971,13.804965 C 321.92047,13.804965 322.70382,13.907272 323.38686,14.009579 L 323.38686,13.634454 C 323.38686,11.520113 322.32869,10.462942 319.80613,10.462942 C 318.61255,10.462942 317.04385,10.769863 315.54335,11.417806 L 315.16822,8.5873172 C 316.90744,7.8711694 318.71486,7.564249 320.52228,7.564249 C 324.88837,7.564249 327.13912,9.6444877 327.13912,13.293431 z M 323.38788,16.362636 C 322.77403,16.260329 322.02378,16.192125 321.23842,16.192125 C 319.22639,16.192125 317.45407,17.112886 317.45407,19.261329 C 317.45407,21.102852 318.47714,22.057716 320.04585,22.057716 C 321.92147,22.057716 323.38788,20.250295 323.38788,17.317499 L 323.38788,16.362636 z" - id="path3286" /> - <path - style="fill:#000000" - d="M 340.41792,10.810029 L 336.32742,10.810029 L 336.32742,19.570522 C 336.32742,21.445335 337.28187,21.922561 338.61128,21.922561 C 339.32712,21.922561 339.77026,21.854386 340.48609,21.615773 L 340.86106,24.376863 C 339.87253,24.68365 338.71255,24.82 337.2127,24.82 C 334.51978,24.82 332.57679,23.524674 332.57679,20.490884 L 332.57679,10.810029 L 329.88388,10.810029 L 329.88388,7.9125894 L 332.57679,7.9125894 L 332.57679,4.162962 L 336.32642,4.162962 L 336.32642,7.9125894 L 340.41692,7.9125894 L 340.41692,10.810029 L 340.41792,10.810029 z" - id="path3288" /> - <path - style="fill:#000000" - d="M 343.61816,3.7929297 C 343.61816,2.5660193 344.6065,1.577675 345.83341,1.577675 C 347.06132,1.577675 348.04866,2.5660193 348.04866,3.7929297 C 348.04866,5.0198399 347.06132,6.0081843 345.83341,6.0081843 C 344.6075,6.0081843 343.61816,5.0198399 343.61816,3.7929297 z M 343.95896,7.9167114 L 347.70786,7.9167114 L 347.70786,24.48 L 343.95896,24.48 L 343.95896,7.9167114 z" - id="path3290" /> - <path - style="fill:#000000" - d="M 367.46488,16.192768 C 367.46488,21.410027 363.9857,24.82 359.24684,24.82 C 354.50597,24.82 351.0288,21.410027 351.0288,16.192768 C 351.0288,10.975509 354.50698,7.565536 359.24684,7.565536 C 363.9857,7.565536 367.46488,10.975509 367.46488,16.192768 z M 363.44011,16.192768 C 363.44011,12.509997 361.87251,10.464013 359.24583,10.464013 C 356.61915,10.464013 355.05157,12.509997 355.05157,16.192768 C 355.05157,19.875539 356.61915,21.921523 359.24583,21.921523 C 361.87251,21.921523 363.44011,19.876542 363.44011,16.192768 z" - id="path3292" /> - <path - style="fill:#000000" - d="M 374.56395,10.357078 C 375.89116,8.553428 377.55869,7.6005562 379.80374,7.6005562 C 383.24189,7.6005562 385.2147,9.778549 385.2147,13.521974 L 385.2147,24.48 L 381.47228,24.48 L 381.47228,15.359656 C 381.47228,12.19476 381.0639,10.493203 378.47753,10.493203 C 376.12839,10.493203 374.49489,12.637165 374.49489,15.699967 L 374.49489,24.48 L 370.75146,24.48 L 370.75146,7.9408675 L 374.3938,7.9408675 L 374.49589,10.357078 L 374.56395,10.357078 L 374.56395,10.357078 z" - id="path3294" /> - </g> - <g - style="fill:#000000" - transform="translate(0,-8.52e-3)" - id="g2496"> - <path - style="fill:#18a303;fill-opacity:1" - d="M 288.61033,302.30636 C 288.61033,316.95039 276.54431,324.37515 259.73741,324.37515 C 253.96283,324.37515 246.74356,323.75659 240.76141,322.93047 L 240.76141,254.97429 C 248.18617,254.04646 256.22949,253.42582 261.38551,253.42582 C 277.78143,253.42582 286.75466,260.7468 286.75466,270.95714 C 286.75466,278.3819 281.49485,283.84721 274.79243,286.21973 L 274.79243,286.42522 C 283.6598,289.10702 288.61033,294.15926 288.61033,302.30636 z M 261.38551,282.7118 C 268.19172,282.7118 271.69757,279.61902 271.69757,273.63686 C 271.69757,268.06778 268.60478,264.45814 261.59101,264.45814 C 259.83705,264.45814 257.15732,264.56193 254.57931,264.97499 L 254.57931,282.7118 L 261.38551,282.7118 z M 254.57931,293.33313 L 254.57931,312.92562 C 257.36282,313.2349 260.04462,313.33868 262.20957,313.33868 C 269.42883,313.33868 273.75873,310.14211 273.75873,303.74897 C 273.75873,296.73727 270.04531,293.33313 261.69272,293.33313 L 254.57931,293.33313 z" - id="path2451" /> - <path - style="fill:#18a303;fill-opacity:1" - d="M 328.80624,285.90837 C 324.26877,286.11594 320.96842,286.93999 318.18491,288.89945 C 314.98834,291.16818 313.13059,294.77782 313.13059,304.88438 L 313.13059,323.8583 L 299.31269,323.8583 L 299.31269,273.53516 L 312.82132,273.53516 L 313.13059,282.50631 L 313.33816,282.50631 C 316.22545,276.93722 322.51481,272.91452 329.11552,272.50354 L 328.80624,285.90837 z" - id="path2453" /> - <path - style="fill:#000000" - d="M 402.97074,288.89945 C 402.97074,312.51463 385.64491,324.88785 368.11567,324.88785 C 350.58435,324.88785 333.2606,312.51463 333.2606,288.89945 C 333.2606,265.28427 350.58643,252.91105 368.11567,252.91105 C 385.64699,252.91105 402.97074,265.28427 402.97074,288.89945 z M 390.38995,288.89945 C 390.38995,271.16264 381.00574,262.0877 368.11567,262.0877 C 355.22561,262.0877 345.84139,271.16264 345.84139,288.89945 C 345.84139,306.63626 355.22561,315.7112 368.11567,315.7112 C 381.00574,315.7112 390.38995,306.63626 390.38995,288.89945 z" - id="path2455" /> - <path - style="fill:#000000" - d="M 436.85305,248.57908 C 440.04962,248.57908 442.73142,249.19763 444.89637,250.02376 L 443.76304,258.37636 C 442.01115,257.7578 440.04962,257.34474 437.57539,257.34474 C 430.35612,257.34474 426.3355,262.50076 426.3355,270.85336 L 426.3355,273.74065 L 438.91629,273.74065 L 438.91629,282.50631 L 426.3355,282.50631 L 426.3355,323.8583 L 414.99183,323.8583 L 414.99183,282.50631 L 406.74094,282.50631 L 406.74094,273.74065 L 414.99183,273.74065 L 414.99183,272.39975 C 414.99183,257.55023 423.54992,248.57908 436.85305,248.57908 z" - id="path2457" /> - <path - style="fill:#000000" - d="M 466.9653,248.57908 C 470.16187,248.57908 472.84366,249.19763 475.00861,250.02376 L 473.87528,258.37636 C 472.1234,257.7578 470.16187,257.34474 467.68764,257.34474 C 460.46837,257.34474 456.44775,262.50076 456.44775,270.85336 L 456.44775,273.74065 L 469.02854,273.74065 L 469.02854,282.50631 L 456.44775,282.50631 L 456.44775,323.8583 L 445.10408,323.8583 L 445.10408,282.50631 L 436.85319,282.50631 L 436.85319,273.74065 L 445.10408,273.74065 L 445.10408,272.39975 C 445.10408,257.55023 453.66217,248.57908 466.9653,248.57908 z" - id="path2459" /> - <path - style="fill:#000000" - d="M 476.55998,261.26365 C 476.55998,257.55023 479.55106,254.56123 483.2624,254.56123 C 486.97374,254.56123 489.96482,257.55023 489.96482,261.26365 C 489.96482,264.97707 486.97374,267.96607 483.2624,267.96607 C 479.54898,267.96607 476.55998,264.97499 476.55998,261.26365 z M 477.58953,273.74065 L 488.9332,273.74065 L 488.9332,323.8583 L 477.58953,323.8583 L 477.58953,273.74065 z" - id="path2461" /> - <path - style="fill:#000000" - d="M 524.07112,316.12426 C 528.09381,316.12426 532.73299,315.09264 536.54812,313.44247 L 537.68145,322.00263 C 534.07182,323.75452 528.5048,324.88992 521.59481,324.88992 C 506.33223,324.88992 496.43324,314.88715 496.43324,299.93592 C 496.43324,282.71388 508.08619,272.7111 523.75976,272.7111 C 530.25669,272.7111 535.61821,274.15371 538.1983,275.70218 L 537.06497,284.26235 C 533.86632,282.71388 529.64021,281.47676 524.89724,281.47676 C 515.20375,281.47676 508.60304,287.14756 508.60304,298.59502 C 508.60096,310.14419 514.58312,316.12426 524.07112,316.12426 z" - id="path2463" /> - <path - style="fill:#000000" - d="M 570.32982,316.12426 C 575.17657,316.12426 579.50647,315.09264 583.73466,313.23697 L 584.86799,321.79714 C 579.71196,324.16966 574.969,324.88992 568.2645,324.88992 C 553.62047,324.88992 543.3105,316.53733 543.3105,299.93592 C 543.3105,283.95099 554.03561,272.7111 568.36829,272.7111 C 581.25835,272.7111 588.57933,283.12694 588.57933,294.77989 C 588.57933,297.35791 588.47554,299.72835 588.16627,301.89538 L 554.96137,301.89538 C 555.58201,310.86445 560.74011,316.12426 570.32982,316.12426 z M 577.54701,293.5407 C 577.23773,286.83828 574.7635,281.47469 567.44045,281.47469 C 560.63425,281.47469 556.61363,286.11594 555.47822,293.5407 L 577.54701,293.5407 z" - id="path2465" /> - <path - style="fill:#18a303;fill-opacity:1" - d="M 619.87131,321.0748 L 621.00464,312.10364 C 626.77923,314.68166 632.14282,315.71328 637.29885,315.71328 C 646.06451,315.71328 651.52981,311.69058 651.52981,305.09195 C 651.52981,299.42115 646.06451,294.47061 635.33939,293.95584 L 635.33939,285.19018 C 644.10505,284.57163 649.67206,279.72488 649.67206,273.53723 C 649.67206,267.76265 644.82532,264.15301 638.22668,264.15301 C 634.20399,264.15301 629.7703,265.18464 625.33662,267.45337 L 624.20329,258.48222 C 629.66859,256.1097 634.9284,254.97637 641.11397,254.97637 C 653.28377,254.97637 662.25493,261.67879 662.25493,271.37228 C 662.25493,279.82866 655.13944,285.39775 647.30162,287.66649 L 647.30162,287.87406 C 656.89341,289.62594 664.1106,295.7098 664.1106,304.47754 C 664.1106,317.5731 652.45765,324.89407 636.782,324.89407 C 630.80192,324.88992 624.51049,323.65073 619.87131,321.0748 z" - id="path2467" /> - </g> - </g> - </g> - </g> - <g - id="g4297" - style="fill:#800000" - transform="translate(-1144.4568,291.80656)" /> - <text - transform="scale(1.0168078,0.98347)" - font-size="103.091" - id="text2722" - style="font-size:48.89245605px;font-family:Vegur-Regular" - x="1320.4735" - y="360.42868" /> - <text - transform="scale(0.9979479,1.0020563)" - font-size="103.091" - id="text2724" - style="font-size:91.03964996px;font-family:Vegur-Regular" - x="1195.0607" - y="240.53946" /> - </g> -</svg> diff --git a/setup_native/source/win32/nsis/brobitmap.bmp b/setup_native/source/win32/nsis/brobitmap.bmp Binary files differdeleted file mode 100644 index 75dc163eb719..000000000000 --- a/setup_native/source/win32/nsis/brobitmap.bmp +++ /dev/null diff --git a/setup_native/source/win32/nsis/brobitmap.svg b/setup_native/source/win32/nsis/brobitmap.svg deleted file mode 100644 index 084b5cea73fe..000000000000 --- a/setup_native/source/win32/nsis/brobitmap.svg +++ /dev/null @@ -1,1011 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="163" - height="312.00006" - id="svg3270" - sodipodi:version="0.32" - inkscape:version="0.46" - sodipodi:docname="Installation (install_OOorg3_standard).svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - version="1.0"> - <defs - id="defs3272"> - <linearGradient - id="linearGradient7426"> - <stop - id="stop7428" - offset="0" - style="stop-color:#f2f2f2;stop-opacity:1" /> - <stop - id="stop7430" - offset="1" - style="stop-color:#ffffff;stop-opacity:1" /> - </linearGradient> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective3278" /> - <inkscape:perspective - id="perspective2777" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2551" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,256.3074)" - x1="286.08203" - y1="-1.6191231" - x2="286.08203" - y2="357.27634" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2576" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,527.3074)" - x1="275.5" - y1="369.22446" - x2="275.5" - y2="-3.224514" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2648" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,527.3074)" - x1="275.5" - y1="369.22446" - x2="275.5" - y2="-3.224514" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2650" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,256.3074)" - x1="286.08203" - y1="-1.6191231" - x2="286.08203" - y2="357.27634" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2687" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,256.3074)" - x1="286.08203" - y1="-1.6191231" - x2="286.08203" - y2="357.27634" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2712" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,527.3074)" - x1="275.5" - y1="369.22446" - x2="275.5" - y2="-3.224514" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4800" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective3742" /> - <inkscape:perspective - id="perspective3744" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2870" /> - <inkscape:perspective - id="perspective2558" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2531" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2854" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective4034" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective3939" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective3852" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 21.26 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="62.360001 : 21.26 : 1" - inkscape:persp3d-origin="31.18 : 14.173333 : 1" - id="perspective3771" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - id="perspective59" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective3532" /> - <inkscape:perspective - id="perspective2543" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2818" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2557" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,256.3074)" - x1="286.08203" - y1="-1.6191231" - x2="286.08203" - y2="357.27634" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient7426" - id="linearGradient2582" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.2963636,0,0,0.109589,464.0661,527.3074)" - x1="275.5" - y1="369.22446" - x2="275.5" - y2="-3.224514" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2521" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4715" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4717" /> - <inkscape:perspective - id="perspective4719" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4721" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4723" - inkscape:persp3d-origin="31.18 : 14.173333 : 1" - inkscape:vp_z="62.360001 : 21.26 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 21.26 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4725" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4727" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4729" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4731" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4733" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4735" /> - <inkscape:perspective - id="perspective4737" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4739" /> - <inkscape:perspective - id="perspective4741" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective4743" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective4211" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 12.41 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="391.03 : 12.41 : 1" - inkscape:persp3d-origin="195.515 : 8.2733332 : 1" - id="perspective3301" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 12.41 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="399.49701 : 12.41 : 1" - inkscape:persp3d-origin="199.7485 : 8.2733332 : 1" - id="perspective3226" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="393.207 : 18.512501 : 1" - inkscape:persp3d-origin="196.6035 : 12.341667 : 1" - id="perspective3158" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="393.207 : 18.512501 : 1" - inkscape:persp3d-origin="196.6035 : 12.341667 : 1" - id="perspective3146" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2738" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2736" /> - <inkscape:perspective - id="perspective2734" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2732" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2730" - inkscape:persp3d-origin="31.18 : 14.173333 : 1" - inkscape:vp_z="62.360001 : 21.26 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 21.26 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2728" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2726" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2724" - inkscape:persp3d-origin="420.94501 : 198.42668 : 1" - inkscape:vp_z="841.89001 : 297.64001 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 297.64001 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2722" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2720" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2753" /> - <inkscape:perspective - id="perspective2717" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2715" /> - <inkscape:perspective - id="perspective2713" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - id="perspective2711" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="401.944 : 18.512501 : 1" - inkscape:persp3d-origin="200.972 : 12.341667 : 1" - id="perspective2645" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 18.512501 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="385.51999 : 18.512501 : 1" - inkscape:persp3d-origin="192.75999 : 12.341667 : 1" - id="perspective2633" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 48.070499 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="212.035 : 48.070499 : 1" - inkscape:persp3d-origin="106.0175 : 32.047 : 1" - id="perspective2474" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 48.070499 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="212.035 : 48.070499 : 1" - inkscape:persp3d-origin="106.0175 : 32.047 : 1" - id="perspective2426" /> - <inkscape:perspective - id="perspective2705" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 526.18109 : 1" - sodipodi:type="inkscape:persp3d" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="0.86454968" - inkscape:cx="61.810684" - inkscape:cy="115.50357" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1264" - inkscape:window-height="750" - inkscape:window-x="0" - inkscape:window-y="14" - showguides="true" - inkscape:guide-bbox="true"> - <sodipodi:guide - orientation="0,1" - position="19.710938,118.07812" - id="guide2516" /> - <sodipodi:guide - orientation="1,0" - position="20,118.55078" - id="guide2518" /> - <sodipodi:guide - orientation="0,1" - position="21.710938,88.113281" - id="guide2520" /> - <sodipodi:guide - orientation="1,0" - position="145.44141,87.875" - id="guide2522" /> - </sodipodi:namedview> - <metadata - id="metadata3275"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Camada 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-464.21428,-256.36217)"> - <g - id="g3083" - inkscape:export-filename="C:\Users\Marcelo\Desktop\Trabalhos\LibreOffice\Finais\Telas\Installation (install_OOorg3_standard).png" - inkscape:export-xdpi="89.956017" - inkscape:export-ydpi="89.956017"> - <rect - style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect11604" - width="163" - height="312" - x="464.29398" - y="256.65631" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/install_OOorg3_standard.bmp.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <g - transform="matrix(0.2304648,0,0,0.2304648,294.59926,364.26495)" - id="g3049"> - <g - id="g3252" - transform="matrix(1.1041871,0,0,1.1275051,876.92792,475.41355)" - style="fill:#000000"> - <path - id="path3254" - d="M 17.816,4.488 L 10.744,4.488 L 10.744,24.48 L 7.004,24.48 L 7.004,4.488 L 0,4.488 L 0,1.428 L 17.816,1.428 L 17.816,4.488 z" - style="fill:#000000" /> - <path - id="path3256" - d="M 23.604186,10.37 C 24.930186,8.568 26.596186,7.616 28.840186,7.616 C 32.274186,7.616 34.246186,9.792 34.246186,13.532 L 34.246186,24.48 L 30.506186,24.48 L 30.506186,15.368 C 30.506186,12.206 30.098186,10.506 27.514186,10.506 C 25.168186,10.506 23.536186,12.648 23.536186,15.708 L 23.536186,24.48 L 19.796186,24.48 L 19.796186,2.9698466e-14 L 23.536186,2.9698466e-14 L 23.536186,10.37 L 23.604186,10.37 z" - style="fill:#000000" /> - <path - id="path3258" - d="M 46.298814,21.931 C 47.896814,21.931 49.324814,21.591 50.718814,20.979 L 51.092814,23.801 C 49.392814,24.583 47.828814,24.821 45.618814,24.821 C 40.790814,24.821 37.389814,22.067 37.389814,16.593 C 37.389814,11.323 40.925814,7.617 45.651814,7.617 C 49.901814,7.617 52.315814,11.051 52.315814,14.893 C 52.315814,15.743 52.281814,16.525 52.179814,17.239 L 41.232814,17.239 C 41.436814,20.196 43.135814,21.931 46.298814,21.931 z M 48.677814,14.484 C 48.575814,12.274 47.759814,10.506 45.345814,10.506 C 43.101814,10.506 41.775814,12.036 41.401814,14.484 L 48.677814,14.484 z" - style="fill:#000000" /> - <path - id="path3260" - d="M 70.02901,1.258 C 78.35901,1.258 83.22101,5.134 83.22101,12.546 C 83.22101,20.774 76.18301,24.65 69.58701,24.65 C 67.30901,24.65 64.96301,24.548 62.92301,24.344 L 62.92301,1.632 C 65.23501,1.394 68.05701,1.258 70.02901,1.258 z M 66.66301,21.522 C 67.68301,21.59 68.87301,21.624 69.92701,21.624 C 74.85701,21.624 79.07301,18.904 79.07301,12.954 C 79.07301,7.344 75.60501,4.284 69.96101,4.284 C 68.87301,4.284 67.51301,4.318 66.66301,4.42 L 66.66301,21.522 z" - style="fill:#000000" /> - <path - id="path3262" - d="M 101.66244,16.218 C 101.66244,21.42 98.194443,24.82 93.468443,24.82 C 88.742443,24.82 85.274443,21.42 85.274443,16.218 C 85.274443,11.016 88.742443,7.616 93.468443,7.616 C 98.194443,7.616 101.66244,11.016 101.66244,16.218 z M 97.651443,16.218 C 97.651443,12.546 96.087443,10.506 93.469443,10.506 C 90.851443,10.506 89.287443,12.546 89.287443,16.218 C 89.287443,19.89 90.851443,21.93 93.469443,21.93 C 96.087443,21.93 97.651443,19.891 97.651443,16.218 z" - style="fill:#000000" /> - <path - id="path3264" - d="M 113.02567,21.931 C 114.35167,21.931 115.88167,21.591 117.13967,21.047 L 117.51367,23.869 C 116.32367,24.447 114.48767,24.821 112.20967,24.821 C 107.17767,24.821 103.91367,21.523 103.91367,16.593 C 103.91367,10.915 107.75567,7.617 112.92367,7.617 C 115.06567,7.617 116.83367,8.093 117.68367,8.603 L 117.30967,11.425 C 116.25567,10.915 114.86167,10.507 113.29767,10.507 C 110.10167,10.507 107.92567,12.377 107.92567,16.151 C 107.92567,19.958 109.89767,21.931 113.02567,21.931 z" - style="fill:#000000" /> - <path - id="path3266" - d="M 131.29089,22.066 C 129.96489,23.868 128.26489,24.82 126.05489,24.82 C 122.62089,24.82 120.64889,22.644 120.64889,18.904 L 120.64889,7.956 L 124.38889,7.956 L 124.38889,17.068 C 124.38889,20.23 124.76289,21.93 127.38089,21.93 C 129.69289,21.93 131.35889,19.822 131.35889,16.728 L 131.35889,7.956 L 135.09889,7.956 L 135.09889,24.48 L 131.46089,24.48 L 131.35889,22.066 L 131.29089,22.066 z" - style="fill:#000000" /> - <path - id="path3268" - d="M 152.78142,11.05 C 154.09704,8.432 156.01986,7.616 157.97641,7.616 C 161.14737,7.616 162.96899,9.588 162.96899,13.226 L 162.96899,24.48 L 159.25829,24.48 L 159.25829,14.382 C 159.25829,11.628 158.48241,10.506 156.6608,10.506 C 154.46811,10.506 153.08503,12.614 153.08503,16.388 L 153.08503,24.48 L 149.37432,24.48 L 149.37432,14.382 C 149.37432,11.628 148.59845,10.506 146.77683,10.506 C 144.58414,10.506 143.20106,12.75 143.20106,16.388 L 143.20106,24.48 L 139.49036,24.48 L 139.49036,7.956 L 143.09986,7.956 L 143.20106,10.37 L 143.26853,10.37 C 144.34801,8.636 145.86602,7.616 148.09244,7.616 C 150.2514,7.616 152.03928,8.568 152.68022,11.05 L 152.78142,11.05 z" - style="fill:#000000" /> - <path - id="path3270" - d="M 175.00552,21.931 C 176.60352,21.931 178.03152,21.591 179.42552,20.979 L 179.79952,23.801 C 178.09952,24.583 176.53552,24.821 174.32552,24.821 C 169.49752,24.821 166.09652,22.067 166.09652,16.593 C 166.09652,11.323 169.63252,7.617 174.35852,7.617 C 178.60852,7.617 181.02252,11.051 181.02252,14.893 C 181.02252,15.743 180.98852,16.525 180.88652,17.239 L 169.93852,17.239 C 170.14452,20.196 171.84352,21.931 175.00552,21.931 z M 177.38552,14.484 C 177.28352,12.274 176.46752,10.506 174.05352,10.506 C 171.80952,10.506 170.48352,12.036 170.10952,14.484 L 177.38552,14.484 z" - style="fill:#000000" /> - <path - id="path3272" - d="M 188.24105,10.37 C 189.56705,8.568 191.23305,7.616 193.47705,7.616 C 196.91105,7.616 198.88305,9.792 198.88305,13.532 L 198.88305,24.48 L 195.14305,24.48 L 195.14305,15.368 C 195.14305,12.206 194.73505,10.506 192.15105,10.506 C 189.80505,10.506 188.17305,12.648 188.17305,15.708 L 188.17305,24.48 L 184.43305,24.48 L 184.43305,7.956 L 188.07105,7.956 L 188.17305,10.37 L 188.24105,10.37 L 188.24105,10.37 z" - style="fill:#000000" /> - <path - id="path3274" - d="M 212.15806,10.846 L 208.07806,10.846 L 208.07806,19.584 C 208.07806,21.454 209.03006,21.93 210.35606,21.93 C 211.07006,21.93 211.51206,21.862 212.22606,21.624 L 212.60006,24.378 C 211.61406,24.684 210.45806,24.82 208.96206,24.82 C 206.27606,24.82 204.33806,23.528 204.33806,20.502 L 204.33806,10.846 L 201.65206,10.846 L 201.65206,7.956 L 204.33806,7.956 L 204.33806,4.216 L 208.07806,4.216 L 208.07806,7.956 L 212.15806,7.956 L 212.15806,10.846 z" - style="fill:#000000" /> - <path - id="path3276" - d="M 223.13443,24.48 L 223.13443,1.428 L 235.98743,1.428 L 235.98743,4.488 L 226.87543,4.488 L 226.87543,11.39 L 234.83143,11.39 L 234.83143,14.416 L 226.87543,14.416 L 226.87543,24.48 L 223.13443,24.48 z" - style="fill:#000000" /> - <path - id="path3278" - d="M 254.15374,16.218 C 254.15374,21.42 250.68474,24.82 245.95974,24.82 C 241.23274,24.82 237.76574,21.42 237.76574,16.218 C 237.76574,11.016 241.23374,7.616 245.95974,7.616 C 250.68574,7.616 254.15374,11.016 254.15374,16.218 z M 250.14174,16.218 C 250.14174,12.546 248.57874,10.506 245.95974,10.506 C 243.34074,10.506 241.77774,12.546 241.77774,16.218 C 241.77774,19.89 243.34074,21.93 245.95974,21.93 C 248.57874,21.93 250.14174,19.891 250.14174,16.218 z" - style="fill:#000000" /> - <path - id="path3280" - d="M 267.8887,22.063898 C 266.58161,23.867273 264.90584,24.82 262.72735,24.82 C 259.34231,24.82 257.39843,22.642339 257.39843,18.899485 L 257.39843,7.9431301 L 261.08511,7.9431301 L 261.08511,17.062084 C 261.08511,20.226497 261.45378,21.927794 264.03445,21.927794 C 266.31348,21.927794 267.95573,19.818186 267.95573,16.721824 L 267.95573,7.9431301 L 271.6424,7.9431301 L 271.6424,24.479741 L 268.05628,24.479741 L 267.95474,22.063898 L 267.8887,22.063898 z" - style="fill:#000000" /> - <path - id="path3282" - d="M 279.95412,10.358155 C 281.26762,8.5546424 282.91792,7.6018432 285.13978,7.6018432 C 288.54242,7.6018432 290.49485,9.7796698 290.49485,13.522809 L 290.49485,24.48 L 286.79109,24.48 L 286.79109,15.36035 C 286.79109,12.195697 286.38692,10.494269 283.82727,10.494269 C 281.5024,10.494269 279.88578,12.638067 279.88578,15.700636 L 279.88578,24.48 L 276.18101,24.48 L 276.18101,7.9421286 L 279.78572,7.9421286 L 279.88677,10.358155 L 279.95412,10.358155 L 279.95412,10.358155 z" - style="fill:#000000" /> - <path - id="path3284" - d="M 300.95303,24.82 C 296.42828,24.82 293.70502,21.383151 293.70502,16.517117 C 293.70502,11.344829 296.73353,7.6017268 301.1572,7.6017268 C 303.47212,7.6017268 305.03642,8.452432 306.36352,10.187871 L 306.43157,10.187871 L 306.43157,-0.02059181 L 310.17368,-0.02059181 L 310.17368,24.479718 L 306.53265,24.479718 L 306.43057,22.233856 L 306.36251,22.233856 C 304.96736,23.936267 303.29998,24.82 300.95303,24.82 z M 302.10999,10.494124 C 299.14953,10.494124 297.72035,12.774014 297.72035,16.244891 C 297.72035,19.681741 299.2166,21.927603 302.17704,21.927603 C 304.79722,21.927603 306.43157,19.919938 306.43157,16.891428 L 306.43157,15.530299 C 306.43157,12.331648 304.59305,10.494124 302.10999,10.494124 z" - style="fill:#000000" /> - <path - id="path3286" - d="M 327.13912,13.293431 L 327.13912,24.478977 L 323.48917,24.478977 L 323.38686,22.160023 L 323.31866,22.160023 C 322.3638,23.865136 320.76099,24.82 318.57845,24.82 C 315.81617,24.82 313.3608,22.739761 313.3608,19.465942 C 313.3608,15.407772 317.31566,13.804965 320.99971,13.804965 C 321.92047,13.804965 322.70382,13.907272 323.38686,14.009579 L 323.38686,13.634454 C 323.38686,11.520113 322.32869,10.462942 319.80613,10.462942 C 318.61255,10.462942 317.04385,10.769863 315.54335,11.417806 L 315.16822,8.5873172 C 316.90744,7.8711694 318.71486,7.564249 320.52228,7.564249 C 324.88837,7.564249 327.13912,9.6444877 327.13912,13.293431 z M 323.38788,16.362636 C 322.77403,16.260329 322.02378,16.192125 321.23842,16.192125 C 319.22639,16.192125 317.45407,17.112886 317.45407,19.261329 C 317.45407,21.102852 318.47714,22.057716 320.04585,22.057716 C 321.92147,22.057716 323.38788,20.250295 323.38788,17.317499 L 323.38788,16.362636 z" - style="fill:#000000" /> - <path - id="path3288" - d="M 340.41792,10.810029 L 336.32742,10.810029 L 336.32742,19.570522 C 336.32742,21.445335 337.28187,21.922561 338.61128,21.922561 C 339.32712,21.922561 339.77026,21.854386 340.48609,21.615773 L 340.86106,24.376863 C 339.87253,24.68365 338.71255,24.82 337.2127,24.82 C 334.51978,24.82 332.57679,23.524674 332.57679,20.490884 L 332.57679,10.810029 L 329.88388,10.810029 L 329.88388,7.9125894 L 332.57679,7.9125894 L 332.57679,4.162962 L 336.32642,4.162962 L 336.32642,7.9125894 L 340.41692,7.9125894 L 340.41692,10.810029 L 340.41792,10.810029 z" - style="fill:#000000" /> - <path - id="path3290" - d="M 343.61816,3.7929297 C 343.61816,2.5660193 344.6065,1.577675 345.83341,1.577675 C 347.06132,1.577675 348.04866,2.5660193 348.04866,3.7929297 C 348.04866,5.0198399 347.06132,6.0081843 345.83341,6.0081843 C 344.6075,6.0081843 343.61816,5.0198399 343.61816,3.7929297 z M 343.95896,7.9167114 L 347.70786,7.9167114 L 347.70786,24.48 L 343.95896,24.48 L 343.95896,7.9167114 z" - style="fill:#000000" /> - <path - id="path3292" - d="M 367.46488,16.192768 C 367.46488,21.410027 363.9857,24.82 359.24684,24.82 C 354.50597,24.82 351.0288,21.410027 351.0288,16.192768 C 351.0288,10.975509 354.50698,7.565536 359.24684,7.565536 C 363.9857,7.565536 367.46488,10.975509 367.46488,16.192768 z M 363.44011,16.192768 C 363.44011,12.509997 361.87251,10.464013 359.24583,10.464013 C 356.61915,10.464013 355.05157,12.509997 355.05157,16.192768 C 355.05157,19.875539 356.61915,21.921523 359.24583,21.921523 C 361.87251,21.921523 363.44011,19.876542 363.44011,16.192768 z" - style="fill:#000000" /> - <path - id="path3294" - d="M 374.56395,10.357078 C 375.89116,8.553428 377.55869,7.6005562 379.80374,7.6005562 C 383.24189,7.6005562 385.2147,9.778549 385.2147,13.521974 L 385.2147,24.48 L 381.47228,24.48 L 381.47228,15.359656 C 381.47228,12.19476 381.0639,10.493203 378.47753,10.493203 C 376.12839,10.493203 374.49489,12.637165 374.49489,15.699967 L 374.49489,24.48 L 370.75146,24.48 L 370.75146,7.9408675 L 374.3938,7.9408675 L 374.49589,10.357078 L 374.56395,10.357078 L 374.56395,10.357078 z" - style="fill:#000000" /> - </g> - <g - id="g2496" - transform="translate(636.32843,125.00871)" - style="fill:#000000"> - <path - id="path2451" - d="M 288.61033,302.30636 C 288.61033,316.95039 276.54431,324.37515 259.73741,324.37515 C 253.96283,324.37515 246.74356,323.75659 240.76141,322.93047 L 240.76141,254.97429 C 248.18617,254.04646 256.22949,253.42582 261.38551,253.42582 C 277.78143,253.42582 286.75466,260.7468 286.75466,270.95714 C 286.75466,278.3819 281.49485,283.84721 274.79243,286.21973 L 274.79243,286.42522 C 283.6598,289.10702 288.61033,294.15926 288.61033,302.30636 z M 261.38551,282.7118 C 268.19172,282.7118 271.69757,279.61902 271.69757,273.63686 C 271.69757,268.06778 268.60478,264.45814 261.59101,264.45814 C 259.83705,264.45814 257.15732,264.56193 254.57931,264.97499 L 254.57931,282.7118 L 261.38551,282.7118 z M 254.57931,293.33313 L 254.57931,312.92562 C 257.36282,313.2349 260.04462,313.33868 262.20957,313.33868 C 269.42883,313.33868 273.75873,310.14211 273.75873,303.74897 C 273.75873,296.73727 270.04531,293.33313 261.69272,293.33313 L 254.57931,293.33313 z" - style="fill:#18a303;fill-opacity:1" /> - <path - id="path2453" - d="M 328.80624,285.90837 C 324.26877,286.11594 320.96842,286.93999 318.18491,288.89945 C 314.98834,291.16818 313.13059,294.77782 313.13059,304.88438 L 313.13059,323.8583 L 299.31269,323.8583 L 299.31269,273.53516 L 312.82132,273.53516 L 313.13059,282.50631 L 313.33816,282.50631 C 316.22545,276.93722 322.51481,272.91452 329.11552,272.50354 L 328.80624,285.90837 z" - style="fill:#18a303;fill-opacity:1" /> - <path - id="path2455" - d="M 402.97074,288.89945 C 402.97074,312.51463 385.64491,324.88785 368.11567,324.88785 C 350.58435,324.88785 333.2606,312.51463 333.2606,288.89945 C 333.2606,265.28427 350.58643,252.91105 368.11567,252.91105 C 385.64699,252.91105 402.97074,265.28427 402.97074,288.89945 z M 390.38995,288.89945 C 390.38995,271.16264 381.00574,262.0877 368.11567,262.0877 C 355.22561,262.0877 345.84139,271.16264 345.84139,288.89945 C 345.84139,306.63626 355.22561,315.7112 368.11567,315.7112 C 381.00574,315.7112 390.38995,306.63626 390.38995,288.89945 z" - style="fill:#000000" /> - <path - id="path2457" - d="M 436.85305,248.57908 C 440.04962,248.57908 442.73142,249.19763 444.89637,250.02376 L 443.76304,258.37636 C 442.01115,257.7578 440.04962,257.34474 437.57539,257.34474 C 430.35612,257.34474 426.3355,262.50076 426.3355,270.85336 L 426.3355,273.74065 L 438.91629,273.74065 L 438.91629,282.50631 L 426.3355,282.50631 L 426.3355,323.8583 L 414.99183,323.8583 L 414.99183,282.50631 L 406.74094,282.50631 L 406.74094,273.74065 L 414.99183,273.74065 L 414.99183,272.39975 C 414.99183,257.55023 423.54992,248.57908 436.85305,248.57908 z" - style="fill:#000000" /> - <path - id="path2459" - d="M 466.9653,248.57908 C 470.16187,248.57908 472.84366,249.19763 475.00861,250.02376 L 473.87528,258.37636 C 472.1234,257.7578 470.16187,257.34474 467.68764,257.34474 C 460.46837,257.34474 456.44775,262.50076 456.44775,270.85336 L 456.44775,273.74065 L 469.02854,273.74065 L 469.02854,282.50631 L 456.44775,282.50631 L 456.44775,323.8583 L 445.10408,323.8583 L 445.10408,282.50631 L 436.85319,282.50631 L 436.85319,273.74065 L 445.10408,273.74065 L 445.10408,272.39975 C 445.10408,257.55023 453.66217,248.57908 466.9653,248.57908 z" - style="fill:#000000" /> - <path - id="path2461" - d="M 476.55998,261.26365 C 476.55998,257.55023 479.55106,254.56123 483.2624,254.56123 C 486.97374,254.56123 489.96482,257.55023 489.96482,261.26365 C 489.96482,264.97707 486.97374,267.96607 483.2624,267.96607 C 479.54898,267.96607 476.55998,264.97499 476.55998,261.26365 z M 477.58953,273.74065 L 488.9332,273.74065 L 488.9332,323.8583 L 477.58953,323.8583 L 477.58953,273.74065 z" - style="fill:#000000" /> - <path - id="path2463" - d="M 524.07112,316.12426 C 528.09381,316.12426 532.73299,315.09264 536.54812,313.44247 L 537.68145,322.00263 C 534.07182,323.75452 528.5048,324.88992 521.59481,324.88992 C 506.33223,324.88992 496.43324,314.88715 496.43324,299.93592 C 496.43324,282.71388 508.08619,272.7111 523.75976,272.7111 C 530.25669,272.7111 535.61821,274.15371 538.1983,275.70218 L 537.06497,284.26235 C 533.86632,282.71388 529.64021,281.47676 524.89724,281.47676 C 515.20375,281.47676 508.60304,287.14756 508.60304,298.59502 C 508.60096,310.14419 514.58312,316.12426 524.07112,316.12426 z" - style="fill:#000000" /> - <path - id="path2465" - d="M 570.32982,316.12426 C 575.17657,316.12426 579.50647,315.09264 583.73466,313.23697 L 584.86799,321.79714 C 579.71196,324.16966 574.969,324.88992 568.2645,324.88992 C 553.62047,324.88992 543.3105,316.53733 543.3105,299.93592 C 543.3105,283.95099 554.03561,272.7111 568.36829,272.7111 C 581.25835,272.7111 588.57933,283.12694 588.57933,294.77989 C 588.57933,297.35791 588.47554,299.72835 588.16627,301.89538 L 554.96137,301.89538 C 555.58201,310.86445 560.74011,316.12426 570.32982,316.12426 z M 577.54701,293.5407 C 577.23773,286.83828 574.7635,281.47469 567.44045,281.47469 C 560.63425,281.47469 556.61363,286.11594 555.47822,293.5407 L 577.54701,293.5407 z" - style="fill:#000000" /> - <path - id="path2467" - d="M 619.87131,321.0748 L 621.00464,312.10364 C 626.77923,314.68166 632.14282,315.71328 637.29885,315.71328 C 646.06451,315.71328 651.52981,311.69058 651.52981,305.09195 C 651.52981,299.42115 646.06451,294.47061 635.33939,293.95584 L 635.33939,285.19018 C 644.10505,284.57163 649.67206,279.72488 649.67206,273.53723 C 649.67206,267.76265 644.82532,264.15301 638.22668,264.15301 C 634.20399,264.15301 629.7703,265.18464 625.33662,267.45337 L 624.20329,258.48222 C 629.66859,256.1097 634.9284,254.97637 641.11397,254.97637 C 653.28377,254.97637 662.25493,261.67879 662.25493,271.37228 C 662.25493,279.82866 655.13944,285.39775 647.30162,287.66649 L 647.30162,287.87406 C 656.89341,289.62594 664.1106,295.7098 664.1106,304.47754 C 664.1106,317.5731 652.45765,324.89407 636.782,324.89407 C 630.80192,324.88992 624.51049,323.65073 619.87131,321.0748 z" - style="fill:#18a303;fill-opacity:1" /> - </g> - </g> - <rect - y="527.36218" - x="464.21429" - height="40" - width="163" - id="rect11610" - style="fill:url(#linearGradient2582);fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/install_OOorg3_standard.bmp.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <g - transform="translate(76.21425,-1536.3622)" - id="g11680" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/install_OOorg3_standard.bmp.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 432.93612,2084.725 C 432.18148,2084.706 431.43803,2085.1779 431.14306,2085.8632 C 430.84807,2086.5485 431.02025,2087.4039 431.55836,2087.9261 L 447.75462,2104.1736 C 448.27697,2104.6968 449.12749,2104.8703 449.81733,2104.5942 C 450.50718,2104.3182 450.99483,2103.6092 450.99999,2102.875 L 450.99999,2086.5974 C 451.00199,2085.6166 450.09611,2084.7233 449.10176,2084.725 L 432.93612,2084.725 L 432.93612,2084.725 z" - id="path11682" - sodipodi:nodetypes="csccscccc" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 532.93616,1984.7249 C 532.18152,1984.7059 531.43807,1985.1778 531.1431,1985.8631 C 530.84811,1986.5484 531.02029,1987.4038 531.5584,1987.926 L 547.75466,2004.1735 C 548.27701,2004.6967 549.12753,2004.8702 549.81737,2004.5941 C 550.50722,2004.3181 550.99487,2003.6091 551.00003,2002.8749 L 551.00003,1986.5973 C 551.00203,1985.6165 550.09615,1984.7232 549.1018,1984.7249 L 532.93616,1984.7249 L 532.93616,1984.7249 z" - id="path11684" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11686" - d="M 532.93616,2084.7249 C 532.18152,2084.7059 531.43807,2085.1778 531.1431,2085.8631 C 530.84811,2086.5484 531.02029,2087.4038 531.5584,2087.926 L 547.75466,2104.1735 C 548.27701,2104.6967 549.12753,2104.8702 549.81737,2104.5941 C 550.50722,2104.3181 550.99487,2103.6091 551.00003,2102.8749 L 551.00003,2086.5973 C 551.00203,2085.6165 550.09615,2084.7232 549.1018,2084.7249 L 532.93616,2084.7249 L 532.93616,2084.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.125;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 512.93616,2084.7249 C 512.18152,2084.7059 511.43807,2085.1778 511.1431,2085.8631 C 510.84811,2086.5484 511.02029,2087.4038 511.5584,2087.926 L 527.75466,2104.1735 C 528.27701,2104.6967 529.12753,2104.8702 529.81737,2104.5941 C 530.50722,2104.3181 530.99487,2103.6091 531.00003,2102.8749 L 531.00003,2086.5973 C 531.00203,2085.6165 530.09615,2084.7232 529.1018,2084.7249 L 512.93616,2084.7249 L 512.93616,2084.7249 z" - id="path11688" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11690" - d="M 492.93616,2084.7249 C 492.18152,2084.7059 491.43807,2085.1778 491.1431,2085.8631 C 490.84811,2086.5484 491.02029,2087.4038 491.5584,2087.926 L 507.75466,2104.1735 C 508.27701,2104.6967 509.12753,2104.8702 509.81737,2104.5941 C 510.50722,2104.3181 510.99487,2103.6091 511.00003,2102.8749 L 511.00003,2086.5973 C 511.00203,2085.6165 510.09615,2084.7232 509.1018,2084.7249 L 492.93616,2084.7249 L 492.93616,2084.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.075;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 472.93616,2084.7249 C 472.18152,2084.7059 471.43807,2085.1778 471.1431,2085.8631 C 470.84811,2086.5484 471.02029,2087.4038 471.5584,2087.926 L 487.75466,2104.1735 C 488.27701,2104.6967 489.12753,2104.8702 489.81737,2104.5941 C 490.50722,2104.3181 490.99487,2103.6091 491.00003,2102.8749 L 491.00003,2086.5973 C 491.00203,2085.6165 490.09615,2084.7232 489.1018,2084.7249 L 472.93616,2084.7249 L 472.93616,2084.7249 z" - id="path11692" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11694" - d="M 452.93616,2084.7249 C 452.18152,2084.7059 451.43807,2085.1778 451.1431,2085.8631 C 450.84811,2086.5484 451.02029,2087.4038 451.5584,2087.926 L 467.75466,2104.1735 C 468.27701,2104.6967 469.12753,2104.8702 469.81737,2104.5941 C 470.50722,2104.3181 470.99487,2103.6091 471.00003,2102.8749 L 471.00003,2086.5973 C 471.00203,2085.6165 470.09615,2084.7232 469.1018,2084.7249 L 452.93616,2084.7249 L 452.93616,2084.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 532.93616,2064.7249 C 532.18152,2064.7059 531.43807,2065.1778 531.1431,2065.8631 C 530.84811,2066.5484 531.02029,2067.4038 531.5584,2067.926 L 547.75466,2084.1735 C 548.27701,2084.6967 549.12753,2084.8702 549.81737,2084.5941 C 550.50722,2084.3181 550.99487,2083.6091 551.00003,2082.8749 L 551.00003,2066.5973 C 551.00203,2065.6165 550.09615,2064.7232 549.1018,2064.7249 L 532.93616,2064.7249 L 532.93616,2064.7249 z" - id="path11696" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11698" - d="M 512.93616,2064.7249 C 512.18152,2064.7059 511.43807,2065.1778 511.1431,2065.8631 C 510.84811,2066.5484 511.02029,2067.4038 511.5584,2067.926 L 527.75466,2084.1735 C 528.27701,2084.6967 529.12753,2084.8702 529.81737,2084.5941 C 530.50722,2084.3181 530.99487,2083.6091 531.00003,2082.8749 L 531.00003,2066.5973 C 531.00203,2065.6165 530.09615,2064.7232 529.1018,2064.7249 L 512.93616,2064.7249 L 512.93616,2064.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.075;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 492.93616,2064.7249 C 492.18152,2064.7059 491.43807,2065.1778 491.1431,2065.8631 C 490.84811,2066.5484 491.02029,2067.4038 491.5584,2067.926 L 507.75466,2084.1735 C 508.27701,2084.6967 509.12753,2084.8702 509.81737,2084.5941 C 510.50722,2084.3181 510.99487,2083.6091 511.00003,2082.8749 L 511.00003,2066.5973 C 511.00203,2065.6165 510.09615,2064.7232 509.1018,2064.7249 L 492.93616,2064.7249 L 492.93616,2064.7249 z" - id="path11700" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11702" - d="M 472.93616,2064.7249 C 472.18152,2064.7059 471.43807,2065.1778 471.1431,2065.8631 C 470.84811,2066.5484 471.02029,2067.4038 471.5584,2067.926 L 487.75466,2084.1735 C 488.27701,2084.6967 489.12753,2084.8702 489.81737,2084.5941 C 490.50722,2084.3181 490.99487,2083.6091 491.00003,2082.8749 L 491.00003,2066.5973 C 491.00203,2065.6165 490.09615,2064.7232 489.1018,2064.7249 L 472.93616,2064.7249 L 472.93616,2064.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 452.93616,2064.7249 C 452.18152,2064.7059 451.43807,2065.1778 451.1431,2065.8631 C 450.84811,2066.5484 451.02029,2067.4038 451.5584,2067.926 L 467.75466,2084.1735 C 468.27701,2084.6967 469.12753,2084.8702 469.81737,2084.5941 C 470.50722,2084.3181 470.99487,2083.6091 471.00003,2082.8749 L 471.00003,2066.5973 C 471.00203,2065.6165 470.09615,2064.7232 469.1018,2064.7249 L 452.93616,2064.7249 L 452.93616,2064.7249 z" - id="path11704" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11706" - d="M 532.93616,2044.7249 C 532.18152,2044.7059 531.43807,2045.1778 531.1431,2045.8631 C 530.84811,2046.5484 531.02029,2047.4038 531.5584,2047.926 L 547.75466,2064.1735 C 548.27701,2064.6967 549.12753,2064.8702 549.81737,2064.5941 C 550.50722,2064.3181 550.99487,2063.6091 551.00003,2062.8749 L 551.00003,2046.5973 C 551.00203,2045.6165 550.09615,2044.7232 549.1018,2044.7249 L 532.93616,2044.7249 L 532.93616,2044.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.075;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 512.93616,2044.7249 C 512.18152,2044.7059 511.43807,2045.1778 511.1431,2045.8631 C 510.84811,2046.5484 511.02029,2047.4038 511.5584,2047.926 L 527.75466,2064.1735 C 528.27701,2064.6967 529.12753,2064.8702 529.81737,2064.5941 C 530.50722,2064.3181 530.99487,2063.6091 531.00003,2062.8749 L 531.00003,2046.5973 C 531.00203,2045.6165 530.09615,2044.7232 529.1018,2044.7249 L 512.93616,2044.7249 z" - id="path11708" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11710" - d="M 492.93616,2044.7249 C 492.18152,2044.7059 491.43807,2045.1778 491.1431,2045.8631 C 490.84811,2046.5484 491.02029,2047.4038 491.5584,2047.926 L 507.75466,2064.1735 C 508.27701,2064.6967 509.12753,2064.8702 509.81737,2064.5941 C 510.50722,2064.3181 510.99487,2063.6091 511.00003,2062.8749 L 511.00003,2046.5973 C 511.00203,2045.6165 510.09615,2044.7232 509.1018,2044.7249 L 492.93616,2044.7249 L 492.93616,2044.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 472.93616,2044.7249 C 472.18152,2044.7059 471.43807,2045.1778 471.1431,2045.8631 C 470.84811,2046.5484 471.02029,2047.4038 471.5584,2047.926 L 487.75466,2064.1735 C 488.27701,2064.6967 489.12753,2064.8702 489.81737,2064.5941 C 490.50722,2064.3181 490.99487,2063.6091 491.00003,2062.8749 L 491.00003,2046.5973 C 491.00203,2045.6165 490.09615,2044.7232 489.1018,2044.7249 L 472.93616,2044.7249 L 472.93616,2044.7249 z" - id="path11712" - sodipodi:nodetypes="csccscccc" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 532.93616,2024.7249 C 532.18152,2024.7059 531.43807,2025.1778 531.1431,2025.8631 C 530.84811,2026.5484 531.02029,2027.4038 531.5584,2027.926 L 547.75466,2044.1735 C 548.27701,2044.6967 549.12753,2044.8702 549.81737,2044.5941 C 550.50722,2044.3181 550.99487,2043.6091 551.00003,2042.8749 L 551.00003,2026.5973 C 551.00203,2025.6165 550.09615,2024.7232 549.1018,2024.7249 L 532.93616,2024.7249 L 532.93616,2024.7249 z" - id="path11714" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11716" - d="M 512.93616,2024.7249 C 512.18152,2024.7059 511.43807,2025.1778 511.1431,2025.8631 C 510.84811,2026.5484 511.02029,2027.4038 511.5584,2027.926 L 527.75466,2044.1735 C 528.27701,2044.6967 529.12753,2044.8702 529.81737,2044.5941 C 530.50722,2044.3181 530.99487,2043.6091 531.00003,2042.8749 L 531.00003,2026.5973 C 531.00203,2025.6165 530.09615,2024.7232 529.1018,2024.7249 L 512.93616,2024.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 492.93616,2024.7249 C 492.18152,2024.7059 491.43807,2025.1778 491.1431,2025.8631 C 490.84811,2026.5484 491.02029,2027.4038 491.5584,2027.926 L 507.75466,2044.1735 C 508.27701,2044.6967 509.12753,2044.8702 509.81737,2044.5941 C 510.50722,2044.3181 510.99487,2043.6091 511.00003,2042.8749 L 511.00003,2026.5973 C 511.00203,2025.6165 510.09615,2024.7232 509.1018,2024.7249 L 492.93616,2024.7249 L 492.93616,2024.7249 z" - id="path11718" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11720" - d="M 532.93616,2004.7249 C 532.18152,2004.7059 531.43807,2005.1778 531.1431,2005.8631 C 530.84811,2006.5484 531.02029,2007.4038 531.5584,2007.926 L 547.75466,2024.1735 C 548.27701,2024.6967 549.12753,2024.8702 549.81737,2024.5941 C 550.50722,2024.3181 550.99487,2023.6091 551.00003,2022.8749 L 551.00003,2006.5973 C 551.00203,2005.6165 550.09615,2004.7232 549.1018,2004.7249 L 532.93616,2004.7249 L 532.93616,2004.7249 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 512.93616,2004.7249 C 512.18152,2004.7059 511.43807,2005.1778 511.1431,2005.8631 C 510.84811,2006.5484 511.02029,2007.4038 511.5584,2007.926 L 527.75466,2024.1735 C 528.27701,2024.6967 529.12753,2024.8702 529.81737,2024.5941 C 530.50722,2024.3181 530.99487,2023.6091 531.00003,2022.8749 L 531.00003,2006.5973 C 531.00203,2005.6165 530.09615,2004.7232 529.1018,2004.7249 L 512.93616,2004.7249 z" - id="path11722" - sodipodi:nodetypes="csccscccc" /> - </g> - <rect - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/install_OOorg3_standard.bmp.png" - style="fill:url(#linearGradient2557);fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect11741" - width="163" - height="40" - x="464.21429" - y="256.36215" /> - <g - transform="translate(464.21428,-2776.3622)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/install_OOorg3_standard.bmp.png" - id="g11959"> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 101.93612,3032.725 C 101.18148,3032.706 100.43803,3033.1779 100.14306,3033.8632 C 99.848073,3034.5485 100.02025,3035.4039 100.55836,3035.9261 L 116.75462,3052.1736 C 117.27697,3052.6968 118.12749,3052.8703 118.81733,3052.5942 C 119.50718,3052.3182 119.99483,3051.6092 119.99999,3050.875 L 119.99999,3034.5974 C 120.00199,3033.6166 119.09611,3032.7233 118.10176,3032.725 L 101.93612,3032.725 L 101.93612,3032.725 z" - id="path11745" - sodipodi:nodetypes="csccscccc" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 1.9361232,3132.725 C 1.1814832,3132.706 0.4380332,3133.1779 0.1430632,3133.8632 C -0.1519268,3134.5485 0.0202532,3135.4039 0.5583632,3135.9261 L 16.754623,3152.1736 C 17.276973,3152.6968 18.127493,3152.8703 18.817333,3152.5942 C 19.507183,3152.3182 19.994833,3151.6092 19.999993,3150.875 L 19.999993,3134.5974 C 20.001993,3133.6166 19.096113,3132.7233 18.101763,3132.725 L 1.9361232,3132.725 L 1.9361232,3132.725 z" - id="path11747" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11749" - d="M 1.9361232,3032.725 C 1.1814832,3032.706 0.4380332,3033.1779 0.1430632,3033.8632 C -0.1519268,3034.5485 0.0202532,3035.4039 0.5583632,3035.9261 L 16.754623,3052.1736 C 17.276973,3052.6968 18.127493,3052.8703 18.817333,3052.5942 C 19.507183,3052.3182 19.994833,3051.6092 19.999993,3050.875 L 19.999993,3034.5974 C 20.001993,3033.6166 19.096113,3032.7233 18.101763,3032.725 L 1.9361232,3032.725 L 1.9361232,3032.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.125;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 21.936123,3032.725 C 21.181483,3032.706 20.438033,3033.1779 20.143063,3033.8632 C 19.848073,3034.5485 20.020253,3035.4039 20.558363,3035.9261 L 36.754623,3052.1736 C 37.276973,3052.6968 38.127493,3052.8703 38.817333,3052.5942 C 39.507183,3052.3182 39.994833,3051.6092 39.999993,3050.875 L 39.999993,3034.5974 C 40.001993,3033.6166 39.096113,3032.7233 38.101763,3032.725 L 21.936123,3032.725 L 21.936123,3032.725 z" - id="path11751" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11753" - d="M 41.936123,3032.725 C 41.181483,3032.706 40.438033,3033.1779 40.143063,3033.8632 C 39.848073,3034.5485 40.020253,3035.4039 40.558363,3035.9261 L 56.754623,3052.1736 C 57.276973,3052.6968 58.127493,3052.8703 58.817333,3052.5942 C 59.507183,3052.3182 59.994833,3051.6092 59.999993,3050.875 L 59.999993,3034.5974 C 60.001993,3033.6166 59.096113,3032.7233 58.101763,3032.725 L 41.936123,3032.725 L 41.936123,3032.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.075;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 61.936123,3032.725 C 61.181483,3032.706 60.438033,3033.1779 60.143063,3033.8632 C 59.848073,3034.5485 60.020253,3035.4039 60.558363,3035.9261 L 76.754623,3052.1736 C 77.276973,3052.6968 78.127493,3052.8703 78.817333,3052.5942 C 79.507183,3052.3182 79.994833,3051.6092 79.999993,3050.875 L 79.999993,3034.5974 C 80.001993,3033.6166 79.096113,3032.7233 78.101763,3032.725 L 61.936123,3032.725 L 61.936123,3032.725 z" - id="path11755" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11757" - d="M 81.936123,3032.725 C 81.181483,3032.706 80.438033,3033.1779 80.143063,3033.8632 C 79.848073,3034.5485 80.020253,3035.4039 80.558363,3035.9261 L 96.754623,3052.1736 C 97.276973,3052.6968 98.127493,3052.8703 98.817333,3052.5942 C 99.50718,3052.3182 99.99483,3051.6092 99.99999,3050.875 L 99.99999,3034.5974 C 100.00199,3033.6166 99.09611,3032.7233 98.101763,3032.725 L 81.936123,3032.725 L 81.936123,3032.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 1.9361232,3052.725 C 1.1814832,3052.706 0.4380332,3053.1779 0.1430632,3053.8632 C -0.1519268,3054.5485 0.0202532,3055.4039 0.5583632,3055.9261 L 16.754623,3072.1736 C 17.276973,3072.6968 18.127493,3072.8703 18.817333,3072.5942 C 19.507183,3072.3182 19.994833,3071.6092 19.999993,3070.875 L 19.999993,3054.5974 C 20.001993,3053.6166 19.096113,3052.7233 18.101763,3052.725 L 1.9361232,3052.725 L 1.9361232,3052.725 z" - id="path11759" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11761" - d="M 21.936123,3052.725 C 21.181483,3052.706 20.438033,3053.1779 20.143063,3053.8632 C 19.848073,3054.5485 20.020253,3055.4039 20.558363,3055.9261 L 36.754623,3072.1736 C 37.276973,3072.6968 38.127493,3072.8703 38.817333,3072.5942 C 39.507183,3072.3182 39.994833,3071.6092 39.999993,3070.875 L 39.999993,3054.5974 C 40.001993,3053.6166 39.096113,3052.7233 38.101763,3052.725 L 21.936123,3052.725 L 21.936123,3052.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.075;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 41.936123,3052.725 C 41.181483,3052.706 40.438033,3053.1779 40.143063,3053.8632 C 39.848073,3054.5485 40.020253,3055.4039 40.558363,3055.9261 L 56.754623,3072.1736 C 57.276973,3072.6968 58.127493,3072.8703 58.817333,3072.5942 C 59.507183,3072.3182 59.994833,3071.6092 59.999993,3070.875 L 59.999993,3054.5974 C 60.001993,3053.6166 59.096113,3052.7233 58.101763,3052.725 L 41.936123,3052.725 L 41.936123,3052.725 z" - id="path11763" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11765" - d="M 61.936123,3052.725 C 61.181483,3052.706 60.438033,3053.1779 60.143063,3053.8632 C 59.848073,3054.5485 60.020253,3055.4039 60.558363,3055.9261 L 76.754623,3072.1736 C 77.276973,3072.6968 78.127493,3072.8703 78.817333,3072.5942 C 79.507183,3072.3182 79.994833,3071.6092 79.999993,3070.875 L 79.999993,3054.5974 C 80.001993,3053.6166 79.096113,3052.7233 78.101763,3052.725 L 61.936123,3052.725 L 61.936123,3052.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 81.936123,3052.725 C 81.181483,3052.706 80.438033,3053.1779 80.143063,3053.8632 C 79.848073,3054.5485 80.020253,3055.4039 80.558363,3055.9261 L 96.754623,3072.1736 C 97.276973,3072.6968 98.127493,3072.8703 98.817333,3072.5942 C 99.50718,3072.3182 99.99483,3071.6092 99.99999,3070.875 L 99.99999,3054.5974 C 100.00199,3053.6166 99.09611,3052.7233 98.101763,3052.725 L 81.936123,3052.725 L 81.936123,3052.725 z" - id="path11767" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11769" - d="M 1.9361232,3072.725 C 1.1814832,3072.706 0.4380332,3073.1779 0.1430632,3073.8632 C -0.1519268,3074.5485 0.0202532,3075.4039 0.5583632,3075.9261 L 16.754623,3092.1736 C 17.276973,3092.6968 18.127493,3092.8703 18.817333,3092.5942 C 19.507183,3092.3182 19.994833,3091.6092 19.999993,3090.875 L 19.999993,3074.5974 C 20.001993,3073.6166 19.096113,3072.7233 18.101763,3072.725 L 1.9361232,3072.725 L 1.9361232,3072.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.075;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 21.936123,3072.725 C 21.181483,3072.706 20.438033,3073.1779 20.143063,3073.8632 C 19.848073,3074.5485 20.020253,3075.4039 20.558363,3075.9261 L 36.754623,3092.1736 C 37.276973,3092.6968 38.127493,3092.8703 38.817333,3092.5942 C 39.507183,3092.3182 39.994833,3091.6092 39.999993,3090.875 L 39.999993,3074.5974 C 40.001993,3073.6166 39.096113,3072.7233 38.101763,3072.725 L 21.936123,3072.725 L 21.936123,3072.725 z" - id="path11771" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11773" - d="M 41.936123,3072.725 C 41.181483,3072.706 40.438033,3073.1779 40.143063,3073.8632 C 39.848073,3074.5485 40.020253,3075.4039 40.558363,3075.9261 L 56.754623,3092.1736 C 57.276973,3092.6968 58.127493,3092.8703 58.817333,3092.5942 C 59.507183,3092.3182 59.994833,3091.6092 59.999993,3090.875 L 59.999993,3074.5974 C 60.001993,3073.6166 59.096113,3072.7233 58.101763,3072.725 L 41.936123,3072.725 L 41.936123,3072.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 61.936123,3072.725 C 61.181483,3072.706 60.438033,3073.1779 60.143063,3073.8632 C 59.848073,3074.5485 60.020253,3075.4039 60.558363,3075.9261 L 76.754623,3092.1736 C 77.276973,3092.6968 78.127493,3092.8703 78.817333,3092.5942 C 79.507183,3092.3182 79.994833,3091.6092 79.999993,3090.875 L 79.999993,3074.5974 C 80.001993,3073.6166 79.096113,3072.7233 78.101763,3072.725 L 61.936123,3072.725 L 61.936123,3072.725 z" - id="path11775" - sodipodi:nodetypes="csccscccc" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 1.9361232,3092.725 C 1.1814832,3092.706 0.4380332,3093.1779 0.1430632,3093.8632 C -0.1519268,3094.5485 0.0202532,3095.4039 0.5583632,3095.9261 L 16.754623,3112.1736 C 17.276973,3112.6968 18.127493,3112.8703 18.817333,3112.5942 C 19.507183,3112.3182 19.994833,3111.6092 19.999993,3110.875 L 19.999993,3094.5974 C 20.001993,3093.6166 19.096113,3092.7233 18.101763,3092.725 L 1.9361232,3092.725 L 1.9361232,3092.725 z" - id="path11777" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11779" - d="M 21.936123,3092.725 C 21.181483,3092.706 20.438033,3093.1779 20.143063,3093.8632 C 19.848073,3094.5485 20.020253,3095.4039 20.558363,3095.9261 L 36.754623,3112.1736 C 37.276973,3112.6968 38.127493,3112.8703 38.817333,3112.5942 C 39.507183,3112.3182 39.994833,3111.6092 39.999993,3110.875 L 39.999993,3094.5974 C 40.001993,3093.6166 39.096113,3092.7233 38.101763,3092.725 L 21.936123,3092.725 L 21.936123,3092.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 41.936123,3092.725 C 41.181483,3092.706 40.438033,3093.1779 40.143063,3093.8632 C 39.848073,3094.5485 40.020253,3095.4039 40.558363,3095.9261 L 56.754623,3112.1736 C 57.276973,3112.6968 58.127493,3112.8703 58.817333,3112.5942 C 59.507183,3112.3182 59.994833,3111.6092 59.999993,3110.875 L 59.999993,3094.5974 C 60.001993,3093.6166 59.096113,3092.7233 58.101763,3092.725 L 41.936123,3092.725 L 41.936123,3092.725 z" - id="path11781" - sodipodi:nodetypes="csccscccc" /> - <path - sodipodi:nodetypes="csccscccc" - id="path11783" - d="M 1.9361232,3112.725 C 1.1814832,3112.706 0.4380332,3113.1779 0.1430632,3113.8632 C -0.1519268,3114.5485 0.0202532,3115.4039 0.5583632,3115.9261 L 16.754623,3132.1736 C 17.276973,3132.6968 18.127493,3132.8703 18.817333,3132.5942 C 19.507183,3132.3182 19.994833,3131.6092 19.999993,3130.875 L 19.999993,3114.5974 C 20.001993,3113.6166 19.096113,3112.7233 18.101763,3112.725 L 1.9361232,3112.725 L 1.9361232,3112.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.025;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.01000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 21.936123,3112.725 C 21.181483,3112.706 20.438033,3113.1779 20.143063,3113.8632 C 19.848073,3114.5485 20.020253,3115.4039 20.558363,3115.9261 L 36.754623,3132.1736 C 37.276973,3132.6968 38.127493,3132.8703 38.817333,3132.5942 C 39.507183,3132.3182 39.994833,3131.6092 39.999993,3130.875 L 39.999993,3114.5974 C 40.001993,3113.6166 39.096113,3112.7233 38.101763,3112.725 L 21.936123,3112.725 L 21.936123,3112.725 z" - id="path11785" - sodipodi:nodetypes="csccscccc" /> - </g> - <g - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/install_OOorg3_standard.bmp.png" - transform="translate(456.21428,-2742.3622)" - id="g11984"> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 101.93612,3074.7256 C 101.18148,3074.7066 100.43803,3075.1785 100.14306,3075.8638 C 99.84807,3076.5491 100.02025,3077.4045 100.55836,3077.9267 L 116.75462,3094.1742 C 117.27697,3094.6974 118.12749,3094.8709 118.81733,3094.5948 C 119.50718,3094.3188 119.99483,3093.6098 119.99999,3092.8756 L 119.99999,3076.598 C 120.00199,3075.6172 119.09611,3074.7239 118.10176,3074.7256 L 101.93612,3074.7256 L 101.93612,3074.7256 z" - id="path11734" - sodipodi:nodetypes="csccscccc" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/intro.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/intro.png" - id="path11895" - d="M 57.40206,3074.725 C 56.405981,3074.74 55.509994,3075.6501 55.51173,3076.6463 L 55.51173,3150.8032 C 55.51003,3151.7993 56.406014,3152.7099 57.40206,3152.7244 L 118.07864,3152.7244 C 119.08505,3152.7244 120.00156,3151.8096 119.99996,3150.8032 L 119.99996,3103.049 C 120.00296,3102.545 119.7975,3102.0429 119.44216,3101.6855 L 93.19443,3075.3138 C 92.84215,3074.9473 92.33924,3074.7301 91.83091,3074.725 L 57.40206,3074.725 L 57.40206,3074.725 z" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - sodipodi:nodetypes="ccccccccccc" /> - <path - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.86823654;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Andale Mono;-inkscape-font-specification:Andale Mono" - d="M 57.40206,3074.725 C 56.35235,3074.7402 55.509901,3075.5965 55.51173,3076.6463 L 55.51173,3150.8032 C 55.509956,3151.853 56.352389,3152.7092 57.40206,3152.7244 L 118.07864,3152.7244 C 118.58844,3152.7252 119.07761,3152.5231 119.4381,3152.1626 C 119.7986,3151.8022 120.00077,3151.313 119.99996,3150.8032 L 119.99996,3103.049 C 120.00293,3102.5384 119.80217,3102.0476 119.44216,3101.6855 L 93.19443,3075.3138 C 92.837431,3074.9424 92.346043,3074.7302 91.83091,3074.725 L 57.40206,3074.725 L 57.40206,3074.725 z M 59.32339,3078.5676 L 91.02519,3078.5676 L 116.15732,3103.8238 L 116.15732,3148.8818 L 59.32339,3148.8818 L 59.32339,3078.5676 z" - id="path11736" - inkscape:export-filename="/home/christoph/Desktop/LibreOffice Artwork/intro.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </g> - </g> - <text - transform="scale(1.0168078,0.98347)" - font-size="103.091" - id="text43" - style="font-size:48.89245605px;font-family:Vegur-Regular" - x="2336.854" - y="540.82001" /> - <text - transform="scale(0.9979479,1.0020563)" - font-size="103.091" - id="text3748" - style="font-size:91.03964996px;font-family:Vegur-Regular" - x="2230.6494" - y="417.58487" /> - </g> -</svg> diff --git a/setup_native/source/win32/nsis/brosdkbanner.bmp b/setup_native/source/win32/nsis/brosdkbanner.bmp Binary files differdeleted file mode 100644 index 0a2961accbda..000000000000 --- a/setup_native/source/win32/nsis/brosdkbanner.bmp +++ /dev/null diff --git a/setup_native/source/win32/nsis/downloadtemplate.nsi b/setup_native/source/win32/nsis/downloadtemplate.nsi index 6484ef901e50..90fcdfea5633 100644 --- a/setup_native/source/win32/nsis/downloadtemplate.nsi +++ b/setup_native/source/win32/nsis/downloadtemplate.nsi @@ -275,24 +275,10 @@ ALLLANGUAGESPLACEHOLDER Function SetupBranding File "/oname=$PLUGINSDIR\modern-header.bmp" BANNERBMPPLACEHOLDER - File "/oname=$PLUGINSDIR\modern-header-br.bmp" BANNERBMPPLACEHOLDER_BR File "/oname=$PLUGINSDIR\modern-wizard.bmp" WELCOMEBMPPLACEHOLDER - File "/oname=$PLUGINSDIR\modern-wizard-br.bmp" WELCOMEBMPPLACEHOLDER_BR - - ; use broffice specific branding if we are in Brazil -; messageBox MB_OK "Language: $LANGUAGE" - StrCmp $LANGUAGE "1046" BrOfficeSplash DefaultSplash - DefaultSplash: -; messageBox MB_OK "LibreOffice" - SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header.bmp" - !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 1" "Text" "$PLUGINSDIR\modern-wizard.bmp" - GoTo atEnd - BrOfficeSplash: -; messageBox MB_OK "BrOffice" - SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header-br.bmp" - !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 1" "Text" "$PLUGINSDIR\modern-wizard-br.bmp" - GoTo atEnd - atEnd: + + SetBrandingImage /IMGID=1046 "$PLUGINSDIR\modern-header.bmp" + !insertmacro INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 1" "Text" "$PLUGINSDIR\modern-wizard.bmp" FunctionEnd ; Reserve files diff --git a/sfx2/inc/sfx2/objsh.hxx b/sfx2/inc/sfx2/objsh.hxx index a3ad4fbf917c..48f938626e6e 100644 --- a/sfx2/inc/sfx2/objsh.hxx +++ b/sfx2/inc/sfx2/objsh.hxx @@ -228,6 +228,9 @@ protected: /// template method, called by FlushDocInfo; this implementation is empty virtual void DoFlushDocInfo(); + // helper method + void AddToRecentlyUsedList(); + public: TYPEINFO(); SFX_DECL_INTERFACE(SFX_INTERFACE_SFXDOCSH) diff --git a/sfx2/source/doc/doctemplates.cxx b/sfx2/source/doc/doctemplates.cxx index 03897b24531a..dedc88f183b5 100644 --- a/sfx2/source/doc/doctemplates.cxx +++ b/sfx2/source/doc/doctemplates.cxx @@ -48,6 +48,7 @@ #include <com/sun/star/beans/XPropertySetInfo.hpp> #include <com/sun/star/beans/XPropertyContainer.hpp> #include <com/sun/star/beans/StringPair.hpp> +#include <com/sun/star/util/XMacroExpander.hpp> #include <com/sun/star/container/XContainerQuery.hpp> #include <com/sun/star/document/XTypeDetection.hpp> #include <com/sun/star/document/XStandaloneDocumentInfo.hpp> @@ -593,11 +594,45 @@ void SfxDocTplService_Impl::getDirList() maTemplateDirs = Sequence< OUString >( nCount ); + uno::Reference< XComponentContext > xCtx; + uno::Reference< util::XMacroExpander > xExpander; + uno::Reference< XPropertySet > xPropSet( mxFactory, UNO_QUERY ); + const rtl::OUString aPrefix( + RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.expand:" ) ); + + if ( xPropSet.is() ) + { + xPropSet->getPropertyValue( + rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ) + >>= xCtx; + } + + if ( xCtx.is() ) + { + xCtx->getValueByName( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "/singletons/com.sun.star.util.theMacroExpander" ) ) ) + >>= xExpander; + + OSL_ENSURE( xExpander.is(), + "Unable to obtain macro expander singleton!" ); + } + for ( sal_uInt16 i=0; i<nCount; i++ ) { aURL.SetSmartProtocol( INET_PROT_FILE ); aURL.SetURL( aDirs.GetToken( i, C_DELIM ) ); maTemplateDirs[i] = aURL.GetMainURL( INetURLObject::NO_DECODE ); + + sal_Int32 nIndex = maTemplateDirs[i].indexOf( aPrefix ); + if ( nIndex != -1 && xExpander.is() ) + { + maTemplateDirs[i] = maTemplateDirs[i].replaceAt(nIndex, + aPrefix.getLength(), + rtl::OUString()); + maTemplateDirs[i] = xExpander->expandMacros( maTemplateDirs[i] ); + } } aValue <<= maTemplateDirs; diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index d570e0b3e028..954df88eb949 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -797,15 +797,7 @@ sal_Bool SfxObjectShell::DoLoad( SfxMedium *pMed ) && !( pPreviewItem && pPreviewItem->GetValue() ) && !( pHiddenItem && pHiddenItem->GetValue() ) ) { - INetURLObject aUrl( pMedium->GetOrigURL() ); - - if ( aUrl.GetProtocol() == INET_PROT_FILE ) - { - const SfxFilter* pOrgFilter = pMedium->GetOrigFilter(); - Application::AddToRecentDocumentList( - aUrl.GetURLNoPass( INetURLObject::NO_DECODE ), - (pOrgFilter) ? pOrgFilter->GetMimeType() : String() ); - } + AddToRecentlyUsedList(); } } @@ -2121,9 +2113,23 @@ sal_Bool SfxObjectShell::DoSaveCompleted( SfxMedium* pNewMed ) pMedium->ClearBackup_Impl(); pMedium->LockOrigFileOnDemand( sal_True, sal_False ); + AddToRecentlyUsedList(); + return bOk; } +void SfxObjectShell::AddToRecentlyUsedList() +{ + INetURLObject aUrl( pMedium->GetOrigURL() ); + + if ( aUrl.GetProtocol() == INET_PROT_FILE ) + { + const SfxFilter* pOrgFilter = pMedium->GetOrigFilter(); + Application::AddToRecentDocumentList( aUrl.GetURLNoPass( INetURLObject::NO_DECODE ), + (pOrgFilter) ? pOrgFilter->GetMimeType() : String() ); + } +} + //------------------------------------------------------------------------- sal_Bool SfxObjectShell::ConvertFrom diff --git a/solenv/bin/ooinstall b/solenv/bin/ooinstall index 83717fa68e1e..4afdb23d0133 100755 --- a/solenv/bin/ooinstall +++ b/solenv/bin/ooinstall @@ -29,8 +29,10 @@ for $arg (@ARGV) { $help = 1; } else { # Cwd::realpath does not work if the path does not exist - mkpath($arg) unless -d $arg; - $path = Cwd::realpath( $arg ); + mkpath($ENV{DESTDIR} . $arg) unless -d $ENV{DESTDIR} . $arg; + $path = Cwd::realpath( $ENV{DESTDIR} . $arg ); + my $destdir = Cwd::realpath( $ENV{DESTDIR} ); + $path =~ s|$destdir||; } } diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk index d7ec6f04ad1f..5c33719a2edb 100644 --- a/solenv/gbuild/CppunitTest.mk +++ b/solenv/gbuild/CppunitTest.mk @@ -36,7 +36,7 @@ export DBGSV_ERROR_OUT # gb_CppunitTest_TARGETTYPE # gb_CppunitTest_get_filename gb_CppunitTest_CPPTESTTARGET := $(call gb_Executable_get_target,cppunit/cppunittester) -gb_CppunitTest_CPPTESTCOMMAND := $(gb_CppunitTest_CPPTESTPRECOMMAND) $(gb_CppunitTest_GDBTRACE) STAR_RESOURCEPATH=$(dir $(call gb_ResTarget_get_outdir_target,example)) $(gb_CppunitTest_CPPTESTTARGET) +gb_CppunitTest_CPPTESTCOMMAND := $(gb_CppunitTest_CPPTESTPRECOMMAND) STAR_RESOURCEPATH=$(dir $(call gb_ResTarget_get_outdir_target,example)) LANG=en_US.UTF-8 $(gb_CppunitTest_GDBTRACE) $(gb_CppunitTest_CPPTESTTARGET) gb_CppunitTest__get_linktargetname = CppunitTest/$(call gb_CppunitTest_get_filename,$(1)) .PHONY : $(call gb_CppunitTest_get_clean_target,%) diff --git a/solenv/gbuild/platform/openbsd.mk b/solenv/gbuild/platform/openbsd.mk index 92654afa5923..d82a54d812ce 100755 --- a/solenv/gbuild/platform/openbsd.mk +++ b/solenv/gbuild/platform/openbsd.mk @@ -41,6 +41,8 @@ gb_STDLIBS := pthread include $(GBUILDDIR)/platform/unxgcc.mk +gb_LinkTarget_NOEXCEPTIONFLAGS += -DBOOST_NO_EXCEPTIONS + define gb_LinkTarget__command_dynamiclink $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ diff --git a/solenv/inc/langlist.mk b/solenv/inc/langlist.mk index 18680e77ce38..31b5ba2e8736 100644 --- a/solenv/inc/langlist.mk +++ b/solenv/inc/langlist.mk @@ -25,10 +25,10 @@ # #************************************************************************* +# Complete list of all supported localizations (ISO codes) completelangiso=af \ ar \ as \ -as-IN \ ast \ be \ bo \ @@ -36,10 +36,7 @@ bg \ br \ brx \ bn \ -bn-BD \ -bn-IN \ bs \ -by \ ca \ ca-XV \ cs \ @@ -59,26 +56,18 @@ eu \ fa \ fi \ fr \ -fur \ ga \ -gd \ gl \ gu \ -gu-IN \ he \ hi \ -hi-IN \ hr \ -ht \ hu \ +id \ is \ it \ ja \ -jbo \ -kid \ -ky \ ka \ -kab \ kk \ km \ kn \ @@ -93,11 +82,8 @@ mai \ mk \ mn \ mni \ -ms \ ml \ -ml-IN \ mr \ -mr-IN \ my \ ne \ nb \ @@ -105,56 +91,37 @@ nl \ nn \ nr \ nso \ -ny \ om \ -oms \ oc \ or \ -or-IN \ -pap \ -pa \ pa-IN \ pl \ -ps \ pt \ pt-BR \ -gug \ -pyg \ ro \ ru \ rw \ sat \ -sa \ sa-IN \ si \ -sc \ sd \ sq \ sk \ sl \ sh \ -so \ sr \ ss \ st \ sv \ -sw \ sw-TZ \ te \ -te-IN \ -ti \ -ti-ER \ ta \ -ta-IN \ -tlh \ th \ tn \ tr \ ts \ tg \ ug \ -ur \ -ur-IN \ uk \ uz \ ve \ diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk index f3346e78066b..fafb78820522 100644 --- a/solenv/inc/minor.mk +++ b/solenv/inc/minor.mk @@ -1,5 +1,5 @@ RSCVERSION=300 -RSCREVISION=300m103(Build:3) -BUILD=3 +RSCREVISION=300m103(Build:4) +BUILD=4 LAST_MINOR=m103 SOURCEVERSION=DEV300 diff --git a/solenv/inc/postset.mk b/solenv/inc/postset.mk index 487cc8f2d559..3d4f4158d08f 100644 --- a/solenv/inc/postset.mk +++ b/solenv/inc/postset.mk @@ -29,110 +29,7 @@ # This language will be always included! defaultlangiso=en-US -# Complete list of all supported ISO codes -completelangiso=af \ -ar \ -as \ -ast \ -be \ -bo \ -bg \ -br \ -brx \ -bn \ -bs \ -ca \ -ca-XV \ -cs \ -cy \ -da \ -de \ -dgo \ -dz \ -el \ -en-GB \ -en-US \ -en-ZA \ -eo \ -es \ -et \ -eu \ -fa \ -fi \ -fr \ -ga \ -gl \ -gu \ -he \ -hi \ -hr \ -hu \ -id \ -is \ -it \ -ja \ -ka \ -kk \ -km \ -kn \ -ko \ -kok \ -ks \ -ku \ -lo \ -lt \ -lv \ -mai \ -mk \ -mn \ -mni \ -ml \ -mr \ -my \ -ne \ -nb \ -nl \ -nn \ -nr \ -nso \ -om \ -oc \ -or \ -pa-IN \ -pl \ -pt \ -pt-BR \ -ro \ -ru \ -rw \ -sat \ -sa-IN \ -si \ -sd \ -sq \ -sk \ -sl \ -sh \ -sr \ -ss \ -st \ -sv \ -sw-TZ \ -te \ -ta \ -th \ -tn \ -tr \ -ts \ -tg \ -ug \ -uk \ -uz \ -ve \ -vi \ -xh \ -zh-CN \ -zh-TW \ -zu +# Complete list of all supported localizations (ISO codes) +.INCLUDE : langlist.mk alllangiso=$(strip $(defaultlangiso) $(subst,$(defaultlangiso), $(uniq $(subst,ALL,$(completelangiso) $(WITH_LANG))))) diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk index 356bda2c9d90..e15a8e0921f3 100644 --- a/solenv/inc/settings.mk +++ b/solenv/inc/settings.mk @@ -809,23 +809,9 @@ SOLARCOMMONSDFDIR=$(SOLARSDFDIR) .EXPORT : SOLARBINDIR -.IF "$(GUI)" == "WNT" -L10N_MODULE*=$(shell cygpath -m $(SRC_ROOT)/translations) -.ELSE -L10N_MODULE*=$(SRC_ROOT)/translations -.ENDIF -ALT_L10N_MODULE*=$(SOLARSRC)$/l10n_so - .IF "$(WITH_LANG)"!="" .INCLUDE .IGNORE: $(L10N_MODULE)/$(COMMON_OUTDIR)$(PROEXT)/inc/localization_present.mk -.INCLUDE .IGNORE: $(ALT_L10N_MODULE)/$(COMMON_OUTDIR)$(PROEXT)/inc/localization_present.mk - -# check for localizations not hosted in l10n module. if a file exists there -# it won't in l10n -.IF "$(ALT_LOCALIZATION_FOUND)"!="" -TRYALTSDF:=$(ALT_L10N_MODULE)$/$(COMMON_OUTDIR)$(PROEXT)$/misc/sdf$/$(PRJNAME)$/$(PATH_IN_MODULE)$/localize.sdf -LOCALIZESDF:=$(strip $(shell @+$(IFEXIST) $(TRYALTSDF) $(THEN) echo $(TRYALTSDF) $(FI))) -.ENDIF # "$(ALT_LOCALIZATION_FOUND)"!="" + # if the l10n module exists, use split localize.sdf directly from there .IF "$(LOCALIZATION_FOUND)"!="" && "$(LOCALIZESDF)"=="" # still check for existence as there may be no localization yet diff --git a/svtools/inc/svtools/fileview.hxx b/svtools/inc/svtools/fileview.hxx index 3c78e1d48706..a1a539224b81 100644 --- a/svtools/inc/svtools/fileview.hxx +++ b/svtools/inc/svtools/fileview.hxx @@ -47,6 +47,7 @@ #define FILEVIEW_SHOW_SIZE 0x0020 #define FILEVIEW_SHOW_DATE 0x0040 #define FILEVIEW_SHOW_ALL 0x0070 +#define FILEVIEW_SHOW_NONE 0x00A0 class ViewTabListBox_Impl; class SvtFileView_Impl; @@ -80,6 +81,7 @@ class SVT_DLLPUBLIC SvtFileView : public Control { private: SvtFileView_Impl* mpImp; + sal_Bool bSortColumn; ::com::sun::star::uno::Sequence< ::rtl::OUString > mpBlackList; @@ -108,6 +110,8 @@ public: void SetSizePixel( const Size& rNewSize ); using Window::SetPosSizePixel; virtual void SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ); + void SetSortColumn( sal_Bool bValue ) { bSortColumn = bValue; } + sal_Bool GetSortColumn() { return bSortColumn; } /** initialize the view with the content of a folder given by URL, and aply an immediate filter diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx index b0d92e3fd9aa..1cdf90c2a82a 100644 --- a/svtools/source/contnr/fileview.cxx +++ b/svtools/source/contnr/fileview.cxx @@ -98,6 +98,8 @@ using ::rtl::OUString; #define COLUMN_SIZE 3 #define COLUMN_DATE 4 +#define aSeparatorStr "----------------------------------" + #define ROW_HEIGHT 17 // the height of a row has to be a little higher than the bitmap #define QUICK_SEARCH_TIMEOUT 1500 // time in mSec before the quicksearch string will be reseted @@ -724,6 +726,7 @@ ViewTabListBox_Impl::ViewTabListBox_Impl( Window* pParentWin, mbEnableRename ( sal_True ) { + sal_Bool bViewHeader = true; Size aBoxSize = pParentWin->GetSizePixel(); mpHeaderBar = new HeaderBar( pParentWin, WB_BUTTONSTYLE | WB_BOTTOMBORDER ); mpHeaderBar->SetPosSizePixel( Point( 0, 0 ), mpHeaderBar->CalcWindowSizePixel() ); @@ -736,6 +739,8 @@ ViewTabListBox_Impl::ViewTabListBox_Impl( Window* pParentWin, mpHeaderBar->InsertItem( COLUMN_SIZE, String( SvtResId( STR_SVT_FILEVIEW_COLUMN_SIZE ) ), 80, nBits ); mpHeaderBar->InsertItem( COLUMN_DATE, String( SvtResId( STR_SVT_FILEVIEW_COLUMN_DATE ) ), 500, nBits ); } + if( ( nFlags & FILEVIEW_SHOW_NONE ) == FILEVIEW_SHOW_NONE ) + bViewHeader = false; else mpHeaderBar->InsertItem( COLUMN_TITLE, String( SvtResId( STR_SVT_FILEVIEW_COLUMN_TITLE ) ), 600, nBits ); @@ -747,7 +752,8 @@ ViewTabListBox_Impl::ViewTabListBox_Impl( Window* pParentWin, SetEntryHeight( ROW_HEIGHT ); Show(); - mpHeaderBar->Show(); + if( bViewHeader ) + mpHeaderBar->Show(); maResetQuickSearch.SetTimeout( QUICK_SEARCH_TIMEOUT ); maResetQuickSearch.SetTimeoutHdl( LINK( this, ViewTabListBox_Impl, ResetQuickSearch_Impl ) ); @@ -1219,6 +1225,7 @@ SvtFileView::SvtFileView( Window* pParent, const ResId& rResId, mpImp = new SvtFileView_Impl( this, xCmdEnv, nFlags, bOnlyFolder ); mpImp->mpView->ForbidEmptyText(); + SetSortColumn( true ); long pTabs[] = { 5, 20, 180, 320, 400, 600 }; mpImp->mpView->SetTabs( &pTabs[0], MAP_PIXEL ); @@ -1241,6 +1248,7 @@ SvtFileView::SvtFileView( Window* pParent, const ResId& rResId, sal_Int8 nFlags Reference < XCommandEnvironment > xCmdEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() ); mpImp = new SvtFileView_Impl( this, xCmdEnv, nFlags, ( nFlags & FILEVIEW_ONLYFOLDER ) == FILEVIEW_ONLYFOLDER ); + SetSortColumn( true ); if ( ( nFlags & FILEVIEW_SHOW_ALL ) == FILEVIEW_SHOW_ALL ) { @@ -1254,7 +1262,8 @@ SvtFileView::SvtFileView( Window* pParent, const ResId& rResId, sal_Int8 nFlags long pTabs[] = { 2, 20, 600 }; mpImp->mpView->SetTabs( &pTabs[0], MAP_PIXEL ); } - + if ( ( nFlags & FILEVIEW_SHOW_NONE ) == FILEVIEW_SHOW_NONE ) + SetSortColumn( false ); if ( ( nFlags & FILEVIEW_MULTISELECTION ) == FILEVIEW_MULTISELECTION ) mpImp->mpView->SetSelectionMode( MULTIPLE_SELECTION ); @@ -1512,7 +1521,8 @@ sal_Bool SvtFileView::Initialize( const Sequence< OUString >& aContents ) mpImp->Clear(); mpImp->CreateVector_Impl( aContents ); - mpImp->SortFolderContent_Impl(); + if( GetSortColumn() ) + mpImp->SortFolderContent_Impl(); mpImp->OpenFolder_Impl(); @@ -2416,9 +2426,11 @@ void SvtFileView_Impl::CreateVector_Impl( const Sequence < OUString > &rList ) pEntry->maDisplayText = aDisplayText; // detect the image - INetURLObject aObj( pEntry->maImageURL.getLength() ? pEntry->maImageURL : pEntry->maTargetURL ); - pEntry->maImage = SvFileInformationManager::GetImage( aObj, sal_False ); - + if( aValue != rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(aSeparatorStr) ) ) + { + INetURLObject aObj( pEntry->maImageURL.getLength() ? pEntry->maImageURL : pEntry->maTargetURL ); + pEntry->maImage = SvFileInformationManager::GetImage( aObj, sal_False ); + } maContent.push_back( pEntry ); } } diff --git a/svtools/source/contnr/templwin.cxx b/svtools/source/contnr/templwin.cxx index ea768918e460..19dcdb26dd87 100644 --- a/svtools/source/contnr/templwin.cxx +++ b/svtools/source/contnr/templwin.cxx @@ -100,6 +100,7 @@ using namespace ::com::sun::star::view; using namespace svtools; extern ::rtl::OUString CreateExactSizeText_Impl( sal_Int64 nSize ); // fileview.cxx +#define aSeparatorStr "----------------------------------" #define SPLITSET_ID 0 #define COLSET_ID 1 @@ -594,7 +595,7 @@ SvtFileViewWindow_Impl::SvtFileViewWindow_Impl( SvtTemplateWindow* pParent ) : Window( pParent, WB_DIALOGCONTROL | WB_TABSTOP | WB_BORDER | WB_3DLOOK ), rParent ( *pParent ), - aFileView ( this, SvtResId( CTRL_FILEVIEW ), FILEVIEW_SHOW_TITLE ), + aFileView ( this, SvtResId( CTRL_FILEVIEW ), FILEVIEW_SHOW_NONE ), bIsTemplateFolder ( sal_False ) { @@ -651,9 +652,14 @@ Sequence< ::rtl::OUString > SvtFileViewWindow_Impl::GetNewDocContents() const for ( i = 0; i < nCount; ++i ) { GetMenuEntry_Impl( aDynamicMenuEntries[i], aTitle, aURL, aTargetFrame, aImageURL ); - - if ( aURL == sSeparator || aURL == sSlotURL ) + if( aURL == sSlotURL ) continue; + if( aURL == sSeparator ) + { + String aSeparator( ASCII_STR( aSeparatorStr ) ); + ::rtl::OUString* pSeparator = new ::rtl::OUString( aSeparator ); + aNewDocs.push_back( pSeparator ); + } else { // title diff --git a/svtools/source/control/tabbar.cxx b/svtools/source/control/tabbar.cxx index 0455df6b4b26..bc0ee75a845b 100644 --- a/svtools/source/control/tabbar.cxx +++ b/svtools/source/control/tabbar.cxx @@ -1838,6 +1838,7 @@ void TabBar::InsertPage( sal_uInt16 nPageId, const XubString& rText, } else { mpItemList->push_back( pItem ); } + mbSizeFormat = sal_True; // CurPageId gegebenenfalls setzen if ( !mnCurPageId ) diff --git a/svtools/source/filter.vcl/wmf/winmtf.cxx b/svtools/source/filter.vcl/wmf/winmtf.cxx index b0625567d5d6..b60ae0676cc9 100644 --- a/svtools/source/filter.vcl/wmf/winmtf.cxx +++ b/svtools/source/filter.vcl/wmf/winmtf.cxx @@ -377,6 +377,19 @@ Point WinMtfOutput::ImplMap( const Point& rPt ) { switch( mnMapMode ) { + case MM_TEXT: + fX2 -= mnWinOrgX; + fY2 -= mnWinOrgY; + if( mnDevWidth != 1 || mnDevHeight != 1 ) { + fX2 *= 2540.0/mnUnitsPerInch; + fY2 *= 2540.0/mnUnitsPerInch; + } + fX2 += mnDevOrgX; + fY2 += mnDevOrgY; + fX2 *= (double)mnMillX * 100.0 / (double)mnPixX; + fY2 *= (double)mnMillY * 100.0 / (double)mnPixY; + + break; case MM_LOENGLISH : { fX2 -= mnWinOrgX; @@ -452,6 +465,15 @@ Size WinMtfOutput::ImplMap( const Size& rSz ) { switch( mnMapMode ) { + case MM_TEXT: + if( mnDevWidth != 1 && mnDevHeight != 1 ) { + fWidth *= 2540.0/mnUnitsPerInch; + fHeight*= 2540.0/mnUnitsPerInch; + } else { + fWidth *= (double)mnMillX * 100 / (double)mnPixX; + fHeight *= (double)mnMillY * 100 / (double)mnPixY; + } + break; case MM_LOENGLISH : { fWidth *= 25.40; @@ -894,6 +916,7 @@ WinMtfOutput::WinMtfOutput( GDIMetaFile& rGDIMetaFile ) : mbComplexClip ( false ), mnGfxMode ( GM_COMPATIBLE ), mnMapMode ( MM_TEXT ), + mnUnitsPerInch ( 96 ), mnDevOrgX ( 0 ), mnDevOrgY ( 0 ), mnDevWidth ( 1 ), @@ -2014,6 +2037,14 @@ void WinMtfOutput::SetMapMode( sal_uInt32 nMapMode ) //----------------------------------------------------------------------------------- +void WinMtfOutput::SetUnitsPerInch( sal_uInt16 nUnitsPerInch ) +{ + if( nUnitsPerInch != 0 ) + mnUnitsPerInch = nUnitsPerInch; +} + +//----------------------------------------------------------------------------------- + void WinMtfOutput::SetWorldTransform( const XForm& rXForm ) { maXForm.eM11 = rXForm.eM11; diff --git a/svtools/source/filter.vcl/wmf/winmtf.hxx b/svtools/source/filter.vcl/wmf/winmtf.hxx index bd2293fe108b..d0b4e42cbed4 100644 --- a/svtools/source/filter.vcl/wmf/winmtf.hxx +++ b/svtools/source/filter.vcl/wmf/winmtf.hxx @@ -581,6 +581,8 @@ class WinMtfOutput sal_uInt32 mnGfxMode; sal_uInt32 mnMapMode; + sal_uInt16 mnUnitsPerInch; + XForm maXForm; sal_Int32 mnDevOrgX, mnDevOrgY; sal_Int32 mnDevWidth, mnDevHeight; @@ -627,6 +629,7 @@ class WinMtfOutput sal_uInt32 GetMapMode() const { return mnMapMode; }; void SetMapMode( sal_uInt32 mnMapMode ); + void SetUnitsPerInch( sal_uInt16 nUnitsPerInch ); void SetWorldTransform( const XForm& rXForm ); void ModifyWorldTransform( const XForm& rXForm, sal_uInt32 nMode ); diff --git a/svtools/source/filter.vcl/wmf/winwmf.cxx b/svtools/source/filter.vcl/wmf/winwmf.cxx index c7d33a824adf..095b1c45eb68 100644 --- a/svtools/source/filter.vcl/wmf/winwmf.cxx +++ b/svtools/source/filter.vcl/wmf/winwmf.cxx @@ -1036,6 +1036,7 @@ sal_Bool WMFReader::ReadHeader() pWMF->Seek( nStrmPos ); } + pOut->SetUnitsPerInch( nUnitsPerInch ); pOut->SetWinOrg( aPlaceableBound.TopLeft() ); aWMFSize = Size( labs( aPlaceableBound.GetWidth() ), labs( aPlaceableBound.GetHeight() ) ); pOut->SetWinExt( aWMFSize ); diff --git a/svx/AllLangResTarget_svx.mk b/svx/AllLangResTarget_svx.mk index 3ae26647309b..8b976275694a 100644 --- a/svx/AllLangResTarget_svx.mk +++ b/svx/AllLangResTarget_svx.mk @@ -110,6 +110,7 @@ $(WORKDIR)/inc/svx/globlmn.hrc : $(SRCDIR)/svx/inc/globlmn_tmpl.hrc echo copying $@ -mkdir -p $(WORKDIR)/inc/svx cp $(SRCDIR)/svx/inc/globlmn_tmpl.hrc $(WORKDIR)/inc/svx/globlmn.hrc + cp $(SRCDIR)/svx/inc/globlmn_tmpl.hrc $(OUTDIR)/inc/svx/globlmn.hrc rm -f $(WORKDIR)/inc/svx/lastrun.mk else -include $(WORKDIR)/inc/svx/lastrun.mk @@ -125,6 +126,7 @@ $(WORKDIR)/inc/svx/globlmn.hrc : $(SRCDIR)/svx/inc/globlmn_tmpl.hrc $(gb_SrsPart $(gb_SrsPartMergeTarget_TRANSEXCOMMAND) \ -p svx \ -i $< -o $@ -m $(gb_SrsPartMergeTarget_SDFLOCATION)/svx/inc/localize.sdf -l all) + cp $(WORKDIR)/inc/svx/globlmn.hrc $(OUTDIR)/inc/svx/globlmn.hrc endif .PHONY : $(WORKDIR)/inc/svx/globlmn.hrc_clean diff --git a/svx/Package_inc.mk b/svx/Package_inc.mk index d5ffc3cb1aa4..9be0b4b5dce9 100644 --- a/svx/Package_inc.mk +++ b/svx/Package_inc.mk @@ -556,5 +556,4 @@ $(eval $(call gb_Package_add_file,svx_inc,inc/svx/svxdllapi.h,svx/svxdllapi.h)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/colrctrl.hxx,svx/colrctrl.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/fmdpage.hxx,svx/fmdpage.hxx)) $(eval $(call gb_Package_add_file,svx_inc,inc/svx/sxmtpitm.hxx,svx/sxmtpitm.hxx)) -$(eval $(call gb_Package_add_file,svx_inc,inc/svx/globlmn.hrc,globlmn_tmpl.hrc)) diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index d0cb45fe3d61..18876c50a14d 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -454,8 +454,9 @@ OutlinerView* SdrObjEditView::ImpMakeOutlinerView(Window* pWin, sal_Bool /*bNoPa pOutlView->SetAnchorMode((EVAnchorMode)(pText->GetOutlinerViewAnchorMode())); pTextEditOutliner->SetFixedCellHeight(((const SdrTextFixedCellHeightItem&)pText->GetMergedItem(SDRATTR_TEXT_USEFIXEDCELLHEIGHT)).GetValue()); } - pOutlView->SetOutputArea(aTextEditArea); + // do update before setting output area so that aTextEditArea can be recalculated pTextEditOutliner->SetUpdateMode(sal_True); + pOutlView->SetOutputArea(aTextEditArea); ImpInvalidateOutlinerView(*pOutlView); return pOutlView; } diff --git a/svx/util/svxcore.component b/svx/util/svxcore.component index 2f829cb52a77..d266e06188c1 100755 --- a/svx/util/svxcore.component +++ b/svx/util/svxcore.component @@ -25,9 +25,7 @@ * for a copy of the LGPLv3 License. * **********************************************************************--> - -<component loader="com.sun.star.loader.SharedLibrary" - xmlns="http://openoffice.org/2010/uno-components"> +<component xmlns="http://openoffice.org/2010/uno-components" loader="com.sun.star.loader.SharedLibrary"> <implementation name="com.sun.star.comp.svx.ExtrusionDepthController"> <service name="com.sun.star.frame.PopupMenuController"/> </implementation> @@ -40,10 +38,10 @@ <implementation name="com.sun.star.comp.svx.ExtrusionSurfaceController"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> - <implementation name="com.sun.star.comp.svx.FontWorkAlignmentController"> + <implementation name="com.sun.star.comp.svx.FontworkAlignmentController"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> - <implementation name="com.sun.star.comp.svx.FontWorkCharacterSpacingController"> + <implementation name="com.sun.star.comp.svx.FontworkCharacterSpacingController"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> </component> diff --git a/sw/inc/rcid.hrc b/sw/inc/rcid.hrc index f392c05a07db..ada047c51d07 100644 --- a/sw/inc/rcid.hrc +++ b/sw/inc/rcid.hrc @@ -103,7 +103,7 @@ // Page frame #define RC_PAGEFRM_BEGIN RC_PAGEFRM -#define RC_PAGEFRM_EN (RC_PAGEFRM + 99) +#define RC_PAGEFRM_END (RC_PAGEFRM + 99) // SW/Web #define RC_WEB_BEGIN RC_WEB diff --git a/sw/source/core/doc/poolfmt.cxx b/sw/source/core/doc/poolfmt.cxx index ca115007c9eb..5212f709f1ee 100644 --- a/sw/source/core/doc/poolfmt.cxx +++ b/sw/source/core/doc/poolfmt.cxx @@ -1308,7 +1308,7 @@ SwFmt* SwDoc::GetFmtFromPool( sal_uInt16 nId ) aSet.Put( SwFmtAnchor( FLY_AT_PARA )); aSet.Put( SwFmtHoriOrient( 0, text::HoriOrientation::CENTER, text::RelOrientation::FRAME )); aSet.Put( SwFmtVertOrient( 0, text::VertOrientation::TOP, text::RelOrientation::FRAME )); - aSet.Put( SwFmtSurround( SURROUND_NONE )); + aSet.Put( SwFmtSurround( SURROUND_IDEAL )); } break; case RES_POOLFRM_FORMEL: diff --git a/sw/source/core/inc/frmtool.hxx b/sw/source/core/inc/frmtool.hxx index 0cc9898089b6..ba1b0f43d539 100644 --- a/sw/source/core/inc/frmtool.hxx +++ b/sw/source/core/inc/frmtool.hxx @@ -72,7 +72,7 @@ void MA_FASTCALL DrawGraphic( const SvxBrushItem *, OutputDevice *, // - method to align rectangle // Created declaration here to avoid <extern> declarations -void MA_FASTCALL SwAlignRect( SwRect &rRect, ViewShell *pSh ); +void MA_FASTCALL SwAlignRect( SwRect &rRect, const ViewShell *pSh ); // - method to align graphic rectangle // Created declaration here to avoid <extern> declarations diff --git a/sw/source/core/inc/pagefrm.hrc b/sw/source/core/inc/pagefrm.hrc index 302ba9a76b16..b8f89e091c15 100644 --- a/sw/source/core/inc/pagefrm.hrc +++ b/sw/source/core/inc/pagefrm.hrc @@ -31,13 +31,11 @@ #include "rcid.hrc" // Bitmaps for page shadow -#define BMP_PAGE_RIGHT_SHADOW_MASK RC_PAGEFRM_BEGIN + 0 -#define BMP_PAGE_BOTTOM_RIGHT_SHADOW_MASK RC_PAGEFRM_BEGIN + 1 -#define BMP_PAGE_BOTTOM_SHADOW_MASK RC_PAGEFRM_BEGIN + 2 +#define BMP_PAGE_SHADOW_MASK RC_PAGEFRM_BEGIN + 0 // If you add resources, don't forget to update this -#define PAGEFRM_ACT_END BMP_PAGE_BOTTOMLEFT_SHADOW +#define PAGEFRM_ACT_END BMP_PAGE_SHADOW_MASK // Sanity check #if PAGEFRM_ACT_END > RC_PAGEFRM_END diff --git a/sw/source/core/inc/pagefrm.hxx b/sw/source/core/inc/pagefrm.hxx index 92b11aed27ea..1fb456dea39d 100644 --- a/sw/source/core/inc/pagefrm.hxx +++ b/sw/source/core/inc/pagefrm.hxx @@ -95,29 +95,7 @@ class SwPageFrm: public SwFtnBossFrm // Anpassen der max. Fussnotenhoehen in den einzelnen Spalten void SetColMaxFtnHeight(); - /** determine rectangle for right page shadow - - #i9719# - - @param _rPageRect - input parameter - constant instance reference of the page rectangle. - Generally, it's the frame area of the page, but for empty pages in print - preview, this parameter is useful. - - @param _pViewShell - input parameter - instance of the view shell, for which the rectangle - has to be generated. - - @param _orRightShadowRect - output parameter - instance reference of the right shadow rectangle for - the given page rectangle - */ - static void GetRightShadowRect( const SwRect& _rPageRect, - ViewShell* _pViewShell, - SwRect& _orRightShadowRect, - bool bRightSidebar ); - - /** determine rectangle for bottom page shadow + /** determine rectangle for horizontal page shadow #i9719# @@ -135,10 +113,11 @@ class SwPageFrm: public SwFtnBossFrm the given page rectangle */ - static void GetBottomShadowRect( const SwRect& _rPageRect, - ViewShell* _pViewShell, + static void GetHorizontalShadowRect( const SwRect& _rPageRect, + const ViewShell* _pViewShell, SwRect& _orBottomShadowRect, - bool bFullBottomShadow, + bool bPaintLeftShadow, + bool bPaintRightShadow, bool bRightSidebar ); /** adds the sidebar used for notes to right and left border @@ -193,6 +172,8 @@ public: inline const SwCntntFrm *FindFirstBodyCntnt() const; inline const SwCntntFrm *FindLastBodyCntnt() const; + SwRect GetBoundRect() const; + //Spezialisiertes GetCntntPos() fuer Felder in Rahmen. void GetCntntPosition( const Point &rPt, SwPosition &rPos ) const; @@ -267,6 +248,8 @@ public: inline void ValidateWordCount() const; inline sal_Bool IsInvalid() const; inline sal_Bool IsInvalidFly() const; + sal_Bool IsRightShadowNeeded() const; + sal_Bool IsLeftShadowNeeded() const; sal_Bool IsInvalidFlyLayout() const { return bInvalidFlyLayout; } sal_Bool IsInvalidFlyCntnt() const { return bInvalidFlyCntnt; } sal_Bool IsInvalidFlyInCnt() const { return bInvalidFlyInCnt; } @@ -328,9 +311,9 @@ public: shadow with & position). */ static void PaintBorderAndShadow( const SwRect& _rPageRect, - ViewShell* _pViewShell, + const ViewShell* _pViewShell, + bool bPaintLeftShadow, bool bPaintRightShadow, - bool bFullBottomShadow, bool bRightSidebar ); /** get bound rectangle of border and shadow for repaints @@ -351,9 +334,12 @@ public: rectangle for the given page rectangle */ static void GetBorderAndShadowBoundRect( const SwRect& _rPageRect, - ViewShell* _pViewShell, + const ViewShell* _pViewShell, SwRect& _orBorderAndShadowBoundRect, - const bool bRightSidebar ); + const bool bLeftShadow, + const bool bRightShadow, + const bool bRightSidebar + ); static void PaintNotesSidebar(const SwRect& _rPageRect, ViewShell* _pViewShell, sal_uInt16 nPageNum, bool bRight); static void PaintNotesSidebarArrows(const Point &aMiddleFirst, const Point &aMiddleSecond, ViewShell* _pViewShell, const Color aColorUp, const Color aColorDown); diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx index e19e086c8b47..e0b4cd7432dc 100644 --- a/sw/source/core/layout/layact.cxx +++ b/sw/source/core/layout/layact.cxx @@ -1399,9 +1399,15 @@ sal_Bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, sal_Bool bAddRect ) if ( pLay->GetPrev() && !pLay->GetPrev()->IsValid() ) pLay->GetPrev()->SetCompletePaint(); - SwRect aOldRect( pLay->Frm() ); + SwRect aOldFrame( pLay->Frm() ); + SwRect aOldRect( aOldFrame ); + if( pLay->IsPageFrm() ) + { + aOldRect = static_cast<SwPageFrm*>(pLay)->GetBoundRect(); + } + pLay->Calc(); - if ( aOldRect != pLay->Frm() ) + if ( aOldFrame != pLay->Frm() ) bChanged = sal_True; sal_Bool bNoPaint = sal_False; @@ -1424,30 +1430,7 @@ sal_Bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, sal_Bool bAddRect ) if ( pLay->IsPageFrm() ) { SwPageFrm* pPageFrm = static_cast<SwPageFrm*>(pLay); - const int nShadowWidth = - pImp->GetShell()->GetOut()->PixelToLogic( Size( pPageFrm->ShadowPxWidth(), 0 ) ).Width(); - - //mod #i6193# added sidebar width - const SwPostItMgr* pPostItMgr = pImp->GetShell()->GetPostItMgr(); - const int nSidebarWidth = pPostItMgr && pPostItMgr->HasNotes() && pPostItMgr->ShowNotes() ? pPostItMgr->GetSidebarWidth() + pPostItMgr->GetSidebarBorderWidth() : 0; - switch ( pPageFrm->SidebarPosition() ) - { - case sw::sidebarwindows::SIDEBAR_LEFT: - { - aPaint.Left( aPaint.Left() - nSidebarWidth); - aPaint.Right( aPaint.Right() + nShadowWidth); - } - break; - case sw::sidebarwindows::SIDEBAR_RIGHT: - { - aPaint.Right( aPaint.Right() + nShadowWidth + nSidebarWidth); - } - break; - case sw::sidebarwindows::SIDEBAR_NONE: - // nothing to do - break; - } - aPaint.Bottom( aPaint.Bottom() + nShadowWidth ); + aPaint = pPageFrm->GetBoundRect(); } sal_Bool bPageInBrowseMode = pLay->IsPageFrm(); @@ -1499,38 +1482,50 @@ sal_Bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, sal_Bool bAddRect ) const bool bLeftToRightViewLayout = pRoot->IsLeftToRightViewLayout(); const bool bPrev = bLeftToRightViewLayout ? pLay->GetPrev() : pLay->GetNext(); const bool bNext = bLeftToRightViewLayout ? pLay->GetNext() : pLay->GetPrev(); + SwPageFrm* pPageFrm = static_cast<SwPageFrm*>(pLay); + const ViewShell *pSh = pLay->getRootFrm()->GetCurrShell(); + SwRect aPageRect( pLay->Frm() ); + + if(pSh) + { + SwPageFrm::GetBorderAndShadowBoundRect(aPageRect, pSh, + aPageRect, pPageFrm->IsLeftShadowNeeded(), pPageFrm->IsRightShadowNeeded(), + pPageFrm->SidebarPosition() == sw::sidebarwindows::SIDEBAR_RIGHT); + } if ( bPrev ) { // top - SwRect aSpaceToPrevPage( pLay->Frm() ); - const SwTwips nTop = aSpaceToPrevPage.Top() - nHalfDocBorder; - if ( nTop >= 0 ) - aSpaceToPrevPage.Top( nTop ); + SwRect aSpaceToPrevPage( aPageRect ); + aSpaceToPrevPage.Top( aSpaceToPrevPage.Top() - nHalfDocBorder ); aSpaceToPrevPage.Bottom( pLay->Frm().Top() ); - pImp->GetShell()->AddPaintRect( aSpaceToPrevPage ); + if(aSpaceToPrevPage.Height() > 0 && aSpaceToPrevPage.Width() > 0) + pImp->GetShell()->AddPaintRect( aSpaceToPrevPage ); + + pSh->GetOut()->DrawRect( aSpaceToPrevPage.SVRect() ); // left - aSpaceToPrevPage = pLay->Frm(); - const SwTwips nLeft = aSpaceToPrevPage.Left() - nHalfDocBorder; - if ( nLeft >= 0 ) - aSpaceToPrevPage.Left( nLeft ); + aSpaceToPrevPage = aPageRect; + aSpaceToPrevPage.Left( aSpaceToPrevPage.Left() - nHalfDocBorder ); aSpaceToPrevPage.Right( pLay->Frm().Left() ); - pImp->GetShell()->AddPaintRect( aSpaceToPrevPage ); + if(aSpaceToPrevPage.Height() > 0 && aSpaceToPrevPage.Width() > 0) + pImp->GetShell()->AddPaintRect( aSpaceToPrevPage ); } if ( bNext ) { // bottom - SwRect aSpaceToNextPage( pLay->Frm() ); + SwRect aSpaceToNextPage( aPageRect ); aSpaceToNextPage.Bottom( aSpaceToNextPage.Bottom() + nHalfDocBorder ); aSpaceToNextPage.Top( pLay->Frm().Bottom() ); - pImp->GetShell()->AddPaintRect( aSpaceToNextPage ); + if(aSpaceToNextPage.Height() > 0 && aSpaceToNextPage.Width() > 0) + pImp->GetShell()->AddPaintRect( aSpaceToNextPage ); // right - aSpaceToNextPage = pLay->Frm(); + aSpaceToNextPage = aPageRect; aSpaceToNextPage.Right( aSpaceToNextPage.Right() + nHalfDocBorder ); aSpaceToNextPage.Left( pLay->Frm().Right() ); - pImp->GetShell()->AddPaintRect( aSpaceToNextPage ); + if(aSpaceToNextPage.Height() > 0 && aSpaceToNextPage.Width() > 0) + pImp->GetShell()->AddPaintRect( aSpaceToNextPage ); } } } @@ -1585,12 +1580,14 @@ sal_Bool SwLayAction::FormatLayout( SwLayoutFrm *pLay, sal_Bool bAddRect ) // OD 11.11.2002 #104414# - add complete frame area as paint area, if frame // area has been already added and after formating its lowers the frame area // is enlarged. + SwRect aBoundRect(pLay->IsPageFrm() ? static_cast<SwPageFrm*>(pLay)->GetBoundRect() : pLay->Frm() ); + if ( bAlreadyPainted && - ( pLay->Frm().Width() > aFrmAtCompletePaint.Width() || - pLay->Frm().Height() > aFrmAtCompletePaint.Height() ) + ( aBoundRect.Width() > aFrmAtCompletePaint.Width() || + aBoundRect.Height() > aFrmAtCompletePaint.Height() ) ) { - pImp->GetShell()->AddPaintRect( pLay->Frm() ); + pImp->GetShell()->AddPaintRect( aBoundRect ); } return bChanged || bTabChanged; } diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx index 948efb8452c5..aa7aa23e02c0 100644 --- a/sw/source/core/layout/pagechg.cxx +++ b/sw/source/core/layout/pagechg.cxx @@ -310,7 +310,7 @@ SwPageFrm::~SwPageFrm() // including border and shadow area. const bool bRightSidebar = (SidebarPosition() == sw::sidebarwindows::SIDEBAR_RIGHT); SwRect aRetoucheRect; - SwPageFrm::GetBorderAndShadowBoundRect( Frm(), pSh, aRetoucheRect, bRightSidebar ); + SwPageFrm::GetBorderAndShadowBoundRect( Frm(), pSh, aRetoucheRect, IsLeftShadowNeeded(), IsRightShadowNeeded(), bRightSidebar ); pSh->AddPaintRect( aRetoucheRect ); } } @@ -674,7 +674,8 @@ void SwPageFrm::_UpdateAttr( const SfxPoolItem *pOld, const SfxPoolItem *pNew, // page frame for determine 'old' rectangle - it's used for invalidating. const bool bRightSidebar = (SidebarPosition() == sw::sidebarwindows::SIDEBAR_RIGHT); SwRect aOldRectWithBorderAndShadow; - SwPageFrm::GetBorderAndShadowBoundRect( aOldPageFrmRect, pSh, aOldRectWithBorderAndShadow, bRightSidebar ); + SwPageFrm::GetBorderAndShadowBoundRect( aOldPageFrmRect, pSh, aOldRectWithBorderAndShadow, + IsLeftShadowNeeded(), IsRightShadowNeeded(), bRightSidebar ); pSh->InvalidateWindows( aOldRectWithBorderAndShadow ); } rInvFlags |= 0x03; diff --git a/sw/source/core/layout/pagefrm.src b/sw/source/core/layout/pagefrm.src index 83b80e4714f9..1c5cafc38c4d 100644 --- a/sw/source/core/layout/pagefrm.src +++ b/sw/source/core/layout/pagefrm.src @@ -1,17 +1,7 @@ #include "pagefrm.hrc" -Bitmap BMP_PAGE_RIGHT_SHADOW_MASK +Bitmap BMP_PAGE_SHADOW_MASK { - File = "page-right-shadow-mask.png"; -}; - -Bitmap BMP_PAGE_BOTTOM_RIGHT_SHADOW_MASK -{ - File = "page-bottomright-shadow-mask.png"; -}; - -Bitmap BMP_PAGE_BOTTOM_SHADOW_MASK -{ - File = "page-bottom-shadow-mask.png"; + File = "page-shadow-mask.png"; }; diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index 82513c75d32c..8744151ef0e2 100644 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -102,6 +102,7 @@ #include <drawinglayer/processor2d/baseprocessor2d.hxx> #include <drawinglayer/primitive2d/polygonprimitive2d.hxx> #include <drawinglayer/primitive2d/borderlineprimitive2d.hxx> +#include <drawinglayer/primitive2d/discreteshadowprimitive2d.hxx> #include <svx/sdr/contact/objectcontacttools.hxx> #include <svx/unoapi.hxx> #include <basegfx/matrix/b2dhommatrix.hxx> @@ -1037,7 +1038,7 @@ void SwSubsRects::PaintSubsidiary( OutputDevice *pOut, // OD 29.04.2003 #107169# - correction: adjust rectangle on pixel level in order // to assure, that the border 'leaves its original pixel', if it has to. // No prior adjustments for odd relation between pixel and twip. -void MA_FASTCALL SwAlignRect( SwRect &rRect, ViewShell *pSh ) +void MA_FASTCALL SwAlignRect( SwRect &rRect, const ViewShell *pSh ) { if( !rRect.HasArea() ) return; @@ -2838,8 +2839,6 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const if ( bBookMode && pPage->GetPrev() && static_cast<const SwPageFrm*>(pPage->GetPrev())->IsEmptyPage() ) pPage = static_cast<const SwPageFrm*>(pPage->GetPrev()); - const bool bLTR = IsLeftToRightViewLayout(); - // #i68597# const bool bGridPainting(pSh->GetWin() && pSh->Imp()->HasDrawView() && pSh->Imp()->GetDrawView()->IsGridVisible()); @@ -2848,22 +2847,15 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const while ( pPage ) // <-- { - // Paint right shadow in single page mode, or if we're on last page of - // the doc, or if ???Lower()??? or if we're on a page with no right - // sibling (OnRightPage should be renamed as OnEvenPage since it does - // not take reading direction into account) - const bool bPaintRightShadow = !bBookMode || (!pPage->GetNext()) || (pPage == Lower()) || (!bLTR && !pPage->OnRightPage()) || (bLTR && pPage->OnRightPage()); - // Have a full bottom shadow on side by side pages. - // TODO Do not draw full shadow if our sibling hasn't the - // same orientation - const bool bFullBottomShadow = bBookMode && pPage->GetPrev() && - ((!bLTR && !pPage->OnRightPage()) || (bLTR && pPage->OnRightPage())); + const bool bPaintRightShadow = pPage->IsRightShadowNeeded(); + const bool bPaintLeftShadow = pPage->IsLeftShadowNeeded(); const bool bRightSidebar = pPage->SidebarPosition() == sw::sidebarwindows::SIDEBAR_RIGHT; if ( !pPage->IsEmptyPage() ) { SwRect aPaintRect; - SwPageFrm::GetBorderAndShadowBoundRect( pPage->Frm(), pSh, aPaintRect, bRightSidebar ); + SwPageFrm::GetBorderAndShadowBoundRect( pPage->Frm(), pSh, aPaintRect, + bPaintLeftShadow, bPaintRightShadow, bRightSidebar ); if ( aRect.IsOver( aPaintRect ) ) // <-- @@ -2963,7 +2955,7 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const { // OD 12.02.2003 #i9719#, #105645# - use new method // <SwPageFrm::PaintBorderAndShadow(..)>. - SwPageFrm::PaintBorderAndShadow( pPage->Frm(), pSh, bPaintRightShadow, bFullBottomShadow, bRightSidebar ); + SwPageFrm::PaintBorderAndShadow( pPage->Frm(), pSh, bPaintLeftShadow, bPaintRightShadow, bRightSidebar ); SwPageFrm::PaintNotesSidebar( pPage->Frm(), pSh, pPage->GetPhyPageNum(), bRightSidebar); } @@ -3016,7 +3008,8 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const const SwPageFrm& rFormatPage = pPage->GetFormatPage(); aEmptyPageRect.SSize() = rFormatPage.Frm().SSize(); - SwPageFrm::GetBorderAndShadowBoundRect( aEmptyPageRect, pSh, aPaintRect, bRightSidebar ); + SwPageFrm::GetBorderAndShadowBoundRect( aEmptyPageRect, pSh, aPaintRect, + bPaintLeftShadow, bPaintRightShadow, bRightSidebar ); aPaintRect._Intersection( aRect ); if ( aRect.IsOver( aEmptyPageRect ) ) @@ -3055,7 +3048,7 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const // paint shadow and border for empty page // OD 19.02.2003 #107369# - use new method to paint page border and // shadow - SwPageFrm::PaintBorderAndShadow( aEmptyPageRect, pSh, bPaintRightShadow, bFullBottomShadow, bRightSidebar ); + SwPageFrm::PaintBorderAndShadow( aEmptyPageRect, pSh, bPaintLeftShadow, bPaintRightShadow, bRightSidebar ); SwPageFrm::PaintNotesSidebar( aEmptyPageRect, pSh, pPage->GetPhyPageNum(), bRightSidebar); { @@ -5213,35 +5206,31 @@ void SwPageFrm::PaintMarginArea( const SwRect& _rOutputRect, } } -const sal_Int8 SwPageFrm::mnShadowPxWidth = 10; - -/** determine rectangle for right page shadow - - OD 12.02.2003 for #i9719# and #105645# +const sal_Int8 SwPageFrm::mnShadowPxWidth = 9; - @author OD -*/ -/*static*/ void SwPageFrm::GetRightShadowRect( const SwRect& _rPageRect, - ViewShell* _pViewShell, - SwRect& _orRightShadowRect, - bool bRightSidebar ) +sal_Bool SwPageFrm::IsRightShadowNeeded() const { - SwRect aAlignedPageRect( _rPageRect ); - ::SwAlignRect( aAlignedPageRect, _pViewShell ); - SwRect aPagePxRect = - _pViewShell->GetOut()->LogicToPixel( aAlignedPageRect.SVRect() ); - const SwPostItMgr *pMgr = _pViewShell ? _pViewShell->GetPostItMgr() : 0; + const ViewShell *pSh = getRootFrm()->GetCurrShell(); + const bool bIsLTR = getRootFrm()->IsLeftToRightViewLayout(); - _orRightShadowRect.Chg( - Point( aPagePxRect.Right() + 1, aPagePxRect.Top() + mnShadowPxWidth + 1 ), - Size( mnShadowPxWidth, aPagePxRect.Height() - mnShadowPxWidth - 1 ) ); + // We paint the right shadow if we're not in book mode + // or if we've no sibling or are the last page of the "row" + return !pSh || (!pSh->GetViewOptions()->IsViewLayoutBookMode()) || !GetNext() + || (this == Lower()) || (bIsLTR && OnRightPage()) + || (!bIsLTR && !OnRightPage()); - if (bRightSidebar && pMgr && pMgr->ShowNotes() && pMgr->HasNotes()) - { - _orRightShadowRect.Pos(_orRightShadowRect.Left() + pMgr->GetSidebarWidth(true) - + pMgr->GetSidebarBorderWidth(true), _orRightShadowRect.Top()); - } +} +sal_Bool SwPageFrm::IsLeftShadowNeeded() const +{ + const ViewShell *pSh = getRootFrm()->GetCurrShell(); + const bool bIsLTR = getRootFrm()->IsLeftToRightViewLayout(); + + // We paint the left shadow if we're not in book mode + // or if we've no sibling or are the last page of the "row" + return !pSh || (!pSh->GetViewOptions()->IsViewLayoutBookMode()) || !GetPrev() + || (bIsLTR && !OnRightPage()) + || (!bIsLTR && OnRightPage()); } /** determine rectangle for bottom page shadow @@ -5250,10 +5239,11 @@ const sal_Int8 SwPageFrm::mnShadowPxWidth = 10; @author OD */ -/*static*/ void SwPageFrm::GetBottomShadowRect( const SwRect& _rPageRect, - ViewShell* _pViewShell, - SwRect& _orBottomShadowRect, - bool bFullBottomShadow, +/*static*/ void SwPageFrm::GetHorizontalShadowRect( const SwRect& _rPageRect, + const ViewShell* _pViewShell, + SwRect& _orHorizontalShadowRect, + bool bPaintLeftShadow, + bool bPaintRightShadow, bool bRightSidebar ) { const SwPostItMgr *pMgr = _pViewShell ? _pViewShell->GetPostItMgr() : 0; @@ -5262,21 +5252,21 @@ const sal_Int8 SwPageFrm::mnShadowPxWidth = 10; SwRect aPagePxRect = _pViewShell->GetOut()->LogicToPixel( aAlignedPageRect.SVRect() ); - // Shadow is shifted when not full - long lShadowAdjustment = (bFullBottomShadow ? 0 : 1 + mnShadowPxWidth); + long lShadowAdjustment = mnShadowPxWidth - 1; // TODO extract this - _orBottomShadowRect.Chg( - Point( aPagePxRect.Left() + lShadowAdjustment, aPagePxRect.Bottom() + 1 ), - Size( aPagePxRect.Width() - lShadowAdjustment, mnShadowPxWidth ) ); + _orHorizontalShadowRect.Chg( + Point( aPagePxRect.Left() + (bPaintLeftShadow ? lShadowAdjustment : 0), 0 ), + Size( aPagePxRect.Width() - ( (bPaintLeftShadow ? lShadowAdjustment : 0) + (bPaintRightShadow ? lShadowAdjustment : 0) ), + mnShadowPxWidth ) ); if(pMgr && pMgr->ShowNotes() && pMgr->HasNotes()) { // Notes are displayed, we've to extend borders SwTwips aSidebarTotalWidth = pMgr->GetSidebarWidth(true) + pMgr->GetSidebarBorderWidth(true); if(bRightSidebar) - _orBottomShadowRect.Right( _orBottomShadowRect.Right() + aSidebarTotalWidth ); + _orHorizontalShadowRect.Right( _orHorizontalShadowRect.Right() + aSidebarTotalWidth ); else - _orBottomShadowRect.Left( _orBottomShadowRect.Left() - aSidebarTotalWidth ); + _orHorizontalShadowRect.Left( _orHorizontalShadowRect.Left() - aSidebarTotalWidth ); } } @@ -5288,9 +5278,9 @@ const sal_Int8 SwPageFrm::mnShadowPxWidth = 10; @author OD */ /*static*/ void SwPageFrm::PaintBorderAndShadow( const SwRect& _rPageRect, - ViewShell* _pViewShell, + const ViewShell* _pViewShell, + bool bPaintLeftShadow, bool bPaintRightShadow, - bool bFullBottomShadow, bool bRightSidebar ) { // No shadow in prefs @@ -5300,60 +5290,102 @@ const sal_Int8 SwPageFrm::mnShadowPxWidth = 10; SwTaggedPDFHelper aTaggedPDFHelper( 0, 0, 0, *_pViewShell->GetOut() ); // <-- + static drawinglayer::primitive2d::DiscreteShadow shadowMask( SW_RES( BMP_PAGE_SHADOW_MASK ) ); static BitmapEx aPageTopRightShadow; static BitmapEx aPageBottomRightShadow; static BitmapEx aPageBottomLeftShadow; static BitmapEx aPageBottomShadowBase; static BitmapEx aPageRightShadowBase; - static Color aShadowColor; + static BitmapEx aPageTopShadowBase; + static BitmapEx aPageTopLeftShadow; + static BitmapEx aPageLeftShadowBase; + static Color aShadowColor( COL_AUTO ); + + SwRect aAlignedPageRect( _rPageRect ); + ::SwAlignRect( aAlignedPageRect, _pViewShell ); + SwRect aPagePxRect = + _pViewShell->GetOut()->LogicToPixel( aAlignedPageRect.SVRect() ); if(aShadowColor != SwViewOption::GetShadowColor() ) { aShadowColor = SwViewOption::GetShadowColor(); - AlphaMask aMask( SW_RES( BMP_PAGE_BOTTOM_RIGHT_SHADOW_MASK ) ); - Bitmap aFilledSquare( Size( mnShadowPxWidth, mnShadowPxWidth ), 24 ); - aFilledSquare.Erase( aShadowColor ); + AlphaMask aMask( shadowMask.getBottomRight().GetBitmap() ); + Bitmap aFilledSquare( aMask.GetSizePixel(), 24 ); + aFilledSquare.Erase( aShadowColor ); aPageBottomRightShadow = BitmapEx( aFilledSquare, aMask ); - aMask.Rotate( 900, 255 ); - aPageTopRightShadow = BitmapEx( aFilledSquare, aMask ); - aMask.Rotate( 1800, 255); + + aMask = AlphaMask( shadowMask.getBottomLeft().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); + aFilledSquare.Erase( aShadowColor ); aPageBottomLeftShadow = BitmapEx( aFilledSquare, aMask ); - aFilledSquare = Bitmap( Size( 1, mnShadowPxWidth ), 24 ); + aMask = AlphaMask( shadowMask.getBottom().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); aFilledSquare.Erase( aShadowColor ); - aMask = Bitmap( SW_RES( BMP_PAGE_BOTTOM_SHADOW_MASK ) ); aPageBottomShadowBase = BitmapEx( aFilledSquare, aMask ); - aFilledSquare = Bitmap( Size( mnShadowPxWidth, 1 ), 24 ); + aMask = AlphaMask( shadowMask.getTop().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); + aFilledSquare.Erase( aShadowColor ); + aPageTopShadowBase = BitmapEx( aFilledSquare, aMask ); + + aMask = AlphaMask( shadowMask.getTopRight().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); + aFilledSquare.Erase( aShadowColor ); + aPageTopRightShadow = BitmapEx( aFilledSquare, aMask ); + + aMask = AlphaMask( shadowMask.getRight().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); aFilledSquare.Erase( aShadowColor ); - aMask = Bitmap( SW_RES( BMP_PAGE_RIGHT_SHADOW_MASK ) ); aPageRightShadowBase = BitmapEx( aFilledSquare, aMask ); + + aMask = AlphaMask( shadowMask.getTopLeft().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); + aFilledSquare.Erase( aShadowColor ); + aPageTopLeftShadow = BitmapEx( aFilledSquare, aMask ); + + aMask = AlphaMask( shadowMask.getLeft().GetBitmap() ); + aFilledSquare = Bitmap( aMask.GetSizePixel(), 24 ); + aFilledSquare.Erase( aShadowColor ); + aPageLeftShadowBase = BitmapEx( aFilledSquare, aMask ); } SwRect aPaintRect; OutputDevice *pOut = _pViewShell->GetOut(); - // paint right shadow + SwPageFrm::GetHorizontalShadowRect( _rPageRect, _pViewShell, aPaintRect, bPaintLeftShadow, bPaintRightShadow, bRightSidebar ); + + // Right shadow & corners if ( bPaintRightShadow ) { - SwPageFrm::GetRightShadowRect( _rPageRect, _pViewShell, aPaintRect, bRightSidebar ); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Right() + 1, aPagePxRect.Bottom() + 1 - (aPageBottomRightShadow.GetSizePixel().Height() - mnShadowPxWidth) ) ), + aPageBottomRightShadow ); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Right() + 1, aPagePxRect.Top() - mnShadowPxWidth ) ), + aPageTopRightShadow ); BitmapEx aPageRightShadow = aPageRightShadowBase; - aPageRightShadow.Scale( 1, aPaintRect.Height() ); - pOut->DrawBitmapEx( pOut->PixelToLogic( aPaintRect.Pos() ), aPageRightShadow ); - pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Left(), aPaintRect.Top() - mnShadowPxWidth ) ), aPageTopRightShadow ); - pOut->DrawBitmapEx( pOut->PixelToLogic( aPaintRect.BottomLeft() ), aPageBottomRightShadow ); + aPageRightShadow.Scale( 1, aPagePxRect.Height() - 2 * (mnShadowPxWidth - 1) ); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Right() + mnShadowPxWidth, aPagePxRect.Top() + mnShadowPxWidth - 1) ), aPageRightShadow ); } - // paint bottom shadow - SwPageFrm::GetBottomShadowRect( _rPageRect, _pViewShell, aPaintRect, bFullBottomShadow, bRightSidebar ); - if(!bFullBottomShadow) + // Left shadows and corners + if(bPaintLeftShadow) { - pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Left() - mnShadowPxWidth, aPaintRect.Top() ) ), aPageBottomLeftShadow ); + const long lLeft = aPaintRect.Left() - aPageBottomLeftShadow.GetSizePixel().Width(); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( lLeft, + aPagePxRect.Bottom() + 1 + mnShadowPxWidth - aPageBottomLeftShadow.GetSizePixel().Height() ) ), aPageBottomLeftShadow ); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( lLeft, aPagePxRect.Top() - mnShadowPxWidth ) ), aPageTopLeftShadow ); + BitmapEx aPageLeftShadow = aPageLeftShadowBase; + aPageLeftShadow.Scale( 1, aPagePxRect.Height() - 2 * (mnShadowPxWidth - 1) ); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( lLeft, aPagePxRect.Top() + mnShadowPxWidth - 1) ), aPageLeftShadow ); } + BitmapEx aPageBottomShadow = aPageBottomShadowBase; aPageBottomShadow.Scale( aPaintRect.Width(), 1 ); - pOut->DrawBitmapEx( pOut->PixelToLogic( aPaintRect.Pos() ), aPageBottomShadow); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Left(), aPagePxRect.Bottom() + 1 ) ), aPageBottomShadow); + BitmapEx aPageTopShadow = aPageTopShadowBase; + aPageTopShadow.Scale( aPaintRect.Width(), 1 ); + pOut->DrawBitmapEx( pOut->PixelToLogic( Point( aPaintRect.Left(), aPagePxRect.Top() - mnShadowPxWidth ) ), aPageTopShadow ); } //mod #i6193# paint sidebar for notes @@ -5480,28 +5512,47 @@ const sal_Int8 SwPageFrm::mnShadowPxWidth = 10; author OD */ /*static*/ void SwPageFrm::GetBorderAndShadowBoundRect( const SwRect& _rPageRect, - ViewShell* _pViewShell, + const ViewShell* _pViewShell, SwRect& _orBorderAndShadowBoundRect, - bool bRightSidebar ) + bool bLeftShadow, + bool bRightShadow, + bool bRightSidebar + ) { SwRect aAlignedPageRect( _rPageRect ); ::SwAlignRect( aAlignedPageRect, _pViewShell ); SwRect aPagePxRect = _pViewShell->GetOut()->LogicToPixel( aAlignedPageRect.SVRect() ); + aPagePxRect.Bottom( aPagePxRect.Bottom() + mnShadowPxWidth + 1 ); + aPagePxRect.Top( aPagePxRect.Top() - mnShadowPxWidth - 1 ); SwRect aTmpRect; - SwPageFrm::GetRightShadowRect( _rPageRect, _pViewShell, aTmpRect, bRightSidebar ); - aPagePxRect.Right( aTmpRect.Right() ); + // Always ask for full shadow since we want a bounding rect + // including at least the page frame + SwPageFrm::GetHorizontalShadowRect( _rPageRect, _pViewShell, aTmpRect, false, false, bRightSidebar ); - // Always ask for full shadow - SwPageFrm::GetBottomShadowRect( _rPageRect, _pViewShell, aTmpRect, true, bRightSidebar ); - aPagePxRect.Bottom( aTmpRect.Bottom() ); - aPagePxRect.Left( aTmpRect.Left() ); + if(bLeftShadow) aPagePxRect.Left( aTmpRect.Left() - mnShadowPxWidth - 1); + if(bRightShadow) aPagePxRect.Right( aTmpRect.Right() + mnShadowPxWidth + 1); _orBorderAndShadowBoundRect = _pViewShell->GetOut()->PixelToLogic( aPagePxRect.SVRect() ); } +SwRect SwPageFrm::GetBoundRect() const +{ + const ViewShell *pSh = getRootFrm()->GetCurrShell(); + SwRect aPageRect( Frm() ); + SwRect aResult; + + if(!pSh) { + return SwRect( Point(0, 0), Size(0, 0) ); + } + + SwPageFrm::GetBorderAndShadowBoundRect( aPageRect, pSh, aResult, + IsLeftShadowNeeded(), IsRightShadowNeeded(), SidebarPosition() == sw::sidebarwindows::SIDEBAR_RIGHT ); + return aResult; +} + /*static*/ void SwPageFrm::AddSidebarBorders(SwRect &aRect, ViewShell* _pViewShell, bool bRightSidebar, bool bPx) { const SwPostItMgr *pMgr = _pViewShell ? _pViewShell->GetPostItMgr() : 0; diff --git a/sw/source/core/view/pagepreviewlayout.cxx b/sw/source/core/view/pagepreviewlayout.cxx index eae56dde8d50..fc24047a0b91 100644 --- a/sw/source/core/view/pagepreviewlayout.cxx +++ b/sw/source/core/view/pagepreviewlayout.cxx @@ -1073,7 +1073,8 @@ bool SwPagePreviewLayout::Paint( const Rectangle _aOutRect ) const // #i80691# paint page border and shadow { SwRect aPageBorderRect; - SwPageFrm::GetBorderAndShadowBoundRect( SwRect( aPageRect ), &mrParentViewShell, aPageBorderRect, true ); + SwPageFrm::GetBorderAndShadowBoundRect( SwRect( aPageRect ), &mrParentViewShell, aPageBorderRect, + (*aPageIter)->pPage->IsLeftShadowNeeded(), (*aPageIter)->pPage->IsRightShadowNeeded(), true ); const Region aDLRegion(aPageBorderRect.SVRect()); mrParentViewShell.DLPrePaint2(aDLRegion); SwPageFrm::PaintBorderAndShadow( aPageRect, &mrParentViewShell, true, false, true ); diff --git a/sw/source/core/view/viewimp.cxx b/sw/source/core/view/viewimp.cxx index 96cef3170ece..c3ca3f655ae1 100644 --- a/sw/source/core/view/viewimp.cxx +++ b/sw/source/core/view/viewimp.cxx @@ -190,17 +190,17 @@ void SwViewImp::SetFirstVisPage() const bool bBookMode = pSwViewOption->IsViewLayoutBookMode(); SwPageFrm *pPage = (SwPageFrm*)pSh->GetLayout()->Lower(); - SwRect aPageRect = pPage->Frm(); + SwRect aPageRect = pPage->GetBoundRect(); while ( pPage && !aPageRect.IsOver( pSh->VisArea() ) ) { pPage = (SwPageFrm*)pPage->GetNext(); if ( pPage ) { - aPageRect = pPage->Frm(); + aPageRect = pPage->GetBoundRect(); if ( bBookMode && pPage->IsEmptyPage() ) { const SwPageFrm& rFormatPage = pPage->GetFormatPage(); - aPageRect.SSize() = rFormatPage.Frm().SSize(); + aPageRect.SSize() = rFormatPage.GetBoundRect().SSize(); } } } diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx index fba37f34809d..797ed01a3287 100644 --- a/sw/source/core/view/viewsh.cxx +++ b/sw/source/core/view/viewsh.cxx @@ -991,45 +991,29 @@ void ViewShell::VisPortChgd( const SwRect &rRect) SwTwips nMinLeft = LONG_MAX; SwTwips nMaxRight= 0; - const SwTwips nSidebarWidth = pPostItMgr && pPostItMgr->ShowNotes() && pPostItMgr->HasNotes() ? - pPostItMgr->GetSidebarWidth() + pPostItMgr->GetSidebarBorderWidth() : - 0; const bool bBookMode = GetViewOptions()->IsViewLayoutBookMode(); while ( pPage && pPage->Frm().Top() <= nBottom ) { - SwRect aPageRect( pPage->Frm() ); + SwRect aPageRect( pPage->GetBoundRect() ); if ( bBookMode ) { const SwPageFrm& rFormatPage = static_cast<const SwPageFrm*>(pPage)->GetFormatPage(); - aPageRect.SSize() = rFormatPage.Frm().SSize(); + aPageRect.SSize() = rFormatPage.GetBoundRect().SSize(); } if ( aPageRect.IsOver( aBoth ) ) { - const SwTwips nShadowWidth = - GetOut()->PixelToLogic( Size( pPage->ShadowPxWidth(), 0 ) ).Width(); - SwTwips nPageLeft = 0; SwTwips nPageRight = 0; - switch ( pPage->SidebarPosition() ) + const sw::sidebarwindows::SidebarPosition aSidebarPos = pPage->SidebarPosition(); + + if( aSidebarPos != sw::sidebarwindows::SIDEBAR_NONE ) { - case sw::sidebarwindows::SIDEBAR_LEFT: - { - nPageLeft = aPageRect.Left() - nSidebarWidth; - nPageRight = aPageRect.Right() + nShadowWidth; - } - break; - case sw::sidebarwindows::SIDEBAR_RIGHT: - { - nPageLeft = aPageRect.Left(); - nPageRight = aPageRect.Right() + nShadowWidth + nSidebarWidth; - } - break; - case sw::sidebarwindows::SIDEBAR_NONE: - // nothing to do - break; + nPageLeft = aPageRect.Left(); + nPageRight = aPageRect.Right(); } + if( nPageLeft < nMinLeft ) nMinLeft = nPageLeft; if( nPageRight > nMaxRight ) diff --git a/sw/source/filter/basflt/fltini.cxx b/sw/source/filter/basflt/fltini.cxx index f584b0476565..632d5c183e08 100644 --- a/sw/source/filter/basflt/fltini.cxx +++ b/sw/source/filter/basflt/fltini.cxx @@ -822,11 +822,11 @@ extern "C" { static void SAL_CALL thisModule() {} } static oslGenericFunction GetMswordLibSymbol( const char *pSymbol ) { static ::osl::Module aModule; - static sal_Bool bLoaded = sal_False; + static sal_Bool bLoaded = sal_False; static ::rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "msword" ) ) ); - if (!bLoaded) - bLoaded = SvLibrary::LoadModule( aModule, aLibName, &thisModule ); - if (bLoaded) + if (!bLoaded) + bLoaded = SvLibrary::LoadModule( aModule, aLibName, &thisModule, SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY ); + if (bLoaded) return aModule.getFunctionSymbol( ::rtl::OUString::createFromAscii( pSymbol ) ); return NULL; } diff --git a/sw/source/ui/dialog/swabstdlg.cxx b/sw/source/ui/dialog/swabstdlg.cxx index 1f97f9ddf717..2a3dedd83028 100644 --- a/sw/source/ui/dialog/swabstdlg.cxx +++ b/sw/source/ui/dialog/swabstdlg.cxx @@ -44,7 +44,8 @@ SwAbstractDialogFactory* SwAbstractDialogFactory::Create() SwFuncPtrCreateDialogFactory fp = 0; static ::osl::Module aDialogLibrary; static const ::rtl::OUString sLibName(::vcl::unohelper::CreateLibraryName("swui", sal_True)); - if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, String( sLibName ) ) ) + if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, String( sLibName ), + SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY ) ) fp = ( SwAbstractDialogFactory* (__LOADONCALLAPI*)() ) aDialogLibrary.getFunctionSymbol( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateDialogFactory"))); if ( fp ) diff --git a/unoxml/source/dom/node.cxx b/unoxml/source/dom/node.cxx index 7ab6336aefdf..b4645bc0b578 100644 --- a/unoxml/source/dom/node.cxx +++ b/unoxml/source/dom/node.cxx @@ -87,8 +87,9 @@ namespace DOM // add node's namespaces to current context for (xmlNsPtr pNs = pNode->nsDef; pNs != 0; pNs = pNs->next) { const xmlChar *pPrefix = pNs->prefix; + // prefix can be NULL when xmlns attribute is empty (xmlns="") OString prefix(reinterpret_cast<const sal_Char*>(pPrefix), - strlen(reinterpret_cast<const char*>(pPrefix))); + pPrefix ? strlen(reinterpret_cast<const char*>(pPrefix)) : 0); const xmlChar *pHref = pNs->href; OUString val(reinterpret_cast<const sal_Char*>(pHref), strlen(reinterpret_cast<const char*>(pHref)), diff --git a/vcl/inc/vcl/cursor.hxx b/vcl/inc/vcl/cursor.hxx index 46f17b367412..d87d2201bfd4 100644 --- a/vcl/inc/vcl/cursor.hxx +++ b/vcl/inc/vcl/cursor.hxx @@ -69,8 +69,10 @@ public: SAL_DLLPRIVATE void ImplDraw(); SAL_DLLPRIVATE void ImplRestore(); DECL_DLLPRIVATE_LINK( ImplTimerHdl, AutoTimer* ); - SAL_DLLPRIVATE void ImplShow( bool bDrawDirect = true, bool bRestore = false ); - SAL_DLLPRIVATE bool ImplHide(); + SAL_DLLPRIVATE void ImplShow( bool bDrawDirect = true ); + SAL_DLLPRIVATE void ImplHide(); + SAL_DLLPRIVATE void ImplResume( bool bRestore = false ); + SAL_DLLPRIVATE bool ImplSuspend(); SAL_DLLPRIVATE void ImplNew(); public: @@ -113,6 +115,10 @@ public: sal_Bool operator==( const Cursor& rCursor ) const; sal_Bool operator!=( const Cursor& rCursor ) const { return !(Cursor::operator==( rCursor )); } + +private: + void ImplDoShow( bool bDrawDirect, bool bRestore ); + bool ImplDoHide( bool bStop ); }; #endif // _SV_CURSOR_HXX diff --git a/vcl/source/gdi/outdevnative.cxx b/vcl/source/gdi/outdevnative.cxx index 4ac1d4610b3f..5ae7baaa9d89 100644 --- a/vcl/source/gdi/outdevnative.cxx +++ b/vcl/source/gdi/outdevnative.cxx @@ -236,7 +236,14 @@ sal_Bool OutputDevice::DrawNativeControl( ControlType nType, if ( mbInitClipRegion ) ImplInitClipRegion(); - if ( mbOutputClipped || rControlRegion.IsEmpty() ) + if ( mbOutputClipped +#ifndef WNT + // This check causes spin buttons to not be drawn on Windows, + // see fdo#36481 . Presumably it is useful on other plaforms, + // though. + || rControlRegion.IsEmpty() +#endif + ) return sal_True; if ( mbInitLineColor ) diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 66072a48d392..b9d76cd4faa5 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -3359,9 +3359,9 @@ std::map< sal_Int32, sal_Int32 > PDFWriterImpl::emitEmbeddedFont( const ImplFont throw FontException(); // nLength3 is the rest of the file - excluding any section headers - // nIndex now points to the first of the 512 '0' characters marking the + // nIndex now points before the first of the 512 '0' characters marking the // fixed content portion - sal_Int32 nLength3 = nFontLen - nIndex; + sal_Int32 nLength3 = nFontLen - nIndex - 1; for( it = aSections.begin(); it != aSections.end(); ++it ) { if( *it >= nIndex ) diff --git a/vcl/source/window/abstdlg.cxx b/vcl/source/window/abstdlg.cxx index d60dbb83b6c5..7b9988888502 100644 --- a/vcl/source/window/abstdlg.cxx +++ b/vcl/source/window/abstdlg.cxx @@ -43,7 +43,8 @@ VclAbstractDialogFactory* VclAbstractDialogFactory::Create() { FuncPtrCreateDialogFactory fp = 0; static ::osl::Module aDialogLibrary; - if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, String( RTL_CONSTASCII_USTRINGPARAM( DLL_NAME ) ) ) ) + if ( aDialogLibrary.is() || aDialogLibrary.loadRelative( &thisModule, String( RTL_CONSTASCII_USTRINGPARAM( DLL_NAME ) ), + SAL_LOADMODULE_GLOBAL | SAL_LOADMODULE_LAZY ) ) fp = ( VclAbstractDialogFactory* (__LOADONCALLAPI*)() ) aDialogLibrary.getFunctionSymbol( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateDialogFactory")) ); if ( fp ) diff --git a/vcl/source/window/cursor.cxx b/vcl/source/window/cursor.cxx index 659f7df31fa7..e7542d9b07ec 100644 --- a/vcl/source/window/cursor.cxx +++ b/vcl/source/window/cursor.cxx @@ -170,9 +170,7 @@ void Cursor::ImplRestore() } } -// ----------------------------------------------------------------------- - -void Cursor::ImplShow( bool bDrawDirect, bool bRestore ) +void Cursor::ImplDoShow( bool bDrawDirect, bool bRestore ) { if ( mbVisible ) { @@ -215,9 +213,7 @@ void Cursor::ImplShow( bool bDrawDirect, bool bRestore ) } } -// ----------------------------------------------------------------------- - -bool Cursor::ImplHide() +bool Cursor::ImplDoHide( bool bSuspend ) { bool bWasCurVisible = false; if ( mpData && mpData->mpWindow ) @@ -225,11 +221,35 @@ bool Cursor::ImplHide() bWasCurVisible = mpData->mbCurVisible; if ( mpData->mbCurVisible ) ImplRestore(); + + if ( !bSuspend ) + { + mpData->maTimer.Stop(); + mpData->mpWindow = NULL; + } } return bWasCurVisible; } -// ----------------------------------------------------------------------- +void Cursor::ImplShow( bool bDrawDirect ) +{ + ImplDoShow( bDrawDirect, false ); +} + +void Cursor::ImplHide() +{ + ImplDoHide( false ); +} + +void Cursor::ImplResume( bool bRestore ) +{ + ImplDoShow( false, bRestore ); +} + +bool Cursor::ImplSuspend() +{ + return ImplDoHide( true ); +} void Cursor::ImplNew() { @@ -330,12 +350,6 @@ void Cursor::Hide() { mbVisible = sal_False; ImplHide(); - - if( mpData ) - { - mpData->maTimer.Stop(); - mpData->mpWindow = NULL; - } } } diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index fdb86cb07303..e7fd025f2aae 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -2404,7 +2404,7 @@ void Window::ImplCallPaint( const Region* pRegion, sal_uInt16 nPaintFlags ) { bool bRestoreCursor = false; if ( mpWindowImpl->mpCursor ) - bRestoreCursor = mpWindowImpl->mpCursor->ImplHide(); + bRestoreCursor = mpWindowImpl->mpCursor->ImplSuspend(); mbInitClipRegion = sal_True; mpWindowImpl->mbInPaint = sal_True; @@ -2451,7 +2451,7 @@ void Window::ImplCallPaint( const Region* pRegion, sal_uInt16 nPaintFlags ) mbInitClipRegion = sal_True; mpWindowImpl->mpPaintRegion = NULL; if ( mpWindowImpl->mpCursor ) - mpWindowImpl->mpCursor->ImplShow( false, bRestoreCursor ); + mpWindowImpl->mpCursor->ImplResume( bRestoreCursor ); } } else diff --git a/wizards/source/importwizard/FilesModul.xba b/wizards/source/importwizard/FilesModul.xba index cb999252b24c..e35e0b3a3ba9 100644 --- a/wizards/source/importwizard/FilesModul.xba +++ b/wizards/source/importwizard/FilesModul.xba @@ -41,6 +41,7 @@ Dim NewContentList() as String Dim XMLTemplateContentString as String Dim ApplIndex as Integer Dim bAssignFileName as Boolean +Dim bInterruptSearch as Boolean bInterruptSearch = False For i = 0 To MaxCollectIndex SearchDir = PathCollection(i,0) |