Support extra theme dependent icons via import-script
[quassel.git] / icons / import / import_theme.pl
index f02e3f8..e835a76 100755 (executable)
@@ -5,9 +5,9 @@
 # This relies on all icons being requested using one of the convenience constructors in
 # (K)IconLoader, like this:
 #   widget->setIcon(SmallIcon("fubar"));
-# Additional icons can be specified in extra-icons; you can also blacklist icons.
+# Additional icons can be specified in whitelist-icons; you can also blacklist icons.
 #
-# NOTE: Unless you are a Quassel developer and need to bump the icons we ship, you shouldn'y
+# NOTE: Unless you are a Quassel developer and need to bump the icons we ship, you shouldn't
 #       need to use this script!
 
 # USAGE: ./import/import_theme.pl $systhemefolder $themename
@@ -24,13 +24,16 @@ my $themename = shift;
 $themename = $themename ? $themename : "oxygen";
 my $qrcfile_kde = $themename . ".qrc";
 
-my $extrafile = "import/extra-icons";
+my $whitelistfile = "import/whitelist-icons";
 my $blacklistfile = "import/blacklisted-icons";
+my $extrafile = "import/extra-icons.qrc." . $themename;
 
 my %req_icons;
 my %found_icons;
 my %blacklist;
-my %extra;
+my %themeblacklist;
+my %whitelist;
+my $extrafilecontent;
 
 # First, load the icon blacklist
 open BLACKLIST, "<$blacklistfile" or die "Could not open $blacklistfile\n";
@@ -48,6 +51,7 @@ if ($hasthemeblacklist) {
     s/#.*//;
     next unless my ($name) = /([-\w]+)\s*/;
     $blacklist{$name} = 1;
+    $themeblacklist{$name} = 1;
   }
   close BLACKLIST;
 } else {
@@ -63,14 +67,27 @@ foreach(@results) {
     unless exists $blacklist{$name};
 }
 
-# Add extra icons
-open EXTRA, "<$extrafile" or die "Could not open $extrafile\n";
-while(<EXTRA>) {
+# Add whitelist icons
+open WHITELIST, "<$whitelistfile" or die "Could not open $whitelistfile\n";
+while(<WHITELIST>) {
   s/#.*//;
   next unless my ($name) = /([-\w]+)\s*/;
-  $req_icons{$name} = 1;
+  $req_icons{$name} = 1
+    unless exists $themeblacklist{$name};
+}
+close WHITELIST;
+
+# Read in extra-icons
+my $hasthemeextrafile = 1;
+local $/;
+open EXTRAFILE, "<$extrafile" or $hasthemeextrafile = 0;
+if($hasthemeextrafile) {
+  binmode EXTRAFILE;
+  $extrafilecontent = <EXTRAFILE>;
+  close EXTRAFILE;
+} else {
+  $extrafilecontent = "";
 }
-close EXTRA;
 
 # Clean old output dir
 print "Removing old $themename...\n";
@@ -131,7 +148,7 @@ system "cp $themefolder/AUTHORS $themefolder/CONTRIBUTING $themefolder/COPYING $
 
 # Generate .qrc
 my @file_list;
-generate_qrc($themename, $qrcfile_kde);
+generate_qrc($themename, $qrcfile_kde, $extrafilecontent);
 
 print "Done.\n";
 
@@ -142,11 +159,13 @@ sub generate_qrc {
 
   @file_list = ();
   find(\&push_icon_path, $dir);
+  @file_list = sort(@file_list );
   my $files = join "\n", @file_list;
 
   my $qrc = "<RCC>\n"
            ."  <qresource prefix=\"/icons\">\n"
            ."$files\n"
+           ."$extrafilecontent\n"
            ."  </qresource>\n"
            ."</RCC>\n";