manqod 1.1505.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/manqod +309 -0
- data/doc/HOWTOS +11 -0
- data/doc/INSTALL +6 -0
- data/doc/LICENCE +450 -0
- data/doc/README +33 -0
- data/doc/benchmarkings/ListLoader.rb +177 -0
- data/doc/manqod.png +0 -0
- data/doc/manqod.svg +99 -0
- data/doc/server.conf.example +24 -0
- data/lib/About.rb +93 -0
- data/lib/BarMenu/BarMenuItem.rb +46 -0
- data/lib/BarMenu.rb +76 -0
- data/lib/ButtonMenu/ButtonMenuItem.rb +82 -0
- data/lib/ButtonMenu/EndSeparator.rb +14 -0
- data/lib/ButtonMenu/StartSeparator.rb +14 -0
- data/lib/ButtonMenu.rb +154 -0
- data/lib/Common/Conf.rb +119 -0
- data/lib/Common/Eprint.rb +180 -0
- data/lib/Common/EventCache.rb +41 -0
- data/lib/Common/Fixnum.rb +18 -0
- data/lib/Common/Images.rb +41 -0
- data/lib/Common/ManqodDB.rb +40 -0
- data/lib/Common/MyExec.rb +77 -0
- data/lib/Common/MyImage.rb +47 -0
- data/lib/Common/Nick.rb +25 -0
- data/lib/Common/String.rb +15 -0
- data/lib/FormHolder/Form/InputHolder/Button.rb +133 -0
- data/lib/FormHolder/Form/InputHolder/Calendar.rb +101 -0
- data/lib/FormHolder/Form/InputHolder/CalendarButton.rb +117 -0
- data/lib/FormHolder/Form/InputHolder/ColorButton.rb +54 -0
- data/lib/FormHolder/Form/InputHolder/Combo.rb +82 -0
- data/lib/FormHolder/Form/InputHolder/ComboWithNew.rb +103 -0
- data/lib/FormHolder/Form/InputHolder/Common/Model.rb +337 -0
- data/lib/FormHolder/Form/InputHolder/ConstCombo.rb +18 -0
- data/lib/FormHolder/Form/InputHolder/ConstText.rb +17 -0
- data/lib/FormHolder/Form/InputHolder/Duration.rb +73 -0
- data/lib/FormHolder/Form/InputHolder/EditableList.rb +57 -0
- data/lib/FormHolder/Form/InputHolder/FieldCombo.rb +40 -0
- data/lib/FormHolder/Form/InputHolder/FieldList.rb +40 -0
- data/lib/FormHolder/Form/InputHolder/FileChooser.rb +131 -0
- data/lib/FormHolder/Form/InputHolder/FontButton.rb +37 -0
- data/lib/FormHolder/Form/InputHolder/FormImage.rb +74 -0
- data/lib/FormHolder/Form/InputHolder/HScale.rb +44 -0
- data/lib/FormHolder/Form/InputHolder/Hidden.rb +41 -0
- data/lib/FormHolder/Form/InputHolder/Label.rb +40 -0
- data/lib/FormHolder/Form/InputHolder/List.rb +176 -0
- data/lib/FormHolder/Form/InputHolder/MultiLine.rb +63 -0
- data/lib/FormHolder/Form/InputHolder/Password.rb +41 -0
- data/lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb +269 -0
- data/lib/FormHolder/Form/InputHolder/QBuilder.rb +333 -0
- data/lib/FormHolder/Form/InputHolder/RadioGroup.rb +82 -0
- data/lib/FormHolder/Form/InputHolder/SourceView.rb +100 -0
- data/lib/FormHolder/Form/InputHolder/Spin.rb +49 -0
- data/lib/FormHolder/Form/InputHolder/Text.rb +55 -0
- data/lib/FormHolder/Form/InputHolder/TimeStamp.rb +82 -0
- data/lib/FormHolder/Form/InputHolder/TimeStampButton.rb +93 -0
- data/lib/FormHolder/Form/InputHolder/Toggle.rb +43 -0
- data/lib/FormHolder/Form/InputHolder.rb +458 -0
- data/lib/FormHolder/Form.rb +529 -0
- data/lib/FormHolder.rb +203 -0
- data/lib/Gtk.rb +101 -0
- data/lib/GtkAttributes.rb +76 -0
- data/lib/Kernel.rb +48 -0
- data/lib/ListHolder/EditableList/CellRenderers/Combo.rb +91 -0
- data/lib/ListHolder/EditableList/CellRenderers/ComboText.rb +22 -0
- data/lib/ListHolder/EditableList/CellRenderers/ConstCombo.rb +12 -0
- data/lib/ListHolder/EditableList/CellRenderers/ConstText.rb +23 -0
- data/lib/ListHolder/EditableList/CellRenderers/Pixbuf.rb +18 -0
- data/lib/ListHolder/EditableList/CellRenderers/Progress.rb +36 -0
- data/lib/ListHolder/EditableList/CellRenderers/Text.rb +51 -0
- data/lib/ListHolder/EditableList/CellRenderers/Toggle.rb +35 -0
- data/lib/ListHolder/EditableList/Column.rb +223 -0
- data/lib/ListHolder/EditableList/DrbListModel.rb +809 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb +56 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/CustomPageSetup.rb +100 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/FooterLayout.rb +26 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/HeaderLayout.rb +35 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb +89 -0
- data/lib/ListHolder/EditableList/ListPrintOperation.rb +365 -0
- data/lib/ListHolder/EditableList.rb +309 -0
- data/lib/ListHolder/GanttHolder/Gantt/Rectangle.rb +290 -0
- data/lib/ListHolder/GanttHolder/Gantt.rb +317 -0
- data/lib/ListHolder/GanttHolder/GanttFooter.rb +27 -0
- data/lib/ListHolder/GanttHolder/GanttScaler.rb +60 -0
- data/lib/ListHolder/GanttHolder.rb +31 -0
- data/lib/ListHolder/HistoryWindow.rb +63 -0
- data/lib/ListHolder/ListButtonHolder/ArchiveButton.rb +37 -0
- data/lib/ListHolder/ListButtonHolder/ButtonGroup.rb +32 -0
- data/lib/ListHolder/ListButtonHolder/FilterButton.rb +28 -0
- data/lib/ListHolder/ListButtonHolder/ListButton.rb +305 -0
- data/lib/ListHolder/ListButtonHolder/OrderingButton.rb +26 -0
- data/lib/ListHolder/ListButtonHolder/SumPanelButton.rb +23 -0
- data/lib/ListHolder/ListButtonHolder.rb +94 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Combo.rb +94 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/ConstCombo.rb +11 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Text.rb +26 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Toggle.rb +41 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer.rb +58 -0
- data/lib/ListHolder/ListPanel/ListFilter.rb +42 -0
- data/lib/ListHolder/ListPanel/ListSum/Text.rb +32 -0
- data/lib/ListHolder/ListPanel/ListSum.rb +72 -0
- data/lib/ListHolder/ListPanel.rb +60 -0
- data/lib/ListHolder.rb +241 -0
- data/lib/LoginWindow.rb +77 -0
- data/lib/MainRouter.rb +64 -0
- data/lib/ManqodCommon.rb +295 -0
- data/lib/ManqodHelp/FormatEditor/FormatJustificationWidget.rb +76 -0
- data/lib/ManqodHelp/FormatsEditor.rb +139 -0
- data/lib/ManqodHelp/HelpBrowser/FormatTagTable/FormatTag.rb +84 -0
- data/lib/ManqodHelp/HelpBrowser/FormatTagTable.rb +39 -0
- data/lib/ManqodHelp/HelpBrowser.rb +135 -0
- data/lib/ManqodHelp/HelpIndex.rb +62 -0
- data/lib/ManqodHelp/HelpToolbar.rb +16 -0
- data/lib/ManqodHelp.rb +120 -0
- data/lib/ManqodRPC.rb +37 -0
- data/lib/Memcache.rb +82 -0
- data/lib/MyConfig.rb +93 -0
- data/lib/Print/PrintItem/TextLayout.rb +47 -0
- data/lib/Print/PrintItem.rb +240 -0
- data/lib/Print.rb +199 -0
- data/lib/PrintEditor/ItemInfo/ItemImage.rb +30 -0
- data/lib/PrintEditor/ItemInfo/ItemList.rb +44 -0
- data/lib/PrintEditor/ItemInfo/ItemTextAlignment.rb +27 -0
- data/lib/PrintEditor/ItemInfo.rb +129 -0
- data/lib/PrintEditor/PageLayout.rb +91 -0
- data/lib/PrintEditor/PrintEditorItem.rb +310 -0
- data/lib/PrintEditor.rb +195 -0
- data/lib/RelationBuilder/RTable/RField.rb +91 -0
- data/lib/RelationBuilder/RTable.rb +293 -0
- data/lib/RelationBuilder/Relation/RelationHandle.rb +70 -0
- data/lib/RelationBuilder/Relation.rb +161 -0
- data/lib/RelationBuilder/RunQuery.rb +55 -0
- data/lib/RelationBuilder/SearchWindow.rb +72 -0
- data/lib/RelationBuilder.rb +468 -0
- data/lib/SB/ListProgress.rb +150 -0
- data/lib/SB/Messaging.rb +77 -0
- data/lib/SB.rb +29 -0
- data/lib/mynotebook.rb +131 -0
- data/lib/mytouchwindow.rb +162 -0
- data/lib/mywindow.rb +134 -0
- data/lib/wysiwyg-print-label.rb +57 -0
- 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
|
+
|