nkeynes@1034: /** nkeynes@1035: * $Id$ nkeynes@1034: * nkeynes@1034: * VMU management - maintains a list of all known VMUs nkeynes@1034: * nkeynes@1034: * Copyright (c) 2009 Nathan Keynes. nkeynes@1034: * nkeynes@1034: * This program is free software; you can redistribute it and/or modify nkeynes@1034: * it under the terms of the GNU General Public License as published by nkeynes@1034: * the Free Software Foundation; either version 2 of the License, or nkeynes@1034: * (at your option) any later version. nkeynes@1034: * nkeynes@1034: * This program is distributed in the hope that it will be useful, nkeynes@1034: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@1034: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@1034: * GNU General Public License for more details. nkeynes@1034: */ nkeynes@1034: nkeynes@1034: nkeynes@1034: #ifndef lxdream_vmulist_H nkeynes@1034: #define lxdream_vmulist_H 1 nkeynes@1034: nkeynes@1034: #ifdef __cplusplus nkeynes@1034: extern "C" { nkeynes@1034: #endif nkeynes@1034: nkeynes@1034: #include "hook.h" nkeynes@1034: #include "vmu/vmuvol.h" nkeynes@1034: nkeynes@1034: typedef enum { VMU_ADDED, VMU_MODIFIED, VMU_REMOVED } vmulist_change_type_t; nkeynes@1034: nkeynes@1034: /* Hook for notification of list change events */ nkeynes@1034: typedef gboolean (*vmulist_change_hook_t)(vmulist_change_type_t change, int rowidx, void *user_data); nkeynes@1034: DECLARE_HOOK(vmulist_change_hook, vmulist_change_hook_t); nkeynes@1034: nkeynes@1034: vmu_volume_t vmulist_get_vmu(unsigned int index); nkeynes@1034: nkeynes@1034: /** Retrieve a known vmu by name */ nkeynes@1034: vmu_volume_t vmulist_get_vmu_by_name(const gchar *name); nkeynes@1034: nkeynes@1034: /** Retrieve a vmu by filename. The filename/vmu will be added to the list if it's nkeynes@1034: * not already in it. nkeynes@1034: */ nkeynes@1034: vmu_volume_t vmulist_get_vmu_by_filename(const gchar *name); nkeynes@1034: nkeynes@1034: const char *vmulist_get_name(unsigned int index); nkeynes@1034: nkeynes@1034: const char *vmulist_get_filename(unsigned int index); nkeynes@1034: nkeynes@1034: const char *vmulist_get_volume_name( vmu_volume_t vol ); nkeynes@1034: nkeynes@1034: nkeynes@1034: nkeynes@1034: /** Mark a VMU as being attached. nkeynes@1034: * @return FALSE if the VMU was already attached, otherwise TRUE nkeynes@1034: */ nkeynes@1034: gboolean vmulist_attach_vmu( vmu_volume_t vol, const gchar *where ); nkeynes@1034: nkeynes@1034: /** Mark a VMU as detached. */ nkeynes@1034: void vmulist_detach_vmu( vmu_volume_t vol ); nkeynes@1034: nkeynes@1034: /** nkeynes@1034: * Create a new VMU at the given filename, and add it to the list nkeynes@1034: * @param filename to save the new VMU as nkeynes@1034: * @param create_only if TRUE, the file must not already exist. If FALSE, nkeynes@1034: * the create will overwrite any existing file at that filename. nkeynes@1034: * @return index of the VMU in the list, or -1 if the call failed. nkeynes@1034: **/ nkeynes@1034: int vmulist_create_vmu(const gchar *filename, gboolean create_only); nkeynes@1034: nkeynes@1034: /** Add a VMU volume to the list. Returns the index of the added volume */ nkeynes@1034: int vmulist_add_vmu(const gchar *filename, vmu_volume_t vol); nkeynes@1034: nkeynes@1034: int vmulist_get_index_by_filename( const gchar *name ); nkeynes@1034: nkeynes@1034: /** Remove a VMU volume from the list */ nkeynes@1034: void vmulist_remove_vmu(vmu_volume_t vol); nkeynes@1034: nkeynes@1034: /** Initialize the list */ nkeynes@1034: void vmulist_init(void); nkeynes@1034: nkeynes@1034: /** Save all VMUs in the list (actually only ones which have been written to nkeynes@1034: * some point) nkeynes@1034: **/ nkeynes@1034: void vmulist_save_all(void); nkeynes@1034: nkeynes@1034: void vmulist_shutdown(void); nkeynes@1034: nkeynes@1034: unsigned int vmulist_get_size(void); nkeynes@1034: nkeynes@1034: #ifdef __cplusplus nkeynes@1034: } nkeynes@1034: #endif nkeynes@1034: nkeynes@1034: #endif /* !lxdream_vmulist_H */