// Copyright (c) 2006, Rodrigo Braz Monteiro // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of the Aegisub Group nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // // ----------------------------------------------------------------------------- // // AEGISUB // // Website: http://aegisub.cellosoft.com // Contact: mailto:zeratul@cellosoft.com // /////////// // Headers #include #include #include "dict_window.h" #include "systray.h" #include "dictionary.h" #include "main.h" /////////////// // Constructor DictWindow::DictWindow() : wxFrame(NULL,-1,_T("TrayDict v1.00 - EXPERIMENTAL - By Rodrigo Braz Monteiro"),wxDefaultPosition,wxSize(620,500),wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN) { // Icons SetIcon(wxICON(wxicon)); systray = new Systray(this); // Menu bar //menu = new wxMenuBar(); //SetMenuBar(menu); // Status bar //wxStatusBar *bar = CreateStatusBar(3,0); //int widths[] = { 85, -1, -1 }; //bar->SetStatusWidths(3,widths); // Panel wxPanel *panel = new wxPanel(this); // Manager manager = new wxAuiManager(this); // Search bar entry = new wxComboBox(panel,ENTRY_FIELD,_T(""),wxDefaultPosition,wxDefaultSize,0,NULL,wxCB_DROPDOWN | wxTE_PROCESS_ENTER); wxButton *searchButton = new wxButton(panel,BUTTON_SEARCH,_T("Search"),wxDefaultPosition,wxSize(80,-1)); wxSizer *entrySizer = new wxBoxSizer(wxHORIZONTAL); entrySizer->Add(entry,1,wxEXPAND | wxRIGHT,5); entrySizer->Add(searchButton,0,wxEXPAND,0); // Options checkKanji = new wxCheckBox(panel,CHECK_KANJI,_T("Kanji")); checkKana = new wxCheckBox(panel,CHECK_KANA,_T("Kana")); checkRomaji = new wxCheckBox(panel,CHECK_ROMAJI,_T("Romaji")); checkEnglish = new wxCheckBox(panel,CHECK_ENGLISH,_T("English")); checkEdict = new wxCheckBox(panel,CHECK_ENGLISH,_T("EDICT")); checkEnamdict = new wxCheckBox(panel,CHECK_ENGLISH,_T("ENAMDICT")); checkCompdic = new wxCheckBox(panel,CHECK_ENGLISH,_T("COMPDIC")); checkJplaces = new wxCheckBox(panel,CHECK_ENGLISH,_T("J_PLACES")); checkKanji->SetValue(true); checkKana->SetValue(true); checkRomaji->SetValue(true); checkEnglish->SetValue(true); checkEdict->SetValue(true); checkEnamdict->SetValue(false); checkCompdic->SetValue(false); checkJplaces->SetValue(false); wxSizer *optionsSizer = new wxBoxSizer(wxHORIZONTAL); optionsSizer->Add(new wxStaticText(panel,-1,_T("Display:")),0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkKanji,0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkKana,0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkRomaji,0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkEnglish,0,wxCENTER | wxRIGHT,20); optionsSizer->Add(new wxStaticText(panel,-1,_T("Dictionary:")),0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkEdict,0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkEnamdict,0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkCompdic,0,wxCENTER | wxRIGHT,5); optionsSizer->Add(checkJplaces,0,wxCENTER | wxRIGHT,0); optionsSizer->AddStretchSpacer(1); // Upper pane wxSizer *searchSizer = new wxBoxSizer(wxVERTICAL); searchSizer->Add(entrySizer,0,wxEXPAND | wxALL,5); searchSizer->Add(optionsSizer,0,wxEXPAND | wxALL,5); panel->SetSizer(searchSizer); manager->AddPane(panel,wxTOP,_("Search")); wxAuiPaneInfo &searchPane = manager->GetPane(panel); searchPane.MinSize(searchSizer->GetMinSize()); searchPane.FloatingSize(searchSizer->GetMinSize()); searchPane.Resizable(false); searchPane.RightDockable(false); searchPane.LeftDockable(false); searchPane.CloseButton(false); // Results results = new wxTextCtrl(this,-1,_T(""),wxDefaultPosition,wxSize(280,400),wxTE_RICH2 | wxTE_MULTILINE | wxTE_DONTWRAP | wxTE_READONLY); manager->AddPane(results,wxCENTER,_("Results")); manager->Update(); // Create dictionary files if (false) { Dictionary::Convert(TrayDict::folderName + _T("edict"),TrayDict::folderName + _T("edict.dic")); Dictionary::Convert(TrayDict::folderName + _T("enamdict"),TrayDict::folderName + _T("enamdict.dic")); Dictionary::Convert(TrayDict::folderName + _T("compdic"),TrayDict::folderName + _T("compdic.dic")); Dictionary::Convert(TrayDict::folderName + _T("j_places"),TrayDict::folderName + _T("j_places.dic")); } // Load dictionary files dict.push_back(new Dictionary(_T("edict"),checkEdict)); dict.push_back(new Dictionary(_T("enamdict"),checkEnamdict)); dict.push_back(new Dictionary(_T("compdic"),checkCompdic)); dict.push_back(new Dictionary(_T("j_places"),checkJplaces)); // Register hotkey RegisterHotKey(HOTKEY_ID,wxMOD_WIN,'Z'); } ////////////// // Destructor DictWindow::~DictWindow() { if (systray->IsOk()) { systray->RemoveIcon(); } delete systray; for (size_t i=0;iIsOk()) { Hide(); } } /////////////// // Event table BEGIN_EVENT_TABLE(DictWindow,wxFrame) EVT_ICONIZE(DictWindow::OnIconize) EVT_BUTTON(BUTTON_SEARCH,DictWindow::OnSearch) EVT_TEXT_ENTER(ENTRY_FIELD,DictWindow::OnSearch) EVT_HOTKEY(HOTKEY_ID,DictWindow::OnHotkey) //EVT_CLOSE(DictWindow::OnClose) END_EVENT_TABLE() ///////////////// // Iconize event void DictWindow::OnIconize(wxIconizeEvent &event) { if (event.Iconized()) { GoToTray(); } } ////////////////// // Hotkey pressed void DictWindow::OnHotkey(wxKeyEvent &event) { if (IsShown()) GoToTray(); else systray->BringUp(); } ///////////////////////// // Search button pressed void DictWindow::OnSearch(wxCommandEvent &event) { Search(entry->GetValue()); } ////////// // Search void DictWindow::Search(wxString text) { // Prepare int bitmask = (checkKanji->GetValue() ? 1 : 0) | (checkKana->GetValue() ? 2 : 0) | (checkRomaji->GetValue() ? 4 : 0) | (checkEnglish->GetValue() ? 8 : 0); // Clear text results->Clear(); entry->SetSelection(0,entry->GetValue().Length()); // Search each dictionary for (size_t i=0;icheck->GetValue() && dict[i]->check->IsEnabled()) { // Search ResultSet res; dict[i]->Search(res,text); // Sort results by relevancy res.results.sort(); // Print res.Print(results,bitmask); } } // Show start results->ShowPosition(0); results->SetSelection(0,0); } //////////////// // Close window void DictWindow::OnClose(wxCloseEvent &event) { if (event.CanVeto()) { event.Veto(); GoToTray(); } else Destroy(); }