Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include <osl/mutex.hxx>
22 : #include <cppuhelper/weak.hxx>
23 : #include <toolkit/helper/vclunohelper.hxx>
24 : #include <com/sun/star/awt/XWindow.hpp>
25 : #include <com/sun/star/awt/XWindowPeer.hpp>
26 : #include <com/sun/star/frame/XDispatchProvider.hpp>
27 : #include <com/sun/star/frame/FrameSearchFlag.hpp>
28 : #include <com/sun/star/util/XURLTransformer.hpp>
29 : #include "bibconfig.hxx"
30 :
31 :
32 : #include "datman.hxx"
33 : #include "bibcont.hxx"
34 :
35 :
36 0 : BibShortCutHandler::~BibShortCutHandler()
37 : {
38 0 : }
39 :
40 0 : bool BibShortCutHandler::HandleShortCutKey( const KeyEvent& )
41 : {
42 0 : return false;
43 : }
44 :
45 :
46 0 : BibWindow::BibWindow( vcl::Window* pParent, WinBits nStyle ) : Window( pParent, nStyle ), BibShortCutHandler( this )
47 : {
48 0 : }
49 :
50 0 : BibWindow::~BibWindow()
51 : {
52 0 : }
53 :
54 :
55 0 : BibSplitWindow::BibSplitWindow( vcl::Window* pParent, WinBits nStyle ) : SplitWindow( pParent, nStyle ), BibShortCutHandler( this )
56 : {
57 0 : }
58 :
59 0 : BibSplitWindow::~BibSplitWindow()
60 : {
61 0 : }
62 :
63 0 : BibTabPage::BibTabPage( vcl::Window* pParent, const OString& rID, const OUString& rUIXMLDescription ) :
64 0 : TabPage( pParent, rID, rUIXMLDescription ), BibShortCutHandler( this )
65 : {
66 0 : }
67 :
68 0 : BibTabPage::~BibTabPage()
69 : {
70 0 : }
71 :
72 :
73 : using namespace osl;
74 : using namespace ::com::sun::star;
75 : using namespace ::com::sun::star::uno;
76 : using namespace ::com::sun::star::frame;
77 :
78 : //split window size is a percent value
79 : #define WIN_MIN_HEIGHT 10
80 : #define WIN_STEP_SIZE 5
81 :
82 0 : BibWindowContainer::BibWindowContainer( vcl::Window* pParent, BibShortCutHandler* pChildWin, WinBits nStyle ) :
83 : BibWindow( pParent, nStyle ),
84 0 : pChild( pChildWin )
85 : {
86 0 : if(pChild!=NULL)
87 : {
88 0 : vcl::Window* pChildWindow = GetChild();
89 0 : pChildWindow->SetParent(this);
90 0 : pChildWindow->Show();
91 0 : pChildWindow->SetPosPixel(Point(0,0));
92 : }
93 0 : }
94 :
95 0 : BibWindowContainer::~BibWindowContainer()
96 : {
97 0 : if( pChild )
98 : {
99 0 : vcl::Window* pDel = GetChild();
100 0 : pChild = NULL; // prevents GetFocus for child while deleting!
101 0 : delete pDel;
102 : }
103 0 : }
104 :
105 0 : void BibWindowContainer::Resize()
106 : {
107 0 : if( pChild )
108 0 : GetChild()->SetSizePixel( GetOutputSizePixel() );
109 0 : }
110 :
111 0 : void BibWindowContainer::GetFocus()
112 : {
113 0 : if( pChild )
114 0 : GetChild()->GrabFocus();
115 0 : }
116 :
117 0 : bool BibWindowContainer::HandleShortCutKey( const KeyEvent& rKeyEvent )
118 : {
119 0 : return pChild && pChild->HandleShortCutKey( rKeyEvent );
120 : }
121 :
122 :
123 0 : BibBookContainer::BibBookContainer(vcl::Window* pParent, WinBits nStyle):
124 : BibSplitWindow(pParent,nStyle),
125 : pTopWin(NULL),
126 0 : pBottomWin(NULL)
127 : {
128 0 : pBibMod = OpenBibModul();
129 0 : aTimer.SetTimeoutHdl(LINK( this, BibBookContainer, SplitHdl));
130 0 : aTimer.SetTimeout(400);
131 0 : }
132 :
133 0 : BibBookContainer::~BibBookContainer()
134 : {
135 0 : if( xTopFrameRef.is() )
136 0 : xTopFrameRef->dispose();
137 0 : if( xBottomFrameRef.is() )
138 0 : xBottomFrameRef->dispose();
139 :
140 0 : if( pTopWin )
141 : {
142 0 : vcl::Window* pDel = pTopWin;
143 0 : pTopWin = NULL; // prevents GetFocus for child while deleting!
144 0 : delete pDel;
145 : }
146 :
147 0 : if( pBottomWin )
148 : {
149 0 : vcl::Window* pDel = pBottomWin;
150 0 : pBottomWin = NULL; // prevents GetFocus for child while deleting!
151 0 : delete pDel;
152 : }
153 :
154 0 : CloseBibModul( pBibMod );
155 0 : }
156 :
157 0 : void BibBookContainer::Split()
158 : {
159 0 : aTimer.Start();
160 0 : }
161 0 : IMPL_LINK( BibBookContainer, SplitHdl, Timer*,/*pT*/)
162 : {
163 0 : long nSize= GetItemSize( TOP_WINDOW);
164 0 : BibConfig* pConfig = BibModul::GetConfig();
165 0 : pConfig->setBeamerSize(nSize);
166 0 : nSize = GetItemSize( BOTTOM_WINDOW);
167 0 : pConfig->setViewSize(nSize);
168 0 : return 0;
169 : }
170 :
171 0 : void BibBookContainer::createTopFrame( BibShortCutHandler* pWin )
172 : {
173 0 : if ( xTopFrameRef.is() ) xTopFrameRef->dispose();
174 :
175 0 : if(pTopWin)
176 : {
177 0 : RemoveItem(TOP_WINDOW);
178 0 : delete pTopWin;
179 : }
180 0 : pTopWin=new BibWindowContainer(this,pWin);
181 0 : pTopWin->Show();
182 0 : BibConfig* pConfig = BibModul::GetConfig();
183 0 : long nSize = pConfig->getBeamerSize();
184 0 : InsertItem(TOP_WINDOW, pTopWin, nSize, 1, 0, SWIB_PERCENTSIZE );
185 :
186 0 : }
187 :
188 0 : void BibBookContainer::createBottomFrame( BibShortCutHandler* pWin )
189 : {
190 0 : if ( xBottomFrameRef.is() ) xBottomFrameRef->dispose();
191 :
192 0 : if(pBottomWin)
193 : {
194 0 : RemoveItem(BOTTOM_WINDOW);
195 0 : delete pBottomWin;
196 : }
197 :
198 0 : pBottomWin=new BibWindowContainer(this,pWin);
199 :
200 0 : BibConfig* pConfig = BibModul::GetConfig();
201 0 : long nSize = pConfig->getViewSize();
202 0 : InsertItem(BOTTOM_WINDOW, pBottomWin, nSize, 1, 0, SWIB_PERCENTSIZE );
203 :
204 0 : }
205 :
206 0 : void BibBookContainer::GetFocus()
207 : {
208 0 : if( pBottomWin )
209 0 : pBottomWin->GrabFocus();
210 0 : }
211 :
212 0 : bool BibBookContainer::PreNotify( NotifyEvent& rNEvt )
213 : {
214 0 : bool nHandled = false;
215 0 : if( EVENT_KEYINPUT == rNEvt.GetType() )
216 : {
217 0 : const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
218 0 : const vcl::KeyCode aKeyCode = pKEvt->GetKeyCode();
219 0 : sal_uInt16 nKey = aKeyCode.GetCode();
220 0 : const sal_uInt16 nModifier = aKeyCode.GetModifier();
221 :
222 0 : if( KEY_MOD2 == nModifier )
223 : {
224 0 : if( KEY_UP == nKey || KEY_DOWN == nKey )
225 : {
226 0 : if(pTopWin && pBottomWin)
227 : {
228 0 : sal_uInt16 nFirstWinId = KEY_UP == nKey ? TOP_WINDOW : BOTTOM_WINDOW;
229 0 : sal_uInt16 nSecondWinId = KEY_UP == nKey ? BOTTOM_WINDOW : TOP_WINDOW;
230 0 : long nHeight = GetItemSize( nFirstWinId );
231 0 : nHeight -= WIN_STEP_SIZE;
232 0 : if(nHeight < WIN_MIN_HEIGHT)
233 0 : nHeight = WIN_MIN_HEIGHT;
234 0 : SetItemSize( nFirstWinId, nHeight );
235 0 : SetItemSize( nSecondWinId, 100 - nHeight );
236 : }
237 0 : nHandled = true;
238 : }
239 0 : else if( pKEvt->GetCharCode() && HandleShortCutKey( *pKEvt ) )
240 0 : nHandled = true;
241 : }
242 : }
243 :
244 0 : return nHandled;
245 : }
246 :
247 0 : bool BibBookContainer::HandleShortCutKey( const KeyEvent& rKeyEvent )
248 : {
249 0 : bool bRet = false;
250 :
251 0 : if( pTopWin )
252 0 : bRet = pTopWin->HandleShortCutKey( rKeyEvent );
253 :
254 0 : if( !bRet && pBottomWin )
255 0 : bRet = pBottomWin->HandleShortCutKey( rKeyEvent );
256 :
257 0 : return bRet;
258 12 : }
259 :
260 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|