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.
tdegraphics/kviewshell/pageSizeWidget.cpp

149 lines
4.5 KiB

// pageSizeWidget.cpp
//
// Part of KVIEWSHELL - A framework for multipage text/gfx viewers
//
// (C) 2002-2003 Stefan Kebekus
// Distributed under the GPL
// Add header files alphabetically
#include <config.h>
#include <kcombobox.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <tqlineedit.h>
#include <tqvalidator.h>
#include "pageSize.h"
#include "pageSizeWidget.h"
#include "sizePreview.h"
// Constructs a pageSizeWidget_base which is a child of 'parent', with
// the name 'name' and widget flags set to 'f'.
pageSizeWidget::pageSizeWidget( TQWidget* parent, const char* name, WFlags fl )
: pageSizeWidget_base( parent, name, fl )
{
connect(&chosenSize, TQ_SIGNAL(sizeChanged(const SimplePageSize&)), previewer, TQ_SLOT(setSize(const SimplePageSize&)));
// Set up the formatChoice TQComboBox
formatChoice->insertItem(i18n("Custom Size"));
formatChoice->insertStringList(chosenSize.pageSizeNames());
// Activate the proper entry in the TQComboBox
if (chosenSize.formatName().isNull()) {
orientationChoice->setEnabled(false);
formatChoice->setCurrentItem(0);
} else {
orientationChoice->setEnabled(true);
formatChoice->setCurrentText(chosenSize.formatName());
}
paperSize(formatChoice->currentItem());
connect(formatChoice, TQ_SIGNAL(activated(int)), this, TQ_SLOT(paperSize(int)));
connect(orientationChoice, TQ_SIGNAL(activated(int)), this, TQ_SLOT(orientationChanged(int)));
// Update the text fields when the user switches to a new unit, and
// when the "custom format" is NOT selected.
connect(widthUnits, TQ_SIGNAL(activated(int)), this, TQ_SLOT(unitsChanged(int)));
connect(heightUnits, TQ_SIGNAL(activated(int)), this, TQ_SLOT(unitsChanged(int)));
// Upate the chosen size whenever the user edits the input field.
connect(widthInput, TQ_SIGNAL(textChanged(const TQString &)), this, TQ_SLOT(input(const TQString &)));
connect(heightInput, TQ_SIGNAL(textChanged(const TQString &)), this, TQ_SLOT(input(const TQString &)));
// Allow entries between 0 and 1200. More filtering is done by the
// pageSize class, which silently ignores values which are out of
// range.
widthInput->setValidator(new TQDoubleValidator(0.0, 1200.0, 1, this, "widthValidator"));
heightInput->setValidator(new TQDoubleValidator(0.0, 1200.0, 1, this, "heightValidator"));
}
// Receives the output from the formatChoice combobox. A value of
// "zero" means that the "custom paper size" has been chosen.
void pageSizeWidget::paperSize(int index)
{
widthInput->setEnabled(index == 0);
heightInput->setEnabled(index == 0);
orientationChoice->setEnabled(index != 0);
if (index != 0) {
chosenSize.setPageSize(formatChoice->currentText());
chosenSize.setOrientation(orientationChoice->currentItem());
}
widthUnits->setCurrentText(chosenSize.preferredUnit());
heightUnits->setCurrentText(chosenSize.preferredUnit());
fillTextFields();
}
void pageSizeWidget::setPageSize(const TQString& sizeName)
{
chosenSize.setPageSize(sizeName);
int index = chosenSize.formatNumber();
formatChoice->setCurrentItem(index+1);
widthInput->setEnabled(index == -1);
heightInput->setEnabled(index == -1);
orientationChoice->setEnabled(index != -1);
widthUnits->setCurrentText(chosenSize.preferredUnit());
heightUnits->setCurrentText(chosenSize.preferredUnit());
fillTextFields();
}
void pageSizeWidget::fillTextFields()
{
// Warning! It is really necessary here to first generate both
// strings, and then call setText() on the input widgets. Reason?
// Calling setText() implicitly calls the input() method via the
// textChanged()-Signal of the TQLineEdit widgets.
TQString width = chosenSize.widthString(widthUnits->currentText());
TQString height = chosenSize.heightString(heightUnits->currentText());
widthInput->setText(width);
heightInput->setText(height);
}
void pageSizeWidget::unitsChanged(int)
{
// Update the text fields, i.e. show the current size in the proper
// units, but only if the "custom size" is NOT selected.
if (formatChoice->currentItem() != 0)
fillTextFields();
else
input(TQString());
}
void pageSizeWidget::setOrientation(int ori)
{
orientationChoice->setCurrentItem(ori);
orientationChanged();
}
void pageSizeWidget::orientationChanged(int orient)
{
// Update the page preview
chosenSize.setOrientation(orient);
}
void pageSizeWidget::input(const TQString &)
{
chosenSize.setPageSize(widthInput->text(), widthUnits->currentText(), heightInput->text(), heightUnits->currentText());
}
#include "pageSizeWidget.moc"