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.
basket/src/variouswidgets.cpp

326 lines
10 KiB

/***************************************************************************
* Copyright (C) 2003 by S<>bastien Lao<61>t *
* slaout@linux62.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 <tqlayout.h>
#include <tqlineedit.h>
#include <tqlabel.h>
#include <tqsizegrip.h>
#include <tqpushbutton.h>
#include <tqstring.h>
#include <tqsizepolicy.h>
#include <kopenwith.h>
#include <tdelocale.h>
#include <tqwhatsthis.h>
#include <kiconview.h>
#include <kiconloader.h>
#include <tqdragobject.h>
#include <tqfontdatabase.h>
#include "variouswidgets.h"
/** class RunCommandRequester: */
RunCommandRequester::RunCommandRequester(const TQString &runCommand, const TQString &message, TQWidget *parent, const char *name)
: TQWidget(parent, name)
{
m_message = message;
TQHBoxLayout *layout = new TQHBoxLayout(this, /*margin=*/0, KDialogBase::spacingHint());
m_runCommand = new TQLineEdit(runCommand, this);
TQPushButton *pb = new TQPushButton(/*"C&hoose..."*/i18n("..."), this);
pb->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
layout->addWidget(m_runCommand);
layout->addWidget(pb);
connect( pb, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotSelCommand()) );
}
RunCommandRequester::~RunCommandRequester()
{
}
void RunCommandRequester::slotSelCommand()
{
KOpenWithDlg *dlg = new KOpenWithDlg(KURL::List(), m_message, m_runCommand->text(), this);
dlg->exec();
if ( ! dlg->text().isEmpty() )
m_runCommand->setText(dlg->text());
}
TQString RunCommandRequester::runCommand()
{
return m_runCommand->text();
}
void RunCommandRequester::setRunCommand(const TQString &runCommand)
{
m_runCommand->setText(runCommand);
}
/** class IconSizeCombo: */
IconSizeCombo::IconSizeCombo(bool rw, TQWidget *parent, const char *name)
: TQComboBox(rw, parent, name)
{
insertItem(i18n("16 by 16 pixels"));
insertItem(i18n("22 by 22 pixels"));
insertItem(i18n("32 by 32 pixels"));
insertItem(i18n("48 by 48 pixels"));
insertItem(i18n("64 by 64 pixels"));
insertItem(i18n("128 by 128 pixels"));
setCurrentItem(2);
}
IconSizeCombo::~IconSizeCombo()
{
}
int IconSizeCombo::iconSize()
{
switch (currentItem()) {
default:
case 0: return 16;
case 1: return 22;
case 2: return 32;
case 3: return 48;
case 4: return 64;
case 5: return 128;
}
}
void IconSizeCombo::setSize(int size)
{
switch (size) {
default:
case 16: setCurrentItem(0); break;
case 22: setCurrentItem(1); break;
case 32: setCurrentItem(2); break;
case 48: setCurrentItem(3); break;
case 64: setCurrentItem(4); break;
case 128: setCurrentItem(5); break;
}
}
/** class ViewSizeDialog: */
ViewSizeDialog::ViewSizeDialog(TQWidget *parent, int w, int h)
: TQDialog(parent, "ViewSizeDialog")
{
TQLabel *label = new TQLabel(i18n(
"Resize the window to select the image size\n"
"and close it or press Escape to accept changes."), this);
label->move(8, 8);
label->setFixedSize( label->sizeHint() );
// setSizeGripEnabled(true) doesn't work (the grip stay at the same place), so we emulate it:
m_sizeGrip = new TQSizeGrip(this);
m_sizeGrip->setFixedSize( m_sizeGrip->sizeHint() );
setGeometry(x(), y(), w, h);
}
ViewSizeDialog::~ViewSizeDialog()
{
}
void ViewSizeDialog::resizeEvent(TQResizeEvent *)
{
setCaption( i18n("%1 by %2 pixels").arg(TQString::number(width())).arg(TQString::number(height())) );
m_sizeGrip->move( width() - m_sizeGrip->width(), height() - m_sizeGrip->height() );
}
/** class HelpLabel: */
HelpLabel::HelpLabel(const TQString &text, const TQString &message, TQWidget *parent)
: KURLLabel(parent), m_message(message)
{
setText(text);
connect( this, TQ_SIGNAL(leftClickedURL()), this, TQ_SLOT(showMessage()) );
}
HelpLabel::~HelpLabel()
{
}
void HelpLabel::showMessage()
{
TQWhatsThis::display(m_message, mapToGlobal( TQPoint(width() / 2, height()) ));
}
void HelpLabel::keyPressEvent(TQKeyEvent *event)
{
if (event->key() == TQt::Key_Space)
showMessage();
else
KURLLabel::keyPressEvent(event);
}
/** class IconSizeDialog: */
class UndraggableTDEIconView : public TDEIconView
{
public:
UndraggableTDEIconView(TQWidget * parent = 0, const char * name = 0, WFlags f = 0) : TDEIconView(parent, name, f) {}
TQDragObject* dragObject() { return 0; }
};
IconSizeDialog::IconSizeDialog(const TQString &caption, const TQString &message, const TQString &icon, int iconSize, TQWidget *parent)
: KDialogBase(KDialogBase::Swallow, caption, KDialogBase::Ok | KDialogBase::Cancel,
KDialogBase::Ok, parent, /*name=*/0, /*modal=*/true, /*separator=*/false)
{
TQWidget *page = new TQWidget(this);
TQVBoxLayout *topLayout = new TQVBoxLayout(page, /*margin=*/0, spacingHint());
TQLabel *label = new TQLabel(message, page);
topLayout->addWidget(label);
TDEIconView *iconView = new UndraggableTDEIconView(page);
iconView->setItemsMovable(false);
iconView->setSelectionMode(TDEIconView::Single);
m_size16 = new TDEIconViewItem(iconView, 0, i18n("16 by 16 pixels"), DesktopIcon(icon, 16));
m_size22 = new TDEIconViewItem(iconView, m_size16, i18n("22 by 22 pixels"), DesktopIcon(icon, 22));
m_size32 = new TDEIconViewItem(iconView, m_size22, i18n("32 by 32 pixels"), DesktopIcon(icon, 32));
m_size48 = new TDEIconViewItem(iconView, m_size32, i18n("48 by 48 pixels"), DesktopIcon(icon, 48));
m_size64 = new TDEIconViewItem(iconView, m_size48, i18n("64 by 64 pixels"), DesktopIcon(icon, 64));
m_size128 = new TDEIconViewItem(iconView, m_size64, i18n("128 by 128 pixels"), DesktopIcon(icon, 128));
iconView->setMinimumWidth(m_size16->width() + m_size22->width() + m_size32->width() + m_size48->width() + m_size64->width() + m_size128->width() +
(6+2) * iconView->spacing() + 20);
iconView->setMinimumHeight(m_size128->height() + 2 * iconView->spacing() + 20);
topLayout->addWidget(iconView);
switch (iconSize) {
case 16: iconView->setSelected(m_size16, true); m_iconSize = 16; break;
case 22: iconView->setSelected(m_size22, true); m_iconSize = 22; break;
default:
case 32: iconView->setSelected(m_size32, true); m_iconSize = 32; break;
case 48: iconView->setSelected(m_size48, true); m_iconSize = 48; break;
case 64: iconView->setSelected(m_size64, true); m_iconSize = 64; break;
case 128: iconView->setSelected(m_size128, true); m_iconSize = 128; break;
}
connect( iconView, TQ_SIGNAL(executed(TQIconViewItem*)), this, TQ_SLOT(choose(TQIconViewItem*)) );
connect( iconView, TQ_SIGNAL(returnPressed(TQIconViewItem*)), this, TQ_SLOT(choose(TQIconViewItem*)) );
connect( iconView, TQ_SIGNAL(selectionChanged()), this, TQ_SLOT(slotSelectionChanged()) );
setMainWidget(page);
}
IconSizeDialog::~IconSizeDialog()
{
}
void IconSizeDialog::slotSelectionChanged()
{
// Change m_iconSize to the new selected one:
if (m_size16->isSelected()) { m_iconSize = 16; return; }
if (m_size22->isSelected()) { m_iconSize = 22; return; }
if (m_size32->isSelected()) { m_iconSize = 32; return; }
if (m_size48->isSelected()) { m_iconSize = 48; return; }
if (m_size64->isSelected()) { m_iconSize = 64; return; }
if (m_size128->isSelected()) { m_iconSize = 128; return; }
// But if user unselected the item (by eg. right clicking a free space), reselect the last one:
switch (m_iconSize) {
case 16: m_size16->setSelected(true); m_iconSize = 16; break;
case 22: m_size22->setSelected(true); m_iconSize = 22; break;
default:
case 32: m_size32->setSelected(true); m_iconSize = 32; break;
case 48: m_size48->setSelected(true); m_iconSize = 48; break;
case 64: m_size64->setSelected(true); m_iconSize = 64; break;
case 128: m_size128->setSelected(true); m_iconSize = 128; break;
}
}
void IconSizeDialog::choose(TQIconViewItem*)
{
actionButton(KDialogBase::Ok)->animateClick();
}
void IconSizeDialog::slotCancel()
{
m_iconSize = -1;
KDialogBase::slotCancel();
}
/** class FontSizeCombo: */
FontSizeCombo::FontSizeCombo(bool rw, bool withDefault, TQWidget *parent, const char *name)
: KComboBox(rw, parent, name), m_withDefault(withDefault)
{
if (m_withDefault)
insertItem(i18n("(Default)"));
TQFontDatabase fontDB;
TQValueList<int> sizes = fontDB.standardSizes();
for (TQValueList<int>::Iterator it = sizes.begin(); it != sizes.end(); ++it)
insertItem(TQString::number(*it));
// connect( this, TQ_SIGNAL(acivated(const TQString&)), this, TQ_SLOT(textChangedInCombo(const TQString&)) );
connect( this, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(textChangedInCombo(const TQString&)) );
// TODO: 01617 void TDEFontSizeAction::setFontSize( int size )
}
FontSizeCombo::~FontSizeCombo()
{
}
void FontSizeCombo::textChangedInCombo(const TQString &text)
{
bool ok = false;
int size = text.toInt(&ok);
if (ok)
emit sizeChanged(size);
}
void FontSizeCombo::keyPressEvent(TQKeyEvent *event)
{
if (event->key() == TQt::Key_Escape)
emit escapePressed();
else if (event->key() == TQt::Key_Return)
emit returnPressed2();
else
KComboBox::keyPressEvent(event);
}
void FontSizeCombo::setFontSize(int size)
{
setCurrentText(TQString::number(size));
// TODO: SEE TDEFontSizeAction::setFontSize( int size ) !!! for a more complete method!
}
int FontSizeCombo::fontSize()
{
bool ok = false;
int size = currentText().toInt(&ok);
if (ok)
return size;
size = text(currentItem()).toInt(&ok);
if (ok)
return size;
return font().pointSize();
}
#include "variouswidgets.moc"