Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 3
Aller à la page: 1, 2, 3  >
[C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41
Auteur Message
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Bonjour, comme Agraf n'est plus développé/supporté (http://i.imgur.com/1IgZyLt.png), j'ai décider d'en recréer une autre plus compatible et complète, cette commande est compatible Windows (Support partiel), Mac et Linux+Autres Unix (*BSD ...) en utilisant la version GTK.



Son fonctionnement est le même que Agraf mais on peut ajouter l’argument "/keepalive" pour ne pas fermer la fenêtre lors que l'on appuie sur un bouton, toutes les données seront transmises a la console.

Cette commande est encore en développement mais vous pouvez en avoir un aperçu.

OS supportées :

• Windows (la version WinForm est fortement recommandée)
• Linux et autres Unix (compatible avec les deux version, mais la version WinForm utilise Wine[*])

Téléchargements : https://1drv.ms/u/s!Ao64nlgUfTexg_EwsYQ5ROZIyxi5cw
Prenez l'archive agrafv2_src.7z (c'est le plus compact (malgré que AgrafV2.cs fasse 32ko)), vous pouviez récupérer via un .bat le .exe depuis le .cs (code source) car les autres sont une perte de connection.

Code source (symboles de compilations : WinForm ou GTK, compile sans soucis avec le framework 2.0, pour compiler en GTK, il faut ajouter les références suivantes : atk-sharp, gdk-sharp, gio-sharp, glib-sharp, gtk-sharp) :
Déplacé car c'est trop long.
Voir https://1drv.ms/u/s!Ao64nlgUfTexg_EvsYQ5ROZIyxi5cw

Téléchargement (linux) : https://up1.ca/#zQiqlUmDK4lPPgvAtLcobw

Il y a également une version en vala qui n'est pas souvent mise à jour :
Code:
[lang=vala]/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-  */
/*
 * agrafv2.vala
 * Copyright (C) 2016 Astie Teddy <TSnake@Outlook.fr>
 *
 * AgrafV2 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 3 of the License, or
 * (at your option) any later version.
 *
 * AgrafV2 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, see <http://www.gnu.org/licenses/>.
 */

// Use Gtk to create and handle windows and widgets.
using Gtk;

// Use Gdk for window libraries.
using Gdk;

static int main (string[] args)
{
   Gtk.init(ref args);
   Gdk.error_trap_pop_ignored ();
   var window = new Gtk.Window();
   var grid = new Fixed();

   bool keepAlive = contains (args, "/keepalive");
   
   var file = File.new_for_path (args[1]);

   var lines = new List<string>();

   // The file don't exists, exit
   if (!file.query_exists ()) {
      stderr.printf ("File '%s' doesn't exist.\n", file.get_path ());
      return 1;
   }

   // Add file lines to list.
   try
   {
      var dis = new DataInputStream (file.read ());
      string rline;
      while ((rline = dis.read_line (null)) != null)
         // add only if the line start with ::
         if(rline.length > 2 && rline[0] == rline[1] && rline[1] == ':')
            lines.append (rline.substring (2, rline.length-2));
   } catch {
      return 1;
   }
      
   string res_name = args[2];
   bool start_parse = false;
   
   foreach (var line in lines)
   {
      if(line == res_name)
      {
         start_parse = true;
         continue;
      }
      if(start_parse)
      {
         if(line == "#EndGui")
            break;

         string[] arguments = splitArgs (line);

         string command = arguments[0].down();

            
         switch (command)
         {
            // Create/Init window
            case "window":
               window.title = arguments[1];
               window.window_position = WindowPosition.CENTER;
               
               if (arguments.length == 4)
                        window.set_default_size(int.parse(arguments[2]), int.parse(arguments[3]));
                    else
                    {
                        window.move(int.parse(arguments[2]), int.parse(arguments[3]));
                        window.set_default_size(int.parse(arguments[4]), int.parse(arguments[5]));
                    }
               window.destroy.connect (Gtk.main_quit);
               window.add (grid);
               break;
            case "button":
               if(arguments.length != 7)
               {
                  stdout.puts("Invalid arguments at line on button.");
                  break;
               }
               
               Button button = new Button.with_label (arguments[2]);
                 grid.put (button, int.parse (arguments[3]), int.parse (arguments[4]));
               button.set_size_request (int.parse (arguments[5]), int.parse (arguments[6]));

               button.button_press_event.connect(() => {
                  if(keepAlive)
                     stdout.printf ("%s : 1\n", arguments[1]);
                  else
                  {
                     Environment.set_variable (arguments[1], "1", true);
                     window.destroy ();
                  }
                  return false;
               });
               break;
            case "edit":
               if(arguments.length != 7)
               {
                  stdout.puts("Invalid arguments at line on edit.");
                  break;
               }
               var textBox = new Entry();
               textBox.set_text (arguments[2]);
               textBox.set_size_request (int.parse (arguments[5]), int.parse (arguments[6]));
               grid.put (textBox, int.parse (arguments[3]), int.parse (arguments[4]));
               textBox.key_release_event.connect(() => {
                  if(keepAlive)
                     stdout.puts(arguments[1] + " : " + textBox.get_text() + "\n");
                  else
                     Environment.set_variable (arguments[1], textBox.get_text(), true);
                  
                  return false;
               });
               
               break;
            case "text":
               if(arguments.length != 6)
               {
                  stdout.puts("Invalid arguments at line on text.");
                  break;
               }
               
                    var label = new Label(arguments[1]);
               label.set_size_request (int.parse (arguments[4]), int.parse (arguments[5]));
               grid.put(label, int.parse(arguments[2]), int.parse(arguments[3]));
               break;
            default:
               stdout.printf ("Unknow command %s\n", arguments[0]);
               break;
         }
      }
   }
   window.show_all();
   
   Gtk.main();
   
   return 0;
}

