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.
tderadio/src/widgetplugins.cpp

236 lines
6.9 KiB

/***************************************************************************
widgetplugins.cpp - description
-------------------
begin : Mi Aug 27 2003
copyright : (C) 2003 by Martin Witte
email : witte@kawo1.rwth-aachen.de
***************************************************************************/
/***************************************************************************
* *
* 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 "include/widgetplugins.h"
#include "include/pluginmanager.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <twin.h>
#include <tqwidget.h>
#include <tdeconfig.h>
#include <tdelocale.h>
WidgetPluginBase::WidgetPluginBase(const TQString &name, const TQString &description)
: PluginBase(name, description),
m_geoCacheValid(false),
m_geoRestoreFlag(false),
m_restoreShow(false)
{
}
/*
TQWidget *WidgetPluginBase::getWidget()
{
return dynamic_cast<TQWidget*>(this);
}
const TQWidget *WidgetPluginBase::getWidget() const
{
return dynamic_cast<const TQWidget*>(this);
}
*/
void WidgetPluginBase::notifyManager(bool shown)
{
if (m_manager)
m_manager->noticeWidgetPluginShown(this, shown);
}
bool WidgetPluginBase::isReallyVisible(const TQWidget *_w) const
{
const TQWidget *w = _w ? _w : getWidget();
if (!w) return false;
KWin::WindowInfo i = KWin::WindowInfo(w->winId(), 0, 0);
return (i.mappingState() == NET::Visible)
&& w->isVisible()
&& (i.onAllDesktops() || i.isOnCurrentDesktop());
}
bool WidgetPluginBase::isAnywhereVisible(const TQWidget *_w) const
{
const TQWidget *w = _w ? _w : getWidget();
if (!w) return false;
return w->isVisible();
}
void WidgetPluginBase::pShow(bool on)
{
TQWidget *w = getWidget();
if (!w) return;
if (on && !isReallyVisible(w))
w->show();
else if (!on && !w->isHidden())
w->hide();
}
void WidgetPluginBase::pToggleShown()
{
TQWidget *w = getWidget();
if (!w) return;
if (!isReallyVisible(w))
w->show();
else
w->hide();
}
void WidgetPluginBase::pShowOnOrgDesktop()
{
KWin::setMainWindow(getWidget(), 0);
logDebug(TQString("%1::pShowOnOrgDesktop: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
if (m_geoCacheValid && (!isReallyVisible() || m_geoRestoreFlag) ) {
TQWidget *w = getWidget();
if (!w) return;
WId id = w->winId();
KWin::setOnAllDesktops(id, m_saveSticky);
if (!m_saveSticky) {
KWin::setOnDesktop(id, m_saveDesktop);
}
w->resize(m_saveGeometry.size());
w->move(m_saveGeometry.topLeft());
if (m_saveMinimized) {
w->showMinimized();
KWin::iconifyWindow(id);
} else if (m_saveMaximized) {
w->showMaximized();
} else {
w->showNormal();
KWin::deIconifyWindow(id);
}
}
}
void WidgetPluginBase::pShow()
{
KWin::setMainWindow(getWidget(), 0);
logDebug(TQString("%1::pShow: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
if (m_geoCacheValid && (!isReallyVisible() || m_geoRestoreFlag) ) {
TQWidget *w = getWidget();
if (!w) return;
WId id = w->winId();
KWin::setOnAllDesktops(id, m_saveSticky);
if (!m_saveSticky)
KWin::setOnDesktop(id, KWin::currentDesktop());
w->resize(m_saveGeometry.size());
w->move(m_saveGeometry.topLeft());
KWin::deIconifyWindow(id);
}
}
void WidgetPluginBase::pHide()
{
logDebug(TQString("%1::pHide1: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
getKWinState();
logDebug(TQString("%1::pHide2: all: %2, desktop: %3, visible:%4, anywherevisible:%5, cachevalid: %6").arg(name()).arg(m_saveSticky).arg(m_saveDesktop).arg(isReallyVisible()).arg(isAnywhereVisible()).arg(m_geoCacheValid));
}
void WidgetPluginBase::pShowEvent(TQShowEvent *)
{
notifyManager (true);
}
void WidgetPluginBase::pHideEvent(TQHideEvent *)
{
notifyManager (false);
}
void WidgetPluginBase::getKWinState(const TQWidget *_w) const
{
if (m_geoRestoreFlag) return;
const TQWidget *w = _w ? _w : getWidget();
if (!w) return;
if (w->isVisible()) {
KWin::WindowInfo i = KWin::WindowInfo(w->winId(), 0, 0);
m_saveMinimized = i.isMinimized();
m_saveMaximized = w->isMaximized();
m_saveSticky = i.onAllDesktops();
m_saveDesktop = i.desktop();
m_saveGeometry = TQRect(w->pos(), w->size());
m_geoCacheValid = true;
}
}
void WidgetPluginBase::saveState (TDEConfig *config) const
{
const TQWidget *w = getWidget();
getKWinState(w);
config->writeEntry("hidden", w ? w->isHidden() : false);
config->writeEntry("minimized", m_saveMinimized);
config->writeEntry("maximized", m_saveMaximized);
config->writeEntry("sticky", m_saveSticky);
config->writeEntry("desktop", m_saveDesktop);
config->writeEntry("geometry", m_saveGeometry);
config->writeEntry("geoCacheValid", m_geoCacheValid);
}
void WidgetPluginBase::restoreState (TDEConfig *config, bool showByDefault)
{
m_geoCacheValid = config->readBoolEntry("geoCacheValid", false);
m_saveDesktop = config->readNumEntry ("desktop", 1);
m_saveSticky = config->readBoolEntry("sticky", false);
m_saveMaximized = config->readBoolEntry("maximized", false);
m_saveMinimized = config->readBoolEntry("minimized", false);
m_saveGeometry = config->readRectEntry("geometry");
m_restoreShow = !config->readBoolEntry("hidden", !showByDefault);
}
void WidgetPluginBase::restoreState (TDEConfig *config)
{
restoreState(config, true);
}
void WidgetPluginBase::startPlugin()
{
PluginBase::startPlugin();
TQWidget *w = getWidget();
if (w) {
m_geoRestoreFlag = true;
if (!m_restoreShow) w->hide();
else w->show();
m_geoRestoreFlag = false;
}
}