1*0a1e2f0eSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*0a1e2f0eSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*0a1e2f0eSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*0a1e2f0eSAndrew Rist  * distributed with this work for additional information
6*0a1e2f0eSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*0a1e2f0eSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*0a1e2f0eSAndrew Rist  * "License"); you may not use this file except in compliance
9*0a1e2f0eSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*0a1e2f0eSAndrew Rist  *
11*0a1e2f0eSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*0a1e2f0eSAndrew Rist  *
13*0a1e2f0eSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*0a1e2f0eSAndrew Rist  * software distributed under the License is distributed on an
15*0a1e2f0eSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*0a1e2f0eSAndrew Rist  * KIND, either express or implied.  See the License for the
17*0a1e2f0eSAndrew Rist  * specific language governing permissions and limitations
18*0a1e2f0eSAndrew Rist  * under the License.
19*0a1e2f0eSAndrew Rist  *
20*0a1e2f0eSAndrew Rist  *************************************************************/
21*0a1e2f0eSAndrew Rist 
22*0a1e2f0eSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_GUI_DP_GUI_UPDATEDIALOG_HXX
25cdf0e10cSrcweir #define INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_GUI_DP_GUI_UPDATEDIALOG_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "sal/config.h"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <memory>
30cdf0e10cSrcweir #include <vector>
31cdf0e10cSrcweir #include "com/sun/star/uno/Reference.hxx"
32cdf0e10cSrcweir #include "com/sun/star/uno/Sequence.hxx"
33cdf0e10cSrcweir #include "rtl/ref.hxx"
34cdf0e10cSrcweir #include "rtl/ustring.hxx"
35cdf0e10cSrcweir #include "svtools/svlbitm.hxx"
36cdf0e10cSrcweir #include "svx/checklbx.hxx"
37cdf0e10cSrcweir #include "tools/link.hxx"
38cdf0e10cSrcweir #include "tools/solar.h"
39cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX
40cdf0e10cSrcweir #include "vcl/button.hxx"
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir #include "vcl/dialog.hxx"
43cdf0e10cSrcweir #include "vcl/fixed.hxx"
44cdf0e10cSrcweir #include <svtools/fixedhyper.hxx>
45cdf0e10cSrcweir #include <vcl/throbber.hxx>
46cdf0e10cSrcweir 
47cdf0e10cSrcweir #include "descedit.hxx"
48cdf0e10cSrcweir #include "dp_gui_updatedata.hxx"
49cdf0e10cSrcweir 
50cdf0e10cSrcweir /// @HTML
51cdf0e10cSrcweir 
52cdf0e10cSrcweir class Image;
53cdf0e10cSrcweir class KeyEvent;
54cdf0e10cSrcweir class MouseEvent;
55cdf0e10cSrcweir class ResId;
56cdf0e10cSrcweir class Window;
57cdf0e10cSrcweir 
58cdf0e10cSrcweir namespace com { namespace sun { namespace star {
59cdf0e10cSrcweir     namespace deployment { class XExtensionManager;
60cdf0e10cSrcweir                            class XPackage; }
61cdf0e10cSrcweir     namespace uno { class XComponentContext; }
62cdf0e10cSrcweir } } }
63cdf0e10cSrcweir 
64cdf0e10cSrcweir namespace dp_gui {
65cdf0e10cSrcweir /**
66cdf0e10cSrcweir    The modal &ldquo;Check for Updates&rdquo; dialog.
67cdf0e10cSrcweir */
68cdf0e10cSrcweir class UpdateDialog: public ModalDialog {
69cdf0e10cSrcweir public:
70cdf0e10cSrcweir     /**
71cdf0e10cSrcweir        Create an instance.
72cdf0e10cSrcweir 
73cdf0e10cSrcweir        <p>Exactly one of <code>selectedPackages</code> and
74cdf0e10cSrcweir        <code>packageManagers</code> must be non-null.</p>
75cdf0e10cSrcweir 
76cdf0e10cSrcweir        @param context
77cdf0e10cSrcweir        a non-null component context
78cdf0e10cSrcweir 
79cdf0e10cSrcweir        @param parent
80cdf0e10cSrcweir        the parent window, may be null
81cdf0e10cSrcweir 
82cdf0e10cSrcweir        @param vExtensionList
83cdf0e10cSrcweir        check for updates for the contained extensions. There must only be one extension with
84cdf0e10cSrcweir        a particular identifier. If one extension is installed in several repositories, then the
85cdf0e10cSrcweir        one with the highest version must be used, because it contains the latest known update
86cdf0e10cSrcweir        information.
87cdf0e10cSrcweir     */
88cdf0e10cSrcweir     UpdateDialog(
89cdf0e10cSrcweir         com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const & context,
90cdf0e10cSrcweir         Window * parent,
91cdf0e10cSrcweir         const std::vector< com::sun::star::uno::Reference<
92cdf0e10cSrcweir         com::sun::star::deployment::XPackage > > & vExtensionList,
93cdf0e10cSrcweir         std::vector< dp_gui::UpdateData > * updateData);
94cdf0e10cSrcweir 
95cdf0e10cSrcweir     ~UpdateDialog();
96cdf0e10cSrcweir 
97cdf0e10cSrcweir     virtual sal_Bool Close();
98cdf0e10cSrcweir 
99cdf0e10cSrcweir     virtual short Execute();
100cdf0e10cSrcweir 
101cdf0e10cSrcweir     void notifyMenubar( bool bPrepareOnly, bool bRecheckOnly );
102cdf0e10cSrcweir     static void createNotifyJob( bool bPrepareOnly,
103cdf0e10cSrcweir         com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< rtl::OUString > > &rItemList );
104cdf0e10cSrcweir 
105cdf0e10cSrcweir private:
106cdf0e10cSrcweir     UpdateDialog(UpdateDialog &); // not defined
107cdf0e10cSrcweir     void operator =(UpdateDialog &); // not defined
108cdf0e10cSrcweir 
109cdf0e10cSrcweir     struct DisabledUpdate;
110cdf0e10cSrcweir     struct SpecificError;
111cdf0e10cSrcweir     struct IgnoredUpdate;
112cdf0e10cSrcweir     struct Index;
113cdf0e10cSrcweir     friend struct Index;
114cdf0e10cSrcweir     class Thread;
115cdf0e10cSrcweir     friend class Thread;
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     class CheckListBox: public SvxCheckListBox {
118cdf0e10cSrcweir     public:
119cdf0e10cSrcweir         CheckListBox(
120cdf0e10cSrcweir             UpdateDialog & dialog, ResId const & resource,
121cdf0e10cSrcweir             Image const & normalStaticImage,
122cdf0e10cSrcweir             Image const & highContrastStaticImage);
123cdf0e10cSrcweir 
124cdf0e10cSrcweir         virtual ~CheckListBox();
125cdf0e10cSrcweir 
126cdf0e10cSrcweir         sal_uInt16 getItemCount() const;
127cdf0e10cSrcweir 
128cdf0e10cSrcweir     private:
129cdf0e10cSrcweir         CheckListBox(UpdateDialog::CheckListBox &); // not defined
130cdf0e10cSrcweir         void operator =(UpdateDialog::CheckListBox &); // not defined
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         virtual void MouseButtonDown(MouseEvent const & event);
133cdf0e10cSrcweir         virtual void MouseButtonUp(MouseEvent const & event);
134cdf0e10cSrcweir         virtual void KeyInput(KeyEvent const & event);
135cdf0e10cSrcweir 
136cdf0e10cSrcweir         void handlePopupMenu( const Point &rPos );
137cdf0e10cSrcweir 
138cdf0e10cSrcweir         rtl::OUString m_ignoreUpdate;
139cdf0e10cSrcweir         rtl::OUString m_ignoreAllUpdates;
140cdf0e10cSrcweir         rtl::OUString m_enableUpdate;
141cdf0e10cSrcweir         UpdateDialog & m_dialog;
142cdf0e10cSrcweir     };
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 
145cdf0e10cSrcweir     friend class CheckListBox;
146cdf0e10cSrcweir 
147cdf0e10cSrcweir     sal_uInt16 insertItem( UpdateDialog::Index *pIndex, SvLBoxButtonKind kind );
148cdf0e10cSrcweir     void addAdditional( UpdateDialog::Index *pIndex, SvLBoxButtonKind kind );
149cdf0e10cSrcweir     bool isIgnoredUpdate( UpdateDialog::Index *pIndex );
150cdf0e10cSrcweir     void setIgnoredUpdate( UpdateDialog::Index *pIndex, bool bIgnore, bool bIgnoreAll );
151cdf0e10cSrcweir 
152cdf0e10cSrcweir     void addEnabledUpdate( rtl::OUString const & name, dp_gui::UpdateData & data );
153cdf0e10cSrcweir     void addDisabledUpdate( UpdateDialog::DisabledUpdate & data );
154cdf0e10cSrcweir     void addSpecificError( UpdateDialog::SpecificError & data );
155cdf0e10cSrcweir 
156cdf0e10cSrcweir     void checkingDone();
157cdf0e10cSrcweir 
158cdf0e10cSrcweir     void enableOk();
159cdf0e10cSrcweir 
160cdf0e10cSrcweir     void getIgnoredUpdates();
161cdf0e10cSrcweir     void storeIgnoredUpdates();
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     void initDescription();
164cdf0e10cSrcweir     void clearDescription();
165cdf0e10cSrcweir     bool showDescription(::com::sun::star::uno::Reference<
166cdf0e10cSrcweir                          ::com::sun::star::deployment::XPackage > const & aExtension);
167cdf0e10cSrcweir     bool showDescription(std::pair< rtl::OUString, rtl::OUString > const & pairPublisher,
168cdf0e10cSrcweir                          rtl::OUString const & sReleaseNotes);
169cdf0e10cSrcweir     bool showDescription( ::com::sun::star::uno::Reference<
170cdf0e10cSrcweir         ::com::sun::star::xml::dom::XNode > const & aUpdateInfo);
171cdf0e10cSrcweir     bool showDescription( const String& rDescription, bool bWithPublisher );
172cdf0e10cSrcweir     bool isReadOnly( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
173cdf0e10cSrcweir 
174cdf0e10cSrcweir     DECL_LINK(selectionHandler, void *);
175cdf0e10cSrcweir     DECL_LINK(allHandler, void *);
176cdf0e10cSrcweir     DECL_LINK(okHandler, void *);
177cdf0e10cSrcweir     DECL_LINK(closeHandler, void *);
178cdf0e10cSrcweir     DECL_LINK(hyperlink_clicked, svt::FixedHyperlink *);
179cdf0e10cSrcweir 
180cdf0e10cSrcweir     com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
181cdf0e10cSrcweir         m_context;
182cdf0e10cSrcweir     FixedText m_checking;
183cdf0e10cSrcweir     Throbber m_throbber;
184cdf0e10cSrcweir     FixedText m_update;
185cdf0e10cSrcweir     UpdateDialog::CheckListBox m_updates;
186cdf0e10cSrcweir     CheckBox m_all;
187cdf0e10cSrcweir     FixedLine m_description;
188cdf0e10cSrcweir     FixedText m_PublisherLabel;
189cdf0e10cSrcweir     svt::FixedHyperlink m_PublisherLink;
190cdf0e10cSrcweir     FixedText m_ReleaseNotesLabel;
191cdf0e10cSrcweir     svt::FixedHyperlink m_ReleaseNotesLink;
192cdf0e10cSrcweir     dp_gui::DescriptionEdit m_descriptions;
193cdf0e10cSrcweir     FixedLine m_line;
194cdf0e10cSrcweir     HelpButton m_help;
195cdf0e10cSrcweir     PushButton m_ok;
196cdf0e10cSrcweir     PushButton m_close;
197cdf0e10cSrcweir     rtl::OUString m_error;
198cdf0e10cSrcweir     rtl::OUString m_none;
199cdf0e10cSrcweir     rtl::OUString m_noInstallable;
200cdf0e10cSrcweir     rtl::OUString m_failure;
201cdf0e10cSrcweir     rtl::OUString m_unknownError;
202cdf0e10cSrcweir     rtl::OUString m_noDescription;
203cdf0e10cSrcweir     rtl::OUString m_noInstall;
204cdf0e10cSrcweir     rtl::OUString m_noDependency;
205cdf0e10cSrcweir     rtl::OUString m_noDependencyCurVer;
206cdf0e10cSrcweir     rtl::OUString m_browserbased;
207cdf0e10cSrcweir     rtl::OUString m_version;
208cdf0e10cSrcweir     rtl::OUString m_ignoredUpdate;
209cdf0e10cSrcweir     std::vector< dp_gui::UpdateData > m_enabledUpdates;
210cdf0e10cSrcweir     std::vector< UpdateDialog::DisabledUpdate > m_disabledUpdates;
211cdf0e10cSrcweir     std::vector< UpdateDialog::SpecificError > m_specificErrors;
212cdf0e10cSrcweir     std::vector< UpdateDialog::IgnoredUpdate* > m_ignoredUpdates;
213cdf0e10cSrcweir     std::vector< Index* > m_ListboxEntries;
214cdf0e10cSrcweir     std::vector< dp_gui::UpdateData > & m_updateData;
215cdf0e10cSrcweir     rtl::Reference< UpdateDialog::Thread > m_thread;
216cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
217cdf0e10cSrcweir 
218cdf0e10cSrcweir     Point   m_aFirstLinePos;
219cdf0e10cSrcweir     Size    m_aFirstLineSize;
220cdf0e10cSrcweir     long    m_nFirstLineDelta;
221cdf0e10cSrcweir     long    m_nOneLineMissing;
222cdf0e10cSrcweir     sal_uInt16  m_nLastID;
223cdf0e10cSrcweir     bool    m_bModified;
224cdf0e10cSrcweir };
225cdf0e10cSrcweir 
226cdf0e10cSrcweir }
227cdf0e10cSrcweir 
228cdf0e10cSrcweir #endif
229