// ***** BEGIN LICENSE BLOCK *****
// * Version: MPL 1.1
// *
// * The contents of this file are subject to the Mozilla Public License Version
// * 1.1 (the "License"); you may not use this file except in compliance with
// * the License. You may obtain a copy of the License at
// * http://www.mozilla.org/MPL/
// *
// * Software distributed under the License is distributed on an "AS IS" basis,
// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// * for the specific language governing rights and limitations under the
// * License.
// *
// * The Original Code is TurboPower Abbrevia
// *
// * The Initial Developer of the Original Code is
// * TurboPower Software
// *
// * Portions created by the Initial Developer are Copyright (C) 1997-2002
// * the Initial Developer. All Rights Reserved.
// *
// * Contributor(s):
// *
// * ***** END LICENSE BLOCK *****
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "ZipView1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "AbBase"
#pragma link "AbBrowse"
#pragma link "AbMeter"
#pragma link "AbView"
#pragma link "AbZBrows"
#pragma link "AbZipKit"
#pragma link "AbZipper"
#pragma link "AbZView"
#pragma resource "*.dfm"
TForm1 *Form1;

char MainCaption[] = "TAbZipView example";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AttributeClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = !Item->Checked;
  TAbViewAttributes Attrs = AbZipView1->Attributes;
  if (Item->Checked)
    AbZipView1->Attributes = Attrs << (TAbViewAttribute)Item->Tag;
  else
    AbZipView1->Attributes = Attrs >> (TAbViewAttribute)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DisplayClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = !Item->Checked;
  TAbDisplayOptions Options = AbZipView1->DisplayOptions;
  if (Item->Checked)
    AbZipView1->DisplayOptions = Options << (TAbDisplayOption)Item->Tag;
  else
    AbZipView1->DisplayOptions = Options >> (TAbDisplayOption)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MethodClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = true;
  AbZipKit1->CompressionMethodToUse = (TAbZipSupportedMethod)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DeflationClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = true;
  AbZipKit1->DeflationOption = (TAbZipDeflationOption)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ExtractOptionClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = !Item->Checked;
  TAbExtractOptions Options = AbZipKit1->ExtractOptions;
  if (Item->Checked)
    AbZipKit1->ExtractOptions = Options << (TAbExtractOption)Item->Tag;
  else
    AbZipKit1->ExtractOptions = Options >> (TAbExtractOption)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StoreOptionClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = !Item->Checked;
  TAbStoreOptions Options = AbZipKit1->StoreOptions;
  if (Item->Checked)
    AbZipKit1->StoreOptions = Options << (TAbStoreOption)Item->Tag;
  else
    AbZipKit1->StoreOptions = Options >> (TAbStoreOption)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SortAttributeClick(TObject *Sender)
{
  TMenuItem* Item = (TMenuItem*) Sender;
  Item->Checked = !Item->Checked;
  TAbSortAttributes Attrs = AbZipView1->SortAttributes;
  if (Item->Checked)
    AbZipView1->SortAttributes = Attrs << (TAbSortAttribute)Item->Tag;
  else
    AbZipView1->SortAttributes = Attrs >> (TAbSortAttribute)Item->Tag;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AbZipView1Click(TObject *Sender)
{
  Panel1->Caption = AbZipView1->Items[AbZipView1->ActiveRow]->FileName;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Open1Click(TObject *Sender)
{
  OpenDialog1->FileName = "*.zip";
  if (OpenDialog1->Execute())
  {
    AbZipView1->BeginUpdate();
    AbZipKit1->FileName = OpenDialog1->FileName;
    Caption = AbZipKit1->FileName +
      "   " + IntToStr(AbZipView1->Count) + " items";
    Action1->Enabled = True;
    AbZipView1->EndUpdate();
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Close1Click(TObject *Sender)
{
  AbZipKit1->CloseArchive();
  Caption = MainCaption;
  Panel1->Caption = "";
  Action1->Enabled = False;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SelectAll1Click(TObject *Sender)
{
  AbZipView1->SelectAll();
  AbZipView1Click(0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClearSelections1Click(TObject *Sender)
{
  AbZipView1->ClearSelections();
  AbZipView1Click(0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Font1Click(TObject *Sender)
{
  FontDialog1->Font = AbZipView1->Font;
  if (FontDialog1->Execute())
    AbZipView1->Font = FontDialog1->Font;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Exit1Click(TObject *Sender)
{
  Close();        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DeletedColor1Click(TObject *Sender)
{
  if (ColorDialog1->Execute())
    AbZipView1->Colors->Deleted = ColorDialog1->Color;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DeletedTextColor1Click(TObject *Sender)
{
  if (ColorDialog1->Execute())
    AbZipView1->Colors->DeletedText = ColorDialog1->Color;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SelectedcolorClick(TObject *Sender)
{
  if (ColorDialog1->Execute())
    AbZipView1->Colors->Selected = ColorDialog1->Color;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::SelectedtextcolorClick(TObject *Sender)
{
  if (ColorDialog1->Execute())
    AbZipView1->Colors->SelectedText = ColorDialog1->Color;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Rowheight1Click(TObject *Sender)
{
  String s = IntToStr(AbZipView1->DefaultRowHeight);
  if (InputQuery(MainCaption, "Row Height", s))
    AbZipView1->DefaultRowHeight = StrToIntDef(s, 18);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Headerheight1Click(TObject *Sender)
{
  String s = IntToStr(AbZipView1->HeaderRowHeight);
  if (InputQuery(MainCaption, "Header Height", s))
    AbZipView1->HeaderRowHeight = StrToIntDef(s, 18);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Add1Click(TObject *Sender)
{
  OpenDialog1->FileName = "*.*";
  OpenDialog1->Options << ofAllowMultiSelect;
  AbZipView1->BeginUpdate();
  if (OpenDialog1->Execute())
  {
    for (int i=0; i<OpenDialog1->Files->Count; i++)
      AbZipKit1->AddFiles(OpenDialog1->Files->Strings[i], 0);
    AbZipKit1->Save();
    AbZipView1->EndUpdate();
    Panel1->Caption = "";
    OpenDialog1->Options >> ofAllowMultiSelect;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Delete1Click(TObject *Sender)
{
  Panel1->Caption = "";
  for (int i=0; i<AbZipView1->Count; i++)
    AbZipView1->Items[i]->Tagged = AbZipView1->Selected[i];
  AbZipKit1->DeleteTaggedItems();
  Panel1->Caption = "";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Extract1Click(TObject *Sender)
{
  TAbDirDlg* Dlg = new TAbDirDlg(this);
  Dlg->Caption = "Directory";
  Dlg->AdditionalText = "Select folder to extract into";
  Dlg->SelectedFolder = AbZipKit1->BaseDirectory;
  bool Continue = Dlg->Execute();
  if (Continue)
    AbZipKit1->BaseDirectory = Dlg->SelectedFolder;
  delete Dlg;
  if (!Continue)
    return;
  Panel1->Caption = "";
  for (int i=0; i<AbZipView1->Count; i++)
    AbZipView1->Items[i]->Tagged = AbZipView1->Selected[i];
  AbZipKit1->ExtractTaggedItems();
  AbZipView1->ClearSelections();
  Panel1->Caption = "";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Freshen1Click(TObject *Sender)
{
  Panel1->Caption = "";
  for (int i=0; i<AbZipView1->Count; i++)
    AbZipView1->Items[i]->Tagged = AbZipView1->Selected[i];
  AbZipKit1->FreshenTaggedItems();
  AbZipKit1->Save();
  AbZipView1->ClearSelections();
  Panel1->Caption = "";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Testselecteditems1Click(TObject *Sender)
{
  Panel1->Caption = "";
  for (int i=0; i<AbZipView1->Count; i++)
    AbZipView1->Items[i]->Tagged = AbZipView1->Selected[i];
  AbZipKit1->TestTaggedItems();
  AbZipView1->ClearSelections();
  Panel1->Caption = "";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AbZipKit1ConfirmProcessItem(TObject *Sender,
      TAbArchiveItem *Item, TAbProcessType ProcessType, bool &Confirm)
{
  String s = "??? ";
  switch (ProcessType) {
    case ptAdd : s = "Adding "; break;
    case ptDelete : s = "Deleting "; break;
    case ptExtract : s = "Extracting "; break;
    case ptFreshen : s = "Freshening "; break;
  }
  Panel1->Caption = s + Item->FileName;
  Confirm = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AbZipView1Change(TObject *Sender)
{
  Caption = AbZipKit1->FileName +
      "   " + IntToStr(AbZipView1->Count) + " items";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AlternateColor1Click(TObject *Sender)
{
  if (ColorDialog1->Execute())
    AbZipView1->Colors->Alternate = ColorDialog1->Color;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AlternateTextColor1Click(TObject *Sender)
{
  if (ColorDialog1->Execute())
    AbZipView1->Colors->AlternateText = ColorDialog1->Color;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Moveselecteditem1Click(TObject *Sender)
{
  if (AbZipView1->SelCount > 0)
  {
    for (int i=0; i<AbZipView1->Count; i++)
    {
      AbZipView1->Items[i]->Tagged = AbZipView1->Selected[i];
      if (AbZipView1->Selected[i])
      {
        String s = AbZipView1->Items[i]->FileName;
        if (InputQuery(MainCaption, "Rename file", s))
          AbZipKit1->Move(AbZipView1->Items[i], s);
      }
    }
    AbZipKit1->Save();
    AbZipView1->ClearSelections();
    Panel1->Caption = "";
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AbZipKit1Save(TObject *Sender)
{
  Panel1->Caption = "Saving " + AbZipKit1->FileName;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Save1Click(TObject *Sender)
{
  if (AbZipKit1->FileName != "")
    AbZipKit1->Save();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Logging1Click(TObject *Sender)
{
  Logging1->Checked = !Logging1->Checked;
  if (Logging1->Checked)
  {
    OpenDialog1->Title = "Select log file";
    if (AbZipKit1->LogFile == "")
      OpenDialog1->FileName = "*.txt";
    else
      OpenDialog1->FileName = AbZipKit1->LogFile;
    Logging1->Checked = OpenDialog1->Execute();
    if (Logging1->Checked)
      AbZipKit1->LogFile = OpenDialog1->FileName;
  }
  AbZipKit1->Logging = Logging1->Checked;
}
//---------------------------------------------------------------------------


