Files
libreoffice/sd/source/ui/dlg/RemoteDialogClientBox.hxx
Andrzej Hunt 6216eee4b9 Impress Remote: allow removal of authorised remotes.
Previously authorising a device meant that it would have access
forever -- we now list previously authorised remotes in the remote
dialog, along with controls to allow removal of such remotes.

Change-Id: I4179739f3a2ba0a8fe19c2a0cd0cbbece9cb4352
2014-06-30 07:45:17 +02:00

178 lines
6.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SD_SOURCE_UI_DLG_REMOTEDIALOGCLIENTBOX_HXX
#define INCLUDED_SD_SOURCE_UI_DLG_REMOTEDIALOGCLIENTBOX_HXX
#include "rtl/ustring.hxx"
#include "vcl/scrbar.hxx"
#include "vcl/fixed.hxx"
#include "vcl/button.hxx"
#include "vcl/dialog.hxx"
#include "vcl/field.hxx"
#include "svtools/extensionlistbox.hxx"
#include "cppuhelper/implbase1.hxx"
#include "com/sun/star/lang/Locale.hpp"
#include "com/sun/star/lang/XEventListener.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
#include <boost/shared_ptr.hpp>
#include "sdresid.hxx"
namespace sd {
#define SMALL_ICON_SIZE 16
#define TOP_OFFSET 5
#define ICON_HEIGHT 42
#define ICON_WIDTH 47
#define ICON_OFFSET 72
#define RIGHT_ICON_OFFSET 5
#define SPACE_BETWEEN 3
// struct ClientBoxEntry
struct ClientBoxEntry;
struct ClientInfo;
typedef ::boost::shared_ptr< ClientBoxEntry > TClientBoxEntry;
struct ClientBoxEntry
{
bool m_bActive :1;
::boost::shared_ptr<ClientInfo> m_pClientInfo;
ClientBoxEntry( ::boost::shared_ptr<ClientInfo> pClientInfo );
~ClientBoxEntry();
};
// class ExtensionBox_Impl
class ClientBox;
class ClientRemovedListener : public ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener >
{
ClientBox *m_pParent;
public:
ClientRemovedListener( ClientBox *pParent ) { m_pParent = pParent; }
virtual ~ClientRemovedListener();
// XEventListener
virtual void SAL_CALL disposing( ::com::sun::star::lang::EventObject const & evt )
throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
};
class ClientBox:
public Control
{
bool m_bHasScrollBar;
bool m_bHasActive;
bool m_bNeedsRecalc;
bool m_bInCheckMode;
bool m_bAdjustActive;
bool m_bInDelete;
//Must be guarded together with m_vEntries to ensure a valid index at all times.
//Use m_entriesMutex as guard.
long m_nActive;
long m_nTopIndex;
long m_nStdHeight;
long m_nActiveHeight;
long m_nExtraHeight;
Size m_aOutputSize;
Link m_aClickHdl;
Link m_aDeauthoriseHdl;
NumericBox m_aPinBox;
PushButton m_aDeauthoriseButton;
ScrollBar m_aScrollBar;
com::sun::star::uno::Reference< ClientRemovedListener > m_xRemoveListener;
//This mutex is used for synchronizing access to m_vEntries.
//Currently it is used to synchronize adding, removing entries and
//functions like getItemName, getItemDescription, etc. to prevent
//that m_vEntries is accessed at an invalid index.
//ToDo: There are many more places where m_vEntries is read and which may
//fail. For example the Paint method is probable called from the main thread
//while new entries are added / removed in a separate thread.
mutable ::osl::Mutex m_entriesMutex;
std::vector< TClientBoxEntry > m_vEntries;
std::vector< TClientBoxEntry > m_vRemovedEntries;
void CalcActiveHeight( const long nPos );
long GetTotalHeight() const;
void SetupScrollBar();
void DrawRow( const Rectangle& rRect, const TClientBoxEntry pEntry );
bool HandleTabKey( bool bReverse );
bool HandleCursorKey( sal_uInt16 nKeyCode );
void DeleteRemoved();
DECL_DLLPRIVATE_LINK( ScrollHdl, ScrollBar* );
DECL_DLLPRIVATE_LINK( DeauthoriseHdl, void * );
//Index starts with 1.
//Throws an com::sun::star::lang::IllegalArgumentException, when the index is invalid.
void checkIndex(sal_Int32 pos) const;
public:
ClientBox( Window* pParent, WinBits nStyle );
virtual ~ClientBox();
void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
void Paint( const Rectangle &rPaintRect ) SAL_OVERRIDE;
void Resize() SAL_OVERRIDE;
Size GetOptimalSize() const SAL_OVERRIDE;
bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
const Size GetMinOutputSizePixel() const;
void SetExtraSize( long nSize ) { m_nExtraHeight = nSize; }
TClientBoxEntry GetEntryData( long nPos ) { return m_vEntries[ nPos ]; }
long GetActiveEntryIndex();
long GetEntryCount() { return (long) m_vEntries.size(); }
Rectangle GetEntryRect( const long nPos ) const;
bool HasActive() { return m_bHasActive; }
long PointToPos( const Point& rPos );
void SetScrollHdl( const Link& rLink );
void DoScroll( long nDelta );
void SetHyperlinkHdl( const Link& rLink ){ m_aClickHdl = rLink; }
void RecalcAll();
void RemoveUnlocked();
void selectEntry( const long nPos );
long addEntry( ::boost::shared_ptr<ClientInfo> pClientInfo );
void updateEntry( const ::boost::shared_ptr<ClientInfo> pPackageInfo );
void removeEntry( const ::boost::shared_ptr<ClientInfo> pPackageInfo );
void clearEntries();
void prepareChecking();
void checkEntries();
OUString getPin();
void populateEntries();
};
}
#endif // INCLUDED_SD_SOURCE_UI_DLG_REMOTEDIALOGCLIENTBOX_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */