Changeset 51 for oup/current


Ignore:
Timestamp:
Dec 23, 2006, 11:16:42 PM (18 years ago)
Author:
alloc
Message:
 
Location:
oup/current
Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • oup/current/Code/OniDataClass.pas

    r46 r51  
    22interface
    33uses Data, DataStructures, Classes, SysUtils, StrUtils,
    4   Dialogs, ABSDecUtil, ABSMain, DB;
     4  Dialogs, ABSDecUtil, ABSMain, DB, Windows;
    55
    66type
     
    103103    FDatabase: TABSDatabase;
    104104    FQuery:    TABSQuery;
     105    Fdat_files:    TFiles;
     106    Fdat_extensionsmap: TExtensionsMap;
    105107  protected
    106108  public
     
    108110    procedure Close; override;
    109111
     112    procedure UpdateListCache;
    110113    //      function GetDatLinks(srcid:LongWord):TDatLinks;
    111114    function GetFileInfo(fileid: LongWord): TFileInfo; override;
     
    849852  FQuery.Close;
    850853
     854  UpdateListCache;
     855
    851856  Result   := True;
    852857  FBackend := ODB_ADB;
     
    865870
    866871
    867 
    868 function TOniDataADB.GetFileInfo(fileid: LongWord): TFileInfo;
    869 begin
    870   if fileid < Self.GetFilesCount then
    871   begin
    872     FQuery.SQL.Text := 'SELECT * FROM datfiles WHERE id=' + IntToStr(
    873       fileid) + ' ORDER BY id ASC;';
    874     FQuery.Open;
    875     if FQuery.RecordCount = 1 then
    876     begin
    877       FQuery.First;
    878       Result.ID      := FQuery.FieldByName('id').AsInteger;
    879       Result.Name    := FQuery.FieldByName('name').AsString;
    880       Result.Extension := FQuery.FieldByName('extension').AsString;
    881       Result.FileName := FormatNumber(Result.ID, 5, '0') + '-' + Result.Name + '.' +
    882         Result.Extension;
    883       Result.Size    := FQuery.FieldByName('size').AsInteger;
    884       Result.FileType := HexToLong(FQuery.FieldByName('contenttype').AsString);
    885       Result.DatAddr := 0;
    886       Result.opened  := False;
    887     end;
    888     FQuery.Close;
    889   end
    890   else
    891   begin
    892     Result.ID := -1;
    893   end;
    894 end;
    895 
    896 
    897 
    898 
    899 function TOniDataADB.GetFilesList(ext: String; pattern: String;
    900   NoEmptyFiles: Boolean; sort: TSortType): TStringArray;
     872procedure TOniDataADB.UpdateListCache;
    901873var
    902874  i:     LongWord;
    903   where: String;
    904   where_ext: String;
    905   order: String;
    906 begin
    907   where := '';
    908   if Length(ext) > 0 then
    909   begin
    910     if Length(where) > 0 then
    911       where := where + ' AND ';
    912     if Pos(',', ext) > 0 then
    913     begin
    914       i := 1;
    915       where_ext := '';
    916       while i < Length(ext) do
    917       begin
    918         if Length(where_ext) > 0 then
    919           where_ext := where_ext + ' OR ';
    920         where_ext := where_ext + '(extension="' + MidStr(ext, i, 4) + '")';
    921         i := i + 5;
    922       end;
    923       where := where + '(' + where_ext + ')';
    924     end
    925     else
    926     begin
    927       where := where + '(extension="' + ext + '")';
    928     end;
    929   end;
    930   if Length(pattern) > 0 then
    931   begin
    932     if Length(where) > 0 then
    933       where := where + ' AND ';
    934     where := where + '(name LIKE "%' + pattern + '%")';
    935   end;
    936   if NoEmptyFiles then
    937   begin
    938     if Length(where) > 0 then
    939       where := where + ' AND ';
    940     where := where + '(contenttype<>2)';
    941   end;
    942   if Length(where) > 0 then
    943     where := ' WHERE ' + where;
    944   case sort of
    945     stIDAsc:    order := ' ORDER BY id ASC';
    946     stIDDesc:   order := ' ORDER BY id DESC';
    947     stNameAsc:  order := ' ORDER BY name ASC, id ASC';
    948     stNameDesc: order := ' ORDER BY name DESC, id ASC';
    949     stExtAsc:   order := ' ORDER BY extension ASC, id ASC';
    950     stExtDesc:  order := ' ORDER BY extension DESC, id ASC';
    951   end;
    952   FQuery.SQL.Text := 'SELECT id,name,extension FROM datfiles' + where + order + ';';
     875  temps: String;
     876begin
     877  FQuery.SQL.Text := 'SELECT id,name,extension,[size],contenttype FROM datfiles ORDER BY id ASC;';
    953878  FQuery.Open;
    954879  if FQuery.RecordCount > 0 then
    955880  begin
    956881    FQuery.First;
    957     SetLength(Result, FQuery.RecordCount);
     882    SetLength(Fdat_files, FQuery.RecordCount);
    958883    i := 0;
    959884    repeat
    960       Result[i] := FormatNumber(FQuery.FieldByName('id').AsInteger, 5, '0') + '-' +
    961         FQuery.FieldByName('name').AsString + '.' + FQuery.FieldByName('extension').AsString;
     885      Fdat_files[i].ID := FQuery.FieldByName('id').AsInteger;
     886      Fdat_files[i].Name := FQuery.FieldByName('name').AsString;
     887      Fdat_files[i].Extension := FQuery.FieldByName('extension').AsString;
     888      Fdat_files[i].FileName := FormatNumber(Fdat_files[i].ID, 5, '0') + '-' +
     889          Fdat_files[i].Name + '.' + Fdat_files[0].Extension;
     890      Fdat_files[i].FileNameHex := IntToHex(Fdat_files[i].ID, 4) + '-' +
     891          Fdat_files[i].Name + '.' + Fdat_files[0].Extension;
     892      Fdat_files[i].Size := FQuery.FieldByName('size').AsInteger;
     893      Fdat_files[i].FileType := HexToLong(FQuery.FieldByName('contenttype').AsString);
     894      Fdat_files[i].DatAddr := 0;
     895      Fdat_files[i].opened := False;
    962896      Inc(i);
    963897      FQuery.Next;
     
    965899  end;
    966900  FQuery.Close;
    967 end;
    968 
    969 
    970 
    971 
    972 function TOniDataADB.GetFilesCount: LongWord;
    973 begin
    974   FQuery.SQL.Text := 'SELECT Count(*) AS cnumber FROM datfiles;';
    975   FQuery.Open;
    976   if FQuery.RecordCount > 0 then
    977   begin
    978     FQuery.First;
    979     Result := FQuery.FieldByName('cnumber').AsInteger;
    980   end
    981   else
    982     Result := 0;
    983   FQuery.Close;
    984 end;
    985 
    986 
    987 
    988 
    989 function TOniDataADB.GetExtensionsList: TStringArray;
    990 var
    991   i: LongWord;
    992 begin
    993   SetLength(Result, 0);
     901
     902  SetLength(Fdat_extensionsmap, 0);
    994903  FQuery.SQL.Text :=
    995904    'SELECT extension,count(extension) AS x FROM datfiles GROUP BY extension ORDER BY extension ASC;';
     
    997906  if FQuery.RecordCount > 0 then
    998907  begin
    999     SetLength(Result, FQuery.RecordCount);
     908    SetLength(Fdat_extensionsmap, FQuery.RecordCount);
    1000909    i := 0;
    1001910    repeat
    1002       Result[i] := FQuery.FieldByName('extension').AsString + ' (' +
    1003         IntToStr(FQuery.FieldByName('x').AsInteger) + ')';
     911      temps := FQuery.FieldByName('extension').AsString[1];
     912      Fdat_extensionsmap[i].Extension[3] := temps[1];
     913      Fdat_extensionsmap[i].Extension[2] := temps[2];
     914      Fdat_extensionsmap[i].Extension[1] := temps[3];
     915      Fdat_extensionsmap[i].Extension[0] := temps[4];
     916      Fdat_extensionsmap[i].ExtCount := FQuery.FieldByName('x').AsInteger;
    1004917      Inc(i);
    1005918      FQuery.Next;
     
    1007920  end;
    1008921  FQuery.Close;
     922end;
     923
     924
     925function TOniDataADB.GetFileInfo(fileid: LongWord): TFileInfo;
     926var
     927  i: Integer;
     928begin
     929  if fileid < Self.GetFilesCount then
     930  begin
     931    for i := 0 to High(Fdat_files) do
     932      if Fdat_files[i].ID = fileid then
     933        Break;
     934    if i < Length(Fdat_files) then
     935      Result := Fdat_files[i]
     936    else
     937      Result.ID := -1;
     938  end
     939  else
     940  begin
     941    Result.ID := -1;
     942  end;
     943end;
     944
     945
     946
     947
     948function TOniDataADB.GetFilesList(ext: String; pattern: String;
     949  NoEmptyFiles: Boolean; sort: TSortType): TStringArray;
     950var
     951  i: LongWord;
     952  list: TStringList;
     953  id, name, extension: String;
     954  fields: TStrings;
     955
     956  procedure getfields;
     957  begin
     958     fields.CommaText := StringReplace(AnsiQuotedStr(list.Strings[i], '"'), ';', '","', [rfReplaceAll]);
     959    if sort in [stIDAsc, stIDDesc] then
     960    begin
     961      id := fields.Strings[0];
     962      name := fields.Strings[1];
     963      extension := fields.Strings[2];
     964    end;
     965    if sort in [stNameAsc, stNameDesc] then
     966    begin
     967      id := fields.Strings[1];
     968      name := fields.Strings[0];
     969      extension := fields.Strings[2];
     970    end;
     971    if sort in [stExtAsc, stExtDesc] then
     972    begin
     973      id := fields.Strings[1];
     974      name := fields.Strings[2];
     975      extension := fields.Strings[0];
     976    end;
     977  end;
     978
     979begin
     980  list := TStringList.Create;
     981  list.Sorted := True;
     982  for i := 0 to High(Fdat_files) do
     983  begin
     984    if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
     985      ((Length(pattern) = 0) or
     986      (Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then
     987    begin
     988      if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then
     989      begin
     990        if AppSettings.FilenumbersAsHex then
     991          id := IntToHex(Fdat_files[i].ID, 4)
     992        else
     993          id := FormatNumber(Fdat_files[i].ID, 5, '0');
     994        name := Fdat_files[i].Name;
     995        extension := Fdat_files[i].Extension;
     996
     997        case sort of
     998          stIDAsc, stIDDesc:     list.Add(id + ';' + name + ';' + extension);
     999          stNameAsc, stNameDesc: list.Add(name + ';' + id + ';' + extension);
     1000          stExtAsc, stExtDesc:   list.Add(extension + ';' + id + ';' + name);
     1001        end;
     1002      end;
     1003    end;
     1004  end;
     1005  SetLength(Result, list.Count);
     1006  fields := TStringList.Create;
     1007  if sort in [stIDAsc, stNameAsc, stExtAsc] then
     1008    for i := 0 to list.Count - 1 do
     1009    begin
     1010      getfields;
     1011      Result[i] := id + '-' + name + '.' + extension;
     1012    end
     1013  else
     1014    for i := list.Count - 1 downto 0 do
     1015    begin
     1016      getfields;
     1017      Result[list.Count - i - 1] := id + '-' + name + '.' + extension;
     1018    end;
     1019  list.Free;
     1020  fields.Free;
     1021end;
     1022
     1023
     1024
     1025
     1026function TOniDataADB.GetFilesCount: LongWord;
     1027begin
     1028  Result := Length(Fdat_files);
     1029end;
     1030
     1031
     1032
     1033
     1034function TOniDataADB.GetExtensionsList: TStringArray;
     1035var
     1036  i: LongWord;
     1037begin
     1038  SetLength(Result, Length(Fdat_extensionsmap));
     1039  for i := 0 to High(Result) do
     1040  begin
     1041    with Fdat_extensionsmap[i] do
     1042    begin
     1043      Result[i] := Extension[3] + Extension[2] + Extension[1] + Extension[0] +
     1044        ' (' + IntToStr(ExtCount) + ')';
     1045    end;
     1046  end;
    10091047end;
    10101048
     
    11391177    mem.Seek(0, soFromBeginning);
    11401178    FQuery.SQL.Text := 'UPDATE datfiles SET data=MimeToBin("' +
    1141       MimeCoder.StrTo(mem.Memory, mem.Size) + '") WHERE id=' + IntToStr(fileid) + ';';
     1179      MimeCoder.StrTo(mem.Memory, mem.Size) + '"), size=' + IntToStr(mem.Size) +
     1180      ' WHERE id=' + IntToStr(fileid) + ';';
    11421181    FQuery.ExecSQL;
    11431182    mem.Free;
    11441183    mimecoder.Free;
    11451184  end;
     1185  UpdateListCache;
    11461186end;
    11471187
  • oup/current/Main.dfm

    r46 r51  
    5252      Caption = 'MainMenu'
    5353      CloseButton = False
     54      DragHandleStyle = dhDouble
    5455      FullSize = True
    5556      Images = MenuImages
     
    124125          ShortCut = 16453
    125126          OnClick = menu_extractorClick
     127        end
     128        object menu_meta: TTBItem
     129          Caption = '&Meta Editor'
     130          Enabled = False
     131          ShortCut = 16461
     132          OnClick = menu_metaClick
    126133        end
    127134        object menu_filecompare: TTBItem
     
    198205      Top = 23
    199206      Caption = 'Toolbar'
     207      DragHandleStyle = dhDouble
    200208      Images = MenuImages
    201209      TabOrder = 1
     210      OnDockChanged = ToolbarDockChanged
    202211      object tbOpen: TTBItem
    203212        Caption = 'Open file'
     
    207216      end
    208217      object tb_separator1: TTBSeparatorItem
     218      end
     219      object tb_dat2db: TTBItem
     220        Caption = '.dat -> DB'
     221        DisplayMode = nbdmImageAndText
     222        ImageIndex = 1
     223        OnClick = menu_createdbClick
     224      end
     225      object tb_db2dat: TTBItem
     226        Caption = 'DB -> .dat'
     227        DisplayMode = nbdmImageAndText
     228        ImageIndex = 2
     229        OnClick = menu_createlvlClick
     230      end
     231      object TBSeparatorItem1: TTBSeparatorItem
    209232      end
    210233      object tb_preview: TTBItem
     
    242265        ImageIndex = 7
    243266        OnClick = menu_extractorClick
     267      end
     268      object tb_meta: TTBItem
     269        Caption = 'Meta Editor'
     270        DisplayMode = nbdmImageAndText
     271        Enabled = False
     272        OnClick = menu_metaClick
    244273      end
    245274      object tb_compare: TTBItem
     
    264293      DockPos = 0
    265294      DockRow = 2
     295      DragHandleStyle = dhDouble
    266296      TabOrder = 2
    267297      object TBControlItem1: TTBControlItem
  • oup/current/Main.pas

    r46 r51  
    6767    tb_datedit: TTBItem;
    6868    menu_windows_tilevert: TTBItem;
     69    tb_meta: TTBItem;
     70    menu_meta: TTBItem;
     71    TBSeparatorItem1: TTBSeparatorItem;
     72    tb_db2dat: TTBItem;
     73    tb_dat2db: TTBItem;
    6974    function TryCloseAll: Boolean;
    7075    procedure menu_AboutClick(Sender: TObject);
     
    99104      Shift: TShiftState; X, Y: Integer);
    100105    procedure menu_windows_tilevertClick(Sender: TObject);
     106    procedure menu_metaClick(Sender: TObject);
     107    procedure ToolbarDockChanged(Sender: TObject);
    101108  private
    102109  public
     
    280287
    281288
     289procedure TForm_Main.ToolbarDockChanged(Sender: TObject);
     290var
     291  toolbar: TTBToolbar;
     292  position: TTBDockPosition;
     293  mode: TTBItemDisplayMode;
     294  i: Integer;
     295  isEnabled: Boolean;
     296begin
     297  toolbar := TTBToolbar(Sender);
     298  if toolbar.Floating then
     299    mode := nbdmImageAndText
     300  else begin
     301    position := toolbar.CurrentDock.Position;
     302    if position in [dpLeft, dpRight] then
     303      mode := nbdmDefault
     304    else
     305      mode := nbdmImageAndText;
     306  end;
     307  for i := 0 to toolbar.Items.Count - 1 do
     308    toolbar.Items.Items[i].DisplayMode := mode;
     309end;
     310
    282311function TForm_Main.TryCloseAll: Boolean;
    283312begin
     
    426455
    427456
     457procedure TForm_Main.menu_metaClick(Sender: TObject);
     458begin
     459  ShowMessage('TBD');
     460end;
     461
     462
    428463procedure TForm_Main.menu_filecompareClick(Sender: TObject);
    429464begin
  • oup/current/Tools/Template.dfm

    r46 r51  
    2929    AutoSnap = False
    3030    Beveled = True
    31     MinSize = 150
     31    MinSize = 155
    3232    ExplicitHeight = 473
    3333  end
     
    6262        200
    6363        129)
     64      object Label2: TLabel
     65        Left = 100
     66        Top = 105
     67        Width = 17
     68        Height = 18
     69        AutoSize = False
     70        Caption = '.'
     71        Font.Charset = DEFAULT_CHARSET
     72        Font.Color = clWindowText
     73        Font.Height = -13
     74        Font.Name = 'Tahoma'
     75        Font.Style = [fsBold]
     76        ParentFont = False
     77      end
     78      object Label1: TLabel
     79        Left = 47
     80        Top = 105
     81        Width = 17
     82        Height = 18
     83        AutoSize = False
     84        Caption = '-'
     85        Font.Charset = DEFAULT_CHARSET
     86        Font.Color = clWindowText
     87        Font.Height = -13
     88        Font.Name = 'Tahoma'
     89        Font.Style = [fsBold]
     90        ParentFont = False
     91      end
    6492      object label_ext: TLabel
    6593        Left = 2
     
    72100      end
    73101      object btn_sort_id_asc: TSpeedButton
    74         Left = 16
    75         Top = 101
    76         Width = 23
     102        Left = 3
     103        Top = 101
     104        Width = 20
    77105        Height = 22
    78106        Hint = 'Sort files by id, ascending'
     
    93121      end
    94122      object btn_sort_id_desc: TSpeedButton
    95         Left = 40
    96         Top = 101
    97         Width = 23
     123        Left = 23
     124        Top = 101
     125        Width = 20
    98126        Height = 22
    99127        Hint = 'Sort files by id, descending'
     
    113141      end
    114142      object btn_sort_name_asc: TSpeedButton
    115         Left = 64
    116         Top = 101
    117         Width = 23
     143        Left = 58
     144        Top = 101
     145        Width = 20
    118146        Height = 22
    119147        Hint = 'Sort files by name, ascending'
     
    133161      end
    134162      object btn_sort_name_desc: TSpeedButton
    135         Left = 88
    136         Top = 101
    137         Width = 23
     163        Left = 78
     164        Top = 101
     165        Width = 20
    138166        Height = 22
    139167        Hint = 'Sort files by name, descending'
     
    153181      end
    154182      object btn_sort_ext_asc: TSpeedButton
    155         Left = 112
    156         Top = 101
    157         Width = 23
     183        Left = 108
     184        Top = 101
     185        Width = 20
    158186        Height = 22
    159187        Hint = 'Sort files by extension, ascending'
    160188        GroupIndex = 1
     189        Glyph.Data = {
     190          F6000000424DF600000000000000760000002800000010000000100000000100
     191          0400000000008000000000000000000000001000000000000000C0C0C0000000
     192          9900990000000000000000000000000000000000000000000000000000000000
     193          0000000000000000000000000000000000000000000000000000000000000000
     194          0000011111100000300001100010000030000011000000033300000110000003
     195          3300000011000033333001000110000030000111111000003000000000000000
     196          3000022202220000300000200020000030000022222000003000000202000000
     197          3000000222000000300000002000000030000000200000003000}
    161198        ParentShowHint = False
    162199        ShowHint = True
     
    164201      end
    165202      object btn_sort_ext_desc: TSpeedButton
    166         Left = 136
    167         Top = 101
    168         Width = 23
     203        Left = 128
     204        Top = 101
     205        Width = 20
    169206        Height = 22
    170207        Hint = 'Sort files by extension, descending'
    171208        GroupIndex = 1
     209        Glyph.Data = {
     210          F6000000424DF600000000000000760000002800000010000000100000000100
     211          0400000000008000000000000000000000001000000000000000C0C0C0000000
     212          9900990000000000000000000000000000000000000000000000000000000000
     213          0000000000000000000000000000000000000000000000000000000000000000
     214          0000022202220000300000200020000030000022222000033300000202000003
     215          3300000222000033333000002000000030000000200000003000000000000000
     216          3000011111100000300001100010000030000011000000003000000110000000
     217          3000000011000000300001000110000030000111111000003000}
    172218        ParentShowHint = False
    173219        ShowHint = True
     
    187233        Font.Name = 'Tahoma'
    188234        Font.Style = []
    189         ItemHeight = 0
     235        ItemHeight = 13
    190236        ParentFont = False
    191237        Sorted = True
  • oup/current/Tools/Template.pas

    r46 r51  
    3434    btn_sort_ext_asc: TSpeedButton;
    3535    btn_sort_ext_desc: TSpeedButton;
     36    Label1: TLabel;
     37    Label2: TLabel;
    3638    procedure RecreateList;
    3739    procedure LoadFileNames;
     
    8284  i:    LongWord;
    8385  exts: TStringArray;
    84 begin
     86f, c1,c2: Int64;
     87time1,time2,time3: Double;
     88begin
     89QueryPerformanceFrequency(f);
     90QueryPerformanceCounter(c1);
    8591  combo_extension.Items.Clear;
    8692  combo_extension.Items.Add('_All files_ (' +
     
    96102    end else
    97103      combo_extension.Items.Add(exts[i]);
     104QueryPerformanceCounter(c2);
     105time1 := (c2 - c1) / f;
    98106  combo_extension.ItemIndex := 0;
    99107  combo_extensionClick(Self);
     108QueryPerformanceCounter(c1);
     109time2 := (c1 - c2) / f;
     110ShowMessage(FloatToStr(time1) +#13+#10+ FloatToStr(time2));
    100111end;
    101112
  • oup/current/text/todo.txt

    r46 r51  
    4949-Cursor Sanduhr bei Wartezeiten (db-access etc)
    5050
    51 -RawMap: was ist laut link+size used bereich, was nicht
    52 -StructViewer Raw: DynamicInfos aus .dat
    53 
    5451-Exporter: Checkboxes für was man im einzelnen will (zb Checkbox "in eine Datei ja/nein")
    5552-Extrahier-Ordner-Option (mit Platzhalter für .dat-Name)
     
    5754
    5855-Hex: Paste
    59 
    60 -Persist.dat editor
    6156
    6257
Note: See TracChangeset for help on using the changeset viewer.