Introjucer Suggestion: Exporter Architecture Indicator


#1

Hi Jules,

I’ve a suggestion regarding the gear icons for each Introjucer exporter config; having a different colour (or other appropriate indicator) to show that it’s aiming at a different architecture.

The graphical change would make it really obvious without having to “open” it.

Case in point - can’t really tell which one is x64 or x86 here:
[attachment=0]Let’s play a game.png[/attachment]
Also, in case you’re wondering, renaming configs to differentiate them makes them confusing to use in VS because there are two drop-downs. (ie: using “Debug” and “Debug x64”, “Release” and “Release x64”, would make 4 options in one dropdown, where you can select Win32 or x64 for any four of them!)


#2

From a code perspective, I can see why you skipped over this post, Jules… (or may just not be interested/too busy)

Regardless, had a bit of fun looking into it, and the solution is not clean because of the way the exporter/config classes are laid out in the files. But I got it working, so here’s a screenshot:
[attachment=0]Exporter Architecture Colours.png[/attachment]

Colour choices are easily modifiable, but here’s what I used:

  • Green for x86
  • Yellow for anything x64 (VS “x64”, XCode “Universal Binary (64-bit)” & “64-bit Intel”)
  • White for “Mac - Native”

#3

In jucer_ConfigPage.cpp:

#include "../Project Saving/jucer_ProjectExport_MSVC.h"
#include "../Project Saving/jucer_ProjectExport_XCode.h"
ProjectSettingsTreeClasses::ConfigItem::getIcon()
{
    Colour colour = Colours::green;

    if (MSVCProjectExporterVC2010::VC2010BuildConfiguration* exp = dynamic_cast<MSVCProjectExporterVC2010::VC2010BuildConfiguration*> (config.get()))
    {
        if (exp->is64Bit())
        {
            colour = Colours::yellow;
        }
    }
    else if (XCodeProjectExporter::XcodeBuildConfiguration* exp = dynamic_cast<XCodeProjectExporter::XcodeBuildConfiguration*> (config.get()))
    {
        if (exp->getMacArchitecture() == osxArch_64Bit
                || exp->getMacArchitecture() == osxArch_64BitUniversal)
        {
            colour = Colours::yellow;
        }
        else if (exp->getMacArchitecture() == osxArch_Native)
        {
            colour = Colours::white;
        }
    }

    return Icon (getIcons().config,
                    getContrastingColour (colour, 0.5f));
}

Notes:

  • I took the lazy approach (no adding files, or moving classes to different files, minimal editing)
  • Had to make VC2010BuildConfiguration a public class (instead of protected)
  • Had to make XcodeBuildConfiguration a public class (instead of protected)
  • It’s not clean because, how I see it, BuildConfiguration itself could potentially return the “Architecture” string

#4

Struggling to see why this matters…

Also, I think a colour-change is entirely the wrong way to show it, because unless if you don’t already know what the colour means, there’s no way of finding out without a lot of head-scratching.

If I really had to do this, my preference would be to append “(64 bit)” to the names shown, but it’d also have to be smart enough to only do that if there are identically-named configs which have different architectures.