static string[] splitArgs(string args)
{
   Array<string> newArgs = new Array<string>();
   string tempString = "";
   bool InQuote = false;

   for (int i = 0; i != args.char_count (); i++)
   {
      unichar c = args.get_char (i);
      switch(c)
      {
         case ' ':
            // If is not in quote and not empty
            if(!InQuote)
            {
               newArgs.append_val(tempString);
               tempString = "";
               break;
            }
            else if (InQuote)
               tempString += " ";
            break;
         case '"':
            InQuote = !InQuote;
            break;
         default:
            tempString += c.to_string();
            break;
      }
   }
   newArgs.append_val(tempString);
   return toStringArray (newArgs);
}

static string[] toStringArray(Array<string> array)
{
   string[] strArray = new string[array.length];

   for (int i = 0; i != array.length + 1; i++)
      strArray[i] = array.index (i);
   
   return strArray;
}
static bool contains(string[] array, string _value)
{
   foreach (var v in array)
      if(v == _value)
         return true;

   return false;
}

Pour DarkBatcher avec dos9, voila une version en full C (demande GLib, gio, gtk et gdk), cette version est le code intermédiaire généré par valac : https://up1.ca/#iHi3_P-G_hZZqoZtZKDG8g

Et ensuite
Portage de la version C# et éventuellement de la version Vala en WinForm pour fonctionner nativement sur Windows.
Ajout de nouveau éléments, c'est la surprise.



Dernière édition par TSnake41 le Ven 21 Oct 2016 - 20:32; édité 18 fois

______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Une mise a jour ajoutant la version vala.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
TSnake41 a écrit:
Une mise a jour ajoutant la version vala.


La version vala ? Mort de Rire #DeBonSouvenirsDeStargate

Edit : vala du boudin ... oui, j'ai fait un edit juste pour cette vanne un peu beaucoup nul ... Mort de Rire




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Sa serais bien que le client ne soit pas dépendant d'une installation (gtk) Okay

Else :

C'est cool! Okay



Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
J'ai une bonne nouvelle a vous annoncer :

AgrafV2 arrive avec une version WinForm (comme Agraf de DarkBatcher) tout en restant compatible avec la version GTK :



ça veut dire que c'est compatible avec Windows sans installer quoi que ce soit (si on ne considère pas le .NET qui est présent depuis XP et moins).




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Une nouvelle mise à jour a noter :
* Correction de problèmes diverses
* Amélioration de multiedit (maintenant, les lignes sont comme un tableau de style C (nom[ligne]:Texte de la ligne))
* Correction du titre avec la version WinForm

Tout est dans le premier topic.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
j'ai trouvé un moyen d'utiliser le /keepalive de AgrafV2, c'est cool Smile

