shoefiti

Check-in [9bb433e5de]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:One list_box and calendar nav as per website (WIP!)

* Mainly due to the bug in the MinGW version of Shoes, which only
allows one list_box, I've moved to having one list_box for list
selection. The most recent year and month are fetched and the
calendar drawn for that.
* Use forward and back buttons, as per the Librelist website to
move the calendar forward and back.
* Work in progress!

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 9bb433e5de4a63ac26f14ff63f775bb01d5e773fcdecbfad2af17e2d8caf3dd9
User & Date: i5ivem@gmail.com 2010-04-22 15:52:51
Context
2010-04-23
13:50
Fix layout again Leaf check-in: 87dd659f52 user: i5ivem@gmail.com tags: trunk, v0.0.1
2010-04-22
15:52
One list_box and calendar nav as per website (WIP!)

* Mainly due to the bug in the MinGW version of Shoes, which only
allows one list_box, I've moved to having one list_box for list
selection. The most recent year and month are fetched and the
calendar drawn for that.
* Use forward and back buttons, as per the Librelist website to
move the calendar forward and back.
* Work in progress! check-in: 9bb433e5de user: i5ivem@gmail.com tags: trunk

2010-04-15
15:59
Fix rendering of mailpane when new calendar

* Removed commented out old code
* Hide calendar when selecting a new list or year
* Show calendar when selecting month
* Remove drawmailpane function from month listbox block
as don't need a new mailpane each time, just need to clear and
redraw. This was causing a scrollbar to appear in main window and
odd display glitches
* Replace with @messagelist.clear in the calendar function and just
one drawmailpane call at app initialisation
* Still room for improvement check-in: fb0c7e5ad8 user: i5ivem@gmail.com tags: trunk

Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to shoefiti.rb.

1
2
3
4
5
6
7
8



9
10
11
12
13

14






15
16



17
18
19


20




21
22
23
24
25
26
27



28
29






30
31


32
33
34
35

36

37
38



39
40
41
42




43
44
45
46
47
48
49
50
51
52
53

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
..
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143




144
145
146






147

148
149
150



151
152
require 'rubygems'
require 'date'
require 'json'

Shoes.app :title => "Shoefiti - Librelist Browser", :height => 700, :scroll => false do
	
	#Remove clever, but useless way of defining list boxes, and define each separately:	
	#Mailing list



	@stack_list = stack :margin => 10 do
		
		@list_list = list_box do |list| 
			@stack_day.hide
			@stack_cal.hide

			download(URL+list.text) do |resp|






				@list_year.items = eval(resp.response.body)[1]
				@stack_year.show



			end
		end
	end







	#Year
	@stack_year = stack :margin => 10 do
		@list_year = list_box do |year|
			@stack_cal.hide
			download(URL+@list_list.text+year.text) do |resp|
				@list_day.items =  eval(resp.response.body)[1]
				@stack_day.show



			end
		end






	end
	


	#Month
	@stack_day = stack :margin => 10 do
		@list_day = list_box do |day|
			download(URL+@list_list.text+@list_year.text+day.text) do |resp|

				@place = eval(resp.response.body)[0].split("/")

				@stack_cal.show
				drawcalendar(@place.pop.to_i, @place.pop.to_i, @place.pop.to_s, eval(resp.response.body)[1])



			end
		end
	end





		
	def init
		download(URL) do |resp|
			@list_list.items = eval(resp.response.body)[1]
			@stack_list.show
		end
	end


	#Need to clear and redraw like mailpane
	def drawcalendar(month, year, list, maildays)

		off=Date.new(year, month, 01).wday-1 #Offset, not sure why I need the -1 here, but I do.
		mdays=(Date.new(year, 12, 31) << (12-month)).day #Days in the month
		rows=((mdays+off+1).to_f/7.0).ceil #Number of rows in calendar, plus 1 to compensate for -1 above. Have confused myself
		days = %w{Su Mo Tu We Th Fr Sa}
		@messagelist.clear
		@stack_cal.clear{
		days.each do |column|
			i = days.index(column)
			row = 0
			stack :left => i*40+250, :top => -100 do
				para column
				until row == rows do
					calday = i-off+7*row
					if (1..mdays) === calday #Only want to draw if greater than zero and less than max days
						if calday.to_s.length == 1
							caldaystr = "0"+calday.to_s #need "0" in front of single digits
						else
................................................................................
		link(day){getmails(list, year, month, day)}
	end
	

	def getmails(list, year, month, day)
		#need to fix months and days here, ie 0 on front.
		if month.to_s.length == 1
			month = "0"+month.to_s
		else
			month = month.to_s
		end
		if day.to_s.length == 1
			day = "0"+day.to_s
		else
			day = day.to_s
................................................................................
				end
			end
			end}
		end
	end

	
	def drawmailpane
		@messagelist = stack :height => 425, :scroll => true 
	end

	
	#Actual app stuff
	URL = "http://librelist.com/archives/"
	@listurl = ""




	@stack_list.hide
	@stack_year.hide
	@stack_day.hide






	@stack_cal = stack do

	end
	init 		
	drawmailpane #No real need for drawmailpane function, get rid of this




