Add preferred icon metadata field

pull/16/head
Timothy Pearson 13 years ago
parent 6ddacfff53
commit c5bca102dd

@ -97,6 +97,7 @@ KElfPlugin::KElfPlugin(TQObject *parent, const char *name,
item = addItemInfo(group, "Organization", i18n("Organization"), TQVariant::String);
item = addItemInfo(group, "Version", i18n("Version"), TQVariant::String);
item = addItemInfo(group, "DateTime", i18n("Creation Date/Time"), TQVariant::String);
item = addItemInfo(group, "SystemIcon", i18n("Requested Icon"), TQVariant::String);
item = addItemInfo(group, "Notes", i18n("Comments"), TQVariant::String);
item = addItemInfo(group2, "EmbeddedIcon", i18n("Icon Name(s)"), TQVariant::String);
@ -126,6 +127,7 @@ bool KElfPlugin::readInfo( KFileMetaInfo& info, uint what)
appendItem(group, "Organization", elf_get_resource(handle, ".metadata_organization"));
appendItem(group, "Version", elf_get_resource(handle, ".metadata_version"));
appendItem(group, "DateTime", elf_get_resource(handle, ".metadata_datetime"));
appendItem(group, "SystemIcon", elf_get_resource(handle, ".metadata_sysicon"));
appendItem(group, "Notes", elf_get_resource(handle, ".metadata_notes"));
TQString iconListing;
@ -143,7 +145,7 @@ bool KElfPlugin::readInfo( KFileMetaInfo& info, uint what)
iconListing = entry->name;
}
else {
iconListing = iconListing.append("<p>").append(entry->name);
iconListing = iconListing.append("\n").append(entry->name);
}
break;
}

@ -668,6 +668,13 @@ TQPixmap KFileItem::pixmap( int _size, int _state ) const
{
// Failed to obtain a list of ELF icons
kdWarning() << "failed to obtain ELF icon: " << libr_errmsg() << endl;
// See if there is a system icon we can use
TQString sysIconName = elf_get_resource(handle, ".metadata_sysicon");
if (KGlobal::iconLoader()->iconPath(sysIconName.ascii(), 0, true) != "") {
p = DesktopIcon( sysIconName.ascii(), _size, _state );
}
libr_close(handle);
return p;
}

@ -216,6 +216,13 @@ TQString KURIFilterData::iconName()
{
// Failed to obtain a list of ELF icons
kdWarning() << "failed to obtain ELF icon: " << libr_errmsg() << endl;
// See if there is a system icon we can use
TQString sysIconName = elf_get_resource(handle, ".metadata_sysicon");
if (KGlobal::iconLoader()->iconPath(sysIconName.ascii(), 0, true) != "") {
m_customIconPixmap = DesktopIcon( sysIconName.ascii(), _size, _state );
}
libr_close(handle);
libr_can_continue = 0;
}

@ -58,4 +58,32 @@ iconentry *get_nexticon(iconlist *icons, iconentry *last_entry)
return NULL;
}
return &(icons->entry);
}
TQString elf_get_resource(libr_file *handle, char *section_name)
{
size_t buffer_size = 0;
char *buffer = NULL;
TQString result;
/* Get the resource from the ELF binary */
if(!libr_size(handle, section_name, &buffer_size))
{
kdWarning() << "failed to obtain ELF resource size: " << libr_errmsg() << endl;
return result;
}
/* Get the resource from the ELF file */
buffer = (char *) malloc(buffer_size+1);
buffer[buffer_size] = 0;
if(!libr_read(handle, section_name, buffer))
{
kdWarning() << "failed to obtain ELF resource: " << libr_errmsg() << endl;
goto fail;
}
result = buffer;
fail:
free(buffer);
return result;
}

@ -1,8 +1,13 @@
#include <alloca.h>
#include <stdint.h>
#include <cstdlib>
#include <tqdict.h>
#include <tqvalidator.h>
#include <tqcstring.h>
#include <tqfile.h>
#include <tqdatetime.h>
extern "C" {
#include <libr-icons.h>
@ -45,4 +50,5 @@ extern "C" {
}
int get_iconlist(libr_file *file_handle, iconlist *icons);
iconentry *get_nexticon(iconlist *icons, iconentry *last_entry);
iconentry *get_nexticon(iconlist *icons, iconentry *last_entry);
TQString elf_get_resource(libr_file *handle, char *section_name);

@ -73,7 +73,8 @@ typedef enum {
PARAM_ORGANIZATION = 9,
PARAM_VERSION = 10,
PARAM_DATETIME = 11,
PARAM_NOTES = 12,
PARAM_SYSICON = 12,
PARAM_NOTES = 13,
} eParams;
typedef struct {
@ -209,7 +210,7 @@ int handle_arguments(int argc, char **argv, eMode *mode)
break;
case 'm':
*mode = MODE_SET_METADATA;
required_params = 13;
required_params = 14;
break;
case 'r':
*mode = MODE_RETRIEVE_ICON;
@ -240,7 +241,7 @@ print_icon_usage:
fprintf(stderr, _("usage: %s [-c|-e|-g] elf-file-name\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("usage: %s [-s] elf-file-name uuid\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("usage: %s [-s] elf-file-name uuid\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("usage: %s [-m] elf-file-name \"executable name\" \"description\" \"license\" \"copyright\" \"authors\" \"product\" \"organization\" \"version\" \"datetime\" \"notes\"\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("usage: %s [-m] elf-file-name \"executable name\" \"description\" \"license\" \"copyright\" \"authors\" \"product\" \"organization\" \"version\" \"datetime\" \"sysicon\" \"notes\"\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("If -t is set the TDEDIRS environment variable must include your TDE installation prefix\n"));
fprintf(stderr, _("for example: TDEDIRS=/opt/trinity ./tdelfeditor -t ./konqueror konqueror\n"));
for(i=0;i<ELFICON_OPTIONS;i++)
@ -490,6 +491,7 @@ int main_console(int argc, char **argv)
if (strlen(argv[PARAM_ORGANIZATION]) > 0) add_resource_string(handle, ".metadata_organization", argv[PARAM_ORGANIZATION]);
if (strlen(argv[PARAM_VERSION]) > 0) add_resource_string(handle, ".metadata_version", argv[PARAM_VERSION]);
if (strlen(argv[PARAM_DATETIME]) > 0) add_resource_string(handle, ".metadata_datetime", argv[PARAM_DATETIME]);
if (strlen(argv[PARAM_SYSICON]) > 0) add_resource_string(handle, ".metadata_sysicon", argv[PARAM_SYSICON]);
if (strlen(argv[PARAM_NOTES]) > 0) add_resource_string(handle, ".metadata_notes", argv[PARAM_NOTES]);
} break;
case MODE_SET_EMPTY_UUID:
@ -546,7 +548,8 @@ int main_console(int argc, char **argv)
TQString systemIcon = KGlobal::iconLoader()->iconPath(argv[PARAM_ICON_NAME], 0, true);
if (systemIcon.isNull()) {
systemIcon = KGlobal::iconLoader()->iconPath(argv[PARAM_ICON_NAME], 0, false);
printf("NOT FOUND, using %s\n\r", systemIcon.ascii());
printf("NOT FOUND, refusing to add unknown icon (this message is harmless)\n\r");
goto fail;
}
else {
printf("found %s\n\r", systemIcon.ascii());

Loading…
Cancel
Save