Code:
@Echo off
set note=Entrez votre texte ici
if "%1"=="MainWindow" goto MainWindow
AgrafV2 "%~0" #mainwindow /keepalive|"%~0" MainWindow
exit

::#mainwindow
::Window "File Writter" 330 80
::Button "About" "A propos" 110 0 110 20
::Button "Quit" "Quitter" 220 0 110 20
::Button "Save" "Append" 0 0 110 20
::Edit "note" "Entrez votre texte ici" 0 20 330 310
::#EndGui

:MainWindow
set /p callback=
if "%callback%"=="About:1" (
    AgrafV2 "%~0" #About>nul
)
if "%callback%"=="Save:1" (
   echo %note%>>test.txt
)
if "%callback%"=="Quit:1" (
   taskkill /IM AgrafV2.exe
   exit
)
for /f "delims=: tokens=1,*" %%A in ("%callback%") do (
   echo %%A:%%B
   set %%A=%%B
)
goto MainWindow

::#About
::Window "About" 300 100
::Text "File Writter est un logiciel fait pour tester AgrafV2" 5 5 250 25
::Button "test" "Terminer" 5 30 250 25
::#EndGui





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Mise à jour !

Cette mise à jour corrige plusieurs problèmes :
- La taille de la fenêtre est désormais fixe
- Correction de la fermeture
- Correction du retard de Multiedit et edit

Il y a également plusieurs ajouts :


- Icones de fenêtre (bug connu sur la version WinForm sur Linux -> System.ArgumentException sans raison)
Syntaxe : icon <fichier>

- Radio boutons
Syntaxe : radio <nom> <texte> <Actif : TRUE/FALSE> <Groupe> <x> <y> <Longeur> <Hauteur>

- Check box
Syntaxe : checkbox <nom> <texte> <Actif : TRUE/FALSE> <x> <y> <Longeur> <Hauteur>

- Sliderbar (Scale sur GTK et TrackBar sur WinForm) :
Syntaxe : slider <nom> <valeur> <min> <max> <pas> <x> <y> <Longeur> <Hauteur>

- File Chooser (BETA) :
L’implémentation n'est pas totalement finie sur WinForm mais reste fonctionnelle, sur GTK, elle est complète.
Sur WinForm, ça prends la forme d'un bouton avec le nom qui est défini par le fichier sélectionné car il n'y a pas de contrôle WinForm adapté à cela.

Syntaxe : file <nom> <texte> <OPEN/SAVE> <Multiple: TRUE/FALSE (non supporté sur WinForm)> <Titre de la fenêtre> <x> <y> <Longeur> <Hauteur>

