Fixed Linux file permissions; Added two view bitmodes; Removed bitmode resetting after selection another Tim.

This commit is contained in:
meffi@lab313.ru
2014-04-23 12:19:04 +00:00
parent 066eba1353
commit e2f38ea43d
7 changed files with 295 additions and 246 deletions

View File

@@ -24,6 +24,7 @@
<AutoIncrementBuild Value="True"/> <AutoIncrementBuild Value="True"/>
<MajorVersionNr Value="1"/> <MajorVersionNr Value="1"/>
<RevisionNr Value="67"/> <RevisionNr Value="67"/>
<BuildNr Value="2"/>
<StringTable CompanyName="Lab 313" FileDescription="The best TIMs tool ever!:)" ProductVersion=""/> <StringTable CompanyName="Lab 313" FileDescription="The best TIMs tool ever!:)" ProductVersion=""/>
</VersionInfo> </VersionInfo>
<BuildModes Count="1"> <BuildModes Count="1">
@@ -42,7 +43,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="13"> <Units Count="14">
<Unit0> <Unit0>
<Filename Value="tim2view.lpr"/> <Filename Value="tim2view.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@@ -111,6 +112,10 @@
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="BGRABitmap"/> <UnitName Value="BGRABitmap"/>
</Unit12> </Unit12>
<Unit13>
<Filename Value="todos.inc"/>
<IsPartOfProject Value="True"/>
</Unit13>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
@@ -130,15 +135,7 @@
<UseAnsiStrings Value="False"/> <UseAnsiStrings Value="False"/>
</SyntaxOptions> </SyntaxOptions>
</Parsing> </Parsing>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<RelocatableUnit Value="True"/>
</CodeGeneration>
<Linking> <Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
</Debugging>
<LinkSmart Value="True"/>
<Options> <Options>
<Win32> <Win32>
<GraphicApplication Value="True"/> <GraphicApplication Value="True"/>

View File

@@ -1,138 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<CONFIG> <CONFIG>
<ProjectSession> <ProjectSession>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="9"/> <Version Value="9"/>
<BuildModes Active="Default"/> <BuildModes Active="Default"/>
<Units Count="13"> <Units Count="14">
<Unit0> <Unit0>
<Filename Value="tim2view.lpr"/> <Filename Value="tim2view.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="tim2view"/> <UnitName Value="tim2view"/>
<EditorIndex Value="5"/> <EditorIndex Value="8"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<CursorPos X="52" Y="16"/> <CursorPos X="52" Y="16"/>
<UsageCount Value="33"/> <UsageCount Value="40"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="frmMain"/> <ComponentName Value="frmMain"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="umain"/> <UnitName Value="umain"/>
<IsVisibleTab Value="True"/> <EditorIndex Value="0"/>
<EditorIndex Value="0"/> <WindowIndex Value="0"/>
<WindowIndex Value="0"/> <TopLine Value="427"/>
<TopLine Value="242"/> <CursorPos X="9" Y="450"/>
<CursorPos X="87" Y="265"/> <UsageCount Value="40"/>
<UsageCount Value="33"/> <Loaded Value="True"/>
<Loaded Value="True"/> <LoadedDesigner Value="True"/>
<LoadedDesigner Value="True"/> </Unit1>
</Unit1> <Unit2>
<Unit2> <Filename Value="edc.pas"/>
<Filename Value="edc.pas"/> <IsPartOfProject Value="True"/>
<IsPartOfProject Value="True"/> <UnitName Value="edc"/>
<UnitName Value="edc"/> <UsageCount Value="40"/>
<UsageCount Value="33"/> </Unit2>
</Unit2> <Unit3>
<Unit3> <Filename Value="ecc.pas"/>
<Filename Value="ecc.pas"/> <IsPartOfProject Value="True"/>
<IsPartOfProject Value="True"/> <UnitName Value="ecc"/>
<UnitName Value="ecc"/> <EditorIndex Value="1"/>
<UsageCount Value="33"/> <WindowIndex Value="0"/>
</Unit3> <TopLine Value="13"/>
<Unit4> <CursorPos X="1" Y="1"/>
<Filename Value="ucommon.pas"/> <UsageCount Value="40"/>
<IsPartOfProject Value="True"/> <Loaded Value="True"/>
<UnitName Value="ucommon"/> </Unit3>
<EditorIndex Value="1"/> <Unit4>
<WindowIndex Value="0"/> <Filename Value="ucommon.pas"/>
<TopLine Value="1"/> <IsPartOfProject Value="True"/>
<CursorPos X="56" Y="12"/> <UnitName Value="ucommon"/>
<UsageCount Value="33"/> <IsVisibleTab Value="True"/>
<Loaded Value="True"/> <EditorIndex Value="2"/>
</Unit4> <WindowIndex Value="0"/>
<Unit5> <TopLine Value="1"/>
<Filename Value="utim.pas"/> <CursorPos X="35" Y="6"/>
<IsPartOfProject Value="True"/> <UsageCount Value="40"/>
<UnitName Value="utim"/> <Loaded Value="True"/>
<EditorIndex Value="3"/> </Unit4>
<WindowIndex Value="0"/> <Unit5>
<TopLine Value="285"/> <Filename Value="utim.pas"/>
<CursorPos X="31" Y="299"/> <IsPartOfProject Value="True"/>
<UsageCount Value="33"/> <UnitName Value="utim"/>
<Loaded Value="True"/> <EditorIndex Value="5"/>
</Unit5> <WindowIndex Value="0"/>
<Unit6> <TopLine Value="431"/>
<Filename Value="ucdimage.pas"/> <CursorPos X="65" Y="447"/>
<IsPartOfProject Value="True"/> <UsageCount Value="40"/>
<UnitName Value="ucdimage"/> <Loaded Value="True"/>
<WindowIndex Value="0"/> </Unit5>
<TopLine Value="81"/> <Unit6>
<CursorPos X="95" Y="89"/> <Filename Value="ucdimage.pas"/>
<UsageCount Value="33"/> <IsPartOfProject Value="True"/>
</Unit6> <UnitName Value="ucdimage"/>
<Unit7> <WindowIndex Value="0"/>
<Filename Value="usettings.pas"/> <TopLine Value="81"/>
<IsPartOfProject Value="True"/> <CursorPos X="95" Y="89"/>
<UnitName Value="usettings"/> <UsageCount Value="40"/>
<WindowIndex Value="0"/> </Unit6>
<TopLine Value="17"/> <Unit7>
<CursorPos X="76" Y="31"/> <Filename Value="usettings.pas"/>
<UsageCount Value="33"/> <IsPartOfProject Value="True"/>
</Unit7> <UnitName Value="usettings"/>
<Unit8> <EditorIndex Value="3"/>
<Filename Value="uscanresult.pas"/> <WindowIndex Value="0"/>
<IsPartOfProject Value="True"/> <TopLine Value="81"/>
<UnitName Value="uscanresult"/> <CursorPos X="55" Y="92"/>
<EditorIndex Value="6"/> <UsageCount Value="40"/>
<WindowIndex Value="0"/> <Loaded Value="True"/>
<TopLine Value="16"/> </Unit7>
<CursorPos X="64" Y="25"/> <Unit8>
<UsageCount Value="33"/> <Filename Value="uscanresult.pas"/>
<Loaded Value="True"/> <IsPartOfProject Value="True"/>
</Unit8> <UnitName Value="uscanresult"/>
<Unit9> <EditorIndex Value="9"/>
<Filename Value="uscanthread.pas"/> <WindowIndex Value="0"/>
<IsPartOfProject Value="True"/> <TopLine Value="16"/>
<UnitName Value="uscanthread"/> <CursorPos X="64" Y="25"/>
<EditorIndex Value="2"/> <UsageCount Value="40"/>
<WindowIndex Value="0"/> <Loaded Value="True"/>
<TopLine Value="79"/> </Unit8>
<CursorPos X="75" Y="120"/> <Unit9>
<UsageCount Value="33"/> <Filename Value="uscanthread.pas"/>
<Loaded Value="True"/> <IsPartOfProject Value="True"/>
</Unit9> <UnitName Value="uscanthread"/>
<Unit10> <EditorIndex Value="4"/>
<Filename Value="ucpucount.pas"/> <WindowIndex Value="0"/>
<IsPartOfProject Value="True"/> <TopLine Value="1"/>
<UnitName Value="ucpucount"/> <CursorPos X="53" Y="88"/>
<UsageCount Value="33"/> <UsageCount Value="40"/>
</Unit10> <Loaded Value="True"/>
<Unit11> </Unit9>
<Filename Value="udrawtim.pas"/> <Unit10>
<IsPartOfProject Value="True"/> <Filename Value="ucpucount.pas"/>
<UnitName Value="udrawtim"/> <IsPartOfProject Value="True"/>
<EditorIndex Value="4"/> <UnitName Value="ucpucount"/>
<WindowIndex Value="0"/> <UsageCount Value="40"/>
<TopLine Value="40"/> </Unit10>
<CursorPos X="21" Y="45"/> <Unit11>
<UsageCount Value="33"/> <Filename Value="udrawtim.pas"/>
<Loaded Value="True"/> <IsPartOfProject Value="True"/>
</Unit11> <UnitName Value="udrawtim"/>
<Unit12> <EditorIndex Value="6"/>
<Filename Value="bgrabitmap\bgrabitmap.pas"/> <WindowIndex Value="0"/>
<IsPartOfProject Value="True"/> <TopLine Value="76"/>
<UnitName Value="BGRABitmap"/> <CursorPos X="62" Y="41"/>
<UsageCount Value="33"/> <UsageCount Value="40"/>
</Unit12> <Loaded Value="True"/>
</Units> </Unit11>
<General> <Unit12>
<ActiveWindowIndexAtStart Value="0"/> <Filename Value="bgrabitmap\bgrabitmap.pas"/>
</General> <IsPartOfProject Value="True"/>
</ProjectSession> <UnitName Value="BGRABitmap"/>
<EditorMacros Count="0"/> <UsageCount Value="40"/>
</CONFIG> </Unit12>
<Unit13>
<Filename Value="todos.inc"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="7"/>
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="94" Y="2"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit13>
</Units>
<General>
<ActiveWindowIndexAtStart Value="0"/>
</General>
</ProjectSession>
<EditorMacros Count="0"/>
</CONFIG>

Binary file not shown.

View File

@@ -3,7 +3,7 @@ unit ucommon;
interface interface
const const
cProgramName = 'Tim2View SVN.r67 by [Lab 313] (for ' + cProgramName = 'Tim2View SVN.r70 by [Lab 313] (for ' +
{$IFDEF Linux}'Linux' + {$IFEND} {$IFDEF Linux}'Linux' + {$IFEND}
{$IFDEF Darwin}'Mac OS X' + {$IFEND} {$IFDEF Darwin}'Mac OS X' + {$IFEND}
{$IFDEF Windows}'Windows' + {$IFEND} {$IFDEF Windows}'Windows' + {$IFEND}
@@ -18,7 +18,7 @@ const
sStatusBarScanningFile = 'Scanning File...'; sStatusBarScanningFile = 'Scanning File...';
sStatusBarTimsExtracting = 'TIMs Extracting...'; sStatusBarTimsExtracting = 'TIMs Extracting...';
sStatusBarPngsExtracting = 'PNGs Extracting...'; sStatusBarPngsExtracting = 'PNGs Extracting...';
sStatusBarExtracted = 'Exctracted Successfully!'; sStatusBarExtracted = 'Extracted Successfully!';
sStatusBarParsingResult = 'Parsing Result...'; sStatusBarParsingResult = 'Parsing Result...';
sScanResultGood = 'Scan completed!'; sScanResultGood = 'Scan completed!';
sSelectDirCaption = 'Please, select directory for scan...'; sSelectDirCaption = 'Please, select directory for scan...';

127
umain.lfm
View File

