[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/3.5/kdelibs
From: Luboš Luňák <l.lunak () kde ! org>
Date: 2006-08-23 15:25:51
Message-ID: 1156346751.673331.13546.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 576245 by lunakl:
Add support for more icon contexts, make sure non-existent
contexts are not shown in the icon dialog (#120562).
M +10 -0 kdecore/kiconloader.cpp
M +5 -0 kdecore/kiconloader.h
M +28 -0 kdecore/kicontheme.cpp
M +14 -1 kdecore/kicontheme.h
M +59 -10 kio/kfile/kicondialog.cpp
M +3 -0 kio/kfile/kicondialog.h
--- branches/KDE/3.5/kdelibs/kdecore/kiconloader.cpp #576244:576245
@@ -1131,6 +1131,16 @@
return res2;
}
+// used by KIconDialog to find out which contexts to offer in a combobox
+bool KIconLoader::hasContext(KIcon::Context context) const
+{
+ for ( KIconThemeNode *themeNode = d->links.first() ; themeNode ;
+ themeNode = d->links.next() )
+ if( themeNode->theme->hasContext( context ))
+ return true;
+ return false;
+}
+
KIconEffect * KIconLoader::iconEffect() const
{
return &d->mpEffect;
--- branches/KDE/3.5/kdelibs/kdecore/kiconloader.h #576244:576245
@@ -262,6 +262,11 @@
KIcon::Context context=KIcon::Any) const;
/**
+ * @internal
+ */
+ bool hasContext( KIcon::Context context ) const;
+
+ /**
* Returns a list of all icons (*.png or *.xpm extension) in the
* given directory.
* @param iconsDir the directory to search in
--- branches/KDE/3.5/kdelibs/kdecore/kicontheme.cpp #576244:576245
@@ -340,6 +340,20 @@
return iconlistResult;
}
+bool KIconTheme::hasContext(KIcon::Context context) const
+{
+ QPtrListIterator<KIconThemeDir> dirs(mDirs);
+ KIconThemeDir *dir;
+
+ for ( ; dirs.current(); ++dirs)
+ {
+ dir = dirs.current();
+ if ((context == KIcon::Any) || (context == dir->context()))
+ return true;
+ }
+ return false;
+}
+
KIcon KIconTheme::iconPath(const QString& name, int size, KIcon::MatchType match) const
{
KIcon icon;
@@ -517,6 +531,20 @@
mContext = KIcon::Application;
else if (tmp == "Actions")
mContext = KIcon::Action;
+ else if (tmp == "Animations")
+ mContext = KIcon::Animation;
+ else if (tmp == "Categories")
+ mContext = KIcon::Category;
+ else if (tmp == "Emblems")
+ mContext = KIcon::Emblem;
+ else if (tmp == "Emotes")
+ mContext = KIcon::Emote;
+ else if (tmp == "International")
+ mContext = KIcon::International;
+ else if (tmp == "Places")
+ mContext = KIcon::Place;
+ else if (tmp == "Status")
+ mContext = KIcon::StatusIcon;
else {
kdDebug(264) << "Invalid Context= line for icon theme: " << mDir << "\n";
return;
--- branches/KDE/3.5/kdelibs/kdecore/kicontheme.h #576244:576245
@@ -51,7 +51,14 @@
Application, ///< An icon that represents an application.
Device, ///< An icon that represents a device.
FileSystem, ///< An icon that represents a file system.
- MimeType ///< An icon that represents a mime type (or file type).
+ MimeType, ///< An icon that represents a mime type (or file type).
+ Animation, ///< An icon that is animated.
+ Category, ///< An icon that represents a category.
+ Emblem, ///< An icon that adds information to an existing icon.
+ Emote, ///< An icon that expresses an emotion.
+ International, ///< An icon that represents a country's flag.
+ Place, ///< An icon that represents a location (e.g. 'home', 'trash').
+ StatusIcon ///< An icon that represents an event.
};
/**
@@ -313,6 +320,12 @@
* @see KIcon::isValid will return true, and false otherwise.
*/
KIcon iconPath(const QString& name, int size, KIcon::MatchType match) const;
+
+ /**
+ * Returns true if the theme has any icons for the given context.
+ * @since 3.5.5
+ */
+ bool hasContext( KIcon::Context context ) const;
/**
* List all icon themes installed on the system, global and local.
--- branches/KDE/3.5/kdelibs/kio/kfile/kicondialog.cpp #576244:576245
@@ -15,6 +15,8 @@
#include <config.h>
+#include <assert.h>
+
#include <kiconviewsearchline.h>
#include <kapplication.h>
@@ -324,13 +326,49 @@
// When pressing Ok or Cancel, stop loading icons
connect(this, SIGNAL(hidden()), mpCanvas, SLOT(stopLoading()));
- // The order must match the context definitions in KIcon.
- mpCombo->insertItem(i18n("Actions"));
- mpCombo->insertItem(i18n("Applications"));
- mpCombo->insertItem(i18n("Devices"));
- mpCombo->insertItem(i18n("Filesystems"));
- mpCombo->insertItem(i18n("Mimetypes"));
+ static const char* const context_text[] = {
+ I18N_NOOP( "Actions" ),
+ I18N_NOOP( "Animations" ),
+ I18N_NOOP( "Applications" ),
+ I18N_NOOP( "Categories" ),
+ I18N_NOOP( "Devices" ),
+ I18N_NOOP( "Emblems" ),
+ I18N_NOOP( "Emotes" ),
+ I18N_NOOP( "Filesystems" ),
+ I18N_NOOP( "International" ),
+ I18N_NOOP( "Mimetypes" ),
+ I18N_NOOP( "Places" ),
+ I18N_NOOP( "Status" ) };
+ static const KIcon::Context context_id[] = {
+ KIcon::Action,
+ KIcon::Animation,
+ KIcon::Application,
+ KIcon::Category,
+ KIcon::Device,
+ KIcon::Emblem,
+ KIcon::Emote,
+ KIcon::FileSystem,
+ KIcon::International,
+ KIcon::MimeType,
+ KIcon::Place,
+ KIcon::StatusIcon };
+ mNumContext = 0;
+ int cnt = sizeof( context_text ) / sizeof( context_text[ 0 ] );
+ // check all 3 arrays have same sizes
+ assert( cnt == sizeof( context_id ) / sizeof( context_id[ 0 ] )
+ && cnt == sizeof( mContextMap ) / sizeof( mContextMap[ 0 ] ));
+ for( int i = 0;
+ i < cnt;
+ ++i )
+ {
+ if( mpLoader->hasContext( context_id[ i ] ))
+ {
+ mpCombo->insertItem(i18n( context_text[ i ] ));
+ mContextMap[ mNumContext++ ] = context_id[ i ];
+ }
+ }
mpCombo->setFixedSize(mpCombo->sizeHint());
+
mpBrowseBut->setFixedWidth(mpCombo->width());
// Make the dialog a little taller
@@ -422,8 +460,7 @@
mpRb2->setChecked(user);
mpCombo->setEnabled(!user);
mpBrowseBut->setEnabled(user);
- mContext = context;
- mpCombo->setCurrentItem(mContext-1);
+ setContext( context );
}
void KIconDialog::setup(KIcon::Group group, KIcon::Context context,
@@ -441,8 +478,20 @@
mpRb2->setEnabled( !lockUser || user );
mpCombo->setEnabled(!user);
mpBrowseBut->setEnabled( user && !lockCustomDir );
+ setContext( context );
+}
+
+void KIconDialog::setContext( KIcon::Context context )
+{
mContext = context;
- mpCombo->setCurrentItem(mContext-1);
+ for( int i = 0;
+ i < mNumContext;
+ ++i )
+ if( mContextMap[ i ] == context )
+ {
+ mpCombo->setCurrentItem( i );
+ return;
+ }
}
void KIconDialog::setCustomLocation( const QString& location )
@@ -562,7 +611,7 @@
void KIconDialog::slotContext(int id)
{
- mContext = static_cast<KIcon::Context>(id+1);
+ mContext = static_cast<KIcon::Context>( mContextMap[ id ] );
showIcons();
}
--- branches/KDE/3.5/kdelibs/kio/kfile/kicondialog.h #576244:576245
@@ -222,6 +222,7 @@
private:
void init();
void showIcons();
+ void setContext( KIcon::Context context );
int mGroupOrSize;
KIcon::Context mContext;
@@ -234,6 +235,8 @@
KProgress *mpProgress;
KIconLoader *mpLoader;
KIconCanvas *mpCanvas;
+ int mNumContext;
+ KIcon::Context mContextMap[ 12 ]; // must match KIcon::Context size, code has assert
protected:
virtual void virtual_hook( int id, void* data );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic