private dataformat almost working - minor fixes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4583 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
f49f2b0c33
commit
329e50732b
@ -1568,6 +1568,18 @@ wxLayoutList::InternalClear(void)
|
||||
m_CursorStyleInfo = m_DefaultStyleInfo;
|
||||
}
|
||||
|
||||
void
|
||||
wxLayoutList::Read(wxString &istr)
|
||||
{
|
||||
while(istr.Length())
|
||||
{
|
||||
wxLayoutObject *obj = wxLayoutObject::Read(istr);
|
||||
if(obj)
|
||||
Insert(obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
wxLayoutList::SetFont(int family, int size, int style, int weight,
|
||||
int underline, wxColour *fg,
|
||||
@ -2352,15 +2364,10 @@ wxLayoutList::Draw(wxDC &dc,
|
||||
}
|
||||
InvalidateUpdateRect();
|
||||
|
||||
#ifdef DEBUG
|
||||
if ( m_Selection.m_valid )
|
||||
{
|
||||
WXLO_DEBUG(("Selection is %s : %ld,%ld/%ld,%ld",
|
||||
m_Selection.m_valid ? "valid" : "invalid",
|
||||
m_Selection.m_CursorA.x, m_Selection.m_CursorA.y,
|
||||
m_Selection.m_CursorB.x, m_Selection.m_CursorB.y));
|
||||
}
|
||||
#endif
|
||||
WXLO_DEBUG(("Selection is %s : l%d,%ld/%ld,%ld",
|
||||
m_Selection.m_valid ? "valid" : "invalid",
|
||||
m_Selection.m_CursorA.x, m_Selection.m_CursorA.y,
|
||||
m_Selection.m_CursorB.x, m_Selection.m_CursorB.y));
|
||||
}
|
||||
|
||||
wxLayoutObject *
|
||||
@ -2860,7 +2867,6 @@ wxLayoutList::GetSelection(wxLayoutDataObject *wxlo, bool invalidate)
|
||||
exp->content.object->Write(string);
|
||||
delete exp;
|
||||
}
|
||||
|
||||
wxlo->SetLayoutData(string);
|
||||
}
|
||||
return llist;
|
||||
|
@ -1140,6 +1140,12 @@ public:
|
||||
|
||||
/// get the line by number
|
||||
wxLayoutLine *GetLine(CoordType index) const;
|
||||
|
||||
/** Reads objects from a string and inserts them.
|
||||
@param istr stream to read from, will bee changed
|
||||
*/
|
||||
void Read(wxString &istr);
|
||||
|
||||
private:
|
||||
/// Clear the list.
|
||||
void InternalClear(void);
|
||||
|
@ -88,7 +88,7 @@ static const int Y_SCROLL_PAGE = 20;
|
||||
|
||||
|
||||
|
||||
#define wxUSE_PRIVATE_CLIPBOARD_FORMAT 1
|
||||
#define wxUSE_PRIVATE_CLIPBOARD_FORMAT 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// event tables
|
||||
@ -496,20 +496,17 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
if ( IsDirectionKey(keyCode) )
|
||||
{
|
||||
// just continue the old selection
|
||||
if ( m_Selecting )
|
||||
{
|
||||
if( event.ShiftDown() )
|
||||
if ( m_Selecting && event.ShiftDown() )
|
||||
m_llist->ContinueSelection();
|
||||
else
|
||||
{
|
||||
m_llist->DiscardSelection();
|
||||
m_Selecting = false;
|
||||
}
|
||||
}
|
||||
else if( event.ShiftDown() )
|
||||
else
|
||||
{
|
||||
m_Selecting = true;
|
||||
m_llist->StartSelection();
|
||||
m_llist->DiscardSelection();
|
||||
m_Selecting = false;
|
||||
if( event.ShiftDown() )
|
||||
{
|
||||
m_Selecting = true;
|
||||
m_llist->StartSelection();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -631,8 +628,12 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
m_llist->DeleteToEndOfLine();
|
||||
SetDirty();
|
||||
break;
|
||||
case 'c':
|
||||
Copy();
|
||||
break;
|
||||
case 'v':
|
||||
Paste();
|
||||
// if SHIFT is down, use primary selection
|
||||
Paste( event.ShiftDown() );
|
||||
break;
|
||||
case 'x':
|
||||
Cut();
|
||||
@ -1079,11 +1080,14 @@ wxLayoutWindow::Paste(bool primary)
|
||||
{
|
||||
#if wxUSE_PRIVATE_CLIPBOARD_FORMAT
|
||||
wxLayoutDataObject wxldo;
|
||||
if ( wxTheClipboard->GetData(wxldo) )
|
||||
if (wxTheClipboard->IsSupported( wxldo.GetFormat() ))
|
||||
{
|
||||
//FIXME: missing functionality m_llist->Insert(wxldo.GetList());
|
||||
wxLayoutImportText(m_llist, wxldo.GetLayoutData());
|
||||
SetDirty();
|
||||
if(wxTheClipboard->GetData(wxldo))
|
||||
{
|
||||
wxString str = wxldo.GetLayoutData();
|
||||
m_llist->Read(str);
|
||||
RequestUpdate();
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -1112,20 +1116,10 @@ wxLayoutWindow::Copy(bool invalidate)
|
||||
m_llist->EndSelection();
|
||||
}
|
||||
|
||||
#if wxUSE_PRIVATE_CLIPBOARD_FORMAT
|
||||
// the data object which holds all different data objects, one for each
|
||||
// format we support
|
||||
wxDataObjectComposite *data = new wxDataObjectComposite;
|
||||
#endif
|
||||
|
||||
wxLayoutDataObject *wldo = new wxLayoutDataObject;
|
||||
wxLayoutList *llist = m_llist->GetSelection(wldo, invalidate);
|
||||
if(! llist)
|
||||
{
|
||||
delete wldo;
|
||||
delete data;
|
||||
return FALSE;
|
||||
}
|
||||
// Export selection as text:
|
||||
wxString text;
|
||||
wxLayoutExportObject *exp;
|
||||
@ -1138,7 +1132,6 @@ wxLayoutWindow::Copy(bool invalidate)
|
||||
}
|
||||
delete llist;
|
||||
|
||||
bool rc;
|
||||
// The exporter always appends a newline, so we chop it off if it
|
||||
// is there:
|
||||
{
|
||||
@ -1151,19 +1144,20 @@ wxLayoutWindow::Copy(bool invalidate)
|
||||
|
||||
if (wxTheClipboard->Open())
|
||||
{
|
||||
#if wxUSE_PRIVATE_CLIPBOARD_FORMAT
|
||||
data->Add(wldo, TRUE /* preferred */);
|
||||
data->Add(new wxTextDataObject(text));
|
||||
#endif
|
||||
wxTextDataObject *data = new wxTextDataObject( text );
|
||||
bool rc;
|
||||
|
||||
rc = wxTheClipboard->SetData( data );
|
||||
#if wxUSE_PRIVATE_CLIPBOARD_FORMAT
|
||||
rc |= wxTheClipboard->SetData( wldo );
|
||||
#endif
|
||||
wxTheClipboard->Close();
|
||||
return rc;
|
||||
}
|
||||
else
|
||||
rc = FALSE;
|
||||
|
||||
delete wldo;
|
||||
delete data;
|
||||
return rc;
|
||||
delete wldo;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool
|
||||
|
Loading…
Reference in New Issue
Block a user