Re: [pgadmin-hackers] Improved copying from Edit Data Grid - rough

2006-02-06 Thread Edward Di Geronimo Jr.

Andreas Pflug wrote:

Please note that the query tool output needs major redesign to use a 
virtual control; the current (wx) implementation is dead slow on some 
platforms.


Have any pointers on where I can find out more information on what needs 
to be done?


Ed

---(end of broadcast)---
TIP 4: Have you searched our list archives?

  http://archives.postgresql.org


Re: [pgadmin-hackers] Improved copying from Edit Data Grid - rough

2006-02-06 Thread Andreas Pflug

Dave Page wrote:


 If you'd like to look at adding similar
functionality to the query tool, that'd be great :-)


Please note that the query tool output needs major redesign to use a 
virtual control; the current (wx) implementation is dead slow on some 
platforms.


Regards,
Andreas

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [pgadmin-hackers] Improved copying from Edit Data Grid - rough

2006-02-06 Thread Dave Page
 

> -Original Message-
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> Edward Di Geronimo Jr.
> Sent: 03 February 2006 20:02
> To: Magnus Hagander
> Cc: pgadmin-hackers@postgresql.org
> Subject: Re: [pgadmin-hackers] Improved copying from Edit 
> Data Grid - rough
> 
> Magnus Hagander wrote:
> 
> >It think the quoting used when copy here should be the one from Copy
> >Quoting and not Export Quoting. I actually had it on my list 
> to do that.
> >While you're working in taht code anyway, maybe do that while at it?
> >  
> >
> Ok, I went back and did that as well. While in the process, I noticed 
> that the setting to quote only strings also resulted in numbers being 
> quoted. I redid the logic to fix that.
> 
> >Does this also fix the complete weirdness that you can have 
> *both* a row
> >*and* a cell in a different row selected at the same time? That keeps
> >throwing me off all the time.
> >  
> >
> I didn't change the selection behavior at all, only the copy behavior.
> 
> This version of the patch cleans up the code from my last patch. I 
> changed the 3 overloaded versions of GetExportLine so that only 1 
> version does the real work. The other two versions simply modify the 
> input and call the real version.
> 
> One other addition in this version - if you hit copy without 
> any cells 
> highlighted, it will copy the cell the cursor is in.

Sorry for taking a while to get to this.

Patch applied, with a minor change to make a couple of ints unsigned to
avoid compiler warnings. If you'd like to look at adding similar
functionality to the query tool, that'd be great :-)

Thanks Ed.

Regards, Dave.

---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly


Re: [pgadmin-hackers] Improved copying from Edit Data Grid - rough

2006-02-03 Thread Edward Di Geronimo Jr.

Magnus Hagander wrote:


It think the quoting used when copy here should be the one from Copy
Quoting and not Export Quoting. I actually had it on my list to do that.
While you're working in taht code anyway, maybe do that while at it?
 

Ok, I went back and did that as well. While in the process, I noticed 
that the setting to quote only strings also resulted in numbers being 
quoted. I redid the logic to fix that.



Does this also fix the complete weirdness that you can have *both* a row
*and* a cell in a different row selected at the same time? That keeps
throwing me off all the time.
 


I didn't change the selection behavior at all, only the copy behavior.

This version of the patch cleans up the code from my last patch. I 
changed the 3 overloaded versions of GetExportLine so that only 1 
version does the real work. The other two versions simply modify the 
input and call the real version.


One other addition in this version - if you hit copy without any cells 
highlighted, it will copy the cell the cursor is in.


