You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
piklab/src/common/gui/misc_gui.cpp

235 lines
7.8 KiB

/***************************************************************************
* Copyright (C) 2005-2007 Nicolas Hadacek <hadacek@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. *
***************************************************************************/
#include "misc_gui.h"
#include <tqapplication.h>
#include <tqpushbutton.h>
#include <tqtimer.h>
#include <tqwidgetstack.h>
#include <tqobjectlist.h>
#include <tqpainter.h>
#include <tqheader.h>
#include <tqmetaobject.h>
#include <tqvariant.h>
#include <tqpopupmenu.h>
#include <kcursor.h>
#include <kiconloader.h>
#include <tdemessagebox.h>
#include <tdeaction.h>
#include <ktabbar.h>
#include "dialog.h"
#include "common/common/number.h"
#include "common/common/misc.h"
#include "common/gui/number_gui.h"
//-----------------------------------------------------------------------------
bool PBusyCursor::_overridePaused = false;
void PBusyCursor::start()
{
TQApplication::setOverrideCursor(KCursor::waitCursor(), true);
}
void PBusyCursor::stop()
{
TQApplication::restoreOverrideCursor();
}
void PBusyCursor::pause()
{
_overridePaused = TQApplication::overrideCursor();
stop();
}
void PBusyCursor::restore()
{
if (_overridePaused) start();
}
//-----------------------------------------------------------------------------
void MessageBox::information(const TQString &text, Log::ShowMode show, const TQString &dontShowAgainName)
{
if ( show==Log::DontShow ) return;
PBusyCursor::pause();
KMessageBox::information(tqApp->mainWidget(), text, TQString(), dontShowAgainName, KMessageBox::Notify | KMessageBox::AllowLink);
PBusyCursor::restore();
}
void MessageBox::detailedSorry(const TQString &text, const TQString &details, Log::ShowMode show)
{
if ( show==Log::DontShow ) return;
PBusyCursor::pause();
if ( details.isEmpty() ) KMessageBox::sorry(tqApp->mainWidget(), text, TQString(), KMessageBox::Notify | KMessageBox::AllowLink);
else KMessageBox::detailedSorry(tqApp->mainWidget(), text, details, TQString(), KMessageBox::Notify | KMessageBox::AllowLink);
PBusyCursor::restore();
}
bool MessageBox::askContinue(const TQString &text, const KGuiItem &buttonContinue, const TQString &caption)
{
::PBusyCursor::pause();
int res = KMessageBox::warningContinueCancel(tqApp->mainWidget(), text, caption, buttonContinue);
::PBusyCursor::restore();
return ( res==KMessageBox::Continue );
}
bool MessageBox::questionYesNo(const TQString &text, const KGuiItem &yesButton,const KGuiItem &noButton, const TQString &caption)
{
::PBusyCursor::pause();
int res = KMessageBox::questionYesNo(tqApp->mainWidget(), text, caption, yesButton, noButton);
::PBusyCursor::restore();
return ( res==KMessageBox::Yes );
}
MessageBox::Result MessageBox::questionYesNoCancel(const TQString &text, const KGuiItem &yesButton, const KGuiItem &noButton,
const TQString &caption)
{
::PBusyCursor::pause();
int res = KMessageBox::questionYesNoCancel(tqApp->mainWidget(), text, caption, yesButton, noButton);
::PBusyCursor::restore();
if ( res==KMessageBox::Yes ) return Yes;
if ( res==KMessageBox::No ) return No;
return Cancel;
}
void MessageBox::text(const TQString &text, Log::ShowMode show)
{
if ( show==Log::DontShow ) return;
PBusyCursor::pause();
TextEditorDialog dialog(text, TQString(), false, tqApp->mainWidget());
dialog.exec();
PBusyCursor::restore();
}
//----------------------------------------------------------------------------
PopupButton::PopupButton(TQWidget *parent, const char *name)
: KPushButton(parent, name)
{
init();
}
PopupButton::PopupButton(const TQString &text, TQWidget *parent, const char *name)
: KPushButton(text, parent, name)
{
init();
}
void PopupButton::init()
{
_separator = false;
setFlat(true);
TQPopupMenu *popup = new TQPopupMenu(this);
connect(popup, TQT_SIGNAL(activated(int)), TQT_SIGNAL(activated(int)));
setPopup(popup);
}
void PopupButton::appendAction(TDEAction *action)
{
if ( _separator && popup()->count()!=0 ) popup()->insertSeparator();
_separator = false;
action->plug(popup());
}
void PopupButton::appendAction(const TQString &label, const TQString &icon,
TQObject *receiver, const char *slot)
{
appendAction(new TDEAction(label, icon, 0, receiver, slot, (TDEActionCollection *)0));
}
int PopupButton::appendItem(const TQString &label, const TQString &icon, int id)
{
TDEIconLoader loader;
TQPixmap pixmap = loader.loadIcon(icon, TDEIcon::Small);
return appendItem(label, pixmap, id);
}
int PopupButton::appendItem(const TQString &label, const TQPixmap &icon, int id)
{
if ( _separator && popup()->count()!=0 ) popup()->insertSeparator();
_separator = false;
return popup()->insertItem(icon, label, id);
}
//-----------------------------------------------------------------------------
Splitter::Splitter(const TQValueList<int> &defaultSizes, TQt::Orientation o, TQWidget *parent, const char *name)
: TQSplitter(o, parent, name), _defaultSizes(defaultSizes)
{
Q_ASSERT(name);
setOpaqueResize(true);
TQTimer::singleShot(0, this, TQT_SLOT(updateSizes()));
}
Splitter::~Splitter()
{
GuiConfig gc;
gc.writeEntry(TQString(name()) + "_sizes", sizes());
}
void Splitter::updateSizes()
{
GuiConfig gc;
TQValueList<int> sizes = gc.readIntListEntry(TQString(name()) + "_sizes");
for (uint i=sizes.count(); i<_defaultSizes.count(); i++) sizes.append(_defaultSizes[i]);
setSizes(sizes);
}
//-----------------------------------------------------------------------------
TabBar::TabBar(TQWidget *parent, const char *name)
: KTabBar(parent, name), _ignoreWheelEvent(false)
{}
void TabBar::wheelEvent(TQWheelEvent *e)
{
if (_ignoreWheelEvent) TQApplication::sendEvent(parent(), e); // #### not sure why ignoring is not enough...
else KTabBar::wheelEvent(e);
}
TabWidget::TabWidget(TQWidget *parent, const char *name)
: KTabWidget(parent, name)
{
setTabBar(new TabBar(this));
}
void TabWidget::setIgnoreWheelEvent(bool ignore)
{
static_cast<TabBar *>(tabBar())->_ignoreWheelEvent = ignore;
}
void TabWidget::wheelEvent(TQWheelEvent *e)
{
if (static_cast<TabBar *>(tabBar())->_ignoreWheelEvent) e->ignore();
else KTabWidget::wheelEvent(e);
}
void TabWidget::setTabBar(TabBar *tabbar)
{
KTabWidget::setTabBar(tabbar);
connect(tabBar(), TQT_SIGNAL(contextMenu( int, const TQPoint & )), TQT_SLOT(contextMenu( int, const TQPoint & )));
connect(tabBar(), TQT_SIGNAL(mouseDoubleClick( int )), TQT_SLOT(mouseDoubleClick( int )));
connect(tabBar(), TQT_SIGNAL(mouseMiddleClick( int )), TQT_SLOT(mouseMiddleClick( int )));
connect(tabBar(), TQT_SIGNAL(initiateDrag( int )), TQT_SLOT(initiateDrag( int )));
connect(tabBar(), TQT_SIGNAL(testCanDecode(const TQDragMoveEvent *, bool & )), TQT_SIGNAL(testCanDecode(const TQDragMoveEvent *, bool & )));
connect(tabBar(), TQT_SIGNAL(receivedDropEvent( int, TQDropEvent * )), TQT_SLOT(receivedDropEvent( int, TQDropEvent * )));
connect(tabBar(), TQT_SIGNAL(moveTab( int, int )), TQT_SLOT(moveTab( int, int )));
connect(tabBar(), TQT_SIGNAL(closeRequest( int )), TQT_SLOT(closeRequest( int )));
connect(tabBar(), TQT_SIGNAL(wheelDelta( int )), TQT_SLOT(wheelDelta( int )));
}
//-----------------------------------------------------------------------------
ComboBox::ComboBox(TQWidget *parent, const char *name)
: TQComboBox(parent, name), _ignoreWheelEvent(false)
{}
void ComboBox::wheelEvent(TQWheelEvent *e)
{
if (_ignoreWheelEvent) TQApplication::sendEvent(parent(), e); // #### not sure why ignoring is not enough...
else TQComboBox::wheelEvent(e);
}