diff --git a/ManWork/LaTex/ppmanual.pdf b/ManWork/LaTex/ppmanual.pdf index 544913223..c9af41ae9 100644 Binary files a/ManWork/LaTex/ppmanual.pdf and b/ManWork/LaTex/ppmanual.pdf differ diff --git a/ManWork/LaTex/ppmanual.tex b/ManWork/LaTex/ppmanual.tex index cc9cb8cab..941d34e46 100644 --- a/ManWork/LaTex/ppmanual.tex +++ b/ManWork/LaTex/ppmanual.tex @@ -1,5 +1,5 @@ % PPMANUAL.TEX -% Copyright (c) A.Sobolev 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +% Copyright (c) A.Sobolev 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 % Part of project Papyrus % % @@ -26,7 +26,7 @@ \renewcommand{\CoverPageFooterInfo}{ \parbox[b]{.5\textwidth}{ \tiny : \today \\ - : 12.2.1 + : 12.2.2 } } @@ -5041,6 +5041,39 @@ , \ppyrsrv{ }, . +\section{ } + + - \ppybrand{}, + , . + + , + , . + + . + + , + . + () . + : +\begin{itemize} + \item ( ) + \item ( ) . , + , . + \item . , - + . + \item , . + , - . + \item , . + , - , + . +\end{itemize} + +\subsection{ } + +\subsection{ } + +\subsection{, } + \chapter{\label{ch-goods}} \ppybrand{}. diff --git a/Src/Doc/VERSION.TXT b/Src/Doc/VERSION.TXT index 188b40777..3c77449bc 100644 --- a/Src/Doc/VERSION.TXT +++ b/Src/Doc/VERSION.TXT @@ -1,5 +1,5 @@ VERSION.TXT -Copyright (c) Anton Sobolev 1996-2020, 2021, 2022 +Copyright (c) Anton Sobolev 1996-2020, 2021, 2022, 2023, 2024, 2025 Papyrus. @@ -17035,4 +17035,14 @@ Ver 1.2 Date 13/09/96 ' '). -FIX: {} xml- cdata-. -FIX: { } , . - \ No newline at end of file +07/01/2025 v12.2.2 + !- { } + , , , .. + !- { Apteka.Ru} - + ( ). + . + !- { } . + - { } . + !- {Stylo-Q} . + -FIX: { -} . + -FIX: { -} . diff --git a/Src/Include/PPDEFS.H b/Src/Include/PPDEFS.H index e3f6ac1f6..474b8fcd2 100644 --- a/Src/Include/PPDEFS.H +++ b/Src/Include/PPDEFS.H @@ -1,5 +1,5 @@ // PPDEFS.H -// Copyright (c) Sobolev A. 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +// Copyright (c) Sobolev A. 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 // @codepage UTF-8 // // Файл содержит только define-определения. Используется для включения в исходные файлы ресурсов @@ -1917,6 +1917,7 @@ #define STDCTL_DIAGNOSTICS 163 // Кнопка "Диагностика" #define STDCTL_REPEATINGBUTTON 164 // @v11.0.4 Кнопка "Повторение" #define STDCTL_MAPONGEOLOCBUTTON 165 // @v11.6.2 Кнопка запуска функции открытия карты с координатами (cmExecMapOnGeoLoc) +#define STDCTL_SINGLELISTBOX 166 // @v12.2.2 Список (SmartListBox) #define cmPPAccSelected 1101 // Сообщение, посылаемое группой // AcctCtrlGroup диалогу-владельцу когда пользователь выбрал новый счет. (AcctCtrlGroup*)InfoPtr diff --git a/Src/Include/Pp.h b/Src/Include/Pp.h index be43c3d30..791b0f363 100644 --- a/Src/Include/Pp.h +++ b/Src/Include/Pp.h @@ -41606,21 +41606,32 @@ class PrcssrAptekaRu { // // // -class PrcssrClientActivityStatistics { // @v12.2.2 @construction +class PrcssrClientActivityStatisticsFilt : public PPBaseFilt { // @persistent +public: + PrcssrClientActivityStatisticsFilt(); + PrcssrClientActivityStatisticsFilt & FASTCALL operator = (const PrcssrClientActivityStatisticsFilt & rS); + + uint8 ReserveStart[32]; // @ancor + DateRange Period; + PPID PersonKindID; + uint8 ReserveEnd[32]; // @anchor +}; + +class PrcssrClientActivityStatistics { // @v12.2.2 public: struct DetailedEntry { // @flat LDATE Dt; PPObjID Oid; }; - struct Param { + /*struct Param { Param(); DateRange Period; PPID PersonKindID; - }; + };*/ PrcssrClientActivityStatistics(); - int InitParam(Param * pParam); - int Init(const Param * pParam); - int EditParam(Param * pData); + int InitParam(PrcssrClientActivityStatisticsFilt * pParam); + int Init(const PrcssrClientActivityStatisticsFilt * pParam); + int EditParam(PrcssrClientActivityStatisticsFilt * pData); int Run(); int ScanDetailedActivityListForSinglePerson(PPID personID, TSVector & rList); private: @@ -41631,7 +41642,7 @@ class PrcssrClientActivityStatistics { // @v12.2.2 @construction PPObjArticle ArObj; PPPersonConfig PsnCfg; PPObjBill * P_BObj; - Param P; + PrcssrClientActivityStatisticsFilt P; }; // // @ModuleDecl(PPViewGoodsRest) diff --git a/Src/Include/ppbrow.h b/Src/Include/ppbrow.h index 24624d2a7..45042fa46 100644 --- a/Src/Include/ppbrow.h +++ b/Src/Include/ppbrow.h @@ -1517,6 +1517,7 @@ #define PPCMD_TESTMARKETPLACE 1353 #define PPCMD_MARKETPLACEINTERCHANGE 1354 #define PPCMD_APTEKARUINTERCHANGE 1355 +#define PPCMD_GATHERCLIENTACTIVITYSTAT 1356 // // PPJOB definitions // @@ -1570,6 +1571,7 @@ #define PPJOB_IMPORTCCHECKS 48 #define PPJOB_APTEKARUINTERCHANGE 49 #define PPJOB_MARKETPLACEINTERCHANGE 50 +#define PPJOB_GATHERCLIENTACTIVITYSTAT 51 // // PPVIEW definitions // @@ -1931,6 +1933,7 @@ #define PPVIEWITEM_COMPUTER 1342 #define PPFILT_MARKETPLACEINTERCHANGE 1351 #define PPFILT_PRCSSRAPTEKARU 1361 +#define PPFILT_PRCSSRCLIENTACTIVITYSTATISTICS 1371 // // RECORD definitions // diff --git a/Src/Include/slui.h b/Src/Include/slui.h index 4e7f2eac8..033d22362 100644 --- a/Src/Include/slui.h +++ b/Src/Include/slui.h @@ -4501,8 +4501,8 @@ class ListWindow : public TDialog { void FASTCALL setDef(ListBoxDef * pDef); void setCompFunc(CompFunc f); ListWindowSmartListBox * listBox() const; - void MoveWindow(HWND linkHwnd, long right); - void MoveWindow(const RECT & rRect); + void Move_(HWND linkHwnd, long right); + void Move_(const RECT & rRect); ListBoxDef * getDef() const { return P_Def; } void SetToolbar(uint tbId); uint GetToolbar() const { return TbId; } @@ -4885,7 +4885,7 @@ class TreeWindow { void AddItemCmdList(const char * pTitle, void * ptr); void Setup(HMENU hMenu); int IsVisible(); - void MoveWindow(const RECT &rRect); + void Move_(const RECT &rRect); void GetRect(RECT & rRect); void Show(int show); void MoveChildren(const RECT & rRect); diff --git a/Src/PPLib/Objpersn.cpp b/Src/PPLib/Objpersn.cpp index 047367d22..93a73e56c 100644 --- a/Src/PPLib/Objpersn.cpp +++ b/Src/PPLib/Objpersn.cpp @@ -8233,17 +8233,12 @@ int PPObjPerson::IdentifyClientActivityState(ClientActivityState & rParam) // // // -PrcssrClientActivityStatistics::Param::Param() : PersonKindID(0) -{ - Period.Z(); -} - PrcssrClientActivityStatistics::PrcssrClientActivityStatistics() : P_BObj(BillObj) { PsnObj.FetchConfig(&PsnCfg); } -int PrcssrClientActivityStatistics::InitParam(Param * pParam) +int PrcssrClientActivityStatistics::InitParam(PrcssrClientActivityStatisticsFilt * pParam) { if(pParam) { memzero(pParam, sizeof(*pParam)); @@ -8251,13 +8246,13 @@ int PrcssrClientActivityStatistics::InitParam(Param * pParam) return 1; } -int PrcssrClientActivityStatistics::Init(const Param * pParam) +int PrcssrClientActivityStatistics::Init(const PrcssrClientActivityStatisticsFilt * pParam) { RVALUEPTR(P, pParam); return 1; } -int PrcssrClientActivityStatistics::EditParam(Param * pData) +int PrcssrClientActivityStatistics::EditParam(PrcssrClientActivityStatisticsFilt * pData) { int ok = -1; TDialog * dlg = new TDialog(DLG_PRCRCLIACST); @@ -8420,6 +8415,19 @@ int PPObjPerson::ReadClientActivityStatistics(PPID personID, ClientActivityStati CATCHZOK return ok; } + +IMPLEMENT_PPFILT_FACTORY(PrcssrClientActivityStatistics); PrcssrClientActivityStatisticsFilt::PrcssrClientActivityStatisticsFilt() : PPBaseFilt(PPFILT_PRCSSRCLIENTACTIVITYSTATISTICS, 0, 0) +{ + SetFlatChunk(offsetof(PrcssrClientActivityStatisticsFilt, ReserveStart), + offsetof(PrcssrClientActivityStatisticsFilt, ReserveEnd)-offsetof(PrcssrClientActivityStatisticsFilt, ReserveStart)+sizeof(ReserveEnd)); + Init(1, 0); +} + +PrcssrClientActivityStatisticsFilt & FASTCALL PrcssrClientActivityStatisticsFilt::operator = (const PrcssrClientActivityStatisticsFilt & rS) +{ + Copy(&rS, 0); + return *this; +} int PrcssrClientActivityStatistics::Run() { @@ -8545,7 +8553,7 @@ int GatherClientActivityStatistics() { int ok = -1; PrcssrClientActivityStatistics prcssr; - PrcssrClientActivityStatistics::Param param; + PrcssrClientActivityStatisticsFilt param; prcssr.InitParam(¶m); if(prcssr.EditParam(¶m) > 0) { if(prcssr.Init(¶m) && prcssr.Run()) diff --git a/Src/PPLib/PPDSP.CPP b/Src/PPLib/PPDSP.CPP index 4a25c6362..96e4bddfd 100644 --- a/Src/PPLib/PPDSP.CPP +++ b/Src/PPLib/PPDSP.CPP @@ -1,5 +1,5 @@ // PPDSP.CPP -// Copyright (c) A.Sobolev 2001, 2002, 2005, 2007, 2009, 2010, 2011, 2015, 2016, 2017, 2019, 2020, 2021 +// Copyright (c) A.Sobolev 2001, 2002, 2005, 2007, 2009, 2010, 2011, 2015, 2016, 2017, 2019, 2020, 2021, 2025 // #pragma hdrstop #ifdef PPDSC @@ -29,8 +29,7 @@ int PPDeclStrucProcessor::MakeErrMsgString(char * pBuf, size_t bufLen) SString file_msg, msg; PPGetLastErrorMessage(1, msg); if(P_FileName) { - file_msg.Cat("File").Space().Cat(P_FileName).CatDiv(',', 2). - Cat("Line").Space().Cat(Line).CatDiv(':', 2).Cat(msg); + file_msg.Cat("File").Space().Cat(P_FileName).CatDiv(',', 2).Cat("Line").Space().Cat(Line).CatDiv(':', 2).Cat(msg); msg = file_msg; } msg.CopyTo(pBuf, bufLen); @@ -342,9 +341,10 @@ int PPDeclStruc::LoadFromResource(long declID) TVRez * p_rez = P_SlRez; if(p_rez) { char name_buf[64]; - uint16 i, items_count = 0; + uint16 i; + uint16 items_count = 0; long p = 0L; - p_rez->findResource((uint)declID, PP_RCDECLSTRUC, &p, 0); + p_rez->findResource(static_cast(declID), PP_RCDECLSTRUC, &p, 0); THROW_PP(p, PPERR_RESFAULT); freeAll(); p_rez->getString(name_buf); diff --git a/Src/PPLib/Pptvutil.cpp b/Src/PPLib/Pptvutil.cpp index 6d758421d..bd9df0278 100644 --- a/Src/PPLib/Pptvutil.cpp +++ b/Src/PPLib/Pptvutil.cpp @@ -3074,6 +3074,15 @@ class ListSelectionDialog : public TWindowBase { if(event.isCmd(cmInit)) { CreateBlock * p_blk = static_cast(TVINFOPTR); // + { + const TRect _def_rect(0, 0, 40, 40); + { + SmartListBox * p_lb = new SmartListBox(_def_rect, 0); + InsertCtlWithCorrespondingNativeItem(p_lb, STDCTL_SINGLELISTBOX, 0); + } + InsertCtlWithCorrespondingNativeItem(new TButton(_def_rect, "@but_ok", cmOK, 0, 0), STDCTL_OKBUTTON, 0); + InsertCtlWithCorrespondingNativeItem(new TButton(_def_rect, "@but_cancel", cmCancel, 0, 0), STDCTL_CANCELBUTTON, 0); + } CreateLayout(); EvaluateLayout(p_blk->Coord); } @@ -3164,7 +3173,7 @@ const ListSelectionDialog::LayoutExtra * ListSelectionDialog::GetLayoutExtra(int void ListSelectionDialog::CreateLayout() { - static const float def_margin = 2.0f; + static const float def_margin = 1.0f; class InnerBlock { public: @@ -3185,7 +3194,16 @@ void ListSelectionDialog::CreateLayout() } static void InsertButtonLayout(ListSelectionDialog * pMaster, SUiLayout * pLoParent, ushort ctlId, SUiLayoutParam & rP, float growFactor) { - TView * p = pMaster->getCtrlView(ctlId); + TView * p = pMaster ? pMaster->getCtrlView(ctlId) : 0; + if(p) { + rP.GrowFactor = growFactor; + SUiLayout * p_lo_item = pLoParent->InsertItem(p, &rP); + p_lo_item->SetCallbacks(0, InnerBlock::SetupLayoutItemFrameProc, p); + } + } + static void InsertCtrlLayout(ListSelectionDialog * pMaster, SUiLayout * pLoParent, ushort ctlId, SUiLayoutParam & rP, float growFactor) + { + TView * p = pMaster ? pMaster->getCtrlView(ctlId) : 0; if(p) { rP.GrowFactor = growFactor; SUiLayout * p_lo_item = pLoParent->InsertItem(p, &rP); @@ -3215,12 +3233,21 @@ void ListSelectionDialog::CreateLayout() //alb_buttons.SetVariableSizeX(SUiLayoutParam::szByContainer, 1.0f); //SUiLayout * p_lo_buttons = p_lo_result->InsertItem(const_cast(GetLayoutExtra(loiFrame_Buttons, 0)), &alb_buttons); SUiLayout * p_lo_footer = p_lo_result->FindBySymb("listdialog_footer"); + SUiLayout * p_lo_list = p_lo_result->FindBySymb("listdialog_body"); + { + SUiLayoutParam alb; + alb.GrowFactor = 1.0f; + //alb.SetFixedSizeY(FixedCtrlHeight); + alb.SetVariableSizeX(SUiLayoutParam::szByContainer, 0.8f); + alb.SetVariableSizeY(SUiLayoutParam::szByContainer, 1.0f); + alb.Margin.Set(def_margin); + InnerBlock::InsertCtrlLayout(this, p_lo_list, STDCTL_SINGLELISTBOX, alb, 1.0f); + } { SUiLayoutParam alb; alb.GrowFactor = 1.0f; alb.SetFixedSizeY(FixedCtrlHeight); alb.Margin.Set(def_margin); - InnerBlock::InsertButtonLayout(this, p_lo_footer, CTL_CALENDAR_TODAY, alb, 1.0f); InnerBlock::InsertButtonLayout(this, p_lo_footer, STDCTL_OKBUTTON, alb, 1.0f); InnerBlock::InsertButtonLayout(this, p_lo_footer, STDCTL_CANCELBUTTON, alb, 1.0f); } diff --git a/Src/PPLib/ppNamedFilt.cpp b/Src/PPLib/ppNamedFilt.cpp index f1dcbb9d2..92fd05af4 100644 --- a/Src/PPLib/ppNamedFilt.cpp +++ b/Src/PPLib/ppNamedFilt.cpp @@ -1,11 +1,11 @@ // PPNAMEDFILT.CPP -// Copyright (c) P.Andrianov 2011, 2014, 2016, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +// Copyright (c) P.Andrianov 2011, 2014, 2016, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 // @codepage UTF-8 // #include #pragma hdrstop -static const long Current_PPNamedFilt_Ver = 3; // @v10.6.7 2-->3 +static const long Current_PPNamedFilt_Ver = 3; PPNamedFilt::PPNamedFilt() : ID(0), Ver(Current_PPNamedFilt_Ver), ViewID(0), Flags(0) //@erik ver 0-->1 // @v10.5.3 ver 1-->2 { @@ -223,10 +223,7 @@ PPNamedFiltPool::PPNamedFiltPool(const char * pDbSymb, const int readOnly) : TSC SETFLAG(Flags, fReadOnly, readOnly); } -const SString & PPNamedFiltPool::GetDbSymb() const -{ - return DbSymb; -} +const SString & PPNamedFiltPool::GetDbSymb() const { return DbSymb; } int PPNamedFiltPool::IsNamedFiltSuited(const PPNamedFilt * pNFilt) const { @@ -743,7 +740,6 @@ IMPL_HANDLE_EVENT(FiltItemDialog) // @v11.1.10 ViewMobColumnList(); PPNamedFilt::EditRestrictedViewDefinitionList(Data.VD); // @v11.1.10 } - // @v10.5.3 { else if(event.isCmd(cmGuaList)) { PPIDArray id_list; Data.DestGuaList.Get(id_list); @@ -752,7 +748,6 @@ IMPL_HANDLE_EVENT(FiltItemDialog) if(ListToListDialog(<ld) > 0) Data.DestGuaList.Set(&id_list); } - // } @v10.5.3 clearEvent(event); } @@ -828,10 +823,7 @@ int FiltPoolDialog::editItem(long pos, long id) // // Descr: Обрабатывает удаление именованного фильтра из списка // -int FiltPoolDialog::delItem(long pos, long id) -{ - return P_Data->PutNamedFilt(&id, 0); -} +int FiltPoolDialog::delItem(long pos, long id) { return P_Data->PutNamedFilt(&id, 0); } PPNamedFilt::ViewDefinition::Entry::Entry() : TotalFunc(0), DataType(0), Format(0), Format2(0) { @@ -1076,15 +1068,6 @@ int PPNamedFilt::ViewDefinition::XmlRead(const xmlNode * pParentNode) return ok; } -/* @v10.6.7 int PPNamedFilt::ViewDefinition::Serialize(int dir, SBuffer & rBuf, SSerializeContext * pCtx) -{ - int ok = 1; - THROW_SL(pCtx->Serialize(dir, &L, rBuf)); - THROW_SL(SStrGroup::SerializeS(dir, rBuf, pCtx)); - CATCHZOK - return ok; -}*/ - class MobileClmnValListDialog : public PPListDialog { DECL_DIALOG_DATA(PPNamedFilt::ViewDefinition); enum { diff --git a/Src/PPLib/ppcmd.cpp b/Src/PPLib/ppcmd.cpp index 12cdb5acb..8152d2ae5 100644 --- a/Src/PPLib/ppcmd.cpp +++ b/Src/PPLib/ppcmd.cpp @@ -1,5 +1,5 @@ // PPCMD.CPP -// Copyright (c) A.Sobolev 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +// Copyright (c) A.Sobolev 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 // @codepage UTF-8 // @Kernel // @@ -78,7 +78,7 @@ int PPCommandDescr::LoadResource(long cmdDescrID) TVRez * p_rez = P_SlRez; Init(); if(p_rez) { - THROW_PP(p_rez->findResource((uint)cmdDescrID, PP_RCDECLCMD), PPERR_RESFAULT); + THROW_PP(p_rez->findResource(static_cast(cmdDescrID), PP_RCDECLCMD), PPERR_RESFAULT); CmdID = cmdDescrID; p_rez->getString(Symb, 2); p_rez->getString(Text, 2); @@ -4471,6 +4471,46 @@ class CMD_HDL_CLS(APTEKARUINTERCHANGE) : public PPCommandHandler { IMPLEMENT_CMD_HDL_FACTORY(APTEKARUINTERCHANGE); // +// +// +class CMD_HDL_CLS(GATHERCLIENTACTIVITYSTAT) : public PPCommandHandler { +public: + CMD_HDL_CLS(GATHERCLIENTACTIVITYSTAT)(const PPCommandDescr * pDescr) : PPCommandHandler(pDescr) + { + } + virtual int EditParam(SBuffer * pParam, long, void * extraPtr) + { + int ok = -1; + if(pParam) { + PrcssrClientActivityStatistics prc; + PrcssrClientActivityStatisticsFilt filt; + if(!filt.Read(*pParam, 0)) + prc.InitParam(&filt); + if(prc.EditParam(&filt) > 0) { + if(filt.Write(pParam->Z(), 0)) { + ok = 1; + } + } + } + return ok; + } + virtual int Run(SBuffer * pParam, long, void * extraPtr) + { + int ok = -1; + PrcssrClientActivityStatisticsFilt filt; + if(pParam && filt.Read(*pParam, 0)) { + PrcssrClientActivityStatistics prc; + if(!prc.Init(&filt) || !prc.Run()) + ok = PPErrorZ(); + } + else + ok = GatherClientActivityStatistics(); + return ok; + } +}; + +IMPLEMENT_CMD_HDL_FACTORY(GATHERCLIENTACTIVITYSTAT); +// // // class CMD_HDL_CLS(PROCESSSARTRE) : public PPCommandHandler { diff --git a/Src/PPLib/ppjob.cpp b/Src/PPLib/ppjob.cpp index 10e570cd2..bd8ad37c1 100644 --- a/Src/PPLib/ppjob.cpp +++ b/Src/PPLib/ppjob.cpp @@ -1,5 +1,5 @@ // PPJOB.CPP -// Copyright (c) A.Sobolev 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +// Copyright (c) A.Sobolev 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 // @codepage UTF-8 // @Kernel // @@ -141,7 +141,7 @@ int PPJobMngr::LoadResource(PPID jobID, PPJobDescr * pJob) int ok = 1; pJob->CmdID = jobID; if(P_Rez) { - THROW_PP(P_Rez->findResource((uint)jobID, PP_RCDECLJOB), PPERR_RESFAULT); + THROW_PP(P_Rez->findResource(static_cast(jobID), PP_RCDECLJOB), PPERR_RESFAULT); P_Rez->getString(pJob->Symb, 2); P_Rez->getString(pJob->Text = 0, 2); SLS.ExpandString(pJob->Text, CTRANSF_UTF8_TO_INNER); @@ -4470,3 +4470,42 @@ class JOB_HDL_CLS(MARKETPLACEINTERCHANGE) : public PPJobHandler { }; IMPLEMENT_JOB_HDL_FACTORY(MARKETPLACEINTERCHANGE); +// +// +// +class JOB_HDL_CLS(GATHERCLIENTACTIVITYSTAT) : public PPJobHandler { +public: + JOB_HDL_CLS(GATHERCLIENTACTIVITYSTAT)(PPJobDescr * pDescr) : PPJobHandler(pDescr) + { + } + virtual int EditParam(SBuffer * pParam, void * extraPtr) + { + int ok = -1; + if(pParam) { + PrcssrClientActivityStatistics prc; + PrcssrClientActivityStatisticsFilt filt; + if(!filt.Read(*pParam, 0)) + prc.InitParam(&filt); + if(prc.EditParam(&filt) > 0) { + if(filt.Write(pParam->Z(), 0)) { + ok = 1; + } + } + } + return ok; + } + virtual int Run(SBuffer * pParam, void * extraPtr) + { + int ok = 1; + PrcssrClientActivityStatistics prc; + PrcssrClientActivityStatisticsFilt filt; + THROW(pParam); + THROW(filt.Read(*pParam, 0)); + THROW(prc.Init(&filt)); + THROW(prc.Run()); + CATCHZOKPPERR + return ok; + } +}; + +IMPLEMENT_JOB_HDL_FACTORY(GATHERCLIENTACTIVITYSTAT); diff --git a/Src/PPMain/ppw.rc b/Src/PPMain/ppw.rc index fe028d5f6..919e25e83 100644 --- a/Src/PPMain/ppw.rc +++ b/Src/PPMain/ppw.rc @@ -28887,7 +28887,7 @@ BEGIN END DLG_PSNCFG DIALOGEX 41, 8, 495, 207 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "@cfg_person" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -28917,10 +28917,10 @@ BEGIN CONTROL "@cfgperson_fsyncmergereglist",21684,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,261,65,215,10 CONTROL "@xchg_sendattachment",25780,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,261,75,215,10 CONTROL "@cfgperson_fsyncappendabskinds",29876,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,260,85,215,10 - PUSHBUTTON "@{cfgperson_dlvraddrextfldlist}...",4008,365,120,120,13 + PUSHBUTTON "@{cfgperson_dlvraddrextfldlist}...",4008,320,120,165,13 DEFPUSHBUTTON "@but_ok",STDCTL_OKBUTTON,365,185,50,13 PUSHBUTTON "@but_cancel",STDCTL_CANCELBUTTON,435,185,50,13 - PUSHBUTTON "@{cfgperson_newclientdetectionlist}...",4009,365,141,120,13 + PUSHBUTTON "@{cfgperson_clientactivity}...",4009,320,141,165,13 END DLG_SBIICFG DIALOGEX 15, 0, 422, 271 @@ -29556,7 +29556,7 @@ END DLG_NEWCLNT DIALOGEX 10, 72, 381, 307 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "@newclienttransactionlist" +CAPTION "@cfgperson_clientactivity" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "",CTL_NEWCLNT_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,15,10,350,125 @@ -29579,7 +29579,7 @@ END DLG_NEWCNTCF DIALOGEX 10, 16, 385, 72 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "@newclienttransaction" +CAPTION "@cfgperson_clientactivity_traitem" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN DEFPUSHBUTTON "@but_ok",STDCTL_OKBUTTON,260,50,49,13 diff --git a/Src/PPTEST/pptest.cpp b/Src/PPTEST/pptest.cpp index 8e2d0f082..2d289ae0e 100644 --- a/Src/PPTEST/pptest.cpp +++ b/Src/PPTEST/pptest.cpp @@ -1990,9 +1990,9 @@ int DoConstructionTest() } } #endif // } 0 - SentencePieceExperiments(); + Test_ListSelectionDialog(); + //SentencePieceExperiments(); //TestGtinStruc(); - //Test_ListSelectionDialog(); //PPChZnPrcssr::Test(); //GumboTest(); //Test_SSystemBackup(); diff --git a/Src/Rsrc/Rc/ppbrow.rc2 b/Src/Rsrc/Rc/ppbrow.rc2 index 51bd7bf14..f335e93ea 100644 --- a/Src/Rsrc/Rc/ppbrow.rc2 +++ b/Src/Rsrc/Rc/ppbrow.rc2 @@ -1,5 +1,5 @@ // PPBROW.RC2 -// Copyright (c) A.Sobolev 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +// Copyright (c) A.Sobolev 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 // @codepage windows-1251 // Part of project Papyrus // @@ -7103,10 +7103,11 @@ cmd StyloQBindery { "@{cmd_styloqbindery}" none cmd StyloQCommands { "@{cmd_styloqcommands}" none none cmStyloQCommands view=StyloQCommand } // @v11.1.9 cmd ProcessUED { "@{cmd_processued}" none none cmProcessUED } // @v11.6.6 cmd ProcessBomEstimatedValues { "@{cmd_processbomestimatedvalues}" none none cmProcessBomEstimatedValues } // @v11.8.0 -cmd ImportCChecks { "@{cmd_importccheck}" none none cmImportCChecks } // @v11.8.5 -cmd TestMarketplace { "@{cmd_testmarketplace}" none none cmTestMarketplace } // @v12.1.0 -cmd MarketplaceInterchange { "@{cmd_marketplaceinterchange}" PPDV_MARKETPLACE01 PPDV_MARKETPLACE01 cmMarketplaceInterchange } // @v12.1.3 -cmd AptekaRuInterchange { "@{cmd_aptekaruinterchange}" none none cmAptekaRuInterchange } // @v12.2.1 +cmd ImportCChecks { "@{cmd_importccheck}" none none cmImportCChecks } // @v11.8.5 +cmd TestMarketplace { "@{cmd_testmarketplace}" none none cmTestMarketplace } // @v12.1.0 +cmd MarketplaceInterchange { "@{cmd_marketplaceinterchange}" PPDV_MARKETPLACE01 PPDV_MARKETPLACE01 cmMarketplaceInterchange } // @v12.1.3 +cmd AptekaRuInterchange { "@{cmd_aptekaruinterchange}" none none cmAptekaRuInterchange } // @v12.2.1 +cmd GatherClientActivityStat { "@{cmd_gathercliactivitystatistics}" none none cmGatherClientActivityStat } // @v12.2.2 // // -------------- // @@ -7157,9 +7158,10 @@ job ExportPrjTasks { "@{job_exportprjtasks}" } // @v11.3.3 job FtsIndexing { "@{job_ftsindexing}" } // @v11.3.4 job StyloQSendIndexingContent { "@{job_styloqsendindexingcontent}" nologin } // @v11.3.5 job StyloQPrepareAhead { "@{job_styloqprepareahead}" nologin } // @v11.4.8 -job ImportCChecks { "@{job_importcchecks}" } // @v11.8.6 -job AptekaRuInterchange { "@{cmd_aptekaruinterchange}" } // @v12.2.1 -job MarketplaceInterchange { "@{cmd_marketplaceinterchange}" } // @v12.2.1 +job ImportCChecks { "@{job_importcchecks}" } // @v11.8.6 +job AptekaRuInterchange { "@{cmd_aptekaruinterchange}" } // @v12.2.1 +job MarketplaceInterchange { "@{cmd_marketplaceinterchange}" } // @v12.2.1 +job GatherClientActivityStat { "@{cmd_gathercliactivitystatistics}" } // @v12.2.2 // // -------------- PPObject // @@ -7308,6 +7310,7 @@ view SwProgram { "@{view_swprogram}" } // @v11.9.11 view Computer { "@{view_computer}" } // @v12.0.0 filter MarketplaceInterchange { "@{filter_marketplaceinterchange}" } // @v12.1.3 filter PrcssrAptekaRu { "@{filter_prcssraptekaru}" } // @v12.2.1 +filter PrcssrClientActivityStatistics { "@{filter_prcssrclientactivitystatistics}" } // @v12.2.2 // // lastviewfilter ATTENTION: put new VIEWS and FILTERS before this line! // diff --git a/Src/Rsrc/Str/ppstr2.symb b/Src/Rsrc/Str/ppstr2.symb index b95b718f8..d6d17f675 100644 --- a/Src/Rsrc/Str/ppstr2.symb +++ b/Src/Rsrc/Str/ppstr2.symb @@ -1,7 +1,7 @@ [common] LastAutoGrpCode=1001 -LastSignatureCode=2147494998 +LastSignatureCode=2147495001 LastAutoCodeList=1,12257;102,10177;103,10072;110,10000;111,12132;112,10000;119,10000;114,10006;7,10000;4,10000;6,10000;342,10000;118,10152;120,10005;1001,10000;121,10000;122,10000;123,10328;124,10387;125,10064 [SignatureList] @@ -2795,6 +2795,7 @@ filter_billtransmitparam=2147485839 filter_supplinterchange=2147485840 filter_marketplaceinterchange=2147494861 filter_prcssraptekaru=2147494968 +filter_prcssrclientactivitystatistics=2147494999 filter_gct=2147485841 filter_prcssrosm=2147485842 filter_billautocreateparam=2147485843 @@ -4877,6 +4878,8 @@ cfgperson_smsprohibitedtr=2147487715 cfgperson_topfolder=2147487716 cfgperson_tradelicregtype=2147487717 cfgperson_newclientdetectionlist=2147487718 +cfgperson_clientactivity=2147495000 +cfgperson_clientactivity_traitem=2147495001 cfgperson_dlvraddrextfldlist=2147487719 cfgperson_criticalcliactivitydelaydays=2147494980 cfgperson_criticalcliactivitydelaysigm=2147494981 @@ -10786,8 +10789,6 @@ sendmailparam_subj=2147493306 sendmailparam_text=2147493307 sendmailparam_addrlist=2147493308 sendmailparam_filelist=2147493309 -newclienttransaction=2147493310 -newclienttransactionlist=2147493311 genericdevice=2147493312 genericdevice_tag=2147493313 genericdevice_id=2147493314 @@ -11333,6 +11334,8 @@ dl2score_subpctmargin=2147486968 dl2score_subaverage=2147486970 cfgcomm_ccflg_ccflg_dontundoopcntronesc=2147487469 egaisexcisemark=2147491571 +newclienttransaction=2147493310 +newclienttransactionlist=2147493311 styloqconfig_cliffaceselfmodifying=2147494645 [GrpSymbList] diff --git a/Src/Rsrc/Str/ppstr2.txt b/Src/Rsrc/Str/ppstr2.txt index 3add5b354..fe290fe03 100644 --- a/Src/Rsrc/Str/ppstr2.txt +++ b/Src/Rsrc/Str/ppstr2.txt @@ -1,5 +1,5 @@ // PPSTR2.TXT -// Copyright (c) A.Sobolev 1996-2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 +// Copyright (c) A.Sobolev 1996-2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 // Codepage=UTF-8 // // Синтаксис: @@ -8849,6 +8849,7 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @filter_supplinterchange "Параметры обмена данными с поставщиком" @filter_marketplaceinterchange "Параметры обмена данными с маркетплейсом" @filter_prcssraptekaru "Параметры обмена данными с сервисом @{brand_aptekaru}" +@filter_prcssrclientactivitystatistics "Параметры сбора статистики клиентской активности" @filter_gct "Фильтр перебора операций" @filter_prcssrosm "Параметры обработки файла @{brand_openstreetmap}" @filter_billautocreateparam "Параметры автоматического создания документов" @@ -11024,9 +11025,14 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @cfgperson_smsprohibitedtr "Время запрещенное для рассылки SMS" @cfgperson_topfolder "Каталог персональных папок" @cfgperson_tradelicregtype "Тип регистра торговой лицензии" -@cfgperson_newclientdetectionlist "Транзакции нового клиента" +@cfgperson_newclientdetectionlist "Транзакции нового клиента" // @v12.2.2 replaced with @cfgperson_clientactivity +@cfgperson_clientactivity "Конфигуация клиентской активности" // @v12.2.2 +@cfgperson_clientactivity_traitem "Транзакция клиентской активности" // @v12.2.2 @cfgperson_dlvraddrextfldlist "@{daddressextfield_pl}" +// @v12.2.2 (replaced with @cfgperson_clientactivity_traitem) @newclienttransaction "Транзакция идентифицирующая нового клиента" +// @v12.2.2 (replaced with @cfgperson_clientactivity) @newclienttransactionlist "Список транзакций для идентификации нового клиента" + @cfgperson_criticalcliactivitydelaydays "Критическая задержка активности клиента в днях" @cfgperson_criticalcliactivitydelaysigm "Критическая задержка активности клиента в сигмах" @cfgperson_hopelesscliactivitydelaydays "Безнадежная задержка активности клиента в днях" @@ -17399,9 +17405,6 @@ IMPEXPCMD_DECLNORDER "DECLNORDER" @sendmailparam_addrlist "@{email}" @sendmailparam_filelist "Присоединенные файлы" -@newclienttransaction "Транзакция идентифицирующая нового клиента" -@newclienttransactionlist "Список транзакций для идентификации нового клиента" - @genericdevice "Обобщенное устройство" @genericdevice_tag "@{tag}" @genericdevice_id "@{id}" diff --git a/Src/Rsrc/Style/uid-papyrus.json b/Src/Rsrc/Style/uid-papyrus.json index 23b96c59d..54c1a45a0 100644 --- a/Src/Rsrc/Style/uid-papyrus.json +++ b/Src/Rsrc/Style/uid-papyrus.json @@ -91,6 +91,7 @@ ], "layout_list": [ { + "flags": "vertical", "id": 10001, "symb": "listdialog", "size": "540, 335", @@ -110,21 +111,23 @@ "shrinkfactor": 1 }, { - "symb": "listdialog_footer", - "size": "100%, 64", + "flags": "vertical", + "symb": "listdialog_body", + "size": "100%, 100%", "alignitems": "stretch", "alignself": "auto", "gravityx": "center", - "gravityy": "bottom", + "gravityy": "center", "shrinkfactor": 1 }, { - "symb": "listdialog_body", - "size": "100%, 100%", + "flags": "horizontal", + "symb": "listdialog_footer", + "size": "100%, 64", "alignitems": "stretch", "alignself": "auto", "gravityx": "center", - "gravityy": "center", + "gravityy": "bottom", "shrinkfactor": 1 } ] diff --git a/Src/Rsrc/Version/genver-open.dat b/Src/Rsrc/Version/genver-open.dat index 3a82af355..19bfd2714 100644 --- a/Src/Rsrc/Version/genver-open.dat +++ b/Src/Rsrc/Version/genver-open.dat @@ -9,13 +9,13 @@ Product = OpenPapyrus Team = Andrey Fokin, Anton Sobolev Secret = B5IwV3V03KT16vzt StartDevYear = 1996 -LastDevYear = 2024 +LastDevYear = 2025 Demo = 0 OpenSource = 1 MajorVer =12 MinorVer =2 -Revision =1 -AssemblyVer=40887 +Revision =2 +AssemblyVer=40894 MinMajorVer =9 MinMinorVer =8 MinRevision =11 diff --git a/Src/SLib/Listwin.cpp b/Src/SLib/Listwin.cpp index d99ec8b38..4fe55b063 100644 --- a/Src/SLib/Listwin.cpp +++ b/Src/SLib/Listwin.cpp @@ -46,7 +46,7 @@ void ListWindow::executeNM(HWND parent) } CALLPTRMEMB(P_Lb, SetLBLnkToUISrchState()); APPL->SetWindowViewByKind(H(), TProgram::wndtypListDialog); - MoveWindow(0, 0); + Move_(0, 0); if(DlgFlags & fLarge) { P_Def->SetOption(lbtSelNotify, 1); ::SendDlgItemMessage(H(), CTL_LBX_LIST, LB_SETITEMHEIGHT, 0, static_cast(40)); @@ -112,7 +112,7 @@ IMPL_HANDLE_EVENT(ListWindow) p_combo->setupTreeListWindow(1); } else - MoveWindow(0, 0); + Move_(0, 0); if(DlgFlags & fLarge) { P_Def->SetOption(lbtSelNotify, 1); ::SendDlgItemMessage(H(), CTL_LBX_LIST, LB_SETITEMHEIGHT, 0, static_cast(40)); @@ -236,7 +236,7 @@ int ListWindow::getSingle(long * pVal) return 0; } -void ListWindow::MoveWindow(HWND linkHwnd, long right) +void ListWindow::Move_(HWND linkHwnd, long right) { uint list_ctl = IsTreeList() ? CTL_TREELBX_TREELIST : CTL_LBX_LIST; @@ -288,7 +288,7 @@ void ListWindow::MoveWindow(HWND linkHwnd, long right) ::MoveWindow(h_scroll, list_rect.right, 0, GetSystemMetrics(SM_CXVSCROLL), list_rect.bottom, 1); } -void ListWindow::MoveWindow(const RECT & rRect) +void ListWindow::Move_(const RECT & rRect) { uint list_ctl = IsTreeList() ? CTL_TREELBX_TREELIST : CTL_LBX_LIST; HWND h_list = GetDlgItem(H(), list_ctl); @@ -453,7 +453,7 @@ int WordSelector::Helper_PullDown(const char * pText, int recent) int skip = BIN(!p_data || p_data->getCount() == 0); if(!skip && !recent && p_data->getCount() == 1 && (P_Blk->GetFlags() & WordSel_ExtraBlock::fFreeText)) { // - // @v10.7.7 Специальный случай: в режиме fFreeText единственный доступный в списке элемент, + // Специальный случай: в режиме fFreeText единственный доступный в списке элемент, // равный образцу не предусмотрен для вывода в списке (в этом просто нет смыслы - текст уже в поле ввода) // StrAssocArray::Item sitem = p_data->Get(0); @@ -471,7 +471,7 @@ int WordSelector::Helper_PullDown(const char * pText, int recent) hw_resize_base = GetDlgItem(P_Blk->H_InputDlg, P_Blk->InputCtl); SETIFZ(hw_resize_base, P_Blk->H_InputDlg); } - MoveWindow(hw_resize_base, 0); + Move_(hw_resize_base, 0); } if(!CheckVisible()) { WsState |= (wssVisible|wssActive); @@ -533,7 +533,7 @@ IMPL_HANDLE_EVENT(WordSelector) hw_resize_base = GetDlgItem(P_Blk->H_InputDlg, P_Blk->InputCtl); SETIFZ(hw_resize_base, P_Blk->H_InputDlg); } - MoveWindow(hw_resize_base, 0); + Move_(hw_resize_base, 0); } if(APPL->PushModalWindow(this, H())) { ::ShowWindow(H(), SW_SHOW); @@ -599,55 +599,6 @@ IMPL_HANDLE_EVENT(WordSelector) } } -#if 0 // @v9.7.12 (replaced with DrawListItem2) { -void WordSelector::DrawListItem(TDrawItemData * pDrawItem) -{ - if(pDrawItem && pDrawItem->P_View) { - long list_ctrl_id = pDrawItem->P_View->GetId(); - HDC h_dc = pDrawItem->H_DC; - HFONT h_fnt_def = 0; - HBRUSH h_br_def = 0; - HPEN h_pen_def = 0; - COLORREF clr_prev = 0; - SmartListBox * p_lbx = (SmartListBox *)pDrawItem->P_View; - RECT rc = pDrawItem->ItemRect; - SString temp_buf; - { - if(pDrawItem->ItemAction & TDrawItemData::iaBackground) { - ::FillRect(h_dc, &rc, (HBRUSH)Ptb.Get(brBkgnd)); - pDrawItem->ItemAction = 0; // Мы перерисовали фон - } - else if(pDrawItem->ItemID != 0xffffffff) { - // h_fnt_def = (HFONT)SelectObject(h_dc, (HFONT)Ptb.Get(font)); - p_lbx->getText((long)pDrawItem->ItemData, temp_buf); - temp_buf.Transf(CTRANSF_INNER_TO_OUTER); - if(pDrawItem->ItemState & (ODS_FOCUS|ODS_SELECTED) && CheckActive()) { - h_br_def = (HBRUSH)SelectObject(h_dc, Ptb.Get(brSel)); - clr_prev = SetBkColor(h_dc, Ptb.GetColor(clrFocus)); - ::FillRect(h_dc, &rc, (HBRUSH)Ptb.Get(brSel)); - } - else { - h_br_def = (HBRUSH)SelectObject(h_dc, Ptb.Get(brBkgnd)); - clr_prev = SetBkColor(h_dc, Ptb.GetColor(clrBkgnd)); - ::FillRect(h_dc, &rc, (HBRUSH)Ptb.Get(brBkgnd)); - } - ::DrawText(h_dc, temp_buf.cptr(), temp_buf.Len(), &rc, DT_LEFT|DT_VCENTER|DT_SINGLELINE); // @unicodeproblem - } - } - if(h_fnt_def) - SelectObject(h_dc, h_fnt_def); - if(h_br_def) - SelectObject(h_dc, h_br_def); - if(h_pen_def) - SelectObject(h_dc, h_pen_def); - if(clr_prev) - SetBkColor(h_dc, clr_prev); - } - else - pDrawItem->ItemAction = 0; // Список не активен - строку не рисуем -} -#endif // } 0 - void WordSelector::DrawListItem2(TDrawItemData * pDrawItem) { if(pDrawItem) { diff --git a/Src/SLib/Smrtlbx.cpp b/Src/SLib/Smrtlbx.cpp index 71af9b600..3c24d1bd6 100644 --- a/Src/SLib/Smrtlbx.cpp +++ b/Src/SLib/Smrtlbx.cpp @@ -1,5 +1,5 @@ // SMRTLBX.CPP -// Copyright (c) Sobolev A. 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 +// Copyright (c) Sobolev A. 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2025 // @codepage UTF-8 // Release for WIN32 // @@ -438,7 +438,8 @@ void SmartListBox::Helper_InsertColumn(uint pos) void SmartListBox::MoveScrollBar(int autoHeight) { - long scroll_delta = 0, scroll_pos = 0; + long scroll_delta = 0; + long scroll_pos = 0; CreateScrollBar(1); if(P_Def) { if(autoHeight) { @@ -1599,8 +1600,28 @@ IMPL_HANDLE_EVENT(SmartListBox) Implement_Draw(); clearEvent(event); // @v11.2.4 } - else + else { TView::handleEvent(event); // @v11.2.4 + // @v12.2.2 { + switch(event.what) { + case TEvent::evCommand: + switch(TVCMD) { + case cmSetBounds: + { + const TRect * p_rc = static_cast(TVINFOPTR); + HWND h = getHandle(); + if(h) { + ::SetWindowPos(h, 0, p_rc->a.x, p_rc->a.y, p_rc->width(), p_rc->height(), SWP_NOZORDER|SWP_NOCOPYBITS); + MoveScrollBar(1); + clearEvent(event); + } + } + break; + } + break; + } + // } @v12.2.2 + } } void SmartListBox::Implement_Draw() diff --git a/Src/SLib/Tview.cpp b/Src/SLib/Tview.cpp index 67338d895..4873ecc84 100644 --- a/Src/SLib/Tview.cpp +++ b/Src/SLib/Tview.cpp @@ -321,14 +321,12 @@ static BOOL CALLBACK SetupWindowCtrlTextProc(HWND hwnd, LPARAM lParam) } else if(SLS.ExpandString(temp_buf, CTRANSF_UTF8_TO_OUTER) > 0) do_replace = 1; - // @v10.5.4 { else { if(!temp_buf.IsAscii() && temp_buf.IsLegalUtf8()) { temp_buf.Transf(CTRANSF_UTF8_TO_OUTER); do_replace = 1; } } - // } @v10.5.4 if(do_replace) { ok = TView::SSetWindowText(hwnd, temp_buf); } @@ -338,7 +336,7 @@ static BOOL CALLBACK SetupWindowCtrlTextProc(HWND hwnd, LPARAM lParam) /*static*/void FASTCALL TView::PreprocessWindowCtrlText(HWND hWnd) { - SetupWindowCtrlTextProc(hWnd, 0); // @v10.7.10 + SetupWindowCtrlTextProc(hWnd, 0); ::EnumChildWindows(hWnd, SetupWindowCtrlTextProc, 0); } @@ -501,6 +499,17 @@ static BOOL CALLBACK SetupWindowCtrlTextProc(HWND hwnd, LPARAM lParam) } } break; + case TV_SUBSIGN_LISTBOX: // @v12.2.2 @construction + { + SmartListBox * p_lb = static_cast(pV); + pV->Parent = hw_parent; + hw = ::CreateWindowEx(0, _T("LISTBOX"), 0, WS_CHILD|LBS_NOINTEGRALHEIGHT|LBS_WANTKEYBOARDINPUT, pV->ViewOrigin.x, + pV->ViewOrigin.y, pV->ViewSize.x, pV->ViewSize.y, hw_parent, (HMENU)ctl_id, TProgram::GetInst(), 0); + if(hw) { + TView::SetWindowUserData(hw, p_lb); + } + } + break; case TV_SUBSIGN_BUTTON: { TButton * p_cv = static_cast(pV); diff --git a/Src/SLib/layout-flex.cpp b/Src/SLib/layout-flex.cpp index 93fb002f0..796e8759a 100644 --- a/Src/SLib/layout-flex.cpp +++ b/Src/SLib/layout-flex.cpp @@ -2076,7 +2076,6 @@ void SUiLayout::Commit_() const p.ForceSize.y = bb.Height(); DoLayout(p); } - } void SUiLayout::DoLayout(const Param & rP) const diff --git a/Src/SLib/tcontrol.cpp b/Src/SLib/tcontrol.cpp index eeafd341d..63755d3ef 100644 --- a/Src/SLib/tcontrol.cpp +++ b/Src/SLib/tcontrol.cpp @@ -236,7 +236,7 @@ IMPL_HANDLE_EVENT(TButton) const TRect * p_rc = static_cast(TVINFOPTR); HWND h = getHandle(); if(h) { - ::SetWindowPos(h, 0, p_rc->a.x, p_rc->a.y, p_rc->width(), p_rc->height(), SWP_NOZORDER/* @v10.9.3 |SWP_NOREDRAW*/|SWP_NOCOPYBITS); + ::SetWindowPos(h, 0, p_rc->a.x, p_rc->a.y, p_rc->width(), p_rc->height(), SWP_NOZORDER|SWP_NOCOPYBITS); clearEvent(event); } } @@ -606,15 +606,13 @@ int TInputLine::handleWindowsMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) P_Combo->handleWindowsMessage(WM_USER_COMBO_ACTIVATEBYCHAR, wParam, lParam); else if(HasWordSelector()) { assert(P_WordSelBlk); - // @v10.7.7 { if(P_WordSelBlk->Flags & WordSel_ExtraBlock::fFreeText) { /*if(P_WordSel) { P_WordSel->Refresh(Data); }*/ } - // } @v10.7.7 else { - SString & r_symb = SLS.AcquireRvlStr(); // @v10.7.7 SLS.AcquireRvlStr + SString & r_symb = SLS.AcquireRvlStr(); r_symb.CatChar(static_cast(wParam)); UiSearchTextBlock::ExecDialog(getHandle(), 0, r_symb, 1, P_WordSelBlk, 0); } @@ -1429,7 +1427,7 @@ void ComboBox::setupTreeListWindow(int noUpdateSize) if(P_ListWin) { RECT rect; GetWindowRect(getHandle(), &rect); - P_ListWin->MoveWindow(P_ILink->getHandle(), rect.right); + P_ListWin->Move_(P_ILink->getHandle(), rect.right); } } diff --git a/Src/SLib/treewnd.cpp b/Src/SLib/treewnd.cpp index 3d4fc542a..643c60e44 100644 --- a/Src/SLib/treewnd.cpp +++ b/Src/SLib/treewnd.cpp @@ -612,7 +612,7 @@ void TreeWindow::MoveChildren(const RECT & rRect) ShortcWnd.MoveWindow(sh_rect); } if(P_CurLw) - P_CurLw->MoveWindow(rect); + P_CurLw->Move_(rect); else ::MoveWindow(H_CmdList, rect.left, rect.top, rect.right, rect.bottom, 1); //ShowWindow(GetDlgItem(Hwnd, BTN_CLOSE), (P_CurLw) ? SW_SHOWNORMAL : SW_HIDE); @@ -707,6 +707,6 @@ void TreeWindow::DelItemCmdList(void * ptr) } int TreeWindow::IsVisible() {return IsWindowVisible(Hwnd);} -void TreeWindow::MoveWindow(const RECT &rRect) {::MoveWindow(Hwnd, rRect.left, rRect.top, rRect.right, rRect.bottom, 1);} +void TreeWindow::Move_(const RECT &rRect) {::MoveWindow(Hwnd, rRect.left, rRect.top, rRect.right, rRect.bottom, 1);} void TreeWindow::GetRect(RECT &rRect) {GetWindowRect(Hwnd, &rRect);} void TreeWindow::Show(int show) { ShowWindow(Hwnd, (show) ? SW_SHOW : SW_HIDE); }