manqod 1.1505.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. data/bin/manqod +309 -0
  2. data/doc/HOWTOS +11 -0
  3. data/doc/INSTALL +6 -0
  4. data/doc/LICENCE +450 -0
  5. data/doc/README +33 -0
  6. data/doc/benchmarkings/ListLoader.rb +177 -0
  7. data/doc/manqod.png +0 -0
  8. data/doc/manqod.svg +99 -0
  9. data/doc/server.conf.example +24 -0
  10. data/lib/About.rb +93 -0
  11. data/lib/BarMenu/BarMenuItem.rb +46 -0
  12. data/lib/BarMenu.rb +76 -0
  13. data/lib/ButtonMenu/ButtonMenuItem.rb +82 -0
  14. data/lib/ButtonMenu/EndSeparator.rb +14 -0
  15. data/lib/ButtonMenu/StartSeparator.rb +14 -0
  16. data/lib/ButtonMenu.rb +154 -0
  17. data/lib/Common/Conf.rb +119 -0
  18. data/lib/Common/Eprint.rb +180 -0
  19. data/lib/Common/EventCache.rb +41 -0
  20. data/lib/Common/Fixnum.rb +18 -0
  21. data/lib/Common/Images.rb +41 -0
  22. data/lib/Common/ManqodDB.rb +40 -0
  23. data/lib/Common/MyExec.rb +77 -0
  24. data/lib/Common/MyImage.rb +47 -0
  25. data/lib/Common/Nick.rb +25 -0
  26. data/lib/Common/String.rb +15 -0
  27. data/lib/FormHolder/Form/InputHolder/Button.rb +133 -0
  28. data/lib/FormHolder/Form/InputHolder/Calendar.rb +101 -0
  29. data/lib/FormHolder/Form/InputHolder/CalendarButton.rb +117 -0
  30. data/lib/FormHolder/Form/InputHolder/ColorButton.rb +54 -0
  31. data/lib/FormHolder/Form/InputHolder/Combo.rb +82 -0
  32. data/lib/FormHolder/Form/InputHolder/ComboWithNew.rb +103 -0
  33. data/lib/FormHolder/Form/InputHolder/Common/Model.rb +337 -0
  34. data/lib/FormHolder/Form/InputHolder/ConstCombo.rb +18 -0
  35. data/lib/FormHolder/Form/InputHolder/ConstText.rb +17 -0
  36. data/lib/FormHolder/Form/InputHolder/Duration.rb +73 -0
  37. data/lib/FormHolder/Form/InputHolder/EditableList.rb +57 -0
  38. data/lib/FormHolder/Form/InputHolder/FieldCombo.rb +40 -0
  39. data/lib/FormHolder/Form/InputHolder/FieldList.rb +40 -0
  40. data/lib/FormHolder/Form/InputHolder/FileChooser.rb +131 -0
  41. data/lib/FormHolder/Form/InputHolder/FontButton.rb +37 -0
  42. data/lib/FormHolder/Form/InputHolder/FormImage.rb +74 -0
  43. data/lib/FormHolder/Form/InputHolder/HScale.rb +44 -0
  44. data/lib/FormHolder/Form/InputHolder/Hidden.rb +41 -0
  45. data/lib/FormHolder/Form/InputHolder/Label.rb +40 -0
  46. data/lib/FormHolder/Form/InputHolder/List.rb +176 -0
  47. data/lib/FormHolder/Form/InputHolder/MultiLine.rb +63 -0
  48. data/lib/FormHolder/Form/InputHolder/Password.rb +41 -0
  49. data/lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb +269 -0
  50. data/lib/FormHolder/Form/InputHolder/QBuilder.rb +333 -0
  51. data/lib/FormHolder/Form/InputHolder/RadioGroup.rb +82 -0
  52. data/lib/FormHolder/Form/InputHolder/SourceView.rb +100 -0
  53. data/lib/FormHolder/Form/InputHolder/Spin.rb +49 -0
  54. data/lib/FormHolder/Form/InputHolder/Text.rb +55 -0
  55. data/lib/FormHolder/Form/InputHolder/TimeStamp.rb +82 -0
  56. data/lib/FormHolder/Form/InputHolder/TimeStampButton.rb +93 -0
  57. data/lib/FormHolder/Form/InputHolder/Toggle.rb +43 -0
  58. data/lib/FormHolder/Form/InputHolder.rb +458 -0
  59. data/lib/FormHolder/Form.rb +529 -0
  60. data/lib/FormHolder.rb +203 -0
  61. data/lib/Gtk.rb +101 -0
  62. data/lib/GtkAttributes.rb +76 -0
  63. data/lib/Kernel.rb +48 -0
  64. data/lib/ListHolder/EditableList/CellRenderers/Combo.rb +91 -0
  65. data/lib/ListHolder/EditableList/CellRenderers/ComboText.rb +22 -0
  66. data/lib/ListHolder/EditableList/CellRenderers/ConstCombo.rb +12 -0
  67. data/lib/ListHolder/EditableList/CellRenderers/ConstText.rb +23 -0
  68. data/lib/ListHolder/EditableList/CellRenderers/Pixbuf.rb +18 -0
  69. data/lib/ListHolder/EditableList/CellRenderers/Progress.rb +36 -0
  70. data/lib/ListHolder/EditableList/CellRenderers/Text.rb +51 -0
  71. data/lib/ListHolder/EditableList/CellRenderers/Toggle.rb +35 -0
  72. data/lib/ListHolder/EditableList/Column.rb +223 -0
  73. data/lib/ListHolder/EditableList/DrbListModel.rb +809 -0
  74. data/lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb +56 -0
  75. data/lib/ListHolder/EditableList/ListPrintOperation/CustomPageSetup.rb +100 -0
  76. data/lib/ListHolder/EditableList/ListPrintOperation/FooterLayout.rb +26 -0
  77. data/lib/ListHolder/EditableList/ListPrintOperation/HeaderLayout.rb +35 -0
  78. data/lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb +89 -0
  79. data/lib/ListHolder/EditableList/ListPrintOperation.rb +365 -0
  80. data/lib/ListHolder/EditableList.rb +309 -0
  81. data/lib/ListHolder/GanttHolder/Gantt/Rectangle.rb +290 -0
  82. data/lib/ListHolder/GanttHolder/Gantt.rb +317 -0
  83. data/lib/ListHolder/GanttHolder/GanttFooter.rb +27 -0
  84. data/lib/ListHolder/GanttHolder/GanttScaler.rb +60 -0
  85. data/lib/ListHolder/GanttHolder.rb +31 -0
  86. data/lib/ListHolder/HistoryWindow.rb +63 -0
  87. data/lib/ListHolder/ListButtonHolder/ArchiveButton.rb +37 -0
  88. data/lib/ListHolder/ListButtonHolder/ButtonGroup.rb +32 -0
  89. data/lib/ListHolder/ListButtonHolder/FilterButton.rb +28 -0
  90. data/lib/ListHolder/ListButtonHolder/ListButton.rb +305 -0
  91. data/lib/ListHolder/ListButtonHolder/OrderingButton.rb +26 -0
  92. data/lib/ListHolder/ListButtonHolder/SumPanelButton.rb +23 -0
  93. data/lib/ListHolder/ListButtonHolder.rb +94 -0
  94. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Combo.rb +94 -0
  95. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/ConstCombo.rb +11 -0
  96. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Text.rb +26 -0
  97. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Toggle.rb +41 -0
  98. data/lib/ListHolder/ListPanel/ListFilter/FRenderer.rb +58 -0
  99. data/lib/ListHolder/ListPanel/ListFilter.rb +42 -0
  100. data/lib/ListHolder/ListPanel/ListSum/Text.rb +32 -0
  101. data/lib/ListHolder/ListPanel/ListSum.rb +72 -0
  102. data/lib/ListHolder/ListPanel.rb +60 -0
  103. data/lib/ListHolder.rb +241 -0
  104. data/lib/LoginWindow.rb +77 -0
  105. data/lib/MainRouter.rb +64 -0
  106. data/lib/ManqodCommon.rb +295 -0
  107. data/lib/ManqodHelp/FormatEditor/FormatJustificationWidget.rb +76 -0
  108. data/lib/ManqodHelp/FormatsEditor.rb +139 -0
  109. data/lib/ManqodHelp/HelpBrowser/FormatTagTable/FormatTag.rb +84 -0
  110. data/lib/ManqodHelp/HelpBrowser/FormatTagTable.rb +39 -0
  111. data/lib/ManqodHelp/HelpBrowser.rb +135 -0
  112. data/lib/ManqodHelp/HelpIndex.rb +62 -0
  113. data/lib/ManqodHelp/HelpToolbar.rb +16 -0
  114. data/lib/ManqodHelp.rb +120 -0
  115. data/lib/ManqodRPC.rb +37 -0
  116. data/lib/Memcache.rb +82 -0
  117. data/lib/MyConfig.rb +93 -0
  118. data/lib/Print/PrintItem/TextLayout.rb +47 -0
  119. data/lib/Print/PrintItem.rb +240 -0
  120. data/lib/Print.rb +199 -0
  121. data/lib/PrintEditor/ItemInfo/ItemImage.rb +30 -0
  122. data/lib/PrintEditor/ItemInfo/ItemList.rb +44 -0
  123. data/lib/PrintEditor/ItemInfo/ItemTextAlignment.rb +27 -0
  124. data/lib/PrintEditor/ItemInfo.rb +129 -0
  125. data/lib/PrintEditor/PageLayout.rb +91 -0
  126. data/lib/PrintEditor/PrintEditorItem.rb +310 -0
  127. data/lib/PrintEditor.rb +195 -0
  128. data/lib/RelationBuilder/RTable/RField.rb +91 -0
  129. data/lib/RelationBuilder/RTable.rb +293 -0
  130. data/lib/RelationBuilder/Relation/RelationHandle.rb +70 -0
  131. data/lib/RelationBuilder/Relation.rb +161 -0
  132. data/lib/RelationBuilder/RunQuery.rb +55 -0
  133. data/lib/RelationBuilder/SearchWindow.rb +72 -0
  134. data/lib/RelationBuilder.rb +468 -0
  135. data/lib/SB/ListProgress.rb +150 -0
  136. data/lib/SB/Messaging.rb +77 -0
  137. data/lib/SB.rb +29 -0
  138. data/lib/mynotebook.rb +131 -0
  139. data/lib/mytouchwindow.rb +162 -0
  140. data/lib/mywindow.rb +134 -0
  141. data/lib/wysiwyg-print-label.rb +57 -0
  142. metadata +231 -0
