Subject: Patch: New field in frmMain statusbar

From: Adam Scott <[email-masked]>
Date: Sun, 13 Sep 2015 09:19:35 -0600

Hi,

please consider this patch to frmMain.

Situation:  When a user has a large number of databases and connections,
when they select a table or other object in the Object browser tree, they
can lose track of which connection and database the object belongs too.
This makes it really easy for the user to make a mistake and drop an object
on the wrong connection (such as on a Production server instead of a
Development server).  Also as a user is browsing multiple databases and
connections they can lose track of which object they are working on.

Solution: This patch adds a new field in the status bar of the main window
(frmMain), between the two other fields, keeping them the same.  If there's
a currently selected object the field will display it's connection and
database.  If there's no currently selected object, it will be blank.

Here's the danger, if we display the wrong connection and database, the
user could drop the wrong object.  So it's imperative this never has a
bug.  This code change is so small with so little dependencies, it relies
on already used code for such a long time that if it had a bug, then there
are other bigger bugs in the code that would have already shown up.

Regards,
Adam C. Scott

patch generated using Tortoise Git Create Patch Serial

-- 
Sent via pgadmin-hackers mailing list ([email-masked])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

---

From: Dave Page <[email-masked]>
Date: Mon, 14 Sep 2015 09:57:08 +0100

Thanks Adam.

What do others feel about this proposed patch? I can see how it might
be useful, however I'm also concerned about overloading the UI with
more info - and in over a decade I don't recall anyone ever asking for
this feature or complaining of the issue Adam describes (though, it is
clearly feasible).

On Sun, Sep 13, 2015 at 4:19 PM, Adam Scott <[email-masked]> wrote:
> Here's the danger, if we display the wrong connection and database, the user
> could drop the wrong object.  So it's imperative this never has a bug.  This
> code change is so small with so little dependencies, it relies on already
> used code for such a long time that if it had a bug, then there are other
> bigger bugs in the code that would have already shown up.
>
> Regards,
> Adam C. Scott
>

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

---

From: Magnus Hagander <[email-masked]>
Date: Mon, 14 Sep 2015 12:43:37 +0200

I don't have a working pgadmin env at the moment - any chance someone who
has built it could show a screenshot?

I've certainly had customers complain about pgadmin in the case of many
databases, though it's generally been on account of performance, and not
something like this.

//Magnus

On Mon, Sep 14, 2015 at 10:57 AM, Dave Page <[email-masked]> wrote:

> user

-- 
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/

---

From: Adam Scott <[email-masked]>
Date: Mon, 14 Sep 2015 07:34:39 -0600

Hi,

thank you for your time to consider this patch.

Here's a few screenshots on my Windows 7 desktop.  Let me know if you want
to see anything else.
A few observations:

---

From: Magnus Hagander <[email-masked]>
Date: Mon, 14 Sep 2015 18:11:29 +0200

The part that changed is just the one that added db1 and db2, right?