Ed
Index: frm/frmEditGrid.cpp
===
--- frm/frmEditGrid.cpp (revision 4983)
+++ frm/frmEditGrid.cpp (working copy)
@@ -325,11 +325,13 @@
 
 void frmEditGrid::OnCopy(wxCommandEvent &ev)
 {
-wxArrayInt rows=sqlGrid->GetSelectedRows();
+wxString str;
+int copied = 0;
 size_t i;
-if (rows.GetCount())
-{
-wxString str;
+
+if (sqlGrid->GetSelectedRows().GetCount()) {
+wxArrayInt rows=sqlGrid->GetSelectedRows();
+
 for (i=0 ; i < rows.GetCount() ; i++)
 {
 str.Append(sqlGrid->GetTable()->GetExportLine(rows.Item(i)));
@@ -337,13 +339,61 @@
 if (rows.GetCount() > 1)
 str.Append(END_OF_LINE);
 }
-if (wxTheClipboard->Open())
+
+copied = rows.GetCount();
+}
+else if (sqlGrid->GetSelectedCols().GetCount()) {
+wxArrayInt cols=sqlGrid->GetSelectedCols();
+size_t numRows = sqlGrid->GetNumberRows();
+
+for (i=0 ; i < numRows ; i++)
 {
-wxTheClipboard->SetData(new wxTextDataObject(str));
-wxTheClipboard->Close();
+str.Append(sqlGrid->GetTable()->GetExportLine(i, cols));
+
+if (numRows > 1)
+str.Append(END_OF_LINE);
 }
+
+copied = numRows;
 }
-SetStatusText(wxString::Format(_("%d rows copied to clipboard."), 
rows.GetCount()));
+else if (sqlGrid->GetSelectionBlockTopLeft().GetCount() > 0 &&
+sqlGrid->GetSelectionBlockBottomRight().GetCount() > 0) {
+int x1, x2, y1, y2;
+
+x1 = sqlGrid->GetSelectionBlockTopLeft()[0].GetCol();
+x2 = sqlGrid->GetSelectionBlockBottomRight()[0].GetCol();
+y1 = sqlGrid->GetSelectionBlockTopLeft()[0].GetRow();
+y2 = sqlGrid->GetSelectionBlockBottomRight()[0].GetRow();
+
+for (i = y1; i <= y2; i++) {
+str.Append(sqlGrid->GetTable()->GetExportLine(i, x1, x2));
+
+if (y2 > y1)
+str.Append(END_OF_LINE);
+}
+
+copied = y2 - y1 + 1;
+}
+else {
+int row, col;
+
+row = sqlGrid->GetGridCursorRow();
+col = sqlGrid->GetGridCursorCol();
+
+str.Append(sqlGrid->GetTable()->GetExportLine(row, col, col));
+copied = 1;
+}
+
+if (copied && wxTheClipboard->Open())
+{
+wxTheClipboard->SetData(new wxTextDataObject(str));
+wxTheClipboard->Close();
+}
+else {
+copied = 0;
+}
+
+SetStatusText(wxString::Format(_("%d rows copied to clipboard."), copied));
 }
 
 
@@ -1405,31 +1455,55 @@
 
 wxString sqlTable::GetExportLine(int row)
 {
+return GetExportLine(row, 0, nCols - 1);
+}
+
+wxString sqlTable::GetExportLine(int row, int col1, int col2)
+{
+wxArrayInt cols;
 wxString str;
+int i;
+
+if (col2 < col1)
+return str;
+
+cols.Alloc(col2 - col1 + 1);
+for (i = col1; i <= col2; i++) {
+cols.Add(i);
+}
+
+return GetExportLine(row, cols);
+}
+
+
+wxString sqlTable::GetExportLine(int row, wxArrayInt cols)
+{
+wxString str;
 cacheLine *line = GetLine(row);
 if (line)
 {
 int col;
-for (col=0 ; col < nCols ; col++)
+for (col=0 ; col < cols.Count() ; col++)
 {
-if (col)
+if (col > 0)
 str.Append(settings->GetExportColSeparator());
-bool needQuote = settings->GetExportQuoting() > 1;
 
-// find out if string
-switch (columns[col].type)
-{
-case PGTYPCLASS_NUMERIC:
-case PGTYPCLASS_BOOL:
-break;
-default:
-needQuote=true;
-break;
+bool needQuote  = false;
+
+if (settings->GetCopyQuoting() == 1)
+   {
+/* Quote strings only */
+needQ

Re: [pgadmin-hackers] Improved copying from Edit Data Grid - rough patch

2006-02-03 Thread Magnus Hagander
Note: I'm far from an authority in this group :-) I keep getting my own
patches bumpbed. But since it comes in contact with some of the changes
I've made lately, I'll fire off a couple of comments anyway.

(Nope, haven't looked at the actual code)


> I want to get involved in helping polish the pgAdmin 
> interface. As a first step, I've modified the copy for the 
> Edit Data grid to have much more flexiblity in copying data 
> from the grid. The present code only allows copying entire 
> rows. With my changes, you can now copy rows, columns, or the 
> highlighted range.

It think the quoting used when copy here should be the one from Copy
Quoting and not Export Quoting. I actually had it on my list to do that.
While you're working in taht code anyway, maybe do that while at it?

Does this also fix the complete weirdness that you can have *both* a row
*and* a cell in a different row selected at the same time? That keeps
throwing me off all the time.

And yes, this sounds like a great feature :-)


> The next thing I would like to after finishing this is modify 
> the query windows to display the results in a grid instead of 
> a list. The ability to copy arbitrary sections of the results 
> would be a huge help in my daily work. I figured this could 
> would most likely be reusable for that goal.

Sounds like a good idea. Assuming there are no other problems with the
grid (I don't really know enough about wx to comment on that part).

//Magnus

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


[pgadmin-hackers] Improved copying from Edit Data Grid - rough patch

2006-02-02 Thread Edward Di Geronimo Jr.

Hello,

I want to get involved in helping polish the pgAdmin interface. As a 
first step, I've modified the copy for the Edit Data grid to have much 
more flexiblity in copying data from the grid. The present code only 
allows copying entire rows. With my changes, you can now copy rows, 
columns, or the highlighted range.


The attached patch is very rough. The most notable rough spot is it 
creates two new overloaded versions of sqlTable::GetExportLine which 
duplicate a lot of code from the original. These can definitely be 
consolidated, however, I wasn't sure what the preferred style would be 
for it.


The next thing I would like to after finishing this is modify the query 
windows to display the results in a grid instead of a list. The ability 
to copy arbitrary sections of the results would be a huge help in my 
daily work. I figured this could would most likely be reusable for that 
goal.


Feedback would be appreciated.

Ed
Index: src/frm/frmEditGrid.cpp
===
--- src/frm/frmEditGrid.cpp (revision 4983)
+++ src/frm/frmEditGrid.cpp (working copy)
@@ -323,6 +323,7 @@
 }
 
 
+#if 0
 void frmEditGrid::OnCopy(wxCommandEvent &ev)
 {
 wxArrayInt rows=sqlGrid->GetSelectedRows();
@@ -345,8 +346,70 @@
 }
 SetStatusText(wxString::Format(_("%d rows copied to clipboard."), 
rows.GetCount()));
 }
+#endif
 
+void frmEditGrid::OnCopy(wxCommandEvent &ev)
+{
+wxString str;
+int copied = 0;
+size_t i;
 
+if (sqlGrid->GetSelectedRows().GetCount()) {
+wxArrayInt rows=sqlGrid->GetSelectedRows();
+
+for (i=0 ; i < rows.GetCount() ; i++)
+{
+str.Append(sqlGrid->GetTable()->GetExportLine(rows.Item(i)));
+
+if (rows.GetCount() > 1)
+str.Append(END_OF_LINE);
+}
+
+copied = rows.GetCount();
+}
+else if (sqlGrid->GetSelectedCols().GetCount()) {
+wxArrayInt cols=sqlGrid->GetSelectedCols();
+size_t numRows = sqlGrid->GetNumberRows();
+
+for (i=0 ; i < numRows ; i++)
+{
+str.Append(sqlGrid->GetTable()->GetExportLine(i, cols));
+
+if (numRows > 1)
+str.Append(END_OF_LINE);
+}
+
+copied = numRows;
+}
+else if (sqlGrid->GetSelectionBlockTopLeft().GetCount() > 0 &&
+sqlGrid->GetSelectionBlockBottomRight().GetCount() > 0) {
+int x1, x2, y1, y2;
+
+x1 = sqlGrid->GetSelectionBlockTopLeft()[0].GetCol();
+x2 = sqlGrid->GetSelectionBlockBottomRight()[0].GetCol();
+y1 = sqlGrid->GetSelectionBlockTopLeft()[0].GetRow();
+y2 = sqlGrid->GetSelectionBlockBottomRight()[0].GetRow();
+
+for (i = y1; i <= y2; i++) {
+str.Append(sqlGrid->GetTable()->GetExportLine(i, x1, x2));
+
+if (y2 > y1)
+str.Append(END_OF_LINE);
+}
+
+copied = y2 - y1 + 1;
+}
+
+if (copied && wxTheClipboard->Open())
+{
+wxTheClipboard->SetData(new wxTextDataObject(str));
+wxTheClipboard->Close();
+}
+
+SetStatusText(wxString::Format(_("%d rows copied to clipboard."), copied));
+}
+
+
 void frmEditGrid::OnHelp(wxCommandEvent &ev)
 {
 DisplayHelp(this, wxT("editgrid"), viewdata_xpm);
@@ -1439,6 +1502,79 @@
 }
 
 
+wxString sqlTable::GetExportLine(int row, int col1, int col2)
+{
+wxString str;
+cacheLine *line = GetLine(row);
+int maxCol = (col2 < nCols - 1) ? col2 : (nCols - 1);
+if (line)
+{
+int col;
+for (col=col1 ; col <= maxCol ; col++)
+{
+if (col > col1)
+str.Append(settings->GetExportColSeparator());
+bool needQuote = settings->GetExportQuoting() > 1;
+
+// find out if string
+switch (columns[col].type)
+{
+case PGTYPCLASS_NUMERIC:
+case PGTYPCLASS_BOOL:
+break;
+default:
+needQuote=true;
+break;
+}
+if (needQuote)
+str.Append(settings->GetExportQuoteChar());
+
+str.Append(line->cols[col]);
+
+if (needQuote)
+str.Append(settings->GetExportQuoteChar());
+}
+}
+return str;
+}
+
+
+wxString sqlTable::GetExportLine(int row, wxArrayInt cols)
+{
+wxString str;
+cacheLine *line = GetLine(row);
+if (line)
+{
+int col;
+for (col=0 ; col < cols.Count() ; col++)
+{
+if (col > 0)
+str.Append(settings->GetExportColSeparator());
+bool needQuote = settings->GetExportQuoting() > 1;
+
+// find out if string
+switch (columns[cols[col]].type)
+{
+case PGTYPCLASS_NUMERIC:
+case PGTYPCLASS_BOOL:
+break;
+default:
+needQuote=true;
+