Rick Brewster

CodeLab v4.4 (for advanced users) Released November 23, 2019

Recommended Posts

Where do you see this error:

 

2 hours ago, xod said:

Could not load file or assembly '0 bytes loaded from System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Share this post


Link to post
Share on other sites

This error sometimes appears in the Show Error List panel.
Errors do not occur all at once but one at a time as I open the .cs files.
I may have some broken registers because I was infected with malware Mail.Ru.

Thank you for your patience.

Share this post


Link to post
Share on other sites

Sounds like something is interfering with your %temp% directory.  If you aren't deleting those .DLL files in %temp%, then maybe your malware is deleting them. Or maybe your anti-malware software deletes them. I don't know.

 

If that's the case, there's really nothing we can fix up in CodeLab to resolve your issue.

 

Under normal circumstances, restarting Paint.NET will fix that error.

Share this post


Link to post
Share on other sites

izAW177.png

This error occurs after I build a CodeLab plugin.

1. Choose the icon you want to appear in your plugin(16x16px).
2. Build the plugin
3. Close CodeLab
4. Open the icon and try to save it

The icon it can only be saved as SaveAs under another name.
Maybe something is broken in my OS?
Anyone else can reproduce this error?

Otherwise, everything works correctly.

Share this post


Link to post
Share on other sites

CodeLab is probably holding the file open.  I'll look into this one.

 

EDIT: This will be fixed in the next release of CodeLab.

  • Like 1

Share this post


Link to post
Share on other sites

CodeLab 4.3 Released

This is only for Paint.NET 4.2+!

 

Big update today...

 

Changes:
▪ Redesign File > New screen (BoltBait)
▪ HighDPI icons (toe_head2001)
▪ Add Format, Find, and Replace toolbar buttons (toe_head2001)
▪ Add snippet for Try/Catch (toe_head2001)
▪ Bug fixes to Quick Format (toe_head2001)
▪ Added flexible, themeable, customizable message boxes (BoltBait)
▪ Allow arbitrary names for UI fields, also removed UI Elements Renumber command (toe_head2001)
▪ Added light bulb renaming of fields defined in user's script (toe_head2001)
▪ Redesigned UI Builder screen (BoltBait)
▪ Added support for the new Uri Control (BoltBait)
▪ Update clipboard template code (null54)
▪ Improvements to code completion (toe_head2001)
▪ Intelligent Assistance improvements for Extension Methods, Generic Methods, and Generic Types (toe_head2001)
▪ Fixed build screen to not hold the icon file open (BoltBait)
▪ Various code cleanups and improvements (toe_head2001 and BoltBait)


Grab the CodeLab DLL here:

 

http://www.boltbait.com/pdn/CodeLab/


Screenshots:

 

File > New screen redesign:

FileNew.png

 

 

New high resolution icons:

 

NewIcons.png

 

 

Themeable message boxes that can have custom buttons:

 

MsgBoxes.png

 

I was tired of MessageBox being displayed with white backgrounds when running the dark theme.  So, I found FlexibleMessageBox source code and fixed it up for use in Paint.NET... added a few features, like customizable buttons and themes... fixed a few bugs.  I think they look awesome.

 

 

UI Designer redesign and new Web Link control:

UIDesigner.png

 

Notice that the Variables can be specified--you no longer need to use Amount1, Amount2, ...

You can, if you want, but it is not necessary as the defaults are the same as before.

 

We also have the new Web Link control type. This gives IndirectUI the ability to have a clickable link that opens a browser to a specified URL.  If a Display Name is specified it is linked.  If no Display Name is specified, the URL is displayed and linked.

 

Rename Variables:

 

Select the variable you wish to rename and start typing... a light bulb will appear.  Click on that and you can rename your variable everywhere in the script where it appears.

 

RenameVar.png

 

 

New Clipboard Code:

 

Paint.NET v4.2 has a new helper class for accessing the clipboard.  CodeLab has been updated to take advantage of this new service.

 

On the File > New screen, when selecting "Clipboard" in the sample code drop-down box, the following code is now generated:

// Name:
// Submenu:
// Author:
// Title:
// Version:
// Desc:
// Keywords:
// URL:
// Help:
#region UICode
#endregion

private Surface clipboardSurface = null;
private bool readClipboard = false;

protected override void OnDispose(bool disposing)
{
    if (disposing)
    {
        // Release any surfaces or effects you've created.
        if (clipboardSurface != null) clipboardSurface.Dispose();
        clipboardSurface = null;
    }

    base.OnDispose(disposing);
}

void PreRender(Surface dst, Surface src)
{
    if (!readClipboard)
    {
        readClipboard = true;
        clipboardSurface = Services.GetService<IClipboardService>().TryGetSurface();
    }
}

// Here is the main render loop function
void Render(Surface dst, Surface src, Rectangle rect)
{
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        if (IsCancelRequested) return;
        for (int x = rect.Left; x < rect.Right; x++)
        {
            ColorBgra CurrentPixel = src[x,y];
            if (IsCancelRequested) return;
            // If clipboard has an image, get it
            if (clipboardSurface != null)
            {
                CurrentPixel = clipboardSurface.GetBilinearSampleWrapped(x, y);
            }

            // TODO: Add additional pixel processing code here



            dst[x,y] = CurrentPixel;
        }
    }
}

This clipboard code is way faster than the older code CodeLab used to generate.  Notice that the try/catch blocks are gone. That speeds up our code a lot.

 

  • Like 2
  • Upvote 3

Share this post


Link to post
Share on other sites

CodeLab 4.3 in Russian

 

You can find the new version of CodeLab in Russian here.