If so I definitely don't think it's a problem with too much info,and think
this patch is good. (I haven't reviewed the code)

//Magnus

---

From: Adam Scott <[email-masked]>
Date: Mon, 14 Sep 2015 13:04:38 -0600

The part that changed was just the database name since I clicked on an
object in a different database on the same conneciton.  If I had selected
an object in a different connection, the connection name would change as
well.

For convenience, in green below, is the additional code to make this happen
(there's other stuff in the patch to add the field in the statusbar not
shown below).

Thank you,
Adam

void frmMain::EndMsg(bool done)
{
    msgLevel--;

    if (!msgLevel)
    {
        // Get the execution time & display it
        float timeval = stopwatch.Time();
        wxString time;
        time.Printf(_("%.2f secs"), (timeval / 1000));
        statusBar->SetStatusText(time, 3);

        wxString connection;
        if (currentObject)
        {
            pgDatabase *db = currentObject->GetDatabase();

            if (db)
                connection = db->GetServer()->GetDisplayName() + wxT(":") +
db->GetDisplayName();
        }

        statusBar->SetStatusText(connection,2);

        // Display the 'Done' message
        if (done)
            statusBar->SetStatusText(timermsg + _(" Done."), 1);
        else
            statusBar->SetStatusText(timermsg + _(" Failed."), 1);

On Mon, Sep 14, 2015 at 10:11 AM, Magnus Hagander <[email-masked]>
wrote:

>> Here's a few screenshots on my Windows 7 desktop.  Let me know if you
>> want to see anything else.
>> A few observations:
>>
>>
>>
>>
>>
>>
>>> I don't have a working pgadmin env at the moment - any chance someone
>>> who has built it could show a screenshot?
>>>

---

From: Adam Scott <[email-masked]>
Date: Mon, 14 Sep 2015 13:22:18 -0600

Apologies all.  I have an updated patch that corrects the previous one.
Before, if you you selected Tablespaces, Group Roles, or Login Roles, it
wouldn't show the connection they are associated with.   The attached patch
supersedes the previous one and corrects the flaw.

Thank you,
Adam

On Mon, Sep 14, 2015 at 1:04 PM, Adam Scott <[email-masked]> wrote:

> For convenience, in green below, is the additional code to make this
> happen (there's other stuff in the patch to add the field in the statusbar
> not shown below).
>
> Thank you,
> Adam
>
>                 connection = db->GetServer()->GetDisplayName() + wxT(":")
> + db->GetDisplayName();
>         }
>
>> If so I definitely don't think it's a problem with too much info,and
>> think this patch is good. (I haven't reviewed the code)
>>
>> //Magnus
>>
>>

---

From: Dave Page <[email-masked]>
Date: Tue, 15 Sep 2015 09:55:43 +0100

> The part that changed is just the one that added db1 and db2, right?

It's the server display name *and* the database name, so to give a
(redacted) example from my machine, I would have:

aws-ap-southeast-1b.xxxxxxxxxxxxxxxx.com (aws-ap-southeast-1b.
xxxxxxxxxxxxxxxx.com:5432):postgres

Which as you can see is quite long.

---

From: Magnus Hagander <[email-masked]>
Date: Tue, 15 Sep 2015 13:14:52 +0200

> Which as you can see is quite long.

I thought the point of display names was to have them nice and short :)
I've certainly never used displaynames that are that long.

Yes, I totally see with names like that it becomes annoying, and certainly
not easy to parse. Perhaps what we really shoul dhave is just displayname +
databasename, and exclude the actual hostname?

---

From: Dave Page <[email-masked]>
Date: Tue, 15 Sep 2015 12:20:34 +0100

On Tue, Sep 15, 2015 at 12:14 PM, Magnus Hagander <[email-masked]> wrote:
> I thought the point of display names was to have them nice and short :) I've
> certainly never used displaynames that are that long.

I generally use the full hostnames (as I have machines in multiple
domains) - and in the places that you currently see them, that length
is actually fine.

> databasename, and exclude the actual hostname?

That would be an improvement, certainly.

---

From: Adam Scott <[email-masked]>
Date: Tue, 15 Sep 2015 08:41:59 -0600

If you have a development host and a production host, the database names
will be the same.  I think the value of the having the new field goes away
if you exclude the hostname.  You won't know what host the object you are
selecting belongs to.  That could be the difference between modifying an
object in development and production.

It seems to me that what you could say about the display name is what could
be said about the connection's display name in the tree control since this
is what is displayed (plus the database name).

What the patch displays answers the questions, "What connection am I on?"
"What database am I on?"

I guess I can work on adding another patch that allows you to customize
what is displayed using frmOptions...?

On Tue, Sep 15, 2015 at 5:20 AM, Dave Page <[email-masked]> wrote:

> I've

---

From: Adam Scott <[email-masked]>
Date: Tue, 15 Sep 2015 09:01:20 -0600

If it displayed what's displayed in the Query editor would that be better?

Thank you,
Adam

On Tue, Sep 15, 2015 at 8:41 AM, Adam Scott <[email-masked]> wrote:

> It seems to me that what you could say about the display name is what
> could be said about the connection's display name in the tree control since
> this is what is displayed (plus the database name).
>

---

From: Dave Page <[email-masked]>
Date: Wed, 16 Sep 2015 16:30:44 +0100

I think so - I realise it's not the display name (which would be
ideal), but it is a condensed name that fully describes the
connection.

