xref: /aoo41x/main/vcl/workben/svpclient.cxx (revision b6dc695e)
19f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
39f62ea84SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
49f62ea84SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
59f62ea84SAndrew Rist  * distributed with this work for additional information
69f62ea84SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
79f62ea84SAndrew Rist  * to you under the Apache License, Version 2.0 (the
89f62ea84SAndrew Rist  * "License"); you may not use this file except in compliance
99f62ea84SAndrew Rist  * with the License.  You may obtain a copy of the License at
109f62ea84SAndrew Rist  *
119f62ea84SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
129f62ea84SAndrew Rist  *
139f62ea84SAndrew Rist  * Unless required by applicable law or agreed to in writing,
149f62ea84SAndrew Rist  * software distributed under the License is distributed on an
159f62ea84SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
169f62ea84SAndrew Rist  * KIND, either express or implied.  See the License for the
179f62ea84SAndrew Rist  * specific language governing permissions and limitations
189f62ea84SAndrew Rist  * under the License.
199f62ea84SAndrew Rist  *
209f62ea84SAndrew Rist  *************************************************************/
219f62ea84SAndrew Rist 
229f62ea84SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include <sal/main.h>
25cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
26cdf0e10cSrcweir #include <com/sun/star/awt/ImageScaleMode.hpp>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <vcl/event.hxx>
29cdf0e10cSrcweir #include <vcl/svapp.hxx>
30cdf0e10cSrcweir #include <vcl/wrkwin.hxx>
31cdf0e10cSrcweir #include <vcl/button.hxx>
32cdf0e10cSrcweir #include <vcl/lstbox.hxx>
33cdf0e10cSrcweir #include <vcl/imgctrl.hxx>
34cdf0e10cSrcweir #include <vcl/bitmapex.hxx>
35cdf0e10cSrcweir #include <tools/extendapplicationenvironment.hxx>
36cdf0e10cSrcweir #include <tools/stream.hxx>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #include <rtl/strbuf.hxx>
39cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
40cdf0e10cSrcweir 
41cdf0e10cSrcweir #include <math.h>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
44cdf0e10cSrcweir #include <cppuhelper/servicefactory.hxx>
45cdf0e10cSrcweir #include <cppuhelper/bootstrap.hxx>
46cdf0e10cSrcweir #include "ucbhelper/contentbroker.hxx"
47cdf0e10cSrcweir #include "ucbhelper/configurationkeys.hxx"
48cdf0e10cSrcweir 
49cdf0e10cSrcweir #include <errno.h>
50cdf0e10cSrcweir #include <unistd.h>
51cdf0e10cSrcweir #include <stdio.h>
52cdf0e10cSrcweir #include <sys/types.h>
53cdf0e10cSrcweir #include <sys/socket.h>
54cdf0e10cSrcweir #include <netinet/in.h>
55cdf0e10cSrcweir 
56cdf0e10cSrcweir 
57cdf0e10cSrcweir using namespace rtl;
58cdf0e10cSrcweir using namespace cppu;
59cdf0e10cSrcweir using namespace comphelper;
60cdf0e10cSrcweir using namespace ::com::sun::star::uno;
61cdf0e10cSrcweir using namespace ::com::sun::star::lang;
62cdf0e10cSrcweir // -----------------------------------------------------------------------
63cdf0e10cSrcweir 
64cdf0e10cSrcweir // Forward declaration
65cdf0e10cSrcweir void Main();
66cdf0e10cSrcweir 
67cdf0e10cSrcweir // -----------------------------------------------------------------------
68cdf0e10cSrcweir 
SAL_IMPLEMENT_MAIN()69cdf0e10cSrcweir SAL_IMPLEMENT_MAIN()
70cdf0e10cSrcweir {
71cdf0e10cSrcweir     tools::extendApplicationEnvironment();
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 	//-------------------------------------------------
74cdf0e10cSrcweir 	// create the global service-manager
75cdf0e10cSrcweir 	//-------------------------------------------------
76cdf0e10cSrcweir     Reference< XMultiServiceFactory > xFactory;
77cdf0e10cSrcweir     try
78cdf0e10cSrcweir     {
79cdf0e10cSrcweir         Reference< XComponentContext > xCtx = defaultBootstrap_InitialComponentContext();
80cdf0e10cSrcweir         xFactory = Reference< XMultiServiceFactory >(  xCtx->getServiceManager(), UNO_QUERY );
81cdf0e10cSrcweir         if( xFactory.is() )
82cdf0e10cSrcweir             setProcessServiceFactory( xFactory );
83cdf0e10cSrcweir     }
84cdf0e10cSrcweir     catch( com::sun::star::uno::Exception& rExc)
85cdf0e10cSrcweir     {
86cdf0e10cSrcweir     }
87cdf0e10cSrcweir 
88cdf0e10cSrcweir     if( ! xFactory.is() )
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir         fprintf( stderr, "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" );
91cdf0e10cSrcweir         exit( 1 );
92cdf0e10cSrcweir     }
93cdf0e10cSrcweir 
94cdf0e10cSrcweir     /*
95cdf0e10cSrcweir      *	Create UCB.
96cdf0e10cSrcweir      */
97cdf0e10cSrcweir 	Sequence< Any > aArgs( 2 );
98cdf0e10cSrcweir 	aArgs[ 0 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL );
99cdf0e10cSrcweir 	aArgs[ 1 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE );
100cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
101cdf0e10cSrcweir 	sal_Bool bSuccess =
102cdf0e10cSrcweir #endif
103cdf0e10cSrcweir         ::ucbhelper::ContentBroker::initialize( xFactory, aArgs );
104cdf0e10cSrcweir 
105cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
106cdf0e10cSrcweir 	if ( !bSuccess )
107cdf0e10cSrcweir     {
108cdf0e10cSrcweir 		fprintf( stderr, "Error creating UCB, installation must be in disorder. Exiting.\n" );
109cdf0e10cSrcweir         exit( 1 );
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir #endif
112cdf0e10cSrcweir 
113cdf0e10cSrcweir     InitVCL( xFactory );
114cdf0e10cSrcweir     ::Main();
115cdf0e10cSrcweir     DeInitVCL();
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     return 0;
118cdf0e10cSrcweir }
119cdf0e10cSrcweir 
120cdf0e10cSrcweir // -----------------------------------------------------------------------
121cdf0e10cSrcweir 
122cdf0e10cSrcweir class MyWin : public WorkWindow
123cdf0e10cSrcweir {
124cdf0e10cSrcweir     PushButton      m_aListButton;
125cdf0e10cSrcweir     ListBox         m_aSvpBitmaps;
126cdf0e10cSrcweir     ImageControl    m_aImage;
127cdf0e10cSrcweir     PushButton      m_aQuitButton;
128cdf0e10cSrcweir public:
129cdf0e10cSrcweir 				MyWin( Window* pParent, WinBits nWinStyle );
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 	void		MouseMove( const MouseEvent& rMEvt );
132cdf0e10cSrcweir 	void		MouseButtonDown( const MouseEvent& rMEvt );
133cdf0e10cSrcweir 	void		MouseButtonUp( const MouseEvent& rMEvt );
134cdf0e10cSrcweir 	void		KeyInput( const KeyEvent& rKEvt );
135cdf0e10cSrcweir 	void		KeyUp( const KeyEvent& rKEvt );
136cdf0e10cSrcweir 	void		Paint( const Rectangle& rRect );
137cdf0e10cSrcweir 	void		Resize();
138cdf0e10cSrcweir 
139cdf0e10cSrcweir     sal_Bool        Close();
140cdf0e10cSrcweir 
141cdf0e10cSrcweir     void parseList( const rtl::OString& rList );
142cdf0e10cSrcweir     rtl::OString processCommand( const rtl::OString& rCommand );
143cdf0e10cSrcweir 
144cdf0e10cSrcweir     DECL_LINK( ListHdl, Button* );
145cdf0e10cSrcweir     DECL_LINK( SelectHdl, ListBox* );
146cdf0e10cSrcweir     DECL_LINK( QuitHdl, Button* );
147cdf0e10cSrcweir };
148cdf0e10cSrcweir 
149cdf0e10cSrcweir // -----------------------------------------------------------------------
150cdf0e10cSrcweir 
Main()151cdf0e10cSrcweir void Main()
152cdf0e10cSrcweir {
153cdf0e10cSrcweir 	MyWin aMainWin( NULL, WB_STDWORK );
154cdf0e10cSrcweir 	aMainWin.SetText( XubString( RTL_CONSTASCII_USTRINGPARAM( "SvpClient" ) ) );
155cdf0e10cSrcweir 	aMainWin.Show();
156cdf0e10cSrcweir 
157cdf0e10cSrcweir 	Application::Execute();
158cdf0e10cSrcweir }
159cdf0e10cSrcweir 
160cdf0e10cSrcweir // -----------------------------------------------------------------------
161cdf0e10cSrcweir 
MyWin(Window * pParent,WinBits nWinStyle)162cdf0e10cSrcweir MyWin::MyWin( Window* pParent, WinBits nWinStyle ) :
163cdf0e10cSrcweir 	WorkWindow( pParent, nWinStyle ),
164cdf0e10cSrcweir     m_aListButton( this, 0 ),
165cdf0e10cSrcweir     m_aSvpBitmaps( this, WB_BORDER ),
166cdf0e10cSrcweir     m_aImage( this, WB_BORDER ),
167cdf0e10cSrcweir     m_aQuitButton( this, 0 )
168cdf0e10cSrcweir {
169cdf0e10cSrcweir     m_aListButton.SetPosSizePixel( Point( 10, 10 ), Size( 120, 25 ) );
170cdf0e10cSrcweir     m_aListButton.SetText( String( RTL_CONSTASCII_USTRINGPARAM( "List Elements" ) ) );
171cdf0e10cSrcweir     m_aListButton.SetClickHdl( LINK( this, MyWin, ListHdl ) );
172cdf0e10cSrcweir     m_aListButton.Show();
173cdf0e10cSrcweir 
174cdf0e10cSrcweir     m_aSvpBitmaps.SetPosSizePixel( Point( 10, 40 ), Size( 150, 150 ) );
175cdf0e10cSrcweir     m_aSvpBitmaps.SetSelectHdl( LINK( this, MyWin, SelectHdl ) );
176cdf0e10cSrcweir     m_aSvpBitmaps.Show();
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     m_aImage.SetPosSizePixel( Point( 170, 10 ), Size( 400, 400 ) );
179*b6dc695eSAriel Constenla-Haile     m_aImage.SetScaleMode( com::sun::star::awt::ImageScaleMode::NONE );
180cdf0e10cSrcweir     m_aImage.Show();
181cdf0e10cSrcweir 
182cdf0e10cSrcweir     m_aQuitButton.SetPosSizePixel( Point( 10, 300 ), Size( 120,25 ) );
183cdf0e10cSrcweir     m_aQuitButton.SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Quit SVP server" ) ) );
184cdf0e10cSrcweir     m_aQuitButton.SetClickHdl( LINK( this, MyWin, QuitHdl ) );
185cdf0e10cSrcweir     m_aQuitButton.Show();
186cdf0e10cSrcweir }
187cdf0e10cSrcweir 
Close()188cdf0e10cSrcweir sal_Bool MyWin::Close()
189cdf0e10cSrcweir {
190cdf0e10cSrcweir     sal_Bool bRet = WorkWindow::Close();
191cdf0e10cSrcweir     if( bRet )
192cdf0e10cSrcweir         Application::Quit();
193cdf0e10cSrcweir     return bRet;
194cdf0e10cSrcweir }
195cdf0e10cSrcweir 
parseList(const rtl::OString & rList)196cdf0e10cSrcweir void MyWin::parseList( const rtl::OString& rList )
197cdf0e10cSrcweir {
198cdf0e10cSrcweir     sal_Int32 nTokenPos = 0;
199cdf0e10cSrcweir     rtl::OUString aElementType;
200cdf0e10cSrcweir     m_aSvpBitmaps.Clear();
201cdf0e10cSrcweir     while( nTokenPos >= 0 )
202cdf0e10cSrcweir     {
203cdf0e10cSrcweir         rtl::OString aLine = rList.getToken( 0, '\n', nTokenPos );
204cdf0e10cSrcweir         if( ! aLine.getLength() || *aLine.getStr() == '#' )
205cdf0e10cSrcweir             continue;
206cdf0e10cSrcweir 
207cdf0e10cSrcweir         if( aLine.compareTo( "ElementType: ", 13 ) == 0 )
208cdf0e10cSrcweir             aElementType = rtl::OStringToOUString( aLine.copy( 13 ), RTL_TEXTENCODING_ASCII_US );
209cdf0e10cSrcweir         else
210cdf0e10cSrcweir         {
211cdf0e10cSrcweir             rtl::OUStringBuffer aNewElement( 64 );
212cdf0e10cSrcweir             aNewElement.append( aElementType );
213cdf0e10cSrcweir             aNewElement.appendAscii( ": " );
214cdf0e10cSrcweir             aNewElement.append( rtl::OStringToOUString( aLine, RTL_TEXTENCODING_ASCII_US ) );
215cdf0e10cSrcweir             m_aSvpBitmaps.InsertEntry( aNewElement.makeStringAndClear() );
216cdf0e10cSrcweir         }
217cdf0e10cSrcweir     }
218cdf0e10cSrcweir }
219cdf0e10cSrcweir 
processCommand(const rtl::OString & rCommand)220cdf0e10cSrcweir rtl::OString MyWin::processCommand( const rtl::OString& rCommand )
221cdf0e10cSrcweir {
222cdf0e10cSrcweir     static const char* pEnv = getenv("SVP_LISTENER_PORT");
223cdf0e10cSrcweir     rtl::OStringBuffer aAnswer;
224cdf0e10cSrcweir     int nPort = (pEnv && *pEnv) ? atoi(pEnv) : 8000;
225cdf0e10cSrcweir     int nSocket = socket( PF_INET, SOCK_STREAM, 0 );
226cdf0e10cSrcweir     if( nSocket >= 0)
227cdf0e10cSrcweir     {
228cdf0e10cSrcweir         struct sockaddr_in addr;
229cdf0e10cSrcweir         memset(&addr, 0, sizeof(struct sockaddr_in));
230cdf0e10cSrcweir         addr.sin_family = AF_INET;
231cdf0e10cSrcweir         addr.sin_port = htons(nPort);
232cdf0e10cSrcweir         addr.sin_addr.s_addr = INADDR_ANY;
233cdf0e10cSrcweir         if( connect( nSocket, (const sockaddr*)&addr, sizeof(addr) ) )
234cdf0e10cSrcweir         {
235cdf0e10cSrcweir             perror( "SvpElementContainer: connect() failed" );
236cdf0e10cSrcweir             close(nSocket);
237cdf0e10cSrcweir         }
238cdf0e10cSrcweir         else
239cdf0e10cSrcweir         {
240cdf0e10cSrcweir             write( nSocket, rCommand.getStr(), rCommand.getLength() );
241cdf0e10cSrcweir             write( nSocket, "\n", 1 );
242cdf0e10cSrcweir             char buf[256];
243cdf0e10cSrcweir             ssize_t nBytes = 0;
244cdf0e10cSrcweir             do
245cdf0e10cSrcweir             {
246cdf0e10cSrcweir                 nBytes = read( nSocket, buf, sizeof(buf) );
247cdf0e10cSrcweir                 aAnswer.append( buf, nBytes );
248cdf0e10cSrcweir             } while( nBytes == sizeof( buf ) );
249cdf0e10cSrcweir         }
250cdf0e10cSrcweir     }
251cdf0e10cSrcweir     else
252cdf0e10cSrcweir         perror( "SvpElementContainer: socket() failed\n" );
253cdf0e10cSrcweir     return aAnswer.makeStringAndClear();
254cdf0e10cSrcweir }
255cdf0e10cSrcweir 
256cdf0e10cSrcweir IMPL_LINK( MyWin, ListHdl, Button*, )
257cdf0e10cSrcweir {
258cdf0e10cSrcweir     parseList( processCommand( "list" ) );
259cdf0e10cSrcweir     return 0;
260cdf0e10cSrcweir }
261cdf0e10cSrcweir 
262cdf0e10cSrcweir IMPL_LINK( MyWin, QuitHdl, Button*, )
263cdf0e10cSrcweir {
264cdf0e10cSrcweir     processCommand( "quit" );
265cdf0e10cSrcweir     return 0;
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
268cdf0e10cSrcweir IMPL_LINK( MyWin, SelectHdl, ListBox*, )
269cdf0e10cSrcweir {
270cdf0e10cSrcweir     String aEntry = m_aSvpBitmaps.GetSelectEntry();
271cdf0e10cSrcweir     sal_uInt16 nPos = aEntry.SearchAscii( ": " );
272cdf0e10cSrcweir     if( nPos != STRING_NOTFOUND )
273cdf0e10cSrcweir     {
274cdf0e10cSrcweir         OStringBuffer aCommand( 64 );
275cdf0e10cSrcweir         aCommand.append( "get " );
276cdf0e10cSrcweir         aCommand.append( rtl::OUStringToOString( aEntry.Copy( nPos+2 ), RTL_TEXTENCODING_ASCII_US ) );
277cdf0e10cSrcweir         OString aAnswer( processCommand( aCommand.makeStringAndClear() ) );
278cdf0e10cSrcweir         SvMemoryStream aStream( aAnswer.getLength() );
279cdf0e10cSrcweir         aStream.Write( aAnswer.getStr(), aAnswer.getLength() );
280cdf0e10cSrcweir         aStream.Seek( STREAM_SEEK_TO_BEGIN );
281cdf0e10cSrcweir         Bitmap aBitmap;
282cdf0e10cSrcweir         aStream >> aBitmap;
283cdf0e10cSrcweir         fprintf( stderr, "got bitmap of size %ldx%ld\n",
284cdf0e10cSrcweir                  sal::static_int_cast< long >(aBitmap.GetSizePixel().Width()),
285cdf0e10cSrcweir                  sal::static_int_cast< long >(aBitmap.GetSizePixel().Height()));
286cdf0e10cSrcweir         Size aFixedSize( aBitmap.GetSizePixel() );
287cdf0e10cSrcweir         aFixedSize.Width() += 10;
288cdf0e10cSrcweir         aFixedSize.Height() += 10;
289cdf0e10cSrcweir         m_aImage.SetSizePixel( aFixedSize );
290cdf0e10cSrcweir         m_aImage.SetImage( Image( BitmapEx( aBitmap ) ) );
291cdf0e10cSrcweir     }
292cdf0e10cSrcweir     return 0;
293cdf0e10cSrcweir }
294cdf0e10cSrcweir 
295cdf0e10cSrcweir // -----------------------------------------------------------------------
296cdf0e10cSrcweir 
MouseMove(const MouseEvent & rMEvt)297cdf0e10cSrcweir void MyWin::MouseMove( const MouseEvent& rMEvt )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir 	WorkWindow::MouseMove( rMEvt );
300cdf0e10cSrcweir }
301cdf0e10cSrcweir 
302cdf0e10cSrcweir // -----------------------------------------------------------------------
303cdf0e10cSrcweir 
MouseButtonDown(const MouseEvent & rMEvt)304cdf0e10cSrcweir void MyWin::MouseButtonDown( const MouseEvent& rMEvt )
305cdf0e10cSrcweir {
306cdf0e10cSrcweir 	WorkWindow::MouseButtonDown( rMEvt );
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
309cdf0e10cSrcweir // -----------------------------------------------------------------------
310cdf0e10cSrcweir 
MouseButtonUp(const MouseEvent & rMEvt)311cdf0e10cSrcweir void MyWin::MouseButtonUp( const MouseEvent& rMEvt )
312cdf0e10cSrcweir {
313cdf0e10cSrcweir 	WorkWindow::MouseButtonUp( rMEvt );
314cdf0e10cSrcweir }
315cdf0e10cSrcweir 
316cdf0e10cSrcweir // -----------------------------------------------------------------------
317cdf0e10cSrcweir 
KeyInput(const KeyEvent & rKEvt)318cdf0e10cSrcweir void MyWin::KeyInput( const KeyEvent& rKEvt )
319cdf0e10cSrcweir {
320cdf0e10cSrcweir 	WorkWindow::KeyInput( rKEvt );
321cdf0e10cSrcweir }
322cdf0e10cSrcweir 
323cdf0e10cSrcweir // -----------------------------------------------------------------------
324cdf0e10cSrcweir 
KeyUp(const KeyEvent & rKEvt)325cdf0e10cSrcweir void MyWin::KeyUp( const KeyEvent& rKEvt )
326cdf0e10cSrcweir {
327cdf0e10cSrcweir 	WorkWindow::KeyUp( rKEvt );
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
330cdf0e10cSrcweir // -----------------------------------------------------------------------
331cdf0e10cSrcweir 
Paint(const Rectangle & rRect)332cdf0e10cSrcweir void MyWin::Paint( const Rectangle& rRect )
333cdf0e10cSrcweir {
334cdf0e10cSrcweir 	WorkWindow::Paint( rRect );
335cdf0e10cSrcweir }
336cdf0e10cSrcweir 
337cdf0e10cSrcweir // -----------------------------------------------------------------------
338cdf0e10cSrcweir 
Resize()339cdf0e10cSrcweir void MyWin::Resize()
340cdf0e10cSrcweir {
341cdf0e10cSrcweir 	WorkWindow::Resize();
342cdf0e10cSrcweir }
343