From e47508bf6a5bab7e88ac24a4746c2d4c94faf9c7 Mon Sep 17 00:00:00 2001
From: Mateusz Kaduk <mateusz.kaduk@gmail.com>
Date: Wed, 22 Dec 2004 14:22:45 +0000
Subject: Added modes list to setup

---
 src/gui/setup.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++++------
 src/gui/setup.h   |  3 ++-
 2 files changed, 52 insertions(+), 7 deletions(-)

(limited to 'src/gui')

diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp
index bd600654..1e75e82d 100644
--- a/src/gui/setup.cpp
+++ b/src/gui/setup.cpp
@@ -1,23 +1,51 @@
 /*----------------------------------------------------------------
- * setup.c -- setup routines
+ * setup.cpp -- setup routines
  *----------------------------------------------------------------
  *  This module takes care of everything relating to the
  *  setup dialog.
  */
 
 #include "setup.h"
+/*
+ * Metod returns the number of elements in container
+ */
+int ModesListModel::getNumberOfElements() {
+  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);
+}
 
 /* 
- * Display setup dialog
+ * 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);
   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));
@@ -27,6 +55,7 @@ Setup::Setup(gcn::Container *parent)
   cancelButton->setEventId("cancel");
   
   /* Set position */
+  scrollArea->setPosition(10,40);
   displayLabel->setPosition(10,10);
   applyButton->setPosition(10,190);
   cancelButton->setPosition(150,190);
@@ -36,33 +65,47 @@ Setup::Setup(gcn::Container *parent)
   cancelButton->addActionListener(this);
   
   /* Assemble dialog */
+  add(scrollArea);
   add(displayLabel);
   add(applyButton);
   add(cancelButton);
   
   setSize(240,216);
   setLocationRelativeTo(getParent());
-  
-  /* Is hidden */
-  //setVisible(false);
+
+  //TODO: load default settings
+  modesList->setSelected(1);
 }
 
-Setup::~Setup() {  
+/* 
+ * Destructor
+ */
+Setup::~Setup() {
+  delete modesListModel;
+  delete modesList;
+  delete scrollArea;
   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
   }
   else if(eventId == "cancel") {
     setVisible(false);
   }
 }
 
+/*
+ * Static method for creating singleton objects
+ */
 Setup * Setup::ptr = NULL;
 Setup * Setup::create_setup() {
   if(ptr == NULL)
@@ -72,3 +115,4 @@ Setup * Setup::create_setup() {
     
   return ptr;
 }
+
diff --git a/src/gui/setup.h b/src/gui/setup.h
index 55e66cc5..1cb766d0 100644
--- a/src/gui/setup.h
+++ b/src/gui/setup.h
@@ -31,7 +31,8 @@ class Setup : public Window, public gcn::ActionListener {
   /* Dialog parts */
   ModesListModel *modesListModel;
   gcn::Label *displayLabel;
-  gcn::ListBox *modeslist;
+  gcn::ScrollArea *scrollArea;
+  gcn::ListBox *modesList;
   Button *applyButton;
   Button *cancelButton;
   
-- 
cgit v1.2.3-70-g09d2