#include <gtk/gtkvscrollbar.h>
#include <gtk/gtkmenu.h>
-#include "generic/callback.h"
+#include "signal/signal.h"
#include "math/vector.h"
#include "texturelib.h"
#include "string/string.h"
reinterpret_cast<TextureGroupLoader*>(data)->loadGroup();
}
-bool string_equal_start(const char* string, const char* start)
+bool string_equal_start(const char* string, StringRange start)
{
- return string_equal_n(string, start, string_length(start));
+ return string_equal_n(string, start.first, start.last - start.first);
}
GtkMenuItem* MenuItem_create(const char* name)
{
const char* dirName = (*i).c_str();
const char* firstUnderscore = strchr(dirName, '_');
- CopiedString dirRoot(dirName, (firstUnderscore == 0) ? dirName : firstUnderscore + 1);
+ StringRange dirRoot(dirName, (firstUnderscore == 0) ? dirName : firstUnderscore + 1);
// do we shrink the menus?
// we shrink only if we have at least two things to shrink :-)
++next;
if(firstUnderscore != 0
&& next != groups.end()
- && string_equal_start((*next).c_str(), dirRoot.c_str()))
+ && string_equal_start((*next).c_str(), dirRoot))
{
- CopiedString itemName(dirName, firstUnderscore);
- GtkMenuItem* item = Menu_addItem(menu, itemName.c_str());
+ GtkMenuItem* item = Menu_addItem(menu, CopiedString(StringRange(dirName, firstUnderscore)).c_str());
GtkMenu *pSubMenu = GTK_MENU(gtk_menu_new());
gtk_menu_item_set_submenu(item, GTK_WIDGET(pSubMenu));
// keep going...
- while(i != groups.end() && string_equal_start((*i).c_str(), dirRoot.c_str()))
+ while(i != groups.end() && string_equal_start((*i).c_str(), dirRoot))
{
TextureGroupsMenu_addItem(pSubMenu, (*i).c_str());
const char* last = path_remove_directory(texture);
if(!string_empty(last))
{
- groups.insert(CopiedString(texture, --last));
+ groups.insert(CopiedString(StringRange(texture, --last)));
}
}
}
}
-std::set<Callback> g_activeShadersChangedCallbacks;
+Signal0 g_activeShadersChangedCallbacks;
-void TextureBrowser_addActiveShadersChangedCallback(const Callback& callback)
+void TextureBrowser_addActiveShadersChangedCallback(const SignalHandler& handler)
{
- g_activeShadersChangedCallbacks.insert(callback);
+ g_activeShadersChangedCallbacks.connectLast(handler);
}
class ShadersObserver : public ModuleObserver
{
- std::set<Callback> m_realiseCallbacks;
+ Signal0 m_realiseCallbacks;
public:
void realise()
{
- std::for_each(m_realiseCallbacks.begin(), m_realiseCallbacks.end(), CallbackInvoke());
+ m_realiseCallbacks();
}
void unrealise()
{
}
- void insert(const Callback& callback)
+ void insert(const SignalHandler& handler)
{
- m_realiseCallbacks.insert(callback);
+ m_realiseCallbacks.connectLast(handler);
}
};
ShadersObserver g_ShadersObserver;
}
-void TextureBrowser_addShadersRealiseCallback(const Callback& callback)
+void TextureBrowser_addShadersRealiseCallback(const SignalHandler& handler)
{
- g_ShadersObserver.insert(callback);
+ g_ShadersObserver.insert(handler);
}
void TextureBrowser_activeShadersChanged(TextureBrowser& textureBrowser)
TextureBrowser_heightChanged(textureBrowser);
textureBrowser.m_originInvalid = true;
- std::for_each(g_activeShadersChangedCallbacks.begin(), g_activeShadersChangedCallbacks.end(), CallbackInvoke());
+ g_activeShadersChangedCallbacks();
}
void TextureBrowser_importShowScrollbar(TextureBrowser& textureBrowser, bool value)
public:
void visit(const char* name)
{
- CopiedString shaderName(name, path_get_filename_base_end(name));
- IShader* shader = QERApp_Shader_ForName(shaderName.c_str());
+ IShader* shader = QERApp_Shader_ForName(CopiedString(StringRange(name, path_get_filename_base_end(name))).c_str());
shader->DecRef();
}
};