From c64f56fa977eaa96861cd5d8bac03c59552838df Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 11 Nov 2008 23:12:42 +0100 Subject: Right mouse button selection mode Patch by Nikola Radovanovic --- UMain.pas | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 10 deletions(-) (limited to 'UMain.pas') diff --git a/UMain.pas b/UMain.pas index a808667..f7cfea6 100644 --- a/UMain.pas +++ b/UMain.pas @@ -103,7 +103,6 @@ type procedure ListViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); procedure ListViewEnter(Sender: TObject; var Accept: boolean); procedure PathLabelMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); - procedure PathLabelMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); procedure PathButtonClick(Sender: TObject); function CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer; procedure F5ButtonClick(Sender: TObject); @@ -113,6 +112,7 @@ type procedure ListViewDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); procedure ListViewMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); procedure ListViewMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); + procedure ListViewMouseMove(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); procedure InplaceEditTimerTimer(Sender: TObject); procedure ListViewEdited(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem; var NewText: string; var AllowChange: boolean; var DataColumn: integer); procedure ListViewSelectionChanged(Sender: TObject); @@ -193,6 +193,7 @@ type LeftPathsHighlight, RightPathsHighlight: TStringList; LeftTabEngines, RightTabEngines: TList; LastUsedFilter: string; + PanelRightMouseSelMode, PanelRightMouseInProgress: boolean; procedure ConstructPanels; procedure ConstructMenu; procedure ConstructColumns(ListView: TGTKListView); @@ -276,6 +277,8 @@ begin QuickFind := False; LeftTabPopup := True; LastClick := 0; + PanelRightMouseSelMode := True; + PanelRightMouseInProgress := False; LastUsedFilter := '*.*'; RedrawLeftInactive := False; RedrawRightInactive := False; @@ -397,8 +400,6 @@ begin F7Button.CanFocus := False; F8Button.CanFocus := False; PanelSeparator.OnMouseUp := PanelSeparatorMouseUp; - LeftListView.PopupMenu := FilePopupMenu; - RightListView.PopupMenu := FilePopupMenu; // Events OnResize := FormResize; @@ -412,9 +413,7 @@ begin LeftListView.OnEnter := ListViewEnter; RightListView.OnEnter := ListViewEnter; LeftPathLabelEventBox.OnMouseDown := PathLabelMouseDown; - LeftPathLabelEventBox.OnMouseUp := PathLabelMouseUp; RightPathLabelEventBox.OnMouseDown := PathLabelMouseDown; - RightPathLabelEventBox.OnMouseUp := PathLabelMouseUp; LeftUpButton.OnClick := PathButtonClick; LeftRootButton.OnClick := PathButtonClick; LeftHomeButton.OnClick := PathButtonClick; @@ -439,6 +438,8 @@ begin RightListView.OnDblClick := ListViewDblClick;} LeftListView.OnSelectionChanged := ListViewSelectionChanged; RightListView.OnSelectionChanged := ListViewSelectionChanged; + LeftListView.OnMouseMove := ListViewMouseMove; + RightListView.OnMouseMove := ListViewMouseMove; LeftQuickFindEntry.OnEnter := QuickFindEntryEnter; RightQuickFindEntry.OnEnter := QuickFindEntryEnter; LeftPanelNotebook.OnTabSwitched := TabNotebookSwitchPage; @@ -1299,10 +1300,13 @@ begin end; procedure TFMain.PanelSeparatorMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); +var XLeft, XRight: gint; begin if Button = mbRight then begin Accept := False; - SplitterPopupMenu.PopUp; + gtk_widget_get_pointer(LeftPanelBox.FWidget, @XLeft, nil); + gtk_widget_get_pointer(RightPanelBox.FWidget, @XRight, nil); + if (XLeft > LeftPanelBox.Width) and (XRight < 0) then SplitterPopupMenu.PopUp; end; end; @@ -1642,10 +1646,6 @@ begin if Sender = LeftPathLabelEventBox then LeftListView.SetFocus else if Sender = RightPathLabelEventBox then RightListView.SetFocus; end; -end; - -procedure TFMain.PathLabelMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); -begin if Button = mbRight then begin Accept := False; PathBoxPopupMenu.PopUp; @@ -2733,9 +2733,11 @@ end; procedure TFMain.ListViewMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); var Item: TGTKListItem; Click: TDateTime; + Data: PDataItem; begin try InternalLock; + PanelRightMouseInProgress := False; // DebugMsg(['ListViewMouseDown, X = ', X, ', Y = ', Y]); if Button = mbLeft then begin Click := Now; @@ -2767,6 +2769,21 @@ begin Item.Selected := True; Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); end; + + // Show file popup menu or start selection mode, depending on ConfRightClickSelect + if ConfRightClickSelect then begin + if (Item <> nil) and (Item.Data <> nil) then begin + Data := PDataItem(Item.Data); + if not Data^.UpDir then begin + PanelRightMouseSelMode := not Data^.Selected; + Data^.Selected := PanelRightMouseSelMode; + Item.RedrawRow; + UpdatePanelInfoDown(Sender = LeftListView); + PanelRightMouseInProgress := True; + end; + end; + end else FilePopupMenu.PopUp; + Accept := False; end; finally Application.ProcessMessages; @@ -2774,6 +2791,27 @@ begin end; end; +procedure TFMain.ListViewMouseMove(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean); +var Item: TGTKListItem; + Data: PDataItem; +begin + Accept := True; + if not ((Sender is TGTKListView) and ConfRightClickSelect) then Exit; + + if (Button = mbRight) and PanelRightMouseInProgress then begin + Item := (Sender as TGTKListView).GetItemAtPos(X, Y); + if (Item <> nil) and (Item.Data <> nil) and (not Item.Selected) then begin + Data := PDataItem(Item.Data); + if not Data^.UpDir then begin + Data^.Selected := PanelRightMouseSelMode; + Item.Selected := True; + Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); + UpdatePanelInfoDown(Sender = LeftListView); + end; + end; + end else PanelRightMouseInProgress := False; +end; + procedure TFMain.InplaceEditTimerTimer(Sender: TObject); var LeftPanel: boolean; ListView: TGTKListView; @@ -4400,6 +4438,7 @@ var AListView: TGTKListView; i, FirstColumn, LastColumn: integer; LeftLV, b: boolean; begin + PanelRightMouseInProgress := False; if Button = mbLeft then begin AListView := Sender as TGTKListView; LeftLV := AListView = LeftListView; @@ -4420,6 +4459,7 @@ begin AListView.Columns[i].FixedWidth := ConfColumnSizes[AListView.Columns[i].Tag]; end; end; + if Button = mbRight then Accept := False; end; procedure TFMain.ListViewColumnClicked(Sender: TObject); -- cgit v1.2.3