Rev 13650 |
Rev 20185 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
#include "pagelayout.h"
#include <QVBoxLayout>
#include <QListWidgetItem>
#include <QLabel>
#include <QPixmap>
#include <QList>
#include "sccombobox.h"
#include "commonstrings.h"
#include "util_icon.h"
PageListWidget::PageListWidget(QWidget* parent) : QListWidget(parent)
{
setDragEnabled(false);
setViewMode(QListView::IconMode);
setFlow(QListView::TopToBottom);
setSortingEnabled(false);
setWrapping(false);
setWordWrap(true);
setAcceptDrops(false);
setDropIndicatorShown(false);
setDragDropMode(QAbstractItemView::NoDragDrop);
setResizeMode(QListView::Adjust);
setSelectionMode(QAbstractItemView::SingleSelection);
setFocusPolicy(Qt::NoFocus);
setIconSize(QSize(32, 32));
setMaximumWidth(100);
clear();
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
}
void PageListWidget::arrangeIcons()
{
int maxWidth = 0;
QListWidgetItem* ic;
int startY = 5;
for (int cc = 0; cc < count(); ++cc)
{
ic = item(cc);
QRect ir = visualItemRect(ic);
maxWidth = qMax(ir.width(), maxWidth);
}
setResizeMode(QListView::Fixed);
int startX = (viewport()->width() - maxWidth) / 2;
for (int cc = 0; cc < count(); ++cc)
{
ic = item(cc);
QRect ir = visualItemRect(ic);
int moveW = (maxWidth - ir.width()) / 2;
setPositionForIndex(QPoint(moveW + startX, startY), indexFromItem(ic));
startY += ir.height()+5;
}
}
PageLayouts::PageLayouts(QWidget* parent) : QGroupBox( parent )
{
struct PageSet pageS;
pageS.Name = CommonStrings::trPageSet2;
pageS.FirstPage = 0;
pageS.Rows = 1;
pageS.Columns = 1;
pageS.pageNames.clear();
pageS.pageNames.append(CommonStrings::trPageLocMiddleRight);
pageSets.append(pageS);
modus = false;
layoutGroupLayout = new QVBoxLayout(this);
layoutGroupLayout->setSpacing( 5 );
layoutGroupLayout->setMargin( 10 );
layoutsCombo = new ScComboBox( this );
layoutGroupLayout->addWidget( layoutsCombo );
layoutLabel1 = new QLabel( this );
layoutGroupLayout->addWidget( layoutLabel1 );
firstPage = new ScComboBox( this );
layoutGroupLayout->addWidget( firstPage );
languageChange();
connect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
connect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
}
PageLayouts::PageLayouts(QWidget* parent, QList<PageSet> pSets, bool mode) : QGroupBox( parent )
{
pageSets = pSets;
modus = mode;
layoutGroupLayout = new QVBoxLayout(this);
layoutGroupLayout->setSpacing( 5 );
layoutGroupLayout->setMargin( 10 );
if (modus)
{
layoutsView = new PageListWidget( this );
layoutGroupLayout->addWidget( layoutsView );
}
else
{
layoutsCombo = new ScComboBox( this );
layoutGroupLayout->addWidget( layoutsCombo );
}
layoutLabel1 = new QLabel( this );
layoutGroupLayout->addWidget( layoutLabel1 );
firstPage = new ScComboBox( this );
layoutGroupLayout->addWidget( firstPage );
languageChange();
// We need change combos width setMaximumWidth(minimumSizeHint().width());
if (modus)
connect(layoutsView, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemSelected(QListWidgetItem* )));
else
connect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
connect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
}
void PageLayouts::updateLayoutSelector(QList<PageSet> pSets)
{
disconnect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
pageSets = pSets;
layoutsCombo->clear();
for (int pg = 0; pg < pageSets.count(); ++pg)
{
QString psname=CommonStrings::translatePageSetString(pageSets[pg].Name);
if (pg == 0)
layoutsCombo->addItem(loadIcon("16/page-simple.png"), psname);
else if (pg == 1)
layoutsCombo->addItem(loadIcon("16/page-doublesided.png"), psname);
else if (pg == 2)
layoutsCombo->addItem(loadIcon("16/page-3fold.png"), psname);
else if (pg == 3)
layoutsCombo->addItem(loadIcon("16/page-4fold.png"), psname);
else
layoutsCombo->addItem(loadIcon("16/page-simple.png"), psname);
}
connect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
}
void PageLayouts::selectFirstP(int nr)
{
disconnect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
firstPage->setCurrentIndex(nr);
connect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
}
void PageLayouts::selectItem(uint nr)
{
if (modus)
disconnect(layoutsView, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemSelected(QListWidgetItem* )));
else
disconnect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
disconnect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
if (nr > 0)
{
firstPage->setEnabled(true);
firstPage->clear();
QStringList::Iterator pNames;
for(pNames = pageSets[nr].pageNames.begin(); pNames != pageSets[nr].pageNames.end(); ++pNames )
{
firstPage->addItem(CommonStrings::translatePageSetLocString((*pNames)));
}
}
else
{
firstPage->clear();
firstPage->addItem(" ");
firstPage->setEnabled(false);
}
if (modus)
{
layoutsView->setCurrentRow(nr);
layoutsView->item(nr)->setSelected(true);
connect(layoutsView, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemSelected(QListWidgetItem* )));
}
else
{
layoutsCombo->setCurrentIndex(nr);
connect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
}
connect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
}
void PageLayouts::itemSelectedPost(int choosen)
{
disconnect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
if (choosen > 0)
{
firstPage->setEnabled(true);
firstPage->clear();
QStringList::Iterator pNames;
for(pNames = pageSets[choosen].pageNames.begin(); pNames != pageSets[choosen].pageNames.end(); ++pNames )
{
firstPage->addItem(CommonStrings::translatePageSetLocString((*pNames)));
}
}
else
{
firstPage->clear();
firstPage->addItem(" ");
firstPage->setEnabled(false);
}
connect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
}
void PageLayouts::itemSelected(int ic)
{
itemSelectedPost(ic);
emit selectedLayout(ic);
}
void PageLayouts::itemSelected(QListWidgetItem* ic)
{
if (ic == 0)
return;
itemSelectedPost(layoutsView->row(ic));
emit selectedLayout(layoutsView->row(ic));
}
void PageLayouts::languageChange()
{
setTitle( tr( "Document Layout" ) );
if (modus)
{
layoutsView->clear();
for (int pg = 0; pg < pageSets.count(); ++pg)
{
QString psname=CommonStrings::translatePageSetString(pageSets[pg].Name);
QListWidgetItem *ic;
if (pg == 0)
{
ic = new QListWidgetItem( QIcon(loadIcon("32/page-simple.png")), psname, layoutsView );
ic->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
else if (pg == 1)
{
ic = new QListWidgetItem( QIcon(loadIcon("32/page-doublesided.png")), psname, layoutsView );
ic->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
else if (pg == 2)
{
ic = new QListWidgetItem( QIcon(loadIcon("32/page-3fold.png")), psname, layoutsView );
ic->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
else if (pg == 3)
{
ic = new QListWidgetItem( QIcon(loadIcon("32/page-4fold.png")), psname, layoutsView );
ic->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
else
{
ic = new QListWidgetItem( QIcon(loadIcon("32/page-simple.png")), psname, layoutsView );
ic->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
}
layoutsView->arrangeIcons();
}
else
{
disconnect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
int currIndex=layoutsCombo->currentIndex();
layoutsCombo->clear();
for (int pg = 0; pg < pageSets.count(); ++pg)
{
QString psname=CommonStrings::translatePageSetString(pageSets[pg].Name);
if (pg == 0)
layoutsCombo->addItem(loadIcon("16/page-simple.png"), psname);
else if (pg == 1)
layoutsCombo->addItem(loadIcon("16/page-doublesided.png"), psname);
else if (pg == 2)
layoutsCombo->addItem(loadIcon("16/page-3fold.png"), psname);
else if (pg == 3)
layoutsCombo->addItem(loadIcon("16/page-4fold.png"), psname);
else
layoutsCombo->addItem(loadIcon("16/page-simple.png"), psname);
}
layoutsCombo->setCurrentIndex(currIndex);
connect(layoutsCombo, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
disconnect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
int currFirstPageIndex=firstPage->currentIndex();
firstPage->clear();
if (currIndex>=0 && currIndex<pageSets.count())
for(QStringList::Iterator pNames = pageSets[currIndex].pageNames.begin(); pNames != pageSets[currIndex].pageNames.end(); ++pNames )
{
firstPage->addItem(CommonStrings::translatePageSetLocString((*pNames)));
}
firstPage->setCurrentIndex(currFirstPageIndex);
connect(firstPage, SIGNAL(activated(int)), this, SIGNAL(selectedFirstPage(int)));
}
layoutLabel1->setText( tr( "First Page is:" ) );
QString layoutText( tr( "Number of pages to show side-by-side on the canvas\nOften used for allowing items to be placed across page spreads" ) );
if (modus)
layoutsView->setToolTip(layoutText);
else
layoutsCombo->setToolTip(layoutText);
firstPage->setToolTip( tr( "Location on the canvas where the first page of the document is placed" ) );
}