1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sfx2.hxx"
26
27 #include <tools/list.hxx>
28 #include <tools/table.hxx>
29 #include <svtools/htmltokn.h>
30 #include <svtools/asynclink.hxx>
31
32 #define _SVSTDARR_USHORTS
33 #define _SVSTDARR_ULONGS
34 #include <svl/svstdarr.hxx>
35
36 #include <sfx2/sfx.hrc>
37
38 #include <sfx2/frmhtml.hxx>
39 #include <sfx2/docfile.hxx>
40 #include <sfx2/viewfrm.hxx>
41 #include <sfx2/evntconf.hxx>
42 #include <sfx2/request.hxx>
43 #include <sfx2/fcontnr.hxx>
44 #include "sfxtypes.hxx"
45
46 #define SFX_HTMLFRMSIZE_REL 0x0001
47 #define SFX_HTMLFRMSIZE_PERCENT 0x0002
48
49 static sal_Char __READONLY_DATA sHTML_SC_yes[] = "YES";
50 static sal_Char __READONLY_DATA sHTML_SC_no[] = "NO";
51 static sal_Char __READONLY_DATA sHTML_SC_auto[] = "AUTO";
52
53 #define HTML_O_READONLY "READONLY"
54 #define HTML_O_EDIT "EDIT"
55
56 static HTMLOptionEnum __READONLY_DATA aScollingTable[] =
57 {
58 { sHTML_SC_yes, ScrollingYes },
59 { sHTML_SC_no, ScrollingNo },
60 { sHTML_SC_auto, ScrollingAuto },
61 { 0, 0 }
62 };
63
ParseFrameOptions(SfxFrameDescriptor * pFrame,const HTMLOptions * pOptions,const String & rBaseURL)64 void SfxFrameHTMLParser::ParseFrameOptions( SfxFrameDescriptor *pFrame, const HTMLOptions *pOptions, const String& rBaseURL )
65 {
66 // die Optionen holen und setzen
67 Size aMargin( pFrame->GetMargin() );
68
69 // MIB 15.7.97: Netscape scheint marginwidth auf 0 zu setzen, sobald
70 // marginheight gesetzt wird und umgekehrt. Machen wir jetzt wegen
71 // bug #41665# auch so.
72 // Netscape l"a\st aber ein direktes Setzen auf 0 nicht zu, IE4.0 schon.
73 // Den Bug machen wir nicht mit!
74 sal_Bool bMarginWidth = sal_False, bMarginHeight = sal_False;
75
76 sal_uInt16 nArrLen = pOptions->Count();
77 for ( sal_uInt16 i=0; i<nArrLen; i++ )
78 {
79 const HTMLOption *pOption = (*pOptions)[i];
80 switch( pOption->GetToken() )
81 {
82 case HTML_O_BORDERCOLOR:
83 {
84 Color aColor;
85 pOption->GetColor( aColor );
86 pFrame->SetWallpaper( Wallpaper( aColor ) );
87 break;
88 }
89 case HTML_O_SRC:
90 pFrame->SetURL(
91 String(
92 INetURLObject::GetAbsURL(
93 rBaseURL, pOption->GetString())) );
94 break;
95 case HTML_O_NAME:
96 pFrame->SetName( pOption->GetString() );
97 break;
98 case HTML_O_MARGINWIDTH:
99 aMargin.Width() = pOption->GetNumber();
100
101 // if( aMargin.Width() < 1 )
102 // aMargin.Width() = 1;
103 if( !bMarginHeight )
104 aMargin.Height() = 0;
105 bMarginWidth = sal_True;
106 break;
107 case HTML_O_MARGINHEIGHT:
108 aMargin.Height() = pOption->GetNumber();
109
110 // if( aMargin.Height() < 1 )
111 // aMargin.Height() = 1;
112 if( !bMarginWidth )
113 aMargin.Width() = 0;
114 bMarginHeight = sal_True;
115 break;
116 case HTML_O_SCROLLING:
117 pFrame->SetScrollingMode(
118 (ScrollingMode)pOption->GetEnum( aScollingTable,
119 ScrollingAuto ) );
120 break;
121 case HTML_O_FRAMEBORDER:
122 {
123 String aStr = pOption->GetString();
124 sal_Bool bBorder = sal_True;
125 if ( aStr.EqualsIgnoreCaseAscii("NO") ||
126 aStr.EqualsIgnoreCaseAscii("0") )
127 bBorder = sal_False;
128 pFrame->SetFrameBorder( bBorder );
129 break;
130 }
131 case HTML_O_NORESIZE:
132 pFrame->SetResizable( sal_False );
133 break;
134 default:
135 if ( pOption->GetTokenString().EqualsIgnoreCaseAscii(
136 HTML_O_READONLY ) )
137 {
138 String aStr = pOption->GetString();
139 sal_Bool bReadonly = sal_True;
140 if ( aStr.EqualsIgnoreCaseAscii("FALSE") )
141 bReadonly = sal_False;
142 pFrame->SetReadOnly( bReadonly );
143 }
144 else if ( pOption->GetTokenString().EqualsIgnoreCaseAscii(
145 HTML_O_EDIT ) )
146 {
147 String aStr = pOption->GetString();
148 sal_Bool bEdit = sal_True;
149 if ( aStr.EqualsIgnoreCaseAscii("FALSE") )
150 bEdit = sal_False;
151 pFrame->SetEditable( bEdit );
152 }
153
154 break;
155 }
156 }
157
158 pFrame->SetMargin( aMargin );
159 }
160