@@ -1,7 +1,7 @@
object frmMain: TfrmMain object frmMain: TfrmMain
Left = 561 Left = 807
Height = 590 Height = 590
Top = 213 Top = 193
Width = 780 Width = 780
HorzScrollBar.Page = 780 HorzScrollBar.Page = 780
HorzScrollBar.Range = 489 HorzScrollBar.Range = 489
@@ -524,6 +524,7 @@ object frmMain: TfrmMain
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
Smooth = True Smooth = True
TabOrder = 1 TabOrder = 1
BarShowText = True
end end
object btnStopScan: TButton object btnStopScan: TButton
Left = 1 Left = 1
@@ -581,7 +582,6 @@ object frmMain: TfrmMain
Top = 28 Top = 28
Width = 253 Width = 253
Align = alClient Align = alClient
AutoWidthLastColumn = True
Columns = < Columns = <
item item
Caption = '# / 0' Caption = '# / 0'
@@ -600,7 +600,7 @@ object frmMain: TfrmMain
item item
Alignment = taCenter Alignment = taCenter
Caption = 'CLUTs' Caption = 'CLUTs'
Width = 84 Width = 57
end> end>
ColumnClick = False ColumnClick = False
GridLines = True GridLines = True
@@ -656,61 +656,23 @@ object frmMain: TfrmMain
Color = clBtnFace Color = clBtnFace
ParentColor = False ParentColor = False
TabOrder = 1 TabOrder = 1
object splImageClut: TSplitter
Cursor = crVSplit
Left = 1
Height = 3
Top = 1
Width = 520
Align = alTop
Beveled = True
Color = clBtnFace
ParentColor = False
ResizeAnchor = akTop
end
object grdCurrClut: TDrawGrid
Left = 1
Height = 150
Top = 320
Width = 520
Align = alBottom
AutoEdit = False
ColCount = 1
DefaultColWidth = 14
DefaultRowHeight = 14
Enabled = False
ExtendedSelect = False
FixedCols = 0
FixedRows = 0
Options = [goFixedVertLine, goFixedHorzLine, goDrawFocusSelected]
RowCount = 1
ScrollBars = ssAutoVertical
TabOrder = 0
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
UseXORFeatures = True
Visible = False
OnDblClick = grdCurrClutDblClick
OnDrawCell = grdCurrClutDrawCell
end
object pnlImageOptions: TPanel object pnlImageOptions: TPanel
Left = 1 Left = 1
Height = 25 Height = 27
Top = 470 Top = 468
Width = 520 Width = 520
Align = alBottom Align = alBottom
AutoSize = True AutoSize = True
BevelOuter = bvNone BevelOuter = bvLowered
ClientHeight = 25 ClientHeight = 27
ClientWidth = 520 ClientWidth = 520
Color = clBtnFace Color = clBtnFace
ParentColor = False ParentColor = False
TabOrder = 1 TabOrder = 0
object btnShowClut: TButton object btnShowClut: TButton
Left = 467 Left = 466
Height = 23 Height = 23
Top = 1 Top = 2
Width = 52 Width = 52
Align = alRight Align = alRight
BorderSpacing.Around = 1 BorderSpacing.Around = 1
@@ -719,18 +681,20 @@ object frmMain: TfrmMain
TabOrder = 0 TabOrder = 0
end end
object cbbBitMode: TComboBox object cbbBitMode: TComboBox
Left = 1 Left = 2
Height = 21 Height = 21
Top = 1 Top = 2
Width = 90 Width = 159
Align = alLeft Align = alLeft
BorderSpacing.Around = 1 BorderSpacing.Around = 1
ItemHeight = 13 ItemHeight = 13
ItemIndex = 0 ItemIndex = 0
Items.Strings = ( Items.Strings = (
'Real' 'Real'
'4 BPP' '4 BPP (Inner palette)'
'8 BPP' '4 BPP (Random palette) '
'8 BPP (Inner palette)'
'8 BPP (Random palette)'
'16 BPP' '16 BPP'
'24 BPP' '24 BPP'
) )
@@ -741,9 +705,9 @@ object frmMain: TfrmMain
Text = 'Real' Text = 'Real'
end end
object cbbTranspMode: TComboBox object cbbTranspMode: TComboBox
Left = 92 Left = 162
Height = 21 Height = 21
Top = 1 Top = 2
Width = 136 Width = 136
Align = alLeft Align = alLeft
BorderSpacing.Around = 1 BorderSpacing.Around = 1
@@ -762,9 +726,9 @@ object frmMain: TfrmMain
Text = 'Full transparence' Text = 'Full transparence'
end end
object cbbCLUT: TComboBox object cbbCLUT: TComboBox
Left = 357 Left = 356
Height = 21 Height = 21
Top = 1 Top = 2
Width = 109 Width = 109
Align = alRight Align = alRight
BorderSpacing.Around = 1 BorderSpacing.Around = 1
@@ -775,10 +739,49 @@ object frmMain: TfrmMain
TabOrder = 3 TabOrder = 3
end end
end end
object pnlClut: TPanel
Left = 1
Height = 116
Top = 352
Width = 520
Align = alBottom
BevelOuter = bvLowered
ClientHeight = 116
ClientWidth = 520
Color = clBtnFace
ParentColor = False
TabOrder = 1
Visible = False
object grdClut: TDrawGrid
Left = 1
Height = 114
Top = 1
Width = 518
Align = alClient
AutoEdit = False
ColCount = 1
DefaultColWidth = 14
DefaultRowHeight = 14
Enabled = False
ExtendedSelect = False
FixedCols = 0
FixedRows = 0
Options = [goFixedVertLine, goFixedHorzLine, goDrawFocusSelected]
RowCount = 1
ScrollBars = ssAutoVertical
TabOrder = 0
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
UseXORFeatures = True
OnDblClick = grdClutDblClick
OnDrawCell = grdClutDrawCell
end
end
object imgTim: TImage object imgTim: TImage
Left = 1 Left = 1
Height = 316 Height = 351
Top = 4 Top = 1
Width = 520 Width = 520
AntialiasingMode = amOff AntialiasingMode = amOff
Align = alClient Align = alClient
@@ -825,7 +828,7 @@ object frmMain: TfrmMain
Title = 'Please, select File...' Title = 'Please, select File...'
DefaultExt = '.bin' DefaultExt = '.bin'
Filter = 'All Files (*.*)|*.*' Filter = 'All Files (*.*)|*.*'
Options = [ofHideReadOnly, ofNoChangeDir, ofAllowMultiSelect, ofFileMustExist, ofNoNetworkButton, ofEnableSizing, ofForceShowHidden] Options = [ofHideReadOnly, ofNoChangeDir, ofAllowMultiSelect, ofNoNetworkButton, ofEnableSizing, ofForceShowHidden]
left = 664 left = 664
top = 448 top = 448
end end
@@ -1076,7 +1079,7 @@ object frmMain: TfrmMain
end end
end end
object dlgSelectDir: TSelectDirectoryDialog object dlgSelectDir: TSelectDirectoryDialog
Options = [ofNoChangeDir, ofPathMustExist, ofNoNetworkButton, ofEnableSizing, ofViewDetail] Options = [ofNoChangeDir, ofNoNetworkButton, ofEnableSizing, ofViewDetail]
left = 449 left = 449
top = 450 top = 450
end end

