]> git.tdb.fi Git - libs/gltk.git/commitdiff
Add some sanity checks to arrangements
authorMikko Rasa <tdb@tdb.fi>
Sun, 16 Jun 2013 08:26:58 +0000 (11:26 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 16 Jun 2013 08:26:58 +0000 (11:26 +0300)
source/arrangement.h
source/column.cpp
source/grid.cpp
source/row.cpp

index 284d3f7edd7079279848ce4f9e1371e29d484b77..ed1798b8a74856fcd18d2fc96bb9a9d12051a509 100644 (file)
@@ -2,6 +2,7 @@
 #define MSP_GLTK_ARRANGEMENT_H_
 
 #include <list>
+#include <stdexcept>
 #include "layout.h"
 
 namespace Msp {
@@ -9,6 +10,13 @@ namespace GLtk {
 
 class Widget;
 
+class arrangement_error: public std::logic_error
+{
+public:
+       arrangement_error(const std::string &w): std::logic_error(w) { }
+       virtual ~arrangement_error() throw() { }
+};
+
 class Arrangement
 {
 protected:
index d31544ab2627ed88c5fc529c733651257e49caf9..811185dfcb669b717db499d24882aa9e4be474b5 100644 (file)
@@ -12,6 +12,9 @@ Column::Column(Layout &l):
 
 void Column::split()
 {
+       if(gravity<0)
+               throw arrangement_error("already split");
+
        split_here = true;
        gravity = -1;
 }
index 6296098f511017c339058050a4a73eaba2c81de9..3b44ac857e0058e9e6d34de38ffd158aced3e17e 100644 (file)
@@ -17,6 +17,9 @@ void Grid::skip()
 
 void Grid::next_row()
 {
+       if(row_bottom.empty())
+               throw arrangement_error("empty row not allowed");
+
        finish_row();
 }
 
index ae13e49ec2e64f9f331db394d9c8367b56ec3c37..92f3fe62b19e77c8bdf9792f033420be58f88347 100644 (file)
@@ -12,6 +12,9 @@ Row::Row(Layout &l):
 
 void Row::split()
 {
+       if(gravity>0)
+               throw arrangement_error("already split");
+
        split_here = true;
        gravity = 1;
 }