(* Tux Commander - UMounterPrefs - Mounter Preferences dialog Copyright (C) 2004 Tomas Bzatek Check for updates on tuxcmd.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) unit UMounterPrefs; interface uses SysUtils, Classes, lazglib2, lazgobject2, lazgdk3, lazgtk3, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKView, GTKDialogs, GTKPixbuf, UGnome; type TFMounterPrefs = class(TGTKDialog) TitleFrame: TGTKFrame; TitleLabel: TGTKLabel; TitleEventBox: TGTKEventBox; TitleIcon: TGTKImage; TitleHBox: TGTKHBox; ListView: TGTKListView; ListViewScrolledWindow: TGTKScrolledWindow; ListViewFrame, PropertiesFrame: TGTKFrame; MounterListGrid, PropertiesGrid: TGTKGrid; AddItemButton, RemoveItemButton: TGTKButton; MoveUpButton, MoveDownButton: TGTKButton; HBox1: TGTKHBox; DisplayTextLabel, MountPointLabel, MountDeviceLabel, MountCommandLabel, UmountCommandLabel, IconLabel, DeviceTypeLabel: TGTKLabel; DisplayTextEntry, MountPointEntry, MountDeviceEntry, MountCommandEntry, UmountCommandEntry: TGTKEntry; IconEntry: TGnomeIconEntry; IconEntry2: TGTKButton; DeviceTypeComboBox: TGTKComboBoxText; UseFSTabDefaultsCheckBox: TGTKCheckButton; ToggleModeCheckBox: TGTKCheckButton; procedure FormCreate(Sender: TObject); override; procedure FormDestroy(Sender: TObject); procedure ListViewSelectionChanged(Sender: TObject); procedure UseFSTabDefaultsCheckBoxToggled(Sender: TObject); procedure AddItemButtonClick(Sender: TObject); procedure RemoveItemButtonClick(Sender: TObject); procedure MoveUpDownButtonButtonClick(Sender: TObject); procedure DisplayTextEntryChanged(Sender: TObject); procedure MountPointEntryChanged(Sender: TObject); procedure MountDeviceEntryChanged(Sender: TObject); procedure MountCommandEntryChanged(Sender: TObject); procedure UmountCommandEntryChanged(Sender: TObject); procedure DeviceTypeComboBoxChanged(Sender: TObject); procedure IconEntryChanged(Sender: TObject); procedure IconEntry2Click(Sender: TObject); private FUseGnomeIconEntry: boolean; procedure RefreshIcon(ItemIndex: integer); public InternalMounterList: TList; procedure AssignAssocList(List: TList); procedure FillList; procedure CleanItems; end; var FMounterPrefs: TFMounterPrefs; implementation uses ULocale, UFileAssoc, UCoreUtils, UConfig, UCore; function TGTKListView_drag_end(widget: PGtkWidget; drag_context: PGdkDragContext; user_data: gpointer): gboolean; cdecl; forward; procedure TFMounterPrefs.FormCreate(Sender: TObject); const row_targets: TGtkTargetEntry = (target:'GTK_TREE_MODEL_ROW'; flags:guint(GTK_TARGET_SAME_APP); info:100); var Column: TGTKTreeViewColumn; VBox: TGTKVBox; begin FUseGnomeIconEntry := False; SetDefaultSize(500, 520); Caption := LANGMounterPrefs_Caption; Buttons := [mbOK, mbCancel]; TitleEventBox := TGTKEventBox.Create(Self); TitleLabel := TGTKLabel.Create(Self); TitleLabel.Caption := Format('%s', [LANGMounterPrefs_TitleLabelCaption]); TitleLabel.UseMarkup := True; TitleLabel.XAlign := 0; TitleLabel.MarginStart := 0; TitleLabel.MarginEnd := 0; TitleLabel.MarginTop := 3; TitleLabel.MarginBottom := 3; TitleEventBox.ControlState := csPrelight; TitleFrame := TGTKFrame.CreateWithoutLabel(Self); TitleFrame.ShadowType := stShadowOut; TitleIcon := TGTKImage.Create(Self); TitleIcon.SetFromIconName('gtk-cdrom', isLargeToolbar); TitleHBox := TGTKHBox.Create(Self); TitleHBox.Homogeneous := False; TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5); TitleHBox.AddControlEx(TitleIcon, False, False, 0); TitleHBox.AddControlEx(TitleLabel, True, True, 10); TitleEventBox.AddControl(TitleHBox); TitleFrame.AddControl(TitleEventBox); ClientArea.AddControlEx(TitleFrame, False, True, 0); ListViewFrame := TGTKFrame.Create(Self); ListViewFrame.Caption := LANGMounterPrefs_ListViewFrameCaption; ListViewFrame.BorderWidth := 7; ClientArea.AddControlEx(ListViewFrame, True, True, 0); MounterListGrid := TGTKGrid.Create(Self); ListViewFrame.AddControl(MounterListGrid); MounterListGrid.BorderWidth := 7; ListView := TGTKListView.CreateTyped(Self, False, [lcText, lcText, lcText, lcPointer, lcPixbuf]); g_signal_connect_data(PGObject(ListView.FWidget), 'drag-end', TGCallback(@TGTKListView_drag_end), nil, nil, G_CONNECT_DEFAULT); gtk_tree_view_enable_model_drag_source(PGtkTreeView(ListView.FWidget), [GDK_BUTTON1_MASK], @row_targets, 1, [GDK_ACTION_MOVE, GDK_ACTION_COPY]); gtk_tree_view_enable_model_drag_dest(PGtkTreeView(ListView.FWidget), @row_targets, 1, [GDK_ACTION_MOVE, GDK_ACTION_COPY]); ListView.RulesHint := True; // ListView.Reorderable := True; Column := ListView.Columns.AddTyped(ctImageText); Column.Caption := LANGMounterPrefs_MountName; Column.AddImageAttribute('pixbuf', 4); Column.AddAttribute('text', 0); Column.Resizable := True; Column.FixedWidth := 150; Column.SizingMode := smFixed; // Column.Clickable := True; Column := ListView.Columns.Add; Column.Caption := LANGMounterPrefs_MountPoint; Column.AddAttribute('text', 1); Column.Resizable := True; Column.FixedWidth := 200; Column.SizingMode := smFixed; // Column.Clickable := True; Column := ListView.Columns.Add; Column.Caption := LANGMounterPrefs_Device; Column.AddAttribute('text', 2); Column.Resizable := True; Column.FixedWidth := 150; Column.SizingMode := smFixed; // Column.Clickable := True; ListViewScrolledWindow := TGTKScrolledWindow.Create(Self); ListViewScrolledWindow.AddControl(ListView); ListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic; ListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic; ListViewScrolledWindow.ShadowType := stShadowIn; ListViewScrolledWindow.MarginTop := 5; ListViewScrolledWindow.MarginBottom := 5; AddItemButton := TGTKButton.CreateFromIconName(Self, 'gtk-add'); AddItemButton.Caption := 'Add'; RemoveItemButton := TGTKButton.CreateFromIconName(Self, 'gtk-remove'); RemoveItemButton.Caption := 'Remove'; HBox1 := TGTKHBox.Create(Self); HBox1.Homogeneous := True; HBox1.AddControlEx(AddItemButton, True, True, 2); HBox1.AddControlEx(RemoveItemButton, True, True, 2); HBox1.MarginTop := 2; HBox1.MarginBottom := 2; MoveUpButton := TGTKButton.CreateFromIconName(Self, 'gtk-go-up'); MoveUpButton.Tooltip := LANGMounterPrefs_MoveUpButtonTooltip; MoveUpButton.CanFocus := False; MoveUpButton.MarginStart := 5; MoveUpButton.MarginEnd := 5; MoveUpButton.MarginTop := 5; MoveUpButton.MarginBottom := 5; MoveDownButton := TGTKButton.CreateFromIconName(Self, 'gtk-go-down'); MoveDownButton.Tooltip := LANGMounterPrefs_MoveDownButtonTooltip; MoveDownButton.CanFocus := False; MoveDownButton.MarginStart := 5; MoveDownButton.MarginEnd := 5; MoveDownButton.MarginTop := 5; MoveDownButton.MarginBottom := 5; UseFSTabDefaultsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGMounterPrefs_UseFSTabDefaultsCheckBox); UseFSTabDefaultsCheckBox.Tooltip := LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip; UseFSTabDefaultsCheckBox.MarginTop := 2; UseFSTabDefaultsCheckBox.MarginBottom := 2; ToggleModeCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGMounterPrefs_ToggleModeCheckBox); ToggleModeCheckBox.Tooltip := LANGMounterPrefs_ToggleModeCheckBoxTooltip; ToggleModeCheckBox.MarginTop := 2; ToggleModeCheckBox.MarginBottom := 2; MounterListGrid.AddControl(0, 0, 3, 1, UseFSTabDefaultsCheckBox); MounterListGrid.AddControl(0, 1, 3, 1, ToggleModeCheckBox); MounterListGrid.AddControl(0, 2, 3, 4, ListViewScrolledWindow); VBox := TGTKVBox.Create(Self); VBox.MarginTop := 2; VBox.MarginBottom := 2; MounterListGrid.AddControl(0, 6, 1, 1, VBox); MounterListGrid.AddControl(2, 6, 1, 1, HBox1); MounterListGrid.AddControl(3, 3, 1, 1, MoveUpButton); MounterListGrid.AddControl(3, 4, 1, 1, MoveDownButton); VBox := TGTKVBox.Create(Self); VBox.MarginTop := 2; VBox.MarginBottom := 2; MounterListGrid.AddControl(3, 2, 1, 1, VBox); VBox := TGTKVBox.Create(Self); VBox.MarginTop := 2; VBox.MarginBottom := 2; MounterListGrid.AddControl(3, 5, 1, 1, VBox); PropertiesFrame := TGTKFrame.Create(Self); PropertiesFrame.Caption := LANGMounterPrefs_PropertiesFrameCaption; PropertiesFrame.BorderWidth := 7; PropertiesGrid := TGTKGrid.Create(Self); PropertiesFrame.AddControl(PropertiesGrid); ClientArea.AddControlEx(PropertiesFrame, False, False, 0); DisplayTextLabel := TGTKLabel.Create(Self); DisplayTextLabel.Caption := LANGMounterPrefs_DisplayTextLabelCaption; DisplayTextLabel.UseUnderline := True; DisplayTextLabel.XAlign := 0; DisplayTextLabel.MarginStart := 10; DisplayTextLabel.MarginEnd := 10; DisplayTextLabel.MarginTop := 2; DisplayTextLabel.MarginBottom := 2; MountPointLabel := TGTKLabel.Create(Self); MountPointLabel.Caption := LANGMounterPrefs_MountPointLabelCaption; MountPointLabel.UseUnderline := True; MountPointLabel.XAlign := 0; MountPointLabel.MarginStart := 10; MountPointLabel.MarginEnd := 10; MountPointLabel.MarginTop := 2; MountPointLabel.MarginBottom := 2; MountDeviceLabel := TGTKLabel.Create(Self); MountDeviceLabel.Caption := LANGMounterPrefs_MountDeviceLabelCaption; MountDeviceLabel.UseUnderline := True; MountDeviceLabel.XAlign := 0; MountDeviceLabel.MarginStart := 10; MountDeviceLabel.MarginEnd := 10; MountDeviceLabel.MarginTop := 2; MountDeviceLabel.MarginBottom := 2; DeviceTypeLabel := TGTKLabel.Create(Self); DeviceTypeLabel.Caption := LANGMounterPrefs_DeviceTypeLabelCaption; DeviceTypeLabel.UseUnderline := True; DeviceTypeLabel.XAlign := 0; DeviceTypeLabel.MarginTop := 2; DeviceTypeLabel.MarginBottom := 2; DisplayTextEntry := TGTKEntry.Create(Self); DisplayTextEntry.MarginStart := 10; DisplayTextEntry.MarginEnd := 10; DisplayTextEntry.MarginTop := 2; DisplayTextEntry.MarginBottom := 2; DisplayTextLabel.FocusControl := DisplayTextEntry; MountPointEntry := TGTKEntry.Create(Self); MountPointEntry.MarginStart := 10; MountPointEntry.MarginEnd := 10; MountPointEntry.MarginTop := 2; MountPointEntry.MarginBottom := 2; MountPointLabel.FocusControl := MountPointEntry; MountDeviceEntry := TGTKEntry.Create(Self); MountDeviceEntry.MarginStart := 10; MountDeviceEntry.MarginEnd := 10; MountDeviceEntry.MarginTop := 2; MountDeviceEntry.MarginBottom := 2; MountDeviceLabel.FocusControl := MountDeviceEntry; DeviceTypeComboBox := TGTKComboBoxText.Create(Self); DeviceTypeLabel.FocusControl := DeviceTypeComboBox; // TODO: icons DeviceTypeComboBox.AppendItem(LANGMounterPrefs_miLocalDiskCaption); DeviceTypeComboBox.AppendItem(LANGMounterPrefs_miRemovableCaption); DeviceTypeComboBox.AppendItem(LANGMounterPrefs_miCDCaption); DeviceTypeComboBox.AppendItem(LANGMounterPrefs_miFloppyCaption); DeviceTypeComboBox.AppendItem(LANGMounterPrefs_miNetworkCaption); DeviceTypeComboBox.MarginStart := 10; DeviceTypeComboBox.MarginEnd := 10; DeviceTypeComboBox.MarginTop := 2; DeviceTypeComboBox.MarginBottom := 2; MountCommandLabel := TGTKLabel.Create(Self); MountCommandLabel.Caption := LANGMounterPrefs_MountCommandLabelCaption; MountCommandLabel.UseUnderline := True; MountCommandLabel.XAlign := 0; MountCommandLabel.MarginStart := 10; MountCommandLabel.MarginEnd := 10; MountCommandLabel.MarginTop := 2; MountCommandLabel.MarginBottom := 2; UmountCommandLabel := TGTKLabel.Create(Self); UmountCommandLabel.Caption := LANGMounterPrefs_UmountCommandLabelCaption; UmountCommandLabel.UseUnderline := True; UmountCommandLabel.XAlign := 0; UmountCommandLabel.MarginTop := 2; UmountCommandLabel.MarginBottom := 2; MountCommandEntry := TGTKEntry.Create(Self); MountCommandEntry.Tooltip := LANGMounterPrefs_MountCommandEntryTooltip; MountCommandEntry.MarginStart := 10; MountCommandEntry.MarginEnd := 10; MountCommandEntry.MarginTop := 2; MountCommandEntry.MarginBottom := 2; MountCommandLabel.FocusControl := MountCommandEntry; UmountCommandEntry := TGTKEntry.Create(Self); UmountCommandEntry.Tooltip := LANGMounterPrefs_UmountCommandEntryTooltip; UmountCommandEntry.MarginStart := 10; UmountCommandEntry.MarginEnd := 10; UmountCommandEntry.MarginTop := 2; UmountCommandEntry.MarginBottom := 2; UmountCommandLabel.FocusControl := UmountCommandEntry; PropertiesGrid.AddControl(0, 0, 1, 1, DisplayTextLabel); PropertiesGrid.AddControl(1, 0, 2, 1, DisplayTextEntry); PropertiesGrid.AddControl(0, 1, 1, 1, MountPointLabel); PropertiesGrid.AddControl(1, 1, 2, 1, MountPointEntry); PropertiesGrid.AddControl(0, 2, 1, 1, MountDeviceLabel); PropertiesGrid.AddControl(1, 2, 1, 1, MountDeviceEntry); PropertiesGrid.AddControl(2, 2, 1, 1, DeviceTypeLabel); PropertiesGrid.AddControl(3, 2, 2, 1, DeviceTypeComboBox); PropertiesGrid.AddControl(0, 3, 1, 1, MountCommandLabel); PropertiesGrid.AddControl(1, 3, 1, 1, MountCommandEntry); PropertiesGrid.AddControl(2, 3, 1, 1, UmountCommandLabel); PropertiesGrid.AddControl(3, 3, 2, 1, UmountCommandEntry); IconLabel := TGTKLabel.Create(Self); IconLabel.Caption := LANGMounterPrefs_IconLabelCaption; IconLabel.XAlign := 1; IconLabel.MarginTop := 2; IconLabel.MarginBottom := 2; IconLabel.UseUnderline := True; PropertiesGrid.AddControl(3, 0, 1, 2, IconLabel); if FUseGnomeIconEntry then begin IconEntry := TGnomeIconEntry.Create(Self); IconLabel.FocusControl := IconEntry; PropertiesGrid.AddControl(4, 0, 1, 2, IconEntry); end else begin IconEntry2 := TGTKButton.Create(Self); IconEntry2.Caption := LANGBrowseButton_Caption; IconEntry2.MarginStart := 10; IconEntry2.MarginEnd := 10; IconEntry2.MarginTop := 4; IconEntry2.MarginBottom := 4; PropertiesGrid.AddControl(4, 0, 1, 2, IconEntry2); end; OnDestroy := @FormDestroy; ListView.OnSelectionChanged := @ListViewSelectionChanged; UseFSTabDefaultsCheckBox.OnToggled := @UseFSTabDefaultsCheckBoxToggled; AddItemButton.OnClick := @AddItemButtonClick; RemoveItemButton.OnClick := @RemoveItemButtonClick; MoveUpButton.OnClick := @MoveUpDownButtonButtonClick; MoveDownButton.OnClick := @MoveUpDownButtonButtonClick; DisplayTextEntry.OnChanged := @DisplayTextEntryChanged; MountPointEntry.OnChanged := @MountPointEntryChanged; MountDeviceEntry.OnChanged := @MountDeviceEntryChanged; MountCommandEntry.OnChanged := @MountCommandEntryChanged; UmountCommandEntry.OnChanged := @UmountCommandEntryChanged; DeviceTypeComboBox.OnChanged := @DeviceTypeComboBoxChanged; if FUseGnomeIconEntry then IconEntry.OnIconChanged := @IconEntryChanged else IconEntry2.OnClick := @IconEntry2Click; ListViewSelectionChanged(Self); ListView.SetFocus; end; procedure TFMounterPrefs.ListViewSelectionChanged(Sender: TObject); var b: boolean; Item: TMounterItem; begin b := Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and ListViewScrolledWindow.Enabled; RemoveItemButton.Enabled := b; MoveUpButton.Enabled := b and (ListView.Selected.Index > 0); MoveDownButton.Enabled := b and (ListView.Selected.Index < ListView.Items.Count - 1); PropertiesGrid.Enabled := b; if not b then begin DisplayTextEntry.Text := ''; MountPointEntry.Text := ''; MountDeviceEntry.Text := ''; MountCommandEntry.Text := ''; UmountCommandEntry.Text := ''; DeviceTypeComboBox.ItemIndex := 0; if FUseGnomeIconEntry then IconEntry.Filename := ''; Exit; end; Item := TMounterItem(ListView.Selected.AsPointer(3)); DisplayTextEntry.Text := Item.DisplayText; MountPointEntry.Text := StrToUTF8(Item.MountPath); MountDeviceEntry.Text := StrToUTF8(Item.Device); MountCommandEntry.Text := StrToUTF8(Item.MountCommand); UmountCommandEntry.Text := StrToUTF8(Item.UmountCommand); DeviceTypeComboBox.ItemIndex := Item.DeviceType; if FUseGnomeIconEntry then IconEntry.Filename := Item.IconPath; end; procedure TFMounterPrefs.UseFSTabDefaultsCheckBoxToggled(Sender: TObject); begin ListViewScrolledWindow.Enabled := not UseFSTabDefaultsCheckBox.Checked; AddItemButton.Enabled := not UseFSTabDefaultsCheckBox.Checked; RemoveItemButton.Enabled := not UseFSTabDefaultsCheckBox.Checked; MoveUpButton.Enabled := not UseFSTabDefaultsCheckBox.Checked; MoveDownButton.Enabled := not UseFSTabDefaultsCheckBox.Checked; ListViewSelectionChanged(Self); end; procedure TFMounterPrefs.AddItemButtonClick(Sender: TObject); var Item: TMounterItem; ListItem: TGTKListItem; begin Item := TMounterItem.Create; InternalMounterList.Add(Item); ListItem := ListView.Items.Add; ListItem.SetValue(3, Item); ListItem.Selected := True; ListItem.SetCursor(0, False, False, 0.5, 0); ListViewSelectionChanged(Self); DisplayTextEntry.SetFocus; RefreshIcon(ListView.Selected.Index); end; procedure TFMounterPrefs.RemoveItemButtonClick(Sender: TObject); var Item: TMounterItem; begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) then begin Item := TMounterItem(ListView.Selected.AsPointer(3)); Item.Free; InternalMounterList.Remove(Item); ListView.Items.Delete(ListView.Selected.Index); end; end; procedure TFMounterPrefs.MoveUpDownButtonButtonClick(Sender: TObject); var i, Old, New: integer; s: string; p: pointer; begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) then begin Old := InternalMounterList.IndexOf(ListView.Selected.AsPointer(3)); if (Sender = MoveUpButton) and (Old > 0) then New := Old - 1 else if (Sender = MoveDownButton) and (Old < InternalMounterList.Count - 1) then New := Old + 1 else Exit; InternalMounterList.Move(Old, New); for i := 0 to 2 do begin s := ListView.Items[New].AsString(i); ListView.Items[New].SetValue(i, ListView.Items[Old].AsString(i)); ListView.Items[Old].SetValue(i, s); end; for i := 3 to 4 do begin p := ListView.Items[New].AsPointer(i); ListView.Items[New].SetValue(i, ListView.Items[Old].AsPointer(i)); ListView.Items[Old].SetValue(i, p); end; ListView.Items[New].Selected := True; ListView.Items[New].SetCursor(0, False, False, 0.5, 0); end; end; procedure TFMounterPrefs.DisplayTextEntryChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).DisplayText := DisplayTextEntry.Text; ListView.Selected.SetValue(0, DisplayTextEntry.Text); end; end; procedure TFMounterPrefs.MountPointEntryChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).MountPath := UTF8ToStr(MountPointEntry.Text); ListView.Selected.SetValue(1, MountPointEntry.Text); end; end; procedure TFMounterPrefs.MountDeviceEntryChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).Device := UTF8ToStr(MountDeviceEntry.Text); ListView.Selected.SetValue(2, MountDeviceEntry.Text); end; end; procedure TFMounterPrefs.MountCommandEntryChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).MountCommand := UTF8ToStr(MountCommandEntry.Text); end; end; procedure TFMounterPrefs.UmountCommandEntryChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).UmountCommand := UTF8ToStr(UmountCommandEntry.Text); end; end; procedure TFMounterPrefs.DeviceTypeComboBoxChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).DeviceType := DeviceTypeComboBox.ItemIndex; RefreshIcon(ListView.Selected.Index); end; end; procedure TFMounterPrefs.IconEntryChanged(Sender: TObject); begin if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin TMounterItem(ListView.Selected.AsPointer(3)).IconPath := IconEntry.Filename; RefreshIcon(ListView.Selected.Index); end; end; procedure TFMounterPrefs.RefreshIcon(ItemIndex: integer); var Pixmap: TGDKPixbuf; b: boolean; Data: TMounterItem; begin Data := TMounterItem(InternalMounterList[ItemIndex]); b := FileExists(Data.IconPath); Pixmap := nil; if b then begin Pixmap := TGDKPixbuf.Create(Self); Pixmap.LoadFromFile(Data.IconPath); b := Pixmap.FPixbuf <> nil; if b then Pixmap.ScaleSimple(16, 16); end; if not b then case Data.DeviceType of 0 : Pixmap := MounterHDD; 1 : Pixmap := MounterRemovable; 2 : Pixmap := MounterCD; 3 : Pixmap := MounterFloppy; 4 : Pixmap := MounterNetwork; end; ListView.Items[ItemIndex].SetValue(4, Pixmap.FPixbuf); end; procedure TFMounterPrefs.IconEntry2Click(Sender: TObject); var Dialog: TGTKFileChooserDialog; begin if (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(3))) then Exit; Dialog := TGTKFileChooserDialog.CreateWithTitle(Self, LANGBrowseForIcon); try Dialog.FileName := TMounterItem(ListView.Selected.AsPointer(3)).IconPath; if Byte(Dialog.Run) = 251 then TMounterItem(ListView.Selected.AsPointer(3)).IconPath := Dialog.FileName; RefreshIcon(ListView.Selected.Index); finally Dialog.Free; end; end; (********************************************************************************************************************************) (********************************************************************************************************************************) procedure TFMounterPrefs.AssignAssocList(List: TList); var i: integer; Item: TMounterItem; begin InternalMounterList := TList.Create; if List.Count > 0 then for i := 0 to List.Count - 1 do begin Item := TMounterItem.Create; with Item do begin DisplayText := TMounterItem(List[i]).DisplayText; MountPath := TMounterItem(List[i]).MountPath; Device := TMounterItem(List[i]).Device; IconPath := TMounterItem(List[i]).IconPath; MountCommand := TMounterItem(List[i]).MountCommand; UmountCommand := TMounterItem(List[i]).UmountCommand; DeviceType := TMounterItem(List[i]).DeviceType; end; InternalMounterList.Add(Item); end; end; procedure TFMounterPrefs.FillList; var i: integer; ListItem: TGTKListItem; begin if Assigned(InternalMounterList) and (InternalMounterList.Count > 0) then begin for i := 0 to InternalMounterList.Count - 1 do with TMounterItem(InternalMounterList[i]) do begin ListItem := ListView.Items.Add; ListItem.SetValue(0, DisplayText); ListItem.SetValue(1, StrToUTF8(MountPath)); ListItem.SetValue(2, StrToUTF8(Device)); ListItem.SetValue(3, InternalMounterList[i]); RefreshIcon(i); end; end; UseFSTabDefaultsCheckBox.Checked := ConfMounterUseFSTab; ToggleModeCheckBox.Checked := ConfMounterPushDown; end; procedure TFMounterPrefs.CleanItems; var i: integer; begin try if InternalMounterList.Count > 0 then for i := InternalMounterList.Count - 1 downto 0 do with TMounterItem(InternalMounterList[i]) do begin if Length(Trim(Device)) = 0 then begin TMounterItem(InternalMounterList[i]).Free; InternalMounterList.Delete(i); end; end; except end; end; procedure TFMounterPrefs.FormDestroy(Sender: TObject); var i: integer; begin if Assigned(InternalMounterList) then begin if InternalMounterList.Count > 0 then for i := 0 to InternalMounterList.Count - 1 do if Assigned(InternalMounterList[i]) then TMounterItem(InternalMounterList[i]).Free; InternalMounterList.Clear; InternalMounterList.Free; end; end; function TGTKListView_drag_end(widget: PGtkWidget; drag_context: PGdkDragContext; user_data: gpointer): gboolean; cdecl; var i: integer; begin Result := False; for i := 0 to FMounterPrefs.ListView.Items.Count - 1 do FMounterPrefs.InternalMounterList[i] := FMounterPrefs.ListView.Items[i].AsPointer(3); end; (********************************************************************************************************************************) end.