View File

@@ -10,6 +10,8 @@ uses
uscanresult, uscanthread, usettings, utim, udrawtim; uscanresult, uscanthread, usettings, utim, udrawtim;
{$INCLUDE todos.inc}
type type
{ TfrmMain } { TfrmMain }
@@ -49,7 +51,7 @@ type
dlgSavePNG: TSavePictureDialog; dlgSavePNG: TSavePictureDialog;
dlgSaveTIM: TSaveDialog; dlgSaveTIM: TSaveDialog;
ExtractTIM1: TMenuItem; ExtractTIM1: TMenuItem;
grdCurrClut: TDrawGrid; grdClut: TDrawGrid;
imgTim: TImage; imgTim: TImage;
lblStatus: TLabel; lblStatus: TLabel;
lvList: TListView; lvList: TListView;
@@ -83,6 +85,7 @@ type
N1: TMenuItem; N1: TMenuItem;
N3: TMenuItem; N3: TMenuItem;
N5: TMenuItem; N5: TMenuItem;
pnlClut: TPanel;
pbProgress: TProgressBar; pbProgress: TProgressBar;
pnlExtractAll: TPanel; pnlExtractAll: TPanel;
pnlImage: TPanel; pnlImage: TPanel;
@@ -95,7 +98,6 @@ type
ReplaceTIM1: TMenuItem; ReplaceTIM1: TMenuItem;
SaveasPNG1: TMenuItem; SaveasPNG1: TMenuItem;
dlgSelectDir: TSelectDirectoryDialog; dlgSelectDir: TSelectDirectoryDialog;
splImageClut: TSplitter;
splMain: TSplitter; splMain: TSplitter;
sbMain: TStatusBar; sbMain: TStatusBar;
procedure actAboutExecute(Sender: TObject); procedure actAboutExecute(Sender: TObject);
@@ -124,8 +126,8 @@ type
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of string); procedure FormDropFiles(Sender: TObject; const FileNames: array of string);
procedure grdCurrClutDblClick(Sender: TObject); procedure grdClutDblClick(Sender: TObject);
procedure grdCurrClutDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure grdClutDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
procedure lvListData(Sender: TObject; Item: TListItem); procedure lvListData(Sender: TObject; Item: TListItem);
procedure lvListSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); procedure lvListSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
private private
@@ -165,6 +167,7 @@ type
function FormatPngName(const FileName: string; ListIdx_, BitMode, Clut: Integer): string; function FormatPngName(const FileName: string; ListIdx_, BitMode, Clut: Integer): string;
procedure ShowTim; procedure ShowTim;
procedure ShowTimInfo(ShowInfo: Boolean); procedure ShowTimInfo(ShowInfo: Boolean);
procedure RemoveGridSelection;
public public
{ public declarations } { public declarations }
ScanResults: TScanResultList; //List of finished scan results ScanResults: TScanResultList; //List of finished scan results
@@ -182,6 +185,10 @@ uses ucdimage, ucpucount, lcltype, ucommon, LCLIntf
{$IFDEF windows} {$IFDEF windows}
,registry ,registry
{$IFEND} {$IFEND}
{$IFDEF Linux}
,BaseUnix
{$IFEND}
; ;
{$R *.lfm} {$R *.lfm}
@@ -229,11 +236,12 @@ begin
if not dlgSavePNG.Execute then Exit; if not dlgSavePNG.Execute then Exit;
Surf^.SaveToFile(UTF8ToSys(dlgSavePNG.FileName)); Surf^.SaveToFile(UTF8ToSys(dlgSavePNG.FileName));
{$IFDEF Linux}FpChmod(dlgSavePNG.FileName, &777){$IFEND}
end; end;
procedure TfrmMain.btnShowClutClick(Sender: TObject); procedure TfrmMain.btnShowClutClick(Sender: TObject);
begin begin
grdCurrClut.Visible := not grdCurrClut.Visible; pnlClut.Visible := not pnlClut.Visible;
DrawSelClut; DrawSelClut;
actReturnFocus.Execute; actReturnFocus.Execute;
end; end;
@@ -262,7 +270,7 @@ end;
procedure TfrmMain.actAboutExecute(Sender: TObject); procedure TfrmMain.actAboutExecute(Sender: TObject);
begin begin
Application.MessageBox(cProgramName + #13 + 'Some "about strings" should be here!:)', 'About', MB_OK + MB_ICONINFORMATION); Application.MessageBox(cProgramName + #13#10#13#10 + 'Some "about strings" should be here!:)', 'About', MB_OK + MB_ICONINFORMATION);
end; end;
procedure TfrmMain.actAssocTimsExecute(Sender: TObject); procedure TfrmMain.actAssocTimsExecute(Sender: TObject);
@@ -380,7 +388,9 @@ begin
TIM := LoadTimFromFile(FName, OFFSET, IsImage, SIZE); TIM := LoadTimFromFile(FName, OFFSET, IsImage, SIZE);
TimToPNG(TIM, cbbCLUT.ItemIndex, Surf_, cbbTranspMode.ItemIndex); TimToPNG(TIM, cbbCLUT.ItemIndex, Surf_, cbbTranspMode.ItemIndex);
Surf_^.SaveToFile(UTF8ToSys(Path + FormatPngName(FName, I - 1, BIT_MODE, 0))); Path := Path + FormatPngName(FName, I - 1, BIT_MODE, 0);
Surf_^.SaveToFile(UTF8ToSys(Path));
{$IFDEF Linux}FpChmod(Path, &777){$IFEND}
Surf_^.Free; Surf_^.Free;
Surf_^ := nil; Surf_^ := nil;
@@ -404,6 +414,7 @@ begin
TIM := SelectedTim; TIM := SelectedTim;
SaveTimToFile(dlgSaveTIM.FileName, TIM); SaveTimToFile(dlgSaveTIM.FileName, TIM);
{$IFDEF Linux}FpChmod(dlgSaveTIM.FileName, &777){$IFEND}
FreeTIM(TIM); FreeTIM(TIM);
end; end;
@@ -435,7 +446,9 @@ begin
CreateDirUTF8(Path); CreateDirUTF8(Path);
TIM := LoadTimFromFile(FName, OFFSET, IsImage, SIZE); TIM := LoadTimFromFile(FName, OFFSET, IsImage, SIZE);
SaveTimToFile(Path + FormatTimName(FName, I - 1, BIT_MODE), TIM); Path := Path + FormatTimName(FName, I - 1, BIT_MODE);
SaveTimToFile(Path, TIM);
{$IFDEF Linux}FpChmod(Path, &777){$IFEND}
FreeTIM(TIM); FreeTIM(TIM);
pbProgress.Position := I; pbProgress.Position := I;
@@ -501,24 +514,15 @@ begin
end; end;
procedure TfrmMain.FormCreate(Sender: TObject); procedure TfrmMain.FormCreate(Sender: TObject);
var
hGridRect: TGridRect;
begin begin
{$IFnDEF Windows}mnOptions.Enabled := False;{$IFEND}
Settings := TSettings.Create(ExtractFilePath(ParamStrUTF8(0))); Settings := TSettings.Create(ExtractFilePath(ParamStrUTF8(0)));
actStretch.Checked := Settings.StretchMode; actStretch.Checked := Settings.StretchMode;
cbbTranspMode.ItemIndex := Settings.TranspMode; cbbTranspMode.ItemIndex := Settings.TranspMode;
LastDir := Settings.LastDir; LastDir := Settings.LastDir;
cbbBitMode.ItemIndex := Settings.BitMode;
pnlImage.Color := Settings.BackColor; pnlImage.Color := Settings.BackColor;
hGridRect.Top := -1;
hGridRect.Left := -1;
hGridRect.Right := -1;
hGridRect.Bottom := -1;
grdCurrClut.Selection := hGridRect;
ScanThreads := TScanThreadList.Create(False); //False - to able scan thread remove itself from this list ScanThreads := TScanThreadList.Create(False); //False - to able scan thread remove itself from this list
ScanResults := TScanResultList.Create(False); ScanResults := TScanResultList.Create(False);
StartedScans := 0; StartedScans := 0;
@@ -543,7 +547,7 @@ begin
ScanPath(FileNames[i - 1]); ScanPath(FileNames[i - 1]);
end; end;
procedure TfrmMain.grdCurrClutDblClick(Sender: TObject); procedure TfrmMain.grdClutDblClick(Sender: TObject);
var var
TIM: PTIM; TIM: PTIM;
I, SELECTED_CELL, W, DIALOG_COLOR, CLUT_NUM: Integer; I, SELECTED_CELL, W, DIALOG_COLOR, CLUT_NUM: Integer;
@@ -553,7 +557,7 @@ begin
TIM := SelectedTim; TIM := SelectedTim;
if TIM = nil then Exit; if TIM = nil then Exit;
SELECTED_CELL := grdCurrCLUT.Row * grdCurrCLUT.ColCount + grdCurrCLUT.Col; SELECTED_CELL := grdClut.Row * grdClut.ColCount + grdClut.Col;
W := GetTimColorsCount(TIM); W := GetTimColorsCount(TIM);
if SELECTED_CELL >= W then if SELECTED_CELL >= W then
@@ -603,7 +607,7 @@ begin
end; end;
procedure TfrmMain.grdCurrClutDrawCell(Sender: TObject; aCol, aRow: Integer; procedure TfrmMain.grdClutDrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState); aRect: TRect; aState: TGridDrawState);
var var
TIM: PTIM; TIM: PTIM;
@@ -617,7 +621,7 @@ begin
Exit; Exit;
end; end;
DrawClutCell(TIM, cbbCLUT.ItemIndex, @grdCurrCLUT, ACol, ARow); DrawClutCell(TIM, cbbCLUT.ItemIndex, @grdClut, ACol, ARow);
FreeTIM(TIM); FreeTIM(TIM);
end; end;
@@ -763,6 +767,8 @@ end;
procedure TfrmMain.CheckButtonsAndMainMenu; procedure TfrmMain.CheckButtonsAndMainMenu;
begin begin
RemoveGridSelection;
cbbFiles.Enabled := (cbbFiles.Items.Count <> 0); cbbFiles.Enabled := (cbbFiles.Items.Count <> 0);
pnlList.Enabled := cbbFiles.Enabled; pnlList.Enabled := cbbFiles.Enabled;
@@ -827,7 +833,6 @@ begin
if TIM = nil then Exit; if TIM = nil then Exit;
CLUTS := GetTIMClutsCount(TIM); CLUTS := GetTIMClutsCount(TIM);
//cbbCLUT.Items.Clear;
cbbCLUT.Items.BeginUpdate; cbbCLUT.Items.BeginUpdate;
for I := 0 to cbbCLUT.Items.Count -1 do for I := 0 to cbbCLUT.Items.Count -1 do
@@ -854,9 +859,11 @@ begin
case cbbBitMode.ItemIndex of case cbbBitMode.ItemIndex of
1: mode := cTIM4C; 1: mode := cTIM4C;
2: mode := cTIM8C; 2: mode := cTIM4NC;
3: mode := cTIM16NC; 3: mode := cTIM8C;
4: mode := cTIM24NC; 4: mode := cTIM8NC;
5: mode := cTIM16NC;
6: mode := cTIM24NC;
else else
mode := $FF; mode := $FF;
end; end;
@@ -878,26 +885,26 @@ procedure TfrmMain.DrawSelClut;
var var
TIM: PTIM; TIM: PTIM;
begin begin
if not grdCurrClut.Visible then Exit; if not pnlClut.Visible then Exit;
ClearGrid(@grdCurrCLUT); ClearGrid(@grdClut);
TIM := SelectedTim; TIM := SelectedTim;
if TIM = nil then if TIM = nil then
begin begin
grdCurrCLUT.ColCount := 1; grdClut.ColCount := 1;
grdCurrCLUT.RowCount := 1; grdClut.RowCount := 1;
Exit; Exit;
end; end;
grdCurrCLUT.Enabled := TIMHasCLUT(TIM); grdClut.Enabled := TIMHasCLUT(TIM);
if TIMHasCLUT(TIM) then if TIMHasCLUT(TIM) then
DrawCLUT(TIM, cbbCLUT.ItemIndex, @grdCurrCLUT) DrawCLUT(TIM, cbbCLUT.ItemIndex, @grdClut)
else else
begin begin
grdCurrCLUT.ColCount := 1; grdClut.ColCount := 1;
grdCurrCLUT.RowCount := 1; grdClut.RowCount := 1;
end; end;
FreeTIM(TIM); FreeTIM(TIM);
@@ -927,7 +934,8 @@ begin
if (lvList.Selected = nil) then Exit; if (lvList.Selected = nil) then Exit;
if (lvList.Items.Count = 0) then Exit; if (lvList.Items.Count = 0) then Exit;
cbbBitMode.ItemIndex := 0; { TODO : Reset bitmode or not? }
//cbbBitMode.ItemIndex := 0;
UpdateCLUTInfo; UpdateCLUTInfo;
DrawSelTim; DrawSelTim;
@@ -981,5 +989,16 @@ begin
FreeTIM(TIM); FreeTIM(TIM);
end; end;
procedure TfrmMain.RemoveGridSelection;
var
hGrid: TGridRect;
begin
hGrid.Top := -1;
hGrid.Left := -1;
hGrid.Right := -1;
hGrid.Bottom := -1;
grdClut.Selection := hGrid;
end;
end. end.

