keepyourhead 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING.txt +674 -0
- data/LICENSE.rdoc +20 -0
- data/README.rdoc +3 -0
- data/bin/keepyourhead +6 -0
- data/data/glade/DialogEditLatex.glade +180 -0
- data/data/glade/DialogEditText.glade +66 -0
- data/data/glade/DialogTrainStart.glade +101 -0
- data/data/glade/WindowEdit.glade +1419 -0
- data/data/glade/WindowTrain.glade +271 -0
- data/data/images/error_back.png +0 -0
- data/data/images/error_front.png +0 -0
- data/data/images/loading_back.png +0 -0
- data/data/images/loading_front.png +0 -0
- data/lib/Keepyourhead.rb +62 -0
- data/lib/Keepyourhead/Application.rb +94 -0
- data/lib/Keepyourhead/Cache.rb +233 -0
- data/lib/Keepyourhead/Compilation.rb +38 -0
- data/lib/Keepyourhead/Images.rb +62 -0
- data/lib/Keepyourhead/Preferences.rb +52 -0
- data/lib/Keepyourhead/Requirements.rb +72 -0
- data/lib/Keepyourhead/Resources.rb +45 -0
- data/lib/Keepyourhead/Training.rb +132 -0
- data/lib/Keepyourhead/Utils.rb +97 -0
- data/lib/Keepyourhead/Version.rb +43 -0
- data/lib/Keepyourhead/database/Base.rb +77 -0
- data/lib/Keepyourhead/database/BaseStatistic.rb +63 -0
- data/lib/Keepyourhead/database/BaseTopicFlashcardContainer.rb +43 -0
- data/lib/Keepyourhead/database/Collection.rb +43 -0
- data/lib/Keepyourhead/database/Database.rb +139 -0
- data/lib/Keepyourhead/database/File.rb +224 -0
- data/lib/Keepyourhead/database/FileRoot.rb +44 -0
- data/lib/Keepyourhead/database/Flashcard.rb +116 -0
- data/lib/Keepyourhead/database/Topic.rb +40 -0
- data/lib/Keepyourhead/database/Visitor.rb +33 -0
- data/lib/Keepyourhead/database/XmlAccessor.rb +315 -0
- data/lib/Keepyourhead/gui/Action.rb +91 -0
- data/lib/Keepyourhead/gui/DialogEditLatex.rb +132 -0
- data/lib/Keepyourhead/gui/DialogEditText.rb +104 -0
- data/lib/Keepyourhead/gui/DialogTrainStart.rb +63 -0
- data/lib/Keepyourhead/gui/FlashcardViewController.rb +112 -0
- data/lib/Keepyourhead/gui/WindowEdit.rb +469 -0
- data/lib/Keepyourhead/gui/WindowEditActions.rb +440 -0
- data/lib/Keepyourhead/gui/WindowEditAdapters.rb +329 -0
- data/lib/Keepyourhead/gui/WindowTrain.rb +167 -0
- data/lib/Keepyourhead/style/Style.rb +48 -0
- data/lib/Keepyourhead/style/StyleLatex.rb +235 -0
- metadata +100 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
# Copyright 2008 Burghard Oliver
|
2
|
+
#
|
3
|
+
# This file is part of KeepYourHead.
|
4
|
+
#
|
5
|
+
# KeepYourHead is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# KeepYourHead is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with KeepYourHead. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
module KeepYourHead
|
21
|
+
class Action
|
22
|
+
attr_accessor :procExecuteable
|
23
|
+
attr_reader :object
|
24
|
+
attr_reader :name
|
25
|
+
|
26
|
+
def initialize(object, name)
|
27
|
+
@widgets = []
|
28
|
+
@handler_id = {}
|
29
|
+
@object = object
|
30
|
+
@name = name
|
31
|
+
end
|
32
|
+
|
33
|
+
def widgets
|
34
|
+
@handler_id.keys
|
35
|
+
end
|
36
|
+
|
37
|
+
def addActivator(widget)
|
38
|
+
assert( @handler_id[widget] == nil )
|
39
|
+
@handler_id[widget] =
|
40
|
+
case widget
|
41
|
+
when Gtk::MenuItem
|
42
|
+
widget.signal_connect("activate") {
|
43
|
+
self.activate
|
44
|
+
}
|
45
|
+
when Gtk::ToolButton
|
46
|
+
widget.signal_connect("clicked") {
|
47
|
+
self.activate
|
48
|
+
}
|
49
|
+
else
|
50
|
+
throw ExceptionNotImplemented
|
51
|
+
end
|
52
|
+
end
|
53
|
+
def removeActivator(widget)
|
54
|
+
assert( @handler_id[widget] )
|
55
|
+
widget.signal_handler_disconnect @handler_id[widget]
|
56
|
+
@handler_id.delete widget
|
57
|
+
end
|
58
|
+
|
59
|
+
def enable
|
60
|
+
widgets.each{ |w| w.sensitive = true }
|
61
|
+
end
|
62
|
+
def disable
|
63
|
+
widgets.each{ |w| w.sensitive = false }
|
64
|
+
end
|
65
|
+
|
66
|
+
def executeable?
|
67
|
+
(not self.procExecuteable) || self.procExecuteable.call(object)
|
68
|
+
end
|
69
|
+
def updateEnable
|
70
|
+
if executeable? then
|
71
|
+
enable
|
72
|
+
else
|
73
|
+
disable
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def activate(*args)
|
78
|
+
if self.executeable? then
|
79
|
+
object.actionBefore
|
80
|
+
ret = object.send("onAction#{name}", *args)
|
81
|
+
object.actionAfter
|
82
|
+
else
|
83
|
+
ret = nil
|
84
|
+
end
|
85
|
+
|
86
|
+
ret
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# Copyright 2008 Burghard Oliver
|
2
|
+
#
|
3
|
+
# This file is part of KeepYourHead.
|
4
|
+
#
|
5
|
+
# KeepYourHead is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# KeepYourHead is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with KeepYourHead. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
|
19
|
+
module KeepYourHead
|
20
|
+
class DialogEditFlashcardLatex
|
21
|
+
RESPONSE_EDIT, RESPONSE_PREVIEW = *(101..102).to_a
|
22
|
+
|
23
|
+
Widgets = [ "notebook_output", "textview_output", "image_preview", "hscalePage", "hscaleBox",
|
24
|
+
"viewport_edit",
|
25
|
+
]
|
26
|
+
|
27
|
+
# ImageWidth = (Gdk::Screen.default.width * 0.6).to_i
|
28
|
+
def initialize( flashcard, type )
|
29
|
+
@compilation = nil
|
30
|
+
|
31
|
+
@glade = GladeXML.new(Resources::system("glade/DialogEditLatex.glade")) { |handler| method(handler) }
|
32
|
+
|
33
|
+
@window = @glade.get_widget("dialog_edit_latex")
|
34
|
+
|
35
|
+
@flashcard, @type = flashcard, type
|
36
|
+
|
37
|
+
Widgets.each { |name|
|
38
|
+
widget = @glade.get_widget(name)
|
39
|
+
assert widget
|
40
|
+
eval("@#{name} = widget")
|
41
|
+
}
|
42
|
+
|
43
|
+
@flashcardViewController = FlashcardViewController.new @image_preview, @hscalePage, @hscaleBox
|
44
|
+
|
45
|
+
@window.title = "editieren"
|
46
|
+
|
47
|
+
# @notebook_output.width_request = (ImageWidth * 1.1).to_i
|
48
|
+
|
49
|
+
language = Gtk::SourceLanguagesManager.new.get_language("text/x-tex")
|
50
|
+
|
51
|
+
@edit_buffer = Gtk::SourceBuffer.new language
|
52
|
+
@edit_buffer.set_property( "check-brackets", true )
|
53
|
+
@edit_buffer.set_property( "highlight", true )
|
54
|
+
# @edit_buffer.set_property( "max-undo-levels", 20 )
|
55
|
+
@textview_latex = Gtk::SourceView.new @edit_buffer
|
56
|
+
@textview_latex.set_property( "auto-indent", true)
|
57
|
+
@textview_latex.set_property( "insert-spaces-instead-of-tabs", false)
|
58
|
+
# @textview_latex.set_property( "margin", 10)
|
59
|
+
@textview_latex.set_property( "show-line-markers", true)
|
60
|
+
@textview_latex.set_property( "show-line-numbers", true)
|
61
|
+
@textview_latex.set_property( "show-margin", true)
|
62
|
+
@textview_latex.set_property( "smart-home-end", true)
|
63
|
+
@textview_latex.set_property( "tabs-width", 4)
|
64
|
+
|
65
|
+
@viewport_edit.add @textview_latex
|
66
|
+
@textview_latex.show
|
67
|
+
|
68
|
+
@button_preview = @window.add_button "Vorschau", RESPONSE_PREVIEW
|
69
|
+
@button_edit = @window.add_button "editieren", RESPONSE_EDIT
|
70
|
+
@window.add_button Gtk::Stock::APPLY, Gtk::Dialog::RESPONSE_APPLY
|
71
|
+
@window.add_button Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL
|
72
|
+
end
|
73
|
+
|
74
|
+
def text
|
75
|
+
@edit_buffer.text
|
76
|
+
end
|
77
|
+
|
78
|
+
def text=(t)
|
79
|
+
@edit_buffer.text = t
|
80
|
+
end
|
81
|
+
|
82
|
+
def makePreview
|
83
|
+
style = @flashcard.file.style("latex")
|
84
|
+
|
85
|
+
@compilation.remove if @compilation
|
86
|
+
|
87
|
+
@compilation = @flashcard.compileImage(@type, :previewCode => @textview_latex.buffer.text )
|
88
|
+
|
89
|
+
@flashcardViewController.filenames = Images.fromCompilation @type, @compilation
|
90
|
+
if @compilation.success and @compilation.filenames.length > 0 then
|
91
|
+
@notebook_output.page = 2
|
92
|
+
else
|
93
|
+
@notebook_output.page = 1
|
94
|
+
end
|
95
|
+
|
96
|
+
@textview_output.buffer.text = @compilation.output
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
def run
|
101
|
+
@window.show
|
102
|
+
|
103
|
+
ret = nil
|
104
|
+
|
105
|
+
while ret == nil do
|
106
|
+
response = @window.run
|
107
|
+
|
108
|
+
case response
|
109
|
+
when Gtk::Dialog::RESPONSE_APPLY
|
110
|
+
ret = true
|
111
|
+
when Gtk::Dialog::RESPONSE_CANCEL
|
112
|
+
ret = false
|
113
|
+
when RESPONSE_PREVIEW
|
114
|
+
makePreview
|
115
|
+
when RESPONSE_EDIT
|
116
|
+
@notebook_output.page = 0
|
117
|
+
else
|
118
|
+
# puts response
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
@compilation.remove if @compilation
|
123
|
+
|
124
|
+
ret
|
125
|
+
end
|
126
|
+
|
127
|
+
def destroy
|
128
|
+
@window.destroy
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# Copyright 2008 Burghard Oliver
|
2
|
+
#
|
3
|
+
# This file is part of KeepYourHead.
|
4
|
+
#
|
5
|
+
# KeepYourHead is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# KeepYourHead is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with KeepYourHead. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
|
19
|
+
module KeepYourHead
|
20
|
+
class DialogEditText
|
21
|
+
attr_accessor :changeProc
|
22
|
+
|
23
|
+
Widgets = ["viewport_edit", "labelName" ]
|
24
|
+
|
25
|
+
def initialize( name )
|
26
|
+
@glade = GladeXML.new(Resources::system("glade/DialogEditText.glade")) { |handler| method(handler) }
|
27
|
+
|
28
|
+
@window = @glade.get_widget("dialog_edit_text")
|
29
|
+
|
30
|
+
Widgets.each { |name|
|
31
|
+
widget = @glade.get_widget(name)
|
32
|
+
assert widget
|
33
|
+
eval("@#{name} = widget")
|
34
|
+
}
|
35
|
+
|
36
|
+
self.name = name
|
37
|
+
|
38
|
+
@window.title = "editieren"
|
39
|
+
|
40
|
+
language = Gtk::SourceLanguagesManager.new.get_language("text/x-tex")
|
41
|
+
|
42
|
+
@edit_buffer = Gtk::SourceBuffer.new language
|
43
|
+
@edit_buffer.set_property( "check-brackets", true )
|
44
|
+
@edit_buffer.set_property( "highlight", true )
|
45
|
+
# @edit_buffer.set_property( "max-undo-levels", 20 )
|
46
|
+
@textview_latex = Gtk::SourceView.new @edit_buffer
|
47
|
+
@textview_latex.set_property( "auto-indent", true)
|
48
|
+
@textview_latex.set_property( "insert-spaces-instead-of-tabs", false)
|
49
|
+
# @textview_latex.set_property( "margin", 10)
|
50
|
+
@textview_latex.set_property( "show-line-markers", true)
|
51
|
+
@textview_latex.set_property( "show-line-numbers", true)
|
52
|
+
@textview_latex.set_property( "show-margin", true)
|
53
|
+
@textview_latex.set_property( "smart-home-end", true)
|
54
|
+
@textview_latex.set_property( "tabs-width", 4)
|
55
|
+
|
56
|
+
@viewport_edit.add @textview_latex
|
57
|
+
@textview_latex.show
|
58
|
+
|
59
|
+
@window.add_button Gtk::Stock::APPLY, Gtk::Dialog::RESPONSE_APPLY
|
60
|
+
@window.add_button Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL
|
61
|
+
end
|
62
|
+
|
63
|
+
def name
|
64
|
+
@labelName.text
|
65
|
+
end
|
66
|
+
def name=(o)
|
67
|
+
@labelName.text=o
|
68
|
+
end
|
69
|
+
|
70
|
+
def text
|
71
|
+
@edit_buffer.text
|
72
|
+
end
|
73
|
+
|
74
|
+
def text=(t)
|
75
|
+
@edit_buffer.text = t
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
def run
|
80
|
+
@window.show
|
81
|
+
|
82
|
+
ret = nil
|
83
|
+
|
84
|
+
while ret == nil do
|
85
|
+
response = @window.run
|
86
|
+
|
87
|
+
case response
|
88
|
+
when Gtk::Dialog::RESPONSE_APPLY
|
89
|
+
ret = true
|
90
|
+
when Gtk::Dialog::RESPONSE_CANCEL
|
91
|
+
ret = false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
ret
|
96
|
+
end
|
97
|
+
|
98
|
+
def destroy
|
99
|
+
@window.destroy
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Copyright 2008 Burghard Oliver
|
2
|
+
#
|
3
|
+
# This file is part of KeepYourHead.
|
4
|
+
#
|
5
|
+
# KeepYourHead is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# KeepYourHead is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with KeepYourHead. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
|
19
|
+
module KeepYourHead
|
20
|
+
class DialogQuestionStart
|
21
|
+
Widgets = ["spinbutton_max_questions", "spinbutton_max_minutes"]
|
22
|
+
|
23
|
+
attr_reader :widget
|
24
|
+
|
25
|
+
def initialize( )
|
26
|
+
@glade = GladeXML.new(Resources::system("glade/DialogTrainStart.glade")) { |handler| method(handler) }
|
27
|
+
|
28
|
+
Widgets.each { |name|
|
29
|
+
widget = @glade.get_widget(name)
|
30
|
+
assert widget
|
31
|
+
eval("@#{name} = widget")
|
32
|
+
}
|
33
|
+
|
34
|
+
@widget = @glade.get_widget("dialog_train_start")
|
35
|
+
end
|
36
|
+
|
37
|
+
def run
|
38
|
+
@widget.show
|
39
|
+
response = @widget.run
|
40
|
+
|
41
|
+
case response
|
42
|
+
when Gtk::Dialog::RESPONSE_OK
|
43
|
+
return true
|
44
|
+
else
|
45
|
+
end
|
46
|
+
|
47
|
+
false
|
48
|
+
end
|
49
|
+
|
50
|
+
def destroy
|
51
|
+
@widget.destroy
|
52
|
+
end
|
53
|
+
|
54
|
+
def max_questions
|
55
|
+
@spinbutton_max_questions.value.to_i
|
56
|
+
end
|
57
|
+
def max_minutes
|
58
|
+
@spinbutton_max_minutes.value.to_i
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# Copyright 2008 Burghard Oliver
|
2
|
+
#
|
3
|
+
# This file is part of KeepYourHead.
|
4
|
+
#
|
5
|
+
# KeepYourHead is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# KeepYourHead is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with KeepYourHead. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
|
19
|
+
module KeepYourHead
|
20
|
+
class FlashcardViewController
|
21
|
+
attr_reader :filenames, :filename, :page
|
22
|
+
attr_reader :pixbuf
|
23
|
+
|
24
|
+
def initialize( gtkImage, gtkScale, gtkScaleContainer )
|
25
|
+
@gtkImage, @gtkScale, @gtkScaleContainer = gtkImage, gtkScale, gtkScaleContainer
|
26
|
+
|
27
|
+
@width = nil
|
28
|
+
|
29
|
+
@gtkScale.signal_connect( "value_changed" ) {
|
30
|
+
onPageChange
|
31
|
+
}
|
32
|
+
|
33
|
+
@gtkImage.signal_connect( "size-allocate") { |widget, event|
|
34
|
+
width_ = @gtkImage.allocation.width
|
35
|
+
self.width = (width_ * 0.98 - 5).to_i
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def onPageChange
|
40
|
+
page = @gtkScale.value
|
41
|
+
self.filename = self.filenames[page]
|
42
|
+
end
|
43
|
+
|
44
|
+
def filenames=(filenames)
|
45
|
+
@filenames = filenames
|
46
|
+
if self.filenames.length > 0 then
|
47
|
+
if self.filenames.length > 1 then
|
48
|
+
@gtkScale.sensitive = true
|
49
|
+
@gtkScaleContainer.show
|
50
|
+
else
|
51
|
+
@gtkScale.sensitive = false
|
52
|
+
@gtkScaleContainer.hide
|
53
|
+
end
|
54
|
+
|
55
|
+
@gtkScale.adjustment = Gtk::Adjustment.new( 0, 0, self.filenames.length - 0.001, 1, 1, 0 )
|
56
|
+
@gtkImage.show
|
57
|
+
|
58
|
+
self.filename = self.filenames[0]
|
59
|
+
else
|
60
|
+
@gtkImage.hide
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
protected
|
65
|
+
|
66
|
+
def filename=(other)
|
67
|
+
return if other == self.filename
|
68
|
+
|
69
|
+
# print "loading #{filename}|before #{other}"
|
70
|
+
|
71
|
+
@filename = other
|
72
|
+
self.pixbuf = Gdk::Pixbuf.new self.filename
|
73
|
+
end
|
74
|
+
|
75
|
+
attr_reader :width
|
76
|
+
def width=(value)
|
77
|
+
# print "imageWidth #{value}"
|
78
|
+
return if self.width == value
|
79
|
+
|
80
|
+
@width = [value,1].max
|
81
|
+
@pixbufScaled = nil
|
82
|
+
|
83
|
+
@gtkImage.set self.pixbufScaled if self.pixbufScaled
|
84
|
+
end
|
85
|
+
|
86
|
+
def height
|
87
|
+
if self.pixbuf then
|
88
|
+
[(1.0 * self.pixbuf.height / self.pixbuf.width * self.width).to_i,1].max
|
89
|
+
else
|
90
|
+
1
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def pixbuf=(other)
|
95
|
+
@pixbuf = other
|
96
|
+
@pixbufScaled = nil
|
97
|
+
|
98
|
+
@gtkImage.set self.pixbufScaled if self.pixbufScaled
|
99
|
+
end
|
100
|
+
|
101
|
+
def pixbufScaled
|
102
|
+
if not @pixbufScaled and self.pixbuf and self.width then
|
103
|
+
# print "scale"
|
104
|
+
|
105
|
+
@pixbufScaled = self.pixbuf.scale(self.width, self.height)
|
106
|
+
end
|
107
|
+
|
108
|
+
@pixbufScaled
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|