bool operator()(const TVariableInfo& lhs, const TVariableInfo& rhs) const { int lhsSortOrder = GetSortOrder(lhs.type); int rhsSortOrder = GetSortOrder(rhs.type); if (lhsSortOrder != rhsSortOrder) { return lhsSortOrder < rhsSortOrder; } // Sort by largest first. return lhs.size > rhs.size; }
/** \fn GalleryDatabaseHelper::LoadFiles(QList<ImageMetadata *>* , int) * \brief Loads all file information from the database for a given directory * \param dbList The list where the results are stored * \param parentId The id of the given directory * \return void */ void GalleryDatabaseHelper::LoadFiles(QList<ImageMetadata *>* dbList, int parentId) { dbList->clear(); MSqlQuery query(MSqlQuery::InitCon()); query.prepare("SELECT " "file_id, CONCAT_WS('/', path, filename), name, path, dir_id, " "type, modtime, size, extension, " "angle, date, zoom, hidden, orientation " "FROM gallery_files " "WHERE (dir_id = :PARENTID) " "AND (hidden = '0' OR hidden = :HIDDEN) " "ORDER BY :ORDERBY"); query.bindValue(":PARENTID", parentId); query.bindValue(":HIDDEN", gCoreContext->GetNumSetting("GalleryShowHiddenFiles")); query.bindValue(":ORDERBY", GetSortOrder()); if (!query.exec()) LOG(VB_GENERAL, LOG_ERR, MythDB::DBErrorMessage(query.lastError())); while (query.next()) { ImageMetadata *im = new ImageMetadata(); LoadFileValues(query, im); dbList->append(im); } }
void Qualify(CppBase& base) { Md5Stream md5; Vector<int> no = GetSortOrder(base.GetKeys()); for(int q = 0; q < base.GetCount(); q++) { int ni = no[q]; md5 << base.GetKey(ni); const Array<CppItem>& n = base[ni]; for(int i = 0; i < n.GetCount(); i++) { const CppItem& m = n[i]; if(m.IsType()) md5 << ';' << m.ptype; } md5 << '\n'; } String c5 = md5.FinishString(); if(c5 != base.types_md5) { // set of types changed, requalify everything base.types_md5 = c5; for(int ni = 0; ni < base.GetCount(); ni++) { Array<CppItem>& n = base[ni]; for(int i = 0; i < n.GetCount(); i++) n[i].qualify = true; } } base.namespaces.Clear(); QualifyPass0(base); QualifyPass1(base); QualifyPass2(base); }
/** \fn GalleryDatabaseHelper::LoadFiles(QList<ImageMetadata *>* , int) * \brief Loads all file information from the database for a given directory * \param dbList The list where the results are stored * \param parentId The id of the given directory * \return void */ void GalleryDatabaseHelper::LoadFiles(QList<ImageMetadata *>* dbList, int parentId) { dbList->clear(); MSqlQuery query(MSqlQuery::InitCon()); query.prepare( QString("SELECT " "file_id, filename, name, path, dir_id, " "type, modtime, size, extension, " "angle, date, zoom, " "hidden, orientation " "FROM gallery_files " "WHERE (dir_id = '%1') " "AND (hidden = '0' OR hidden = '%2') " "ORDER BY %3;") .arg(parentId) .arg(gCoreContext->GetNumSetting("GalleryShowHiddenFiles")) .arg(GetSortOrder())); if (!query.exec()) LOG(VB_GENERAL, LOG_ERR, MythDB::DBErrorMessage(query.lastError())); if (query.size() > 0) { while (query.next()) { ImageMetadata *im = new ImageMetadata(); LoadFileValues(query, im); dbList->append(im); } } }
void CHeaderCtrlEx::SetSortArrow() { HDITEM sthdItem = { 0 }; sthdItem.mask = HDI_IMAGE | HDI_FORMAT; sthdItem.fmt = HDF_IMAGE | HDF_STRING; sthdItem.iImage = GetSortOrder() ? 1 : 0; VERIFY( SetItem( GetSortItem(), &sthdItem )); }// End SetSortArrow
void MAPITableIterator::Initialize(LPMAPITABLE pTable, LPMAPIFOLDER pFolder, MAPISession &session, ULONG ulItemTypeMask) { UNREFERENCED_PARAMETER(ulItemTypeMask); HRESULT hr = S_OK; m_session = &session; if (m_pParentFolder != NULL) { UlRelease(m_pParentFolder); m_pParentFolder = NULL; } if (m_pRows != NULL) FreeProws(m_pRows); m_pParentFolder = pFolder; m_pTable = pTable; hr = m_pTable->SetColumns(GetProps(), 0); if (FAILED(hr)) { throw GenericException(hr, L"MAPITableIterator::Initialize():SetColumns Failed.",ERR_SET_RESTRICTION, __LINE__, __FILE__); } if (GetSortOrder() != NULL) { if (FAILED(hr = m_pTable->SortTable(GetSortOrder(), 0))) { throw GenericException(hr, L"MAPITableIterator::Initialize():SortTable Failed.",ERR_SET_RESTRICTION, __LINE__, __FILE__); } } if (FAILED(hr = m_pTable->GetRowCount(0, &m_totalRows))) { throw GenericException(hr, L"MAPITableIterator::Initialize():GetRowCount Failed.",ERR_SET_RESTRICTION, __LINE__, __FILE__); } if (FAILED(hr = m_pTable->QueryRows(m_batchSize, 0, &m_pRows))) { throw GenericException(hr, L"MAPITableIterator::Initialize():QueryRows Failed.",ERR_SET_RESTRICTION, __LINE__, __FILE__); } }
void Puzzle::Scores() { WithScoreLayout<TopWindow> d; CtrlLayoutOK(d, t_("Best scores")); d.score.AddColumn(t_("Dimension")); d.score.AddColumn(t_("Moves")); d.score.ColumnWidths("71 48"); d.score.NoCursor().NoGrid(); Vector<int> o = GetSortOrder(score.GetKeys()); for(int i = 0; i < o.GetCount(); i++) d.score.Add(score.GetKey(o[i]), score[o[i]]); d.Run(); }
void DlgCalc::CmdStore() { WithCalcStoreLayout<TopWindow> stdlg; CtrlLayoutOKCancel(stdlg, NFormat("Store %vt", result_val)); stdlg.var.SetFilter(CharFilterCalcIdent); stdlg.list.AddColumn("Variable"); stdlg.list.AddColumn("Value"); const CalcSymbols& tos = calc_context->stack.Top(); Vector<int> order = GetSortOrder(tos.var_index); for(int i = 0; i < order.GetCount(); i++) { int o = order[i]; stdlg.list.Add(tos.var_index[o], tos.var_value[o]); } if(stdlg.Run() == IDOK) calc_context->Set(~stdlg.var, result_val, true); }
int SortDirectories (void) { int criterium; criterium = GetSortCriterium(); switch (criterium) { case NAMESORTED: case EXTENSIONSORTED: case DATETIMESORTED: case SIZESORTED: break; default: return TRUE; } return SortFAT(criterium, GetSortOrder()); }
bool C4GameSave::Close() { bool fSuccess = true; // any group open? if (pSaveGroup) { // sort group const char *szSortOrder = GetSortOrder(); if (szSortOrder) pSaveGroup->Sort(szSortOrder); // close if owned group if (fOwnGroup) { fSuccess = !!pSaveGroup->Close(); delete pSaveGroup; fOwnGroup = false; } pSaveGroup = nullptr; } return fSuccess; }
void Delaunay::Build(const Array<Pointf>& p, double e) { epsilon = e; epsilon2 = e * e; points <<= p; order = GetSortOrder(points, &PointOrder); tihull = -1; int npoints = p.GetCount(); #ifdef DELDUMP RLOG("Delaunay(" << npoints << " points)"); for(int dd = 0; dd < npoints; dd++) RLOG("[" << dd << "] = " << points[dd]); #endif triangles.Clear(); if(order.IsEmpty()) return; const Pointf *p0 = &points[order[0]]; int xi = 0; do if(++xi >= points.GetCount()) return; while(IsNear(*p0, points[order[xi]])); // pass 1: create pair of improper triangles CreatePair(order[0], order[xi]); while(++xi < npoints) AddHull(order[xi]); #ifdef DELDUMP RLOG("//Delaunay: " << triangles.GetCount() << " triangles"); for(int td = 0; td < triangles.GetCount(); td++) { const Triangle& t = triangles[td]; RLOG(NFormat("[%d] = [%d, %d, %d] (%4v)", td, t[0], t[1], t[2], t.IsProper() ? (At(t, 1) - At(t, 0)) % (At(t, 2) - At(t, 1)) : double(Null)) << NFormat(" -> [%d & %d, %d & %d, %d & %d]", t.Next(0), t.NextIndex(0), t.Next(1), t.NextIndex(1), t.Next(2), t.NextIndex(2))); } RLOG(""); #endif int clean = 0; do { int old_clean = clean; clean = triangles.GetCount(); for(int i = clean; --i >= old_clean;) if(triangles[i].IsProper()) { Triangle& t = triangles[i]; for(int x = 0; x < 3; x++) { int j = t.Next(x); Triangle& u = triangles[j]; if(u.IsProper()) { int x1 = x + 1, x2 = x + 2; if(x1 >= 3) x1 -= 3; if(x2 >= 3) x2 -= 3; Pointf A = At(t, x); Pointf B = At(t, x1); Pointf C = At(t, x2); int y = t.NextIndex(x); Pointf D = At(u, y); double t1 = (A - C) ^ (B - A); double t2 = (B - C) % (B - A); double u1 = (D - C) ^ (B - D); double u2 = (B - C) % (B - D); if(t1 * u2 < t2 * u1) { // not locally Delaunay, flip int y1 = y + 1, y2 = y + 2; if(y1 >= 3) y1 -= 3; if(y2 >= 3) y2 -= 3; #ifdef DELDUMP RLOG("Delaunay flip (" << i << " / " << x << ", " << j << " / " << y << ")"); RLOG(i << ": " << t[x] << " - " << A << ", " << t[x1] << " - " << B << ", " << t[x2] << " - " << C); RLOG(j << ": " << u[y] << " - " << D << ", " << u[y1] << " - " << At(u, y1) << ", " << u[y2] << " - " << At(u, y2)); RLOG("t1 = " << t1 << ", t2 = " << t2 << ", t = " << t1 / t2); RLOG("u1 = " << u1 << ", u2 = " << u2 << ", u = " << u1 / u2); #endif Triangle ot = t; Triangle ou = u; ASSERT(ot[x1] == ou[y2] && ot[x2] == ou[y1]); t.Set(ot[x1], ou[y], ot[x]); u.Set(ou[y1], ot[x], ou[y]); Link(i, 0, j, 0); Link(i, 1, ot.Next(x2), ot.NextIndex(x2)); Link(i, 2, ou.Next(y1), ou.NextIndex(y1)); Link(j, 1, ou.Next(y2), ou.NextIndex(y2)); Link(j, 2, ot.Next(x1), ot.NextIndex(x1)); clean = i; #ifdef DELDUMP RLOG("After flip: [" << i << "] = " << t[x] << ", " << t[x1] << ", " << t[y2] << "; [" << j << "] = " << u[y] << ", " << u[y1] << ", " << u[y2]); #endif } } } } } while(clean < triangles.GetCount()); }
int Panel::SetPluginCommand(int Command,int Param1,void* Param2) { _ALGO(CleverSysLog clv(L"Panel::SetPluginCommand")); _ALGO(SysLog(L"(Command=%s, Param1=[%d/0x%08X], Param2=[%d/0x%08X])",_FCTL_ToName(Command),(int)Param1,Param1,(int)Param2,Param2)); int Result=FALSE; ProcessingPluginCommand++; switch (Command) { case FCTL_SETVIEWMODE: Result = Parent()->ChangePanelViewMode(shared_from_this(), Param1, Parent()->IsTopWindow()); break; case FCTL_SETSORTMODE: { int Mode=Param1; if ((Mode>SM_DEFAULT) && (Mode < SM_COUNT)) { SetSortMode(panel_sort(Mode - 1)); // Уменьшим на 1 из-за SM_DEFAULT Result=TRUE; } break; } case FCTL_SETSORTORDER: { ChangeSortOrder(Param1 != 0); Result=TRUE; break; } case FCTL_SETDIRECTORIESFIRST: { ChangeDirectoriesFirst(Param1 != 0); Result=TRUE; break; } case FCTL_CLOSEPANEL: if (m_PanelMode == panel_mode::PLUGIN_PANEL) { string folder=NullToEmpty((const wchar_t *)Param2); SetCurDir(folder,true); if (folder.empty()) Update(UPDATE_KEEP_SELECTION); Redraw(); } Result=TRUE; break; case FCTL_GETPANELINFO: { PanelInfo *Info=(PanelInfo *)Param2; if(!CheckStructSize(Info)) break; *Info = {}; Info->StructSize = sizeof(PanelInfo); UpdateIfRequired(); Info->OwnerGuid=FarGuid; Info->PluginHandle=nullptr; switch (GetType()) { case panel_type::FILE_PANEL: Info->PanelType=PTYPE_FILEPANEL; break; case panel_type::TREE_PANEL: Info->PanelType=PTYPE_TREEPANEL; break; case panel_type::QVIEW_PANEL: Info->PanelType=PTYPE_QVIEWPANEL; break; case panel_type::INFO_PANEL: Info->PanelType=PTYPE_INFOPANEL; break; } int X1,Y1,X2,Y2; GetPosition(X1,Y1,X2,Y2); Info->PanelRect.left=X1; Info->PanelRect.top=Y1; Info->PanelRect.right=X2; Info->PanelRect.bottom=Y2; Info->ViewMode=GetViewMode(); Info->SortMode = static_cast<OPENPANELINFO_SORTMODES>((GetSortMode() < panel_sort::COUNT? SM_UNSORTED - static_cast<int>(panel_sort::UNSORTED) : 0) + static_cast<int>(GetSortMode())); Info->Flags |= Global->Opt->ShowHidden? PFLAGS_SHOWHIDDEN : 0; Info->Flags |= Global->Opt->Highlight? PFLAGS_HIGHLIGHT : 0; Info->Flags |= GetSortOrder()? PFLAGS_REVERSESORTORDER : 0; Info->Flags |= GetSortGroups()? PFLAGS_USESORTGROUPS : 0; Info->Flags |= GetSelectedFirstMode()? PFLAGS_SELECTEDFIRST : 0; Info->Flags |= GetDirectoriesFirst()? PFLAGS_DIRECTORIESFIRST : 0; Info->Flags |= (GetMode() == panel_mode::PLUGIN_PANEL)? PFLAGS_PLUGIN : 0; Info->Flags |= IsVisible()? PFLAGS_VISIBLE : 0; Info->Flags |= IsFocused()? PFLAGS_FOCUS : 0; Info->Flags |= Parent()->IsLeft(this)? PFLAGS_PANELLEFT : 0; if (GetType() == panel_type::FILE_PANEL) { FileList *DestFilePanel=(FileList *)this; if (Info->Flags&PFLAGS_PLUGIN) { Info->OwnerGuid = DestFilePanel->GetPluginHandle()->plugin()->Id(); Info->PluginHandle = DestFilePanel->GetPluginHandle()->panel(); static int Reenter=0; if (!Reenter) { Reenter++; OpenPanelInfo PInfo; DestFilePanel->GetOpenPanelInfo(&PInfo); if (PInfo.Flags & OPIF_REALNAMES) Info->Flags |= PFLAGS_REALNAMES; if (PInfo.Flags & OPIF_DISABLEHIGHLIGHTING) Info->Flags &= ~PFLAGS_HIGHLIGHT; if (PInfo.Flags & OPIF_USECRC32) Info->Flags |= PFLAGS_USECRC32; if (PInfo.Flags & OPIF_SHORTCUT) Info->Flags |= PFLAGS_SHORTCUT; Reenter--; } } DestFilePanel->PluginGetPanelInfo(*Info); } if (!(Info->Flags&PFLAGS_PLUGIN)) // $ 12.12.2001 DJ - на неплагиновой панели - всегда реальные имена Info->Flags |= PFLAGS_REALNAMES; Result=TRUE; break; } case FCTL_GETPANELPREFIX: { string strTemp; if (GetType() == panel_type::FILE_PANEL && GetMode() == panel_mode::PLUGIN_PANEL) { PluginInfo PInfo = {sizeof(PInfo)}; FileList *DestPanel = ((FileList*)this); if (DestPanel->GetPluginInfo(&PInfo)) strTemp = NullToEmpty(PInfo.CommandPrefix); } if (Param1&&Param2) xwcsncpy((wchar_t*)Param2, strTemp.c_str(), Param1); Result=(int)strTemp.size()+1; break; } case FCTL_GETPANELHOSTFILE: case FCTL_GETPANELFORMAT: { string strTemp; if (GetType() == panel_type::FILE_PANEL) { FileList *DestFilePanel=(FileList *)this; static int Reenter=0; if (!Reenter && GetMode() == panel_mode::PLUGIN_PANEL) { Reenter++; OpenPanelInfo PInfo; DestFilePanel->GetOpenPanelInfo(&PInfo); switch (Command) { case FCTL_GETPANELHOSTFILE: strTemp=NullToEmpty(PInfo.HostFile); break; case FCTL_GETPANELFORMAT: strTemp=NullToEmpty(PInfo.Format); break; } Reenter--; } } if (Param1&&Param2) xwcsncpy((wchar_t*)Param2, strTemp.c_str(), Param1); Result=(int)strTemp.size()+1; break; } case FCTL_GETPANELDIRECTORY: { static int Reenter=0; if(!Reenter) { Reenter++; ShortcutInfo Info; GetShortcutInfo(Info); Result = static_cast<int>(aligned_sizeof<FarPanelDirectory>()); const auto folderOffset = Result; Result+=static_cast<int>(sizeof(wchar_t)*(Info.ShortcutFolder.size()+1)); const auto pluginFileOffset = Result; Result+=static_cast<int>(sizeof(wchar_t)*(Info.PluginFile.size()+1)); const auto pluginDataOffset = Result; Result+=static_cast<int>(sizeof(wchar_t)*(Info.PluginData.size()+1)); const auto dirInfo = static_cast<FarPanelDirectory*>(Param2); if(Param1>=Result && CheckStructSize(dirInfo)) { dirInfo->StructSize=sizeof(FarPanelDirectory); dirInfo->PluginId=Info.PluginGuid; dirInfo->Name = static_cast<wchar_t*>(static_cast<void*>(static_cast<char*>(Param2) + folderOffset)); dirInfo->Param = static_cast<wchar_t*>(static_cast<void*>(static_cast<char*>(Param2) + pluginDataOffset)); dirInfo->File = static_cast<wchar_t*>(static_cast<void*>(static_cast<char*>(Param2) + pluginFileOffset)); *std::copy(ALL_CONST_RANGE(Info.ShortcutFolder), const_cast<wchar_t*>(dirInfo->Name)) = L'\0'; *std::copy(ALL_CONST_RANGE(Info.PluginData), const_cast<wchar_t*>(dirInfo->Param)) = L'\0'; *std::copy(ALL_CONST_RANGE(Info.PluginFile), const_cast<wchar_t*>(dirInfo->File)) = L'\0'; } Reenter--; } break; } case FCTL_GETCOLUMNTYPES: case FCTL_GETCOLUMNWIDTHS: if (GetType() == panel_type::FILE_PANEL) { string strColumnTypes,strColumnWidths; ((FileList *)this)->PluginGetColumnTypesAndWidths(strColumnTypes,strColumnWidths); if (Command==FCTL_GETCOLUMNTYPES) { if (Param1&&Param2) xwcsncpy((wchar_t*)Param2,strColumnTypes.c_str(),Param1); Result=(int)strColumnTypes.size()+1; } else { if (Param1&&Param2) xwcsncpy((wchar_t*)Param2,strColumnWidths.c_str(),Param1); Result=(int)strColumnWidths.size()+1; } } break; case FCTL_GETPANELITEM: { if (GetType() == panel_type::FILE_PANEL && CheckNullOrStructSize(static_cast<FarGetPluginPanelItem*>(Param2))) Result = static_cast<int>(static_cast<FileList*>(this)->PluginGetPanelItem(Param1, static_cast<FarGetPluginPanelItem*>(Param2))); break; } case FCTL_GETSELECTEDPANELITEM: { if (GetType() == panel_type::FILE_PANEL && CheckNullOrStructSize(static_cast<FarGetPluginPanelItem*>(Param2))) Result = static_cast<int>(static_cast<FileList*>(this)->PluginGetSelectedPanelItem(Param1, static_cast<FarGetPluginPanelItem*>(Param2))); break; } case FCTL_GETCURRENTPANELITEM: { if (GetType() == panel_type::FILE_PANEL && CheckNullOrStructSize(static_cast<FarGetPluginPanelItem*>(Param2))) { PanelInfo Info; const auto DestPanel = static_cast<FileList*>(this); DestPanel->PluginGetPanelInfo(Info); Result = static_cast<int>(DestPanel->PluginGetPanelItem(static_cast<int>(Info.CurrentItem), static_cast<FarGetPluginPanelItem*>(Param2))); } break; } case FCTL_BEGINSELECTION: { if (GetType() == panel_type::FILE_PANEL) { ((FileList *)this)->PluginBeginSelection(); Result=TRUE; } break; } case FCTL_SETSELECTION: { if (GetType() == panel_type::FILE_PANEL) { ((FileList *)this)->PluginSetSelection(Param1, Param2 != nullptr); Result=TRUE; } break; } case FCTL_CLEARSELECTION: { if (GetType() == panel_type::FILE_PANEL) { static_cast<FileList*>(this)->PluginClearSelection(Param1); Result=TRUE; } break; } case FCTL_ENDSELECTION: { if (GetType() == panel_type::FILE_PANEL) { ((FileList *)this)->PluginEndSelection(); Result=TRUE; } break; } case FCTL_UPDATEPANEL: Update(Param1?UPDATE_KEEP_SELECTION:0); if (GetType() == panel_type::QVIEW_PANEL) UpdateViewPanel(); Result=TRUE; break; case FCTL_REDRAWPANEL: { PanelRedrawInfo *Info=(PanelRedrawInfo *)Param2; if (CheckStructSize(Info)) { m_CurFile=static_cast<int>(Info->CurrentItem); m_CurTopFile=static_cast<int>(Info->TopPanelItem); } // $ 12.05.2001 DJ перерисовываемся только в том случае, если мы - текущее окно if (Parent()->IsTopWindow()) Redraw(); Result=TRUE; break; } case FCTL_SETPANELDIRECTORY: { const auto dirInfo = static_cast<const FarPanelDirectory*>(Param2); if (CheckStructSize(dirInfo)) { Result = ExecShortcutFolder(NullToEmpty(dirInfo->Name), dirInfo->PluginId, NullToEmpty(dirInfo->File), NullToEmpty(dirInfo->Param), false, false, true); // restore current directory to active panel path if (!IsFocused()) { Parent()->ActivePanel()->SetCurPath(); } } break; } case FCTL_SETACTIVEPANEL: { if (IsVisible()) { Parent()->SetActivePanel(this); Result=TRUE; } break; } } ProcessingPluginCommand--; return Result; }
void DIALOG_ANNOTATE::OnApplyClick( wxCommandEvent& event ) { int response; wxString message; if( m_Config ) { m_Config->Write( KEY_ANNOTATE_SORT_OPTION, GetSortOrder() ); m_Config->Write( KEY_ANNOTATE_ALGO_OPTION, GetAnnotateAlgo() ); m_Config->Write( KEY_ANNOTATE_KEEP_OPEN_OPTION, GetAnnotateKeepOpen() ); m_Config->Write( KEY_ANNOTATE_ASK_FOR_CONFIRMATION, GetAnnotateAskForConfirmation() ); } // Display a message info if we always ask for confirmation // or if a reset of the previous annotation is asked. bool promptUser = GetAnnotateAskForConfirmation(); if( GetResetItems() ) { if( GetLevel() ) message += _( "Clear and annotate all of the components on the entire schematic?" ); else message += _( "Clear and annotate all of the components on the current sheet?" ); promptUser = true; } else { if( GetLevel() ) message += _( "Annotate only the unannotated components on the entire schematic?" ); else message += _( "Annotate only the unannotated components on the current sheet?" ); } message += _( "\n\nThis operation will change the current annotation and cannot be undone." ); if( promptUser ) { // TODO(hzeller): ideally, this would be a wxMessageDialog that contains // a checkbox asking the 'ask for confirmation' flag for better // discoverability (and it should only show in the 'benign' case, so if // !GetResetItems()) response = wxMessageBox( message, wxT( "" ), wxICON_EXCLAMATION | wxOK | wxCANCEL ); if( response == wxCANCEL ) return; } m_Parent->AnnotateComponents( GetLevel(), (ANNOTATE_ORDER_T) GetSortOrder(), (ANNOTATE_OPTION_T) GetAnnotateAlgo(), GetResetItems() , true, GetLockUnits() ); m_Parent->GetCanvas()->Refresh(); m_btnClear->Enable(); if( !GetAnnotateKeepOpen() ) { if( IsModal() ) EndModal( wxID_OK ); else { SetReturnCode( wxID_OK ); this->Show( false ); } } }