View File

@@ -22,6 +22,8 @@ type
function FLastDirRead(): string; function FLastDirRead(): string;
procedure FBackColorWrite(Color: TColor); procedure FBackColorWrite(Color: TColor);
function FBackColorRead(): TColor; function FBackColorRead(): TColor;
procedure FBitModeWrite(Mode: Integer);
function FBitModeRead(): Integer;
public public
constructor Create(const DirPath: string); constructor Create(const DirPath: string);
destructor Destroy; override; destructor Destroy; override;
@@ -29,6 +31,7 @@ type
property StretchMode: Boolean read FStretchModeRead write FStretchModeWrite; property StretchMode: Boolean read FStretchModeRead write FStretchModeWrite;
property LastDir: string read FLastDirRead write FLastDirWrite; property LastDir: string read FLastDirRead write FLastDirWrite;
property BackColor: TColor read FBackColorRead write FBackColorWrite; property BackColor: TColor read FBackColorRead write FBackColorWrite;
property BitMode: Integer read FBitModeRead write FBitModeWrite;
end; end;
implementation implementation
@@ -79,6 +82,16 @@ begin
Result := FIniFile.ReadInteger(sMain, 'BackColor', clBtnFace); Result := FIniFile.ReadInteger(sMain, 'BackColor', clBtnFace);
end; end;
procedure TSettings.FBitModeWrite(Mode: Integer);
begin
FIniFile.WriteInteger(sMain, 'BitMode', Mode);
end;
function TSettings.FBitModeRead: Integer;
begin
Result := FIniFile.ReadInteger(sMain, 'BitMode', 0);
end;
constructor TSettings.Create(const DirPath: string); constructor TSettings.Create(const DirPath: string);
begin begin
inherited Create; inherited Create;