Ajout d'un paramètre sur les boutons qui permet de changer le style plat (WinForm seulement) :
Valeurs possibles : Flat, Popup, Standard, System (https://msdn.microsoft.com/en-us/library/system.windows.forms.flatstyle%28v=vs.110%29.aspx)
exemple Button "valid" "Valider" 375 90 100 30 Flat

PS: Je n'ai pas repris le checkbox et le radio original car ils étaient trop compliqué à implémenter/incomplet.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Juste une petite question, pourquoi s’embêter à faire une commande externe, qui va lire le batch à la recherche d'un label qu'il va ensuite lire et rediriger l'output dans la console via un set /p ?

Pourquoi ne pas faire une truc du genre :
Code:


@echo off
for /f "tokens=1-4 delims=" %%a in ('Agraf.exe (
Window "File Writter" 330 80
Button "About" "A propos" 110 0 110 20
Button "Quit" "Quitter" 220 0 110 20
Button "Save" "Append" 0 0 110 20
Edit "note" "Entrez votre texte ici" 0 20 330 310
^)') do set BoutonAbout=%%a&set BoutonQuit=%%b&set BoutonSave=%%c&set EditNote=%%d



Après il est vrai que la boucle for attend la fin de l'éxécution du script, mais dans ce cas j'ai une idée :

-Quand dans le batch on appel Agraf, deux processus se créé : un processus pour re-transmettre les infos au batch (qu'on appellera processus 1), et l'autre la fenêtre en elle-même (qu'on appellera processus 2)
- Le processus 1 va ouvrir le processus 2
- Si on veux retransmettre caractères par caractères un "edit", le processus 2 va envoyer l'input au processus 1, et celui ci va s'éteindre, pour permettre au batch de continuer, sans pour autant stopper le processus 2 !
- Du coup, avec le batch on fait une boucle et donc le processus 1 à chaque passage de la boucle re-transmettra la valeur de l'input au for via ce que j'ai dit précédemment, ce qui donnerai un code comme ça :

Code:

@echo off
:boucle
set EDITNOTE=
for /f "tokens=1 delims=" %%a in ('Agraf.exe (
Edit "note" "Entrez votre texte ici" 0 20 330 310
^)') do set EDITNOTE=%%a
if /i "%EDITNOTE%" EQU "LOL" exit
goto boucle



@ ++ Wink Okay




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Xenoxis a écrit:
Juste une petite question, pourquoi s’embêter à faire une commande externe, qui va lire le batch à la recherche d'un label qu'il va ensuite lire et rediriger l'output dans la console via un set /p ?

Pourquoi ne pas faire une truc du genre :
Code:


@echo off
for /f "tokens=1-4 delims=" %%a in ('Agraf.exe (
Window "File Writter" 330 80
Button "About" "A propos" 110 0 110 20
Button "Quit" "Quitter" 220 0 110 20
Button "Save" "Append" 0 0 110 20
Edit "note" "Entrez votre texte ici" 0 20 330 310
^)') do set BoutonAbout=%%a&set BoutonQuit=%%b&set BoutonSave=%%c&set EditNote=%%d



Après il est vrai que la boucle for attend la fin de l'éxécution du script, mais dans ce cas j'ai une idée :

-Quand dans le batch on appel Agraf, deux processus se créé : un processus pour re-transmettre les infos au batch (qu'on appellera processus 1), et l'autre la fenêtre en elle-même (qu'on appellera processus 2)
- Le processus 1 va ouvrir le processus 2
- Si on veux retransmettre caractères par caractères un "edit", le processus 2 va envoyer l'input au processus 1, et celui ci va s'éteindre, pour permettre au batch de continuer, sans pour autant stopper le processus 2 !
- Du coup, avec le batch on fait une boucle et donc le processus 1 à chaque passage de la boucle re-transmettra la valeur de l'input au for via ce que j'ai dit précédemment, ce qui donnerai un code comme ça :

Code:

@echo off
:boucle
set EDITNOTE=
for /f "tokens=1 delims=" %%a in ('Agraf.exe (
Edit "note" "Entrez votre texte ici" 0 20 330 310
^)') do set EDITNOTE=%%a
if /i "%EDITNOTE%" EQU "LOL" exit
goto boucle



@ ++ Wink Okay


Je vois où tu veux en venir mais le soucis est que ça va être beaucoup trop lourd car la vitesse ne sera pas limitée et on va enchaîner les ouverture/fermeture.
Aussi, ça risque d'être bien compliqué de faire la connexion/déconnexion entre les processus.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Ah ok, mais du coup ça serait quand même possible de faire une version de AgrafV2 avec le for (version sans, bien évidemment, la retransmissions des caractères en "direct") ?




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
oui, je regarderais bien sûr.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Je viens de publier sur Youpubtube une vidéo montrant le mode temps réel de AgrafV2 :
https://www.youtube.com/watch?v=lK6tU2PSes4&feature=youtu.be

EDIT: Euh...




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 
Xenoxis a écrit:
Ah ok, mais du coup ça serait quand même possible de faire une version de AgrafV2 avec le for (version sans, bien évidemment, la retransmissions des caractères en "direct") ?


Non, le for posera problème (les lignes sont des équivalents des espaces donc comment savoir si ce n'est pas autre chose qu'une ligne)




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message Lien mort agrafv2 
bonsoir,

Le lien pour agrafv2 est mort.
J'aimerais bien tester cette commande, quelqu'un peu m'envoyer ou remettre un lien valide?
Avec un ptit tuto ça serai cool ^^

merci




______________________________________________________
La différence entre un optimiste et un pessimiste ? Aucune, mais il y en a 1 qui vit beaucoup mieux.
Visiter le site web du posteur
Message [C#][BETA]AgrafV2- Créateur d'interface graphique - TSnake41 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 3
Aller à la page: 1, 2, 3  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch