annotate foosdk/sdk/foobar2000/foo_sample/contextmenu.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // Identifier of our context menu group. Substitute with your own when reusing code.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 static const GUID guid_mygroup = { 0x572de7f4, 0xcbdf, 0x479a, { 0x97, 0x26, 0xa, 0xb0, 0x97, 0x47, 0x69, 0xe3 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 // Switch to contextmenu_group_factory to embed your commands in the root menu but separated from other commands.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 //static contextmenu_group_factory g_mygroup(guid_mygroup, contextmenu_groups::root, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 static contextmenu_group_popup_factory g_mygroup(guid_mygroup, contextmenu_groups::root, "Sample component", 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 static void RunTestCommand(metadb_handle_list_cref data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 void RunCalculatePeak(metadb_handle_list_cref data); //decode.cpp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 void RunCopyFiles(metadb_handle_list_cref data); // IO.cpp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 void RunAlterTagsLL(metadb_handle_list_cref data); // IO.cpp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 void RunUIAndThreads( metadb_handle_list_cref data ); // ui_and_threads.cpp
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 namespace { // anon namespace local classes for good measure
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 class myFilter : public file_info_filter {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 bool apply_filter(metadb_handle_ptr p_location, t_filestats p_stats, file_info & p_info) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 p_info.meta_set("comment", "foo_sample was here");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 // return true to write changes tags to the file, false to suppress the update
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 static void RunAlterTags(metadb_handle_list_cref data) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 // Simple alter-file-tags functionality
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 const auto wndParent = core_api::get_main_window();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 // Filter object that applies our edits to the file tags
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 auto filter = fb2k::service_new<myFilter>();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 auto notify = fb2k::makeCompletionNotify( [] (unsigned code) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 // Code values are metadb_io::t_update_info_state enum
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 FB2K_console_formatter() << "Tag update finished, code: " << code;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 } );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 // Flags
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 // Indicate that we're aware of fb2k 1.3+ partial info semantics
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 const uint32_t flags = metadb_io_v2::op_flag_partial_info_aware;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 metadb_io_v2::get()->update_info_async(data, filter, wndParent, flags, notify);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 // Simple context menu item class.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 class myitem : public contextmenu_item_simple {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 typedef contextmenu_item_simple super_t;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 cmd_test1 = 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 cmd_peak,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 cmd_copyFiles,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 cmd_alterTags,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 cmd_alterTagsLL,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 cmd_uiAndThreads,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 cmd_total
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 GUID get_parent() {return guid_mygroup;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 unsigned get_num_items() {return cmd_total;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 void get_item_name(unsigned p_index,pfc::string_base & p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 switch(p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 case cmd_test1: p_out = "Test command"; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 case cmd_peak: p_out = "Calculate peak"; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 case cmd_copyFiles: p_out = "Copy files"; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 case cmd_alterTags: p_out = "Alter tags"; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 case cmd_alterTagsLL: p_out = "Alter tags (low level)"; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 case cmd_uiAndThreads: p_out = "UI and threads demo"; break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 default: uBugCheck(); // should never happen unless somebody called us with invalid parameters - bail
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 void context_command(unsigned p_index,metadb_handle_list_cref p_data,const GUID& p_caller) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 switch(p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 case cmd_test1:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 RunTestCommand(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 case cmd_peak:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 RunCalculatePeak(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 case cmd_copyFiles:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 RunCopyFiles(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 case cmd_alterTags:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 RunAlterTags(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 case cmd_alterTagsLL:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 RunAlterTagsLL(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 case cmd_uiAndThreads:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 RunUIAndThreads(p_data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 uBugCheck();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 // Overriding this is not mandatory. We're overriding it just to demonstrate stuff that you can do such as context-sensitive menu item labels.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 bool context_get_display(unsigned p_index,metadb_handle_list_cref p_data,pfc::string_base & p_out,unsigned & p_displayflags,const GUID & p_caller) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 switch(p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 case cmd_test1:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 if (!super_t::context_get_display(p_index, p_data, p_out, p_displayflags, p_caller)) return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 // Example context sensitive label: append the count of selected items to the label.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 p_out << " : " << p_data.get_count() << " item";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 if (p_data.get_count() != 1) p_out << "s";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 p_out << " selected";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 return super_t::context_get_display(p_index, p_data, p_out, p_displayflags, p_caller);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 GUID get_item_guid(unsigned p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 // These GUIDs identify our context menu items. Substitute with your own GUIDs when reusing code.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 static const GUID guid_test1 = { 0x4021c80d, 0x9340, 0x423b, { 0xa3, 0xe2, 0x8e, 0x1e, 0xda, 0x87, 0x13, 0x7f } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 static const GUID guid_peak = { 0xe629b5c3, 0x5af3, 0x4a1e, { 0xa0, 0xcd, 0x2d, 0x5b, 0xff, 0xa6, 0x4, 0x58 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 static const GUID guid_copyFiles = { 0x7f8a6569, 0xe46b, 0x4698, { 0xaa, 0x30, 0xc4, 0xc1, 0x44, 0xc9, 0xc8, 0x92 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 static const GUID guid_alterTags = { 0xdfb8182b, 0xf8f3, 0x4ce9, { 0xae, 0xf6, 0x8e, 0x4e, 0x51, 0x7c, 0x2d, 0x3 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 static const GUID guid_alterTagsLL = { 0x6b43324d, 0x6cb2, 0x42a6, { 0xbf, 0xc, 0xd9, 0x43, 0xfc, 0x83, 0x2f, 0x39 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 static const GUID guid_uiAndThreads = { 0x30dace2e, 0xcccf, 0x41d4, { 0x8c, 0x24, 0x57, 0xec, 0xf4, 0xa0, 0xd9, 0xc9 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 switch(p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 case cmd_test1: return guid_test1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 case cmd_peak: return guid_peak;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 case cmd_copyFiles: return guid_copyFiles;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 case cmd_alterTags: return guid_alterTags;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 case cmd_alterTagsLL: return guid_alterTagsLL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 case cmd_uiAndThreads: return guid_uiAndThreads;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 default: uBugCheck(); // should never happen unless somebody called us with invalid parameters - bail
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 bool get_item_description(unsigned p_index,pfc::string_base & p_out) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 switch(p_index) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 case cmd_test1:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 p_out = "This is a sample command.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 case cmd_peak:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 p_out = "This is a sample command that decodes the selected tracks and reports the peak sample value.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 case cmd_copyFiles:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 p_out = "This is a sample command that copies the selected tracks to another location.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 case cmd_alterTags:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 p_out = "This is a sample command that performs tag manipulation on the files.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 case cmd_alterTagsLL:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 p_out = "This is a sample command that performs low-level manipulation of tags on the files.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 case cmd_uiAndThreads:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 p_out = "This is a smple command that runs UI and Threads demo.";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 uBugCheck(); // should never happen unless somebody called us with invalid parameters - bail
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 static contextmenu_item_factory_t<myitem> g_myitem_factory;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 static void RunTestCommand(metadb_handle_list_cref data) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 pfc::string_formatter message;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 message << "This is a test command.\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 if (data.get_count() > 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 message << "Parameters:\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 for(t_size walk = 0; walk < data.get_count(); ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 message << data[walk] << "\n";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 popup_message::g_show(message, "Blah");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 }