Вы можете найти новую версию CodeLab на русском языке здесь.

Share this post


Link to post
Share on other sites

CodeLab 4.3 does not retain CheckBox control checked / unchecked status ?

 

Reverted to v4.2  which works correctly.

Edited by xod

Share this post


Link to post
Share on other sites
1 hour ago, xod said:

CodeLab 4.3 does not retain CheckBox control checked / unchecked status ?

 

Indeed. Fixing for next release.

  • Like 1

Share this post


Link to post
Share on other sites

What a shame. I liked the new features of renaming the AmountX variables.
I wonder if it's possible to do the same thing with the RadioButtonList or DropDownList options so that using 'switch variableX' we can use 'case variableX.name:' instead of 'case 0 :, case 1:' etc.

Share this post


Link to post
Share on other sites
28 minutes ago, xod said:

I wonder if it's possible to do the same thing with the RadioButtonList or DropDownList options so that using 'switch variableX' we can use 'case variableX.name:'

 

Possibly, but it would probably be a bit clumsy.  But using numbers is clumsy too...

I do have idea on how to do it though, and it would require you to define an enum for each RadioButtonList or DropDownList. (right now, CodeLab generates these enums for you)

 

In Visual Studio it's much easier to use enums with RadioButtonList and DropDownList.

In CodeLab, the values are just cast to numbers, because that's the easiest thing to do.  (Because CodeLab generates the enums for you "behind the scenes", you have no way of knowing what they're named when you're working in the CodeLab editor.)

Share this post


Link to post
Share on other sites
9 minutes ago, toe_head2001 said:

...it would probably be a bit clumsy.

 

Starting from the beginning (the very first build of CodeLab that I worked on), I have tried to avoid "clumsy" at all costs.

 

I haven't always been successful, of course, but that's always been my goal--that, and ease of use.

  • Like 1

Share this post


Link to post
Share on other sites

Here's one possible solution, and it would retain the easier way too.

#region UICode
RadioButtonControl<Positions> position = 0; // [1] Image Position|On the Left|In the Center|On the Right
#endregion

enum Positions
{
    Left,
    Center,
    Right
}

void Render(Surface dst, Surface src, Rectangle rect)
{
    switch (position)
    {
        case Positions.Left:
            // Code Here
            break;
        case Positions.Center:
            // Code Here
            break;
        case Positions.Right:
            // Code Here
            break;
    }

    dst.CopySurface(src, rect.Location, rect);
}

 

If RadioButtonControl<TEnum> is too clumsy or confusing, a person could just continue using RadioButtonControl.

  • Like 1
  • Upvote 2

Share this post


Link to post
Share on other sites

Ok, I got it. Thank you for the answers.
I really appreciate it your special work for the development of this mini-Visual Studio.

Share this post


Link to post
Share on other sites

I've been using Snippets more and more in Visual Studio.

I wanted to add a bunch of them to CodeLab, but I don't think people want the same snippets that I do.

So... I'm thinking CodeLab could benefit from a Snippet Manager where you can add your own custom snippets.

 

For example, say you're working on your script, and you realize you need to retrieve the current palette.

You can have a snippet called curPal (or whatever), and it would expand into:

IReadOnlyList<ColorBgra> CurrentColors = Services.GetService<IPalettesService>().CurrentPalette; 

 

SnippetManager.png

 

 

As it stands, you have to open the Templates (File -> New), and generate a whole new file. Then you have to copy and paste the relevant line of code from one tab to another.  Unless of course you have that palette code memorized, and are willing to type it out.

 

Who wants this? Or is it just me?

  • Like 1
  • Upvote 3

Share this post


Link to post
Share on other sites

I think this feature will be useful, even for a few encoders. Most likely, this feature will help us to quickly master Snippets in Visual Studio. I want this.

Share this post


Link to post
Share on other sites
On 7/13/2019 at 5:57 PM, BoltBait said:

Rename Variables:

 

Select the variable you wish to rename and start typing... a light bulb will appear.  Click on that and you can rename your variable everywhere in the script where it appears.

 

Fantastic! That was the one thing that drove me crazy when I was reading the source code.  I was confused as heck as to figuring out what Amount1, Amount2, etc, meant without a well described variable name.  This is a great change to CodeLab.

Share this post


Link to post
Share on other sites

Visual Studio has a handy feature where it suggests some generic names for variables. Now CodeLab will have the same feature.

suggestions.png

  • Upvote 3

Share this post


Link to post
Share on other sites

Here's an idea for a potentially annoying feature.

 

startPage.png

 

- It would only show when there's no saved Effect Token. Meaning you haven't opened CodeLab and clicked OK.

- There would be an option to completely disable it. See the CheckBox in the lower-right.

- It could speed up the time it takes to open CodeLab, since a few things would be deferred (the Scintilla control, the Intelligent Assistive initialization, and code compiling).  Although, the next version of CodeLab will already have some improvements to startup time, so the impact may not be grand.

- It would (hopefully) make CodeLab easier to use for first-time users.

 

 

So, a few questions for everyone using Codelab:

If this feature was implemented, would you would disable it?

How often do you use the default code when CodeLab opens? or do you usually Open an existing file or create a New file?

Share this post


Link to post
Share on other sites

I like this idea.

 

5 hours ago, toe_head2001 said:

If this feature was implemented, would you would disable it?

Probably Yes, because that will accumulate the experience in coding. But in any case, it should be possible to re-enable this feature.

 

5 hours ago, toe_head2001 said:

How often do you use the default code when CodeLab opens? or do you usually Open an existing file or create a New file?

I use all three methods equally.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.