cs_satellite34
Messages postés688Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 2 juin 2006
-
9 août 2005 à 01:21
cs_satellite34
Messages postés688Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 2 juin 2006
-
8 sept. 2005 à 03:37
Bonjour,
J' essaye de développer une application client FTP sous wxWIDGETS en utilisant wxFTP;
Mon probléme c'est de lister le repertoire distant dans un wxTextCtrl;
Bon, j' ai tout mis pour que vous voyez la creation des gui controls pour :
wxString adresse = WxEditAddress->GetValue();
wxString utilisateur = WxEditUser->GetValue();
wxString passe = WxEditPassword->GetValue();
Je n'arrive pas a construire un wxSTRING avec la fonction GetDirList;
Pour écrire dans le textCtrl DistantSite (et les autre aussi), il me faut un wxSTRING!.
J' ai bien lu la documentation et honnetement je ne comprends pas.
Ils disent :
wxFTP::GetDirList
bool GetDirList(wxArrayString& files , const wxString& wildcard = "")
The GetList function is quite low-level. It returns the list of the files in the current directory. The list can be filtered using the wildcard string. If wildcard is empty (default), it will return all files in directory.
The form of the list can change from one peer system to another. For example, for a UNIX peer system, it will look like this:
-r--r--r-- 1 guilhem lavaux 12738 Jan 16 20:17 cmndata.cpp
-r--r--r-- 1 guilhem lavaux 10866 Jan 24 16:41 config.cpp
-rw-rw-rw- 1 guilhem lavaux 29967 Dec 21 19:17 cwlex_yy.c
-rw-rw-rw- 1 guilhem lavaux 14342 Jan 22 19:51 cwy_tab.c
-r--r--r-- 1 guilhem lavaux 13890 Jan 29 19:18 date.cpp
-r--r--r-- 1 guilhem lavaux 3989 Feb 8 19:18 datstrm.cpp
if(!m_timer.IsRunning())
{
m_timer.Start(20000);
}
ftp->SetUser(utilisateur);
ftp->SetPassword(passe);
Commandes->AppendText("Connection.............................."
"Wait a second\n:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>\n");
if (!ftp->Connect(adresse))
{
result();
Commandes->AppendText("impossible de se connecter au serveur\n\nVeuillez vérifier l' adresse du serveur et"
" vos identifiants\nmerci\n");
return;
}
Commandes->AppendText(wxString::Format("Connecté à ")+adresse+(" dans ")+directory);
Commandes->AppendText("\n:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<<:<:<:<:<:<:<:<:<:<:<:<:<:<:<\n");
Commandes->AppendText("Commande : USER ");
Commandes->AppendText(utilisateur);
Commandes->AppendText("\n");
result();
StatusBar1->SetStatusText(wxString::Format("vous etes connecté à ")+utilisateur+("@")+adresse,0);
// FredCL : Récupération du premier mot identifiant le système
wxString SysStr = ftp->GetLastResult().AfterFirst(' ').BeforeFirst(' ');
// FredCL : La chaine d'identification renvoyé, n'est pas la même pour
// tous les UNIX. IL faudrait vérifier que les format de la chaine pour
// les items est compatible avec tous les UNIX.
// if (ftp->GetLastResult()=="215 UNIX Type: L8")
if (SysStr == "UNIX")
{
DistantSite->ClearAll();
DistantSite->InsertColumn(0, _("nom"), wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(1, _("type"), wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(2, _("taille"), wxLIST_FORMAT_LEFT, -1);
// FredCL : J'ai supprimer une colonne car suivant les serveurs l'heure
// est parfois remplacer par l'année "Jan 05 2005" au lieu de "Sep 05 19:27"
// même taille mais format différent. Il faudrait passer cette chaine à une
// fonction d'analyse qui renverrais sous forme "05/01/2005 19:27" en mettant
// une date à 12:00 par exemple quand celle-ci n'est pas fourni
// Le client FTP LeechFTP fait comme celà
DistantSite->InsertColumn(3, _("date/heure"), wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(4, _("permissions"), wxLIST_FORMAT_LEFT, -1);
//aidé par fredcl : http://www.cppfrance.com/forum.v2.aspx?ID=530582 wxArrayString dirs;
if(!ftp->GetDirList(dirs, ""))
{
Commandes->AppendText("impossible de récuperer la liste\n");
return;
}
size_t numFiles = dirs.GetCount();
// Inutile ClearAll a déjà effacé tous les items
// DistantSite->DeleteAllItems();
// Variables de traitement de la chaine de chaque item
wxString dirItems, tmp;
wxString name, type, size, date, attr;
for (size_t i =0; i<numFiles; i++)
{
dirItems = dirs.Item(i);
// drwxr-xr-x 1 ftp ftp 0 Sep 05 19:27 bin
// 01234567890123456789012345678901234567890123456789012345678901
// 1 2 3 4 5 6
// -r--r--r-- 1 guilhem lavaux 12738 Jan 16 20:17 cmndata.cpp
size = tmp.BeforeFirst(' ');
tmp = tmp.AfterFirst(' ').Strip(wxString::leading);
date = tmp.Left(12);
name = tmp.Mid(13);
long m_count = DistantSite->GetItemCount();
// FredCL : le wxListCtrl ayant le style wxLC_SORT_ASCENDING
// il est nécessaire de récupérer l'index oû a été inséré l'item
m_count = DistantSite->InsertItem(m_count, name);
DistantSite->SetItem(m_count, 1, type);
DistantSite->SetItem(m_count, 2, size);
DistantSite->SetItem(m_count, 3, date);
DistantSite->SetItem(m_count, 4, attr);
// FredCL : ne semble pas nécessaire car le style du controle
// n'a pas été modifié
// DistantSite->UpdateStyle();
}
//fin de l' aide
result();
}
wxArrayString dirs;
if(!ftp->GetDirList(dirs, ""))
{
Commandes->AppendText("impossible de récuperer la liste\n");
return;
}
size_t numFiles = dirs.GetCount();
DistantSite->DeleteAllItems();
for (size_t i =0; i<numFiles; i++)
{
long m_count = DistantSite->GetItemCount();
// FredCL : le wxListCtrl ayant le style wxLC_SORT_ASCENDING
// il est nécessaire de récupérer l'index oû a été inséré l'item
m_count = DistantSite->InsertItem(m_count, dirs.Item(i).AfterLast(' '));
J'ai regardé un peu ton programme. A mon avis tu devrais revoir l'interface qui n'est pas trés pratique.
Tu devrais essayer d'utiliser un wxDialog au lieu d'un wxFrame (Attention : la gestion est un peu différente, sur le site de wxWidgets c'est expliqué comment faire). De plus il serais bien que le répertoire local et le répertoire distant soit affiché de la même manière (L'ajout d'un glisser/déposer d'un répertoire à l'autre serais un plus)
cs_satellite34
Messages postés688Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 2 juin 20061 6 sept. 2005 à 10:16
Bonjour,
Ben vraiment, je te remercie beaucoup:
C'est trés simpa d' avoir apporté ta pierre;
Pour l' interface, j' ai déja commencé, en fait au début je voulais tester wxFTP, donc pas développé l'interface;
Aujourdhui le programme est sizé;
Hum, pour le repertoire distant moi j' aime bien les colonnes, ca fait un peu a la file zilla et c'est cool;
Que m' apporterai l' utilisation d' un wxDialog a la place d' un wxFrame sachant que je crois bien que dans wxDialog , je peux pas mettre de menu;
Sinon, dans mon wxGenericDirCtrl, je voudrai appeller un evenement sur clik droit sur un item, doit-je creer une classe obligatoirement pour
appeller un evenement de souris????
Je débute en prog et faire communiquer deux classe est pour moi encore assez abstrait;
cs_satellite34
Messages postés688Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 2 juin 20061 6 sept. 2005 à 12:20
re,
en fait, ce qui serait au top a mon gout, pour l' ergonomie et l' apparence de mon programme, ce serait que l' utilisateur puisse déterminer la taille de chacune des trois "zones" de la frame; je met une capture car ca n' a pas l' air trés clair;
cs_satellite34
Messages postés688Date d'inscriptionmercredi 6 avril 2005StatutMembreDernière intervention 2 juin 20061 8 sept. 2005 à 03:37
Franchement,
Je te tire ma casquette;
C'est magnifique;
Maintenant, je vais le faire moi-même, pour bien tout comprendre car c' est clair que de suite ca fait pro ;-)
Et c' est la base d' une appli qui tient la route;
Et puis, quel support!!!!!!