diff options
Diffstat (limited to 'kpresenter/autoformEdit/AFChoose.cpp')
-rw-r--r-- | kpresenter/autoformEdit/AFChoose.cpp | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/kpresenter/autoformEdit/AFChoose.cpp b/kpresenter/autoformEdit/AFChoose.cpp new file mode 100644 index 00000000..d5f00758 --- /dev/null +++ b/kpresenter/autoformEdit/AFChoose.cpp @@ -0,0 +1,202 @@ +// -*- Mode: c++-mode; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "AFChoose.h" + +#include <qlabel.h> +#include <qvbox.h> +#include <qtextstream.h> +#include <qdir.h> +#include <qwhatsthis.h> + +#include <klocale.h> +#include <ksimpleconfig.h> +#include <kdebug.h> +#include <kstandarddirs.h> +#include <kicondialog.h> + +#include <KPrFactory.h> + +AFChoose::AFChoose(QWidget *parent, const QString &caption, const char *name) + : QTabDialog(parent,name,true) +{ + setCaption(caption); + setCancelButton(i18n("&Cancel")); + setOkButton(i18n("&OK")); + groupList.setAutoDelete(true); + getGroups(); + setupTabs(); + connect(this,SIGNAL(applyButtonPressed()),this,SLOT(chosen())); + connect(this,SIGNAL(cancelButtonPressed()),this,SLOT(cancelClicked())); +} + +AFChoose::~AFChoose() +{ +} + +void AFChoose::getGroups() +{ + // global autoforms (as we don't have an editor we don't have local ones) + QString afDir = locate( "autoforms", ".autoforms", KPrFactory::global() ); + + QFile f( afDir ); + if ( f.open(IO_ReadOnly) ) { + QTextStream t( &f ); + QString s; + while ( !t.eof() ) { + s = t.readLine(); + if ( !s.isEmpty() ) { + grpPtr = new Group; + QString directory=QFileInfo( afDir ).dirPath() + "/" + s.simplifyWhiteSpace(); + grpPtr->dir.setFile(directory); + QDir d(directory); + if(d.exists(".directory")) { + KSimpleConfig config(d.absPath()+"/.directory", true); + config.setDesktopGroup(); + grpPtr->name=config.readEntry("Name"); + } + groupList.append( grpPtr ); + } + } + f.close(); + } +} + +void AFChoose::setupTabs() +{ + if (!groupList.isEmpty()) + { + for (grpPtr=groupList.first();grpPtr != 0;grpPtr=groupList.next()) + { + grpPtr->tab = new QVBox(this); + QWhatsThis::add(grpPtr->tab, i18n( "Choose a predefined shape by clicking on it then clicking the OK button (or just double-click on the shape). You can then insert the shape onto your slide by drawing the area with the mouse pointer." ) ); + grpPtr->loadWid = new KIconCanvas(grpPtr->tab); + // Changes for the new KIconCanvas (Werner) + QDir d( grpPtr->dir.absFilePath() ); + d.setNameFilter( "*.desktop" ); + if( d.exists() ) { + QStringList files=d.entryList( QDir::Files | QDir::Readable, QDir::Name ); + for(unsigned int i=0; i<files.count(); ++i) { + QString path=grpPtr->dir.absFilePath() + QChar('/'); + files[i]=path + files[i]; + KSimpleConfig config(files[i]); + config.setDesktopGroup(); + if (config.readEntry("Type")=="Link") { + QString text=config.readEntry("Name"); + QString icon=config.readEntry("Icon"); + if(icon[0]!='/') // allow absolute paths for icons + icon=path + icon; + QString filename=config.readPathEntry("URL"); + if(filename[0]!='/') { + if(filename.left(6)=="file:/") // I doubt this will happen + filename=filename.right(filename.length()-6); + filename=path + filename; + } + grpPtr->entries.insert(text, filename); + // now load the icon and create the item + // This code is shamelessly borrowed from KIconCanvas::slotLoadFiles + QImage img; + img.load(icon); + if (img.isNull()) { + kdWarning() << "Couldn't find icon " << icon << endl; + continue; + } + if (img.width() > 60 || img.height() > 60) { + if (img.width() > img.height()) { + int height = (int) ((60.0 / img.width()) * img.height()); + img = img.smoothScale(60, height); + } else { + int width = (int) ((60.0 / img.height()) * img.width()); + img = img.smoothScale(width, 60); + } + } + QPixmap pic; + pic.convertFromImage(img); + QIconViewItem *item = new QIconViewItem(grpPtr->loadWid, text, pic); + item->setKey(text); + item->setDragEnabled(false); + item->setDropEnabled(false); + } else + continue; // Invalid .desktop file + } + } + grpPtr->loadWid->setBackgroundColor(colorGroup().base()); + grpPtr->loadWid->setResizeMode(QIconView::Adjust); + grpPtr->loadWid->sort(); + connect(grpPtr->loadWid,SIGNAL(nameChanged(QString)), + this,SLOT(nameChanged(QString))); + connect(this, SIGNAL(currentChanged(QWidget *)), this, + SLOT(tabChanged(QWidget*))); + connect(grpPtr->loadWid,SIGNAL( doubleClicked ( QIconViewItem *)),this, + SLOT(slotDoubleClick())); + grpPtr->label = new QLabel(grpPtr->tab); + grpPtr->label->setText(" "); + grpPtr->label->setMaximumHeight(grpPtr->label->sizeHint().height()); + addTab(grpPtr->tab,grpPtr->name); + } + } +} + +void AFChoose::slotDoubleClick() +{ + chosen(); + accept(); +} + +void AFChoose::nameChanged(QString name) +{ + for (grpPtr=groupList.first();grpPtr != 0;grpPtr=groupList.next()) + grpPtr->label->setText(name); +} + +void AFChoose::tabChanged(QWidget *w) { + + for(grpPtr=groupList.first();grpPtr != 0;grpPtr=groupList.next()) { + if(grpPtr->tab==w) + grpPtr->label->setText(grpPtr->loadWid->getCurrent()); + } +} + +void AFChoose::chosen() +{ + if (!groupList.isEmpty()) + { + for (grpPtr=groupList.first();grpPtr != 0;grpPtr=groupList.next()) + { + if (grpPtr->tab->isVisible() && !grpPtr->loadWid->getCurrent().isEmpty()) + emit formChosen(grpPtr->entries[grpPtr->loadWid->getCurrent()]); + else + emit afchooseCanceled(); + } + } +} + +void AFChoose::cancelClicked() +{ + emit afchooseCanceled(); +} + +void AFChoose::closeEvent ( QCloseEvent *e ) +{ + emit afchooseCanceled(); + QTabDialog::closeEvent ( e ); +} + +#include "AFChoose.moc" |