Patch level : 10.0
Files correlati : ba0 Ricompilazione Demo : [ ] Commento : Gestione salvataggio e ripristino del layout dei pannelli git-svn-id: svn://10.65.10.50/trunk@17279 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1e0c3c8b80
commit
3f66b6a994
@ -319,12 +319,10 @@ void OsLinux_SetCaptionStyle(wxWindow * w, long style)
|
|||||||
|
|
||||||
int OsLinux_GetSessionId()
|
int OsLinux_GetSessionId()
|
||||||
{
|
{
|
||||||
char s[80];
|
char s[256];
|
||||||
|
wxStrncpy(s, wxGetEnv("DISPLAY"), sizeof(s));
|
||||||
strcpy(s, getenv("DISPLAY"));
|
|
||||||
|
|
||||||
char * p = strchr(s, ':');
|
|
||||||
|
|
||||||
|
char* p = strchr(s, ':');
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
p = s;
|
p = s;
|
||||||
else
|
else
|
||||||
|
@ -192,14 +192,14 @@ void xvt_sys_sorry_box(const char* func, const char* file, int line)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void xvt_sys_deprecated_box(const char* file, int line)
|
void xvt_sys_deprecated_box(const char* func, const char* file, int line)
|
||||||
{
|
{
|
||||||
static wxHashTable deprecated;
|
static wxHashTable deprecated;
|
||||||
wxString strKey; strKey << file << ':' << line;
|
wxString strKey; strKey << file << ':' << line;
|
||||||
if (deprecated.Get(strKey) == NULL)
|
if (deprecated.Get(strKey) == NULL)
|
||||||
{
|
{
|
||||||
deprecated.Put(strKey, &deprecated); // Dummy
|
deprecated.Put(strKey, &deprecated); // Dummy
|
||||||
const wxString strMessage = wxString::Format("Function in file %s at line %d is deprecated:\nYou can blame Guy for this, if you're bold enough!", file, line);
|
const wxString strMessage = wxString::Format("Function %s in file %s at line %d is deprecated:\nYou can blame Guy for this, if you're bold enough!", func, file, line);
|
||||||
_MessageBox(strMessage, wxOK | wxICON_WARNING);
|
_MessageBox(strMessage, wxOK | wxICON_WARNING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2591,9 +2591,9 @@ DATA_PTR xvt_mem_zalloc(size_t size)
|
|||||||
|
|
||||||
static int xvt_menu_count(const MENU_ITEM* m)
|
static int xvt_menu_count(const MENU_ITEM* m)
|
||||||
{
|
{
|
||||||
int n;
|
int n = 0;
|
||||||
|
if (m != NULL)
|
||||||
for (n = 0; m[n].tag != 0; n++);
|
for (n = 0; m[n].tag != 0; n++);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2601,7 +2601,7 @@ static int xvt_menu_count(const MENU_ITEM* m)
|
|||||||
MENU_ITEM* xvt_menu_duplicate_tree(const MENU_ITEM* m)
|
MENU_ITEM* xvt_menu_duplicate_tree(const MENU_ITEM* m)
|
||||||
{
|
{
|
||||||
MENU_ITEM* TheMenu = NULL;
|
MENU_ITEM* TheMenu = NULL;
|
||||||
if (m != NULL && m->tag > 0)
|
if (m != NULL && m->tag != 0)
|
||||||
{
|
{
|
||||||
const int n = xvt_menu_count(m)+1;
|
const int n = xvt_menu_count(m)+1;
|
||||||
TheMenu = (MENU_ITEM*)xvt_mem_zalloc(sizeof(MENU_ITEM)*n);
|
TheMenu = (MENU_ITEM*)xvt_mem_zalloc(sizeof(MENU_ITEM)*n);
|
||||||
@ -2638,29 +2638,30 @@ BOOLEAN xvt_menu_popup(MENU_ITEM *menu_p, WINDOW win, PNT pos,
|
|||||||
wxMenu menu;
|
wxMenu menu;
|
||||||
for (MENU_ITEM* mi = menu_p; mi != NULL && mi->tag != 0; mi++)
|
for (MENU_ITEM* mi = menu_p; mi != NULL && mi->tag != 0; mi++)
|
||||||
{
|
{
|
||||||
wxMenuItem* item = NULL;
|
|
||||||
|
|
||||||
if (mi->separator)
|
if (mi->separator)
|
||||||
menu.AppendSeparator();
|
menu.AppendSeparator();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mi->checkable)
|
wxMenuItem* item = NULL;
|
||||||
|
if (mi->checkable)
|
||||||
item = menu.AppendCheckItem(mi->tag, mi->text);
|
item = menu.AppendCheckItem(mi->tag, mi->text);
|
||||||
else
|
else
|
||||||
item = menu.Append(mi->tag, mi->text);
|
item = menu.Append(mi->tag, mi->text);
|
||||||
}
|
|
||||||
|
|
||||||
if (item != NULL) // Non e' un sepatatore
|
|
||||||
{
|
|
||||||
item->Enable(mi->enabled); // Fattibile solo dopo l'append
|
item->Enable(mi->enabled); // Fattibile solo dopo l'append
|
||||||
if (mi->checkable)
|
if (mi->checkable)
|
||||||
item->Check(mi->checked);
|
item->Check(mi->checked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CAST_WIN(win, w);
|
|
||||||
bool ok = w.PopupMenu(&menu, pos.h, pos.v);
|
|
||||||
|
|
||||||
return ok;
|
wxPoint mp = wxDefaultPosition;
|
||||||
|
if (pos.h >= 0 && pos.v >= 0)
|
||||||
|
{
|
||||||
|
mp.x = pos.h;
|
||||||
|
mp.y = pos.v;
|
||||||
|
}
|
||||||
|
|
||||||
|
CAST_WIN(win, w);
|
||||||
|
return w.PopupMenu(&menu, mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TranslateMenu(wxMenu* pMenu, TRANSLATE_CALLBACK tc)
|
static void TranslateMenu(wxMenu* pMenu, TRANSLATE_CALLBACK tc)
|
||||||
@ -3804,12 +3805,28 @@ void xvt_sys_sleep(unsigned long msec)
|
|||||||
// XVT system calls (added by Alex)
|
// XVT system calls (added by Alex)
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
XVTDLL BOOLEAN xvt_sys_get_env(const char* varname, char* value, int max_size)
|
||||||
|
{
|
||||||
|
const wxString strName(varname);
|
||||||
|
wxString strValue;
|
||||||
|
const BOOLEAN ok = wxGetEnv(strName, &strValue);
|
||||||
|
if (ok)
|
||||||
|
wxStrncpy(value, strValue, max_size);
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
void xvt_sys_searchenv(const char * filename, const char * varname, char * pathname)
|
void xvt_sys_searchenv(const char * filename, const char * varname, char * pathname)
|
||||||
|
{
|
||||||
|
DEPRECATED_BOX();
|
||||||
|
xvt_sys_search_env(filename, varname, pathname);
|
||||||
|
}
|
||||||
|
|
||||||
|
void xvt_sys_search_env(const char * filename, const char * varname, char * pathname)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
_searchenv(filename, varname, pathname);
|
_searchenv(filename, varname, pathname);
|
||||||
#else
|
#else
|
||||||
const char * value = getenv(varname);
|
const char * value = wxGetEnv(varname);
|
||||||
if (value)
|
if (value)
|
||||||
{
|
{
|
||||||
char path_list[4096];
|
char path_list[4096];
|
||||||
@ -3833,6 +3850,12 @@ void xvt_sys_searchenv(const char * filename, const char * varname, char * pathn
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOLEAN xvt_sys_set_env(const char* varname, const char* value)
|
||||||
|
{
|
||||||
|
const wxString strName(varname);
|
||||||
|
return value != NULL ? wxSetEnv(strName, value) : wxUnsetEnv(strName);
|
||||||
|
}
|
||||||
|
|
||||||
// BOOLEAN o int? Adso!
|
// BOOLEAN o int? Adso!
|
||||||
int xvt_fsys_access(const char *pathname, int mode)
|
int xvt_fsys_access(const char *pathname, int mode)
|
||||||
{
|
{
|
||||||
@ -3907,13 +3930,24 @@ void xvt_timer_destroy(long id)
|
|||||||
// Visual objects
|
// Visual objects
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void xvt_vobj_destroy(WINDOW win)
|
static wxWindow* SafeCastWin(WINDOW win)
|
||||||
{
|
{
|
||||||
wxWindow* w = wxDynamicCast(_nice_windows.Get(win), wxWindow);
|
wxWindow* w = wxDynamicCast(_nice_windows.Get(win), wxWindow);
|
||||||
if (w != NULL)
|
if (w != NULL)
|
||||||
{
|
{
|
||||||
wxASSERT(win == (WINDOW)w);
|
wxASSERT(win == (WINDOW)w);
|
||||||
|
const TwxWindow* tw = wxDynamicCast(w, TwxWindow);
|
||||||
|
if (tw != NULL && tw->InDestroy())
|
||||||
|
w = NULL;
|
||||||
|
}
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
void xvt_vobj_destroy(WINDOW win)
|
||||||
|
{
|
||||||
|
wxWindow* w = SafeCastWin(win);
|
||||||
|
if (w != NULL)
|
||||||
|
{
|
||||||
xvt_win_set_caret_visible(win, FALSE);
|
xvt_win_set_caret_visible(win, FALSE);
|
||||||
|
|
||||||
w->Destroy(); // same as delete w
|
w->Destroy(); // same as delete w
|
||||||
@ -4009,14 +4043,10 @@ long xvt_vobj_get_attr(WINDOW win, long data)
|
|||||||
SORRY_BOX(); // Obsoleto e non piu' usato
|
SORRY_BOX(); // Obsoleto e non piu' usato
|
||||||
break;
|
break;
|
||||||
case ATTR_NATIVE_WINDOW:
|
case ATTR_NATIVE_WINDOW:
|
||||||
if (_nice_windows.Get(win) != NULL)
|
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
const wxWindow* w = SafeCastWin(win);
|
||||||
CAST_WIN(win, w);
|
if (w != NULL)
|
||||||
ret = (long)w.GetHandle();
|
ret = (long)w->GetHandle();
|
||||||
#else
|
|
||||||
ret = win;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ATTR_SCREEN_HEIGHT:
|
case ATTR_SCREEN_HEIGHT:
|
||||||
@ -4095,7 +4125,7 @@ RCT* xvt_vobj_get_client_rect(WINDOW win, RCT *rctp)
|
|||||||
|
|
||||||
long xvt_vobj_get_data(WINDOW win)
|
long xvt_vobj_get_data(WINDOW win)
|
||||||
{
|
{
|
||||||
const TwxWindow* w = wxDynamicCast(_nice_windows.Get(win), TwxWindow);
|
const TwxWindow* w = wxDynamicCast(SafeCastWin(win), TwxWindow);
|
||||||
return w != NULL ? w->_app_data : 0L;
|
return w != NULL ? w->_app_data : 0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4510,7 +4540,7 @@ WINDOW statbar_create(int cid, int left, int top, int right, int bottom,
|
|||||||
int parent_rid, long parent_flags, char *parent_class)
|
int parent_rid, long parent_flags, char *parent_class)
|
||||||
{
|
{
|
||||||
wxStatusBar* pStatusBar = NULL;
|
wxStatusBar* pStatusBar = NULL;
|
||||||
wxFrame* w = wxDynamicCast(_nice_windows.Get(parent_win), wxFrame);
|
wxFrame* w = wxDynamicCast(SafeCastWin(parent_win), wxFrame);
|
||||||
if (w != NULL)
|
if (w != NULL)
|
||||||
{
|
{
|
||||||
const int nStyle = 0; // not wxST_SIZEGRIP
|
const int nStyle = 0; // not wxST_SIZEGRIP
|
||||||
@ -4518,7 +4548,7 @@ WINDOW statbar_create(int cid, int left, int top, int right, int bottom,
|
|||||||
if (pStatusBar != NULL)
|
if (pStatusBar != NULL)
|
||||||
{
|
{
|
||||||
const wxSize sz = pStatusBar->GetSize();
|
const wxSize sz = pStatusBar->GetSize();
|
||||||
const int widths[4] = { -1, sz.x/4, sz.x/4, 0 };
|
const int widths[4] = { -4, -3, -2, 0 };
|
||||||
pStatusBar->SetStatusWidths(3, widths);
|
pStatusBar->SetStatusWidths(3, widths);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
17
xvaga/xvt.h
17
xvaga/xvt.h
@ -364,6 +364,7 @@ XVTDLL BOOLEAN xvt_sys_get_user_name(char* name, int maxlen);
|
|||||||
XVTDLL BOOLEAN xvt_sys_goto_url(const char* url, const char* action);
|
XVTDLL BOOLEAN xvt_sys_goto_url(const char* url, const char* action);
|
||||||
XVTDLL BOOLEAN xvt_sys_dongle_server_is_running();
|
XVTDLL BOOLEAN xvt_sys_dongle_server_is_running();
|
||||||
XVTDLL BOOLEAN xvt_sys_find_editor(const char* file, char* editor);
|
XVTDLL BOOLEAN xvt_sys_find_editor(const char* file, char* editor);
|
||||||
|
XVTDLL BOOLEAN xvt_sys_get_env(const char* varname, char* value, int max_size);
|
||||||
XVTDLL int xvt_sys_get_profile_string(const char* file, const char* paragraph, const char* name,
|
XVTDLL int xvt_sys_get_profile_string(const char* file, const char* paragraph, const char* name,
|
||||||
const char* defval, char* value, int maxsize);
|
const char* defval, char* value, int maxsize);
|
||||||
XVTDLL BOOLEAN xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name,
|
XVTDLL BOOLEAN xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name,
|
||||||
@ -376,9 +377,11 @@ XVTDLL int xvt_sys_get_version(char* os_version, char* ptk_version, in
|
|||||||
XVTDLL unsigned int xvt_sys_load_icon(const char* file);
|
XVTDLL unsigned int xvt_sys_load_icon(const char* file);
|
||||||
XVTDLL void xvt_sys_sleep(unsigned long msec);
|
XVTDLL void xvt_sys_sleep(unsigned long msec);
|
||||||
XVTDLL BOOLEAN xvt_sys_test_network_version();
|
XVTDLL BOOLEAN xvt_sys_test_network_version();
|
||||||
XVTDLL void xvt_sys_searchenv(const char* filename, const char* varname, char* pathname);
|
XVTDLL void xvt_sys_search_env(const char* filename, const char* varname, char* pathname);
|
||||||
|
XVTDLL void xvt_sys_searchenv(const char * filename, const char * varname, char * pathname); // DEPRECATED!
|
||||||
|
XVTDLL BOOLEAN xvt_sys_set_env(const char* varname, const char* value);
|
||||||
XVTDLL void xvt_sys_sorry_box(const char* func, const char* file, int line);
|
XVTDLL void xvt_sys_sorry_box(const char* func, const char* file, int line);
|
||||||
XVTDLL void xvt_sys_deprecated_box(const char * file, int line);
|
XVTDLL void xvt_sys_deprecated_box(const char* file, int line);
|
||||||
|
|
||||||
XVTDLL struct tm* xvt_time_now();
|
XVTDLL struct tm* xvt_time_now();
|
||||||
XVTDLL long xvt_timer_create(WINDOW win, long interval);
|
XVTDLL long xvt_timer_create(WINDOW win, long interval);
|
||||||
@ -425,7 +428,9 @@ XVTDLL void xvt_win_trap_pointer(WINDOW win);
|
|||||||
XVTDLL BOOLEAN xvt_pane_add(WINDOW parent, WINDOW pane, const char* name, int dock, int flags);
|
XVTDLL BOOLEAN xvt_pane_add(WINDOW parent, WINDOW pane, const char* name, int dock, int flags);
|
||||||
XVTDLL BOOLEAN xvt_pane_change_flags(WINDOW pane, int set, int reset);
|
XVTDLL BOOLEAN xvt_pane_change_flags(WINDOW pane, int set, int reset);
|
||||||
XVTDLL BOOLEAN xvt_pane_detach(WINDOW pane);
|
XVTDLL BOOLEAN xvt_pane_detach(WINDOW pane);
|
||||||
XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW pane, int min_size, int max_size);
|
XVTDLL BOOLEAN xvt_pane_manager_load_perspective(WINDOW win, const char* str);
|
||||||
|
XVTDLL int xvt_pane_manager_save_perspective(WINDOW win, char* str, int max_size);
|
||||||
|
XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW pane, int min_size, int best_size, int max_size);
|
||||||
XVTDLL BOOLEAN xvt_pane_set_title(WINDOW pane, const char* title);
|
XVTDLL BOOLEAN xvt_pane_set_title(WINDOW pane, const char* title);
|
||||||
|
|
||||||
typedef int ODBC_CALLBACK(void*,int,char**, char**);
|
typedef int ODBC_CALLBACK(void*,int,char**, char**);
|
||||||
@ -445,10 +450,10 @@ XVTDLL int xvt_net_get_status();
|
|||||||
|
|
||||||
#define SORRY_BOX() xvt_sys_sorry_box(__FUNCTION__, __FILE__, __LINE__)
|
#define SORRY_BOX() xvt_sys_sorry_box(__FUNCTION__, __FILE__, __LINE__)
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifdef NDEBUG
|
||||||
#define DEPRECATED_BOX() xvt_sys_deprecated_box(__FILE__, __LINE__)
|
|
||||||
#else
|
|
||||||
#define DEPRECATED_BOX()
|
#define DEPRECATED_BOX()
|
||||||
|
#else
|
||||||
|
#define DEPRECATED_BOX() xvt_sys_deprecated_box(__FUNCTION__, __FILE__, __LINE__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
102
xvaga/xvtctl.cpp
102
xvaga/xvtctl.cpp
@ -129,6 +129,7 @@ protected:
|
|||||||
void OnCollapsed(wxTreeEvent& e); // Called when node is collapsed
|
void OnCollapsed(wxTreeEvent& e); // Called when node is collapsed
|
||||||
void OnSelected(wxTreeEvent& e); // Calls OnClick(e, false)
|
void OnSelected(wxTreeEvent& e); // Calls OnClick(e, false)
|
||||||
void OnActivated(wxTreeEvent& e); // Calls OnClick(e, true)
|
void OnActivated(wxTreeEvent& e); // Calls OnClick(e, true)
|
||||||
|
void OnRightDown(wxMouseEvent& e);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void SetNodeImages(const wxTreeItemId& id, XVT_IMAGE item_image,
|
void SetNodeImages(const wxTreeItemId& id, XVT_IMAGE item_image,
|
||||||
@ -335,31 +336,34 @@ void xvt_btn_set_images(WINDOW win, XVT_IMAGE up, XVT_IMAGE down)
|
|||||||
// Pane interface
|
// Pane interface
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static wxAuiPaneInfo* LockPane(WINDOW win)
|
static wxAuiManager* FindPaneManager(WINDOW win)
|
||||||
{
|
{
|
||||||
|
wxAuiManager* pManager = NULL;
|
||||||
if (win != NULL_WIN)
|
if (win != NULL_WIN)
|
||||||
{
|
{
|
||||||
wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
|
wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
|
||||||
wxAuiManager* pManager = wxAuiManager::GetManager(pwin);
|
pManager = wxAuiManager::GetManager(pwin);
|
||||||
if (pManager != NULL)
|
}
|
||||||
{
|
return pManager;
|
||||||
wxAuiPaneInfo& pane = pManager->GetPane(pwin);
|
}
|
||||||
if (pane.IsOk())
|
|
||||||
return &pane;
|
static wxAuiPaneInfo* LockPane(WINDOW win)
|
||||||
}
|
{
|
||||||
|
wxAuiManager* pManager = FindPaneManager(win);
|
||||||
|
if (pManager != NULL)
|
||||||
|
{
|
||||||
|
wxAuiPaneInfo& pane = pManager->GetPane((wxWindow*)win);
|
||||||
|
if (pane.IsOk())
|
||||||
|
return &pane;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UnlockPane(WINDOW win)
|
static void UnlockPane(WINDOW win)
|
||||||
{
|
{
|
||||||
if (win != NULL_WIN)
|
wxAuiManager* pManager = FindPaneManager(win);
|
||||||
{
|
if (pManager != NULL)
|
||||||
wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
|
pManager->Update();
|
||||||
wxAuiManager* pManager = wxAuiManager::GetManager(pwin);
|
|
||||||
if (pManager != NULL)
|
|
||||||
pManager->Update();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN xvt_pane_add(WINDOW win, WINDOW pane, const char* name, int dock, int flags)
|
BOOLEAN xvt_pane_add(WINDOW win, WINDOW pane, const char* name, int dock, int flags)
|
||||||
@ -400,20 +404,46 @@ XVTDLL BOOLEAN xvt_pane_change_flags(WINDOW win, int set, int rst)
|
|||||||
XVTDLL BOOLEAN xvt_pane_detach(WINDOW win)
|
XVTDLL BOOLEAN xvt_pane_detach(WINDOW win)
|
||||||
{
|
{
|
||||||
BOOLEAN ok = FALSE;
|
BOOLEAN ok = FALSE;
|
||||||
if (win != NULL_WIN)
|
wxAuiManager* pManager = FindPaneManager(win);
|
||||||
|
if (pManager != NULL)
|
||||||
{
|
{
|
||||||
wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
|
ok = pManager->DetachPane((wxWindow*)win);
|
||||||
wxAuiManager* pManager = wxAuiManager::GetManager(pwin);
|
pManager->Update();
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
XVTDLL BOOLEAN xvt_pane_manager_load_perspective(WINDOW win, const char* perspective)
|
||||||
|
{
|
||||||
|
BOOLEAN ok = FALSE;
|
||||||
|
if (perspective && *perspective)
|
||||||
|
{
|
||||||
|
wxAuiManager* pManager = FindPaneManager(win);
|
||||||
if (pManager != NULL)
|
if (pManager != NULL)
|
||||||
{
|
{
|
||||||
ok = pManager->DetachPane(pwin);
|
const wxString str = perspective;
|
||||||
pManager->Update();
|
ok = pManager->LoadPerspective(str, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW win, int min_size, int max_size)
|
XVTDLL int xvt_pane_manager_save_perspective(WINDOW win, char* perspective, int max_size)
|
||||||
|
{
|
||||||
|
int nSize = 0;
|
||||||
|
wxAuiManager* pManager = FindPaneManager(win);
|
||||||
|
if (pManager != NULL)
|
||||||
|
{
|
||||||
|
const wxString str = pManager->SavePerspective();
|
||||||
|
nSize = str.Len()+1;
|
||||||
|
if (perspective != NULL && max_size > 0)
|
||||||
|
wxStrncpy(perspective, str, max_size);
|
||||||
|
}
|
||||||
|
return nSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW win, int min_size, int best_size, int max_size)
|
||||||
{
|
{
|
||||||
BOOLEAN ok = FALSE;
|
BOOLEAN ok = FALSE;
|
||||||
wxAuiPaneInfo* pane = LockPane(win);
|
wxAuiPaneInfo* pane = LockPane(win);
|
||||||
@ -421,19 +451,28 @@ XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW win, int min_size, int max_size)
|
|||||||
{
|
{
|
||||||
if (min_size > 0 || max_size > 0)
|
if (min_size > 0 || max_size > 0)
|
||||||
{
|
{
|
||||||
wxSize szMin(-1, -1), szMax(-1, -1);
|
if (best_size <= 0)
|
||||||
|
{
|
||||||
|
if (min_size > 0)
|
||||||
|
best_size = max_size > 0 ? (min_size+max_size) / 2 : min_size;
|
||||||
|
else
|
||||||
|
best_size = max_size;
|
||||||
|
}
|
||||||
|
wxSize szMin(-1, -1), szBst(-1, -1), szMax(-1, -1);
|
||||||
if (pane->IsTopDockable() || pane->IsBottomDockable())
|
if (pane->IsTopDockable() || pane->IsBottomDockable())
|
||||||
{
|
{
|
||||||
szMin.y = min_size;
|
szMin.y = min_size;
|
||||||
|
szBst.y = best_size;
|
||||||
szMax.y = max_size;
|
szMax.y = max_size;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
szMin.x = min_size;
|
szMin.x = min_size;
|
||||||
|
szBst.x = best_size;
|
||||||
szMax.x = max_size;
|
szMax.x = max_size;
|
||||||
}
|
}
|
||||||
pane->MinSize(szMin);
|
pane->MinSize(szMin);
|
||||||
pane->BestSize(szMin);
|
pane->BestSize(szBst);
|
||||||
pane->MaxSize(szMax);
|
pane->MaxSize(szMax);
|
||||||
}
|
}
|
||||||
pane->Resizable(min_size != max_size);
|
pane->Resizable(min_size != max_size);
|
||||||
@ -679,6 +718,7 @@ BEGIN_EVENT_TABLE(TwxTreeCtrl, wxTreeCtrl)
|
|||||||
EVT_TREE_ITEM_COLLAPSED(wxID_ANY, TwxTreeCtrl::OnCollapsed)
|
EVT_TREE_ITEM_COLLAPSED(wxID_ANY, TwxTreeCtrl::OnCollapsed)
|
||||||
EVT_TREE_SEL_CHANGED(wxID_ANY, TwxTreeCtrl::OnSelected)
|
EVT_TREE_SEL_CHANGED(wxID_ANY, TwxTreeCtrl::OnSelected)
|
||||||
EVT_TREE_ITEM_ACTIVATED(wxID_ANY, TwxTreeCtrl::OnActivated)
|
EVT_TREE_ITEM_ACTIVATED(wxID_ANY, TwxTreeCtrl::OnActivated)
|
||||||
|
EVT_RIGHT_DOWN(TwxTreeCtrl::OnRightDown)
|
||||||
END_EVENT_TABLE();
|
END_EVENT_TABLE();
|
||||||
|
|
||||||
#define CAST_TREEVIEW(win, tv) TwxTreeCtrl& tv = *wxStaticCast((wxObject*)win, TwxTreeCtrl);
|
#define CAST_TREEVIEW(win, tv) TwxTreeCtrl& tv = *wxStaticCast((wxObject*)win, TwxTreeCtrl);
|
||||||
@ -754,6 +794,22 @@ void TwxTreeCtrl::OnSelected(wxTreeEvent& evt)
|
|||||||
void TwxTreeCtrl::OnActivated(wxTreeEvent& evt)
|
void TwxTreeCtrl::OnActivated(wxTreeEvent& evt)
|
||||||
{ OnClick(evt, true); }
|
{ OnClick(evt, true); }
|
||||||
|
|
||||||
|
void TwxTreeCtrl::OnRightDown(wxMouseEvent& evt)
|
||||||
|
{
|
||||||
|
TwxWindow* pParent = wxDynamicCast(GetParent(), TwxWindow);
|
||||||
|
if (pParent != NULL)
|
||||||
|
{
|
||||||
|
EVENT e; memset(&e, 0, sizeof(EVENT));
|
||||||
|
e.type = E_MOUSE_DOWN;
|
||||||
|
e.v.mouse.button = 1;
|
||||||
|
e.v.mouse.control = evt.ControlDown();
|
||||||
|
e.v.mouse.shift = evt.ShiftDown();
|
||||||
|
e.v.mouse.where.h = evt.GetX();
|
||||||
|
e.v.mouse.where.v = evt.GetY();
|
||||||
|
pParent->DoXvtEvent(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int TwxTreeCtrl::img2int(XVT_IMAGE xvt_img)
|
int TwxTreeCtrl::img2int(XVT_IMAGE xvt_img)
|
||||||
{
|
{
|
||||||
int i = -1;
|
int i = -1;
|
||||||
|
@ -880,13 +880,15 @@ BOOLEAN TwxWindow::AddPane(wxWindow* wnd, const char* caption, int nDock, int nF
|
|||||||
switch (nDock)
|
switch (nDock)
|
||||||
{
|
{
|
||||||
case 1: // Left
|
case 1: // Left
|
||||||
pane.Left().Floatable(true).LeftDockable().RightDockable().MinSize(sz.x/2, -1);
|
pane.Left().Floatable(true).LeftDockable().RightDockable();
|
||||||
|
pane.MinSize(sz.x/2, -1).BestSize(sz.x, -1).MaxSize(3*sz.x/2, -1);
|
||||||
break;
|
break;
|
||||||
case 2: // Top
|
case 2: // Top
|
||||||
pane.Top().Floatable(true).TopDockable().BottomDockable().MinSize(-1, sz.y/2);
|
pane.Top().Floatable(true).TopDockable().BottomDockable().MinSize(-1, sz.y/2);
|
||||||
break;
|
break;
|
||||||
case 3: // Right
|
case 3: // Right
|
||||||
pane.Right().Floatable(true).LeftDockable().RightDockable().MinSize(sz.x/2, -1);
|
pane.Right().Floatable(true).LeftDockable().RightDockable();
|
||||||
|
pane.MinSize(sz.x/2, -1).BestSize(sz.x, -1).MaxSize(3*sz.x/2, -1);
|
||||||
break;
|
break;
|
||||||
case 4: // Bottom
|
case 4: // Bottom
|
||||||
pane.Bottom().Floatable(true).TopDockable().BottomDockable().MinSize(-1, sz.y/2);
|
pane.Bottom().Floatable(true).TopDockable().BottomDockable().MinSize(-1, sz.y/2);
|
||||||
@ -928,44 +930,48 @@ TwxWindow::TwxWindow()
|
|||||||
TwxWindow::TwxWindow(wxWindow *parent, wxWindowID id, const wxString& title,
|
TwxWindow::TwxWindow(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||||
const wxPoint& pos, const wxSize& size, long style)
|
const wxPoint& pos, const wxSize& size, long style)
|
||||||
: TwxWindowBase(parent, id, title, pos, size, style),
|
: TwxWindowBase(parent, id, title, pos, size, style),
|
||||||
m_menu(NULL), _eh(NULL), _app_data(0L), _timer(NULL), m_pManager(NULL)
|
m_menu(NULL), _eh(NULL), _app_data(0L), _timer(NULL),
|
||||||
|
m_pManager(NULL), m_bInDestroy(false)
|
||||||
{
|
{
|
||||||
_nice_windows.Put((WINDOW)this, this);
|
_nice_windows.Put((WINDOW)this, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
TwxWindow::~TwxWindow()
|
TwxWindow::~TwxWindow()
|
||||||
{
|
{
|
||||||
_nice_windows.Delete((WINDOW)this);
|
if (!m_bInDestroy) // Controllo di non essere RIchiamato dalla gestione di E_DESTROY
|
||||||
|
|
||||||
EVENT e; memset(&e, 0, sizeof(EVENT));
|
|
||||||
e.type = E_DESTROY;
|
|
||||||
DoXvtEvent(e);
|
|
||||||
|
|
||||||
// Rendo praticamente impossibile risalire a questo oggetto d'ora in poi
|
|
||||||
_eh = NULL;
|
|
||||||
_app_data = 0L;
|
|
||||||
|
|
||||||
if (HasCapture())
|
|
||||||
{
|
{
|
||||||
ReleaseMouse();
|
m_bInDestroy = true;
|
||||||
xvt_win_release_pointer(); // Paranoid?
|
EVENT e; memset(&e, 0, sizeof(EVENT));
|
||||||
}
|
e.type = E_DESTROY;
|
||||||
|
DoXvtEvent(e);
|
||||||
if (_timer != NULL)
|
|
||||||
delete _timer;
|
|
||||||
|
|
||||||
if (m_pManager != NULL)
|
// Rendo praticamente impossibile risalire a questo oggetto d'ora in poi
|
||||||
{
|
_nice_windows.Delete((WINDOW)this);
|
||||||
m_pManager->UnInit(); // Obbligatorio ma, chissa' perche', non gestito dal distruttore!
|
_eh = NULL;
|
||||||
delete m_pManager;
|
_app_data = 0L;
|
||||||
}
|
|
||||||
|
|
||||||
if (m_menu)
|
if (HasCapture())
|
||||||
{
|
{
|
||||||
xvt_res_free_menu_tree(m_menu);
|
ReleaseMouse();
|
||||||
m_menu = NULL;
|
xvt_win_release_pointer(); // Paranoid?
|
||||||
((TTaskWin*)_task_win)->PopMenuTree();
|
}
|
||||||
}
|
|
||||||
|
if (_timer != NULL)
|
||||||
|
delete _timer;
|
||||||
|
|
||||||
|
if (m_pManager != NULL)
|
||||||
|
{
|
||||||
|
m_pManager->UnInit(); // Obbligatorio ma, chissa' perche', non gestito dal distruttore!
|
||||||
|
delete m_pManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_menu)
|
||||||
|
{
|
||||||
|
xvt_res_free_menu_tree(m_menu);
|
||||||
|
m_menu = NULL;
|
||||||
|
((TTaskWin*)_task_win)->PopMenuTree();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
@ -136,6 +136,7 @@ class TwxWindow : public TwxWindowBase
|
|||||||
private:
|
private:
|
||||||
MENU_ITEM* m_menu;
|
MENU_ITEM* m_menu;
|
||||||
wxAuiManager* m_pManager;
|
wxAuiManager* m_pManager;
|
||||||
|
bool m_bInDestroy;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void OnChar(wxKeyEvent& e);
|
virtual void OnChar(wxKeyEvent& e);
|
||||||
@ -161,6 +162,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
void DoXvtEvent(EVENT& e);
|
void DoXvtEvent(EVENT& e);
|
||||||
virtual void OnPaint(wxPaintEvent& e);
|
virtual void OnPaint(wxPaintEvent& e);
|
||||||
|
virtual bool InDestroy() const { return m_bInDestroy; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WIN_TYPE _type;
|
WIN_TYPE _type;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user