eliot/wxwin/searchpanel.cc

250 lines
6.9 KiB
C++
Raw Normal View History

2004-04-08 11:43:06 +02:00
/* Eliot */
/* Copyright (C) 1999 Antoine Fraboulet */
/* Antoine.Fraboulet@free.fr */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* $Id: searchpanel.cc,v 1.5 2005/02/05 11:14:56 ipkiss Exp $ */
2004-04-08 11:43:06 +02:00
#include <string.h>
#include "wx/panel.h"
#include "wx/textctrl.h"
#include "wx/listbox.h"
#include "wx/sizer.h"
#include "wx/intl.h"
#include "ewx.h"
#include "dic.h"
#include "dic_search.h"
#include "searchpanel.h"
#include "configdb.h"
2004-04-08 11:43:06 +02:00
enum {
ID_PANEL_CROSS,
ID_PANEL_PLUS1,
ID_PANEL_REGEXP,
ID_LIST,
ID_TEXT
};
// ************************************************************
// ************************************************************
// ************************************************************
class SimpleSearchPanel : public wxPanel
{
protected:
ConfigDB config;
Dictionary dic_;
wxTextCtrl* t;
wxListBox* l;
int check();
public:
SimpleSearchPanel(wxWindow* parent, int id, Dictionary dic);
virtual void compute_char(wxCommandEvent&) {};
virtual void compute_enter(wxCommandEvent&) {};
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(SimpleSearchPanel, wxPanel)
EVT_TEXT (ID_TEXT, SimpleSearchPanel::compute_char)
EVT_TEXT_ENTER(ID_TEXT, SimpleSearchPanel::compute_enter)
END_EVENT_TABLE()
SimpleSearchPanel::SimpleSearchPanel(wxWindow* parent, int id, Dictionary dic)
2004-04-08 11:43:06 +02:00
: wxPanel(parent,id)
{
dic_ = dic;
t = new wxTextCtrl(this,ID_TEXT,wxT(""),wxPoint(0,0),wxSize(-1,-1),wxTE_PROCESS_ENTER);
2004-04-08 11:43:06 +02:00
t->SetFont(config.getFont(LISTFONT));
l = new wxListBox(this,ID_LIST);
l->SetFont(config.getFont(LISTFONT));
l->Show(TRUE);
wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
sizer->Add(t, 0, wxEXPAND | wxALL, 0);
sizer->Add(l, 1, wxEXPAND | wxALL, 0);
SetAutoLayout(TRUE);
SetSizer(sizer);
sizer->Fit(this);
sizer->SetSizeHints(this);
}
int
2004-04-08 11:43:06 +02:00
SimpleSearchPanel::check()
{
wxString msg = wxT("");
2004-04-08 11:43:06 +02:00
if (dic_ == NULL)
{
l->Clear();
msg << wxT("Pas de dictionnaire");
2004-04-08 11:43:06 +02:00
l->Append(msg);
return 0;
}
return 1;
}
// ************************************************************
// ************************************************************
// ************************************************************
class PCross : public SimpleSearchPanel
{
private:
public:
void compute_char(wxCommandEvent&) { };
void compute_enter(wxCommandEvent&);
PCross(wxWindow* parent, int id, Dictionary dic) : SimpleSearchPanel(parent,id,dic) {};
};
void
PCross::compute_enter(wxCommandEvent&)
{
int i;
char rack[DIC_WORD_MAX];
char buff[RES_CROS_MAX][DIC_WORD_MAX];
if (!check())
return;
if (t->GetValue().Len() >= DIC_WORD_MAX)
{
wxString msg = wxT("");
msg << wxT("La recherche est limit<69>e <20> ") << DIC_WORD_MAX - 1 << wxT(" lettres");
2004-04-08 11:43:06 +02:00
l->Append(msg);
return;
}
strncpy(rack, t->GetValue().mb_str(), DIC_WORD_MAX);
2004-04-08 11:43:06 +02:00
Dic_search_Cros(dic_,rack,buff);
int resnum = 0;
wxString res[RES_CROS_MAX];
for(i=0; i < RES_CROS_MAX && buff[i][0]; i++)
res[resnum++] = wxU(buff[i]);
2004-04-08 11:43:06 +02:00
l->Set(resnum,res);
if (l->GetCount() == 0)
l->Append(wxT("Aucun r<>sultat"));
2004-04-08 11:43:06 +02:00
}
// ************************************************************
// ************************************************************
// ************************************************************
class PPlus1 : public SimpleSearchPanel
{
private:
public:
void compute_char(wxCommandEvent&) { };
void compute_enter(wxCommandEvent&);
PPlus1(wxWindow* parent, int id, Dictionary dic) : SimpleSearchPanel(parent,id,dic) {};
};
void
PPlus1::compute_enter(wxCommandEvent&)
{
int i,j;
char rack[DIC_WORD_MAX];
char buff[LETTERS][RES_7PL1_MAX][DIC_WORD_MAX];
if (!check())
return;
if (t->GetValue().Len() >= DIC_WORD_MAX)
{
wxString msg = wxT("");
msg << wxT("La recherche est limit<69>e <20> ") << DIC_WORD_MAX - 1 << wxT(" lettres");
2004-04-08 11:43:06 +02:00
l->Append(msg);
return;
}
strncpy(rack, t->GetValue().mb_str(), DIC_WORD_MAX);
2004-04-08 11:43:06 +02:00
Dic_search_7pl1(dic_,rack,buff,TRUE);
int resnum = 0;
wxString res[LETTERS*(RES_7PL1_MAX+1)];
for(i=0; i < LETTERS; i++)
{
if (i && buff[i][0][0])
res[resnum++] = wxString(wxT("+")) + (wxChar)(i+'A'-1);
2004-04-08 11:43:06 +02:00
for(j=0; j < RES_7PL1_MAX && buff[i][j][0]; j++)
res[resnum++] = wxString(wxT(" ")) + wxU(buff[i][j]);
2004-04-08 11:43:06 +02:00
}
l->Set(resnum,res);
if (l->GetCount() == 0)
l->Append(wxT("Aucun r<>sultat"));
2004-04-08 11:43:06 +02:00
}
// ************************************************************
// ************************************************************
// ************************************************************
2004-06-19 20:43:35 +02:00
class PRegExp : public SimpleSearchPanel
{
private:
public:
void compute_char(wxCommandEvent&) { };
void compute_enter(wxCommandEvent&);
PRegExp(wxWindow* parent, int id, Dictionary dic) : SimpleSearchPanel(parent,id,dic) {};
};
void
PRegExp::compute_enter(wxCommandEvent&)
{
int i;
char re[DIC_WORD_MAX];
char buff[RES_REGE_MAX][DIC_WORD_MAX];
if (!check())
return;
strncpy(re, t->GetValue().mb_str(),DIC_WORD_MAX);
2004-06-19 20:43:35 +02:00
Dic_search_RegE(dic_,re,buff);
int resnum = 0;
wxString res[RES_REGE_MAX];
for(i=0; i < RES_REGE_MAX && buff[i][0]; i++)
res[resnum++] = wxU(buff[i]);
2004-06-19 20:43:35 +02:00
l->Set(resnum,res);
if (l->GetCount() == 0)
l->Append(wxT("Aucun r<>sultat"));
2004-06-19 20:43:35 +02:00
}
// ************************************************************
// ************************************************************
// ************************************************************
2004-04-08 11:43:06 +02:00
SearchPanel::SearchPanel(wxFrame *parent, Dictionary dic) :
wxNotebook(parent, -1)
{
AddPage(new PCross(this,ID_PANEL_CROSS,dic),wxT("Mots crois<69>s"));
AddPage(new PPlus1(this,ID_PANEL_PLUS1,dic),wxT("Plus 1"));
AddPage(new PRegExp(this,ID_PANEL_REGEXP,dic),wxT("Exp. Rationnelle"));
SetSelection(0);
2004-04-08 11:43:06 +02:00
}
SearchPanel::~SearchPanel()
{
}