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
@@ -0,0 +1,135 @@
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 HelpBrowser < Gtk::ScrolledWindow
6
+
7
+ def initialize(help)
8
+ @help=help
9
+ super()
10
+ @item=nil
11
+ @link_cursor = Gdk::Cursor.new(Gdk::Cursor::HAND2)
12
+ @hover=false
13
+ @items=Hash.new
14
+ @text_view=Gtk::TextView.new(Gtk::TextBuffer.new(FormatTagTable.new(self))).set_editable(false)
15
+ add_with_viewport(@text_view)
16
+ @text_view.modify_font(Pango::FontDescription.new('Sans 12')).set_wrap_mode(Gtk::TextTag::WRAP_WORD)
17
+ set_size_request(500,200)
18
+ set_policy(Gtk::POLICY_NEVER,Gtk::POLICY_AUTOMATIC)
19
+
20
+ @text_view.signal_connect('motion-notify-event'){|me, ev|
21
+ x,y = me.window_to_buffer_coords(Gtk::TextView::WINDOW_WIDGET,ev.x,ev.y)
22
+ iter=me.get_iter_at_location(x,y)
23
+
24
+ onlink = false
25
+ iter.tags.each{|t| onlink=true if t.link}
26
+
27
+ if onlink != @hover
28
+ @hover=onlink
29
+ me.get_window(Gtk::TextView::WINDOW_TEXT).set_cursor(@hover ? @link_cursor : nil)
30
+ end
31
+ false
32
+ }
33
+ @text_view.signal_connect('visibility-notify-event'){|me,ev|
34
+ me.get_window(Gtk::TextView::WINDOW_TEXT).set_cursor(@hover ? @link_cursor : nil)
35
+ false
36
+ }
37
+ end
38
+ attr_reader :items, :help, :item
39
+
40
+ def buffer
41
+ @text_view.buffer
42
+ end
43
+ def load_item(item)
44
+ # p "loading item:#{item}"
45
+ @item=nil
46
+ if @items.has_key?(item)
47
+ empty
48
+ add_text(@items[item])
49
+ apply_links
50
+ @item=item
51
+ true
52
+ else
53
+ p "item not found:#{item}"
54
+ false
55
+ end
56
+ end
57
+ def load_index
58
+ p "creating index"
59
+ txt="[h1]Index[h1]\n\n"
60
+ @items.each_key{|key|
61
+ txt="#{txt}#{key}\n"
62
+ }
63
+ empty
64
+ add_text(txt)
65
+ apply_links
66
+ end
67
+ def apply_links
68
+ @items.each_key{|tag_name|
69
+ if tag=buffer.tag_table.lookup(tag_name)
70
+ txt=buffer.get_text
71
+ i=-1
72
+ while i=txt.indexU(tag_name,i+1)
73
+ buffer.apply_tag(tag,buffer.get_iter_at_offset(i),buffer.get_iter_at_offset(i+tag_name.lengthU))
74
+ end
75
+ end
76
+ }
77
+ end
78
+ def empty
79
+ buffer.remove_all_tags(buffer.bounds[0],buffer.bounds[1])
80
+ buffer.delete(buffer.bounds[0],buffer.bounds[1])
81
+ end
82
+
83
+ def add_item(item,description="")
84
+ unless @items.has_key?(item)
85
+ @items[item]=description
86
+ buffer.tag_table.add(item)
87
+ end
88
+ self
89
+ end
90
+
91
+ def clear_items
92
+ @items.clear
93
+ end
94
+
95
+ def remove_current_item
96
+ if @item
97
+ @items.delete(@item)
98
+ ManqodDB.instance.manqod_db.remove_help_item(@item)
99
+ empty
100
+ if tag=buffer.tag_table.lookup(@item)
101
+ buffer.tag_table.remove(tag)
102
+ end
103
+ @item=nil
104
+ @help.index.populate
105
+ end
106
+ end
107
+ def save_current_item
108
+ ManqodDB.instance.manqod_db.save_help_item(@item,@items[@item])
109
+ end
110
+ def update_current_item(descr)
111
+ if @item
112
+ @items[@item]=descr
113
+ empty
114
+ add_text(@items[@item])
115
+ apply_links
116
+ end
117
+ end
118
+ def add_text(ont)
119
+ txt=ont.clone
120
+ bounds=Hash.new
121
+ cr=buffer.tag_table.markup_regexp
122
+ while cr.source.length>0 && code=txt[cr]
123
+ bounds[code]=Array.new unless bounds.has_key?(code)
124
+ bounds[code].push(txt.indexU(code))
125
+ txt[code]=""
126
+ end
127
+ buffer.insert_at_cursor(txt)
128
+ bounds.each_pair{|code,b|
129
+ if tag=buffer.tag_table.lookup_by_code(code)
130
+ b.each_index{|i| buffer.apply_tag(tag,buffer.get_iter_at_offset(b[i]),buffer.get_iter_at_offset(b[i+1])) if (i.divmod(2)[1] == 0) && b[i+1] }
131
+ end
132
+ }
133
+ end
134
+ end
135
+
@@ -0,0 +1,62 @@
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 HelpIndex < Gtk::ScrolledWindow
6
+ def initialize(help)
7
+ @help=help
8
+ @path=Array.new
9
+ super()
10
+ set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC)
11
+ @data=Gtk::ListStore.new(String,TrueClass)
12
+ @filter=Gtk::TreeModelFilter.new(@data)
13
+ @filter.set_visible_column(1)
14
+ @sorter=Gtk::TreeModelSort.new(@filter).set_sort_column_id(0)
15
+ @widget=Gtk::TreeView.new(@sorter)
16
+ column=Gtk::TreeViewColumn.new("Index",renderer=Gtk::CellRendererText.new, {:text => 0}).set_sort_column_id(0)
17
+ @widget.append_column(column)
18
+ add_with_viewport(@widget)
19
+ @widget.signal_connect("cursor-changed"){|me|
20
+ if me.cursor
21
+ item=@sorter.get_iter(me.cursor[0])[0]
22
+ @path.push(item) if help.browser.load_item(item)
23
+ @help.update_back_button
24
+ end
25
+ }
26
+
27
+ end
28
+ attr_reader :help
29
+ def populate
30
+ @data.clear
31
+ @help.browser.items.each_key{|key|
32
+ i=@data.append
33
+ i[0]=key
34
+ i[1]=true
35
+ }
36
+ self
37
+ end
38
+ def refilter
39
+ @data.each{|model,path,iter|
40
+ iter[1]=iter[0].upcase.index(@help.filter.text.upcase) != nil
41
+ }
42
+ @filter.refilter
43
+ end
44
+ def set_cursor(item)
45
+ found=nil
46
+ loaded=false
47
+ @data.each{|model,path,iter| found=path if item.upcase == iter[0].upcase}
48
+ loaded=@widget.set_cursor(@sorter.convert_child_path_to_path(@filter.convert_child_path_to_path(found)),nil,false) if found
49
+ loaded
50
+ end
51
+ def go_back
52
+ if can_go_back?
53
+ @path.pop
54
+ set_cursor(@path.pop)
55
+ @help.update_back_button
56
+ end
57
+ end
58
+ def can_go_back?
59
+ @path.size > 1
60
+ end
61
+ end
62
+
@@ -0,0 +1,16 @@
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 HelpToolbar < Gtk::Toolbar
6
+ def initialize(help)
7
+ @help=help
8
+ super()
9
+ set_toolbar_style(Gtk::Toolbar::Style::BOTH_HORIZ)
10
+ end
11
+ attr_reader :help
12
+
13
+ def append(widget=nil)
14
+ insert(n_items,widget ? Gtk::ToolItem.new.add(widget) : Gtk::SeparatorToolItem.new.set_draw(true))
15
+ end
16
+ end
data/lib/ManqodHelp.rb ADDED
@@ -0,0 +1,120 @@
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 ManqodHelp < Gtk::Window
6
+
7
+ def initialize
8
+ @admin=false
9
+ super()
10
+ set_title("Manqod Help")
11
+ add(vb=Gtk::VBox.new)
12
+ vb.pack_start(@toolbar=HelpToolbar.new(self),false,false).
13
+ pack_start(hp=Gtk::HPaned.new)
14
+
15
+ toolbar.append(@back_button=Gtk::ToolButton.new(Gtk::Stock::GO_BACK))
16
+ toolbar.append
17
+ toolbar.append(Gtk::Label.new("Search:"))
18
+ toolbar.append(@filter=Gtk::Entry.new)
19
+ toolbar.append(filter_button=Gtk::ToolButton.new(Gtk::Stock::FIND))
20
+ toolbar.append(clear=Gtk::ToolButton.new(Gtk::Stock::CLEAR))
21
+ toolbar.append
22
+ toolbar.append(@formats_button=Gtk::ToolButton.new(Gtk::Stock::BOLD).set_no_show_all(true))
23
+ toolbar.append(@new_item_button=Gtk::ToolButton.new(Gtk::Stock::NEW).set_no_show_all(true))
24
+ toolbar.append(@edit_item_button=Gtk::ToolButton.new(Gtk::Stock::EDIT).set_no_show_all(true))
25
+ toolbar.append(@delete_item_button=Gtk::ToolButton.new(Gtk::Stock::DELETE).set_no_show_all(true))
26
+ toolbar.append(hidden=Gtk::EventBox.new.add(Gtk::Label.new)).set_expand(true)
27
+ toolbar.append
28
+ toolbar.append(@close=Gtk::ToolButton.new(Gtk::Stock::CLOSE))
29
+
30
+ hp.add1(@index=HelpIndex.new(self)).
31
+ add2(@browser=HelpBrowser.new(self)).
32
+ set_position(150).
33
+ set_position_set(true)
34
+
35
+ filter.signal_connect('activate',filter_button){|me,filter_button|
36
+ filter_button.clicked
37
+ }
38
+ filter_button.signal_connect('clicked'){|me|
39
+ @index.refilter
40
+ }
41
+ clear.signal_connect('clicked'){|me|
42
+ filter.text=""
43
+ @index.refilter
44
+ }
45
+ @back_button.signal_connect('clicked'){|me|
46
+ @index.go_back
47
+ }
48
+ @close.signal_connect('clicked'){|me|
49
+ destroy
50
+ }
51
+ hidden.signal_connect('event'){|me,ev|
52
+ if ev.event_type == Gdk::Event::BUTTON3_PRESS
53
+ @admin=!@admin
54
+ @formats_button.set_visible(@admin)
55
+ @new_item_button.set_visible(@admin)
56
+ @edit_item_button.set_visible(@admin)
57
+ @delete_item_button.set_visible(@admin)
58
+ end
59
+ }
60
+ @formats_button.signal_connect('clicked'){|me|
61
+ FormatsEditor.new(self).run
62
+ }
63
+ @new_item_button.signal_connect('clicked'){|me|
64
+ w=Gtk::Dialog.new("New item index",self,Gtk::Dialog::MODAL|Gtk::Dialog::DESTROY_WITH_PARENT,[Gtk::Stock::NEW,Gtk::Dialog::RESPONSE_ACCEPT],[Gtk::Stock::CANCEL,Gtk::Dialog::RESPONSE_REJECT]).set_default_response(Gtk::Dialog::RESPONSE_ACCEPT)
65
+ w.vbox.pack_start(Gtk::Label.new("Item Index(only use indexes that you want to be links):"),false,false).pack_start(e=Gtk::Entry.new,false,false)
66
+ w.show_all.run{|response|
67
+ if response == Gtk::Dialog::RESPONSE_ACCEPT
68
+ browser.add_item(e.text)
69
+ index.populate.set_cursor(e.text)
70
+ browser.save_current_item
71
+ end
72
+ w.destroy
73
+ }
74
+
75
+ }
76
+ @edit_item_button.signal_connect('clicked'){|me|
77
+ if browser.item
78
+ w=Gtk::Dialog.new("Editing item",self,Gtk::Dialog::MODAL|Gtk::Dialog::DESTROY_WITH_PARENT,[Gtk::Stock::CLOSE,Gtk::Dialog::RESPONSE_ACCEPT]).set_default_response(Gtk::Dialog::RESPONSE_ACCEPT)
79
+ w.vbox.pack_start(Gtk::ScrolledWindow.new.add(e=Gtk::TextView.new).set_size_request(400,200).set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC),false,false)
80
+ e.buffer.set_text(browser.items[browser.item])
81
+ e.buffer.signal_connect('changed'){|me| browser.update_current_item(me.get_text)}
82
+ w.show_all.run{|response|
83
+ browser.save_current_item
84
+ w.destroy
85
+ }
86
+ end
87
+ }
88
+ @delete_item_button.signal_connect('clicked'){|me|
89
+ if browser.item
90
+ w=Gtk::Dialog.new("Removing item",self,Gtk::Dialog::MODAL|Gtk::Dialog::DESTROY_WITH_PARENT,[Gtk::Stock::DELETE,Gtk::Dialog::RESPONSE_ACCEPT],[Gtk::Stock::CANCEL,Gtk::Dialog::RESPONSE_REJECT]).set_default_response(Gtk::Dialog::RESPONSE_REJECT)
91
+ w.vbox.pack_start(Gtk::Label.new("Are you sure about removing the selected item?"),false,false)
92
+ w.show_all.run{|response|
93
+ browser.remove_current_item if response == Gtk::Dialog::RESPONSE_ACCEPT
94
+ w.destroy
95
+ }
96
+ end
97
+ }
98
+ update_back_button
99
+ end
100
+ attr_reader :index, :browser, :toolbar
101
+ attr_reader :filter, :admin
102
+
103
+ def populate
104
+ browser.clear_items
105
+ browser.buffer.tag_table.clear
106
+ i=ManqodDB.instance.cache.get("help_items")
107
+ i.each_pair{|key,descr| browser.add_item(key,descr)}
108
+ index.populate
109
+
110
+ i=ManqodDB.instance.cache.get("help_formats")
111
+ i.each_pair{|key,format| browser.buffer.tag_table.add(format)}
112
+ # buffer.tag_table.add({"name"=>"_header","code"=>Regexp.escape("[h1]"),"font"=>"Sans Bold 20"})
113
+
114
+ self
115
+ end
116
+ def update_back_button
117
+ @back_button.set_sensitive(@index.can_go_back?)
118
+ end
119
+ end
120
+
data/lib/ManqodRPC.rb ADDED
@@ -0,0 +1,37 @@
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 ManqodRPC
6
+ include DRb
7
+ include DRbUndumped
8
+ include Singleton
9
+ include ManqodCommon
10
+ def alive?
11
+ true
12
+ end
13
+ def start_service(client_uri)
14
+ @client_server=DRb.start_service(client_uri,self)
15
+ end
16
+ def connect_to(server_uri)
17
+ @manqod_server=DRb::DRbObject.new(nil,server_uri)
18
+ end
19
+ def unregister_client
20
+ manqod_server.unregister_client(self)
21
+ end
22
+ def register_client
23
+ manqod_server.register_client(self,ManqodDB.instance.manqod_db.name.to_s)
24
+ end
25
+ def nick
26
+ Nick.instance.get_nick
27
+ end
28
+ def to_s
29
+ "#{Nick.instance.get_nick}@#{@client_server.uri}"
30
+ end
31
+ def rpc(proc)
32
+ einfo("RPC:#{proc}","main")
33
+ eeval(proc,self)
34
+ end
35
+ attr_reader :manqod_server, :client_server
36
+ end
37
+
data/lib/Memcache.rb ADDED
@@ -0,0 +1,82 @@
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 Memcache
6
+ def initialize(servers,options={})
7
+ @prefix_key=options[:prefix_key]
8
+ @memcache_lib=nil
9
+ @memcache=nil
10
+ @version=nil
11
+ begin
12
+ @version=Memcached::VERSION
13
+ einfo("using memcached(#{version})")
14
+ @memcache_lib=:memcached
15
+ rescue =>err
16
+ begin
17
+ @version=Dalli::VERSION
18
+ einfo("falling back memcache to dalli(#{version})")
19
+ @memcache_lib=:dalli
20
+ rescue =>err
21
+ eerror("No memcache lib available, Follow install instructions on https://manqod.sourceforge.net")
22
+ end
23
+ end
24
+
25
+ case memcache_lib
26
+ when :memcached
27
+ options[:default_ttl] = 0
28
+ options[:timeout] = 2
29
+ @memcache = Memcached.new(servers,options)
30
+ when :dalli
31
+ options.delete(:prefix_key)
32
+ options[:expires_in]=0
33
+ @memcache = Dalli::Client.new(servers,options)
34
+ else
35
+ eeror("No memcache lib available")
36
+ end
37
+ end
38
+ attr_reader :memcache_lib, :memcache, :version
39
+
40
+ def get(key)
41
+ case memcache_lib
42
+ when :memcached
43
+ begin
44
+ return memcache.get(key)
45
+ rescue Memcached::NotFound
46
+ ewarn("cannot load data for key:#{key.inspect}")
47
+ return nil
48
+ end
49
+ when :dalli
50
+ if key.class.name == "Array"
51
+ values=Hash.new
52
+ key.each{|k| values[k]=dalli_get_one(k)}
53
+ return values
54
+ else
55
+ dalli_get_one(key)
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+ def to_s
62
+ "Memcache(#{memcache_lib}-#{version})[#{@prefix_key}]"
63
+ end
64
+
65
+ private
66
+ def dalli_get_one(key)
67
+ key=@prefix_key + key
68
+ begin
69
+ value = memcache.get(key)
70
+ rescue
71
+ #we were connected to the server, we now retry 10 secs
72
+ t=Time.new if t.nil?
73
+ retry unless Time.new-t>10
74
+ end
75
+ bytes = value.unpack('cc') if value && value.is_a?(String) && value.size > 2
76
+ if bytes && bytes[0] == 4 && bytes[1] == 8
77
+ return Marshal.load(value) rescue value
78
+ end
79
+ return value
80
+ end
81
+ end
82
+
data/lib/MyConfig.rb ADDED
@@ -0,0 +1,93 @@
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 MyConfig < Gtk::Table
6
+ class ConfComboHolder < Gtk::HBox
7
+ include Conf
8
+ class ConfCombo < Gtk::ComboBox
9
+ include Conf
10
+ def initialize(values)
11
+ super(Gtk::ListStore.new(String,String))
12
+ pack_start(renderer=Gtk::CellRendererText.new,true).add_attribute(renderer,:text,1)
13
+ values.each_pair{|key,value| model.append.set_value(0,key).set_value(1,value)}
14
+ signal_connect('changed'){|me|
15
+ set_conf(0,0,parent.conf_text,me.active_iter[0])
16
+ }
17
+ end
18
+ def set_active(defval)
19
+ model.each{|model,path,iter| set_active_iter(iter) if iter[0] == defval}
20
+ end
21
+ end
22
+
23
+ def initialize(label_text,conf_text,values)
24
+ @conf_text=conf_text
25
+ super()
26
+ pack_start(Gtk::Label.new(label_text).set_alignment(0,0.5))
27
+ pack_end(@combo=ConfCombo.new(values))
28
+ end
29
+ attr_accessor :conf_text
30
+
31
+ def update
32
+ @combo.set_active(get_conf(0,0,@conf_text))
33
+ end
34
+ end
35
+
36
+ class ConfFontHolder < Gtk::HBox
37
+ include Conf
38
+ def initialize(label_text,conf_text)
39
+ @conf_text=conf_text
40
+ super()
41
+ pack_start(Gtk::Label.new(label_text).set_alignment(0,0.5))
42
+ pack_end(@font_button=Gtk::FontButton.new)
43
+ @font_button.signal_connect('font-set'){|me| set_conf(0,0,@conf_text,me.font_name)}
44
+ @font_button.set_use_font(true)
45
+ end
46
+ attr_accessor :conf_text
47
+
48
+ def update
49
+ @font_button.set_font_name(get_conf(0,0,@conf_text))
50
+ end
51
+ end
52
+
53
+ def initialize
54
+ super(2,4)
55
+ @items=Array.new
56
+ @items.push(ConfComboHolder.new("Button size","button-size",{"gtk-button"=>"Button","gtk-dialog" => "Dialog", "gtk-dnd" => "Dnd","gtk-large-toolbar"=>"Large Toolbar","gtk-menu"=>"Menu","gtk-small-toolbar"=>"Small Toolbar"}))
57
+ @items.push(ConfComboHolder.new("List image size","list-image-size",{"gtk-button"=>"Button","gtk-dialog" => "Dialog", "gtk-dnd" => "Dnd","gtk-large-toolbar"=>"Large Toolbar","gtk-menu"=>"Menu","gtk-small-toolbar"=>"Small Toolbar"}))
58
+ @items.push(ConfComboHolder.new("Grid in Lists in Forms","form-grid",{"both"=>"Both","vertical"=>"Vertical","horizontal"=>"Horizontal","none"=>"None"}))
59
+ @items.push(ConfComboHolder.new("Grid in Lists","grid",{"both"=>"Both","vertical"=>"Vertical","horizontal"=>"Horizontal","none"=>"None"}))
60
+ @items.push(ConfComboHolder.new("Tooltip in Lists","list-tooltip",{"none"=>"None","filters"=>"Filters"}))
61
+ @items.push(ConfComboHolder.new("Menu Position","menu-position",{"top"=>"Top","bottom"=>"Bottom","left"=>"Left","right"=>"Right"}))
62
+ @items.push(ConfComboHolder.new("Menu Type","menu-type",{"buttons"=>"Buttons","standard"=>"Standard"}))
63
+ @items.push(ConfComboHolder.new("Confirm Exit","confirm-exit",{"true"=>"Confirm","false"=>"Just exit"}))
64
+
65
+ @items.push(ConfFontHolder.new("Info Frame Font","info-frame-font"))
66
+ @items.push(ConfFontHolder.new("Info Item Font","info-item-font"))
67
+
68
+ @items.push(ConfFontHolder.new("Form Frame Font","form-frame-font"))
69
+ @items.push(ConfFontHolder.new("Form Item Font","form-item-font"))
70
+
71
+ @items.push(ConfFontHolder.new("List Button Font","list-button-font"))
72
+ @items.push(ConfFontHolder.new("List Cell Font","list-cell-font"))
73
+ @items.push(ConfFontHolder.new("Standard Menu Font","bar-menu-font"))
74
+
75
+ y=0
76
+ @items.each{|item|
77
+ attach(item,0,1,y,y+1,Gtk::EXPAND|Gtk::FILL,Gtk::EXPAND)
78
+ y+=1
79
+ }
80
+
81
+ show_all
82
+ end
83
+
84
+
85
+ def update(notifier=nil)
86
+ @items.each{|item| item.update}
87
+ end
88
+
89
+ def title
90
+ "Config"
91
+ end
92
+ end
93
+
@@ -0,0 +1,47 @@
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 TextLayout
6
+ def initialize(cr,txt,font,width,x,y,alignment='left')
7
+ @cr=cr
8
+ @font=font
9
+ @layout=cr.create_pango_layout
10
+ @txt=txt
11
+ @layout.set_text(txt)
12
+ @x=x
13
+ @y=y
14
+ @width=width
15
+ @alignment=alignment
16
+ @layout.set_font_description(Pango::FontDescription.new(@font)).set_width(@width*Pango::SCALE)
17
+ @layout.set_wrap(Pango::Layout::WRAP_WORD_CHAR).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)#.set_single_paragraph_mode(true)
18
+ set_alignment
19
+ end
20
+ attr_reader :layout
21
+
22
+ def set_x(newx=x)
23
+ @x=newx
24
+ end
25
+ def set_y(newy=y)
26
+ @y=newy
27
+ end
28
+ def set_alignment(alignment=@alignment)
29
+ @alignment=alignment
30
+ case @alignment
31
+ when 'left' then @layout.set_alignment(Pango::Layout::ALIGN_LEFT)
32
+ when 'right' then @layout.set_alignment(Pango::Layout::ALIGN_RIGHT)
33
+ when 'center' then @layout.set_alignment(Pango::Layout::ALIGN_CENTER)
34
+ end
35
+ end
36
+ def height
37
+ w,h=@layout.size
38
+ h/Pango::SCALE
39
+ end
40
+
41
+ def draw(cr)
42
+ cr.move_to(@x,@y)
43
+ cr.show_pango_layout(@layout)
44
+ cr.stroke
45
+ end
46
+ end
47
+