data/lib/FormHolder.rb ADDED
@@ -0,0 +1,203 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ module Myform
6
+ class MyFormHolder
7
+ include Observable
8
+ include Conf
9
+ include Myform
10
+ include ManqodCommon
11
+ class EmbeddedFormHolder < Gtk::VBox
12
+ def initialize(form_holder)
13
+ @form_holder=form_holder
14
+ super()
15
+ buttons=Gtk::HButtonBox.new
16
+ okButton=Gtk::Button.new()
17
+ okButton.set_relief(Gtk::ReliefStyle::NONE)
18
+ okButton.set_image(Gtk::Image.new(Gtk::Stock::APPLY,Gtk::IconSize::SMALL_TOOLBAR)).set_label('ok').signal_connect('clicked'){|c|
19
+ @form_holder.form.apply_changes(@form_holder)
20
+ }
21
+ buttons.pack_start(okButton)
22
+ buttons.set_layout_style(Gtk::ButtonBox::SPREAD)
23
+ pack_start(@form_holder.form,true,true)
24
+ pack_end(buttons,false,true) unless @form_holder.info? || @form_holder.runmode == "dry" || @form_holder.form.gtk_attribute("ok_button")=="false"
25
+ end
26
+ def form
27
+ @form_holder.form
28
+ end
29
+ def holder
30
+ @form_holder
31
+ end
32
+
33
+ def update(notifier,pid)
34
+ @form_holder.form.update(notifier,pid)
35
+ end
36
+ end
37
+
38
+ def initialize(mode="dialog",caller=self,runmode=nil,form_id=nil)
39
+ @form_id=form_id
40
+ @caller=caller
41
+ @runmode=runmode
42
+ @form=Myform::MyForm.new(self,form_id,runmode)
43
+ case mode
44
+ when "embedded"
45
+ @holder=EmbeddedFormHolder.new(self)
46
+
47
+ when "dialog"
48
+ #run in dialog window
49
+ # form.set_id(caller.target)
50
+ @holder=Gtk::Dialog.new().set_resizable(true)#.set_transient_for(@caller.get_ancestor(Gtk::Window))#.set_modal(true)
51
+ #press calcel or close if user closes the window
52
+ holder.signal_connect("delete-event"){|me,ev| if info? || wysiwyg? then @closeb.activate; else @cancel.activate; end }
53
+
54
+ #restoring the saved width,height/top,bottom positions
55
+ unless wysiwyg?
56
+ if w=get_conf(form.get_id,0,"width") and h=get_conf(form.get_id,0,"height") then holder.resize(w.to_i,h.to_i) end
57
+ if x=get_conf(form.get_id,0,"x") and y=get_conf(form.get_id,0,"y") then holder.move(x.to_i,y.to_i) end
58
+ #save form dimensions and position when user resizes
59
+ holder.signal_connect("configure-event"){|me,event|
60
+ set_conf(form.get_id,0,"width",event.width.to_s)
61
+ set_conf(form.get_id,0,"height",event.height.to_s)
62
+ set_conf(form.get_id,0,"x",event.x.to_s)
63
+ set_conf(form.get_id,0,"y",event.y.to_s)
64
+ false
65
+ }
66
+ end
67
+ form_accel_group= Gtk::AccelGroup.new
68
+ form_accel_group.connect(Gdk::Keyval::GDK_KEY_Return,Gdk::Window::CONTROL_MASK ,Gtk::ACCEL_VISIBLE){
69
+ if info? || wysiwyg? then @closeb.activate; else @ok.activate; end
70
+ }
71
+ form_accel_group.connect(Gdk::Keyval::GDK_KEY_Escape,nil ,Gtk::ACCEL_VISIBLE){
72
+ if info? || wysiwyg? then @closeb.activate; else @cancel.activate; end
73
+ }
74
+ holder.add_accel_group(form_accel_group)
75
+ @form.set_ag(form_accel_group)
76
+
77
+ #adding the Form Buttons
78
+ holder.vbox.pack_start(form,true,true,0)
79
+ if info? || wysiwyg?
80
+ @closeb=holder.add_button('',Gtk::Dialog::RESPONSE_CLOSE).set_image(Gtk::Image.new(Gtk::Stock::CLOSE,Gtk::IconSize::SMALL_TOOLBAR)).set_label('close').set_relief(Gtk::ReliefStyle::NONE)
81
+ else
82
+ @apply=holder.add_button('',Gtk::Dialog::RESPONSE_APPLY).set_image(Gtk::Image.new(Gtk::Stock::APPLY,Gtk::IconSize::SMALL_TOOLBAR)).set_label('apply').set_relief(Gtk::ReliefStyle::NONE) unless @form.gtk_attribute("apply_button")=="false"
83
+ @ok=holder.add_button('',Gtk::Dialog::RESPONSE_OK).set_image(Gtk::Image.new(Gtk::Stock::OK,Gtk::IconSize::SMALL_TOOLBAR)).set_label('ok').set_relief(Gtk::ReliefStyle::NONE) unless @form.gtk_attribute("ok_button")=="false"
84
+ @cancel=holder.add_button('',Gtk::Dialog::RESPONSE_CANCEL).set_image(Gtk::Image.new(Gtk::Stock::CANCEL,Gtk::IconSize::SMALL_TOOLBAR)).set_label('cancel').set_relief(Gtk::ReliefStyle::NONE)
85
+ end
86
+ holder.set_default_response(0)
87
+ #holder.realize;holder.window.set_functions(Gdk::Window::WMFunction::ALL | Gdk::Window::WMFunction::CLOSE)
88
+
89
+ when "touchscreen"
90
+ @holder=Gtk::VBox.new
91
+ @form.modify_bg(Gtk::STATE_NORMAL,Gdk::Color.new(65000, 0, 0))
92
+ @form.items.each{|item|
93
+ item.modify_bg(Gtk::STATE_NORMAL,Gdk::Color.new(0,65000, 0))
94
+ item.renderer.modify_bg(Gtk::STATE_NORMAL,Gdk::Color.new(0,35000, 0))
95
+ }
96
+ @holder.modify_bg(Gtk::STATE_NORMAL,Gdk::Color.new(0, 0, 65000))
97
+ @holder.pack_start(@form,true,true)
98
+ set_parentM(self)
99
+ else ewarn("not recognized form run mode: #{mode}","form")
100
+ end
101
+ end
102
+ attr_accessor :holder, :form, :caller, :runmode
103
+
104
+ def is_embedded
105
+ @form.is_embedded
106
+ end
107
+
108
+ def embedd?
109
+ @form.embedd?
110
+ end
111
+
112
+ def run(pid=@form.parentselected,batch=nil)
113
+ @form.parentselected=pid
114
+ @form.batch=@form.batch_support? && batch.class == Array && batch.size>1 ? batch : nil
115
+ batch=@form.batch_support? && batch.class == Array ? batch : [@form.parentselected]
116
+
117
+ ret=-1
118
+ if @holder
119
+ begin
120
+ manqod_db.lock_id_of_base(@form.table,batch) unless add? || wysiwyg?
121
+ @form.update(@caller)
122
+ ret=-1 #ha ret 0, akkor nem volt valtozas, ha -1, akkor hiba volt, ha >0, akkor az a parentid (addnal van hasznalva asszem, pozicionalasra)
123
+ while ret<0
124
+ case response=@holder.run
125
+ when Gtk::Dialog::RESPONSE_OK then #ok
126
+ ret=@form.apply_changes(self).to_i
127
+ einfo("apply_changes return: #{ret}","form")
128
+ @caller.caller.list.scroll_to_cursor(ret) if @caller.class.name == 'MyButton'
129
+ when Gtk::Dialog::RESPONSE_CANCEL, Gtk::Dialog::RESPONSE_CLOSE, Gtk::Dialog::RESPONSE_DELETE_EVENT then
130
+ ret=0
131
+ when Gtk::Dialog::RESPONSE_APPLY then #apply
132
+ ret=@form.apply_changes(self).to_i
133
+ manqod_db.unlock_id_of_base(@form.table,batch.push(ret)) unless pid == ret
134
+ einfo("apply_changes return: #{ret}","form")
135
+ @caller.caller.list.scroll_to_cursor(ret) if @caller.class.name == 'MyButton'
136
+ manqod_db.lock_id_of_base(@form.table,ret) unless wysiwyg?
137
+ update(@caller,ret,"modify") if ["add","copy"].include?(@form.runmode)
138
+ ret=-1
139
+ else eerror("unknown form return code: #{response}")
140
+ end
141
+ client.reload_moditem(@form_id) if wysiwyg? #if wysiwyg then reload it in server
142
+ end
143
+ @holder.destroy
144
+ rescue =>err
145
+ warn("Form error: #{err}",backtrace_to_debug(err),"form","error",false,true,err.to_s)
146
+ ensure
147
+ begin
148
+ manqod_db.unlock_id_of_base(@form.table,batch)
149
+ rescue => err
150
+ eerror("Form ensured unlock error: #{err}\n#{err.backtrace.join("\n")}","form")
151
+ end
152
+ end
153
+ end
154
+ ret
155
+ end
156
+ def wysiwyg?
157
+ runmode == "wysiwygf"
158
+ end
159
+ def add?
160
+ runmode == "add"
161
+ end
162
+ def info?
163
+ runmode == "info"
164
+ end
165
+ def parentM
166
+ @parent_moditem
167
+ end
168
+ def set_parentM(parent_moditem)
169
+ @parent_moditem=parent_moditem
170
+ self
171
+ end
172
+ def get_ancestor(classname)
173
+ @caller.get_ancestor(classname)
174
+ end
175
+ def to_s
176
+ "FormHolder of #{form}"
177
+ end
178
+ def update(notifier,pid=@form.parentselected,rm=@form.runmode)
179
+ if pid
180
+ manqod_db.lock_id_of_base(@form.table,pid) unless add? || wysiwyg?
181
+ @form.update(notifier,pid,rm)
182
+ end
183
+ end
184
+ def show_all
185
+ @holder.show_all
186
+ self.run if @runmode=="dialog"
187
+ end
188
+
189
+ def vshrink(d)
190
+ holder.allocation.set_height(holder.allocation.height-d.to_i)
191
+ end
192
+ def title
193
+ "no title"
194
+ end
195
+
196
+ def destroy
197
+ @form.destroy unless @form.nil? or @form.destroyed?
198
+ @holder.destroy unless @holder.nil? or @holder.destroyed?
199
+ end
200
+ end #class MyFormHolder
201
+
202
+ end #module end
203
+
data/lib/Gtk.rb ADDED
@@ -0,0 +1,101 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ module Gtk
6
+ # Thread-safety stuff.
7
+ # Loosely based on booh, by Guillaume Cottenceau.
8
+
9
+ PENDING_CALLS_MUTEX = Mutex.new
10
+ PENDING_CALLS = []
11
+
12
+ def self.new_thread(&proc)
13
+ Thread.new{
14
+ begin
15
+ Gtk.thread_protect(&proc)
16
+ rescue =>err
17
+ print "#{err}\n#{err.join("\n")}"
18
+ end
19
+ }
20
+ end
21
+
22
+ def self.thread_protect(&proc)
23
+ if Thread.current == Thread.main
24
+ proc.call
25
+ else
26
+ $gtk_pending_calls.synchronize {$gtk_pending_calls << proc}
27
+ end
28
+ end
29
+
30
+ def self.thread_flush
31
+ closure = nil
32
+ continue = true
33
+ begin
34
+ $gtk_pending_calls.synchronize {
35
+ closure = $gtk_pending_calls.shift
36
+ continue = $gtk_pending_calls.size > 0
37
+ }
38
+ if closure
39
+ closure.call
40
+ end
41
+ end while continue
42
+ end
43
+
44
+ def self.init_thread_protect
45
+ $gtk_pending_calls = []
46
+ $gtk_pending_calls.extend(MonitorMixin)
47
+ Gtk.timeout_add(100) {Gtk.thread_flush;true}
48
+ end
49
+
50
+ class PrintSettings
51
+ include Marshal
52
+ def serialize
53
+ dump(to_a)
54
+ end
55
+
56
+ def deserialize(serialized)
57
+ if serialized
58
+ begin
59
+ psettings=load(serialized)
60
+ rescue =>err
61
+ edebug("loading print settings: #{err}","printing","error")
62
+ end
63
+ if psettings
64
+ psettings.each{|v|
65
+ set(v[0].to_s,v[1])
66
+ }
67
+ end
68
+ end
69
+ self
70
+ end
71
+ end
72
+
73
+ def self.is_windows?
74
+ RUBY_PLATFORM.downcase.include?("mswin") || RUBY_PLATFORM.downcase.include?("mingw")
75
+ end
76
+
77
+ def self.is_linux?
78
+ RUBY_PLATFORM.downcase.include?("linux")
79
+ end
80
+
81
+ def self.show_thread_changes
82
+ Gtk.thread_protect{
83
+ while Gtk.events_pending? do
84
+ Gtk.main_iteration_do(false)
85
+ end
86
+ } unless Gtk.is_windows?
87
+ end
88
+ end
89
+
90
+ module Gdk
91
+ module Keyval
92
+ begin
93
+ GDK_KEY_F5
94
+ rescue NameError
95
+ constants.each{|key|
96
+ const_set("GDK_KEY_"+key[4..-1],eval(key))
97
+ }
98
+ end
99
+ end
100
+ end
101
+
@@ -0,0 +1,76 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class GtkAttributeStorage
6
+ include Singleton
7
+ include Eprint
8
+
9
+ def load_all
10
+ @gtk_attributes=ManqodDB.instance.cache.get("attributes")
11
+ @gtk_attributes=Hash.new unless @gtk_attributes.class.name == "Hash"
12
+ einfo("loaded #{@gtk_attributes.size} attributes","main")
13
+ end
14
+
15
+
16
+ def gtk_attribute(gtk_attr, gtk_objectid, gtk_objecttype)
17
+ (@gtk_attributes.has_key?(gtk_objectid) ?
18
+ ( (@gtk_attributes[gtk_objectid].has_key?(gtk_objecttype)) ?
19
+ @gtk_attributes[gtk_objectid][gtk_objecttype][gtk_attr] : nil) : nil )
20
+ end
21
+
22
+ def set_gtk_attribute(gtk_attr,gtk_attr_value, gtkobjectid, gtkobjecttype)
23
+ @gtk_attributes=Hash.new if @gtk_attributes.nil?
24
+ @gtk_attributes[gtkobjectid]=Hash.new unless @gtk_attributes.has_key?(gtkobjectid)
25
+ @gtk_attributes[gtkobjectid][gtkobjecttype]=Hash.new unless @gtk_attributes[gtkobjectid].has_key?(gtkobjecttype)
26
+ @gtk_attributes[gtkobjectid][gtkobjecttype][gtk_attr]=nil unless @gtk_attributes[gtkobjectid][gtkobjecttype].has_key?(gtk_attr)
27
+ @gtk_attributes[gtkobjectid][gtkobjecttype][gtk_attr]=gtk_attr_value
28
+ einfo("set attribute [#{gtkobjecttype}][#{gtkobjectid}][#{gtk_attr}]=\"#{gtk_attr_value}\"","main")
29
+ end
30
+
31
+ def to_s;"GtkAttributeStorage";end
32
+ end
33
+
34
+ module GtkAttributes
35
+
36
+ def gtk_attribute(gtk_attr)
37
+ GtkAttributeStorage.instance.gtk_attribute(gtk_attr, gtkobjectid, gtkobjecttype) || GtkAttributeStorage.instance.gtk_attribute(gtk_attr, "0", gtkobjecttype)
38
+ end
39
+
40
+ def gtk_attribute_of_object(gtk_attr,gtkobject_id,gtkobject_type)
41
+ GtkAttributeStorage.instance.gtk_attribute(gtk_attr, gtkobject_id, gtkobject_type)
42
+ end
43
+
44
+ def set_gtk_attribute(gtk_attr,gtk_attr_value)
45
+ GtkAttributeStorage.instance.set_gtk_attribute(gtk_attr,gtk_attr_value, gtkobjectid, gtkobjecttype)
46
+ end
47
+
48
+ def default_attribute(gtk_attr)
49
+ GtkAttributeStorage.instance.gtk_attribute(gtk_attr, "0", gtkobjecttype)
50
+ end
51
+
52
+ def gtkobjectid
53
+ case self.class.name
54
+ when "MyEditableList" then list_id.to_s
55
+ when "MyColumn" then header["id"].to_s
56
+ when "Myform::MyForm" then get_id.to_s
57
+ when "MyButton" then properties["id"].to_s
58
+ when "MyInputHolder","MyRendererList::List","MyRendererCombo","MyRendererConstCombo","FieldCombo" then item["id"].to_s
59
+ else
60
+ edebug("unsupported class in gtk_attributes: #{self.class.name} for #{self}","main","error")
61
+ end
62
+ end
63
+
64
+ def gtkobjecttype
65
+ case self.class.name
66
+ when "MyEditableList" then "list"
67
+ when "MyColumn" then "list_column"
68
+ when "Myform::MyForm" then "form"
69
+ when "MyButton" then "list-button"
70
+ when "MyInputHolder","MyRendererList::List","MyRendererCombo","MyRendererConstCombo","FieldCombo" then "form-item"
71
+ else edebug("unsupported class in gtk_attributes: #{self.class.name} for #{self}","main","error")
72
+ end
73
+ end
74
+
75
+ end
76
+
data/lib/Kernel.rb ADDED
@@ -0,0 +1,48 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ module Kernel
6
+ include Eprint
7
+ def erequire(filename,msg="Please update your manqod installation\nFollow install instructions on https://manqod.sourceforge.net",optional=false)
8
+ handled=false
9
+ begin
10
+ require(filename)
11
+ handled=true
12
+ rescue LoadError => err
13
+ # print "\t#{filename} module load error\n#{err}#{err.backtrace.join("\n")}\n---\n"
14
+ if optional
15
+ ewarn("Error Loading #{filename}\n#{msg}")
16
+ else
17
+ warn("Error Loading #{filename}","#{err}","eval","error",false,false,msg)
18
+ raise err
19
+ end
20
+ rescue SyntaxError => err
21
+ # print "#{filename} module syntax error\n#{err}\n"
22
+ warn("\tSyntax Error in #{filename}","#{err}#{err.backtrace.join("\n")}","eval","error",false,false,msg) unless optional
23
+ rescue => err
24
+ # print "\t#{filename} module cannot be loaded\n#{err}\n#{err.backtrace.join("\n")}"
25
+ warn("General error in #{filename}","#{err}#{err.backtrace.join("\n")}","eval","error",false,false,msg)
26
+ end
27
+ handled
28
+ end
29
+
30
+ def load(filename)
31
+ begin
32
+ handled=true
33
+ super filename
34
+ rescue LoadError => err
35
+ warn("#{filename} module cannot be loaded",backtrace_to_debug(err),"main","error")
36
+ # print "#{filename} module cannot be loaded\n #{err.backtrace.join("\n")}\n"
37
+ handled=false
38
+ rescue => err
39
+ warn("error occured in module #{filename}",backtrace_to_debug(err),"main","error")
40
+ # print "error occured in module #{filename}\n#{err.backtrace.join("\n")}"
41
+ handled=false
42
+ end
43
+ handled
44
+ end
45
+ end
46
+
47
+
48
+
@@ -0,0 +1,91 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererCombo < Gtk::CellRendererCombo
6
+ include ManqodCommon
7
+ def initialize(column)
8
+ @mycombomodel=Gtk::ListStore.new(String,String)
9
+ @jump_to_next=false
10
+ super()
11
+ set_model(@mycombomodel)
12
+ set_text_column(1)
13
+ set_has_entry(false)
14
+
15
+ set_mode(Gtk::CellRenderer::MODE_EDITABLE)
16
+
17
+ signal_connect("edited"){|me,path,new_text|
18
+ if selected_combo_value=get_value_from_text(new_text)
19
+ view.list_model.change_value_of_path(path,column.header['data'],selected_combo_value)
20
+ end
21
+ if @jump_to_next
22
+ if next_col=view.next_editable_column(column)
23
+ view.set_cursor(view.list_model.iter_at_cursor.path,next_col,true)# if next_col.header["type"]!="gtk_toggle"
24
+ end
25
+ @jump_to_next=false
26
+ end
27
+ true
28
+ }
29
+ signal_connect("editing-started"){|cell, editable_widget, path|
30
+ if !editable_widget.nil?
31
+ editable_widget.signal_connect("key-release-event"){|me,event|
32
+ @jump_to_next= Gdk::Keyval.to_name(event.keyval) == "Return"
33
+ false
34
+ }
35
+ end
36
+ }
37
+
38
+ end
39
+ attr_accessor :model_col_num
40
+ attr_accessor :view
41
+ attr_accessor :column
42
+
43
+ def set_column(column)
44
+ @column=column
45
+ @view=column.list
46
+ @model_col_num=column.colnum
47
+
48
+ if column.header['admin'] then
49
+ admin_rows(column.header['querySQL'],column.header['key'].include?(".")){|row| append_row(row[column.header['key']],row[column.header['display']])}
50
+ else
51
+ rows(column.header['querySQL'],column.header['key'].include?(".")){|row| append_row(row[column.header['key']],row[column.header['display']])}
52
+ end unless column.header['querySQL'].length == 0
53
+
54
+ set_editable(column.header['editable']=="true")
55
+ end
56
+
57
+ def get_value_from_text(selected_combo_text)
58
+ selected_combo_value=nil
59
+ @mycombomodel.each {|model, path, iter|
60
+ if iter[1]==selected_combo_text
61
+ selected_combo_value=iter[0]
62
+ end
63
+ }
64
+ return selected_combo_value
65
+ end
66
+
67
+ def get_text_from_value(selected_combo_value)
68
+ selected_combo_text=nil
69
+ @mycombomodel.each {|model, path, iter|
70
+ if iter[0]==selected_combo_value
71
+ selected_combo_text=iter[1]
72
+ end
73
+ }
74
+ @text=selected_combo_text
75
+ selected_combo_text
76
+ end
77
+
78
+ def append_row(cdata,cdisplay)
79
+ iter=@mycombomodel.append
80
+ iter[0]=cdata
81
+ iter[1]=cdisplay
82
+ end
83
+
84
+ def data
85
+ @header["data"]
86
+ end
87
+
88
+ def caller
89
+ view
90
+ end
91
+ end
@@ -0,0 +1,22 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererComboText < Gtk::CellRendererText
6
+ def initialize(column)
7
+ @myvalues=Hash.new
8
+ super
9
+ if q=query(querySQL) then
10
+ while row=q.fetch_hash()
11
+ @myvalues[row['cdata']]=row['cdisplay']
12
+ end
13
+ end
14
+ set_editable(false)
15
+ set_editable_set(false)
16
+ end
17
+
18
+ def get_display(key)
19
+ @myvalues[key]
20
+ end
21
+ end
22
+
@@ -0,0 +1,12 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererConstCombo < MyCellRendererCombo
6
+ def initialize(column)
7
+ column.header['admin']=true
8
+ column.header['querySQL']="select * from scv where combo='#{column.header['data']}' order by cdisplay"
9
+ super
10
+ end
11
+
12
+ end
@@ -0,0 +1,23 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererConstText < Gtk::CellRendererText
6
+ include ManqodCommon
7
+ def initialize(column)
8
+ @myvalues=Hash.new
9
+ admin_rows("select * from scv"){|row|
10
+ @myvalues[row['cdata']]=row['cdisplay']
11
+ }
12
+ super()
13
+ self.editable=false
14
+ self.editable_set=false
15
+ end
16
+
17
+ def get_display(key)
18
+ @myvalues[key]
19
+ end
20
+ def set_column(column)
21
+ #we do nothing
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererPixbuf < Gtk::CellRendererPixbuf
6
+ def initialize(column)
7
+ super()
8
+ end
9
+
10
+ def set_column(column)
11
+ #we do nothing
12
+ end
13
+
14
+ def set_font(font)
15
+ # we do nothing
16
+ end
17
+ end
18
+
@@ -0,0 +1,36 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererProgress < Gtk::CellRendererProgress
6
+ def initialize(column)
7
+ super()
8
+ # set_ellipsize(Pango::ELLIPSIZE_NONE) #?
9
+ # set_ellipsize_set(true) #?
10
+ # set_wrap_mode(Pango::WRAP_WORD) #?
11
+ end
12
+ attr_accessor :model_col_num
13
+ attr_accessor :view
14
+
15
+ def set_column(column)
16
+ @column=column
17
+ @view=column.list
18
+ @model_col_num=column.colnum
19
+ # set_mode(Gtk::CellRenderer::MODE_INERT)
20
+ # set_sensitive(false)
21
+ end
22
+
23
+ def data
24
+ column.header["data"]
25
+ end
26
+ def caller
27
+ view
28
+ end
29
+ def set_font(font)
30
+ #doing nothing here
31
+ end
32
+ def set_wrap_width(width)
33
+ #we don't wrap this :)
34
+ end
35
+ end
36
+
@@ -0,0 +1,51 @@
1
+ #this file is part of manqod
2
+ #manqod is distributed under the CDDL licence
3
+ #the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
4
+
5
+ class MyCellRendererText < Gtk::CellRendererText
6
+ def initialize(column)
7
+ @jump_to_next=false
8
+ super()
9
+ # set_ellipsize(Pango::ELLIPSIZE_NONE) #?
10
+ # set_ellipsize_set(true) #?
11
+ # set_wrap_mode(Pango::WRAP_WORD) #?
12
+ signal_connect("edited") { |me,path,new_value|
13
+ view.list_model.change_value_of_path(path,column.header['data'],new_value)
14
+ if @jump_to_next
15
+ if next_col=view.next_editable_column(column)
16
+ view.set_cursor(view.list_model.iter_at_cursor.path,next_col,true)# if next_col.header["type"]!="gtk_toggle"
17
+ end
18
+ @jump_to_next=false
19
+ end
20
+ true
21
+ }
22
+ signal_connect("editing-started"){|cell, editable_widget, path|
23
+ editable_widget.signal_connect("key-press-event"){|me,event|
24
+ @jump_to_next= Gdk::Keyval.to_name(event.keyval) == "Return"
25
+ false
26
+ }
27
+ }
28
+ end
29
+ attr_accessor :model_col_num
30
+ attr_accessor :view
31
+
32
+ def set_column(column)
33
+ @column=column
34
+ @view=column.list
35
+ @model_col_num=column.colnum
36
+ if column.header['editable']=="true"
37
+ set_editable_set(true)
38
+ set_editable(true)
39
+ end
40
+ # set_mode(Gtk::CellRenderer::MODE_INERT)
41
+ # set_sensitive(false)
42
+ end
43
+
44
+ def data
45
+ column.header["data"]
46
+ end
47
+ def caller
48
+ view
49
+ end
50
+ end
51
+