summaryrefslogtreecommitdiffstats
path: root/kwin/kcmkwin/kwindecoration/buttons.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kwin/kcmkwin/kwindecoration/buttons.cpp')
-rw-r--r--kwin/kcmkwin/kwindecoration/buttons.cpp883
1 files changed, 0 insertions, 883 deletions
diff --git a/kwin/kcmkwin/kwindecoration/buttons.cpp b/kwin/kcmkwin/kwindecoration/buttons.cpp
deleted file mode 100644
index 2c450aed1..000000000
--- a/kwin/kcmkwin/kwindecoration/buttons.cpp
+++ /dev/null
@@ -1,883 +0,0 @@
-/*
- This is the new twindecoration kcontrol module
-
- Copyright (c) 2004, Sandro Giessl <sandro@giessl.com>
- Copyright (c) 2001
- Karol Szwed <gallium@kde.org>
- http://gallium.n3.net/
-
- Supports new twin configuration plugins, and titlebar button position
- modification via dnd interface.
-
- Based on original "twintheme" (Window Borders)
- Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-*/
-
-#include <tqheader.h>
-#include <tqpainter.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqstyle.h>
-
-#include <kdebug.h>
-
-#include <kdialog.h>
-#include <klocale.h>
-#include <kglobalsettings.h>
-
-#include <kdecorationfactory.h>
-
-#include "buttons.h"
-#include "pixmaps.h"
-
-
-#define BUTTONDRAGMIMETYPE "application/x-kde_twindecoration_buttons"
-ButtonDrag::ButtonDrag( Button btn, TQWidget* parent, const char* name)
- : TQStoredDrag( BUTTONDRAGMIMETYPE, parent, name)
-{
- TQByteArray data;
- TQDataStream stream(data, IO_WriteOnly);
- stream << btn.name;
- stream << btn.icon;
- stream << btn.type.tqunicode();
- stream << (int) btn.duplicate;
- stream << (int) btn.supported;
- setEncodedData( data );
-}
-
-
-bool ButtonDrag::canDecode( TQDropEvent* e )
-{
- return e->provides( BUTTONDRAGMIMETYPE );
-}
-
-bool ButtonDrag::decode( TQDropEvent* e, Button& btn )
-{
- TQByteArray data = e->data( BUTTONDRAGMIMETYPE );
- if ( data.size() )
- {
- e->accept();
- TQDataStream stream(data, IO_ReadOnly);
- stream >> btn.name;
- stream >> btn.icon;
- ushort type;
- stream >> type;
- btn.type = TQChar(type);
- int duplicate;
- stream >> duplicate;
- btn.duplicate = duplicate;
- int supported;
- stream >> supported;
- btn.supported = supported;
- return TRUE;
- }
- return FALSE;
-}
-
-
-Button::Button()
-{
-}
-
-Button::Button(const TQString& n, const TQBitmap& i, TQChar t, bool d, bool s)
- : name(n),
- icon(i),
- type(t),
- duplicate(d),
- supported(s)
-{
-}
-
-Button::~Button()
-{
-}
-
-// helper function to deal with the Button's bitmaps more easily...
-TQPixmap bitmapPixmap(const TQBitmap& bm, const TQColor& color)
-{
- TQPixmap pm(bm.size() );
- pm.setMask(bm);
- TQPainter p(&pm);
- p.setPen(color);
- p.drawPixmap(0,0,bm);
- p.end();
- return pm;
-}
-
-
-ButtonSource::ButtonSource(TQWidget *parent, const char* name)
- : KListView(parent, name)
-{
- tqsetSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Expanding);
-
- setResizeMode(TQListView::AllColumns);
- setDragEnabled(true);
- setAcceptDrops(true);
- setDropVisualizer(false);
- setSorting(-1);
- header()->setClickEnabled(false);
- header()->hide();
-
- addColumn(i18n("Buttons") );
-}
-
-ButtonSource::~ButtonSource()
-{
-}
-
-TQSize ButtonSource::tqsizeHint() const
-{
- // make the tqsizeHint height a bit smaller than the one of TQListView...
-
- if ( cachedSizeHint().isValid() )
- return cachedSizeHint();
-
- constPolish();
-
- TQSize s( header()->tqsizeHint() );
-
- if ( verticalScrollBar()->isVisible() )
- s.setWidth( s.width() + tqstyle().tqpixelMetric(TQStyle::PM_ScrollBarExtent) );
- s += TQSize(frameWidth()*2,frameWidth()*2);
-
- // size hint: 4 lines of text...
- s.setHeight( s.height() + fontMetrics().lineSpacing()*3 );
-
- setCachedSizeHint( s );
-
- return s;
-}
-
-void ButtonSource::hideAllButtons()
-{
- TQListViewItemIterator it(this);
- while (it.current() ) {
- it.current()->tqsetVisible(false);
- ++it;
- }
-}
-
-void ButtonSource::showAllButtons()
-{
- TQListViewItemIterator it(this);
- while (it.current() ) {
- it.current()->tqsetVisible(true);
- ++it;
- }
-}
-
-void ButtonSource::showButton( TQChar btn )
-{
- TQListViewItemIterator it(this);
- while (it.current() ) {
- ButtonSourceItem *item = dynamic_cast<ButtonSourceItem*>(it.current() );
- if (item && item->button().type == btn) {
- it.current()->tqsetVisible(true);
- return;
- }
- ++it;
- }
-}
-
-void ButtonSource::hideButton( TQChar btn )
-{
- TQListViewItemIterator it(this);
- while (it.current() ) {
- ButtonSourceItem *item = dynamic_cast<ButtonSourceItem*>(it.current() );
- if (item && item->button().type == btn && !item->button().duplicate) {
- it.current()->tqsetVisible(false);
- return;
- }
- ++it;
- }
-}
-
-bool ButtonSource::acceptDrag(TQDropEvent* e) const
-{
- return acceptDrops() && ButtonDrag::canDecode(e);
-}
-
-TQDragObject *ButtonSource::dragObject()
-{
- ButtonSourceItem *i = dynamic_cast<ButtonSourceItem*>(selectedItem() );
-
- if (i) {
- ButtonDrag *bd = new ButtonDrag(i->button(), viewport(), "button_drag");
- bd->setPixmap(bitmapPixmap(i->button().icon, tqcolorGroup().foreground() ));
- return bd;
- }
-
- return 0;
-}
-
-ButtonDropSiteItem::ButtonDropSiteItem(const Button& btn)
- : m_button(btn)
-{
-}
-
-ButtonDropSiteItem::~ButtonDropSiteItem()
-{
-}
-
-Button ButtonDropSiteItem::button()
-{
- return m_button;
-}
-
-int ButtonDropSiteItem::width()
-{
-// return m_button.icon.width();
- return 20;
-}
-
-int ButtonDropSiteItem::height()
-{
-// return m_button.icon.height();
- return 20;
-}
-
-void ButtonDropSiteItem::draw(TQPainter *p, const TQColorGroup& cg, TQRect r)
-{
-// p->fillRect(r, cg.base() );
- if (m_button.supported)
- p->setPen(cg.foreground() );
- else
- p->setPen(cg.mid() );
- TQBitmap &i = m_button.icon;
- p->drawPixmap(r.left()+(r.width()-i.width())/2, r.top()+(r.height()-i.height())/2, i);
-}
-
-
-ButtonDropSite::ButtonDropSite( TQWidget* parent, const char* name )
- : TQFrame( parent, name ),
- m_selected(0)
-{
- setAcceptDrops( TRUE );
- setFrameShape( WinPanel );
- setFrameShadow( Raised );
- setMinimumHeight( 26 );
- setMaximumHeight( 26 );
- setMinimumWidth( 250 ); // Ensure buttons will fit
-}
-
-ButtonDropSite::~ButtonDropSite()
-{
- clearLeft();
- clearRight();
-}
-
-void ButtonDropSite::clearLeft()
-{
- while (!buttonsLeft.isEmpty() ) {
- ButtonDropSiteItem *item = buttonsLeft.first();
- if (removeButton(item) ) {
- emit buttonRemoved(item->button().type);
- delete item;
- }
- }
-}
-
-void ButtonDropSite::clearRight()
-{
- while (!buttonsRight.isEmpty() ) {
- ButtonDropSiteItem *item = buttonsRight.first();
- if (removeButton(item) ) {
- emit buttonRemoved(item->button().type);
- delete item;
- }
- }
-}
-
-void ButtonDropSite::dragMoveEvent( TQDragMoveEvent* e )
-{
- TQPoint p = e->pos();
- if (leftDropArea().contains(p) || rightDropArea().contains(p) || buttonAt(p) ) {
- e->accept();
-
- // 2 pixel wide drop visualizer...
- TQRect r = contentsRect();
- int x = -1;
- if (leftDropArea().contains(p) ) {
- x = leftDropArea().left();
- } else if (rightDropArea().contains(p) ) {
- x = rightDropArea().right()+1;
- } else {
- ButtonDropSiteItem *item = buttonAt(p);
- if (item) {
- if (p.x() < item->rect.left()+item->rect.width()/2 ) {
- x = item->rect.left();
- } else {
- x = item->rect.right()+1;
- }
- }
- }
- if (x != -1) {
- TQRect tmpRect(x, r.y(), 2, r.height() );
- if (tmpRect != m_oldDropVisualizer) {
- cleanDropVisualizer();
- m_oldDropVisualizer = tmpRect;
- update(tmpRect);
- }
- }
-
- } else {
- e->ignore();
-
- cleanDropVisualizer();
- }
-}
-
-void ButtonDropSite::cleanDropVisualizer()
-{
- if (m_oldDropVisualizer.isValid())
- {
- TQRect rect = m_oldDropVisualizer;
- m_oldDropVisualizer = TQRect(); // rect is invalid
- update(rect);
- }
-}
-
-void ButtonDropSite::dragEnterEvent( TQDragEnterEvent* e )
-{
- if ( ButtonDrag::canDecode( e ) )
- e->accept();
-}
-
-void ButtonDropSite::dragLeaveEvent( TQDragLeaveEvent* /* e */ )
-{
- cleanDropVisualizer();
-}
-
-void ButtonDropSite::dropEvent( TQDropEvent* e )
-{
- cleanDropVisualizer();
-
- TQPoint p = e->pos();
-
- // collect information where to insert the dropped button
- ButtonList *buttonList = 0;
- ButtonList::iterator buttonPosition;
-
- if (leftDropArea().contains(p) ) {
- buttonList = &buttonsLeft;
- buttonPosition = buttonsLeft.end();
- } else if (rightDropArea().contains(p) ) {
- buttonList = &buttonsRight;
- buttonPosition = buttonsRight.begin();
- } else {
- ButtonDropSiteItem *aboveItem = buttonAt(p);
- if (!aboveItem)
- return; // invalid drop. hasn't occured _over_ a button (or left/right dropArea), return...
-
- ButtonList::iterator it;
- if (!getItemIterator(aboveItem, buttonList, it) ) {
- // didn't find the aboveItem. unlikely to happen since buttonAt() already seems to have found
- // something valid. anyway...
- return;
- }
-
- // got the list and the aboveItem position. now determine if the item should be inserted
- // before aboveItem or after aboveItem.
- TQRect aboveItemRect = aboveItem->rect;
- if (!aboveItemRect.isValid() )
- return;
-
- if (p.x() < aboveItemRect.left()+aboveItemRect.width()/2 ) {
- // insert before the item
- buttonPosition = it;
- } else {
- if (it != buttonList->end() )
- buttonPosition = ++it;
- else
- buttonPosition = it; // already at the end(), can't increment the iterator!
- }
- }
-
- // know where to insert the button. now see if we can use an existing item (drag within the widget = move)
- // orneed to create a new one
- ButtonDropSiteItem *buttonItem = 0;
- if (e->source() == this && m_selected) {
- ButtonList *oldList = 0;
- ButtonList::iterator oldPos;
- if (getItemIterator(m_selected, oldList, oldPos) ) {
- if (oldPos == buttonPosition)
- return; // button didn't change its position during the drag...
-
- oldList->remove(oldPos);
- buttonItem = m_selected;
- } else {
- return; // m_selected not found, return...
- }
- } else {
- // create new button from the drop object...
- Button btn;
- if (ButtonDrag::decode(e, btn) ) {
- buttonItem = new ButtonDropSiteItem(btn);
- } else {
- return; // something has gone wrong while we were trying to decode the drop event
- }
- }
-
- // now the item can actually be inserted into the list! :)
- (*buttonList).insert(buttonPosition, buttonItem);
- emit buttonAdded(buttonItem->button().type);
- emit changed();
- recalcItemGeometry();
- update();
-}
-
-bool ButtonDropSite::getItemIterator(ButtonDropSiteItem *item, ButtonList* &list, ButtonList::iterator &iterator)
-{
- if (!item)
- return false;
-
- ButtonList::iterator it = buttonsLeft.find(item); // try the left list first...
- if (it == buttonsLeft.end() ) {
- it = buttonsRight.find(item); // try the right list...
- if (it == buttonsRight.end() ) {
- return false; // item hasn't been found in one of the list, return...
- } else {
- list = &buttonsRight;
- iterator = it;
- }
- } else {
- list = &buttonsLeft;
- iterator = it;
- }
-
- return true;
-}
-
-TQRect ButtonDropSite::leftDropArea()
-{
- // return a 10 pixel drop area...
- TQRect r = contentsRect();
-
- int leftButtonsWidth = calcButtonListWidth(buttonsLeft);
- return TQRect(r.left()+leftButtonsWidth, r.top(), 10, r.height() );
-}
-
-TQRect ButtonDropSite::rightDropArea()
-{
- // return a 10 pixel drop area...
- TQRect r = contentsRect();
-
- int rightButtonsWidth = calcButtonListWidth(buttonsRight);
- return TQRect(r.right()-rightButtonsWidth-10, r.top(), 10, r.height() );
-}
-
-void ButtonDropSite::mousePressEvent( TQMouseEvent* e )
-{
- // TODO: only start the real drag after some drag distance
- m_selected = buttonAt(e->pos() );
- if (m_selected) {
- ButtonDrag *bd = new ButtonDrag(m_selected->button(), this);
- bd->setPixmap(bitmapPixmap(m_selected->button().icon, tqcolorGroup().foreground() ) );
- bd->dragMove();
- }
-}
-
-void ButtonDropSite::resizeEvent(TQResizeEvent*)
-{
- recalcItemGeometry();
-}
-
-void ButtonDropSite::recalcItemGeometry()
-{
- TQRect r = contentsRect();
-
- // update the geometry of the items in the left button list
- int offset = r.left();
- for (ButtonList::const_iterator it = buttonsLeft.begin(); it != buttonsLeft.end(); ++it) {
- int w = (*it)->width();
- (*it)->rect = TQRect(offset, r.top(), w, (*it)->height() );
- offset += w;
- }
-
- // the right button list...
- offset = r.right() - calcButtonListWidth(buttonsRight);
- for (ButtonList::const_iterator it = buttonsRight.begin(); it != buttonsRight.end(); ++it) {
- int w = (*it)->width();
- (*it)->rect = TQRect(offset, r.top(), w, (*it)->height() );
- offset += w;
- }
-}
-
-ButtonDropSiteItem *ButtonDropSite::buttonAt(TQPoint p) {
- // try to find the item in the left button list
- for (ButtonList::const_iterator it = buttonsLeft.begin(); it != buttonsLeft.end(); ++it) {
- if ( (*it)->rect.contains(p) ) {
- return *it;
- }
- }
-
- // try to find the item in the right button list
- for (ButtonList::const_iterator it = buttonsRight.begin(); it != buttonsRight.end(); ++it) {
- if ( (*it)->rect.contains(p) ) {
- return *it;
- }
- }
-
- return 0;
-}
-
-bool ButtonDropSite::removeButton(ButtonDropSiteItem *item) {
- if (!item)
- return false;
-
- // try to remove the item from the left button list
- if (buttonsLeft.remove(item) >= 1) {
- return true;
- }
-
- // try to remove the item from the right button list
- if (buttonsRight.remove(item) >= 1) {
- return true;
- }
-
- return false;
-}
-
-int ButtonDropSite::calcButtonListWidth(const ButtonList& btns)
-{
- int w = 0;
- for (ButtonList::const_iterator it = btns.begin(); it != btns.end(); ++it) {
- w += (*it)->width();
- }
-
- return w;
-}
-
-bool ButtonDropSite::removeSelectedButton()
-{
- bool succ = removeButton(m_selected);
- if (succ) {
- emit buttonRemoved(m_selected->button().type);
- emit changed();
- delete m_selected;
- m_selected = 0;
- recalcItemGeometry();
- update(); // tqrepaint...
- }
-
- return succ;
-}
-
-void ButtonDropSite::drawButtonList(TQPainter *p, const ButtonList& btns, int offset)
-{
- for (ButtonList::const_iterator it = btns.begin(); it != btns.end(); ++it) {
- TQRect tqitemRect = (*it)->rect;
- if (tqitemRect.isValid() ) {
- (*it)->draw(p, tqcolorGroup(), tqitemRect);
- }
- offset += (*it)->width();
- }
-}
-
-void ButtonDropSite::drawContents( TQPainter* p )
-{
- int leftoffset = calcButtonListWidth( buttonsLeft );
- int rightoffset = calcButtonListWidth( buttonsRight );
- int offset = 3;
-
- TQRect r = contentsRect();
-
- // Shrink by 1
- r.moveBy(1 + leftoffset, 1);
- r.setWidth( r.width() - 2 - leftoffset - rightoffset );
- r.setHeight( r.height() - 2 );
-
- drawButtonList( p, buttonsLeft, offset );
-
- TQColor c1( 0x0A, 0x5F, 0x89 ); // KDE 2 titlebar default colour
- p->fillRect( r, c1 );
- p->setPen( Qt::white );
- p->setFont( TQFont( KGlobalSettings::generalFont().family(), 12, TQFont::Bold) );
- p->drawText( r, AlignLeft | AlignVCenter, i18n("KDE") );
-
- offset = geometry().width() - 3 - rightoffset;
- drawButtonList( p, buttonsRight, offset );
-
- if (m_oldDropVisualizer.isValid() )
- {
- p->fillRect(m_oldDropVisualizer, Dense4Pattern);
- }
-}
-
-ButtonSourceItem::ButtonSourceItem(TQListView * parent, const Button& btn)
- : TQListViewItem(parent),
- m_button(btn),
- m_dirty(true)
-{
- setButton(btn);
-}
-
-ButtonSourceItem::~ButtonSourceItem()
-{
-}
-
-void ButtonSourceItem::paintCell(TQPainter *p, const TQColorGroup &cg, int column, int width, int align)
-{
- // we need the color group cg, so to the work here, not in setButton...
- if (m_dirty) {
- if (m_button.supported) {
- setPixmap(0, bitmapPixmap(m_button.icon, cg.foreground() ) );
- } else {
- setPixmap(0, bitmapPixmap(m_button.icon, cg.mid() ) );
- }
- m_dirty = false;
- }
-
- if (m_button.supported) {
- TQListViewItem::paintCell(p,cg,column,width,align);
- } else {
- // grey out unsupported buttons
- TQColorGroup cg2 = cg;
- cg2.setColor(TQColorGroup::Text, cg.mid() );
- TQListViewItem::paintCell(p,cg2,column,width,align);
- }
-}
-
-void ButtonSourceItem::setButton(const Button& btn)
-{
- m_button = btn;
- m_dirty = true; // update the pixmap when in paintCell()...
- if (btn.supported) {
- setText(0, btn.name);
- } else {
- setText(0, i18n("%1 (unavailable)").arg(btn.name) );
- }
-}
-
-Button ButtonSourceItem::button() const
-{
- return m_button;
-}
-
-
-ButtonPositionWidget::ButtonPositionWidget(TQWidget *parent, const char* name)
- : TQWidget(parent,name),
- m_factory(0)
-{
- TQVBoxLayout *layout = new TQVBoxLayout(this, 0, KDialog::spacingHint() );
- tqsetSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Maximum);
-
- TQLabel* label = new TQLabel( this );
- m_dropSite = new ButtonDropSite( this );
- label->tqsetAlignment( int( TQLabel::WordBreak ) );
- label->setText( i18n( "To add or remove titlebar buttons, simply <i>drag</i> items "
- "between the available item list and the titlebar preview. Similarly, "
- "drag items within the titlebar preview to re-position them.") );
- m_buttonSource = new ButtonSource(this, "button_source");
-
- layout->addWidget(label);
- layout->addWidget(m_dropSite);
- layout->addWidget(m_buttonSource);
-
- connect( m_dropSite, TQT_SIGNAL(buttonAdded(TQChar)), m_buttonSource, TQT_SLOT(hideButton(TQChar)) );
- connect( m_dropSite, TQT_SIGNAL(buttonRemoved(TQChar)), m_buttonSource, TQT_SLOT(showButton(TQChar)) );
- connect( m_buttonSource, TQT_SIGNAL(dropped(TQDropEvent*, TQListViewItem*)), m_dropSite, TQT_SLOT(removeSelectedButton()) );
-
- connect( m_dropSite, TQT_SIGNAL(changed()), TQT_SIGNAL(changed()) );
-
- // insert all possible buttons into the source (backwards to keep the preferred order...)
- bool dummy;
- new ButtonSourceItem(m_buttonSource, getButton('R', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('L', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('B', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('F', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('X', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('A', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('I', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('H', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('S', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('M', dummy) );
- new ButtonSourceItem(m_buttonSource, getButton('_', dummy) );
-}
-
-ButtonPositionWidget::~ButtonPositionWidget()
-{
-}
-
-void ButtonPositionWidget::setDecorationFactory(KDecorationFactory *factory)
-{
- if (!factory)
- return;
-
- m_factory = factory;
-
- // get the list of supported buttons
- if (m_factory->supports(KDecorationDefines::AbilityAnnounceButtons) ) {
- TQString supportedButtons;
-
- if (m_factory->supports(KDecorationDefines::AbilityButtonMenu) )
- supportedButtons.append('M');
- if (m_factory->supports(KDecorationDefines::AbilityButtonOnAllDesktops) )
- supportedButtons.append('S');
- if (m_factory->supports(KDecorationDefines::AbilityButtonSpacer) )
- supportedButtons.append('_');
- if (m_factory->supports(KDecorationDefines::AbilityButtonHelp) )
- supportedButtons.append('H');
- if (m_factory->supports(KDecorationDefines::AbilityButtonMinimize) )
- supportedButtons.append('I');
- if (m_factory->supports(KDecorationDefines::AbilityButtonMaximize) )
- supportedButtons.append('A');
- if (m_factory->supports(KDecorationDefines::AbilityButtonClose) )
- supportedButtons.append('X');
- if (m_factory->supports(KDecorationDefines::AbilityButtonAboveOthers) )
- supportedButtons.append('F');
- if (m_factory->supports(KDecorationDefines::AbilityButtonBelowOthers) )
- supportedButtons.append('B');
- if (m_factory->supports(KDecorationDefines::AbilityButtonShade) )
- supportedButtons.append('L');
- if (m_factory->supports(KDecorationDefines::AbilityButtonResize) )
- supportedButtons.append('R');
-
- m_supportedButtons = supportedButtons;
- } else {
- // enable only buttons available before AbilityButton* introduction
- m_supportedButtons = "MSHIAX_";
- }
-
- // update the button lists...
- // 1. set status on the source items...
- TQListViewItemIterator it(m_buttonSource);
- while (it.current() ) {
- ButtonSourceItem *i = dynamic_cast<ButtonSourceItem*>(it.current() );
- if (i) {
- Button b = i->button();
- b.supported = m_supportedButtons.contains(b.type);
- i->setButton(b);
- }
- ++it;
- }
- // 2. rebuild the drop site items...
- setButtonsLeft(buttonsLeft() );
- setButtonsRight(buttonsRight() );
-}
-
-Button ButtonPositionWidget::getButton(TQChar type, bool& success) {
- success = true;
-
- if (type == 'R') {
- TQBitmap bmp(resize_width, resize_height, resize_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Resize"), bmp, 'R', false, m_supportedButtons.contains('R') );
- } else if (type == 'L') {
- TQBitmap bmp(shade_width, shade_height, shade_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Shade"), bmp, 'L', false, m_supportedButtons.contains('L') );
- } else if (type == 'B') {
- TQBitmap bmp(keepbelowothers_width, keepbelowothers_height, keepbelowothers_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Keep Below Others"), bmp, 'B', false, m_supportedButtons.contains('B') );
- } else if (type == 'F') {
- TQBitmap bmp(keepaboveothers_width, keepaboveothers_height, keepaboveothers_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Keep Above Others"), bmp, 'F', false, m_supportedButtons.contains('F') );
- } else if (type == 'X') {
- TQBitmap bmp(close_width, close_height, close_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Close"), bmp, 'X', false, m_supportedButtons.contains('X') );
- } else if (type == 'A') {
- TQBitmap bmp(maximize_width, maximize_height, maximize_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Maximize"), bmp, 'A', false, m_supportedButtons.contains('A') );
- } else if (type == 'I') {
- TQBitmap bmp(minimize_width, minimize_height, minimize_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Minimize"), bmp, 'I', false, m_supportedButtons.contains('I') );
- } else if (type == 'H') {
- TQBitmap bmp(help_width, help_height, help_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Help"), bmp, 'H', false, m_supportedButtons.contains('H') );
- } else if (type == 'S') {
- TQBitmap bmp(onalldesktops_width, onalldesktops_height, onalldesktops_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("On All Desktops"), bmp, 'S', false, m_supportedButtons.contains('S') );
- } else if (type == 'M') {
- TQBitmap bmp(menu_width, menu_height, menu_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("Menu"), bmp, 'M', false, m_supportedButtons.contains('M') );
- } else if (type == '_') {
- TQBitmap bmp(spacer_width, spacer_height, spacer_bits, true);
- bmp.setMask(bmp);
- return Button(i18n("--- spacer ---"), bmp, '_', true, m_supportedButtons.contains('_') );
- } else {
- success = false;
- return Button();
- }
-}
-
-TQString ButtonPositionWidget::buttonsLeft() const
-{
- ButtonList btns = m_dropSite->buttonsLeft;
- TQString btnString = "";
- for (ButtonList::const_iterator it = btns.begin(); it != btns.end(); ++it) {
- btnString.append( (*it)->button().type );
- }
- return btnString;
-}
-
-TQString ButtonPositionWidget::buttonsRight() const
-{
- ButtonList btns = m_dropSite->buttonsRight;
- TQString btnString = "";
- for (ButtonList::const_iterator it = btns.begin(); it != btns.end(); ++it) {
- btnString.append( (*it)->button().type );
- }
- return btnString;
-}
-
-void ButtonPositionWidget::setButtonsLeft(const TQString &buttons)
-{
- // to keep the button lists consistent, first remove all left buttons, then add buttons again...
- m_dropSite->clearLeft();
-
- for (uint i = 0; i < buttons.length(); ++i) {
- bool succ = false;
- Button btn = getButton(buttons[i], succ);
- if (succ) {
- m_dropSite->buttonsLeft.append(new ButtonDropSiteItem(btn) );
- m_buttonSource->hideButton(btn.type);
- }
- }
- m_dropSite->recalcItemGeometry();
- m_dropSite->update();
-}
-
-void ButtonPositionWidget::setButtonsRight(const TQString &buttons)
-{
- // to keep the button lists consistent, first remove all left buttons, then add buttons again...
- m_dropSite->clearRight();
-
- for (uint i = 0; i < buttons.length(); ++i) {
- bool succ = false;
- Button btn = getButton(buttons[i], succ);
- if (succ) {
- m_dropSite->buttonsRight.append(new ButtonDropSiteItem(btn) );
- m_buttonSource->hideButton(btn.type);
- }
- }
- m_dropSite->recalcItemGeometry();
- m_dropSite->update();
-}
-
-#include "buttons.moc"
-// vim: ts=4
-// kate: space-indent off; tab-width 4;