//--------------------------------------------------------------------------- #include #include "shellapi.hpp" #pragma hdrstop #include "UnboundExternalDataDemoMain.h" #include "AboutDemoForm.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "cxClasses" #pragma link "cxControls" #pragma link "cxCustomData" #pragma link "cxData" #pragma link "cxDBData" #pragma link "cxEdit" #pragma link "cxFilter" #pragma link "cxGraphics" #pragma link "cxGrid" #pragma link "cxGridCustomTableView" #pragma link "cxGridCustomView" #pragma link "cxGridDBTableView" #pragma link "cxGridLevel" #pragma link "cxGridTableView" #pragma link "cxStyles" #pragma link "cxLookAndFeels" #pragma resource "*.dfm" TUnboundExternalDataDemoMainForm *UnboundExternalDataDemoMainForm; const String rsIniFileName = "odbcinst_test.ini"; //--------------------------------------------------------------------------- __fastcall TUnboundExternalDataDemoMainForm::TUnboundExternalDataDemoMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miAboutClick(TObject *Sender) { ShowAboutDemoForm(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miExitClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miInsertClick( TObject *Sender) { cxGrid->FocusedView->DataController->Insert(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miDeleteClick( TObject *Sender) { cxGrid->FocusedView->DataController->DeleteFocused(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miOpenClick( TObject *Sender) { if (IniFile->Modified){ int I = MessageDlg("Do you want to save the changes ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo << mbCancel, 0); switch (I) { case mrYes: IniFile->SaveValues(); break; case mrCancel: return; } } OpenDialog->InitialDir = ExtractFilePath(Application->ExeName); if(OpenDialog->Execute()) { Load(OpenDialog->FileName); UpdateFileInfo(OpenDialog->FileName); ResetChanges(); } } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miSaveClick( TObject *Sender) { IniFile->SaveValues(); ResetChanges(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::miSaveAsClick( TObject *Sender) { if(SaveDialog->Execute()) { IniFile->SaveAs(SaveDialog->FileName); UpdateFileInfo(SaveDialog->FileName); ResetChanges(); } } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::CustomizeGrid() { GenerateColumns(); LoadData(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::GenerateColumns() { TcxGridColumn* GridColumn; GridColumn = tvSections->CreateColumn(); GridColumn->Caption = "Section Name"; GridColumn->DataBinding->ValueTypeClass = __classid(TcxStringValueType); GridColumn->Width = 600; tvSections->DataController->CustomDataSource = UserDataSource; GridColumn = tvValues->CreateColumn(); GridColumn->Caption = "Parameter Name"; GridColumn->DataBinding->ValueTypeClass = __classid(TcxStringValueType); GridColumn->DataBinding->Data = (TObject *)0; GridColumn->Width = 300; GridColumn = tvValues->CreateColumn(); GridColumn->Caption = "Parameter Value"; GridColumn->DataBinding->ValueTypeClass = __classid(TcxStringValueType); GridColumn->DataBinding->Data = (TObject *)1; GridColumn->Width = 300; tvValues->DataController->CustomDataSource = UserDetailDataSource; } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::LoadData() { Load(IniFile->FileName); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::Load(String const AFileName) { IniFile->Rename(AFileName, true); UserDataSource->DataChanged(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::UpdateFileInfo(String const AFileName) { sbMain->Panels->Items[1]->Text = ExtractFileName(AFileName); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::ResetChanges() { FChangesCount = 0; sbMain->Panels->Items[2]->Text = "Changes Count: 0"; } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::DoSmthOnModify(TObject* Sender) { FChangesCount++; sbMain->Panels->Items[2]->Text = Format("Changes Count: %d", ARRAYOFCONST((FChangesCount))); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::FormCreate( TObject *Sender) { IniFile = new TUserIniFile(ExtractFilePath(Application->ExeName) + rsIniFileName); UpdateFileInfo(IniFile->FileName); IniFile->OnModify = DoSmthOnModify; UserDataSource = new TUserDataSource(IniFile); UserDetailDataSource = new TUserDetailDataSource(UserDataSource); CustomizeGrid(); } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::FormCloseQuery( TObject *Sender, bool &CanClose) { int i = -1; if(IniFile->Modified) i = MessageDlg("Do you want to save the changes ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo << mbCancel, 0); switch (i) { case mrYes: IniFile->SaveValues(); break; case mrCancel: CanClose = false; break; } } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::FormDestroy( TObject *Sender) { delete UserDetailDataSource; delete UserDataSource; delete IniFile; } //--------------------------------------------------------------------------- void __fastcall TUnboundExternalDataDemoMainForm::sbMainResize( TObject *Sender) { sbMain->Panels->Items[0]->Width = Width - (sbMain->Panels->Items[1]->Width + sbMain->Panels->Items[2]->Width); } //---------------------------------------------------------------------------