batebates/sudoku

View on GitHub
src/view/RegisterView.rb

Summary

Maintainability
A
3 hrs
Test Coverage
#===Permet la génération de l'interface de création de compte en gtk
class RegisterView
    private_class_method :new

    def RegisterView.display(newGame)
        new(newGame);
    end

    def initialize(newGame)
        @avatarList = Dir[AssetManager.assetsDir() + "/avatar_big/*.png"];
        @avatarIndex = 0;

        window = Window.window();
        SudokuAPI.API.timerPaused = true;
        root = Window.root;
        sudokuPanel = root.children[0];
        sudokuPanel.hide();

        mainPanel = Gtk::Box.new(:horizontal, 0);
        columnPanel = Gtk::Box.new(:vertical, 4);

        title = Gtk::Label.new(newGame ? "Bienvenue, créez un profil" : "Création d'un nouveau profil");
        title.name = "createUserTitle";
        title.set_margin_bottom(20);
        title.set_margin_top(40);

        chooseAvatarBox = Gtk::Box.new(:horizontal, 4);
        leftButton = Gtk::Button.new();
        leftButton.add(Gtk::Image.new(:file => AssetManager.assetsResource("./back.png")));
        rightButton = Gtk::Button.new();
        rightButton.add(Gtk::Image.new(:file => AssetManager.assetsResource("./next.png")));
        rightButton.name = "createUserChooser";
        leftButton.name = "createUserChooser";

        currentAvatar = Gtk::Image.new(:file => @avatarList[0]);

        leftButton.signal_connect("clicked") {
            index = ((@avatarIndex - 1) % @avatarList.length);
            currentAvatar.file = @avatarList[index];
            @avatarIndex = index;
        }

        rightButton.signal_connect("clicked") {
            index = ((@avatarIndex + 1) % @avatarList.length);
            currentAvatar.file = @avatarList[index];
            @avatarIndex = index;
        }

        chooseAvatarBox.add(leftButton);
        chooseAvatarBox.add(currentAvatar);
        chooseAvatarBox.add(rightButton);

        nameInfo = Gtk::Label.new("Entrez votre nom d'utilisateur :");
        nameInfo.set_margin_bottom(0);
        nameInfo.set_margin_top(10);
        nameEntry = Gtk::Entry.new();
        nameError = Gtk::Label.new("Nom trop court !");
        nameError.set_margin_bottom(10);
        nameError.name = "createUserError";

        buttonBox = Gtk::Box.new(:horizontal, 4);
        buttonConfirm = Gtk::Button.new(:label => "Valider");
        buttonConfirm.sensitive = false;
        buttonConfirm.signal_connect("clicked") {
            ProfilManager.ajouter(nameEntry.text);
            ProfilManager.connecter(nameEntry.text);
            Config.setValue("avatar", @avatarIndex);
            Config.save();
            Config.load();
            root.remove(mainPanel);
            sudokuPanel.show_all();
            SudokuAPI.API.timerPaused = false;
        }

        nameEntry.signal_connect("changed"){ |d|
            onTextEdit(nameEntry, nameError, buttonConfirm);
        }

        buttonBack = Gtk::Button.new(:label => "Retour");
        buttonBack.signal_connect("clicked") {
            root.remove(mainPanel);
            sudokuPanel.show_all();
            SudokuAPI.API.timerPaused = false;
        }

        buttonBox.pack_start(buttonConfirm, :expand => true, :fill => true, :padding => 0);
        buttonBox.pack_start(buttonBack, :expand => true, :fill => true, :padding => 0) unless newGame;

        columnPanel.add(title);
        columnPanel.add(chooseAvatarBox);
        columnPanel.add(nameInfo);
        columnPanel.add(nameEntry);
        columnPanel.add(nameError);
        columnPanel.add(buttonBox);

        mainPanel.pack_start(columnPanel, :expand => true, :fill => false, :padding => 0);

        mainPanel.set_size_request(root.allocation.width, root.allocation.height);
        mainPanel.show_all();

        root.pack_start(mainPanel, :expand => true, :fill => true, :padding => 0);

        CSSStyle.apply_style(mainPanel);
    end

    def onTextEdit(nameEntry, nameError, buttonConfirm)
        result = true;
        if(nameEntry.text.length < 3)
            nameError.label = "Nom trop court !";
            result = false;
        elsif(nameEntry.text.length > 10)
            nameError.label = "Nom trop long !";
            result = false;
        end

        if(!nameEntry.text.count("^a-zA-Z0-9_").zero?)
            nameError.label = "Le nom doit être alpha numérique";
            result = false;
        end

        if(ProfilManager.listeProfile.include?(nameEntry.text))
            nameError.label = "Le nom est déjà pris !";
            result = false;
        end

        buttonConfirm.sensitive = result;

        if(result)
            nameError.label = "Le nom est valide";
            nameError.name = "createUserErrorValid";
        else
            nameError.name = "createUserError";
        end
    end
end