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
@@ -0,0 +1,305 @@
|
|
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 MyButton < Gtk::Button
|
6
|
+
include Conf
|
7
|
+
include ManqodCommon
|
8
|
+
include GtkAttributes
|
9
|
+
def initialize(properties,caller,holder=nil)
|
10
|
+
@caller=caller
|
11
|
+
@properties=properties
|
12
|
+
@holder=holder
|
13
|
+
@show_icon=if gtk_attribute('show-mode') then gtk_attribute('show-mode') == 'icon only' || gtk_attribute('show-mode') == 'icon and text' || false else true end
|
14
|
+
@show_text=if gtk_attribute('show-mode') then gtk_attribute('show-mode') == 'text only' || gtk_attribute('show-mode') == 'icon and text' || false else true end
|
15
|
+
@column_of_sensitivity=if gtk_attribute('column-of-sensitivity') then @caller.list.list_model.headers[gtk_attribute('column-of-sensitivity')]["model_col"] else nil end
|
16
|
+
super()
|
17
|
+
set_use_underline(true)
|
18
|
+
set_relief(Gtk::ReliefStyle::NONE)
|
19
|
+
|
20
|
+
|
21
|
+
# signal_connect('enter-notify-event'){|me,event|me.set_state(Gtk::STATE_SELECTED)}
|
22
|
+
# signal_connect('leave-notify-event'){|me,event|me.set_state(Gtk::STATE_NORMAL)}
|
23
|
+
|
24
|
+
case @properties['btfunct']
|
25
|
+
when 'add'
|
26
|
+
@properties['display']='add' if @properties['display'].empty?
|
27
|
+
set_label(@properties['display']) if show_text?
|
28
|
+
set_image(Gtk::Image.new(Gtk::Stock::ADD,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
29
|
+
signal_connect('clicked') do |c|
|
30
|
+
if @properties['target_moditemid'].to_i >0
|
31
|
+
case @properties['moditem_render_mode']
|
32
|
+
when 'embedded' then @caller.list.changed if @caller.notebook
|
33
|
+
when 'newwindow'
|
34
|
+
begin
|
35
|
+
form=Myform::MyFormHolder.new("dialog",self,"add",target).set_parentM(@caller.list)
|
36
|
+
ret=form.run(@caller.list.get_cursor_id)
|
37
|
+
ensure
|
38
|
+
form.destroy
|
39
|
+
end
|
40
|
+
end
|
41
|
+
else #builtin
|
42
|
+
edebug("builtin add row on #{@caller.list}","list-button","info")
|
43
|
+
@caller.list.add_row(nil)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
when 'modify'
|
47
|
+
@properties['display']='modify' if @properties['display'].empty?
|
48
|
+
set_label(@properties['display']) if show_text?
|
49
|
+
set_image(Gtk::Image.new(Gtk::Stock::EDIT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
50
|
+
signal_connect('clicked') { |c|
|
51
|
+
if @properties['target_moditemid'].to_i >0
|
52
|
+
case @properties['moditem_render_mode']
|
53
|
+
when 'embedded' then @caller.list.changed if @caller.notebook
|
54
|
+
when 'newwindow'
|
55
|
+
begin
|
56
|
+
form=Myform::MyFormHolder.new("dialog",self,"modify",target).set_parentM(@caller.list)
|
57
|
+
ret=form.run(@caller.list.get_cursor_id, @caller.list.selected_ids)
|
58
|
+
ensure
|
59
|
+
form.destroy
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end #if
|
63
|
+
}
|
64
|
+
when 'wysiwygf'
|
65
|
+
@properties['display']='wysiwyg' if @properties['display'].empty?
|
66
|
+
set_label(@properties['display']) if show_text?
|
67
|
+
set_image(Gtk::Image.new(Gtk::Stock::PROPERTIES,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
68
|
+
signal_connect('clicked'){|c|
|
69
|
+
if @caller.list.get_cursor_id
|
70
|
+
form=Myform::MyFormHolder.new("dialog",self,"wysiwygf",target).set_parentM(@caller.list)
|
71
|
+
ret=form.run(@caller.list.get_cursor_id)
|
72
|
+
end
|
73
|
+
}
|
74
|
+
when 'info'
|
75
|
+
properties['display']='info' if properties['display'].empty?
|
76
|
+
set_label(properties['display']) if show_text?
|
77
|
+
set_image(Gtk::Image.new(Gtk::Stock::INFO,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
78
|
+
signal_connect('clicked') do |c|
|
79
|
+
if properties['target_moditemid'].to_i >0
|
80
|
+
case properties['moditem_render_mode']
|
81
|
+
when 'embedded'
|
82
|
+
caller.list.changed if caller.notebook
|
83
|
+
|
84
|
+
when 'newwindow'
|
85
|
+
if @caller.list.get_cursor_id
|
86
|
+
form=Myform::MyFormHolder.new("dialog",self,"info",target).set_parentM(@caller.list)
|
87
|
+
ret=form.run(@caller.list.get_cursor_id)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end #if
|
91
|
+
end
|
92
|
+
when 'copy'
|
93
|
+
@properties['display']='copy' if @properties['display'].empty?
|
94
|
+
set_label(@properties['display']) if show_text?
|
95
|
+
set_image(Gtk::Image.new(Gtk::Stock::COPY,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
96
|
+
signal_connect('clicked'){|c|
|
97
|
+
if @properties['target_moditemid'].to_i >0
|
98
|
+
case @properties['moditem_render_mode']
|
99
|
+
when 'embedded'
|
100
|
+
@caller.list.changed if @caller.notebook
|
101
|
+
|
102
|
+
when 'newwindow'
|
103
|
+
if @caller.list.get_cursor_id
|
104
|
+
form=Myform::MyFormHolder.new("dialog",self,"copy",target).set_parentM(@caller.list)
|
105
|
+
ret=form.run(@caller.list.get_cursor_id)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
else #builtin
|
109
|
+
warner=Gtk::MessageDialog.new(get_ancestor(Gtk::Window),Gtk::Dialog::DESTROY_WITH_PARENT,Gtk::MessageDialog::QUESTION,Gtk::MessageDialog::BUTTONS_YES_NO,"#{@properties['display']}?")
|
110
|
+
warner.set_image(Gtk::Image.new(Gtk::Stock::COPY,Gtk::IconSize::DIALOG))
|
111
|
+
if warner.show_all.run == Gtk::Dialog::RESPONSE_YES
|
112
|
+
@caller.list.duplicate_selected(self)
|
113
|
+
end
|
114
|
+
warner.destroy
|
115
|
+
end
|
116
|
+
}
|
117
|
+
when 'remove'
|
118
|
+
@properties['display']='remove' if @properties['display'].empty?
|
119
|
+
set_label(@properties['display']) if show_text?
|
120
|
+
set_image(Gtk::Image.new(Gtk::Stock::REMOVE,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
121
|
+
signal_connect('clicked'){|me|
|
122
|
+
ids=Array.new
|
123
|
+
@caller.list.selection.selected_each { |model, path, iter| ids.push(iter[@caller.list.list_model.column_of_id])}
|
124
|
+
ids.each{|id_to_lock| @caller.list.list_model.lock_iter(id_to_lock)}
|
125
|
+
warner=Gtk::MessageDialog.new(get_ancestor(Gtk::Window),Gtk::Dialog::DESTROY_WITH_PARENT,Gtk::MessageDialog::QUESTION,Gtk::MessageDialog::BUTTONS_YES_NO,"#{@properties['display']} #{ids.size}?")
|
126
|
+
warner.set_image(Gtk::Image.new(Gtk::Stock::REMOVE,Gtk::IconSize::DIALOG))
|
127
|
+
begin
|
128
|
+
if warner.show_all.run == Gtk::Dialog::RESPONSE_YES
|
129
|
+
if @properties['target_moditemid'].to_i >0
|
130
|
+
ids.each{|id_to_rm|
|
131
|
+
@caller.list.set_cursor_id(id_to_rm)
|
132
|
+
if @caller.list.get_cursor_id
|
133
|
+
form=Myform::MyFormHolder.new("dialog",self,"remove",target).set_parentM(@caller.list)
|
134
|
+
ret=form.run(@caller.list.get_cursor_id)
|
135
|
+
@caller.list.remove_selected(self) if ret>=0
|
136
|
+
end
|
137
|
+
}
|
138
|
+
else
|
139
|
+
@caller.list.remove_selected(self,ids)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
ensure
|
143
|
+
ids.each{|id_to_unlock| @caller.list.list_model.unlock_iter(id_to_unlock)}
|
144
|
+
ids=nil
|
145
|
+
warner.close
|
146
|
+
end
|
147
|
+
}
|
148
|
+
when 'print'
|
149
|
+
@properties['display']='print' if @properties['display'].empty?
|
150
|
+
set_label(@properties['display']) if show_text?
|
151
|
+
set_image(Gtk::Image.new(Gtk::Stock::PRINT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
152
|
+
signal_connect('clicked') do |c|
|
153
|
+
if @properties['target_moditemid'].to_i >0
|
154
|
+
ids=Array.new
|
155
|
+
@caller.list.selection.selected_each { |model, path, iter| ids.push(iter[@caller.list.list_model.column_of_id])}
|
156
|
+
if printop=MyPrintOperation.new(@caller.list,@properties['target_moditemid'].to_i,ids.join(","))
|
157
|
+
printop.run(Gtk::PrintOperation::Action::PRINT_DIALOG)
|
158
|
+
end
|
159
|
+
ids=nil
|
160
|
+
else
|
161
|
+
#builtin list print
|
162
|
+
@caller.list.gtkprint
|
163
|
+
end
|
164
|
+
end
|
165
|
+
when 'pwysiwyg'
|
166
|
+
@properties['display']='wysiwyg print editor' if @properties['display'].empty?
|
167
|
+
set_label(@properties['display']) if show_text?
|
168
|
+
set_image(Gtk::Image.new(Gtk::Stock::PRINT_PREVIEW,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
169
|
+
signal_connect('clicked'){ |c|
|
170
|
+
WysiwygPrintEditor.new(self,@caller.list.get_cursor_id).run if @caller.list.get_cursor_id
|
171
|
+
}
|
172
|
+
when 'export'
|
173
|
+
properties['display']='export' if properties['display'].empty?
|
174
|
+
set_label(properties['display']) if show_text?
|
175
|
+
set_image(Gtk::Image.new(Gtk::Stock::CONVERT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
176
|
+
signal_connect('clicked'){|c|
|
177
|
+
filechooser=Gtk::FileChooserDialog.new("Export to file",
|
178
|
+
@caller.get_ancestor(Gtk::Window),
|
179
|
+
Gtk::FileChooser::ACTION_SAVE,
|
180
|
+
nil,
|
181
|
+
[Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],
|
182
|
+
[Gtk::Stock::CONVERT, Gtk::Dialog::RESPONSE_ACCEPT])
|
183
|
+
filechooser.set_filename(get_conf(@caller.list.list_id,0,"csvfilename")) unless get_conf(@caller.list.list_id,0,"csvfilename").nil?
|
184
|
+
filechooser.add_filter(csv=Gtk::FileFilter.new.add_pattern("*.csv").set_name('csv'))
|
185
|
+
filechooser.set_filter(csv)
|
186
|
+
|
187
|
+
# filechooser.set_current_folder(get_conf(@caller.list.list_id,0,"csvfolder"))
|
188
|
+
if filechooser.run == Gtk::Dialog::RESPONSE_ACCEPT
|
189
|
+
# set_conf(@caller.list.list_id,0,"csvfolder",filechooser.current_folder)
|
190
|
+
set_conf(@caller.list.list_id,0,"csvfilename",filechooser.filename)
|
191
|
+
@caller.list.list_model.to_csv(filechooser.filename)
|
192
|
+
end
|
193
|
+
filechooser.destroy
|
194
|
+
}
|
195
|
+
|
196
|
+
when 'import'
|
197
|
+
properties['display']='import' if properties['display'].empty?
|
198
|
+
set_label(properties['display']) if show_text?
|
199
|
+
set_image(Gtk::Image.new(Gtk::Stock::CONVERT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))) if show_icon?
|
200
|
+
signal_connect('clicked'){|c|
|
201
|
+
filechooser=Gtk::FileChooserDialog.new("Import from file",
|
202
|
+
@caller.get_ancestor(Gtk::Window),
|
203
|
+
Gtk::FileChooser::ACTION_OPEN,
|
204
|
+
nil,
|
205
|
+
[Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],
|
206
|
+
[Gtk::Stock::CONVERT, Gtk::Dialog::RESPONSE_ACCEPT])
|
207
|
+
filechooser.set_filename(get_conf(@caller.list.list_id,0,"csvfilename")) unless get_conf(@caller.list.list_id,0,"csvfilename").nil?
|
208
|
+
filechooser.add_filter(csv=Gtk::FileFilter.new.add_pattern("*.csv").set_name('csv'))
|
209
|
+
filechooser.set_filter(csv)
|
210
|
+
|
211
|
+
if filechooser.run == Gtk::Dialog::RESPONSE_ACCEPT
|
212
|
+
set_conf(@caller.list.list_id,0,"csvfilename",filechooser.filename)
|
213
|
+
@caller.list.list_model.from_csv(filechooser.filename)
|
214
|
+
end
|
215
|
+
filechooser.destroy
|
216
|
+
}
|
217
|
+
|
218
|
+
else
|
219
|
+
p "Unknown Button: "+@properties['btfunct']
|
220
|
+
end
|
221
|
+
modify_label_widget_font if show_text?
|
222
|
+
#use the list's tips to set tooltip for this button
|
223
|
+
@caller.list.tip.set_tip(self,@properties['display'],nil)
|
224
|
+
end
|
225
|
+
attr_accessor :properties
|
226
|
+
attr_accessor :caller
|
227
|
+
|
228
|
+
def modify_label_widget_font
|
229
|
+
label_widget.modify_font(Pango::FontDescription.new(get_conf(0,0,"list-button-font"))) unless label_widget.nil?
|
230
|
+
end
|
231
|
+
|
232
|
+
def image_widget
|
233
|
+
w=nil
|
234
|
+
child.child.each{|ch|
|
235
|
+
w=ch if ch.class.name == "Gtk::Image"
|
236
|
+
}
|
237
|
+
w
|
238
|
+
end
|
239
|
+
def label_widget
|
240
|
+
w=nil
|
241
|
+
if show_icon?
|
242
|
+
child.child.each{|ch| w=ch if ch.class.name == "Gtk::Label" }
|
243
|
+
else
|
244
|
+
each{|ch| w=ch if ch.class.name == "Gtk::Label"}
|
245
|
+
end
|
246
|
+
w
|
247
|
+
end
|
248
|
+
|
249
|
+
def target
|
250
|
+
case function
|
251
|
+
when "wysiwygf" then parentselected
|
252
|
+
else @properties['target_moditemid']
|
253
|
+
end
|
254
|
+
end
|
255
|
+
def function
|
256
|
+
@properties['btfunct']
|
257
|
+
end
|
258
|
+
|
259
|
+
def parentselected
|
260
|
+
@caller.list.get_cursor_id
|
261
|
+
end
|
262
|
+
|
263
|
+
def parentM
|
264
|
+
@caller.parentM
|
265
|
+
end
|
266
|
+
|
267
|
+
def show_text?
|
268
|
+
@show_text
|
269
|
+
end
|
270
|
+
def show_icon?
|
271
|
+
@show_icon
|
272
|
+
end
|
273
|
+
def group
|
274
|
+
gtk_attribute("group")
|
275
|
+
end
|
276
|
+
def group_widget
|
277
|
+
@holder.groups[group] if group
|
278
|
+
end
|
279
|
+
|
280
|
+
def update(notifier)
|
281
|
+
case @properties['btfunct']
|
282
|
+
when 'add','import' then set_sensitive((notifier.parentM ? notifier.parentM.get_cursor_id> -1 : true) && (@column_of_sensitivity && notifier.list_model.iter_at_cursor ? notifier.list_model.iter_at_cursor[@column_of_sensitivity]=='true' : true ))
|
283
|
+
when 'print' then set_sensitive(if @properties['target_moditemid'].to_i >0 then notifier.get_cursor_id else true end)
|
284
|
+
else set_sensitive(!notifier.get_cursor_id.nil? && notifier.list_model.iter_at_cursor && notifier.list_model.iter_at_cursor[notifier.list_model.column_of_sensitive] && selection_sensitive?)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
def selection_sensitive?
|
289
|
+
if @column_of_sensitivity then
|
290
|
+
r=@caller.list.list_model.iter_at_cursor[@column_of_sensitivity]=='true'
|
291
|
+
@caller.list.selection.selected_each { |model, path, iter|
|
292
|
+
r=false if iter[@column_of_sensitivity]=='false' }
|
293
|
+
r
|
294
|
+
else
|
295
|
+
true
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
def inspect
|
300
|
+
"MyListButton #{@properties['display']} of #{@caller.list}"
|
301
|
+
end
|
302
|
+
def to_s
|
303
|
+
inspect
|
304
|
+
end
|
305
|
+
end
|
@@ -0,0 +1,26 @@
|
|
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 OrderingButton < Gtk::Button
|
6
|
+
include Conf
|
7
|
+
def initialize(list_holder,orientation)
|
8
|
+
@list_holder=list_holder
|
9
|
+
@orientation=orientation
|
10
|
+
super()
|
11
|
+
set_relief(Gtk::ReliefStyle::NONE)
|
12
|
+
set_image(Gtk::Image.new(@orientation,Gtk::IconSize.from_name(get_conf(0,0,"button-size"))))
|
13
|
+
signal_connect('clicked'){|me|
|
14
|
+
@list_holder.list.list_model.move_up_id(@list_holder.list.get_cursor_id) if @orientation == Gtk::Stock::GO_UP
|
15
|
+
@list_holder.list.list_model.move_down_id(@list_holder.list.get_cursor_id) if @orientation == Gtk::Stock::GO_DOWN
|
16
|
+
}
|
17
|
+
end
|
18
|
+
def update
|
19
|
+
set_no_show_all(@list_holder.list.gtk_attribute("ordering").nil?)
|
20
|
+
set_visible(!@list_holder.list.gtk_attribute("ordering").nil?)
|
21
|
+
end
|
22
|
+
def to_s
|
23
|
+
"OrderingButton of #{@list_holder}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -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
|
+
public
|
6
|
+
class SumPanelButton < Gtk::ToggleButton
|
7
|
+
include Conf
|
8
|
+
def initialize(list_holder)
|
9
|
+
@list_holder=list_holder
|
10
|
+
super()
|
11
|
+
set_relief(Gtk::ReliefStyle::NONE)
|
12
|
+
set_image(Gtk::Image.new(Gtk::Stock::ZOOM_IN,Gtk::IconSize.from_name(get_conf(0,0,"button-size"))))
|
13
|
+
signal_connect('toggled'){|me|
|
14
|
+
me.list_holder.list_panel.set_visibility
|
15
|
+
set_conf(list_holder.list.get_id,0,"sum-panel",me.active?.to_s)
|
16
|
+
}
|
17
|
+
end
|
18
|
+
attr_accessor :list_holder
|
19
|
+
|
20
|
+
def update
|
21
|
+
set_active(get_conf(list_holder.list.list_id,0,"sum-panel")=="true")
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,94 @@
|
|
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 ListButtonHolder
|
6
|
+
include ManqodCommon
|
7
|
+
|
8
|
+
def initialize(list_holder,orientation)
|
9
|
+
@list_holder=list_holder
|
10
|
+
@list_id=nil
|
11
|
+
@default=nil
|
12
|
+
@groups=Hash.new
|
13
|
+
set_orientation(orientation)
|
14
|
+
# list_buttons.set_layout_style(Gtk::ButtonBox::SPREAD)
|
15
|
+
list_holder.list.add_observer(self)
|
16
|
+
end
|
17
|
+
attr_reader :holder, :list_buttons, :advanced_buttons, :list_holder, :advanced_filter, :sum_button, :archive_button, :groups
|
18
|
+
|
19
|
+
def update(notifier,reload=false)
|
20
|
+
if notifier.list_id == @list_id && !reload
|
21
|
+
list_buttons.each{|button| button.update(notifier)}
|
22
|
+
else
|
23
|
+
@list_id=notifier.list_id
|
24
|
+
load_buttons
|
25
|
+
end
|
26
|
+
self
|
27
|
+
end
|
28
|
+
def set_orientation(new_orientation)
|
29
|
+
unless new_orientation == @orientation
|
30
|
+
@orientation = new_orientation
|
31
|
+
@holder.remove(advanced_buttons).remove(list_buttons) unless @holder.nil?
|
32
|
+
@holder.destroy unless @holder.nil? or @holder.destroyed?
|
33
|
+
if advanced_buttons.nil? or advanced_buttons.destroyed?
|
34
|
+
@advanced_buttons=Gtk::HBox.new.set_homogeneous(false)
|
35
|
+
advanced_buttons.pack_start(@advanced_filter=AdvancedFilterButton.new(@list_holder))
|
36
|
+
advanced_buttons.pack_start(@sum_button=SumPanelButton.new(@list_holder))
|
37
|
+
advanced_buttons.pack_start(@archive_button=ArchiveButton.new(@list_holder))
|
38
|
+
advanced_buttons.pack_start(@up_button=OrderingButton.new(@list_holder,Gtk::Stock::GO_UP))
|
39
|
+
advanced_buttons.pack_start(@down_button=OrderingButton.new(@list_holder,Gtk::Stock::GO_DOWN))
|
40
|
+
end
|
41
|
+
case @orientation
|
42
|
+
when Gtk::ORIENTATION_VERTICAL
|
43
|
+
@holder=Gtk::VBox.new
|
44
|
+
@list_buttons=Gtk::VBox.new#.set_homogeneous(false).set_layout_style(Gtk::ButtonBox::START)
|
45
|
+
holder.pack_start(list_buttons,false,false,0)
|
46
|
+
holder.pack_start(list_holder.info,true,true)
|
47
|
+
holder.pack_start(advanced_buttons,false,false,0)
|
48
|
+
else
|
49
|
+
# when Gtk::ORIENTATION_HORIZONTAL
|
50
|
+
@holder=Gtk::HBox.new
|
51
|
+
@list_buttons=Gtk::HBox.new#.set_homogeneous(false).set_layout_style(Gtk::ButtonBox::END)
|
52
|
+
holder.pack_start(advanced_buttons,false,false,0)
|
53
|
+
holder.pack_start(list_holder.info,true,true)
|
54
|
+
holder.pack_end(list_buttons,false,false,0)
|
55
|
+
end
|
56
|
+
load_buttons
|
57
|
+
@holder.signal_connect('destroy'){|me|
|
58
|
+
@holder.remove(list_holder.info) unless list_holder.info.destroyed?
|
59
|
+
}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def load_buttons
|
64
|
+
@default=nil
|
65
|
+
@groups.clear
|
66
|
+
list_buttons.each{|button| button.destroy unless button.destroyed?}
|
67
|
+
# admin_rows("select * from buttons where moditemid='#{list_holder.list.get_id}' and (grp_id in (-1,0) or (select count(id) from usergroups where userid='#{nick_id}' and groupid=grp_id)>0) order by oid"){|row|
|
68
|
+
return if list_holder.list.list_model.drbmodel.nil?
|
69
|
+
@archive_button.update
|
70
|
+
@up_button.update
|
71
|
+
@down_button.update
|
72
|
+
list_holder.list.list_model.drbmodel.buttons(nick_id).each{|row|
|
73
|
+
button=MyButton.new(row.rehash,list_holder,self)
|
74
|
+
if button.group && !@groups.has_key?(button.group)
|
75
|
+
@groups[button.group]=ButtonGroup.new(self,button.group)
|
76
|
+
list_buttons.pack_start(@groups[button.group])
|
77
|
+
end
|
78
|
+
if button.group
|
79
|
+
button.group_widget.pack_start(button)
|
80
|
+
else
|
81
|
+
list_buttons.pack_start(button)
|
82
|
+
end
|
83
|
+
button.update(list_holder.list)
|
84
|
+
@default=button if @default.nil? and button.function != 'add'
|
85
|
+
}
|
86
|
+
holder.show_all
|
87
|
+
end
|
88
|
+
|
89
|
+
def activate_default
|
90
|
+
@default.clicked if @default && !@list_holder.list.list_model.locked?(@list_holder.list.get_cursor_id) && @default.sensitive?
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
@@ -0,0 +1,94 @@
|
|
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 MyFRendererCombo < Gtk::ComboBox
|
6
|
+
include ManqodCommon
|
7
|
+
include Conf
|
8
|
+
def initialize(caller,header)
|
9
|
+
@header=header
|
10
|
+
@caller=caller
|
11
|
+
@defval=get_conf(caller.list.get_id,header["id"],"filter") || "-1"
|
12
|
+
@mycombomodel=Gtk::ListStore.new(String,String)
|
13
|
+
@filter=Gtk::TreeModelFilter.new(@mycombomodel)
|
14
|
+
@typed=""
|
15
|
+
super()
|
16
|
+
set_model(@filter)
|
17
|
+
update()
|
18
|
+
set_row_separator_func{|model, iter|
|
19
|
+
iter[1]=='separator' or iter[0]=='---'
|
20
|
+
}
|
21
|
+
@filter.set_visible_func{|model, iter|
|
22
|
+
if iter[0] and @typed
|
23
|
+
ret=iter[0].upcase.index(@typed.upcase)
|
24
|
+
# print iter[0],":",iter[0][0 .. @typed.length]," == ",@typed," = ",ret,"\n"
|
25
|
+
ret
|
26
|
+
end
|
27
|
+
}
|
28
|
+
# update
|
29
|
+
signal_connect('changed'){|me|
|
30
|
+
set_conf(caller.list.get_id,header['id'],"filter",self.active_iter[1])
|
31
|
+
@caller.list.refilter
|
32
|
+
}
|
33
|
+
signal_connect('key-press-event'){|me,key|
|
34
|
+
case key.keyval
|
35
|
+
when ?a .. ?z,?A .. ?Z, ?0 .. ?9 then @typed=@typed+key.keyval.chr
|
36
|
+
when 65288 then @typed="" if @typed.length==1
|
37
|
+
@typed=@typed[0 .. @typed.length-2] if @typed.length>0
|
38
|
+
end
|
39
|
+
# print "current filter: ",@typed,",",@typed.length,"\n"
|
40
|
+
@filter.refilter
|
41
|
+
}
|
42
|
+
end
|
43
|
+
def update(new_value=@defval)
|
44
|
+
set_model(nil)
|
45
|
+
@defval=new_value
|
46
|
+
@mycombomodel.clear
|
47
|
+
if @header['wantnew']
|
48
|
+
append_row("-1","")
|
49
|
+
append_row("---","---")
|
50
|
+
end
|
51
|
+
if @header['admin']
|
52
|
+
admin_rows(@header['querySQL'],@header['key'].include?(".")){|row| append_row(row[@header['key']],row[@header['display']])}
|
53
|
+
else
|
54
|
+
rows(@header['querySQL'],@header['key'].include?(".")){|row| append_row(row[@header['key']],row[@header['display']])}
|
55
|
+
end unless @header['querySQL'].length == 0
|
56
|
+
set_model(@mycombomodel)
|
57
|
+
select_value()
|
58
|
+
end
|
59
|
+
|
60
|
+
def append_row(cdata,cdisplay)
|
61
|
+
iter=@mycombomodel.append
|
62
|
+
iter[0]=cdisplay
|
63
|
+
iter[1]=cdata
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_value_from_text(selected_combo_text)
|
67
|
+
selected_combo_value=nil
|
68
|
+
@mycombomodel.each {|model, path, iter|
|
69
|
+
if iter[1]==selected_combo_text
|
70
|
+
selected_combo_value=iter[0]
|
71
|
+
end
|
72
|
+
}
|
73
|
+
return selected_combo_value
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_text_from_value(selected_combo_value)
|
77
|
+
selected_combo_text=nil
|
78
|
+
@mycombomodel.each {|model, path, iter|
|
79
|
+
if iter[0]==selected_combo_value
|
80
|
+
selected_combo_text=iter[1]
|
81
|
+
end
|
82
|
+
}
|
83
|
+
return selected_combo_text
|
84
|
+
end
|
85
|
+
|
86
|
+
def text
|
87
|
+
return self.active_iter[1]
|
88
|
+
end
|
89
|
+
|
90
|
+
def select_value(selected_value=@defval)
|
91
|
+
@defval=selected_value
|
92
|
+
@mycombomodel.each {|model, path, iter| self.set_active(path.indices[0]) if iter[1]==@defval }
|
93
|
+
end
|
94
|
+
end #MyFRendererCombo
|
@@ -0,0 +1,11 @@
|
|
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 MyFRendererConstCombo < MyFRendererCombo
|
6
|
+
def initialize(caller,header,defval)
|
7
|
+
item['admin']=true
|
8
|
+
item['querySQL']="select cdata,cdisplay from scv where combo='"+header['data']+"' order by cdisplay"
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,26 @@
|
|
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 MyFRendererText < Gtk::Entry
|
6
|
+
include Conf
|
7
|
+
def initialize(caller,header)
|
8
|
+
@to_filter=0
|
9
|
+
super()
|
10
|
+
set_has_frame(true)
|
11
|
+
set_editable(true)
|
12
|
+
set_text(get_conf(caller.list.get_id,header["id"],"filter") || "")
|
13
|
+
self.signal_connect("changed",caller,header){|me,caller,header|
|
14
|
+
set_conf(caller.list.get_id,header["id"],"filter",me.text)
|
15
|
+
@to_filter=@to_filter+1
|
16
|
+
Gtk.timeout_add(1000){
|
17
|
+
@to_filter=@to_filter-1
|
18
|
+
caller.list.refilter if @to_filter==0
|
19
|
+
false
|
20
|
+
}
|
21
|
+
}
|
22
|
+
end
|
23
|
+
def update(newtext="")
|
24
|
+
set_text(newtext)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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 MyFRendererToggle < Gtk::Alignment
|
6
|
+
include ManqodCommon
|
7
|
+
include Conf
|
8
|
+
def initialize(caller,header)
|
9
|
+
@caller=caller
|
10
|
+
@header=header
|
11
|
+
@filter=get_conf(caller.list.get_id,header["id"],"filter") || ""
|
12
|
+
@renderer=Gtk::CheckButton.new
|
13
|
+
super(@header['align'].to_f,0.5,0,0)
|
14
|
+
add(@renderer)
|
15
|
+
case @filter
|
16
|
+
when "=true" then @renderer.set_active(true).set_inconsistent(false);
|
17
|
+
when "=false" then @renderer.set_active(false).set_inconsistent(false);
|
18
|
+
else @renderer.set_active(false).set_inconsistent(true);
|
19
|
+
end
|
20
|
+
@renderer.signal_connect("released"){|me|
|
21
|
+
if @filter=="" then @filter="=true" else
|
22
|
+
if @filter=="=true" then @filter="=false" else
|
23
|
+
@filter=""
|
24
|
+
end
|
25
|
+
end
|
26
|
+
case @filter
|
27
|
+
when "=true" then @renderer.set_active(true).set_inconsistent(false);
|
28
|
+
when "=false" then @renderer.set_active(false).set_inconsistent(false);
|
29
|
+
else @renderer.set_active(false).set_inconsistent(true);
|
30
|
+
end
|
31
|
+
edebug("active: #{@renderer.active?},inconsistent: #{@renderer.inconsistent?}|#{@filter}|","filter-toggle")
|
32
|
+
set_conf(caller.list.get_id,header['id'],"filter",@filter)
|
33
|
+
@caller.list.refilter
|
34
|
+
}
|
35
|
+
end
|
36
|
+
def update(newvalue=@filter)
|
37
|
+
einfo("updated"+newvalue.to_s,"filter-toggle")
|
38
|
+
@filter=newvalue
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,58 @@
|
|
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 MyFRenderer < Gtk::EventBox
|
6
|
+
include Conf
|
7
|
+
|
8
|
+
def initialize(list,column)
|
9
|
+
@column=column
|
10
|
+
@header=column.header
|
11
|
+
@list=list
|
12
|
+
@defval=defval
|
13
|
+
super()
|
14
|
+
case @header['type']
|
15
|
+
when 'gtk_text' then @renderer=MyFRendererText.new(self,@header)
|
16
|
+
when 'gtk_toggle' then @renderer=MyFRendererToggle.new(self,@header)
|
17
|
+
when 'gtk_const_combo' then
|
18
|
+
@header['admin']=true
|
19
|
+
@header['querySQL']="select * from scv where combo='"+@header['data']+"' order by cdisplay"
|
20
|
+
@header['wantnew']=true
|
21
|
+
@renderer=MyFRendererCombo.new(self,@header)
|
22
|
+
when 'gtk_combo' then
|
23
|
+
@header['wantnew']=true
|
24
|
+
@renderer=MyFRendererCombo.new(self,@header)
|
25
|
+
else
|
26
|
+
@renderer=MyFRendererText.new(self,@header)
|
27
|
+
end
|
28
|
+
|
29
|
+
add(renderer)
|
30
|
+
@last_width=width_request
|
31
|
+
end
|
32
|
+
attr_accessor :header
|
33
|
+
attr_accessor :list
|
34
|
+
attr_accessor :defval
|
35
|
+
attr_accessor :renderer
|
36
|
+
attr_accessor :header
|
37
|
+
|
38
|
+
def update(newtext="")
|
39
|
+
renderer.update(newtext) if renderer
|
40
|
+
end
|
41
|
+
def set_width_request(new_width)
|
42
|
+
if width_request != new_width and @last_width != new_width
|
43
|
+
@last_width=width_request
|
44
|
+
renderer.set_width_request(new_width)
|
45
|
+
end
|
46
|
+
self
|
47
|
+
end
|
48
|
+
def width_request
|
49
|
+
renderer.width_request
|
50
|
+
end
|
51
|
+
def get_list_id
|
52
|
+
list.get_id
|
53
|
+
end
|
54
|
+
def set_height_request(h)
|
55
|
+
renderer.set_height_request(h)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|