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_scui.hxx"
26
27
28
29
30 #include "scitems.hxx"
31 #include <svx/drawitem.hxx>
32 #include <svx/xtable.hxx>
33 #include <sfx2/objsh.hxx>
34 #include <unotools/useroptions.hxx>
35 #include <vcl/msgbox.hxx>
36 #include <unotools/localedatawrapper.hxx>
37
38 #include "global.hxx"
39 #include "globstr.hrc"
40 #include "tabvwsh.hxx"
41 #include "viewdata.hxx"
42 #include "document.hxx"
43 #include "scresid.hxx"
44 #include "scendlg.hrc"
45 #include "scendlg.hxx"
46
47 //========================================================================
48
ScNewScenarioDlg(Window * pParent,const String & rName,sal_Bool bEdit,sal_Bool bSheetProtected)49 ScNewScenarioDlg::ScNewScenarioDlg( Window* pParent, const String& rName, sal_Bool bEdit, sal_Bool bSheetProtected)
50
51 : ModalDialog ( pParent, ScResId( RID_SCDLG_NEWSCENARIO ) ),
52 aFlName ( this, ScResId( FL_NAME )),
53 aEdName ( this, ScResId( ED_NAME ) ),
54 aFlComment ( this, ScResId( FL_COMMENT ) ),
55 aEdComment ( this, ScResId( ED_COMMENT ) ),
56 aFlOptions ( this, ScResId( FL_OPTIONS ) ),
57 aCbShowFrame ( this, ScResId( CB_SHOWFRAME ) ),
58 aLbColor ( this, ScResId( LB_COLOR ) ),
59 //aCbPrintFrame ( this, ScResId( CB_PRINTFRAME ) ),
60 aCbTwoWay ( this, ScResId( CB_TWOWAY ) ),
61 //aCbAttrib ( this, ScResId( CB_ATTRIB ) ),
62 //aCbValue ( this, ScResId( CB_VALUE ) ),
63 aCbCopyAll ( this, ScResId( CB_COPYALL ) ),
64 aCbProtect ( this, ScResId( CB_PROTECT ) ),
65 aBtnOk ( this, ScResId( BTN_OK ) ),
66 aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
67 aBtnHelp ( this, ScResId( BTN_HELP ) ),
68 aDefScenarioName( rName ),
69 bIsEdit ( bEdit )
70 {
71 if (bIsEdit)
72 SetText(String(ScResId(STR_EDIT)));
73
74 SfxObjectShell* pDocSh = SfxObjectShell::Current();
75 if ( pDocSh )
76 {
77 const SfxPoolItem* pItem = pDocSh->GetItem( SID_COLOR_TABLE );
78 if ( pItem )
79 {
80 XColorListSharedPtr aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable();
81 if (aColorTable.get())
82 {
83 aLbColor.SetUpdateMode( sal_False );
84 long nCount = aColorTable->Count();
85 for ( long n=0; n<nCount; n++ )
86 {
87 XColorEntry* pEntry = aColorTable->GetColor(n);
88 aLbColor.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
89 }
90 aLbColor.SetUpdateMode( sal_True );
91 }
92 }
93 }
94
95 SvtUserOptions aUserOpt;
96
97 String aComment( ScResId( STR_CREATEDBY ) );
98
99 aComment += ' ';
100 aComment += (String)aUserOpt.GetFirstName();
101 aComment += ' ';
102 aComment += (String)aUserOpt.GetLastName();
103 aComment.AppendAscii(RTL_CONSTASCII_STRINGPARAM( ", " ));
104 aComment += String( ScResId( STR_ON ) );
105 aComment += ' ';
106 aComment += ScGlobal::GetpLocaleData()->getDate( Date() );//CHINA001 aComment += ScGlobal::pLocaleData->getDate( Date() );
107 aComment.AppendAscii(RTL_CONSTASCII_STRINGPARAM( ", " ));
108 aComment += ScGlobal::GetpLocaleData()->getTime( Time() );//CHINA001 aComment += ScGlobal::pLocaleData->getTime( Time() );
109
110 aEdComment .SetText( aComment );
111 aEdName .SetText( rName );
112 aBtnOk .SetClickHdl( LINK( this, ScNewScenarioDlg, OkHdl ) );
113 aCbShowFrame.SetClickHdl( LINK( this, ScNewScenarioDlg, EnableHdl ) );
114
115 aLbColor.SetAccessibleName(String(ScResId( STR_COLOR ) ));
116
117 FreeResource();
118
119 aLbColor.SelectEntry( Color( COL_LIGHTGRAY ) );
120 aCbShowFrame.Check(sal_True);
121 //aCbPrintFrame.Check(sal_True);
122 aCbTwoWay.Check(sal_True);
123 //aCbAttrib.Check(sal_False);
124 //aCbValue.Check(sal_False);
125 aCbCopyAll.Check(sal_False);
126 aCbProtect.Check(sal_True);
127
128 if (bIsEdit)
129 aCbCopyAll.Enable(sal_False);
130 // If the Sheet is protected then we disable the Scenario Protect input
131 // and default it to true above. Note we are in 'Add' mode here as: if
132 // Sheet && scenario protection are true, then we cannot edit this dialog.
133 if (bSheetProtected)
134 aCbProtect.Enable(sal_False);
135
136 //! die drei funktionieren noch nicht...
137 /*
138 aCbPrintFrame.Enable(sal_False);
139 aCbAttrib.Enable(sal_False);
140 aCbValue.Enable(sal_False);
141 */
142
143 aEdComment.SetAccessibleRelationMemberOf(&aFlComment);
144 aLbColor.SetAccessibleRelationLabeledBy(&aCbShowFrame);
145 }
146
147 //------------------------------------------------------------------------
148
~ScNewScenarioDlg()149 __EXPORT ScNewScenarioDlg::~ScNewScenarioDlg()
150 {
151 }
152
153 //------------------------------------------------------------------------
154
GetScenarioData(String & rName,String & rComment,Color & rColor,sal_uInt16 & rFlags) const155 void ScNewScenarioDlg::GetScenarioData( String& rName, String& rComment,
156 Color& rColor, sal_uInt16& rFlags ) const
157 {
158 rComment = aEdComment.GetText();
159 rName = aEdName.GetText();
160
161 if ( rName.Len() == 0 )
162 rName = aDefScenarioName;
163
164 rColor = aLbColor.GetSelectEntryColor();
165 sal_uInt16 nBits = 0;
166 if (aCbShowFrame.IsChecked())
167 nBits |= SC_SCENARIO_SHOWFRAME;
168 /*
169 if (aCbPrintFrame.IsChecked())
170 nBits |= SC_SCENARIO_PRINTFRAME;
171 */
172 if (aCbTwoWay.IsChecked())
173 nBits |= SC_SCENARIO_TWOWAY;
174 /*
175 if (aCbAttrib.IsChecked())
176 nBits |= SC_SCENARIO_ATTRIB;
177 if (aCbValue.IsChecked())
178 nBits |= SC_SCENARIO_VALUE;
179 */
180 if (aCbCopyAll.IsChecked())
181 nBits |= SC_SCENARIO_COPYALL;
182 if (aCbProtect.IsChecked())
183 nBits |= SC_SCENARIO_PROTECT;
184 rFlags = nBits;
185 }
186
SetScenarioData(const String & rName,const String & rComment,const Color & rColor,sal_uInt16 nFlags)187 void ScNewScenarioDlg::SetScenarioData( const String& rName, const String& rComment,
188 const Color& rColor, sal_uInt16 nFlags )
189 {
190 aEdComment.SetText(rComment);
191 aEdName.SetText(rName);
192 aLbColor.SelectEntry(rColor);
193
194 aCbShowFrame.Check ( (nFlags & SC_SCENARIO_SHOWFRAME) != 0 );
195 EnableHdl( &aCbShowFrame );
196 //aCbPrintFrame.Check( (nFlags & SC_SCENARIO_PRINTFRAME) != 0 );
197 aCbTwoWay.Check ( (nFlags & SC_SCENARIO_TWOWAY) != 0 );
198 //aCbAttrib.Check ( (nFlags & SC_SCENARIO_ATTRIB) != 0 );
199 //aCbValue.Check ( (nFlags & SC_SCENARIO_VALUE) != 0 );
200 // CopyAll nicht
201 aCbProtect.Check ( (nFlags & SC_SCENARIO_PROTECT) != 0 );
202 }
203
204 //------------------------------------------------------------------------
205
IMPL_LINK(ScNewScenarioDlg,OkHdl,OKButton *,EMPTYARG)206 IMPL_LINK( ScNewScenarioDlg, OkHdl, OKButton *, EMPTYARG )
207 {
208 String aName ( aEdName.GetText() );
209 ScDocument* pDoc = ((ScTabViewShell*)SfxViewShell::Current())->
210 GetViewData()->GetDocument();
211
212 aName.EraseLeadingChars( ' ' );
213 aName.EraseTrailingChars( ' ' );
214 aEdName.SetText( aName );
215
216 if ( !pDoc->ValidTabName( aName ) )
217 {
218 InfoBox( this, ScGlobal::GetRscString( STR_INVALIDTABNAME ) ).
219 Execute();
220 aEdName.GrabFocus();
221 }
222 else if ( !bIsEdit && !pDoc->ValidNewTabName( aName ) )
223 {
224 InfoBox( this, ScGlobal::GetRscString( STR_NEWTABNAMENOTUNIQUE ) ).
225 Execute();
226 aEdName.GrabFocus();
227 }
228 else
229 EndDialog( RET_OK );
230 return 0;
231
232 //! beim Editieren testen, ob eine andere Tabelle den Namen hat!
233 }
234
235 //------------------------------------------------------------------------
236
IMPL_LINK(ScNewScenarioDlg,EnableHdl,CheckBox *,pBox)237 IMPL_LINK( ScNewScenarioDlg, EnableHdl, CheckBox *, pBox )
238 {
239 if( pBox == &aCbShowFrame )
240 aLbColor.Enable( aCbShowFrame.IsChecked() );
241 return 0;
242 }
243
244