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,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
|
+
|