diff options
Diffstat (limited to 'apps/windoze/CBuilder4/prototype/mainfrm.cpp')
-rw-r--r-- | apps/windoze/CBuilder4/prototype/mainfrm.cpp | 824 |
1 files changed, 824 insertions, 0 deletions
diff --git a/apps/windoze/CBuilder4/prototype/mainfrm.cpp b/apps/windoze/CBuilder4/prototype/mainfrm.cpp new file mode 100644 index 0000000..bb89b40 --- /dev/null +++ b/apps/windoze/CBuilder4/prototype/mainfrm.cpp @@ -0,0 +1,824 @@ +//--------------------------------------------------------------------------- +#include <vcl\vcl.h> +#include <vcl/clipbrd.hpp> +#pragma hdrstop + +#include "mainfrm.h" +#include "swdisprtfchap.h" +#include "searchfrm.h" +#include "swwinlog.h" +#include "AboutBoxfrm.h" +#include "ModInstForm.h" +#include "biblecsmgr.h" +#include "Greek2Greek.h" +#include "bookmarkfrm.h" +#include "optionfrm.h" +#include "vrslstfrm.h" +#include <utilstr.h> +#include <filemgr.h> +#include "editentryfrm.h" +#include "versesel.h" +#include "ModTabPanel.h" + +//--------------------------------------------------------------------------- +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- + + +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + optionsconf = new SWConfig("./options.conf"); + + Lookup->Text = "[ SWORD DDE Lookup ]"; + Search->Text = "[ SWORD DDE Search ]"; + Application->OnHint = DisplayHint; +} + +void __fastcall TForm1::DisplayHint(TObject* Sender) +{ + StatusBar1->SimpleText = Application->Hint; +} + +//--------------------------------------------------------------------------- +__fastcall TForm1::~TForm1() +{ + list <SWDisplay *>::iterator it; + int loop; + + if (mainmgr) + delete mainmgr; + for (it = displays.begin(); it != displays.end(); it++) + delete *it; + if (layoutconf) + delete layoutconf; + + if (optionsconf) + delete optionsconf; + +// for (loop = 0; loop < 10; loop++) { +// if (ctrlstates[loop]); +// delete ctrlstates[loop]; +// } +} +//--------------------------------------------------------------------------- +void TForm1::BuildRTFHeader(char *buf, char *font, int max) +{ + char buf1[1024], buf2[1024]; + SectionMap::iterator sit; + + sprintf(buf1, "{\\rtf1\\ansi"); + if (font) + sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 %s;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f2\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f3\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f4\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}", font); + else sprintf(buf2, "{\\fonttbl{\\f0\\fdecor\\fprq2 Times New Roman;}{\\f1\\froman\\fcharset0\\fprq2 Times New Roman;}{\\f7\\froman\\fcharset2\\fprq2 Symbol;}{\\f8\\froman\\fcharset2\\fprq2 Symbol;}}"); + strcat(buf1, buf2); + + if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) { + sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red%d\\green%d\\blue%d;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}", + atoi((*sit).second["CurrentVSColorRed"].c_str()), + atoi((*sit).second["CurrentVSColorGreen"].c_str()), + atoi((*sit).second["CurrentVSColorBlue"].c_str())); + } + else sprintf(buf2, "{\\colortbl;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red0\\green200\\blue50;\\red0\\green0\\blue255;\\red255\\green0\\blue0;}"); + strcat(buf1, buf2); + memset(buf, 0, max); + strncpy(buf, buf1, max); +} + +char TForm1::CreateTextPane(SWModule *mod, char *font) { + TTabSheet *newtab = new TTabSheet(this); + SWDispRTFChap *newrtf = new SWDispRTFChap(this); + TTextPanel *panel = new TTextPanel(this, mod, font); + char buf[512]; + SectionMap::iterator sit; + + newtab->Caption = mod->Name(); + newtab->Hint = mod->Description(); +// newtab->PageControl = PageControl1; + panel->Parent = newtab; +/* + newrtf->Align = alClient; + newrtf->ScrollBars = ssVertical; + newrtf->ReadOnly = true; + newrtf->PopupMenu = (strcmp(mod->Name(), "N27U4")) ? PopupMenu2 : PopupMenu1; + newrtf->OnMouseDown = RTFMouseDown; + + BuildRTFHeader(buf, font, 512); + newrtf->RTFHeader = buf; + + if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) { + newrtf->MarkCurrentVerse = (atoi((*sit).second["AutoVSColor"].c_str())) ? true:false; + } + + mod->Disp(*displays.insert(displays.begin(), new RTFDisp(newrtf))); + mod->SetKey(DefaultVSKey); +*/ + return 0; +} +//--------------------------------------------------------------------------- +char TForm1::CreateCommentPane(SWModule *mod) { + TTabSheet *newtab = new TTabSheet(this); + TWinControl *newrtf; + + if (mainmgr->config->Sections[mod->Name()]["ModDrv"] == "HREFCom") { +// if (mainmgr->config->Sections[mod->Name()]["External"] == "1") { + newrtf = new TPanel(this); + ((TPanel *)newrtf)->Caption = "Syncronizing to External Viewer"; + mod->Disp(*displays.insert(displays.begin(), new DispExternal())); +/* + } + else { + // newrtf = new THTML(this->Handle); + // newrtf = new SWDispRTF(this); + newrtf = HTML1; + newrtf->Visible = true; + mod->Disp(*displays.insert(displays.begin(), new HREFDisp((THTML *)newrtf))); + // mod->Disp(*displays.insert(displays.begin(), new RTFDisp((SWDispRTF *)newrtf))); + } +*/ + } + else { + newrtf = new SWDispRTF(this); + mod->Disp(*displays.insert(displays.begin(), new RTFDisp((SWDispRTF *)newrtf))); + ((SWDispRTF *)newrtf)->ScrollBars = ssVertical; + ((SWDispRTF *)newrtf)->ReadOnly = true; + if (mainmgr->config->Sections[mod->Name()]["ModDrv"] == "RawFiles") { + ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu3; + ((SWDispRTF *)newrtf)->ExpandNewLine = false; + } + else ((SWDispRTF *)newrtf)->PopupMenu = PopupMenu2; + ((SWDispRTF *)newrtf)->OnMouseDown = RTFMouseDown; + } + + newtab->Caption = mod->Name(); + newtab->Hint = mod->Description(); + newtab->PageControl = PageControl2; + newrtf->Parent = newtab; + newrtf->Align = alClient; + + mod->SetKey(DefaultVSKey); + return 0; +} +//--------------------------------------------------------------------------- +char TForm1::CreateLDPane(SWModule *mod) { + TTabSheet *newtab = new TTabSheet(this); + SWDispRTF *newrtf = new SWDispRTF(this); + + newtab->Caption = mod->Name(); + newtab->Hint = mod->Description(); + newtab->PageControl = PageControl3; + newrtf->Parent = newtab; + newrtf->Align = alClient; + newrtf->ScrollBars = ssVertical; + newrtf->ReadOnly = true; + newrtf->PopupMenu = PopupMenu2; + newrtf->OnMouseDown = RTFMouseDown; + + mod->Disp(*displays.insert(displays.begin(), new RTFDisp(newrtf))); + mod->SetKey(DefaultStrKey); + return 0; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::PageControl1Change(TObject *Sender) +{ +// RefreshActiveSheet(PageControl1); +// Form1->ActiveControl = PageControl1; +} +//--------------------------------------------------------------------------- +void TForm1::RefreshActiveSheet(TPageControl *pc) +{ + ModMap::iterator it; + + it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str()); + if (it != mainmgr->Modules.end()) { + (*it).second->Display(); + if (logmodstate) + modstates.insert(modstates.begin(), new ModState(pc, pc->ActivePage, (*it).second->KeyText())); + } +} + + +void TForm1::TextKeyChanged() +{ + cbBook->ItemIndex = cbBook->Items->IndexOf(DefaultVSKey.books[DefaultVSKey.Testament()-1][DefaultVSKey.Book()-1].name); + CHBox->Text = DefaultVSKey.Chapter(); + VSBox->Text = DefaultVSKey.Verse(); + freeHandLookup->Text = (const char *)DefaultVSKey; + textTabs->RefreshActiveSheet(); + logmodstate = false; // only log state once + RefreshActiveSheet(PageControl2); + logmodstate = true; +} + + +void __fastcall TForm1::btnLookupClick(TObject *Sender) +{ + if (!(StrToInt(CHBox->Text)) || (!StrToInt(VSBox->Text))) + DefaultVSKey.AutoNormalize(0); + + if (StrToInt(CHBox->Text) < 0) + CHBox->Text = StrToInt(CHBox->Text) + 1; + if (StrToInt(VSBox->Text) < 0) + VSBox->Text = StrToInt(VSBox->Text) + 1; + + DefaultVSKey = (cbBook->Text + " " + CHBox->Text + ":" + VSBox->Text).c_str(); + TextKeyChanged(); + DefaultVSKey.AutoNormalize(1); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::PageControl2Change(TObject *Sender) +{ + RefreshActiveSheet(PageControl2); + Form1->ActiveControl = PageControl2; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::DictKeyEditChange(TObject *Sender) +{ + if (DictKeyEdit->Modified) { + DefaultStrKey = DictKeyEdit->Text.c_str(); + RefreshActiveSheet(PageControl3); + DictKeyEdit->Modified = false; + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::PageControl3Change(TObject *Sender) +{ + RefreshActiveSheet(PageControl3); + Form1->ActiveControl = PageControl3; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::NewSearchWindow1Click(TObject *Sender) +{ + Form2->Show(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Exit1Click(TObject *Sender) +{ + Close(); +} + +void __fastcall TForm1::About1Click(TObject *Sender) +{ + AboutBox->ShowModal(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::DictionaryLookup1Click(TObject *Sender) +{ + int wordstart; + + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + if (!rtf->SelLength) { + for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--); + rtf->SelStart = (wordstart > -1) ? wordstart: 0; + for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++); + rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1; + } + DictKeyEdit->Text = Trim(rtf->SelText); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::SaveLayout1Click(TObject *Sender) +{ + ConfigEntMap sit; + + sit = layoutconf->Sections["Screen"]; + sit["MainTop"] = IntToStr(Form1->Top).c_str(); + sit["MainLeft"] = IntToStr(Form1->Left).c_str(); + sit["MainHeight"] = IntToStr(Form1->Height).c_str(); + sit["MainWidth"] = IntToStr(Form1->Width).c_str(); + sit["TextComHeight"] = IntToStr(pnlTextCom->Height).c_str(); + sit["TextWidth"] = IntToStr(pnlText->Width).c_str(); + layoutconf->Sections["Screen"] = sit; + layoutconf->Save(); +} +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormCreate(TObject *Sender) +{ + ModMap::iterator it; + SectionMap::iterator sit; + ConfigEntMap::iterator eit; + AnsiString s1; + char *font; + int val; + int loop; + int maxFiles; + + mainmgr = new BibleCSMGR(ModInstFrm); +// textTabs = new TModTabPanel(this, mainmgr, "Biblical Texts"); +// textTabs->Align = alClient; +// textTabs->Parent = pnlText; +// logmodstate = true; +// freshdict = true; +// if ((maxFiles = atoi(optionsconf->Sections["System"]["MaxFiles"].c_str()))) { +// FileMgr::systemFileMgr.maxFiles = maxFiles; +// } + +// DefaultVSKey = TOP; +// DefaultVSKey = "Genesis 1:1"; +// cbBook->Clear(); +/* + while (!DefaultVSKey.Error()) { + s1 = (const char *)DefaultVSKey; + s1.SetLength(s1.Length() - 4); + cbBook->Items->Add(s1); + DefaultVSKey.Book(DefaultVSKey.Book() + 1); + } + cbBook->ItemIndex = cbBook->Items->IndexOf("James"); + + DefaultVSKey.Persist(1); // when set to a module, make the module hold on to this actual key and not a copy + DefaultVSKey = "James 1:19"; // set to our standard starting verse + DefaultStrKey.Persist(1); + DefaultStrKey = ""; + Hint = ""; + ShowHint = true; + Application->ShowHint = true; + if (SWLog::systemlog) + delete SWLog::systemlog; + SWLog::systemlog = new SWWinLog(this->Handle); // set the system logger to our MSWindows specific SWLog class + layoutconf = new SWConfig("./layout.conf"); + + if ((sit = layoutconf->Sections.find("Screen")) != layoutconf->Sections.end()) { + if (val = atoi((*sit).second["MainTop"].c_str())) + Form1->Top = val; + if (val = atoi((*sit).second["MainLeft"].c_str())) + Form1->Left = val; + if (val = atoi((*sit).second["MainHeight"].c_str())) + Form1->Height = val; + if (val = atoi((*sit).second["MainWidth"].c_str())) + Form1->Width = val; + if (val = atoi((*sit).second["TextComHeight"].c_str())) + pnlTextCom->Height = val; + if (val = atoi((*sit).second["TextWidth"].c_str())) + pnlText->Width = val; + } + + for (loop = 0; loop < 10; loop++) + ctrlstates.insert(ctrlstates.begin(), 0); + + ImageList1->Add(BackBtnImage->Picture->Bitmap, NULL); + ImageList1->Add(SearchBtnImage->Picture->Bitmap, NULL); + ImageList2->Add(BookmarkBtnImage->Picture->Bitmap, NULL); +*/ +} + + +//void __fastcall TForm1::CreateWnd() { +// TForm::CreateWnd(); + +/* + for (it = mainmgr->Modules.begin(); it != mainmgr->Modules.end(); it++) { + if (!strcmp((*it).second->Type(), "Biblical Texts")) { + font = 0; + if ((sit = mainmgr->config->Sections.find((*it).second->Name())) != mainmgr->config->Sections.end()) { + if ((eit = (*sit).second.find("Font")) != (*sit).second.end()) { + font = (char *)(*eit).second.c_str(); + } + } + CreateTextPane((*it).second, font); + } + if (!strcmp((*it).second->Type(), "Commentaries")) + CreateCommentPane((*it).second); + if (!strcmp((*it).second->Type(), "Lexicons / Dictionaries")) + CreateLDPane((*it).second); + } +*/ +//} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::LookupPokeData(TObject *Sender) +{ + char buf[255]; + char *token; + ModMap::iterator it; + + strncpy(buf, Lookup->Text.c_str(), 254); + buf[254] = 0; + token = strtok(buf, " "); + if ((it = mainmgr->Modules.find(token)) != mainmgr->Modules.end()) { + token = strtok(NULL, ""); + (*it).second->SetKey(token); + Lookup->Text = (const char *)(*(*it).second); + } + else Lookup->Text = ""; + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::SearchPokeData(TObject *Sender) +{ + char buf[255]; + char *token; + ModMap::iterator it; + AnsiString retval = ""; + + strncpy(buf, Search->Text.c_str(), 254); + buf[254] = 0; + token = strtok(buf, " "); + if ((it = mainmgr->Modules.find(token)) != mainmgr->Modules.end()) { + token = strtok(NULL, ""); + ListKey &results = (*it).second->Search(token, REG_ICASE); + while (!results.Error()) { + retval = retval + (const char *)results + "; "; + results++; + } + Search->Text = retval; + } + else Search->Text = ""; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button) +{ + ModMap::iterator it; + + it = mainmgr->Modules.find(PageControl3->ActivePage->Caption.c_str()); + if (it != mainmgr->Modules.end()) { + if (Button == btNext) + (*((*it).second))++; + else (*((*it).second))--; + DictKeyEdit->Text = ((*it).second)->KeyText(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button) +{ + btnLookupClick(Sender); +} +//--------------------------------------------------------------------------- + +void TForm1::RestoreState(ModState *state) +{ + if (state) { + state->pc->ActivePage = state->ap; +// if ((state->pc == PageControl1) || (state->pc == PageControl2)) { +// DefaultVSKey = state->key; +// TextKeyChanged(); +// } + if (state->pc == PageControl3) { + DictKeyEdit->Text = (const char *)state->key; + } + if (state->pc->ActivePage->ControlCount) + Form1->ActiveControl = (TWinControl *)state->pc->ActivePage->Controls[0]; + } +} + + +void __fastcall TForm1::BackbtnClick(TObject *Sender) +{ + list <ModState *>::iterator it; + + logmodstate = false; + it = modstates.begin(); + if (it != modstates.end()) { + it++; + + if (it != modstates.end()) { + RestoreState(*it); + delete *modstates.begin(); + modstates.erase(modstates.begin(), it); + } + } + logmodstate = true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ +/* + list <ModState *>::iterator it; + ListBox1->Clear(); + for (it = modstates.begin(); it != modstates.end(); it++) { + ListBox1->Items->Add((*it)->ap->Caption.c_str()); + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::CopyasBGreekTransliteration1Click(TObject *Sender) +{ + char *retbuf; + int len; + TClipboard *clip = new TClipboard(); + + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + len = rtf->SelText.Length() * 2; + retbuf = new char [ len ]; + if (!Greek2bGreek(retbuf, rtf->SelText.c_str(), len)) { + clip->SetTextBuf(retbuf); + } + delete clip; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Copy1Click(TObject *Sender) +{ + int wordstart; + + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + if (!rtf->SelLength) { + for (wordstart = rtf->SelStart; (wordstart > -1)&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart--); + rtf->SelStart = (wordstart > -1) ? wordstart: 0; + for (wordstart = rtf->SelStart + 1; (wordstart < rtf->Text.Length())&&(isdigit(rtf->Text[wordstart])||isalpha(rtf->Text[wordstart])); wordstart++); + rtf->SelLength = ((wordstart < rtf->Text.Length()) ? wordstart : rtf->Text.Length() - 1) - rtf->SelStart - 1; + } + rtf->CopyToClipboard(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::BookmarkItemClick(TObject *Sender) +{ + TMenuItem *menuchoice = (TMenuItem *)Sender; + DefaultVSKey = menuchoice->Caption.c_str(); + TextKeyChanged(); +} + +void __fastcall TForm1::AddBookmark1Click(TObject *Sender) +{ +// TMenuItem *newitem; + + Bookmarksfrm->bmtree->Items->AddChild(Bookmarksfrm->bmtree->Items->Item[0], (const char *)DefaultVSKey); +} + +void TForm1::AddSectionToMenu(TMenu *menu, TMenuItem *item, TTreeNode *tree) +{ + TMenuItem *newitem; + + for (tree = tree->getFirstChild(); tree; tree = tree->getNextSibling()) { + newitem = new TMenuItem(menu); + newitem->Caption = tree->Text; + if (!tree->getFirstChild()) + newitem->OnClick = BookmarkItemClick; + item->Add(newitem); + AddSectionToMenu(menu, newitem, tree); + } +} + +void TForm1::RefreshBookmarksMenu(TMenu *menu, TTreeView *treeview) +{ + TMenuItem *newitem; + TTreeNode *tree = 0; + + if (treeview->Items->Count) + tree = treeview->Items->Item[0]; + + while (menu->Items->Count > 3) + menu->Items->Delete(3); + + for (;tree;tree = tree->getNextSibling()) { + newitem = new TMenuItem(menu); + newitem->Caption = tree->Text; + menu->Items->Add(newitem); + AddSectionToMenu(menu, newitem, tree); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::BookmarkbtnClick(TObject *Sender) +{ + TPoint menup; + TPoint point; + point.x = 0; + point.y = Bookmarkbtn->Height; + menup = Bookmarkbtn->ClientToScreen(point); + RefreshBookmarksMenu(BookmarkPopup, Bookmarksfrm->bmtree); + BookmarkPopup->Popup(menup.x, menup.y); +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::EditBookmarks1Click(TObject *Sender) +{ + Bookmarksfrm->Show(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + char buf[5]; + int val; + ModMap::iterator it; + TPageControl *pc = textTabs->pageControl; + + if ((Shift.Contains(ssCtrl)) && (!Shift.Contains(ssAlt))) { + if ((Key >= '0') && (Key <= '9')) { + sprintf(buf, "%c", Key); + val = atoi(buf); + + if (!Shift.Contains(ssShift)) { + if ((Screen->ActiveControl == PageControl2) || (IsChild(PageControl2->Handle, Screen->ActiveControl->Handle))) + pc = PageControl2; + if ((Screen->ActiveControl == PageControl3) || (IsChild(PageControl3->Handle, Screen->ActiveControl->Handle))) + pc = PageControl3; + + it = mainmgr->Modules.find(pc->ActivePage->Caption.c_str()); + if (it != mainmgr->Modules.end()) { + if (ctrlstates[val]) + delete ctrlstates[val]; + + ctrlstates[val] = new ModState(pc, pc->ActivePage, (*it).second->KeyText()); + } + } + else RestoreState(ctrlstates[val]); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Options1Click(TObject *Sender) +{ + ModMap::iterator it; + SectionMap::iterator sit; + ConfigEntMap emap; + int color; + + if ((sit = optionsconf->Sections.find("Appearance")) != optionsconf->Sections.end()) { + Optionsfrm->CurrentVSColor->Brush->Color = atoi((*sit).second["CurrentVSColorRed"].c_str()) + | (atoi((*sit).second["CurrentVSColorGreen"].c_str()) << 8) + | (atoi((*sit).second["CurrentVSColorBlue"].c_str()) << 16); + Optionsfrm->AutoVSColor->Checked = ((atoi((*sit).second["AutoVSColor"].c_str()))?true:false); + } + + if ((sit = optionsconf->Sections.find("Bookmarks")) != optionsconf->Sections.end()) { + Optionsfrm->AutoBMPersonal->Checked = ((atoi((*sit).second["AutoSavePersonal"].c_str()))?true:false); + Optionsfrm->AutoBMOther->Checked = ((atoi((*sit).second["AutoSaveOther"].c_str()))?true:false); + } + + if (Optionsfrm->ShowModal() == mrOk) { + emap = optionsconf->Sections["Appearance"]; + color = Optionsfrm->CurrentVSColor->Brush->Color; + emap["CurrentVSColorRed"] = IntToStr(color & 0xFF).c_str(); + emap["CurrentVSColorGreen"] = IntToStr((color >> 8) & 0xFF).c_str(); + emap["CurrentVSColorBlue"] = IntToStr((color >> 16) & 0xFF).c_str(); + emap["AutoVSColor"] = IntToStr((Optionsfrm->AutoVSColor->Checked)?1:0).c_str(); + optionsconf->Sections["Appearance"] = emap; + + emap = optionsconf->Sections["Bookmarks"]; + emap["AutoSavePersonal"] = IntToStr((Optionsfrm->AutoBMPersonal->Checked)?1:0).c_str(); + emap["AutoSaveOther"] = IntToStr((Optionsfrm->AutoBMOther->Checked)?1:0).c_str(); + optionsconf->Sections["Bookmarks"] = emap; + + optionsconf->Save(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::cbBookChange(TObject *Sender) +{ + CHBox->Text = "1"; + VSBox->Text = "1"; + if (Screen->ActiveControl == cbBook) + btnLookupClick(Sender); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::PopupMenuPopup(TObject *Sender) +{ + + int versestart, verseend; + TMenuItem * newitem; + TPopupMenu *menu = (TPopupMenu *)Sender; + int staticMenuItemsCount = 0; + + if (menu == PopupMenu1) + staticMenuItemsCount = 3; + else if (menu == PopupMenu2) + staticMenuItemsCount = 2; + else if (menu == PopupMenu3) + staticMenuItemsCount = 6; + + while (menu->Items->Count > staticMenuItemsCount) + menu->Items->Delete(staticMenuItemsCount); + + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + if (!rtf->SelLength) { + for (versestart = rtf->SelStart; ((versestart)&&(rtf->Text[versestart] != '#')); versestart--); + if (versestart) { + for (verseend = versestart; ((verseend < rtf->Text.Length())&&(rtf->Text[verseend] != '|')); verseend++); + if ((verseend < rtf->Text.Length()) && (verseend > rtf->SelStart)) { + int len = (verseend - versestart) + 1; + char *buf = new char [ len + 1 ]; + memset(buf, 0 , len + 1); + strncpy(buf, &rtf->Text.c_str()[versestart], len - 2); // strip the # and | from the string + tmpVerseList = VerseKey::ParseVerseList(buf, DefaultVSKey); + + ModMap::iterator target; + target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str()); + if (target != Form1->mainmgr->Modules.end()) { + char *keytext = 0; // check for and remove return at end of keytext + stdstr(&keytext, (*(*target).second).KeyText()); + if (keytext[strlen(keytext)-1] == '\r') + keytext[strlen(keytext)-1] = 0; + + tmpVerseListCaption = String("VerseList from- ") + (*target).first.c_str() + ": " + keytext; + delete [] keytext; // --------------------------------- + } + delete [] buf; + newitem = new TMenuItem(menu); + newitem->Caption = "-"; + menu->Items->Add(newitem); + newitem = new TMenuItem(menu); + newitem->Caption = "Create Verse List"; + newitem->Hint = "Create a New Verse List Window"; + newitem->Default = true; + newitem->OnClick = createVerseList; + menu->Items->Add(newitem); + versestart = 3; + while (!tmpVerseList.Error()) { + versestart++; + newitem = new TMenuItem(menu); + newitem->Caption = (const char *)tmpVerseList; + newitem->OnClick = BookmarkItemClick; + if (!(versestart%15)) + newitem->Break = mbBreak; + menu->Items->Add(newitem); + tmpVerseList++; + } + } + } + } + +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::createVerseList(TObject *Sender) +{ + TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList); + tmpForm->Caption = tmpVerseListCaption; + tmpForm->Show(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::freeHandLookupKeyPress(TObject *Sender, char &Key) +{ + if (Key == '\r') { + ListKey tmpVerseList = VerseKey::ParseVerseList(freeHandLookup->Text.c_str(), DefaultVSKey); + if (tmpVerseList.Count() > 1) { + TVerseListFrm *tmpForm = new TVerseListFrm(this, tmpVerseList); + tmpForm->Caption = "User Verse List"; + tmpForm->Show(); + } + if (tmpVerseList.Count()) { + tmpVerseList = TOP; + DefaultVSKey = tmpVerseList; + TextKeyChanged(); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::RTFMouseDown(TObject *Sender, TMouseButton Button, + TShiftState Shift, int X, int Y) +{ + ((TWinControl *)Sender)->SetFocus(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::EditEntry1Click(TObject *Sender) +{ + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + SWModule *module = 0; +// EditEntry->RichEdit1->Text = rtf->Text; + ModMap::iterator target; + target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str()); + if (target != Form1->mainmgr->Modules.end()) { + EditEntry->Module = module = (*target).second; + EditEntry->RTFDisplay = rtf; + } + else EditEntry->Module = module = 0; + EditEntry->ShowModal(); + if (EditEntry->ResultBuf) { + if (module) +// DictKeyEdit->Text = EditEntry->ResultBuf; // for testing purposes + *module << EditEntry->ResultBuf; + } + RefreshActiveSheet(PageControl2); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::DeleteEntry1Click(TObject *Sender) +{ + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + SWModule *module = 0; + ModMap::iterator target; + + target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str()); + if (target != Form1->mainmgr->Modules.end()) { + module = (*target).second; + module->Delete(); + } + RefreshActiveSheet(PageControl2); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::LinktoVerse1Click(TObject *Sender) +{ + if (VerseSelFrm->ShowModal() == mrOk) { + SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl; + SWModule *module = 0; + ModMap::iterator target; + SWKey *linkkey = new VerseKey(VerseSelFrm->Panel2->Caption.c_str()); + + target = mainmgr->Modules.find(((TPageControl*)rtf->Parent->Parent)->ActivePage->Caption.c_str()); + if (target != Form1->mainmgr->Modules.end()) { + module = (*target).second; + *module << linkkey; + } + RefreshActiveSheet(PageControl2); + } +} +//--------------------------------------------------------------------------- + + |