end






|
<
>
>
>



<
<
>
|
>
>
>
>
>
>
|
<
>
>
>
|
|
|
>
>

>
>
>
>
|
<
<
<
<
<
<
>
>
>


>
>
>
>
>
>
|
<
>
>
|
<
<
<
>
|
>
|
<
>
>
>
|
|
<
|
>
>
>
>










|
>
|








|







 







|







 







<
<
<
|


<

>
>
>
>
|
|
|
>
>
>
>
>
>

>


<
>
>
>


1
2
3
4
5
6
7

8
9
10
11
12
13


14
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30
31
32
33
34
35
36






37
38
39
40
41
42
43
44
45
46
47
48

49
50
51



52
53
54
55

56
57
58
59
60

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
...
153
154
155
156
157
158
159



160
161
162

163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180

181
182
183
184
185
require 'rubygems'
require 'date'
require 'json'

Shoes.app :title => "Shoefiti - Librelist Browser", :height => 700, :scroll => false do
	
	URL = "http://librelist.com/archives/"


	#Try doing single list box owing to list_box troubles on shoes MinGW
	#More closely mimics the web interface
	@stack_list = stack :margin => 10 do
		
		@list_list = list_box do |list| 


			@list = list.text	
			download(URL+@list) do |resp|
				@year = eval(resp.response.body)[1][-1].to_i
				debug(@year)
				download(URL+@list+@year.to_s) do |resp|
					@month = eval(resp.response.body)[1][-1].to_i
					debug(@month)
					download(URL+@list+@year.to_s+"/"+(0 if @month < 10).to_s+@month.to_s) do |resp|
						@days = eval(resp.response.body)[1]

						debug(@days)
						@when.replace(@month.to_s, " ", @year.to_s)
						drawcalendar(@list, @year, @month, @days)
					end
				end
			end
		end
	end

			
	def changemonth(direction)
		if direction == :backward
			if @month == 1 #tempting to do "12/".next but no corresponding previous
				@year -= 1






				@month = 12
			else
				@month -= 1
			end
		end
		if direction == :forward
			if @month == 12
				@year += 1
				@month = 1
			else
				@month += 1
			end

		end
		debug(@year)
		debug(@month)



		download(URL+@list+@year.to_s+"/"+(0 if @month < 10).to_s+@month.to_s) do |resp|
			@days = eval(resp.response.body)[1]
			debug(@days)
			#@stack_cal.show

			#@stack_cal_nav.show
			@when.replace(@month.to_s, " ", @year.to_s)
			drawcalendar(@list, @year, @month, @days)
		end
	end

	

	
	#Need to be careful not to get months that don't exist (think ok back in time, within reason??)
	
		
	def init
		download(URL) do |resp|
			@list_list.items = eval(resp.response.body)[1]
			@stack_list.show
		end
	end


	#Need to clear and redraw like mailpane
	def drawcalendar(list, year, month, maildays)
		debug("Where's the calendar?")
		off=Date.new(year, month, 01).wday-1 #Offset, can't remember why I need the -1 here, but I do.
		mdays=(Date.new(year, 12, 31) << (12-month)).day #Days in the month
		rows=((mdays+off+1).to_f/7.0).ceil #Number of rows in calendar, plus 1 to compensate for -1 above. Have confused myself
		days = %w{Su Mo Tu We Th Fr Sa}
		@messagelist.clear
		@stack_cal.clear{
		days.each do |column|
			i = days.index(column)
			row = 0
			stack :left => i*40+250, :top => -30 do
				para column
				until row == rows do
					calday = i-off+7*row
					if (1..mdays) === calday #Only want to draw if greater than zero and less than max days
						if calday.to_s.length == 1
							caldaystr = "0"+calday.to_s #need "0" in front of single digits
						else
................................................................................
		link(day){getmails(list, year, month, day)}
	end
	

	def getmails(list, year, month, day)
		#need to fix months and days here, ie 0 on front.
		if month.to_s.length == 1
			month = "0"+month.to_s #Mr. Consistent. Done differently from the urls!
		else
			month = month.to_s
		end
		if day.to_s.length == 1
			day = "0"+day.to_s
		else
			day = day.to_s
................................................................................
				end
			end
			end}
		end
	end

	



	
	
	#Actual app stuff

	@listurl = ""
	
	@stack_cal_nav = stack do
		button "<" do
			changemonth(:backward)
		end
		@when = para "When"
		button ">" do
			changemonth(:forward)
		end
	end



	@stack_cal = stack do
		para "Calendar"
	end
	init 		

	@messagelist = stack :height => 425, :scroll => true 
	#@stack_cal.hide
	#@stack_cal_nav.hide

end