2 * KFontInst - KDE Font Installer
4 * Copyright 2003-2007 Craig Drummond <craig@kde.org>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; see the file COPYING. If not, write to
20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
24 #include "KCmFontInst.h"
25 #include "KfiConstants.h"
26 #include "PrintDialog.h"
28 #include "FontPreview.h"
31 #include "DuplicatesDialog.h"
32 #include "PreviewSelectAction.h"
33 #include "FontFilter.h"
34 #include <QtGui/QGridLayout>
35 #include <QtGui/QBoxLayout>
36 #include <QtGui/QLabel>
37 #include <QtGui/QSplitter>
38 #include <QtGui/QProgressBar>
39 #include <QtCore/QCoreApplication>
40 #include <QtGui/QApplication>
41 #include <QtCore/QTextStream>
42 #include <QtGui/QComboBox>
43 #include <QtCore/QProcess>
44 #include <QtGui/QPainter>
45 #include <KDE/KAboutData>
46 #include <KDE/KToolBar>
47 #include <KDE/KFileDialog>
48 #include <KDE/KMessageBox>
49 #include <KDE/KIO/Job>
50 #include <KDE/KIO/NetAccess>
51 #include <KDE/KPushButton>
52 #include <KDE/KGuiItem>
53 #include <KDE/KInputDialog>
54 #include <KDE/KIconLoader>
55 #include <KDE/KProgressDialog>
57 #include <KDE/KTempDir>
58 #include <KDE/KTemporaryFile>
60 #include <KDE/KActionMenu>
61 #include <KDE/KToggleAction>
62 #include <KDE/KStandardDirs>
64 #include <KDE/KPluginFactory>
65 #include <KDE/KPluginLoader>
67 #define CFG_GROUP "Main Settings"
68 #define CFG_PREVIEW_SPLITTER_SIZES "PreviewSplitterSizes"
69 #define CFG_GROUP_SPLITTER_SIZES "GroupSplitterSizes"
70 #define CFG_FONT_SIZE "FontSize"
71 #define CFG_FONT_MGT_MODE "MgtMode"
72 #define CFG_SHOW_PREVIEW "ShowPreview"
74 K_PLUGIN_FACTORY(FontInstallFactory
,
75 registerPlugin
<KFI::CKCmFontInst
>();
77 K_EXPORT_PLUGIN(FontInstallFactory("fontinst"))
82 static int constModeList
[]=
83 {CGroupListItem::ALL
, CGroupListItem::PERSONAL
, CGroupListItem::SYSTEM
, -1};
85 inline CGroupListItem::EType
modeToGrp(int mode
)
87 return (CGroupListItem::EType
)(constModeList
[mode
]);
90 static int grpToMode(CGroupListItem::EType type
)
92 for(int i
=0; i
<3; ++i
)
93 if(constModeList
[i
]==type
)
98 class CPushButton
: public KPushButton
102 CPushButton(const KGuiItem
&item
, QWidget
*parent
)
103 : KPushButton(item
, parent
)
105 theirHeight
=qMax(theirHeight
, height());
106 setSizePolicy(QSizePolicy::Minimum
, QSizePolicy::Maximum
);
109 QSize
sizeHint() const
111 QSize
sh(KPushButton::sizeHint());
113 sh
.setHeight(theirHeight
);
114 if(sh
.width()<sh
.height())
115 sh
.setWidth(sh
.height());
116 else if(text().isEmpty())
117 sh
.setWidth(theirHeight
);
123 static int theirHeight
;
126 class CToolBar
: public KToolBar
130 CToolBar(QWidget
*parent
)
133 theirHeight
=qMax(theirHeight
, height());
136 setToolButtonStyle(Qt::ToolButtonTextBesideIcon
);
137 setFont(QApplication::font());
142 addWidget(new QLabel(" ", this));
145 void link(CToolBar
*l
)
150 QSize
sizeHint() const
152 QSize
sh(KToolBar::sizeHint());
154 sh
.setHeight(theirHeight
);
158 void paintEvent(QPaintEvent
*)
160 QColor
col(palette().color(backgroundRole()));
163 QPainter(this).fillRect(rect(), col
);
166 void resizeEvent(QResizeEvent
*ev
)
168 KToolBar::resizeEvent(ev
);
169 if(height()>theirHeight
)
171 theirHeight
=height();
172 itsLinked
->resize(itsLinked
->width(), height());
179 static int theirHeight
;
182 class CProgressBar
: public QProgressBar
186 CProgressBar(QWidget
*p
, int h
) : QProgressBar(p
), itsHeight((int)(h
*0.6))
187 { setSizePolicy(QSizePolicy::Fixed
, QSizePolicy::Fixed
); }
189 virtual ~CProgressBar() { }
191 int height() const { return itsHeight
; }
192 QSize
sizeHint() const { return QSize(100, itsHeight
); }
199 int CPushButton::theirHeight
=0;
200 int CToolBar::theirHeight
=0;
202 CKCmFontInst::CKCmFontInst(QWidget
*parent
, const QVariantList
&)
203 : KCModule(FontInstallFactory::componentData(), parent
),
205 itsConfig(KFI_UI_CFG_FILE
),
208 itsUpdateDialog(NULL
),
215 CFcEngine::instance()->readConfig(itsConfig
);
216 CFcEngine::setBgndCol(QApplication::palette().color(QPalette::Active
, QPalette::Base
));
217 CFcEngine::setTextCol(QApplication::palette().color(QPalette::Active
, QPalette::Text
));
218 KGlobal::locale()->insertCatalog(KFI_CATALOGUE
);
219 KIconLoader::global()->addAppDir(KFI_NAME
);
221 KAboutData
*about
= new KAboutData("fontinst", 0, ki18n("KDE Font Installer"), 0, KLocalizedString(),
222 KAboutData::License_GPL
, ki18n("GUI front end to the fonts:/ ioslave.\n"
223 "(c) Craig Drummond, 2000 - 2007"));
224 about
->addAuthor(ki18n("Craig Drummond"), ki18n("Developer and maintainer"), "craig@kde.org");
227 KConfigGroup
cg(&itsConfig
, CFG_GROUP
);
229 itsRunner
=new CJobRunner(this);
231 itsPreviewSplitter
=new QSplitter(this);
232 itsPreviewSplitter
->setSizePolicy(QSizePolicy::MinimumExpanding
, QSizePolicy::MinimumExpanding
);
234 QWidget
*controls
=new QWidget(itsPreviewSplitter
);
236 itsGroupSplitter
=new QSplitter(controls
);
237 itsGroupSplitter
->setSizePolicy(QSizePolicy::MinimumExpanding
, QSizePolicy::MinimumExpanding
);
240 QBoxLayout
*mainLayout
=new QBoxLayout(QBoxLayout::TopToBottom
, this),
241 *controlLayout
=new QBoxLayout(QBoxLayout::TopToBottom
, controls
);
243 itsGroupsWidget
=new QWidget(itsGroupSplitter
);
244 itsFontsWidget
=new QWidget(itsGroupSplitter
);
245 itsPreviewWidget
=new QWidget(itsPreviewSplitter
);
247 CToolBar
*toolbar
=new CToolBar(this),
248 *previewToolbar
=new CToolBar(itsPreviewWidget
);
249 QGridLayout
*groupsLayout
=new QGridLayout(itsGroupsWidget
),
250 *fontsLayout
=new QGridLayout(itsFontsWidget
);
251 QBoxLayout
*previewLayout
=new QBoxLayout(QBoxLayout::TopToBottom
, itsPreviewWidget
);
253 controlLayout
->setMargin(0);
254 controlLayout
->setSpacing(KDialog::spacingHint());
255 mainLayout
->setMargin(0);
256 mainLayout
->setSpacing(KDialog::spacingHint());
257 groupsLayout
->setMargin(0);
258 groupsLayout
->setSpacing(KDialog::spacingHint());
259 fontsLayout
->setMargin(0);
260 fontsLayout
->setSpacing(KDialog::spacingHint());
263 itsPreviewControl
=new CPreviewSelectAction(itsPreviewWidget
);
265 previewToolbar
->addAction(itsPreviewControl
);
267 previewLayout
->setMargin(0);
268 previewLayout
->setSpacing(KDialog::spacingHint());
270 QFrame
*previewFrame
=new QFrame(itsPreviewWidget
);
271 QBoxLayout
*previewFrameLayout
=new QBoxLayout(QBoxLayout::LeftToRight
, previewFrame
);
273 previewFrameLayout
->setMargin(0);
274 previewFrameLayout
->setSpacing(0);
275 previewFrame
->setFrameShape(QFrame::StyledPanel
);
276 previewFrame
->setFrameShadow(QFrame::Sunken
);
277 previewFrame
->setSizePolicy(QSizePolicy::Minimum
, QSizePolicy::MinimumExpanding
);
279 itsPreview
=new CFontPreview(previewFrame
);
280 itsPreview
->setWhatsThis(i18n("This displays a preview of the selected font."));
281 itsPreview
->setContextMenuPolicy(Qt::CustomContextMenu
);
282 previewFrameLayout
->addWidget(itsPreview
);
285 KActionMenu
*settingsMenu
=new KActionMenu(KIcon("configure"), i18n("Settings"), this);
286 KAction
*changeTextAct
=new KAction(KIcon("edit-rename"), i18n("Change Preview Text..."), this),
287 *duplicateFontsAct
=new KAction(KIcon("system-search"), i18n("Scan For Duplicate Fonts..."), this);
288 //*validateFontsAct=new KAction(KIcon("checkmark"), i18n("Validate Fonts..."), this);
289 //*downloadFontsAct=new KAction(KIcon("go-down"), i18n("Download Fonts..."), this);
291 itsToolsMenu
=new KActionMenu(KIcon("system-run"), i18n("Tools"), this);
292 itsMgtMode
=new KToggleAction(KIcon("preferences-desktop-font-installer"),
293 i18n("Font Management Mode"), this),
294 itsShowPreview
=new KToggleAction(KIcon("view-preview"), i18n("Show Large Preview"), this);
295 settingsMenu
->addAction(itsMgtMode
);
296 itsMgtMode
->setChecked(true);
297 settingsMenu
->addSeparator();
298 settingsMenu
->addAction(itsShowPreview
);
299 settingsMenu
->addAction(changeTextAct
);
300 settingsMenu
->setDelayed(false);
301 itsToolsMenu
->addAction(duplicateFontsAct
);
302 //itsToolsMenu->addAction(validateFontsAct);
303 //itsToolsMenu->addAction(downloadFontsAct);
304 itsToolsMenu
->setDelayed(false);
305 toolbar
->addAction(settingsMenu
);
306 toolbar
->addAction(itsToolsMenu
);
311 itsModeControl
=new QComboBox(toolbar
);
312 itsModeAct
=toolbar
->addWidget(itsModeControl
);
313 toolbar
->addSeparator();
316 itsFilter
=new CFontFilter(toolbar
);
317 toolbar
->addWidget(itsFilter
);
319 // Details - Groups...
320 itsGroupList
=new CGroupList(itsGroupsWidget
);
321 itsGroupListView
=new CGroupListView(itsGroupsWidget
, itsGroupList
);
324 for(int i
=0; i
<3; ++i
)
325 itsModeControl
->addItem(itsGroupList
->group(modeToGrp(i
))->name());
327 KPushButton
*createGroup
=new CPushButton(KGuiItem(QString(), "list-add",
328 i18n("Create a new group")),
331 itsDeleteGroupControl
=new CPushButton(KGuiItem(QString(), "edit-delete",
332 i18n("Remove group")),
335 itsEnableGroupControl
=new CPushButton(KGuiItem(QString(), "enablefont",
336 i18n("Enable all disabled fonts in the current group")),
339 itsDisableGroupControl
=new CPushButton(KGuiItem(QString(), "disablefont",
340 i18n("Disable all enabled fonts in the current group")),
343 groupsLayout
->addWidget(itsGroupListView
, 0, 0, 1, 5);
344 groupsLayout
->addWidget(createGroup
, 1, 0);
345 groupsLayout
->addWidget(itsDeleteGroupControl
, 1, 1);
346 groupsLayout
->addWidget(itsEnableGroupControl
, 1, 2);
347 groupsLayout
->addWidget(itsDisableGroupControl
, 1, 3);
348 groupsLayout
->addItem(new QSpacerItem(itsDisableGroupControl
->width(), KDialog::spacingHint(),
349 QSizePolicy::Expanding
, QSizePolicy::Fixed
), 1, 4);
350 // Details - Fonts...
351 itsFontList
=new CFontList(itsFontsWidget
);
352 itsFontListView
=new CFontListView(itsFontsWidget
, itsFontList
);
353 itsFontListView
->setSizePolicy(QSizePolicy::MinimumExpanding
, QSizePolicy::MinimumExpanding
);
354 itsFontListView
->readConfig(cg
);
356 itsAddFontControl
=new CPushButton(KGuiItem(i18n("Add..."), "list-add",
357 i18n("Install fonts")),
360 itsDeleteFontControl
=new CPushButton(KGuiItem(i18n("Delete..."), "edit-delete",
361 i18n("Delete all selected fonts")),
364 itsEnableFontControl
=new CPushButton(KGuiItem(i18n("Enable"), "enablefont",
365 i18n("Enable all selected fonts")),
368 itsDisableFontControl
=new CPushButton(KGuiItem(i18n("Disable"), "disablefont",
369 i18n("Disable all selected fonts")),
372 fontsLayout
->addWidget(itsFontListView
, 0, 0, 1, 5);
373 fontsLayout
->addWidget(itsAddFontControl
, 1, 0);
374 fontsLayout
->addWidget(itsDeleteFontControl
, 1, 1);
375 fontsLayout
->addWidget(itsEnableFontControl
, 1, 2);
376 fontsLayout
->addWidget(itsDisableFontControl
, 1, 3);
377 fontsLayout
->addItem(new QSpacerItem(KDialog::spacingHint(), KDialog::spacingHint(),
378 QSizePolicy::Expanding
, QSizePolicy::Fixed
), 1, 4);
380 // Details - Status...
381 QWidget
*statusWidget
=new QWidget(this);
382 QBoxLayout
*statusLayout
=new QBoxLayout(QBoxLayout::LeftToRight
, statusWidget
);
383 itsStatusLabel
= new QLabel(statusWidget
);
384 itsStatusLabel
->setSizePolicy(QSizePolicy::MinimumExpanding
, QSizePolicy::Fixed
);
385 itsListingProgress
=new CProgressBar(statusWidget
, itsStatusLabel
->height());
386 itsListingProgress
->setRange(0, 100);
387 statusLayout
->setMargin(0);
388 statusLayout
->setSpacing(KDialog::spacingHint());
389 statusLayout
->addWidget(itsStatusLabel
);
390 statusLayout
->addItem(new QSpacerItem(0, itsListingProgress
->height()+4,
391 QSizePolicy::Fixed
, QSizePolicy::Fixed
));
392 statusLayout
->addWidget(itsListingProgress
);
395 controlLayout
->addWidget(toolbar
);
396 controlLayout
->addWidget(itsGroupSplitter
);
397 mainLayout
->addWidget(itsPreviewSplitter
);
398 mainLayout
->addWidget(statusWidget
);
399 previewLayout
->addWidget(previewToolbar
);
400 previewLayout
->addWidget(previewFrame
);
402 // Set size of widgets...
403 itsPreviewSplitter
->setChildrenCollapsible(false);
404 itsGroupSplitter
->setChildrenCollapsible(false);
405 itsGroupSplitter
->setStretchFactor(0, 0);
406 itsGroupSplitter
->setStretchFactor(1, 1);
407 itsPreviewSplitter
->setStretchFactor(0, 1);
408 itsPreviewSplitter
->setStretchFactor(1, 0);
410 toolbar
->setSizePolicy(QSizePolicy::MinimumExpanding
, QSizePolicy::Fixed
);
412 // Set sizes for 3 views...
413 QList
<int> defaultSizes
;
418 QList
<int> sizes(cg
.readEntry(CFG_PREVIEW_SPLITTER_SIZES
, defaultSizes
));
423 itsPreviewSplitter
->setSizes(sizes
);
425 defaultSizes
=QList
<int>();
428 sizes
=cg
.readEntry(CFG_GROUP_SPLITTER_SIZES
, defaultSizes
);
433 itsGroupSplitter
->setSizes(sizes
);
435 // Connect signals...
436 connect(itsFilter
, SIGNAL(textChanged(const QString
&)), itsFontListView
, SLOT(filterText(const QString
&)));
437 connect(itsFilter
, SIGNAL(criteriaChanged(int, qulonglong
)), itsFontListView
, SLOT(filterCriteria(int, qulonglong
)));
438 connect(itsGroupListView
, SIGNAL(del()), SLOT(removeGroup()));
439 connect(itsGroupListView
, SIGNAL(print()), SLOT(printGroup()));
440 connect(itsGroupListView
, SIGNAL(enable()), SLOT(enableGroup()));
441 connect(itsGroupListView
, SIGNAL(disable()), SLOT(disableGroup()));
442 connect(itsGroupListView
, SIGNAL(copyFonts()), SLOT(copyFonts()));
443 connect(itsGroupListView
, SIGNAL(moveFonts()), SLOT(moveFonts()));
444 connect(itsGroupListView
, SIGNAL(itemSelected(const QModelIndex
&)),
445 SLOT(groupSelected(const QModelIndex
&)));
446 connect(itsGroupListView
, SIGNAL(info(const QString
&)),
447 SLOT(showInfo(const QString
&)));
448 connect(itsGroupList
, SIGNAL(refresh()), SLOT(refreshFontList()));
449 connect(itsFontList
, SIGNAL(started()), SLOT(listingStarted()));
450 connect(itsFontList
, SIGNAL(finished()), SLOT(listingCompleted()));
451 connect(itsFontList
, SIGNAL(percent(int)), itsListingProgress
, SLOT(setValue(int)));
452 connect(itsFontList
, SIGNAL(status(const QString
&)), itsStatusLabel
,
453 SLOT(setText(const QString
&)));
454 connect(itsFontListView
, SIGNAL(del()), SLOT(deleteFonts()));
455 connect(itsFontListView
, SIGNAL(print()), SLOT(print()));
456 connect(itsFontListView
, SIGNAL(enable()), SLOT(enableFonts()));
457 connect(itsFontListView
, SIGNAL(disable()), SLOT(disableFonts()));
458 connect(itsFontListView
, SIGNAL(reload()), SLOT(reload()));
459 connect(itsFontListView
, SIGNAL(fontsDropped(const QSet
<KUrl
> &)),
460 SLOT(addFonts(const QSet
<KUrl
> &)));
461 connect(itsFontListView
, SIGNAL(itemSelected(const QModelIndex
&, bool, bool)),
462 SLOT(fontSelected(const QModelIndex
&, bool, bool)));
463 connect(itsFontListView
, SIGNAL(refresh()), SLOT(setStatusBar()));
464 connect(itsGroupListView
, SIGNAL(unclassifiedChanged()), itsFontListView
, SLOT(refreshFilter()));
465 connect(createGroup
, SIGNAL(clicked()), SLOT(addGroup()));
466 connect(itsDeleteGroupControl
, SIGNAL(clicked()), SLOT(removeGroup()));
467 connect(itsEnableGroupControl
, SIGNAL(clicked()), SLOT(enableGroup()));
468 connect(itsDisableGroupControl
, SIGNAL(clicked()), SLOT(disableGroup()));
469 connect(itsAddFontControl
, SIGNAL(clicked()), SLOT(addFonts()));
470 connect(itsDeleteFontControl
, SIGNAL(clicked()), SLOT(deleteFonts()));
471 connect(itsEnableFontControl
, SIGNAL(clicked()), SLOT(enableFonts()));
472 connect(itsDisableFontControl
, SIGNAL(clicked()), SLOT(disableFonts()));
473 connect(itsMgtMode
, SIGNAL(toggled(bool)), SLOT(toggleFontManagement(bool)));
474 connect(itsShowPreview
, SIGNAL(toggled(bool)), SLOT(showPreview(bool)));
475 connect(changeTextAct
, SIGNAL(triggered(bool)), SLOT(changeText()));
476 connect(itsPreviewControl
, SIGNAL(range(const QList
<CFcEngine::TRange
> &)),
477 itsPreview
, SLOT(setUnicodeRange(const QList
<CFcEngine::TRange
> &)));
478 connect(duplicateFontsAct
, SIGNAL(triggered(bool)), SLOT(duplicateFonts()));
479 //connect(validateFontsAct, SIGNAL(triggered(bool)), SLOT(validateFonts()));
480 //connect(downloadFontsAct, SIGNAL(triggered(bool)), SLOT(downloadFonts()));
482 connect(itsModeControl
, SIGNAL(activated(int)), SLOT(selectMode(int)));
484 itsMgtMode
->setChecked(cg
.readEntry(CFG_FONT_MGT_MODE
, false));
485 itsShowPreview
->setChecked(cg
.readEntry(CFG_SHOW_PREVIEW
, false));
486 showPreview(itsShowPreview
->isChecked());
487 itsPreviewWidget
->setVisible(itsShowPreview
->isChecked());
488 toggleFontManagement(itsMgtMode
->isChecked());
492 toolbar
->link(previewToolbar
);
493 previewToolbar
->link(toolbar
);
496 CKCmFontInst::~CKCmFontInst()
498 KConfigGroup
cg(&itsConfig
, CFG_GROUP
);
500 cg
.writeEntry(CFG_PREVIEW_SPLITTER_SIZES
, itsPreviewSplitter
->sizes());
501 cg
.writeEntry(CFG_GROUP_SPLITTER_SIZES
, itsGroupSplitter
->sizes());
502 cg
.writeEntry(CFG_FONT_MGT_MODE
, itsMgtMode
->isChecked());
503 cg
.writeEntry(CFG_SHOW_PREVIEW
, itsShowPreview
->isChecked());
504 itsFontListView
->writeConfig(cg
);
506 delete itsExportFile
;
509 QString
CKCmFontInst::quickHelp() const
512 ? i18n("<h1>Font Installer</h1><p> This module allows you to"
513 " install TrueType, Type1, and Bitmap"
514 " fonts.</p><p>You may also install fonts using Konqueror:"
515 " type fonts:/ into Konqueror's location bar"
516 " and this will display your installed fonts. To install a"
517 " font, simply copy one into the folder.</p>")
518 : i18n("<h1>Font Installer</h1><p> This module allows you to"
519 " install TrueType, Type1, and Bitmap"
520 " fonts.</p><p>You may also install fonts using Konqueror:"
521 " type fonts:/ into Konqueror's location bar"
522 " and this will display your installed fonts. To install a"
523 " font, simply copy it into the appropriate folder - "
524 " \"%1\" for fonts available to just yourself, or "
525 " \"%2\" for system-wide fonts (available to all).</p>",
526 i18n(KFI_KIO_FONTS_USER
), i18n(KFI_KIO_FONTS_SYS
));
529 void CKCmFontInst::fontSelected(const QModelIndex
&index
, bool en
, bool dis
)
531 itsDeleteFontControl
->setEnabled(false);
532 itsDisableFontControl
->setEnabled(en
);
533 itsEnableFontControl
->setEnabled(dis
);
537 CFontModelItem
*mi
=static_cast<CFontModelItem
*>(index
.internalPointer());
538 CFontItem
*font
=NULL
;
541 font
=static_cast<CFontItem
*>(index
.internalPointer());
543 font
=(static_cast<CFamilyItem
*>(index
.internalPointer()))->regularFont();
547 if(itsShowPreview
->isChecked())
549 KUrl
url(font
->isEnabled()
551 : font
->fileName().isEmpty()
552 ? font
->url() : KUrl::fromPath(font
->fileName()));
554 itsPreview
->showFont(url
, font
->isEnabled() ? font
->name() : QString(),
555 font
->styleInfo(), font
->isEnabled() ? 1 : font
->index());
557 itsDeleteFontControl
->setEnabled(true);
562 void CKCmFontInst::reload()
568 itsGroupList
->rescan();
572 void CKCmFontInst::addFonts()
576 QString
filter("application/x-font-ttf application/x-font-otf "
577 "application/x-font-type1");
579 if(itsMgtMode
->isChecked() && FC::bitmapsEnabled())
580 filter
+=" application/x-font-pcf application/x-font-bdf";
582 filter
+=" fonts/package";
584 KUrl::List list
=KFileDialog::getOpenUrls(KUrl(), filter
, this, i18n("Add Fonts"));
589 KUrl::List::Iterator
it(list
.begin()),
594 if(KFI_KIO_FONTS_PROTOCOL
!=(*it
).protocol()) // Do not try to install from fonts:/ !!!
596 KUrl
url(KIO::NetAccess::mostLocalUrl(*it
, this));
598 if(url
.isLocalFile())
600 QString
file(url
.path());
602 if(Misc::isPackage(file
)) // If its a package we need to unzip 1st...
604 KZip
zip(url
.path());
609 if(zip
.open(QIODevice::ReadOnly
))
611 const KArchiveDirectory
*zipDir
=zip
.directory();
615 QStringList
fonts(zipDir
->entries());
619 QStringList::ConstIterator
it(fonts
.begin()),
624 const KArchiveEntry
*entry
=zipDir
->entry(*it
);
626 if(entry
&& entry
->isFile())
630 itsTempDir
=new KTempDir(KStandardDirs::locateLocal("tmp",
631 KFI_TMP_DIR_PREFIX
));
632 itsTempDir
->setAutoRemove(true);
635 ((KArchiveFile
*)entry
)->copyTo(itsTempDir
->name());
637 QString
name(entry
->name());
640 // Cant install hidden fonts, therefore need to
642 if(Misc::isHidden(name
))
644 ::rename(QFile::encodeName(itsTempDir
->name()+name
).data(),
645 QFile::encodeName(itsTempDir
->name()+name
.mid(1)).data());
649 KUrl
url(itsTempDir
->name()+name
);
651 if(!Misc::isMetrics(name
))
659 else if(!Misc::isMetrics(url
))
662 else if(!Misc::isMetrics(url
))
672 void CKCmFontInst::groupSelected(const QModelIndex
&index
)
674 CGroupListItem
*grp
=NULL
;
677 grp
=static_cast<CGroupListItem
*>(index
.internalPointer());
679 itsFontListView
->setFilterGroup(grp
);
683 // Check fonts listed within group are still valid!
684 if(grp
&& grp
->isCustom() && !grp
->validated())
686 QSet
<QString
> remList
;
687 QSet
<QString
>::Iterator
it(grp
->families().begin()),
688 end(grp
->families().end());
691 if(!itsFontList
->hasFamily(*it
))
696 itsGroupList
->removeFromGroup(grp
, *it
);
701 void CKCmFontInst::print(bool all
)
704 // In order to support printing of newly installed/enabled fonts, the actual printing
705 // is carried out by the kfontinst helper app. This way we know Qt's font list will be
707 if(!working() && (!itsPrintProc
|| QProcess::NotRunning
==itsPrintProc
->state()))
709 QString
exe(KStandardDirs::findExe(QLatin1String(KFI_PRINTER
), KStandardDirs::installPath("libexec")));
712 KMessageBox::error(this, i18n("Failed to locate font printer."));
715 QSet
<Misc::TFont
> fonts
;
717 itsFontListView
->getPrintableFonts(fonts
, !all
);
721 CPrintDialog
dlg(this);
722 KConfigGroup
cg(&itsConfig
, CFG_GROUP
);
724 if(dlg
.exec(cg
.readEntry(CFG_FONT_SIZE
, 1)))
726 static const int constSizes
[]={0, 12, 18, 24, 36, 48};
727 QSet
<Misc::TFont
>::ConstIterator
it(fonts
.begin()),
729 KTemporaryFile tmpFile
;
730 bool useFile(fonts
.count()>16),
735 itsPrintProc
=new QProcess(this);
737 itsPrintProc
->kill();
740 // If we have lots of fonts to print, pass kfontinst a tempory groups file to print
741 // instead of passing font by font...
746 QTextStream
str(&tmpFile
);
749 str
<< (*it
).family
<< endl
750 << (*it
).styleInfo
<< endl
;
752 args
<< "--embed" << QString().sprintf("0x%x", (unsigned int)window()->winId())
753 << "--caption" << KGlobal::caption().toUtf8()
754 << "--icon" << "preferences-desktop-font-installer"
755 << "--size" << QString().setNum(constSizes
[dlg
.chosenSize() < 6 ? dlg
.chosenSize() : 2])
756 << "--listfile" << tmpFile
.fileName()
761 KMessageBox::error(this, i18n("Failed to save list of fonts to print."));
767 args
<< "--embed" << QString().sprintf("0x%x", (unsigned int)window()->winId())
768 << "--caption" << KGlobal::caption().toUtf8()
769 << "--icon" << "preferences-desktop-font-installer"
770 << "--size" << QString().setNum(constSizes
[dlg
.chosenSize()<6 ? dlg
.chosenSize() : 2]);
773 args
<< "--pfont" << QString((*it
).family
.toUtf8()+','+QString().setNum((*it
).styleInfo
));
778 itsPrintProc
->start(exe
, args
);
780 if(itsPrintProc
->waitForStarted(1000))
783 tmpFile
.setAutoRemove(false);
786 KMessageBox::error(this, i18n("Failed to start font printer."));
788 cg
.writeEntry(CFG_FONT_SIZE
, dlg
.chosenSize());
792 KMessageBox::information(this, i18n("There are no printable fonts.\n"
793 "You can only print non-bitmap and enabled fonts."),
794 i18n("Cannot Print"));
799 void CKCmFontInst::deleteFonts()
803 CJobRunner::ItemList urls
;
804 QStringList fontNames
;
805 QSet
<Misc::TFont
> fonts
;
808 itsDeletedFonts
.clear();
809 itsFontListView
->getFonts(urls
, fontNames
, &fonts
, &hasSys
, true);
812 KMessageBox::information(this, i18n("You did not select anything to delete."),
813 i18n("Nothing to Delete"));
816 QSet
<Misc::TFont
>::ConstIterator
it(fonts
.begin()),
821 itsDeletedFonts
.insert((*it
).family
);
823 switch(fontNames
.count())
828 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNo(this,
829 i18n("<p>Do you really want to "
830 "delete</p><p>\'<b>%1</b>\'?</p>", fontNames
.first()),
831 i18n("Delete Font"), KStandardGuiItem::del());
834 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNoList(this,
835 i18np("Do you really want to delete this font?",
836 "Do you really want to delete these %1 fonts?",
838 fontNames
, i18n("Delete Fonts"), KStandardGuiItem::del());
841 if(doIt
&& (!hasSys
|| itsRunner
->getAdminPasswd(this)))
843 itsStatusLabel
->setText(i18n("Deleting font(s)..."));
844 doCmd(CJobRunner::CMD_DELETE
, urls
, KUrl());
850 void CKCmFontInst::copyFonts()
854 CJobRunner::ItemList urls
;
855 QStringList fontNames
;
856 bool fromSys(itsGroupListView
->isSystem());
858 itsDeletedFonts
.clear();
859 itsFontListView
->getFonts(urls
, fontNames
, NULL
, NULL
, true);
862 KMessageBox::information(this, i18n("You did not select anything to copy."),
863 i18n("Nothing to Copy"));
868 switch(fontNames
.count())
873 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNo(this,
874 i18n("<p>Do you really want to "
875 "copy</p><p>\'<b>%1</b>\'?</p>", fontNames
.first()),
876 i18n("Copy Font"), KGuiItem(i18n("Copy")));
879 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNoList(this,
880 i18np("Do you really want to copy this font?",
881 "Do you really want to copy these %1 fonts?",
883 fontNames
, i18n("Copy Fonts"), KGuiItem(i18n("Copy")));
886 if(doIt
&& (fromSys
|| itsRunner
->getAdminPasswd(this)))
888 itsStatusLabel
->setText(i18n("Copying font(s)..."));
889 doCmd(CJobRunner::CMD_COPY
, urls
, baseUrl(!fromSys
));
895 void CKCmFontInst::moveFonts()
899 CJobRunner::ItemList urls
;
900 QStringList fontNames
;
902 itsDeletedFonts
.clear();
903 itsFontListView
->getFonts(urls
, fontNames
, NULL
, NULL
, true);
906 KMessageBox::information(this, i18n("You did not select anything to move."),
907 i18n("Nothing to Move"));
912 switch(fontNames
.count())
917 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNo(this,
918 i18n("<p>Do you really want to "
919 "move</p><p>\'<b>%1</b>\'?</p>", fontNames
.first()),
920 i18n("Move Font"), KGuiItem(i18n("Move")));
923 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNoList(this,
924 i18np("Do you really want to move this font?",
925 "Do you really want to move these %1 fonts?",
927 fontNames
, i18n("Move Fonts"), KGuiItem(i18n("Move")));
930 if(doIt
&& itsRunner
->getAdminPasswd(this))
932 itsStatusLabel
->setText(i18n("Moving font(s)..."));
933 doCmd(CJobRunner::CMD_MOVE
, urls
, baseUrl(!itsGroupListView
->isSystem()));
939 void CKCmFontInst::enableFonts()
944 void CKCmFontInst::disableFonts()
949 void CKCmFontInst::addGroup()
952 QString
name(KInputDialog::getText(i18n("Create New Group"),
953 i18n("Please enter the name of the new group:"),
954 i18n("New Group"), &ok
, this));
956 if(ok
&& !name
.isEmpty())
957 itsGroupList
->createGroup(name
);
960 void CKCmFontInst::removeGroup()
962 if(itsGroupList
->removeGroup(itsGroupListView
->currentIndex()))
966 void CKCmFontInst::enableGroup()
971 void CKCmFontInst::disableGroup()
976 void CKCmFontInst::changeText()
981 QRegExpValidator
validator(QRegExp(".*"), 0L);
982 QString
oldStr(CFcEngine::instance()->getPreviewString()),
983 newStr(KInputDialog::getText(i18n("Preview String"),
984 i18n("Please enter new string:"),
985 oldStr
, &status
, this, &validator
));
987 if(status
&& oldStr
!=newStr
)
989 CFcEngine::instance()->setPreviewString(newStr
);
990 itsFontList
->forceNewPreviews();
992 if(itsPreview
->width()>6)
993 itsPreview
->showFont();
998 void CKCmFontInst::showPreview(bool s
)
1000 itsPreviewWidget
->setVisible(s
);
1003 void CKCmFontInst::duplicateFonts()
1005 CDuplicatesDialog
dlg(this, itsRunner
, itsFontList
);
1006 CJobRunner::ItemList update
;
1010 if(dlg
.modifiedUser())
1011 update
.append(baseUrl(false));
1012 if(!Misc::root() && dlg
.modifiedSys())
1013 update
.append(baseUrl(true));
1016 doCmd(CJobRunner::CMD_UPDATE
, update
, KUrl());
1019 //void CKCmFontInst::validateFonts()
1023 //void CKCmFontInst::downloadFonts()
1027 void CKCmFontInst::print()
1032 void CKCmFontInst::printGroup()
1037 void CKCmFontInst::listingStarted()
1039 showInfo(i18n("Scanning font list..."));
1040 itsListingProgress
->show();
1043 void CKCmFontInst::listingCompleted()
1045 if(itsDeletedFonts
.count())
1047 QSet
<QString
>::Iterator
it(itsDeletedFonts
.begin()),
1048 end(itsDeletedFonts
.end());
1050 for(; it
!=end
; ++it
)
1051 if(!itsFontList
->hasFamily(*it
))
1052 itsGroupList
->removeFamily(*it
);
1054 itsDeletedFonts
.clear();
1057 QSet
<QString
> foundries
;
1059 itsFontList
->getFoundries(foundries
);
1060 itsFilter
->setFoundries(foundries
);
1062 itsListingProgress
->hide();
1063 itsFontListView
->selectFirstFont();
1066 void CKCmFontInst::refreshFontList()
1068 itsFontListView
->refreshFilter();
1072 void CKCmFontInst::refreshFamilies()
1074 QSet
<QString
> enabledFamilies
,
1078 itsFontList
->getFamilyStats(enabledFamilies
, disabledFamilies
, partialFamilies
);
1079 itsGroupList
->updateStatus(enabledFamilies
, disabledFamilies
, partialFamilies
);
1083 void CKCmFontInst::showInfo(const QString
&info
)
1086 if(itsLastStatusBarMsg
.isEmpty())
1090 itsStatusLabel
->setText(itsLastStatusBarMsg
);
1091 itsLastStatusBarMsg
=QString();
1095 if(itsLastStatusBarMsg
.isEmpty())
1096 itsLastStatusBarMsg
=itsStatusLabel
->text();
1097 itsStatusLabel
->setText(info
);
1101 void CKCmFontInst::setStatusBar()
1106 bool selectedEnabled
=false,
1107 selectedDisabled
=false;
1109 if(0==itsFontList
->families().count())
1110 itsStatusLabel
->setText(i18n("No fonts"));
1113 itsFontListView
->stats(enabled
, disabled
, partial
);
1114 itsFontListView
->selectedStatus(selectedEnabled
, selectedDisabled
);
1116 QString
text(i18np("1 Font", "%1 Fonts", enabled
+disabled
+partial
));
1118 if(disabled
||partial
)
1119 text
+=i18n(" (%1 Enabled, %2 Disabled, %3 Partial)", enabled
, disabled
, partial
);
1121 itsStatusLabel
->setText(text
);
1124 CGroupListItem::EType
type(itsGroupListView
->getType());
1126 bool isStd(CGroupListItem::CUSTOM
==type
);
1128 itsAddFontControl
->setEnabled(CGroupListItem::ALL
==type
||CGroupListItem::UNCLASSIFIED
==type
||
1129 CGroupListItem::PERSONAL
==type
||CGroupListItem::SYSTEM
==type
);
1130 itsDeleteGroupControl
->setEnabled(isStd
);
1131 itsEnableGroupControl
->setEnabled(disabled
||partial
);
1132 itsDisableGroupControl
->setEnabled(isStd
&& (enabled
||partial
));
1134 itsGroupListView
->controlMenu(itsDeleteGroupControl
->isEnabled(),
1135 itsEnableGroupControl
->isEnabled(),
1136 itsDisableGroupControl
->isEnabled(), enabled
||partial
);
1138 itsEnableFontControl
->setEnabled(selectedDisabled
);
1139 itsDisableFontControl
->setEnabled(selectedEnabled
);
1140 itsDeleteFontControl
->setEnabled(selectedEnabled
||selectedDisabled
);
1143 void CKCmFontInst::addFonts(const QSet
<KUrl
> &src
)
1145 if(!working() && src
.count() && !itsGroupListView
->isCustom())
1153 switch(getCurrentGroupType())
1155 case CGroupListItem::ALL
:
1156 case CGroupListItem::UNCLASSIFIED
:
1157 switch(KMessageBox::questionYesNoCancel(this,
1158 i18n("Do you wish to install the font(s) for personal use "
1159 "(only usable by you), or "
1160 "system-wide (usable by all users)?"),
1161 i18n("Where to Install"), KGuiItem(i18n(KFI_KIO_FONTS_USER
)),
1162 KGuiItem(i18n(KFI_KIO_FONTS_SYS
))))
1164 case KMessageBox::Yes
:
1165 dest
=baseUrl(false);
1167 case KMessageBox::No
:
1168 if(itsRunner
->getAdminPasswd(this))
1170 else if(KMessageBox::Yes
==KMessageBox::questionYesNo(this,
1171 i18n("Would you like to install the font(s) for personal use?"),
1172 i18n("Authorization Failed")))
1173 dest
=baseUrl(false);
1178 case KMessageBox::Cancel
:
1182 case CGroupListItem::PERSONAL
:
1183 dest
=baseUrl(false);
1185 case CGroupListItem::SYSTEM
:
1186 if(itsRunner
->getAdminPasswd(this))
1188 else if(KMessageBox::Yes
==KMessageBox::questionYesNo(this,
1189 i18n("Would you like to install the font(s) for personal use?"),
1190 i18n("Authorization Failed")))
1191 dest
=baseUrl(false);
1201 QSet
<KUrl
>::ConstIterator it
,
1205 // Check if font has any associated AFM or PFM file...
1206 itsStatusLabel
->setText(i18n("Looking for any associated files..."));
1210 itsProgress
=new KProgressDialog(this, i18n("Scanning Files..."),
1211 i18n("Looking for additional files to install..."));
1212 itsProgress
->setModal(true);
1213 itsProgress
->setAutoReset(true);
1214 itsProgress
->setAutoClose(true);
1217 itsProgress
->setAllowCancel(false);
1218 itsProgress
->setMinimumDuration(500);
1219 itsProgress
->progressBar()->show();
1220 itsProgress
->progressBar()->setRange(0, src
.size());
1221 itsProgress
->progressBar()->setValue(0);
1223 int steps
=src
.count()<200 ? 1 : src
.count()/10;
1224 for(it
=src
.begin(); it
!=end
; ++it
)
1226 KUrl::List associatedUrls
;
1228 itsProgress
->setLabelText(i18n("Looking for files associated with %1", (*it
).prettyUrl()));
1229 itsProgress
->progressBar()->setValue(itsProgress
->progressBar()->value()+1);
1230 if(1==steps
|| 0==(itsProgress
->progressBar()->value()%steps
))
1232 bool dialogVisible(itsProgress
->isVisible());
1233 QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents
);
1234 if(dialogVisible
&& !itsProgress
->isVisible()) // User closed dialog! re-open!!!
1235 itsProgress
->show();
1238 CJobRunner::getAssociatedUrls(*it
, associatedUrls
, false, this);
1241 KUrl::List::Iterator
aIt(associatedUrls
.begin()),
1242 aEnd(associatedUrls
.end());
1244 for(; aIt
!=aEnd
; ++aIt
)
1247 itsProgress
->close();
1249 CJobRunner::ItemList installUrls
;
1252 for(it
=copy
.begin(); it
!=end
; ++it
)
1253 installUrls
.append(*it
);
1255 itsStatusLabel
->setText(i18n("Installing font(s)..."));
1256 doCmd(CJobRunner::CMD_INSTALL
, installUrls
, dest
);
1260 void CKCmFontInst::toggleFontManagement(bool on
)
1263 itsMgtMode
->setChecked(!on
);
1267 itsPreviewControl
->setStd();
1268 itsPreviewControl
->setMode(on
? CPreviewSelectAction::ScriptsOnly
: CPreviewSelectAction::Basic
);
1269 itsToolsMenu
->setVisible(on
);
1270 itsFontListView
->setMgtMode(on
);
1271 itsFilter
->setMgtMode(on
);
1273 itsModeAct
->setVisible(!on
);
1274 itsEnableFontControl
->setVisible(on
);
1275 itsDisableFontControl
->setVisible(on
);
1277 itsGroupsWidget
->setVisible(on
);
1282 void CKCmFontInst::selectMode(int mode
)
1284 selectGroup(modeToGrp(mode
));
1287 void CKCmFontInst::selectGroup(CGroupListItem::EType grp
)
1289 QModelIndex
current(itsGroupListView
->currentIndex());
1291 if(current
.isValid())
1293 CGroupListItem
*grpItem
=static_cast<CGroupListItem
*>(current
.internalPointer());
1295 if(grpItem
&& grp
==grpItem
->type())
1298 itsGroupListView
->selectionModel()->select(current
,
1299 QItemSelectionModel::Deselect
);
1302 QModelIndex
idx(itsGroupList
->index(grp
));
1304 itsGroupListView
->selectionModel()->select(idx
, QItemSelectionModel::Select
);
1305 itsGroupListView
->setCurrentIndex(idx
);
1307 itsFontListView
->refreshFilter();
1311 void CKCmFontInst::toggleGroup(bool enable
)
1313 QModelIndex
idx(itsGroupListView
->currentIndex());
1317 CGroupListItem
*grp
=static_cast<CGroupListItem
*>(idx
.internalPointer());
1320 toggleFonts(enable
, grp
->name());
1324 void CKCmFontInst::toggleFonts(bool enable
, const QString
&grp
)
1328 CJobRunner::ItemList urls
;
1332 itsFontListView
->getFonts(urls
, fonts
, NULL
, &hasSys
, grp
.isEmpty(), !enable
, enable
);
1335 KMessageBox::information(this,
1336 enable
? i18n("You did not select anything to enable.")
1337 : i18n("You did not select anything to disable."),
1338 enable
? i18n("Nothing to Enable") : i18n("Nothing to Disable"));
1340 toggleFonts(urls
, fonts
, enable
, grp
, hasSys
);
1344 void CKCmFontInst::toggleFonts(CJobRunner::ItemList
&urls
, const QStringList
&fonts
, bool enable
,
1345 const QString
&grp
, bool hasSys
)
1349 switch(fonts
.count())
1354 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNo(this,
1356 ? enable
? i18n("<p>Do you really want to "
1357 "enable</p><p>\'<b>%1</b>\'?</p>", fonts
.first())
1358 : i18n("<p>Do you really want to "
1359 "disable</p><p>\'<b>%1</b>\'?</p>", fonts
.first())
1360 : enable
? i18n("<p>Do you really want to "
1361 "enable</p><p>\'<b>%1</b>\', "
1362 "contained within group \'<b>%2</b>\'?</p>",
1364 : i18n("<p>Do you really want to "
1365 "disable</p><p>\'<b>%1</b>\', "
1366 "contained within group \'<b>%2</b>\'?</p>",
1367 fonts
.first(), grp
),
1368 enable
? i18n("Enable Font") : i18n("Disable Font"),
1369 enable
? KGuiItem(i18n("Enable"), "enablefont", i18n("Enable font"))
1370 : KGuiItem(i18n("Disable"), "disablefont", i18n("Disable font")));
1373 doIt
= KMessageBox::Yes
==KMessageBox::warningYesNoList(this,
1375 ? enable
? i18np("Do you really want to enable this font?",
1376 "Do you really want to enable these %1 fonts?",
1378 : i18np("Do you really want to disable this font?",
1379 "Do you really want to disable these %1 fonts?",
1381 : enable
? i18np("<p>Do you really want to enable this font "
1382 "contained within group \'<b>%2</b>\'?</p>",
1383 "<p>Do you really want to enable these %1 fonts "
1384 "contained within group \'<b>%2</b>\'?</p>",
1386 : i18np("<p>Do you really want to disable this font "
1387 "contained within group \'<b>%2</b>\'?</p>",
1388 "<p>Do you really want to disable these %1 fonts "
1389 "contained within group \'<b>%2</b>\'?</p>",
1392 enable
? i18n("Enable Fonts") : i18n("Disable Fonts"),
1393 enable
? KGuiItem(i18n("Enable"), "enablefont", i18n("Enable fonts"))
1394 : KGuiItem(i18n("Disable"), "disablefont", i18n("Disable fonts")));
1397 if(doIt
&& (!hasSys
|| itsRunner
->getAdminPasswd(this)))
1400 itsStatusLabel
->setText(i18n("Enabling font(s)..."));
1402 itsStatusLabel
->setText(i18n("Disabling font(s)..."));
1404 doCmd(enable
? CJobRunner::CMD_ENABLE
: CJobRunner::CMD_DISABLE
, urls
, KUrl());
1408 bool CKCmFontInst::working(bool displayMsg
)
1411 if(NULL
!=itsJob
|| itsFontList
->active())
1414 KMessageBox::error(this, i18n("Sorry, the installer is currently busy. Please wait for the "
1415 "current operation to terminate."));
1422 KUrl
CKCmFontInst::baseUrl(bool sys
)
1425 ? KUrl(KFI_KIO_FONTS_PROTOCOL
":/")
1427 ? KUrl(KFI_KIO_FONTS_PROTOCOL
":/"KFI_KIO_FONTS_SYS
"/")
1428 : KUrl(KFI_KIO_FONTS_PROTOCOL
":/"KFI_KIO_FONTS_USER
"/");
1431 void CKCmFontInst::selectMainGroup()
1433 selectGroup(/*Misc::root() || itsMgtMode->isChecked()
1434 ? */CGroupListItem::ALL
/* : CGroupListItem::PERSONAL*/);
1436 itsModeControl
->setCurrentIndex(grpToMode(/*Misc::root()
1437 ? */CGroupListItem::ALL
1438 /*: CGroupListItem::PERSONAL*/));
1441 void CKCmFontInst::doCmd(CJobRunner::ECommand cmd
, const CJobRunner::ItemList
&urls
, const KUrl
&dest
)
1443 itsFontList
->setAutoUpdate(false);
1444 itsRunner
->exec(cmd
, urls
, dest
);
1445 CFcEngine::instance()->setDirty();
1447 itsFontList
->scan();
1448 itsFontList
->setAutoUpdate(true);
1453 CGroupListItem::EType
CKCmFontInst::getCurrentGroupType()
1455 if(itsMgtMode
->isChecked())
1456 return itsGroupListView
->getType();
1457 else if(itsModeControl
&& itsModeControl
->currentIndex() >= 0)
1458 return modeToGrp(itsModeControl
->currentIndex());
1460 return CGroupListItem::ALL
;
1465 #include "KCmFontInst.moc"