diff --git a/tim2view.dpr b/tim2view.dpr
index 1b6a6af..0bb4b83 100644
--- a/tim2view.dpr
+++ b/tim2view.dpr
@@ -15,7 +15,8 @@ uses
uDrawTIM in 'units\uDrawTIM.pas',
uEventWaitThread in 'units\uEventWaitThread.pas',
uBrowseForFolder in 'units\uBrowseForFolder.pas',
- uScanResult in 'units\uScanResult.pas';
+ uScanResult in 'units\uScanResult.pas',
+ uSettings in 'units\uSettings.pas';
{$R *.res}
diff --git a/tim2view.dproj b/tim2view.dproj
index 51de921..01adc29 100644
--- a/tim2view.dproj
+++ b/tim2view.dproj
@@ -128,6 +128,7 @@
+
Cfg_2
Base
diff --git a/units/uCommon.pas b/units/uCommon.pas
index 7d99c3a..29fd2be 100644
--- a/units/uCommon.pas
+++ b/units/uCommon.pas
@@ -7,7 +7,7 @@ uses
const
cProgramName = 'Tim2View by [Lab 313]';
- cProgramVersion = '2.0 r48 Release';
+ cProgramVersion = '2.0 Stable';
cExtractedTimsDir = 'TIMS';
cMaxFileSize = $2EAEED80;
diff --git a/units/uMain.dfm b/units/uMain.dfm
index bb3a8be..a7ee639 100644
--- a/units/uMain.dfm
+++ b/units/uMain.dfm
@@ -547,6 +547,7 @@ object frmMain: TfrmMain
Enabled = False
TabOrder = 0
OnChange = cbbFilesChange
+ OnCloseUp = actReturnFocusExecute
end
object pnlMain: TPanel
Left = 0
@@ -610,7 +611,6 @@ object frmMain: TfrmMain
ViewStyle = vsReport
OnChange = lvListChange
OnData = lvListData
- OnSelectItem = lvListSelectItem
end
end
object pnlImage: TPanel
@@ -701,7 +701,8 @@ object frmMain: TfrmMain
ItemIndex = 0
TabOrder = 1
Text = 'Real'
- OnChange = cbbBitModeChange
+ OnChange = actDrawSelectedTimExecute
+ OnCloseUp = actReturnFocusExecute
Items.Strings = (
'Real'
'4 BPP'
@@ -709,7 +710,7 @@ object frmMain: TfrmMain
'16 BPP'
'24 BPP')
end
- object cbbTransparenceMode: TComboBox
+ object cbbTranspMode: TComboBox
AlignWithMargins = True
Left = 83
Top = 3
@@ -724,7 +725,8 @@ object frmMain: TfrmMain
ItemIndex = 0
TabOrder = 2
Text = 'Full transparence'
- OnChange = cbbTransparenceModeChange
+ OnChange = cbbTranspModeChange
+ OnCloseUp = actReturnFocusExecute
Items.Strings = (
'Full transparence'
'Black Transparence'
@@ -746,6 +748,7 @@ object frmMain: TfrmMain
DropDownCount = 16
ParentDoubleBuffered = False
TabOrder = 3
+ OnCloseUp = actReturnFocusExecute
end
end
end
@@ -924,6 +927,14 @@ object frmMain: TfrmMain
object actChangeBackColor: TAction
Caption = '&Change Background Color'
end
+ object actReturnFocus: TAction
+ Caption = 'actReturnFocus'
+ OnExecute = actReturnFocusExecute
+ end
+ object actDrawSelectedTim: TAction
+ Caption = 'actDrawSelectedTim'
+ OnExecute = actDrawSelectedTimExecute
+ end
end
object pmList: TPopupMenu
Left = 640
diff --git a/units/uMain.pas b/units/uMain.pas
index c94d4d5..7faef91 100644
--- a/units/uMain.pas
+++ b/units/uMain.pas
@@ -8,7 +8,8 @@ uses
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ComCtrls,
Vcl.ExtCtrls, Vcl.Menus, Vcl.StdCtrls, uScanThread, uCommon,
Winapi.ShellAPI, uDrawTIM, Vcl.ExtDlgs, uTIM, System.Actions,
- Vcl.ActnList, uScanResult, System.Types, System.Generics.Collections;
+ Vcl.ActnList, uScanResult, System.Types, System.Generics.Collections,
+ uSettings;
const
WM_COMMANDARRIVED = WM_USER + 1;
@@ -46,7 +47,7 @@ type
pnlList: TPanel;
lvList: TListView;
pnlImageOptions: TPanel;
- cbbTransparenceMode: TComboBox;
+ cbbTranspMode: TComboBox;
grdCurrClut: TDrawGrid;
pnlImage: TPanel;
splImageClut: TSplitter;
@@ -83,6 +84,8 @@ type
btnShowClut: TButton;
cbbCLUT: TComboBox;
actChangeBackColor: TAction;
+ actReturnFocus: TAction;
+ actDrawSelectedTim: TAction;
procedure btnStopScanClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure lvListData(Sender: TObject; Item: TListItem);
@@ -101,18 +104,17 @@ type
procedure actTim2PngExecute(Sender: TObject);
procedure actOpenRepoExecute(Sender: TObject);
procedure actOpenLabExecute(Sender: TObject);
- procedure cbbBitModeChange(Sender: TObject);
procedure actAboutExecute(Sender: TObject);
procedure actStretchExecute(Sender: TObject);
procedure actTimInfoExecute(Sender: TObject);
procedure actAssocTimsExecute(Sender: TObject);
procedure actExtractListExecute(Sender: TObject);
- procedure lvListSelectItem(Sender: TObject; Item: TListItem;
- Selected: Boolean);
- procedure cbbTransparenceModeChange(Sender: TObject);
+ procedure cbbTranspModeChange(Sender: TObject);
procedure btnShowClutClick(Sender: TObject);
procedure lvListChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
+ procedure actReturnFocusExecute(Sender: TObject);
+ procedure actDrawSelectedTimExecute(Sender: TObject);
private
{ Private declarations }
// pResult: PNativeXml;
@@ -121,6 +123,7 @@ type
LastDir: string;
WaitThread: TEventWaitThread;
StartedScans: Integer;
+ Settings: TSettings;
function ScanRes: TScanResult;
procedure SetListCount(Count: Integer);
@@ -281,11 +284,11 @@ begin
actTimInfo.Enabled := False;
actTimInfo.Caption := 'TIM Info';
lvList.Column[0].Caption := '# / 0';
+
+ UpdateCLUTInfo;
DrawSelTim;
DrawSelClut;
- SetCLUTListToNoCLUT;
-
cbbFiles.Items.Delete(cbbFiles.ItemIndex);
CheckButtonsAndMainMenu;
@@ -307,6 +310,11 @@ begin
end;
end;
+procedure TfrmMain.actDrawSelectedTimExecute(Sender: TObject);
+begin
+ DrawSelTim;
+end;
+
procedure TfrmMain.actExitExecute(Sender: TObject);
begin
Close;
@@ -381,6 +389,11 @@ begin
MessageBeep(MB_ICONINFORMATION);
end;
+procedure TfrmMain.actReturnFocusExecute(Sender: TObject);
+begin
+ if lvList.Enabled then lvList.SetFocus;
+end;
+
procedure TfrmMain.actScanDirExecute(Sender: TObject);
var
SelectedDir: string;
@@ -405,7 +418,8 @@ end;
procedure TfrmMain.actStretchExecute(Sender: TObject);
begin
- DrawSelTim;
+ Settings.StretchMode := actStretch.Checked;
+ actDrawSelectedTimExecute(Self);
end;
procedure TfrmMain.actTim2PngExecute(Sender: TObject);
@@ -482,6 +496,7 @@ procedure TfrmMain.btnShowClutClick(Sender: TObject);
begin
grdCurrClut.Visible := not grdCurrClut.Visible;
DrawSelClut;
+ actReturnFocusExecute(Self);
end;
procedure TfrmMain.btnStopScanClick(Sender: TObject);
@@ -489,31 +504,28 @@ begin
if ScanThreads.Count = 0 then Exit;
ScanThreads.First.StopScan := True;
+ actReturnFocusExecute(Self);
end;
procedure TfrmMain.cbbFilesChange(Sender: TObject);
begin
SetListCount(ScanRes.Count);
- lvList.SetFocus;
+ actReturnFocusExecute(Self);
lvList.Selected := nil;
lvList.Items[0].Focused := True;
lvList.Items[0].Selected := True;
end;
-procedure TfrmMain.cbbTransparenceModeChange(Sender: TObject);
+procedure TfrmMain.cbbTranspModeChange(Sender: TObject);
begin
- DrawSelTim;
-end;
-
-procedure TfrmMain.cbbBitModeChange(Sender: TObject);
-begin
- DrawSelTim;
+ Settings.TranspMode := cbbTranspMode.ItemIndex;
+ actDrawSelectedTimExecute(Self);
end;
procedure TfrmMain.cbbCLUTChange(Sender: TObject);
begin
- DrawSelTim;
+ actDrawSelectedTimExecute(Self);
DrawSelClut;
end;
@@ -544,7 +556,8 @@ begin
actExtractTim.Enabled := actReplaceTim.Enabled;
cbbCLUT.Enabled := actReplaceTim.Enabled;
- cbbTransparenceMode.Enabled := actReplaceTim.Enabled;
+ btnShowClut.Enabled := actReplaceTim.Enabled;
+ cbbTranspMode.Enabled := actReplaceTim.Enabled;
cbbBitMode.Enabled := actReplaceTim.Enabled;
//actStretch.Enabled := actReplaceTim.Enabled;
end;
@@ -629,7 +642,7 @@ begin
else
Index := cbbCLUT.ItemIndex;
- TimToPNG(TIM, Index, PNG, cbbTransparenceMode.ItemIndex);
+ TimToPNG(TIM, Index, PNG, cbbTranspMode.ItemIndex);
PNG.AssignTo(pbTim.Picture.Bitmap);
FreeTIM(TIM);
@@ -649,12 +662,21 @@ begin
if PNG^ <> nil then PNG^.Free;
Dispose(PNG);
+
+ Settings.SaveToFile;
+ Settings.Free;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
hGridRect: TGridRect;
begin
+ Settings := TSettings.Create;
+ Settings.LoadFromFile;
+
+ actStretch.Checked := Settings.StretchMode;
+ cbbTranspMode.ItemIndex := Settings.TranspMode;
+
hGridRect.Top := -1;
hGridRect.Left := -1;
hGridRect.Right := -1;
@@ -809,15 +831,6 @@ begin
Item.SubItems.Add(Format('%.2d', [TimIdx(Item.Index).Cluts]));
end;
-procedure TfrmMain.lvListSelectItem(Sender: TObject; Item: TListItem;
- Selected: Boolean);
-begin
- (*if Item = nil then Exit;
-
- if Selected then
- lvListClick(Self); *)
-end;
-
procedure TfrmMain.SetListCount(Count: Integer);
begin
lvList.Items.BeginUpdate;
@@ -952,10 +965,10 @@ begin
cbbCLUT.Items.Add(Format('CLUT [%.2d/%.2d]', [I, CLUTS]));
cbbCLUT.Items.EndUpdate;
- cbbCLUT.ItemIndex := 0;
-
if CLUTS = 0 then SetCLUTListToNoCLUT;
+ cbbCLUT.ItemIndex := 0;
+
FreeTIM(TIM);
end;
diff --git a/units/uSettings.pas b/units/uSettings.pas
new file mode 100644
index 0000000..9eee8a1
--- /dev/null
+++ b/units/uSettings.pas
@@ -0,0 +1,127 @@
+unit uSettings;
+
+ interface
+
+ uses Classes;
+ {$M+}
+
+ type
+ TCustomSettings = class
+ private
+ procedure LoadFromStream(const Stream: TStream) ;
+ procedure SaveToStream(const Stream: TStream) ;
+ public
+ procedure LoadFromFile() ;
+ procedure SaveToFile() ;
+ end;
+
+ TSettings = class(TCustomSettings)
+ private
+ FTranspMode: Integer;
+ FStretchMode: Boolean;
+ public
+ constructor Create;
+ published
+ property TranspMode: Integer read FTranspMode write FTranspMode;
+ property StretchMode: Boolean read FStretchMode write FStretchMode;
+ end;
+
+ var
+ Settings: TSettings;
+
+ implementation
+
+ uses TypInfo, Sysutils;
+
+ const FileName = 'settings.t2v';
+
+ { TSettings }
+
+ procedure TCustomSettings.LoadFromFile() ;
+ var
+ Stream: TStream;
+ begin
+ if not FileExists(FileName) then Exit;
+
+ Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
+ try
+ LoadFromStream(Stream) ;
+ finally
+ Stream.Free;
+ end;
+ end;
+
+ procedure TCustomSettings.LoadFromStream(const Stream: TStream) ;
+ var
+ Reader: TReader;
+ PropName, PropValue: string;
+ begin
+ Reader := TReader.Create(Stream, $FFF) ;
+ Stream.Position := 0;
+ Reader.ReadListBegin;
+
+ while not Reader.EndOfList do
+ begin
+ PropName := Reader.ReadString;
+ PropValue := Reader.ReadString;
+ SetPropValue(Self, PropName, PropValue) ;
+ end;
+
+ FreeAndNil(Reader) ;
+ end;
+
+ procedure TCustomSettings.SaveToFile() ;
+ var
+ Stream: TStream;
+ begin
+ Stream := TFileStream.Create(FileName, fmCreate) ;
+ try
+ SaveToStream(Stream) ;
+ finally
+ Stream.Free;
+ end;
+ end;
+
+ procedure TCustomSettings.SaveToStream(const Stream: TStream) ;
+ var
+ PropName, PropValue: string;
+ cnt: Integer;
+ lPropInfo: PPropInfo;
+ lPropCount: Integer;
+ lPropList: PPropList;
+ lPropType: PPTypeInfo;
+ Writer: TWriter;
+ begin
+ lPropCount := GetPropList(PTypeInfo(ClassInfo), lPropList) ;
+ Writer := TWriter.Create(Stream, $FFF) ;
+ Stream.Size := 0;
+ Writer.WriteListBegin;
+ for cnt := 0 to lPropCount - 1 do
+ begin
+ lPropInfo := lPropList^[cnt];
+ lPropType := lPropInfo^.PropType;
+ if lPropType^.Kind = tkMethod then Continue;
+
+ PropName := lPropInfo.Name;
+ PropValue := GetPropValue(Self, lPropInfo) ;
+ Writer.WriteString(PropName) ;
+ Writer.WriteString(PropValue) ;
+ end;
+
+ Writer.WriteListEnd;
+ FreeAndNil(Writer) ;
+ end;
+
+ { TSettings }
+
+constructor TSettings.Create;
+begin
+ FTranspMode := 0;
+ FStretchMode := False;
+end;
+
+initialization
+ Settings := TSettings.Create;
+ finalization
+ FreeAndNil(Settings) ;
+ end.