summaryrefslogblamecommitdiff
path: root/src/gui/setup.cpp
blob: 84c3b2be2d4daf2b347d831ff2942f8f93628285 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                  
                              



                                                                  
                  

                    



                                                    
                            
















                                                    

                        
 
   
                           
   


                                    
                                        
                                           

                                               
                                                  

                                      
  
                     
                                                       


                                                         
  


                                     
  
                    
                                 
                                   
                                  

                                     
  
                          

                                        
  
                       
                  
                    
                  




                                     


                               

 






                        
                    


                      

 


                        

                                              
                          
                      
                                    






                                                                
                      


   


                                               







                               
 
 
/*----------------------------------------------------------------
 * setup.cpp -- setup routines
 *----------------------------------------------------------------
 *  This module takes care of everything relating to the
 *  setup dialog.
 */
#include "setup.h"
#include <allegro.h>

/*
 * Metod returns the number of elements in container
 */
int ModesListModel::getNumberOfElements() {
  //TODO after moving to SDL
  return 3;
}

/*
 * Metod returns element from container
 */
std::string ModesListModel::getElementAt(int i) {
  //TODO: change hardcoded modes after moving to SDL
  struct Modes {
    int height, width;
    char *desc;
  };
  static Modes modes[] = {
    { 640,480, "640x480"},
    { 800,600, "800x600" },
    { 1024,768, "1024x768" }
  };
  return(modes[i].desc);
}

/* 
 * Setup dialog constructor
 */
Setup::Setup(gcn::Container *parent)
  : Window(parent, "Setup")
{
  modesListModel = new ModesListModel();
  displayLabel = new gcn::Label("Display");
  modesList = new gcn::ListBox(modesListModel);
  scrollArea = new gcn::ScrollArea(modesList);
  fsCheckBox = new CheckBox("Full screen", false);
  applyButton = new Button("Apply");
  cancelButton = new Button("Cancel");
  
  /* Set dimension */
  scrollArea->setDimension(gcn::Rectangle(0,0,120,50));
  displayLabel->setDimension(gcn::Rectangle(0,0,80, 16));
  applyButton->setDimension(gcn::Rectangle(0,0,80, 16));
  cancelButton->setDimension(gcn::Rectangle(0,0,80, 16));
  
  /* Set events */
  applyButton->setEventId("apply");
  cancelButton->setEventId("cancel");
  
  /* Set position */
  scrollArea->setPosition(10,40);
  displayLabel->setPosition(10,10);
  fsCheckBox->setPosition(100,16);
  applyButton->setPosition(10,190);
  cancelButton->setPosition(150,190);
  
  /* Listen for actions */
  applyButton->addActionListener(this);
  cancelButton->addActionListener(this);
  
  /* Assemble dialog */
  add(scrollArea);
  add(displayLabel);
  add(fsCheckBox);
  add(applyButton);
  add(cancelButton);
  
  setSize(240,216);
  setLocationRelativeTo(getParent());

  //TODO: load default settings
  modesList->setSelected(1);
}

/* 
 * Destructor
 */
Setup::~Setup() {
  delete modesListModel;
  delete modesList;
  delete scrollArea;
  delete fsCheckBox;
  delete displayLabel;
  delete applyButton;
  delete cancelButton;
}

/*
 * Event handling method
 */
void Setup::action(const std::string& eventId)
{
  if(eventId == "apply") {
    setVisible(false);
    //TODO: Save&apply setup changes
    if(fsCheckBox->isMarked() == true) {
	    set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,800,600,0,0);
    } else {
	    set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
    }
    
  } else if(eventId == "cancel") {
    setVisible(false);
  }
}

/*
 * Static method for creating singleton objects
 */
Setup * Setup::ptr = NULL;
Setup * Setup::create_setup() {
  if(ptr == NULL)
    ptr = new Setup(guiTop);
   else
    ptr->setVisible(true);
    
  return ptr;
}