20#include "stencilbardockmanager.h"
21#include "stencilbarbutton.h"
22#include "kivio_stackbar.h"
23#include "kivio_view.h"
26#include <tqvaluelist.h>
27#include <tqapplication.h>
28#include <tqwindowdefs.h>
37StencilBarDockManager::StencilBarDockManager( KivioView* parent,
const char* name )
38: TQWidget(parent,name)
43 m_destinationBar = 0L;
46 m_pBars.setAutoDelete(
true);
48 m_pDoc = m_pView->doc();
49 connect(m_pDoc, TQ_SIGNAL(sig_deleteStencilSet(DragBarButton*, TQWidget*, KivioStackBar*)),
this,
50 TQ_SLOT(slotDeleteStencilSet(DragBarButton*, TQWidget*, KivioStackBar*)));
53 connect(moveManager,TQ_SIGNAL(positionChanged()),TQ_SLOT(slotMoving()));
56StencilBarDockManager::~StencilBarDockManager()
61void StencilBarDockManager::insertStencilSet( TQWidget* w,
const TQString& caption,
62 BarPos pos, TQRect , KivioStackBar* destinationBar )
64 KivioStackBar* bar = 0L;
69 TQt::Dock position = TQt::DockLeft;
71 if ( pos == AutoSelect ) {
77 position = TQt::DockTornOff;
81 TQPtrList<TQDockWindow> dockList = m_pView->mainWindow()->dockWindows(TQt::DockLeft);
83 for(TQDockWindow* dock = dockList.first(); dock; dock = dockList.next()) {
84 if(::tqt_cast<KivioStackBar*>(dock) && (
static_cast<KivioStackBar*
>(dock)->view() == m_pView)) {
85 bar =
static_cast<KivioStackBar*
>(dock);
90 position = TQt::DockLeft;
95 TQPtrList<TQDockWindow> dockList = m_pView->mainWindow()->dockWindows(TQt::DockTop);
97 for(TQDockWindow* dock = dockList.first(); dock; dock = dockList.next()) {
98 if(::tqt_cast<KivioStackBar*>(dock) && (
static_cast<KivioStackBar*
>(dock)->view() == m_pView)) {
99 bar =
static_cast<KivioStackBar*
>(dock);
104 position = TQt::DockTop;
109 TQPtrList<TQDockWindow> dockList = m_pView->mainWindow()->dockWindows(TQt::DockRight);
111 for(TQDockWindow* dock = dockList.first(); dock; dock = dockList.next()) {
112 if(::tqt_cast<KivioStackBar*>(dock) && (
static_cast<KivioStackBar*
>(dock)->view() == m_pView)) {
113 bar =
static_cast<KivioStackBar*
>(dock);
118 position = TQt::DockRight;
123 TQPtrList<TQDockWindow> dockList = m_pView->mainWindow()->dockWindows(TQt::DockBottom);
125 for(TQDockWindow* dock = dockList.first(); dock; dock = dockList.next()) {
126 if(::tqt_cast<KivioStackBar*>(dock) && (
static_cast<KivioStackBar*
>(dock)->view() == m_pView)) {
127 bar =
static_cast<KivioStackBar*
>(dock);
132 position = TQt::DockBottom;
136 position = TQt::DockTornOff;
143 bar =
new KivioStackBar(m_pView, m_pView->mainWindow());
144 m_pView->mainWindow()->moveDockWindow(bar, position);
146 connect(bar,TQ_SIGNAL(beginDragPage(DragBarButton*)),TQ_SLOT(slotBeginDragPage(DragBarButton*)));
147 connect(bar,TQ_SIGNAL(finishDragPage(DragBarButton*)),TQ_SLOT(slotFinishDragPage(DragBarButton*)));
148 connect(bar,TQ_SIGNAL(deleteButton(DragBarButton*,TQWidget*,KivioStackBar*)),
149 m_pDoc, TQ_SLOT(slotDeleteStencilSet(DragBarButton*,TQWidget*,KivioStackBar*)));
153 bar->insertPage(w,caption);
158void StencilBarDockManager::slotBeginDragPage( DragBarButton* w )
160 m_destinationBar = 0L;
162 dragWidget = ((KivioStackBar*)sender())->findPage(dragButton);
163 dragButton->setUpdatesEnabled(
false);
164 dragWidget->setUpdatesEnabled(
false);
166 moveManager->doMove(dragButton);
169void StencilBarDockManager::slotFinishDragPage( DragBarButton* )
172 dragButton->setUpdatesEnabled(
true);
173 dragButton->update();
175 dragWidget->setUpdatesEnabled(
true);
176 dragWidget->update();
178 TQString caption(dragButton->text());
179 KivioStackBar* bar = (KivioStackBar*)sender();
180 bar->removePage(dragWidget);
182 insertStencilSet(dragWidget,caption,dragPos,moveManager->geometry(),m_destinationBar);
185 if (!bar->visiblePage()) {
186 int k = m_pBars.findRef(bar);
190 m_pBars.insert(k,0L);
196 m_destinationBar = 0L;
200void StencilBarDockManager::slotMoving()
202 m_destinationBar = 0L;
203 TQPoint p = TQCursor::pos();
207 for ( KivioStackBar* bar = m_pBars.first(); bar; bar = m_pBars.next() ) {
208 if ( bar->geometry().contains(p) ) {
209 if(bar->place() == TQDockWindow::OutsideDock) {
210 dragPos = OnTopLevelBar;
211 globalPos = bar->geometry().topLeft();
213 dragPos = AutoSelect;
214 globalPos = bar->mapToGlobal(bar->geometry().topLeft());
217 m_destinationBar = bar;
218 moveManager->movePause(
true,
false);
219 moveManager->setGeometry(globalPos.x(),
222 moveManager->getWidget()->sizeHint().height());
228 TQRect mr(m_pView->mapToGlobal(TQPoint(0,0)),m_pView->size());
230 if ( mr.contains(p) ) {
232 r.setWidth(r.width()/4);
233 if ( r.contains(p) && !m_pBars.at(Left) ) {
234 moveManager->movePause();
235 moveManager->setGeometry(r);
240 r.moveBy(r.width()*3,0);
242 if ( r.contains(p) && !m_pBars.at(Right) ) {
243 moveManager->movePause();
244 moveManager->setGeometry(r);
251 t.setHeight(t.height()/4);
252 if ( t.contains(p) && !m_pBars.at(Top) ) {
253 moveManager->movePause();
254 moveManager->setGeometry(t);
259 t.moveBy(0,t.height()*3);
261 if ( t.contains(p) && !m_pBars.at(Bottom) ) {
262 moveManager->movePause();
263 moveManager->setGeometry(t);
270 moveManager->resize(dragWidget->size());
271 moveManager->movePause(
false,
false);
275void StencilBarDockManager::slotDeleteStencilSet( DragBarButton* pBtn, TQWidget *, KivioStackBar *pBar )
277 pBar->deletePageAndButton(pBtn);
280 if (!pBar->visiblePage()) {
281 int k = m_pBars.findRef(pBar);
293void StencilBarDockManager::setAllStackBarsShown(
bool shown)
295 for(KivioStackBar* bar = m_pBars.first(); bar; bar = m_pBars.next()) {
308KoToolDockMoveManager::KoToolDockMoveManager()
311#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
318#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
320 root = tqt_xrootwin();
324 gv.foreground = WhitePixel(tqt_xdisplay(), scr)^BlackPixel(tqt_xdisplay(), scr);
325 gv.subwindow_mode = IncludeInferiors;
326 long mask = GCForeground | GCFunction | GCLineWidth | GCSubwindowMode;
327 rootgc = XCreateGC(tqt_xdisplay(), tqt_xrootwin(), mask, &gv);
330 timer =
new TQTimer(
this);
333KoToolDockMoveManager::~KoToolDockMoveManager()
339void KoToolDockMoveManager::doMove( TQWidget* _w )
359 TQApplication::setOverrideCursor(TQCursor(sizeAllCursor));
361 movePause(
false,
false);
363 drawRectangle(xp, yp, w, h);
366 connect(timer,TQ_SIGNAL(timeout()),TQ_SLOT(doMoveInternal()));
370void KoToolDockMoveManager::doMoveInternal()
376 rx = TQCursor::pos().x();
379 ry = TQCursor::pos().y();
384 emit positionChanged();
386 if (check(xp, yp, w, h)) {
387 paintProcess(
false,xp, yp, w, h);
389#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
390 XFlush(tqt_xdisplay());
391 XSync(tqt_xdisplay(),
false);
396void KoToolDockMoveManager::stop()
402 TQApplication::restoreOverrideCursor();
405#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
406 XFlush(tqt_xdisplay());
412void KoToolDockMoveManager::setGeometry(
const TQRect& r )
414 setGeometry(r.x(),r.y(),r.width(),r.height());
417void KoToolDockMoveManager::setGeometry(
int _x,
int _y,
int _w,
int _h)
424 check(_x, _y, _w, _h,
true);
425 paintProcess(
false,_x, _y, _w, _h);
427#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
428 XFlush(tqt_xdisplay());
429 XSync(tqt_xdisplay(),
false);
433void KoToolDockMoveManager::drawRectangle(
int _x,
int _y,
int _w,
int _h)
443#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
444 XDrawRectangle(tqt_xdisplay(), root, rootgc, _x, _y, _w, _h);
449void KoToolDockMoveManager::paintProcess(
bool onlyDelete,
int _x,
int _y,
int _w,
int _h )
451 if (noLast && onlyDelete)
454 if ( ox == _x && oy == _y && ow ==_w && oh == _h )
457#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
458 XDrawRectangle(tqt_xdisplay(), root, rootgc, ox, oy, ow, oh);
462 drawRectangle(_x,_y,_w,_h);
465void KoToolDockMoveManager::movePause(
bool horizontal,
bool vertical )
467 pauseMoveX = horizontal;
468 pauseMoveY = vertical;
471void KoToolDockMoveManager::moveContinue()
477void KoToolDockMoveManager::doXResize( TQWidget* w,
bool mirror )
491void KoToolDockMoveManager::doYResize( TQWidget* w,
bool mirror )
505void KoToolDockMoveManager::doXYResize( TQWidget* w,
bool _mirrorX,
bool _mirrorY )
519void KoToolDockMoveManager::doResizeInternal()
522 rx = TQCursor::pos().x();
525 ry = TQCursor::pos().y();
538 h = rr.height() - dy;
541 h = rr.height() + dy;
546 if (check(xp, yp, w, h)) {
547 paintProcess(
false,xp, yp, w, h);
549#if defined TQ_WS_X11 && !defined K_WS_TQTONLY
550 XFlush(tqt_xdisplay());
551 XSync(tqt_xdisplay(),
false);
556void KoToolDockMoveManager::setWidget( TQWidget* _w )
559 minSize = widget->minimumSize();
560 maxSize = widget->maximumSize();
562 rr = TQRect(widget->mapToGlobal(TQPoint(0,0)),widget->size());
570 rx = TQCursor::pos().x();
571 ry = TQCursor::pos().y();
574void KoToolDockMoveManager::doResize( TQWidget* _w )
581 TQPoint curPos = TQCursor::pos();
588 drawRectangle(xp, yp, w, h);
591 connect(timer,TQ_SIGNAL(timeout()),TQ_SLOT(doResizeInternal()));
595bool KoToolDockMoveManager::check(
int& x,
int& y,
int& w,
int& h,
bool change)
598 int w1 = TQMIN(TQMAX(minSize.width(), w), maxSize.width());
599 int h1 = TQMIN(TQMAX(minSize.height(), h), maxSize.height());
601 bool f1 = (w1-w)+(h1-h) == 0;
618 emit fixPosition(x0,y0,w0,h0);
620 emit fixSize(x0,y0,w0,h0);
622 bool f2 = (x0==x)&&(y0==y)&&(w0==w)&&(h0==h);
634TQRect KoToolDockMoveManager::geometry()
640 check(x0,y0,w0,h0,
true);
642 return TQRect(x0,y0,w0,h0);
645#include "stencilbardockmanager.moc"