[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Re: KDockWidget'S
From: Andreas Zehender <zehender () kde ! org>
Date: 2002-09-10 16:58:45
[Download RAW message or body]
Hi!
On Monday 09 September 2002 12:40, Daniel Molkentin wrote:
> It's quite ok for now. What I would like to have is that reparent gets the
> WStyle_NoBorder hint. While that should be pretty trivial, how complicated
> is it to add further buttons to the self-drawn handle in KDockWidget?
The attached patch adds an undock button to the header and adjusts the size of
the dock back button.
It adds a new slot and defines a KDockWidgetHeaderPrivate class with one
member (was only declared forward), what should be binary compatible.
What can be a problem is that the destructor of KDockWidgetHeader is not
inline any more (it has to delete the d member). Is this binary compatible?
If yes, will it be called from already linked programs? This patch would
introduce a memory leak otherwise.
Andreas
--
--------------------------------------------------
Andreas Zehender, Dipl. Ing. (BA)
Student, 10th semester computer science
http://www.azweb.de
az@azweb.de | zehender@kde.org
--------------------------------------------------
["dockwidget.patch" (text/x-diff)]
? dockwidget.patch
Index: kdockwidget.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kdockwidget.cpp,v
retrieving revision 1.109
diff -u -r1.109 kdockwidget.cpp
--- kdockwidget.cpp 2002/08/29 14:58:57 1.109
+++ kdockwidget.cpp 2002/09/10 16:40:28
@@ -51,14 +51,25 @@
#define DOCK_CONFIG_VERSION "0.0.5"
static const char* const dockback_xpm[]={
+"6 6 2 1",
+"# c black",
+". c None",
+"......",
+".#....",
+"..#..#",
+"...#.#",
+"....##",
+"..####"};
+
+static const char* const todesktop_xpm[]={
"5 5 2 1",
"# c black",
". c None",
-"#....",
-".#...",
-"..#.#",
-"...##",
-"..###"};
+"####.",
+"##...",
+"#.#..",
+"#..#.",
+"....#"};
static const char* const not_close_xpm[]={
"5 5 2 1",
@@ -196,6 +207,8 @@
KDockWidgetHeader::KDockWidgetHeader( KDockWidget* parent, const char* name )
:KDockWidgetAbstractHeader( parent, name )
{
+ d = new KDockWidgetHeaderPrivate( );
+
layout = new QHBoxLayout( this );
layout->setResizeMode( QLayout::Minimum );
@@ -219,16 +232,27 @@
connect( dockbackButton, SIGNAL(clicked()), parent, SIGNAL(headerDockbackButtonClicked()));
connect( dockbackButton, SIGNAL(clicked()), parent, SLOT(dockBack()));
+ d->toDesktopButton = new KDockButton_Private( this, "ToDesktopButton" );
+ d->toDesktopButton->setPixmap( const_cast< const char** >(todesktop_xpm));
+ d->toDesktopButton->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height());
+ connect( d->toDesktopButton, SIGNAL(clicked()), parent, SLOT(toDesktop()));
+
stayButton->hide();
layout->addWidget( drag );
layout->addWidget( dockbackButton );
+ layout->addWidget( d->toDesktopButton );
layout->addWidget( stayButton );
layout->addWidget( closeButton );
layout->activate();
drag->setFixedHeight( layout->minimumSize().height() );
}
+KDockWidgetHeader::~KDockWidgetHeader( )
+{
+ delete d;
+}
+
void KDockWidgetHeader::setTopLevel( bool isTopLevel )
{
if ( isTopLevel ){
@@ -241,11 +265,13 @@
}
stayButton->hide();
closeButton->hide();
+ d->toDesktopButton->hide();
drag->setEnabled( true );
} else {
dockbackButton->hide();
stayButton->hide();
closeButton->show();
+ d->toDesktopButton->show();
}
layout->activate();
updateGeometry();
@@ -264,6 +290,7 @@
layout->addWidget( drag );
layout->addWidget( dockbackButton );
+ layout->addWidget( d->toDesktopButton );
layout->addWidget( stayButton );
layout->addWidget( closeButton );
layout->activate();
@@ -873,8 +900,16 @@
if (parent()->inherits("KDockSplitter"))
static_cast<KDockSplitter*>(parent()->qt_cast("KDockSplitter"))->restoreFromForcedFixedSize(this);
}
-
+void KDockWidget::toDesktop()
+{
+ QPoint p = mapToGlobal( QPoint( -30, -30 ) );
+ if( p.x( ) < 0 )
+ p.setX( 0 );
+ if( p.y( ) < 0 )
+ p.setY( 0 );
+ manualDock( 0, DockDesktop, 50, p );
+}
void KDockWidget::undock()
{
Index: kdockwidget.h
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kdockwidget.h,v
retrieving revision 1.67
diff -u -r1.67 kdockwidget.h
--- kdockwidget.h 2002/07/04 21:03:17 1.67
+++ kdockwidget.h 2002/09/10 16:40:28
@@ -247,7 +247,7 @@
/**
* Destructs this.
*/
- virtual ~KDockWidgetHeader(){};
+ virtual ~KDockWidgetHeader();
/**
* Hides the close button and stay button when switching to toplevel or vice versa shows them.
@@ -651,6 +651,11 @@
* another dockwidget by mouse (docking).
*/
void undock();
+
+ /**
+ * Docks the widget to the desktop (as a toplevel widget)
+ */
+ void toDesktop( );
protected:
Index: kdockwidget_private.h
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kdockwidget_private.h,v
retrieving revision 1.22
diff -u -r1.22 kdockwidget_private.h
--- kdockwidget_private.h 2002/07/04 21:03:17 1.22
+++ kdockwidget_private.h 2002/09/10 16:40:28
@@ -154,4 +154,11 @@
QGuardedPtr<QWidget> container;
};
+class KDockWidgetHeader::KDockWidgetHeaderPrivate
+{
+public:
+ KDockWidgetHeaderPrivate( ) { toDesktopButton = 0; }
+ KDockButton_Private* toDesktopButton;
+};
+
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic