Add support for hiding column headers to all lists, via a) context menu + b) via dragging out headers.

This commit is contained in:
Ansgar Becker
2010-04-11 23:57:51 +00:00
parent f7abafca8f
commit 6f9e2a88d2
2 changed files with 20 additions and 71 deletions

View File

@ -525,6 +525,7 @@ object MainForm: TMainForm
Header.DefaultHeight = 17
Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowSortGlyphs, hoVisible]
Header.ParentFont = True
Header.PopupMenu = popupListHeader
Header.SortColumn = 0
Images = ImageListMain
PopupMenu = popupHost
@ -542,6 +543,7 @@ object MainForm: TMainForm
OnGetHint = vstGetHint
OnGetNodeDataSize = ListDatabasesGetNodeDataSize
OnHeaderClick = vstHeaderClick
OnHeaderDraggedOut = vstHeaderDraggedOut
OnInitNode = ListDatabasesInitNode
Columns = <
item
@ -607,6 +609,7 @@ object MainForm: TMainForm
Header.Height = 20
Header.Options = [hoAutoResize, hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowSortGlyphs, hoVisible]
Header.ParentFont = True
Header.PopupMenu = popupListHeader
Header.SortColumn = 0
HintMode = hmTooltip
Images = ImageListMain
@ -629,6 +632,7 @@ object MainForm: TMainForm
OnGetHint = vstGetHint
OnGetNodeDataSize = vstGetNodeDataSize
OnHeaderClick = vstHeaderClick
OnHeaderDraggedOut = vstHeaderDraggedOut
OnInitNode = vstInitNode
Columns = <
item
@ -657,6 +661,7 @@ object MainForm: TMainForm
Header.Height = 20
Header.Options = [hoAutoResize, hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowSortGlyphs, hoVisible]
Header.ParentFont = True
Header.PopupMenu = popupListHeader
Header.SortColumn = 0
HintMode = hmTooltip
Images = ImageListMain
@ -678,6 +683,7 @@ object MainForm: TMainForm
OnGetHint = vstGetHint
OnGetNodeDataSize = vstGetNodeDataSize
OnHeaderClick = vstHeaderClick
OnHeaderDraggedOut = vstHeaderDraggedOut
OnInitNode = vstInitNode
Columns = <
item
@ -728,6 +734,7 @@ object MainForm: TMainForm
Header.Height = 20
Header.Options = [hoAutoResize, hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowSortGlyphs, hoVisible]
Header.ParentFont = True
Header.PopupMenu = popupListHeader
Header.SortColumn = 0
Header.SortDirection = sdDescending
HintMode = hmTooltip
@ -752,6 +759,7 @@ object MainForm: TMainForm
OnGetHint = vstGetHint
OnGetNodeDataSize = vstGetNodeDataSize
OnHeaderClick = vstHeaderClick
OnHeaderDraggedOut = vstHeaderDraggedOut
OnInitNode = vstInitNode
Columns = <
item
@ -873,6 +881,7 @@ object MainForm: TMainForm
Header.Height = 20
Header.Options = [hoAutoResize, hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowSortGlyphs, hoVisible]
Header.ParentFont = True
Header.PopupMenu = popupListHeader
Header.SortColumn = 1
Header.SortDirection = sdDescending
HintMode = hmTooltip
@ -896,6 +905,7 @@ object MainForm: TMainForm
OnGetHint = vstGetHint
OnGetNodeDataSize = vstGetNodeDataSize
OnHeaderClick = vstHeaderClick
OnHeaderDraggedOut = vstHeaderDraggedOut
OnInitNode = vstInitNode
Columns = <
item
@ -945,7 +955,7 @@ object MainForm: TMainForm
Header.Height = 20
Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowSortGlyphs, hoVisible]
Header.ParentFont = True
Header.PopupMenu = popupDbGridHeader
Header.PopupMenu = popupListHeader
Header.SortColumn = 0
HintMode = hmTooltip
Images = ImageListMain
@ -8032,9 +8042,7 @@ object MainForm: TMainForm
Left = 40
Top = 200
end
object popupDbGridHeader: TPopupMenu
AutoHotkeys = maManual
AutoLineReduction = maManual
object popupListHeader: TVTHeaderPopupMenu
Images = ImageListMain
Left = 40
Top = 128

View File

@ -18,7 +18,7 @@ uses
CommCtrl, Contnrs, Generics.Collections, SynEditExport, SynExportHTML, Math,
routine_editor, trigger_editor, event_editor, options, EditVar, helpers, createdatabase, table_editor,
TableTools, View, Usermanager, SelectDBObject, connections, sqlhelp, mysql_connection,
mysql_api, insertfiles, searchreplace, loaddata, copytable;
mysql_api, insertfiles, searchreplace, loaddata, copytable, VTHeaderPopup;
type
@ -293,7 +293,7 @@ type
N19: TMenuItem;
setNULL1: TMenuItem;
menuExporttables: TMenuItem;
popupDbGridHeader: TPopupMenu;
popupListHeader: TVTHeaderPopupMenu;
SynCompletionProposal: TSynCompletionProposal;
OpenDialogSQLFile: TOpenDialog;
SaveDialogSQLFile: TSaveDialog;
@ -580,7 +580,6 @@ type
procedure QFvaluesClick(Sender: TObject);
procedure InsertDate(Sender: TObject);
procedure setNULL1Click(Sender: TObject);
procedure MenuTablelistColumnsClick(Sender: TObject);
function QueryLoad( filename: String; ReplaceContent: Boolean = true ): Boolean;
procedure DataGridChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure DataGridCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode;
@ -794,7 +793,6 @@ type
function GetActiveDatabase: String;
function GetSelectedTable: TDBObject;
procedure SetSelectedDatabase(db: String);
procedure SetVisibleListColumns( List: TVirtualStringTree; Columns: TStringList );
procedure ToggleFilterPanel(ForceVisible: Boolean = False);
procedure AutoCalcColWidth(Tree: TVirtualStringTree; Column: TColumnIndex);
procedure PlaceObjectEditor(Obj: TDBObject);
@ -1124,7 +1122,6 @@ end;
procedure TMainForm.FormCreate(Sender: TObject);
var
i: Integer;
menuitem : TMenuItem;
datafontname, WinState: String;
datafontsize : Integer;
DisableProcessWindowsGhostingProc: procedure;
@ -1308,19 +1305,6 @@ begin
Action.ShortCut := GetRegValue(REGPREFIX_SHORTCUT1+Action.Name, Action.ShortCut);
end;
// Generate menuitems for popupDbGridHeader (column selection for ListTables)
popupDBGridHeader.Items.Clear;
for i:=0 to ListTables.Header.Columns.Count-1 do
begin
menuitem := TMenuItem.Create( popupDBGridHeader );
menuitem.Caption := ListTables.Header.Columns[i].Text;
menuitem.OnClick := MenuTablelistColumnsClick;
// Disable hiding first column
menuitem.Enabled := i>0;
menuitem.Checked := coVisible in ListTables.Header.Columns[i].Options;
popupDbGridHeader.Items.Add( menuitem );
end;
// Place progressbar on the statusbar
ProgressBarStatus.Parent := StatusBar;
ProgressBarStatus.Visible := False;
@ -5641,27 +5625,6 @@ begin
raise Exception.Create('Assertion failed: Invalid global VT array.');
end;
{**
Click on popupDBGridHeader
}
procedure TMainForm.MenuTablelistColumnsClick(Sender: TObject);
var
menuitem : TMenuItem;
VisibleColumns : TStringList;
i : Integer;
begin
VisibleColumns := TStringList.Create;
menuitem := TMenuItem( Sender );
menuitem.Checked := not menuitem.Checked;
for i := 0 to ListTables.Header.Columns.Count - 1 do
begin
menuitem := popupDbGridHeader.Items[i];
if menuitem.Checked then
VisibleColumns.Add(IntToStr(i));
end;
SetVisibleListColumns( ListTables, VisibleColumns );
end;
{**
Save setup of a VirtualStringTree to registry
@ -5747,7 +5710,12 @@ begin
Value := GetRegValue(REGPREFIX_COLSVISIBLE + Regname, '');
if Value <> '' then begin
ValueList := Explode( ',', Value );
SetVisibleListColumns( List, ValueList );
for i:=0 to List.Header.Columns.Count-1 do begin
if ValueList.IndexOf( IntToStr(i) ) > -1 then
List.Header.Columns[i].Options := List.Header.Columns[i].Options + [coVisible]
else
List.Header.Columns[i].Options := List.Header.Columns[i].Options - [coVisible];
end;
end;
// Column position
@ -5767,25 +5735,6 @@ begin
end;
{**
(Un)hide columns in a VirtualStringTree.
}
procedure TMainForm.SetVisibleListColumns( List: TVirtualStringTree; Columns: TStringList );
var
i : Integer;
begin
for i := 0 to List.Header.Columns.Count - 1 do
begin
// Only ListTables' column visibility is currently customizable
// so, make sure to unhide the newer "Comment" column in ListColumns for some users
if (Columns.IndexOf( IntToStr(i) ) > -1) or (List <> ListTables) then
List.Header.Columns[i].Options := List.Header.Columns[i].Options + [coVisible]
else
List.Header.Columns[i].Options := List.Header.Columns[i].Options - [coVisible];
end;
end;
{**
Start writing logfile.
Called either in FormShow or after closing preferences dialog
@ -5915,14 +5864,6 @@ end;
procedure TMainForm.vstHeaderDraggedOut(Sender: TVTHeader; Column:
TColumnIndex; DropPosition: TPoint);
begin
if Sender.Treeview = ListTables then
begin
// Keep "Tables" column
if Column = 0 then
Exit;
// Uncheck menuitem in header's contextmenu
popupDBGridHeader.Items[Column].Checked := False;
end;
// Hide the draggedout column
Sender.Columns[Column].Options := Sender.Columns[Column].Options - [coVisible];
end;