summaryrefslogtreecommitdiff
path: root/dbaccess/source/ui/inc/JoinTableView.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'dbaccess/source/ui/inc/JoinTableView.hxx')
-rw-r--r--dbaccess/source/ui/inc/JoinTableView.hxx337
1 files changed, 337 insertions, 0 deletions
diff --git a/dbaccess/source/ui/inc/JoinTableView.hxx b/dbaccess/source/ui/inc/JoinTableView.hxx
new file mode 100644
index 000000000000..a3a8453da8f9
--- /dev/null
+++ b/dbaccess/source/ui/inc/JoinTableView.hxx
@@ -0,0 +1,337 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef DBAUI_JOINTABLEVIEW_HXX
+#define DBAUI_JOINTABLEVIEW_HXX
+
+#ifndef _SV_WINDOW_HXX
+#include <vcl/window.hxx>
+#endif
+#ifndef _SV_TIMER_HXX
+#include <vcl/timer.hxx>
+#endif
+#ifndef _SV_SCRBAR_HXX
+#include <vcl/scrbar.hxx>
+#endif
+#ifndef _RTTI_HXX
+#include <tools/rtti.hxx>
+#endif
+#ifndef _TRANSFER_HXX
+#include <svtools/transfer.hxx>
+#endif
+
+#ifndef _COMPHELPER_STLTYPES_HXX_
+#include <comphelper/stl_types.hxx>
+#endif
+#ifndef _DBACCESS_UI_CALLBACKS_HXX_
+#include "callbacks.hxx"
+#endif
+#include "TableConnectionData.hxx"
+#include "TableWindowData.hxx"
+#include <memory>
+#include <vector>
+
+struct AcceptDropEvent;
+struct ExecuteDropEvent;
+class SfxUndoAction;
+namespace dbaui
+{
+ class OTableConnection;
+ class OTableWindow;
+ struct OJoinExchangeData;
+ class OJoinDesignView;
+ class OTableWindowData;
+ class OJoinDesignViewAccess;
+
+ // this class conatins only the scrollbars to avoid that the tablewindows clip the scrollbars
+ class OJoinTableView;
+ class OScrollWindowHelper : public Window
+ {
+ ScrollBar m_aHScrollBar;
+ ScrollBar m_aVScrollBar;
+ Window* m_pCornerWindow;
+ OJoinTableView* m_pTableView;
+
+ protected:
+ virtual void Resize();
+ public:
+ OScrollWindowHelper( Window* pParent);
+ ~OScrollWindowHelper();
+
+ void setTableView(OJoinTableView* _pTableView);
+
+ void resetRange(const Point& _aSize);
+
+ // own methods
+ ScrollBar* GetHScrollBar() { return &m_aHScrollBar; }
+ ScrollBar* GetVScrollBar() { return &m_aVScrollBar; }
+ };
+
+
+ class OJoinTableView : public Window
+ ,public IDragTransferableListener
+ ,public DropTargetHelper
+ {
+ friend class OJoinMoveTabWinUndoAct;
+ public:
+ DECLARE_STL_USTRINGACCESS_MAP(OTableWindow*,OTableWindowMap);
+ private:
+ OTableWindowMap m_aTableMap;
+ ::std::vector<OTableConnection*> m_vTableConnection;
+
+ Timer m_aDragScrollTimer;
+ Rectangle m_aDragRect;
+ Rectangle m_aSizingRect;
+ Point m_aDragOffset;
+ Point m_aScrollOffset;
+ Point m_ptPrevDraggingPos;
+ Size m_aOutputSize;
+
+
+ OTableWindow* m_pDragWin;
+ OTableWindow* m_pSizingWin;
+ OTableConnection* m_pSelectedConn;
+
+
+ BOOL m_bTrackingInitiallyMoved;
+
+ DECL_LINK(OnDragScrollTimer, void*);
+
+ protected:
+ OTableWindow* m_pLastFocusTabWin;
+ OJoinDesignView* m_pView;
+ OJoinDesignViewAccess* m_pAccessible;
+
+ public:
+ OJoinTableView( Window* pParent, OJoinDesignView* pView );
+ virtual ~OJoinTableView();
+
+ // window override
+ virtual void StateChanged( StateChangedType nStateChange );
+ virtual void GetFocus();
+ virtual void LoseFocus();
+ virtual void KeyInput( const KeyEvent& rEvt );
+ // Accessibility
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
+
+ // own methods
+ ScrollBar* GetHScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetHScrollBar(); }
+ ScrollBar* GetVScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetVScrollBar(); }
+ DECL_LINK( ScrollHdl, ScrollBar* );
+
+ void DrawConnections( const Rectangle& rRect );
+ void InvalidateConnections();
+
+ void BeginChildMove( OTableWindow* pTabWin, const Point& rMousePos );
+ void BeginChildSizing( OTableWindow* pTabWin, const Pointer& rPointer );
+
+ void NotifyTitleClicked( OTableWindow* pTabWin, const Point rMousePos );
+
+ virtual void AddTabWin(const ::rtl::OUString& _rComposedName, const ::rtl::OUString& rWinName, BOOL bNewTable = FALSE);
+ virtual void RemoveTabWin( OTableWindow* pTabWin );
+
+ // alle TabWins verstecken (NICHT loeschen, sie werden in eine Undo-Action gepackt)
+ virtual void HideTabWins();
+
+ virtual void AddConnection(const OJoinExchangeData& jxdSource, const OJoinExchangeData& jxdDest) = 0;
+
+ /** RemoveConnection allows to remove connections from join table view, it implies that the same as addConnection
+
+ @param _pConnection
+ the connection which should be removed
+ @param _bDelete
+ when truie then the connection will be deleted
+
+ @return an iterator to next valid connection, so it can be used in any loop
+ */
+ virtual bool RemoveConnection(OTableConnection* _pConnection,sal_Bool _bDelete);
+
+ /** allows to add new connections to join table view, it implies an invalidation of the features
+ ID_BROWSER_ADDTABLE and SID_RELATION_ADD_RELATION also the modified flag will be set to true
+ @param _pConnection
+ the connection which should be added
+ @param _bAddData
+ <TRUE/> when the data should also be appended
+ */
+ void addConnection(OTableConnection* _pConnection,sal_Bool _bAddData = sal_True);
+
+ BOOL ScrollPane( long nDelta, BOOL bHoriz, BOOL bPaintScrollBars );
+ ULONG GetTabWinCount();
+ Point GetScrollOffset() const { return m_aScrollOffset; }
+
+ OJoinDesignView* getDesignView() const { return m_pView; }
+ OTableWindow* GetTabWindow( const String& rName );
+
+ OTableConnection* GetSelectedConn() { return m_pSelectedConn; }
+ void DeselectConn(OTableConnection* pConn); // NULL ist ausdruecklich zugelassen, dann passiert nichts
+ void SelectConn(OTableConnection* pConn);
+
+ OTableWindowMap* GetTabWinMap() { return &m_aTableMap; }
+ const OTableWindowMap* GetTabWinMap() const { return &m_aTableMap; }
+
+ /** gives a read only access to the connection vector
+ */
+ const ::std::vector<OTableConnection*>* getTableConnections() const { return &m_vTableConnection; }
+
+
+ BOOL ExistsAConn(const OTableWindow* pFromWin) const;
+
+ /** getTableConnections searchs for all connections of a table
+ @param _pFromWin the table for which connections should be found
+
+ @return an iterator which can be used to travel all connections of the table
+ */
+ ::std::vector<OTableConnection*>::const_iterator getTableConnections(const OTableWindow* _pFromWin) const;
+
+ /** getConnectionCount returns how many connection belongs to single table
+ @param _pFromWin the table for which connections should be found
+
+ @return the count of connections wich belongs to this table
+ */
+ sal_Int32 getConnectionCount(const OTableWindow* _pFromWin) const;
+
+ OTableConnection* GetTabConn(const OTableWindow* pLhs,const OTableWindow* pRhs,bool _bSupressCrossOrNaturalJoin = false,const OTableConnection* _rpFirstAfter = NULL) const;
+
+ // clears the window map and connection vector without destroying it
+ // that means teh data of the windows and connection will be untouched
+ void clearLayoutInformation();
+
+ // set the focus to that tab win which most recently had it (or to the first available one)
+ void GrabTabWinFocus();
+
+ // ReSync ist dazu gedacht, aus dem Dokument alle WinData und ConnData zu holen und entsprechend Wins und Conns anzulegen
+ virtual void ReSync() { }
+ // ClearAll implementiert ein hartes Loeschen, es werden alle Conns und alle Wins aus ihren jeweiligen Listen geloescht
+ // sowie die entsprechenden Datas aus dem Dokument ausgetragen
+ virtual void ClearAll();
+
+ // wird vom AddTabDlg benutzt, um festzustellen, ob noch Tabellen hinzugefuegt werden duerfen
+ virtual BOOL IsAddAllowed();
+ virtual long PreNotify(NotifyEvent& rNEvt);
+
+ // DnD stuff
+ virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
+ virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
+
+ /**
+ can be used in derevied classes to make some special ui handling
+ after d&d
+ */
+ virtual void lookForUiActivities();
+
+ // wird nach Verschieben/Groessenaenderung der TabWins aufgerufen (die Standardimplementation reicht die neuen Daten einfach
+ // an die Daten des Wins weiter)
+ virtual void TabWinMoved(OTableWindow* ptWhich, const Point& ptOldPosition);
+ // die Position ist "virtuell" : der Container hat sozusagen eine virtuelle Flaeche, von der immer nur ein bestimmter Bereich
+ // - der mittels der Scrollbar veraendert werden kann - zu sehen ist. Insbesondere hat ptOldPosition immer positive Koordinaten,
+ // auch wenn er einen Punkt oberhalb des aktuell sichtbaren Bereichs bezeichnet, dessen physische Ordinate eigentlich
+ // negativ ist.
+ virtual void TabWinSized(OTableWindow* ptWhich, const Point& ptOldPosition, const Size& szOldSize);
+
+ void modified();
+
+ /** returns if teh given window is visible.
+ @param _rPoint
+ The Point to check
+ @param _rSize
+ The Size to be check as well
+ @return
+ <TRUE/> if the area is visible otherwise <FALSE/>
+
+ */
+ BOOL isMovementAllowed(const Point& _rPoint,const Size& _rSize);
+
+ Size getRealOutputSize() const { return m_aOutputSize; }
+
+
+
+ virtual void EnsureVisible(const OTableWindow* _pWin);
+ virtual void EnsureVisible(const Point& _rPoint,const Size& _rSize);
+
+ TTableWindowData::value_type createTableWindowData(const ::rtl::OUString& _rComposedName
+ ,const ::rtl::OUString& _sTableName
+ ,const ::rtl::OUString& _rWinName);
+
+ protected:
+ virtual void MouseButtonUp( const MouseEvent& rEvt );
+ virtual void MouseButtonDown( const MouseEvent& rEvt );
+ virtual void Tracking( const TrackingEvent& rTEvt );
+ virtual void Paint( const Rectangle& rRect );
+ virtual void ConnDoubleClicked( OTableConnection* pConnection );
+ virtual void SetDefaultTabWinPosSize( OTableWindow* pTabWin );
+ virtual void DataChanged( const DataChangedEvent& rDCEvt );
+
+ virtual void Resize();
+
+ virtual void dragFinished( );
+ // hier ist die Position (die sich waehrend des Sizings aendern kann) physisch, da waehrend des Sizens nicht gescrollt wird
+ virtual void Command(const CommandEvent& rEvt);
+
+ virtual OTableWindowData* CreateImpl(const ::rtl::OUString& _rComposedName
+ ,const ::rtl::OUString& _sTableName
+ ,const ::rtl::OUString& _rWinName);
+
+ /** factory method to create table windows
+ @param _pData
+ The data corresponding to the window.
+ @return
+ The new TableWindow
+ */
+ virtual OTableWindow* createWindow(const TTableWindowData::value_type& _pData) = 0;
+
+ /** determines whether the classes Init method should accept a query name, or only table names
+ */
+ virtual bool allowQueries() const;
+
+ /** called when init fails at the tablewindowdata because the m_xTable object could not provide columns, but no
+ exception was thrown. Expected to throw.
+ */
+ virtual void onNoColumns_throw();
+
+ virtual bool supressCrossNaturalJoin(const TTableConnectionData::value_type& _pData) const;
+
+ private:
+ void InitColors();
+ BOOL ScrollWhileDragging();
+
+ /** executePopup opens the context menu to delate a connection
+ @param _aPos the position where the popup menu should appear
+ @param _pSelConnection the connection which should be deleted
+ */
+ void executePopup(const Point& _aPos,OTableConnection* _pSelConnection);
+
+ /** invalidateAndModify invalidates this window without children and
+ set the controller modified
+ @param _pAction a possible undo action to add at the controller
+ */
+ void invalidateAndModify(SfxUndoAction *_pAction=NULL);
+
+ private:
+ using Window::Scroll;
+ };
+}
+#endif // DBAUI_JOINTABLEVIEW_HXX