---

From: Adam Scott <[email-masked]>
Date: Thu, 17 Sep 2015 07:47:03 -0600

Being consistent with the frmQuery probably helps the user as well.  Here's
the patch to display the connection name as it is displayed in the frmQuery.

Thank you,
Adam

On Wed, Sep 16, 2015 at 9:30 AM, Dave Page <[email-masked]> wrote:

> >>> On Tue, Sep 15, 2015 at 12:14 PM, Magnus Hagander <[email-masked]
> >
> >>> wrote:
> >>> >> On Mon, Sep 14, 2015 at 5:11 PM, Magnus Hagander <
> [email-masked]>
> >>> >> wrote:

---

From: Adam Scott <[email-masked]>
Date: Wed, 23 Sep 2015 07:55:29 -0600

Is the last patch okay?  If there's something more required or anything
please let me know.

Thank you,
Adam

On Thu, Sep 17, 2015 at 7:47 AM, Adam Scott <[email-masked]> wrote:

> Being consistent with the frmQuery probably helps the user as well.
> Here's the patch to display the connection name as it is displayed in the
> frmQuery.
>
> Thank you,
> Adam
>
>
>> >>> On Tue, Sep 15, 2015 at 12:14 PM, Magnus Hagander <
>> [email-masked]>
>> >>> wrote:

---

From: Dave Page <[email-masked]>
Date: Wed, 23 Sep 2015 15:35:54 +0100

> Is the last patch okay?  If there's something more required or anything

Hi

The patch does not apply for me. Can you rebase it against master please?

Thanks.

---

From: Adam Scott <[email-masked]>
Date: Wed, 23 Sep 2015 13:15:38 -0600

Thank you Dave!  I rebased from master.     To get it to build is going to
take some research. It looks like it wants openssl, which I grabbed and
configured for WIN32, but it's not happy.  First error is below.  But this
patch is so straightforward, I'm sharing anyway for the sake of time, as it
was working before.

2>c:\pgadmin3\pgadmin\libssh2\openssl.c(71): error C2037: left of 'e'
specifies undefined struct/union 'rsa_st'

Thanks again!

Adam

---

From: Ashesh Vashi <[email-masked]>
Date: Thu, 24 Sep 2015 07:28:27 +0530

I created batch script to set the environment variable for setting OPENSSL,
WXWIN (wxWidgets).
And, use that batch script in command prompt, and start the devenv (Visual
Studio Development Environment IDE) from there.

Between - you will also require libxml2, libxslt, iconv (binaries of them
kept in a same directory), and environment variable PGBUILD is set for it.
i.e.
c:\pgBuild\iconv\
c:\pgBuild\libxml2
c:\pgBuild\libxslt
And, PGBUILD environment variable is set to "c:\pgBuild".

Hope this helps.

--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company
<http://www.enterprisedb.com>

*http://www.linkedin.com/in/asheshvashi*
<http://www.linkedin.com/in/asheshvashi>

---

From: Dave Page <[email-masked]>
Date: Thu, 24 Sep 2015 16:25:38 +0100

Thanks - patch applied!

---

From: Adam Scott <[email-masked]>
Date: Thu, 24 Sep 2015 18:30:29 -0600

Thank you Ashesh.  I have the pgBuild directory from before when i was
using VS 2008.

 It seems once i used VS 2010 the error appears.

 I did add the environment variable for OPENSSL (c:\openssl) and added
C:\openssl\out32dll to the VC++ Directories->Library Directories.

Right now RSA_new() is just an unresolvable identifier in
pgadmin\libssh2\openssl.c on line 69.